mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 18:27:36 +00:00
initial-setup for github signin
This commit is contained in:
Generated
+20
@@ -45,6 +45,7 @@
|
|||||||
"node-cache": "^5.1.2",
|
"node-cache": "^5.1.2",
|
||||||
"nodemailer": "^6.8.0",
|
"nodemailer": "^6.8.0",
|
||||||
"passport": "^0.6.0",
|
"passport": "^0.6.0",
|
||||||
|
"passport-github": "^1.1.0",
|
||||||
"passport-google-oauth20": "^2.0.0",
|
"passport-google-oauth20": "^2.0.0",
|
||||||
"posthog-node": "^2.6.0",
|
"posthog-node": "^2.6.0",
|
||||||
"probot": "^12.3.1",
|
"probot": "^12.3.1",
|
||||||
@@ -11385,6 +11386,17 @@
|
|||||||
"url": "https://github.com/sponsors/jaredhanson"
|
"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": {
|
"node_modules/passport-google-oauth20": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",
|
||||||
@@ -22858,6 +22870,14 @@
|
|||||||
"utils-merge": "^1.0.1"
|
"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": {
|
"passport-google-oauth20": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
"node-cache": "^5.1.2",
|
"node-cache": "^5.1.2",
|
||||||
"nodemailer": "^6.8.0",
|
"nodemailer": "^6.8.0",
|
||||||
"passport": "^0.6.0",
|
"passport": "^0.6.0",
|
||||||
|
"passport-github": "^1.1.0",
|
||||||
"passport-google-oauth20": "^2.0.0",
|
"passport-google-oauth20": "^2.0.0",
|
||||||
"posthog-node": "^2.6.0",
|
"posthog-node": "^2.6.0",
|
||||||
"probot": "^12.3.1",
|
"probot": "^12.3.1",
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { Document, Schema, Types, model } from "mongoose";
|
|||||||
export enum AuthProvider {
|
export enum AuthProvider {
|
||||||
EMAIL = "email",
|
EMAIL = "email",
|
||||||
GOOGLE = "google",
|
GOOGLE = "google",
|
||||||
|
GITHUB = "github",
|
||||||
OKTA_SAML = "okta-saml",
|
OKTA_SAML = "okta-saml",
|
||||||
AZURE_SAML = "azure-saml",
|
AZURE_SAML = "azure-saml",
|
||||||
JUMPCLOUD_SAML = "jumpcloud-saml",
|
JUMPCLOUD_SAML = "jumpcloud-saml",
|
||||||
|
|||||||
@@ -1,10 +1,66 @@
|
|||||||
import express from "express";
|
import express from "express";
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
import { body } from "express-validator";
|
import { body } from "express-validator";
|
||||||
|
import passport from "passport";
|
||||||
import { requireAuth, validateRequest } from "../../middleware";
|
import { requireAuth, validateRequest } from "../../middleware";
|
||||||
import { authController } from "../../controllers/v1";
|
import { authController } from "../../controllers/v1";
|
||||||
import { authLimiter } from "../../helpers/rateLimiter";
|
import { authLimiter } from "../../helpers/rateLimiter";
|
||||||
import { AUTH_MODE_JWT } from "../../variables";
|
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);
|
router.post("/token", validateRequest, authController.getNewToken);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user