UNPKG

wa-chat-server

Version:

Watson Assistant powered chat server

111 lines (110 loc) 5.04 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.authentication = void 0; const express_1 = __importDefault(require("express")); const Session_1 = require("../class/Session/Session"); const AuthenticationService_1 = require("../lib/Azure/AuthenticationService"); const authentication = (logger, config) => { const router = express_1.default.Router(); router.use(express_1.default.json({ limit: '1mb' })); /* * `/loginUrl` returns the URL of the external Azure login page where the user should be * redirected in order to log in */ router.get('/loginUrl', (req, res) => __awaiter(void 0, void 0, void 0, function* () { const request = req.query || {}; let response = null; const redirectUrl = request.redirectUrl; if (!redirectUrl) { response = { message: "Parameter 'redirectUrl' missing" }; } const session = yield new Session_1.Session(request.sessionId).start(); const logHeader = `GET ${req.path}, sessionId=${session.sessionId}`; if (response) { logger.error(logHeader, { request, response }); res.status(400).json(response); } else { const authService = new AuthenticationService_1.AuthenticationService({ config, logger, session, redirectUrl }); const loginUrl = yield authService.getLoginUrl(); const response = { loginUrl, sessionId: session.sessionId }; yield session.save(); logger.info(logHeader, { request, response }); res.json({ response }); } })); /* * `/loginUrl` Returns information about the logged user */ router.post('/loginWithAuthorizationCode', (req, res) => __awaiter(void 0, void 0, void 0, function* () { const authorizationCode = req.body.authorizationCode; const securityCode = req.body.securityCode; const redirectUrl = req.body.redirectUrl; const sessionId = req.body.sessionId; let response = null; const logHeader = `POST ${req.path}, sessionId=${req.body.sessionId}`; Object.entries({ authorizationCode, securityCode, redirectUrl }).forEach(([param, value]) => { if (!value) { response = { message: `Parameter ${param} is missing` }; } }); if (response) { logger.error(logHeader, { request: req.body, response }); res.status(400).json(response); } else { const isNewSession = !sessionId; const session = yield new Session_1.Session(sessionId).start(); const authService = new AuthenticationService_1.AuthenticationService({ config, logger, authorizationCode, securityCode, session, isNewSession, redirectUrl, }); try { const response = yield authService.authenticate(); logger.info(logHeader, { request: req.body, response }); res.json(response); } catch (error) { logger.error(logHeader, { request: req.body, error }); response = { message: error.toString() }; res.status(500); res.json(response); } finally { yield session.save(); } } })); /* * `/logout` Logs the user out from Azure; sessionId remains untouched */ router.post('/logout', (req, res) => __awaiter(void 0, void 0, void 0, function* () { const sessionId = req.body.sessionId; const session = yield new Session_1.Session(sessionId).start(); const logHeader = `POST ${req.path}, sessionId=${session.sessionId}`; const authService = new AuthenticationService_1.AuthenticationService({ config, logger, session }); const response = yield authService.logout(); yield session.save(); logger.info(logHeader, { request: req.body, response }); res.json(response); })); return router; }; exports.authentication = authentication;