| const cookies = require('cookie'); |
| const { isEnabled } = require('@librechat/api'); |
| const { logger } = require('@librechat/data-schemas'); |
| const { logoutUser } = require('~/server/services/AuthService'); |
| const { getOpenIdConfig } = require('~/strategies'); |
|
|
| const logoutController = async (req, res) => { |
| const refreshToken = req.headers.cookie ? cookies.parse(req.headers.cookie).refreshToken : null; |
| try { |
| const logout = await logoutUser(req, refreshToken); |
| const { status, message } = logout; |
| res.clearCookie('refreshToken'); |
| res.clearCookie('token_provider'); |
| const response = { message }; |
| if ( |
| req.user.openidId != null && |
| isEnabled(process.env.OPENID_USE_END_SESSION_ENDPOINT) && |
| process.env.OPENID_ISSUER |
| ) { |
| const openIdConfig = getOpenIdConfig(); |
| if (!openIdConfig) { |
| logger.warn( |
| '[logoutController] OpenID config not found. Please verify that the open id configuration and initialization are correct.', |
| ); |
| } else { |
| const endSessionEndpoint = openIdConfig |
| ? openIdConfig.serverMetadata().end_session_endpoint |
| : null; |
| if (endSessionEndpoint) { |
| response.redirect = endSessionEndpoint; |
| } else { |
| logger.warn( |
| '[logoutController] end_session_endpoint not found in OpenID issuer metadata. Please verify that the issuer is correct.', |
| ); |
| } |
| } |
| } |
| return res.status(status).send(response); |
| } catch (err) { |
| logger.error('[logoutController]', err); |
| return res.status(500).json({ message: err.message }); |
| } |
| }; |
|
|
| module.exports = { |
| logoutController, |
| }; |
|
|