Merge branch 'hotfix/21.56.9' into master
[gitter.git] / server / web / middlewares / logout.js
blobd5e515860cd8cea76a02c799859b3350597785f4
1 'use strict';
3 var env = require('gitter-web-env');
4 var winston = env.logger;
5 var nconf = env.config;
6 const asyncHandler = require('express-async-handler');
7 var rememberMe = require('./rememberme-middleware');
8 const oauthService = require('gitter-web-oauth');
9 const getAccessToken = require('../get-access-token-from-req');
11 var authCookieName = nconf.get('web:cookiePrefix') + 'auth';
12 var sessionCookieName = nconf.get('web:cookiePrefix') + 'session';
14 // This isn't actually a middleware, it's a useful function that
15 // should probably be put somewhere else
16 function logoutPreserveSession(req, res, next) {
17   req.logout();
19   var authCookie = req.cookies && req.cookies[authCookieName];
21   if (authCookie) {
22     res.clearCookie(authCookieName, { domain: nconf.get('web:cookieDomain') });
24     return rememberMe.deleteRememberMeToken(authCookie, next);
25   }
27   return next();
30 module.exports = asyncHandler(async (req, res, next) => {
31   var user = req.user;
32   var userId = user && user.id;
33   var username = user && user.username;
35   winston.info('logout: logging out user', {
36     userId: userId,
37     username: username
38   });
40   const accessToken = getAccessToken(req);
41   await oauthService.deleteToken(accessToken);
43   logoutPreserveSession(req, res, () => {
44     res.clearCookie(sessionCookieName, { domain: nconf.get('web:cookieDomain') });
46     req.session.destroy(function(err) {
47       req.session = null;
48       next(err);
49     });
50   });
51 });