Skip to content

Commit ca7aa2f

Browse files
Merge pull request #10 from RomanBachaloSigmaSoftware/fix/acg-flow
Fix AuthCodeGrant issue
2 parents fe98ed5 + 5c7ad44 commit ca7aa2f

File tree

4 files changed

+29
-15
lines changed

4 files changed

+29
-15
lines changed

server/controllers/acgController.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ class ACGController {
2323

2424
login(req, res, next) {
2525
this.internalLogout(req);
26-
req.session.authMethod = AuthMethod.ACG;
2726
passport.authenticate('docusign')(req, res, next);
2827
}
2928

@@ -36,6 +35,7 @@ class ACGController {
3635
const { accessToken, tokenExpirationTimestamp, name, email } = req.user;
3736
this.logger.info(`Received accessToken: |${accessToken}|`);
3837
this.logger.info(`Expires at ${tokenExpirationTimestamp.format('dddd, MMMM Do YYYY, h:mm:ss a')}`);
38+
req.session.authMethod = AuthMethod.ACG;
3939

4040
// The DocuSign Passport strategy looks up the user's account information via OAuth::userInfo.
4141
// See https://developers.docusign.com/esign-rest-api/guides/authentication/user-info-endpoints

server/middlewares/authMiddleware.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
1+
const resolveAuthController = require("../utils/authControllerResolver");
2+
13
function authMiddleware(req, res, next) {
2-
const isTokenValid = req.dsAuth.checkToken(req);
4+
const dsAuth = resolveAuthController(req);
5+
if (!dsAuth) {
6+
req.logger.info(`[${req.originalUrl}] Cannot resolve auth method, returns 401`);
7+
return res.status(401).send();
8+
}
9+
10+
const isTokenValid = dsAuth.checkToken(req);
311
if (!isTokenValid) {
412
req.logger.info(`[${req.originalUrl}] Access token expired or doesn't exist, returns 401`);
5-
req.dsAuth.internalLogout(req, res, next);
13+
dsAuth.internalLogout(req, res, next);
614
res.status(401).send();
715
return;
816
}

server/server.js

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,18 @@ const bodyParser = require('body-parser');
66
const session = require('express-session'); // https://github.com/expressjs/session
77
const MemoryStore = require('memorystore')(session); // https://github.com/roccomuso/memorystore
88
const passport = require('passport');
9-
const JwtController = require('./controllers/jwtController');
10-
const ACGController = require('./controllers/acgController');
119
const cors = require('cors');
1210
const chalk = require('chalk');
1311
const DocusignStrategy = require('passport-docusign');
1412
const moment = require('moment');
1513
const config = require('./config');
16-
const { EMBEDDED_SENDING_SCOPES, BackendRoute, AuthMethod } = require('./constants');
14+
const { EMBEDDED_SENDING_SCOPES, BackendRoute } = require('./constants');
1715
const authRouter = require('./routes/authRouter');
1816
const templatesRouter = require('./routes/templatesRouter');
1917
const contactsRouter = require('./routes/contactsRouter');
2018
const envelopesRouter = require('./routes/envelopesRouter');
2119
const createPrefixedLogger = require('./utils/logger');
20+
const resolveAuthController = require('./utils/authControllerResolver');
2221

2322
const logger = createPrefixedLogger();
2423
const maxSessionAge = 1000 * 60 * 60 * 24 * 1; // One day
@@ -42,18 +41,10 @@ const app = express()
4241
.use(passport.session())
4342
// Add an instance of dsAuthController to req
4443
.use((req, res, next) => {
45-
req.dsAuthCodeGrant = new ACGController();
46-
req.dsAuthJwt = new JwtController();
4744
req.logger = logger;
4845
req.logger.info(`[${req.originalUrl}]`);
4946

50-
switch (true) {
51-
case req.session.authMethod === AuthMethod.JWT || req.url.startsWith(`${BackendRoute.AUTH}/jwt`):
52-
req.dsAuth = req.dsAuthJwt;
53-
break;
54-
case req.session.authMethod === AuthMethod.ACG || req.url.startsWith(`${BackendRoute.AUTH}/passport`):
55-
req.dsAuth = req.dsAuthCodeGrant;
56-
}
47+
req.dsAuth = resolveAuthController(req);
5748

5849
next();
5950
})
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const ACGController = require("../controllers/acgController");
2+
const JwtController = require("../controllers/jwtController");
3+
const { BackendRoute, AuthMethod } = require("../constants");
4+
5+
const resolveAuthController = req => {
6+
if (req.session.authMethod === AuthMethod.JWT || req.url.startsWith(`${BackendRoute.AUTH}/jwt`)) {
7+
return new JwtController();
8+
}
9+
if (req.session.authMethod === AuthMethod.ACG || req.url.startsWith(`${BackendRoute.AUTH}/passport`)) {
10+
return new ACGController();
11+
}
12+
return null;
13+
};
14+
15+
module.exports = resolveAuthController;

0 commit comments

Comments
 (0)