import {Middleware} from '../../http/routing/Middleware' import {Inject, Injectable} from '../../di' import {Config} from '../../service/Config' import {Logging} from '../../service/Logging' import {AuthenticatableRepository} from '../types' import {ResponseObject} from '../../http/routing/Route' import {SessionSecurityContext} from '../context/SessionSecurityContext' import {SecurityContext} from '../context/SecurityContext' /** * Injects a SessionSecurityContext into the request and attempts to * resume the user's authentication. */ @Injectable() export class SessionAuthMiddleware extends Middleware { @Inject() protected readonly config!: Config @Inject() protected readonly logging!: Logging async apply(): Promise { this.logging.debug('Applying session auth middleware.') const repo = this.make(AuthenticatableRepository) const context = this.make(SessionSecurityContext, repo) this.request.registerSingletonInstance(SecurityContext, context) await context.resume() } }