import {Inject, Injectable, Instantiable, StaticClass} from '../di' import {Unit} from '../lifecycle/Unit' import {Logging} from '../service/Logging' import {CanonicalResolver} from '../service/Canonical' import {Middleware} from '../http/routing/Middleware' import {SessionAuthMiddleware} from './middleware/SessionAuthMiddleware' import {AuthRequiredMiddleware} from './middleware/AuthRequiredMiddleware' import {GuestRequiredMiddleware} from './middleware/GuestRequiredMiddleware' import {Middlewares} from '../service/Middlewares' /** * Unit class that bootstraps the authentication framework. */ @Injectable() export class Authentication extends Unit { @Inject() protected readonly logging!: Logging @Inject() protected readonly middleware!: Middlewares async up(): Promise { this.container() this.middleware.registerNamespace('@auth', this.getMiddlewareResolver()) } protected getMiddlewareResolver(): CanonicalResolver>> { return (key: string) => { return ({ web: SessionAuthMiddleware, required: AuthRequiredMiddleware, guest: GuestRequiredMiddleware, })[key] } } }