2023-04-14 13:13:53 +00:00
|
|
|
import { Request, Response, NextFunction } from "express";
|
|
|
|
import Stacker from "../middlewares/stacker";
|
|
|
|
import { GetClientAuthMiddleware } from "../middlewares/client";
|
|
|
|
import { UserMiddleware } from "../middlewares/user";
|
|
|
|
import RequestError, { HttpStatusCode } from "../../helper/request_error";
|
|
|
|
import ClientCode from "../../models/client_code";
|
|
|
|
import moment = require("moment");
|
|
|
|
import { randomBytes } from "crypto";
|
|
|
|
export const OAuthInternalApp = Stacker(
|
|
|
|
GetClientAuthMiddleware(false, true),
|
|
|
|
UserMiddleware,
|
|
|
|
async (req: Request, res: Response) => {
|
|
|
|
let { redirect_uri, state } = req.query as { [key: string]: string };
|
|
|
|
if (!redirect_uri) {
|
|
|
|
throw new RequestError(
|
|
|
|
"No redirect url set!",
|
|
|
|
HttpStatusCode.BAD_REQUEST
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
let redurl = new URL(redirect_uri);
|
|
|
|
|
|
|
|
let code = ClientCode.new({
|
|
|
|
user: req.user._id,
|
|
|
|
client: req.client._id,
|
|
|
|
validTill: moment().add(30, "minutes").toDate(),
|
|
|
|
code: randomBytes(16).toString("hex"),
|
|
|
|
permissions: [],
|
|
|
|
});
|
|
|
|
await ClientCode.save(code);
|
|
|
|
|
|
|
|
redurl.searchParams.set("code", code.code);
|
|
|
|
if (state)
|
|
|
|
redurl.searchParams.set("state", state);
|
|
|
|
|
|
|
|
res.redirect(redurl.href);
|
|
|
|
res.end();
|
|
|
|
}
|
|
|
|
);
|