import { Router } from 'express' import passport from 'passport' import { OAuth2CustomStrategy } from './oauth2-custom-strategy' import { config } from '../../../config' import { passportGeneralCallback } from '../utils' import { AuthMiddleware } from '../interface' export const OAuth2Middleware: AuthMiddleware = { getMiddleware (): Router { const OAuth2Auth = Router() passport.use(new OAuth2CustomStrategy({ authorizationURL: config.oauth2.authorizationURL, tokenURL: config.oauth2.tokenURL, clientID: config.oauth2.clientID, clientSecret: config.oauth2.clientSecret, callbackURL: config.serverURL + '/auth/oauth2/callback', userProfileURL: config.oauth2.userProfileURL, scope: config.oauth2.scope, state: true }, passportGeneralCallback)) OAuth2Auth.get('/auth/oauth2', passport.authenticate('oauth2')) // github auth callback OAuth2Auth.get('/auth/oauth2/callback', passport.authenticate('oauth2', { successReturnToOrRedirect: config.serverURL + '/', failureRedirect: config.serverURL + '/' }) ) return OAuth2Auth } }