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.
27 lines
1.1 KiB
27 lines
1.1 KiB
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; |