chore: generate mfa secret in backend (#2930) [skip e2e]

* chore: get mfa secret from backend

* chore: remove unused code
This commit is contained in:
Antonella Sgarlatta
2025-09-12 14:34:51 -03:00
committed by GitHub
parent d6840ba41c
commit 2338449425
9 changed files with 52 additions and 32 deletions

View File

@@ -42,8 +42,8 @@ export class SettingsService extends AbstractService implements SettingsClientIn
return this.provider.updateSubscriptionSetting(name, payload, sensitive)
}
async updateSetting(name: SettingName, payload: string, sensitive = false) {
return this.provider.updateSetting(name, payload, sensitive)
async updateSetting(name: SettingName, payload: string, sensitive = false, totpToken?: string) {
return this.provider.updateSetting(name, payload, sensitive, totpToken)
}
async getDoesSensitiveSettingExist(name: SettingName) {
@@ -54,6 +54,19 @@ export class SettingsService extends AbstractService implements SettingsClientIn
return this.provider.deleteSetting(name, serverPassword)
}
async generateMfaSecret(): Promise<string> {
return this.provider.getMfaSecret()
}
async updateMfaSetting(secret: string, totpToken: string): Promise<void> {
return this.provider.updateSetting(
SettingName.create(SettingName.NAMES.MfaSecret).getValue(),
secret,
true,
totpToken,
)
}
getEmailBackupFrequencyOptionLabel(frequency: EmailBackupFrequency): string {
return this.frequencyOptionsLabels[frequency]
}

View File

@@ -9,9 +9,13 @@ export interface SettingsClientInterface {
getDoesSensitiveSettingExist(name: SettingName): Promise<boolean>
updateSetting(name: SettingName, payload: string, sensitive?: boolean): Promise<void>
updateSetting(name: SettingName, payload: string, sensitive?: boolean, totpToken?: string): Promise<void>
deleteSetting(name: SettingName, serverPassword?: string): Promise<void>
generateMfaSecret(): Promise<string>
updateMfaSetting(secret: string, totpToken: string): Promise<void>
getEmailBackupFrequencyOptionLabel(frequency: EmailBackupFrequency): string
}

View File

@@ -102,8 +102,8 @@ export class SettingsGateway {
return response.data?.success ?? false
}
async updateSetting(name: SettingName, payload: string, sensitive: boolean): Promise<void> {
const response = await this.settingsApi.updateSetting(this.userUuid, name.value, payload, sensitive)
async updateSetting(name: SettingName, payload: string, sensitive: boolean, totpToken?: string): Promise<void> {
const response = await this.settingsApi.updateSetting(this.userUuid, name.value, payload, sensitive, totpToken)
if (isErrorResponse(response)) {
throw new Error(getErrorFromErrorResponse(response).message)
}
@@ -116,6 +116,14 @@ export class SettingsGateway {
}
}
async getMfaSecret(): Promise<string> {
const response = await this.settingsApi.getMfaSecret(this.userUuid)
if (isErrorResponse(response)) {
throw new Error(getErrorFromErrorResponse(response).message)
}
return response.data.secret
}
deinit() {
;(this.settingsApi as unknown) = undefined
;(this.userProvider as unknown) = undefined

View File

@@ -7,6 +7,10 @@ import {
} from '@standardnotes/responses'
import { UuidString } from '@Lib/Types/UuidString'
export interface MfaSecretResponse {
secret: string
}
export interface SettingsServerInterface {
listSettings(userUuid: UuidString): Promise<HttpResponse<ListSettingsResponse>>
@@ -15,6 +19,7 @@ export interface SettingsServerInterface {
settingName: string,
settingValue: string,
sensitive: boolean,
totpToken?: string,
): Promise<HttpResponse<UpdateSettingResponse>>
getSetting(
@@ -32,6 +37,8 @@ export interface SettingsServerInterface {
sensitive: boolean,
): Promise<HttpResponse<UpdateSettingResponse>>
getMfaSecret(userUuid: UuidString): Promise<HttpResponse<MfaSecretResponse>>
deleteSetting(
userUuid: UuidString,
settingName: string,