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

View File

@@ -45,6 +45,7 @@
"node-cache": "^5.1.2",
"nodemailer": "^6.8.0",
"passport": "^0.6.0",
"passport-github": "^1.1.0",
"passport-google-oauth20": "^2.0.0",
"posthog-node": "^2.6.0",
"probot": "^12.3.1",
@@ -11385,6 +11386,17 @@
"url": "https://github.com/sponsors/jaredhanson"
}
},
"node_modules/passport-github": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/passport-github/-/passport-github-1.1.0.tgz",
"integrity": "sha512-XARXJycE6fFh/dxF+Uut8OjlwbFEXgbPVj/+V+K7cvriRK7VcAOm+NgBmbiLM9Qv3SSxEAV+V6fIk89nYHXa8A==",
"dependencies": {
"passport-oauth2": "1.x.x"
},
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/passport-google-oauth20": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",
@@ -22858,6 +22870,14 @@
"utils-merge": "^1.0.1"
}
},
"passport-github": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/passport-github/-/passport-github-1.1.0.tgz",
"integrity": "sha512-XARXJycE6fFh/dxF+Uut8OjlwbFEXgbPVj/+V+K7cvriRK7VcAOm+NgBmbiLM9Qv3SSxEAV+V6fIk89nYHXa8A==",
"requires": {
"passport-oauth2": "1.x.x"
}
},
"passport-google-oauth20": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",

View File

@@ -36,6 +36,7 @@
"node-cache": "^5.1.2",
"nodemailer": "^6.8.0",
"passport": "^0.6.0",
"passport-github": "^1.1.0",
"passport-google-oauth20": "^2.0.0",
"posthog-node": "^2.6.0",
"probot": "^12.3.1",

View File

@@ -3,6 +3,7 @@ import { Document, Schema, Types, model } from "mongoose";
export enum AuthProvider {
EMAIL = "email",
GOOGLE = "google",
GITHUB = "github",
OKTA_SAML = "okta-saml",
AZURE_SAML = "azure-saml",
JUMPCLOUD_SAML = "jumpcloud-saml",

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);