2020-07-22 14:38:17 +00:00
|
|
|
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'
|
2020-07-30 03:37:16 +00:00
|
|
|
import {Logging} from '../../../service/logging/Logging.ts'
|
2020-07-22 14:38:17 +00:00
|
|
|
|
2020-08-16 19:31:47 +00:00
|
|
|
/**
|
|
|
|
* HTTP kernel module to set the Daton session cookie, if it doesn't exist.
|
|
|
|
* @extends Module
|
|
|
|
*/
|
2020-07-22 14:38:17 +00:00
|
|
|
@Injectable()
|
|
|
|
export default class SetSessionCookie extends Module {
|
|
|
|
|
|
|
|
public static register(kernel: Kernel) {
|
|
|
|
kernel.register(this).after(PrepareRequest)
|
|
|
|
}
|
|
|
|
|
|
|
|
constructor(
|
2020-07-28 00:48:44 +00:00
|
|
|
protected readonly utility: Utility,
|
2020-07-22 14:38:17 +00:00
|
|
|
) {
|
|
|
|
super()
|
|
|
|
}
|
|
|
|
|
2020-08-16 19:31:47 +00:00
|
|
|
/**
|
|
|
|
* If one doesn't exist, generate and set the daton.session cookie.
|
|
|
|
* @param {Request} request
|
|
|
|
*/
|
2020-07-22 14:38:17 +00:00
|
|
|
public async apply(request: Request): Promise<Request> {
|
|
|
|
if ( !(await request.cookies.has('daton.session')) ) {
|
2020-07-30 03:37:16 +00:00
|
|
|
const cookie = `${this.utility.uuid()}-${this.utility.uuid()}`
|
|
|
|
|
|
|
|
this.make(Logging).verbose(`Starting session: ${cookie}`)
|
|
|
|
await request.cookies.set('daton.session', cookie)
|
2020-07-22 14:38:17 +00:00
|
|
|
}
|
|
|
|
return request
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|