import {SecurityContext} from '../SecurityContext' import {Inject, Injectable} from '../../di' import {Session} from '../../http/session/Session' import {Awaitable} from '../../util' import {AuthenticatableCredentials, AuthenticatableRepository} from '../types' /** * Security context implementation that uses the session as storage. */ @Injectable() export class SessionSecurityContext extends SecurityContext { @Inject() protected readonly session!: Session constructor( /** The repository from which to draw users. */ public readonly repository: AuthenticatableRepository, ) { super(repository, 'session') } getCredentials(): Awaitable { return { identifier: '', credential: this.session.get('extollo.auth.securityIdentifier'), } } persist(): Awaitable { this.session.set('extollo.auth.securityIdentifier', this.getUser()?.getIdentifier()) } }