2018-11-06 19:48:50 +00:00
|
|
|
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 Client from "../../models/client";
|
2020-03-09 14:03:26 +00:00
|
|
|
import { getAccessTokenJWT } from "../../helper/jwt";
|
2018-11-06 19:48:50 +00:00
|
|
|
|
|
|
|
const JWTRoute = promiseMiddleware(async (req: Request, res: Response) => {
|
|
|
|
let { refreshtoken } = req.query;
|
2020-08-07 14:16:39 +00:00
|
|
|
if (!refreshtoken)
|
|
|
|
throw new RequestError(
|
|
|
|
req.__("Refresh token not set"),
|
|
|
|
HttpStatusCode.BAD_REQUEST
|
|
|
|
);
|
2018-11-06 19:48:50 +00:00
|
|
|
|
2018-11-06 20:27:07 +00:00
|
|
|
let token = await RefreshToken.findOne({ token: refreshtoken });
|
2020-08-07 14:16:39 +00:00
|
|
|
if (!token)
|
|
|
|
throw new RequestError(
|
|
|
|
req.__("Invalid token"),
|
|
|
|
HttpStatusCode.BAD_REQUEST
|
|
|
|
);
|
2018-11-06 19:48:50 +00:00
|
|
|
|
|
|
|
let user = await User.findById(token.user);
|
|
|
|
if (!user) {
|
2019-03-14 22:10:39 +00:00
|
|
|
token.valid = false;
|
|
|
|
await RefreshToken.save(token);
|
2020-08-07 14:16:39 +00:00
|
|
|
throw new RequestError(
|
|
|
|
req.__("Invalid token"),
|
|
|
|
HttpStatusCode.BAD_REQUEST
|
|
|
|
);
|
2018-11-06 19:48:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
let client = await Client.findById(token.client);
|
|
|
|
|
2020-08-07 14:16:39 +00:00
|
|
|
let jwt = await getAccessTokenJWT({
|
|
|
|
user,
|
|
|
|
permissions: token.permissions,
|
|
|
|
client,
|
|
|
|
});
|
2018-11-06 19:48:50 +00:00
|
|
|
res.json({ token: jwt });
|
2020-08-07 14:16:39 +00:00
|
|
|
});
|
|
|
|
export default JWTRoute;
|