You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
1.2 KiB
29 lines
1.2 KiB
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 |
|
if (!redirect_uri) { |
|
throw new RequestError("No redirect url set!", HttpStatusCode.BAD_REQUEST); |
|
} |
|
|
|
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"), |
|
permissions: [] |
|
}); |
|
await ClientCode.save(code); |
|
|
|
res.redirect(redirect_uri + sep + "code=" + code.code + (state ? "&state=" + state : "")); |
|
res.end(); |
|
}); |