34 lines
1.5 KiB
TypeScript
34 lines
1.5 KiB
TypeScript
import _MagicLinkController from "swaf/auth/magic_link/MagicLinkController";
|
|
import {Request, Response} from "express";
|
|
import Controller from "swaf/Controller";
|
|
import MagicLinkWebSocketListener from "swaf/auth/magic_link/MagicLinkWebSocketListener";
|
|
import MagicLink from "swaf/auth/models/MagicLink";
|
|
import AuthController from "./AuthController";
|
|
import {MagicLinkActionType} from "./MagicLinkActionType";
|
|
import App from "../App";
|
|
import AuthComponent from "swaf/auth/AuthComponent";
|
|
|
|
export default class MagicLinkController extends _MagicLinkController<App> {
|
|
public constructor(magicLinkWebSocketListener: MagicLinkWebSocketListener<App>) {
|
|
super(magicLinkWebSocketListener);
|
|
}
|
|
|
|
protected async performAction(magicLink: MagicLink, req: Request, res: Response): Promise<void> {
|
|
switch (magicLink.action_type) {
|
|
case MagicLinkActionType.LOGIN:
|
|
case MagicLinkActionType.REGISTER: {
|
|
await AuthController.checkAndAuth(req, res, magicLink);
|
|
const proof = await this.getApp().as(AuthComponent).getAuthGuard().isAuthenticated(req.getSession());
|
|
const user = await proof?.getResource();
|
|
|
|
if (!res.headersSent && user) {
|
|
// Auth success
|
|
req.flash('success', `Authentication success. Welcome, ${user.name}!`);
|
|
res.redirect(req.query.redirect_uri?.toString() || Controller.route('home'));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|