You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.2 KiB

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<Request> {
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
}
}