Adding a popup authentication option.
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Fabian Stamm
2020-10-28 05:11:47 +01:00
parent 2c4c87927d
commit 6b4ad81940
11 changed files with 267 additions and 87 deletions

View File

@ -1,10 +1,11 @@
import { Router } from "express";
import Register from "./register";
import Login from "./login";
import TwoFactorRoute from "./twofactor";
import { GetToken, DeleteToken } from "./token";
import { GetAccount } from "./account";
import { GetContactInfos } from "./contact";
import { GetJWTByUser } from "./jwt";
import Login from "./login";
import Register from "./register";
import { DeleteToken, GetToken } from "./token";
import TwoFactorRoute from "./twofactor";
const UserRoute: Router = Router();
@ -125,4 +126,7 @@ UserRoute.get("/account", GetAccount);
* @apiSuccess {Object[]} user.phone Phone numbers
*/
UserRoute.get("/contact", GetContactInfos);
UserRoute.get("/jwt", GetJWTByUser);
export default UserRoute;

37
src/api/user/jwt.ts Normal file
View File

@ -0,0 +1,37 @@
import { Request, Response } from "express";
import Stacker from "../middlewares/stacker";
import { GetUserMiddleware } from "../middlewares/user";
import { URL } from "url";
import Client from "../../models/client";
import RequestError, { HttpStatusCode } from "../../helper/request_error";
import { getAccessTokenJWT } from "../../helper/jwt";
export const GetJWTByUser = Stacker(
GetUserMiddleware(true, false),
async (req: Request, res: Response) => {
const { client_id, origin } = req.query as { [key: string]: string };
const client = await Client.findOne({
client_id,
});
const clientNotFoundError = new RequestError(
"Client not found!",
HttpStatusCode.BAD_REQUEST
);
if (!client) throw clientNotFoundError;
const clientUrl = new URL(client.redirect_url);
if (clientUrl.hostname !== origin) throw clientNotFoundError;
const jwt = await getAccessTokenJWT({
user: req.user,
client: client,
permissions: [],
});
res.json({ jwt });
}
);