diff --git a/lib/Authenticator.ts b/lib/Authenticator.ts new file mode 100644 index 0000000..e69de29 diff --git a/lib/Gateway.ts b/lib/Gateway.ts new file mode 100644 index 0000000..4caaee6 --- /dev/null +++ b/lib/Gateway.ts @@ -0,0 +1,37 @@ +type AnyFunc = (...args: unknown) => unknown; +type Gateway = (req: Request, res: Response, next: AnyFunc) => Promise; + +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 { + return false; + } + + public async process_request (req: Request, res: Response, next: AnyFunc): Promise { + 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; +}