// (C) 2007-2019 GoodData Corporation import * as HttpStatusCodes from "http-status-codes"; import { RequestHandler, Request, Response, NextFunction } from "express"; import { isAuthorized } from "../endpoints/helpers/authorization"; const STATIC_FILE = /\.(css|js|html|png|gif|svg|woff|ttf)$/g; export interface IAuthorizationOptions { publicPaths: string[]; } export function authorization(options: IAuthorizationOptions): RequestHandler { return (req: Request, res: Response, next: NextFunction) => { const isPublicPath = options.publicPaths.indexOf(req.path) >= 0; const isStaticFile = req.path.match(STATIC_FILE); const isRoot = req.path === "/"; if (isPublicPath || isStaticFile || isRoot || isAuthorized(req.session)) { next(); } else { res.status(HttpStatusCodes.UNAUTHORIZED).end(); } }; }