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