mirror of
https://github.com/standardnotes/server
synced 2026-07-31 14:16:46 -04:00
* feat(auth): invalidate other sessions for user if the email or password are changed * fix(auth): handling credentials change in a legacy protocol scenario * fix(auth): leave only the newly created session when changing credentials
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import { TimerInterface } from '@standardnotes/time'
|
|
import { inject, injectable } from 'inversify'
|
|
import TYPES from '../../Bootstrap/Types'
|
|
import { AuthResponseFactoryResolverInterface } from '../Auth/AuthResponseFactoryResolverInterface'
|
|
import { UserRepositoryInterface } from '../User/UserRepositoryInterface'
|
|
import { UpdateUserDTO } from './UpdateUserDTO'
|
|
import { UpdateUserResponse } from './UpdateUserResponse'
|
|
import { UseCaseInterface } from './UseCaseInterface'
|
|
|
|
@injectable()
|
|
export class UpdateUser implements UseCaseInterface {
|
|
constructor(
|
|
@inject(TYPES.Auth_UserRepository) private userRepository: UserRepositoryInterface,
|
|
@inject(TYPES.Auth_AuthResponseFactoryResolver)
|
|
private authResponseFactoryResolver: AuthResponseFactoryResolverInterface,
|
|
@inject(TYPES.Auth_Timer) private timer: TimerInterface,
|
|
) {}
|
|
|
|
async execute(dto: UpdateUserDTO): Promise<UpdateUserResponse> {
|
|
dto.user.updatedAt = this.timer.getUTCDate()
|
|
|
|
const updatedUser = await this.userRepository.save(dto.user)
|
|
|
|
const authResponseFactory = this.authResponseFactoryResolver.resolveAuthResponseFactoryVersion(dto.apiVersion)
|
|
|
|
const result = await authResponseFactory.createResponse({
|
|
user: updatedUser,
|
|
apiVersion: dto.apiVersion,
|
|
userAgent: dto.updatedWithUserAgent,
|
|
ephemeralSession: false,
|
|
readonlyAccess: false,
|
|
})
|
|
|
|
return {
|
|
success: true,
|
|
authResponse: result.response,
|
|
}
|
|
}
|
|
}
|