chore: add clear login attempts admin endpoint

This commit is contained in:
Antonella Sgarlatta
2026-09-08 15:47:21 -03:00
committed by Antonella Sgarlatta
parent 08692cb3e5
commit f80b17baff
3 changed files with 51 additions and 1 deletions
+1
View File
@@ -1964,6 +1964,7 @@ export class ContainerConfigLoader {
container.get<UserRepositoryInterface>(TYPES.Auth_UserRepository),
container.get<CreateSubscriptionToken>(TYPES.Auth_CreateSubscriptionToken),
container.get<CreateOfflineSubscriptionToken>(TYPES.Auth_CreateOfflineSubscriptionToken),
container.get<ClearLoginAttempts>(TYPES.Auth_ClearLoginAttempts),
container.get<ControllerContainerInterface>(TYPES.Auth_ControllerContainer),
),
)
@@ -12,6 +12,7 @@ import TYPES from '../../Bootstrap/Types'
import { BaseAdminController } from './Base/BaseAdminController'
import { CreateOfflineSubscriptionToken } from '../../Domain/UseCase/CreateOfflineSubscriptionToken/CreateOfflineSubscriptionToken'
import { CreateSubscriptionToken } from '../../Domain/UseCase/CreateSubscriptionToken/CreateSubscriptionToken'
import { ClearLoginAttempts } from '../../Domain/UseCase/ClearLoginAttempts'
import { DeleteSetting } from '../../Domain/UseCase/DeleteSetting/DeleteSetting'
import { GetSetting } from './../../Domain/UseCase/GetSetting/GetSetting'
import { UserRepositoryInterface } from '../../Domain/User/UserRepositoryInterface'
@@ -25,8 +26,16 @@ export class AnnotatedAdminController extends BaseAdminController {
@inject(TYPES.Auth_CreateSubscriptionToken) override createSubscriptionToken: CreateSubscriptionToken,
@inject(TYPES.Auth_CreateOfflineSubscriptionToken)
override createOfflineSubscriptionToken: CreateOfflineSubscriptionToken,
@inject(TYPES.Auth_ClearLoginAttempts) override clearLoginAttempts: ClearLoginAttempts,
) {
super(doDeleteSetting, doGetSetting, userRepository, createSubscriptionToken, createOfflineSubscriptionToken)
super(
doDeleteSetting,
doGetSetting,
userRepository,
createSubscriptionToken,
createOfflineSubscriptionToken,
clearLoginAttempts,
)
}
@httpGet('/user/:email')
@@ -60,4 +69,11 @@ export class AnnotatedAdminController extends BaseAdminController {
): Promise<results.BadRequestErrorMessageResult | results.OkResult> {
return super.disableEmailBackups(request)
}
@httpDelete('/users/:email/login-attempts')
override async deleteLoginAttempts(
request: Request,
): Promise<results.JsonResult | results.OkResult> {
return super.deleteLoginAttempts(request)
}
}
@@ -4,6 +4,7 @@ import { Request } from 'express'
import { CreateOfflineSubscriptionToken } from '../../../Domain/UseCase/CreateOfflineSubscriptionToken/CreateOfflineSubscriptionToken'
import { CreateSubscriptionToken } from '../../../Domain/UseCase/CreateSubscriptionToken/CreateSubscriptionToken'
import { ClearLoginAttempts } from '../../../Domain/UseCase/ClearLoginAttempts'
import { GetSetting } from './../../../Domain/UseCase/GetSetting/GetSetting'
import { DeleteSetting } from '../../../Domain/UseCase/DeleteSetting/DeleteSetting'
import { UserRepositoryInterface } from '../../../Domain/User/UserRepositoryInterface'
@@ -16,6 +17,7 @@ export class BaseAdminController extends BaseHttpController {
protected userRepository: UserRepositoryInterface,
protected createSubscriptionToken: CreateSubscriptionToken,
protected createOfflineSubscriptionToken: CreateOfflineSubscriptionToken,
protected clearLoginAttempts: ClearLoginAttempts,
private controllerContainer?: ControllerContainerInterface,
) {
super()
@@ -26,6 +28,7 @@ export class BaseAdminController extends BaseHttpController {
this.controllerContainer.register('admin.createToken', this.createToken.bind(this))
this.controllerContainer.register('admin.createOfflineToken', this.createOfflineToken.bind(this))
this.controllerContainer.register('admin.disableEmailBackups', this.disableEmailBackups.bind(this))
this.controllerContainer.register('admin.deleteLoginAttempts', this.deleteLoginAttempts.bind(this))
}
}
@@ -145,4 +148,34 @@ export class BaseAdminController extends BaseHttpController {
return this.badRequest('No email backups found')
}
async deleteLoginAttempts(request: Request): Promise<results.JsonResult | results.OkResult> {
const { email } = request.params
if (!email) {
return this.json(
{
error: {
message: 'Missing email parameter.',
},
},
400,
)
}
const result = await this.clearLoginAttempts.execute({ email })
if (result.isFailed()) {
return this.json(
{
error: {
message: result.getError(),
},
},
400,
)
}
return this.ok()
}
}