import Module from '../Module.ts' import Kernel from '../Kernel.ts' import {Request} from '../../Request.ts' import PrepareRequest from './PrepareRequest.ts' import Utility from '../../../service/utility/Utility.ts' import {Injectable} from '../../../../../di/src/decorator/Injection.ts' import {Logging} from '../../../service/logging/Logging.ts' /** * HTTP kernel module to set the Daton session cookie, if it doesn't exist. * @extends Module */ @Injectable() export default class SetSessionCookie extends Module { public static register(kernel: Kernel) { kernel.register(this).after(PrepareRequest) } constructor( protected readonly utility: Utility, ) { super() } /** * If one doesn't exist, generate and set the daton.session cookie. * @param {Request} request */ public async apply(request: Request): Promise { if ( !(await request.cookies.has('daton.session')) ) { const cookie = `${this.utility.uuid()}-${this.utility.uuid()}` this.make(Logging).verbose(`Starting session: ${cookie}`) await request.cookies.set('daton.session', cookie) } return request } }