|
const passport = require('passport'); |
|
const express = require('express'); |
|
const router = express.Router(); |
|
const config = require('../../../config/loader'); |
|
const { setAuthTokens } = require('../services/AuthService'); |
|
const { loginLimiter, checkBan } = require('../middleware'); |
|
const domains = config.domains; |
|
|
|
router.use(loginLimiter); |
|
|
|
const oauthHandler = async (req, res) => { |
|
try { |
|
await checkBan(req, res); |
|
if (req.banned) { |
|
return; |
|
} |
|
await setAuthTokens(req.user._id, res); |
|
res.redirect(domains.client); |
|
} catch (err) { |
|
console.error('Error in setting authentication tokens:', err); |
|
} |
|
}; |
|
|
|
|
|
|
|
|
|
router.get( |
|
'/google', |
|
passport.authenticate('google', { |
|
scope: ['openid', 'profile', 'email'], |
|
session: false, |
|
}), |
|
); |
|
|
|
router.get( |
|
'/google/callback', |
|
passport.authenticate('google', { |
|
failureRedirect: `${domains.client}/login`, |
|
failureMessage: true, |
|
session: false, |
|
scope: ['openid', 'profile', 'email'], |
|
}), |
|
oauthHandler, |
|
); |
|
|
|
router.get( |
|
'/facebook', |
|
passport.authenticate('facebook', { |
|
scope: ['public_profile'], |
|
profileFields: ['id', 'email', 'name'], |
|
session: false, |
|
}), |
|
); |
|
|
|
router.get( |
|
'/facebook/callback', |
|
passport.authenticate('facebook', { |
|
failureRedirect: `${domains.client}/login`, |
|
failureMessage: true, |
|
session: false, |
|
scope: ['public_profile'], |
|
profileFields: ['id', 'email', 'name'], |
|
}), |
|
oauthHandler, |
|
); |
|
|
|
router.get( |
|
'/openid', |
|
passport.authenticate('openid', { |
|
session: false, |
|
}), |
|
); |
|
|
|
router.get( |
|
'/openid/callback', |
|
passport.authenticate('openid', { |
|
failureRedirect: `${domains.client}/login`, |
|
failureMessage: true, |
|
session: false, |
|
}), |
|
oauthHandler, |
|
); |
|
|
|
router.get( |
|
'/github', |
|
passport.authenticate('github', { |
|
scope: ['user:email', 'read:user'], |
|
session: false, |
|
}), |
|
); |
|
|
|
router.get( |
|
'/github/callback', |
|
passport.authenticate('github', { |
|
failureRedirect: `${domains.client}/login`, |
|
failureMessage: true, |
|
session: false, |
|
scope: ['user:email', 'read:user'], |
|
}), |
|
oauthHandler, |
|
); |
|
router.get( |
|
'/discord', |
|
passport.authenticate('discord', { |
|
scope: ['identify', 'email'], |
|
session: false, |
|
}), |
|
); |
|
|
|
router.get( |
|
'/discord/callback', |
|
passport.authenticate('discord', { |
|
failureRedirect: `${domains.client}/login`, |
|
failureMessage: true, |
|
session: false, |
|
scope: ['identify', 'email'], |
|
}), |
|
oauthHandler, |
|
); |
|
|
|
module.exports = router; |
|
|