OpenAuth_server/src/api/internal/oauth.ts

42 lines
1.3 KiB
TypeScript
Raw Normal View History

2018-11-06 19:48:50 +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";
2020-08-07 14:16:39 +00:00
export const OAuthInternalApp = Stacker(
GetClientAuthMiddleware(false, true),
UserMiddleware,
2018-11-06 19:48:50 +00:00
async (req: Request, res: Response) => {
2020-08-07 14:16:39 +00:00
let { redirect_uri, state } = req.query;
2018-11-06 19:48:50 +00:00
if (!redirect_uri) {
2020-08-07 14:16:39 +00:00
throw new RequestError(
"No redirect url set!",
HttpStatusCode.BAD_REQUEST
);
2018-11-06 19:48:50 +00:00
}
let sep = redirect_uri.indexOf("?") < 0 ? "?" : "&";
let code = ClientCode.new({
user: req.user._id,
client: req.client._id,
validTill: moment().add(30, "minutes").toDate(),
code: randomBytes(16).toString("hex"),
2020-08-07 14:16:39 +00:00
permissions: [],
2018-11-06 19:48:50 +00:00
});
await ClientCode.save(code);
2020-08-07 14:16:39 +00:00
res.redirect(
redirect_uri +
sep +
"code=" +
code.code +
(state ? "&state=" + state : "")
);
2018-11-06 19:48:50 +00:00
res.end();
2020-08-07 14:16:39 +00:00
}
);