import { Request, Response } from "express"; import { JWTHelper } from "../helpers/jwtHelper"; import { JWTToken } from "../type/jwtTypes"; import InternalException from "../exceptions/internalException"; import RefreshCommandHandler from "../command/refreshCommandHandler"; import { CreateRefreshCommand, DeleteRefreshCommand } from "../command/refreshCommand"; import UserService from "../service/user/userService"; import speakeasy from "speakeasy"; import UnauthorizedRequestException from "../exceptions/unauthorizedRequestException"; import RefreshService from "../service/refreshService"; import WebapiService from "../service/user/webapiService"; import ForbiddenRequestException from "../exceptions/forbiddenRequestException"; import WebapiCommandHandler from "../command/user/webapi/webapiCommandHandler"; /** * @description Check authentication status by token * @param req {Request} Express req object * @param res {Response} Express res object * @returns {Promise<*>} */ export async function getWebApiAccess(req: Request, res: Response): Promise { const bearer = req.headers.authorization?.split(" ")?.[1] ?? undefined; let { id, expiry } = await WebapiService.getByToken(bearer); if (expiry != null && new Date() > new Date(expiry)) { throw new ForbiddenRequestException("api token expired"); } await WebapiCommandHandler.updateUsage({ id }); let accessToken = await JWTHelper.buildWebapiToken(bearer, expiry); res.json({ accessToken, }); }