27 lines
1.1 KiB
TypeScript
27 lines
1.1 KiB
TypeScript
import { Request, Response } from "express";
|
|
import promiseMiddleware from "../../helper/promiseMiddleware";
|
|
import RequestError, { HttpStatusCode } from "../../helper/request_error";
|
|
import RefreshToken from "../../models/refresh_token";
|
|
import User from "../../models/user";
|
|
import Permission from "../../models/permissions";
|
|
import Client from "../../models/client";
|
|
import getOAuthJWT from "../../helper/jwt";
|
|
|
|
const JWTRoute = promiseMiddleware(async (req: Request, res: Response) => {
|
|
let { refreshtoken } = req.query;
|
|
if (!refreshtoken) throw new RequestError(req.__("Refresh token not set"), HttpStatusCode.BAD_REQUEST);
|
|
|
|
let token = await RefreshToken.findOne({ where: { token: refreshtoken }, include: [User, Permission, Client] });
|
|
if (!token) throw new RequestError(req.__("Invalid token"), HttpStatusCode.BAD_REQUEST);
|
|
|
|
let user = await User.findById(token.user);
|
|
if (!user) {
|
|
//TODO handle error!
|
|
}
|
|
|
|
let client = await Client.findById(token.client);
|
|
|
|
let jwt = await getOAuthJWT({ user, permissions: token.permissions, client });
|
|
res.json({ token: jwt });
|
|
})
|
|
export default JWTRoute; |