mirror of
https://github.com/standardnotes/server
synced 2026-10-16 18:13:09 -04:00
feat(auth): add publishing session created and session refreshed events
This commit is contained in:
@@ -1,14 +1,24 @@
|
||||
import * as dayjs from 'dayjs'
|
||||
|
||||
import { inject, injectable } from 'inversify'
|
||||
import { DomainEventPublisherInterface } from '@standardnotes/domain-events'
|
||||
import { TimerInterface } from '@standardnotes/time'
|
||||
import { Logger } from 'winston'
|
||||
|
||||
import TYPES from '../../Bootstrap/Types'
|
||||
import { SessionServiceInterface } from '../Session/SessionServiceInterface'
|
||||
import { DomainEventFactoryInterface } from '../Event/DomainEventFactoryInterface'
|
||||
|
||||
import { RefreshSessionTokenResponse } from './RefreshSessionTokenResponse'
|
||||
import { RefreshSessionTokenDTO } from './RefreshSessionTokenDTO'
|
||||
|
||||
@injectable()
|
||||
export class RefreshSessionToken {
|
||||
constructor(@inject(TYPES.SessionService) private sessionService: SessionServiceInterface) {}
|
||||
constructor(
|
||||
@inject(TYPES.SessionService) private sessionService: SessionServiceInterface,
|
||||
@inject(TYPES.DomainEventFactory) private domainEventFactory: DomainEventFactoryInterface,
|
||||
@inject(TYPES.DomainEventPublisher) private domainEventPublisher: DomainEventPublisherInterface,
|
||||
@inject(TYPES.Timer) private timer: TimerInterface,
|
||||
@inject(TYPES.Logger) private logger: Logger,
|
||||
) {}
|
||||
|
||||
async execute(dto: RefreshSessionTokenDTO): Promise<RefreshSessionTokenResponse> {
|
||||
const session = await this.sessionService.getSessionFromToken(dto.accessToken)
|
||||
@@ -28,7 +38,7 @@ export class RefreshSessionToken {
|
||||
}
|
||||
}
|
||||
|
||||
if (session.refreshExpiration < dayjs.utc().toDate()) {
|
||||
if (session.refreshExpiration < this.timer.getUTCDate()) {
|
||||
return {
|
||||
success: false,
|
||||
errorTag: 'expired-refresh-token',
|
||||
@@ -38,6 +48,14 @@ export class RefreshSessionToken {
|
||||
|
||||
const sessionPayload = await this.sessionService.refreshTokens(session)
|
||||
|
||||
try {
|
||||
await this.domainEventPublisher.publish(
|
||||
this.domainEventFactory.createSessionRefreshedEvent({ userUuid: session.userUuid }),
|
||||
)
|
||||
} catch (error) {
|
||||
this.logger.error(`Failed to publish session refreshed event: ${(error as Error).message}`)
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
sessionPayload,
|
||||
|
||||
Reference in New Issue
Block a user