initial-setup for github signin

This commit is contained in:
Juned Khan
2023-08-02 21:28:35 +05:30
parent 9dac06744b
commit 960aceed29
4 changed files with 78 additions and 0 deletions
+56
View File
@@ -1,10 +1,66 @@
import express from "express";
const router = express.Router();
import { body } from "express-validator";
import passport from "passport";
import { requireAuth, validateRequest } from "../../middleware";
import { authController } from "../../controllers/v1";
import { authLimiter } from "../../helpers/rateLimiter";
import { AUTH_MODE_JWT } from "../../variables";
import { User, AuthProvider } from '../../models';
import { createToken } from '../../helpers/auth';
import { getJwtProviderAuthLifetime, getJwtProviderAuthSecret } from '../../config';
import { ssoController } from "../../ee/controllers/v1";
var GitHubStrategy = require('passport-github').Strategy;
passport.use(new GitHubStrategy({
passReqToCallback: true,
clientID: process.env['CLIENT_ID_GITHUB_LOGIN'],
clientSecret: process.env['CLIENT_SECRET_GITHUB'],
callbackURL: "/api/v1/auth/github/callback"
},
async (req : express.Request, accessToken : any, refreshToken : any, profile : any, cb : any) => {
const email = profile.emails[0].value;
let user = await User.findOne({
email
});
if (!user) {
user = await new User({
email: email,
authProvider: AuthProvider.GITHUB,
authId: profile.id,
firstName: profile.displayName,
}).save();
}
const isUserCompleted = true;
const providerAuthToken = createToken({
payload: {
userId: profile.id.toString(),
email: email,
isUserCompleted,
...(req.query.state ? {
callbackPort: req.query.state as string
} : {})
},
expiresIn: await getJwtProviderAuthLifetime(),
secret: await getJwtProviderAuthSecret(),
});
req.isUserCompleted = isUserCompleted;
req.providerAuthToken = providerAuthToken;
return cb(null, profile);
}
));
router.get('/github', passport.authenticate('github', { failureRedirect: '/login/provider/error', session: false }), ssoController.redirectSSO);
router.get('/github/callback',
passport.authenticate('github', { failureRedirect: '/login/provider/error', session: false }
),
function(req, res, next) {
// Successful authentication, redirect home.
console.log("github success");
res.redirect(`/login/sso?token=${encodeURIComponent(req.providerAuthToken)}`);
next();
});
router.post("/token", validateRequest, authController.getNewToken);