const { isEnabled } = require('@librechat/api'); const { logger } = require('@librechat/data-schemas'); const { syncUserEntraGroupMemberships } = require('~/server/services/PermissionService'); const { setAuthTokens, setOpenIDAuthTokens } = require('~/server/services/AuthService'); const { checkBan } = require('~/server/middleware'); const domains = { client: process.env.DOMAIN_CLIENT, server: process.env.DOMAIN_SERVER, }; function createOAuthHandler(redirectUri = domains.client) { /** * A handler to process OAuth authentication results. * @type {Function} * @param {ServerRequest} req - Express request object. * @param {ServerResponse} res - Express response object. * @param {NextFunction} next - Express next middleware function. */ return async (req, res, next) => { try { if (res.headersSent) { return; } await checkBan(req, res); if (req.banned) { return; } if ( req.user && req.user.provider == 'openid' && isEnabled(process.env.OPENID_REUSE_TOKENS) === true ) { await syncUserEntraGroupMemberships(req.user, req.user.tokenset.access_token); setOpenIDAuthTokens(req.user.tokenset, res, req.user._id.toString()); } else { await setAuthTokens(req.user._id, res); } res.redirect(redirectUri); } catch (err) { logger.error('Error in setting authentication tokens:', err); next(err); } }; } module.exports = { createOAuthHandler, };