auth-server-helper/lib/Gateway.ts

38 lines
904 B
TypeScript
Raw Normal View History

2020-12-06 15:51:59 +01:00
type AnyFunc = (...args: unknown) => unknown;
type Gateway = (req: Request, res: Response, next: AnyFunc) => Promise<void>;
interface GatewayOptions {
redirect_url: string;
use_stored_sessions?: boolean;
}
class GatewayClass {
private options: GatewayOptions;
public constructor (options: GatewayOptions) {
this.options = options;
}
private redirect (res): void {
res.statusCode = 302;
res.setHeader ('Location', this.options.redirect_url);
res.end ();
}
private async authenticate (req): Promise<boolean> {
return false;
}
public async process_request (req: Request, res: Response, next: AnyFunc): Promise<void> {
if (await this.authenticate (req))
next ();
else
this.redirect (res);
}
}
export default function create_gateway (options: GatewayOptions): Gateway {
const g = new GatewayClass (options);
return g.process_request;
}