feat: SMS and email OTP texts (#6281)

* manage 2 custom texts proto

* implement methods

* default texts

* console

* improve translations

* lint

* test: fix e2e timeout

* fix translations

* add missing console translations

* remove unused text parts

---------

Co-authored-by: Livio Spring <livio.a@gmail.com>
This commit is contained in:
Elio Bischof
2023-08-09 07:49:12 +02:00
committed by GitHub
parent 9aed9f9186
commit 343a9428b3
39 changed files with 1508 additions and 188 deletions

View File

@@ -37,8 +37,8 @@
[chips]="chips[currentType]"
[disabled]="(canWrite$ | async) === false"
label="one"
[default$]="getDefaultInitMessageTextMap$"
[current$]="getCustomInitMessageTextMap$"
[default$]="getDefaultMessageTextMap$"
[current$]="getCustomMessageTextMap$"
(changedValues)="updateCurrentValues($event)"
></cnsl-edit-text>
</div>
@@ -46,7 +46,7 @@
<div class="message-text-actions">
<button
class="reset-button"
*ngIf="(getCustomInitMessageTextMap$ | async) && (getCustomInitMessageTextMap$ | async)?.['isDefault'] === false"
*ngIf="(getCustomMessageTextMap$ | async) && (getCustomMessageTextMap$ | async)?.['isDefault'] === false"
[disabled]="(canWrite$ | async) === false"
(click)="resetDefault()"
color="message-text-warn"

View File

@@ -9,14 +9,18 @@ import {
GetDefaultPasswordlessRegistrationMessageTextRequest as AdminGetDefaultPasswordlessRegistrationMessageTextRequest,
GetDefaultPasswordResetMessageTextRequest as AdminGetDefaultPasswordResetMessageTextRequest,
GetDefaultVerifyEmailMessageTextRequest as AdminGetDefaultVerifyEmailMessageTextRequest,
GetDefaultVerifyEmailOTPMessageTextRequest as AdminGetDefaultVerifyEmailOTPMessageTextRequest,
GetDefaultVerifyPhoneMessageTextRequest as AdminGetDefaultVerifyPhoneMessageTextRequest,
GetDefaultVerifySMSOTPMessageTextRequest as AdminGetDefaultVerifySMSOTPMessageTextRequest,
SetDefaultDomainClaimedMessageTextRequest,
SetDefaultInitMessageTextRequest,
SetDefaultPasswordChangeMessageTextRequest,
SetDefaultPasswordlessRegistrationMessageTextRequest,
SetDefaultPasswordResetMessageTextRequest,
SetDefaultVerifyEmailMessageTextRequest,
SetDefaultVerifyEmailOTPMessageTextRequest,
SetDefaultVerifyPhoneMessageTextRequest,
SetDefaultVerifySMSOTPMessageTextRequest,
} from 'src/app/proto/generated/zitadel/admin_pb';
import {
GetCustomDomainClaimedMessageTextRequest,
@@ -25,21 +29,27 @@ import {
GetCustomPasswordlessRegistrationMessageTextRequest,
GetCustomPasswordResetMessageTextRequest,
GetCustomVerifyEmailMessageTextRequest,
GetCustomVerifyEmailOTPMessageTextRequest,
GetCustomVerifyPhoneMessageTextRequest,
GetCustomVerifySMSOTPMessageTextRequest,
GetDefaultDomainClaimedMessageTextRequest,
GetDefaultInitMessageTextRequest,
GetDefaultPasswordChangeMessageTextRequest,
GetDefaultPasswordlessRegistrationMessageTextRequest,
GetDefaultPasswordResetMessageTextRequest,
GetDefaultVerifyEmailMessageTextRequest,
GetDefaultVerifyEmailOTPMessageTextRequest,
GetDefaultVerifyPhoneMessageTextRequest,
GetDefaultVerifySMSOTPMessageTextRequest,
SetCustomDomainClaimedMessageTextRequest,
SetCustomInitMessageTextRequest,
SetCustomPasswordChangeMessageTextRequest,
SetCustomPasswordlessRegistrationMessageTextRequest,
SetCustomPasswordResetMessageTextRequest,
SetCustomVerifyEmailMessageTextRequest,
SetCustomVerifyEmailOTPMessageTextRequest,
SetCustomVerifyPhoneMessageTextRequest,
SetCustomVerifySMSOTPMessageTextRequest,
} from 'src/app/proto/generated/zitadel/management_pb';
import { MessageCustomText } from 'src/app/proto/generated/zitadel/text_pb';
import { AdminService } from 'src/app/services/admin.service';
@@ -60,6 +70,8 @@ enum MESSAGETYPES {
DOMAINCLAIMED = 'DC',
PASSWORDLESS = 'PL',
PASSWORDCHANGE = 'PC',
VERIFYSMSOTP = 'VSO',
VERIFYEMAILOTP = 'VEO',
}
const REQUESTMAP = {
@@ -132,6 +144,33 @@ const REQUESTMAP = {
return req;
},
},
[MESSAGETYPES.VERIFYSMSOTP]: {
get: new GetCustomVerifySMSOTPMessageTextRequest(),
set: new SetCustomVerifySMSOTPMessageTextRequest(),
getDefault: new GetDefaultVerifySMSOTPMessageTextRequest(),
setFcn: (map: Partial<MessageCustomText.AsObject>): SetCustomVerifySMSOTPMessageTextRequest => {
const req = new SetCustomVerifySMSOTPMessageTextRequest();
req.setText(map.text ?? '');
return req;
},
},
[MESSAGETYPES.VERIFYEMAILOTP]: {
get: new GetCustomVerifyEmailOTPMessageTextRequest(),
set: new SetCustomVerifyEmailOTPMessageTextRequest(),
getDefault: new GetDefaultVerifyEmailOTPMessageTextRequest(),
setFcn: (map: Partial<MessageCustomText.AsObject>): SetCustomVerifyEmailOTPMessageTextRequest => {
const req = new SetCustomVerifyEmailOTPMessageTextRequest();
req.setFooterText(map.footerText ?? '');
req.setGreeting(map.greeting ?? '');
req.setPreHeader(map.preHeader ?? '');
req.setSubject(map.subject ?? '');
req.setText(map.text ?? '');
req.setTitle(map.title ?? '');
return req;
},
},
[MESSAGETYPES.PASSWORDRESET]: {
get: new GetCustomPasswordResetMessageTextRequest(),
set: new SetCustomPasswordResetMessageTextRequest(),
@@ -255,6 +294,31 @@ const REQUESTMAP = {
return req;
},
},
[MESSAGETYPES.VERIFYSMSOTP]: {
get: new AdminGetDefaultVerifySMSOTPMessageTextRequest(),
set: new SetDefaultVerifySMSOTPMessageTextRequest(),
setFcn: (map: Partial<MessageCustomText.AsObject>): SetDefaultVerifySMSOTPMessageTextRequest => {
const req = new SetDefaultVerifySMSOTPMessageTextRequest();
req.setText(map.text ?? '');
return req;
},
},
[MESSAGETYPES.VERIFYEMAILOTP]: {
get: new AdminGetDefaultVerifyEmailOTPMessageTextRequest(),
set: new SetDefaultVerifyEmailOTPMessageTextRequest(),
setFcn: (map: Partial<MessageCustomText.AsObject>): SetDefaultVerifyEmailOTPMessageTextRequest => {
const req = new SetDefaultVerifyEmailOTPMessageTextRequest();
req.setFooterText(map.footerText ?? '');
req.setGreeting(map.greeting ?? '');
req.setPreHeader(map.preHeader ?? '');
req.setSubject(map.subject ?? '');
req.setText(map.text ?? '');
req.setTitle(map.title ?? '');
return req;
},
},
[MESSAGETYPES.PASSWORDRESET]: {
get: new AdminGetDefaultPasswordResetMessageTextRequest(),
set: new SetDefaultPasswordResetMessageTextRequest(),
@@ -318,8 +382,8 @@ const REQUESTMAP = {
})
export class MessageTextsComponent implements OnInit, OnDestroy {
public loading: boolean = false;
public getDefaultInitMessageTextMap$: Observable<{ [key: string]: string }> = of({});
public getCustomInitMessageTextMap$: BehaviorSubject<{ [key: string]: string | boolean }> = new BehaviorSubject({}); // boolean because of isDefault
public getDefaultMessageTextMap$: Observable<{ [key: string]: string }> = of({});
public getCustomMessageTextMap$: BehaviorSubject<{ [key: string]: string | boolean }> = new BehaviorSubject({}); // boolean because of isDefault
public currentType: MESSAGETYPES = MESSAGETYPES.INIT;
@@ -329,7 +393,7 @@ export class MessageTextsComponent implements OnInit, OnDestroy {
public MESSAGETYPES: any = MESSAGETYPES;
public updateRequest!: SetCustomInitMessageTextRequest | SetDefaultInitMessageTextRequest;
public updateRequest!: any;
public InfoSectionType: any = InfoSectionType;
public chips: {
@@ -411,6 +475,38 @@ export class MessageTextsComponent implements OnInit, OnDestroy {
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.loginnames', value: '{{.LoginNames}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.changedate', value: '{{.ChangeDate}}' },
],
[MESSAGETYPES.VERIFYSMSOTP]: [
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.otp', value: '{{.OTP}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.verifyUrl', value: '{{.VerifyURL}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.preferredLoginName', value: '{{.PreferredLoginName}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.username', value: '{{.UserName}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.firstname', value: '{{.FirstName}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.lastname', value: '{{.Lastname}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.nickName', value: '{{.NickName}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.displayName', value: '{{.DisplayName}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.lastEmail', value: '{{.LastEmail}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.verifiedEmail', value: '{{.VerifiedEmail}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.lastPhone', value: '{{.LastPhone}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.verifiedPhone', value: '{{.VerifiedPhone}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.loginnames', value: '{{.LoginNames}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.changedate', value: '{{.ChangeDate}}' },
],
[MESSAGETYPES.VERIFYEMAILOTP]: [
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.otp', value: '{{.OTP}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.verifyUrl', value: '{{.VerifyURL}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.preferredLoginName', value: '{{.PreferredLoginName}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.username', value: '{{.UserName}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.firstname', value: '{{.FirstName}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.lastname', value: '{{.Lastname}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.nickName', value: '{{.NickName}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.displayName', value: '{{.DisplayName}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.lastEmail', value: '{{.LastEmail}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.verifiedEmail', value: '{{.VerifiedEmail}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.lastPhone', value: '{{.LastPhone}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.verifiedPhone', value: '{{.VerifiedPhone}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.loginnames', value: '{{.LoginNames}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.changedate', value: '{{.ChangeDate}}' },
],
[MESSAGETYPES.PASSWORDLESS]: [
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.preferredLoginName', value: '{{.PreferredLoginName}}' },
{ key: 'POLICY.MESSAGE_TEXTS.CHIPS.username', value: '{{.UserName}}' },
@@ -481,64 +577,48 @@ export class MessageTextsComponent implements OnInit, OnDestroy {
public getDefaultValues(type: MESSAGETYPES, req: any): Promise<any> {
switch (type) {
case MESSAGETYPES.INIT:
return this.stripDetails(this.service.getDefaultInitMessageText(req));
case MESSAGETYPES.VERIFYPHONE:
return this.stripDetails(this.service.getDefaultVerifyPhoneMessageText(req));
return this.stripEmail(this.service.getDefaultInitMessageText(req));
case MESSAGETYPES.VERIFYEMAIL:
return this.stripDetails(this.service.getDefaultVerifyEmailMessageText(req));
return this.stripEmail(this.service.getDefaultVerifyEmailMessageText(req));
case MESSAGETYPES.VERIFYPHONE:
return this.stripSMS(this.service.getDefaultVerifyPhoneMessageText(req));
case MESSAGETYPES.VERIFYSMSOTP:
return this.stripSMS(this.service.getDefaultVerifySMSOTPMessageText(req));
case MESSAGETYPES.VERIFYEMAILOTP:
return this.stripEmail(this.service.getDefaultVerifyEmailOTPMessageText(req));
case MESSAGETYPES.PASSWORDRESET:
return this.stripDetails(this.service.getDefaultPasswordResetMessageText(req));
return this.stripEmail(this.service.getDefaultPasswordResetMessageText(req));
case MESSAGETYPES.DOMAINCLAIMED:
return this.stripDetails(this.service.getDefaultDomainClaimedMessageText(req));
return this.stripEmail(this.service.getDefaultDomainClaimedMessageText(req));
case MESSAGETYPES.PASSWORDLESS:
return this.stripDetails(this.service.getDefaultPasswordlessRegistrationMessageText(req));
return this.stripEmail(this.service.getDefaultPasswordlessRegistrationMessageText(req));
case MESSAGETYPES.PASSWORDCHANGE:
return this.stripDetails(this.service.getDefaultPasswordChangeMessageText(req));
return this.stripEmail(this.service.getDefaultPasswordChangeMessageText(req));
}
}
public getCurrentValues(type: MESSAGETYPES, req: any): Promise<any> | undefined {
if (this.serviceType === PolicyComponentServiceType.MGMT) {
switch (type) {
case MESSAGETYPES.INIT:
return this.stripDetails((this.service as ManagementService).getCustomInitMessageText(req));
case MESSAGETYPES.VERIFYPHONE:
return this.stripDetails((this.service as ManagementService).getCustomVerifyPhoneMessageText(req));
case MESSAGETYPES.VERIFYEMAIL:
return this.stripDetails((this.service as ManagementService).getCustomVerifyEmailMessageText(req));
case MESSAGETYPES.PASSWORDRESET:
return this.stripDetails((this.service as ManagementService).getCustomPasswordResetMessageText(req));
case MESSAGETYPES.DOMAINCLAIMED:
return this.stripDetails((this.service as ManagementService).getCustomDomainClaimedMessageText(req));
case MESSAGETYPES.PASSWORDLESS:
return this.stripDetails((this.service as ManagementService).getCustomPasswordlessRegistrationMessageText(req));
case MESSAGETYPES.PASSWORDCHANGE:
return this.stripDetails((this.service as ManagementService).getCustomPasswordChangeMessageText(req));
default:
return undefined;
}
} else if (this.serviceType === PolicyComponentServiceType.ADMIN) {
switch (type) {
case MESSAGETYPES.INIT:
return this.stripDetails((this.service as AdminService).getCustomInitMessageText(req));
case MESSAGETYPES.VERIFYPHONE:
return this.stripDetails((this.service as AdminService).getCustomVerifyPhoneMessageText(req));
case MESSAGETYPES.VERIFYEMAIL:
return this.stripDetails((this.service as AdminService).getCustomVerifyEmailMessageText(req));
case MESSAGETYPES.PASSWORDRESET:
return this.stripDetails((this.service as AdminService).getCustomPasswordResetMessageText(req));
case MESSAGETYPES.DOMAINCLAIMED:
return this.stripDetails((this.service as AdminService).getCustomDomainClaimedMessageText(req));
case MESSAGETYPES.PASSWORDLESS:
return this.stripDetails((this.service as AdminService).getCustomPasswordlessRegistrationMessageText(req));
case MESSAGETYPES.PASSWORDCHANGE:
return this.stripDetails((this.service as AdminService).getCustomPasswordChangeMessageText(req));
default:
return undefined;
}
} else {
return undefined;
switch (type) {
case MESSAGETYPES.INIT:
return this.stripEmail(this.service.getCustomInitMessageText(req));
case MESSAGETYPES.VERIFYEMAIL:
return this.stripEmail(this.service.getCustomVerifyEmailMessageText(req));
case MESSAGETYPES.VERIFYPHONE:
return this.stripSMS(this.service.getCustomVerifyPhoneMessageText(req));
case MESSAGETYPES.VERIFYSMSOTP:
return this.stripSMS(this.service.getCustomVerifySMSOTPMessageText(req));
case MESSAGETYPES.VERIFYEMAILOTP:
return this.stripEmail(this.service.getCustomVerifyEmailOTPMessageText(req));
case MESSAGETYPES.PASSWORDRESET:
return this.stripEmail(this.service.getCustomPasswordResetMessageText(req));
case MESSAGETYPES.DOMAINCLAIMED:
return this.stripEmail(this.service.getCustomDomainClaimedMessageText(req));
case MESSAGETYPES.PASSWORDLESS:
return this.stripEmail(this.service.getCustomPasswordlessRegistrationMessageText(req));
case MESSAGETYPES.PASSWORDCHANGE:
return this.stripEmail(this.service.getCustomPasswordChangeMessageText(req));
default:
return undefined;
}
}
@@ -552,7 +632,7 @@ export class MessageTextsComponent implements OnInit, OnDestroy {
const reqDefaultInit = REQUESTMAP[this.serviceType][type].getDefault;
reqDefaultInit.setLanguage(this.locale);
this.getDefaultInitMessageTextMap$ = from(this.getDefaultValues(type, reqDefaultInit));
this.getDefaultMessageTextMap$ = from(this.getDefaultValues(type, reqDefaultInit));
}
const reqCustomInit = REQUESTMAP[this.serviceType][type].get.setLanguage(this.locale);
@@ -560,7 +640,7 @@ export class MessageTextsComponent implements OnInit, OnDestroy {
return this.getCurrentValues(type, reqCustomInit)
?.then((data) => {
this.loading = false;
this.getCustomInitMessageTextMap$.next(data);
this.getCustomMessageTextMap$.next(data);
})
.catch((error) => {
this.loading = false;
@@ -587,10 +667,14 @@ export class MessageTextsComponent implements OnInit, OnDestroy {
switch (this.currentType) {
case MESSAGETYPES.INIT:
return handler((this.service as ManagementService).setCustomInitMessageText(this.updateRequest));
case MESSAGETYPES.VERIFYPHONE:
return handler((this.service as ManagementService).setCustomVerifyPhoneMessageText(this.updateRequest));
case MESSAGETYPES.VERIFYEMAIL:
return handler((this.service as ManagementService).setCustomVerifyEmailMessageText(this.updateRequest));
case MESSAGETYPES.VERIFYPHONE:
return handler((this.service as ManagementService).setCustomVerifyPhoneMessageText(this.updateRequest));
case MESSAGETYPES.VERIFYSMSOTP:
return handler((this.service as ManagementService).setCustomVerifySMSOTPMessageText(this.updateRequest));
case MESSAGETYPES.VERIFYEMAILOTP:
return handler((this.service as ManagementService).setCustomVerifyEmailOTPMessageText(this.updateRequest));
case MESSAGETYPES.PASSWORDRESET:
return handler((this.service as ManagementService).setCustomPasswordResetMessageText(this.updateRequest));
case MESSAGETYPES.DOMAINCLAIMED:
@@ -608,6 +692,10 @@ export class MessageTextsComponent implements OnInit, OnDestroy {
return handler((this.service as AdminService).setDefaultInitMessageText(this.updateRequest));
case MESSAGETYPES.VERIFYPHONE:
return handler((this.service as AdminService).setDefaultVerifyPhoneMessageText(this.updateRequest));
case MESSAGETYPES.VERIFYSMSOTP:
return handler((this.service as AdminService).setDefaultVerifySMSOTPMessageText(this.updateRequest));
case MESSAGETYPES.VERIFYEMAILOTP:
return handler((this.service as AdminService).setDefaultVerifyEmailOTPMessageText(this.updateRequest));
case MESSAGETYPES.VERIFYEMAIL:
return handler((this.service as AdminService).setDefaultVerifyEmailMessageText(this.updateRequest));
case MESSAGETYPES.PASSWORDRESET:
@@ -635,55 +723,68 @@ export class MessageTextsComponent implements OnInit, OnDestroy {
});
dialogRef.afterClosed().subscribe((resp) => {
if (resp && this.serviceType === PolicyComponentServiceType.MGMT) {
const handler = (prom: Promise<any>): Promise<any> => {
return prom
.then(() => {
setTimeout(() => {
this.loadData(this.currentType);
}, 1000);
})
.catch((error) => {
this.toast.showError(error);
});
};
switch (this.currentType) {
case MESSAGETYPES.INIT:
return handler((this.service as ManagementService).resetCustomInitMessageTextToDefault(this.locale));
case MESSAGETYPES.VERIFYPHONE:
return handler((this.service as ManagementService).resetCustomVerifyPhoneMessageTextToDefault(this.locale));
case MESSAGETYPES.VERIFYEMAIL:
return handler((this.service as ManagementService).resetCustomVerifyEmailMessageTextToDefault(this.locale));
case MESSAGETYPES.PASSWORDRESET:
return handler((this.service as ManagementService).resetCustomPasswordResetMessageTextToDefault(this.locale));
case MESSAGETYPES.DOMAINCLAIMED:
return handler((this.service as ManagementService).resetCustomDomainClaimedMessageTextToDefault(this.locale));
case MESSAGETYPES.DOMAINCLAIMED:
return handler(
(this.service as ManagementService).resetCustomPasswordlessRegistrationMessageTextToDefault(this.locale),
);
case MESSAGETYPES.PASSWORDCHANGE:
return handler((this.service as ManagementService).resetCustomPasswordChangeMessageTextToDefault(this.locale));
default:
return Promise.reject();
}
} else {
if (!resp) {
return Promise.reject();
}
const handler = (prom: Promise<any>): Promise<any> => {
return prom
.then(() => {
setTimeout(() => {
this.loadData(this.currentType);
}, 1000);
})
.catch((error) => {
this.toast.showError(error);
});
};
switch (this.currentType) {
case MESSAGETYPES.INIT:
return handler(this.service.resetCustomInitMessageTextToDefault(this.locale));
case MESSAGETYPES.VERIFYPHONE:
return handler(this.service.resetCustomVerifyPhoneMessageTextToDefault(this.locale));
case MESSAGETYPES.VERIFYSMSOTP:
return handler(this.service.resetCustomVerifySMSOTPMessageTextToDefault(this.locale));
case MESSAGETYPES.VERIFYEMAILOTP:
return handler(this.service.resetCustomVerifyEmailOTPMessageTextToDefault(this.locale));
case MESSAGETYPES.VERIFYEMAIL:
return handler(this.service.resetCustomVerifyEmailMessageTextToDefault(this.locale));
case MESSAGETYPES.PASSWORDRESET:
return handler(this.service.resetCustomPasswordResetMessageTextToDefault(this.locale));
case MESSAGETYPES.DOMAINCLAIMED:
return handler(this.service.resetCustomDomainClaimedMessageTextToDefault(this.locale));
case MESSAGETYPES.PASSWORDLESS:
return handler(this.service.resetCustomPasswordlessRegistrationMessageTextToDefault(this.locale));
case MESSAGETYPES.PASSWORDCHANGE:
return handler(this.service.resetCustomPasswordChangeMessageTextToDefault(this.locale));
default:
return Promise.reject();
}
});
}
private stripDetails(prom: Promise<any>): Promise<any> {
private strip(prom: Promise<any>, properties: Array<string>): Promise<any> {
return prom.then((res) => {
if (res.customText) {
delete res.customText.details;
properties.forEach((property) => {
delete res.customText[property];
});
return Object.assign({}, res.customText as unknown as { [key: string]: string });
} else {
return {};
}
});
}
private stripEmail(prom: Promise<any>): Promise<any> {
return this.strip(prom, ['details']);
}
private stripSMS(prom: Promise<any>): Promise<any> {
return this.strip(prom, ['details', 'buttonText', 'footerText', 'greeting', 'preHeader', 'subject', 'title']);
}
public ngOnDestroy(): void {
this.sub.unsubscribe();
}

View File

@@ -66,8 +66,12 @@ import {
GetCustomPasswordResetMessageTextResponse,
GetCustomVerifyEmailMessageTextRequest,
GetCustomVerifyEmailMessageTextResponse,
GetCustomVerifyEmailOTPMessageTextRequest,
GetCustomVerifyEmailOTPMessageTextResponse,
GetCustomVerifyPhoneMessageTextRequest,
GetCustomVerifyPhoneMessageTextResponse,
GetCustomVerifySMSOTPMessageTextRequest,
GetCustomVerifySMSOTPMessageTextResponse,
GetDefaultDomainClaimedMessageTextRequest,
GetDefaultDomainClaimedMessageTextResponse,
GetDefaultInitMessageTextRequest,
@@ -84,8 +88,12 @@ import {
GetDefaultPasswordResetMessageTextResponse,
GetDefaultVerifyEmailMessageTextRequest,
GetDefaultVerifyEmailMessageTextResponse,
GetDefaultVerifyEmailOTPMessageTextRequest,
GetDefaultVerifyEmailOTPMessageTextResponse,
GetDefaultVerifyPhoneMessageTextRequest,
GetDefaultVerifyPhoneMessageTextResponse,
GetDefaultVerifySMSOTPMessageTextRequest,
GetDefaultVerifySMSOTPMessageTextResponse,
GetDomainPolicyRequest,
GetDomainPolicyResponse,
GetFileSystemNotificationProviderRequest,
@@ -196,8 +204,12 @@ import {
SetDefaultPasswordResetMessageTextResponse,
SetDefaultVerifyEmailMessageTextRequest,
SetDefaultVerifyEmailMessageTextResponse,
SetDefaultVerifyEmailOTPMessageTextRequest,
SetDefaultVerifyEmailOTPMessageTextResponse,
SetDefaultVerifyPhoneMessageTextRequest,
SetDefaultVerifyPhoneMessageTextResponse,
SetDefaultVerifySMSOTPMessageTextRequest,
SetDefaultVerifySMSOTPMessageTextResponse,
SetSecurityPolicyRequest,
SetSecurityPolicyResponse,
SetUpOrgRequest,
@@ -256,6 +268,26 @@ import {
UpdateSMTPConfigResponse,
} from '../proto/generated/zitadel/admin_pb';
import { Event } from '../proto/generated/zitadel/event_pb';
import {
ResetCustomDomainClaimedMessageTextToDefaultRequest,
ResetCustomDomainClaimedMessageTextToDefaultResponse,
ResetCustomInitMessageTextToDefaultRequest,
ResetCustomInitMessageTextToDefaultResponse,
ResetCustomPasswordChangeMessageTextToDefaultRequest,
ResetCustomPasswordChangeMessageTextToDefaultResponse,
ResetCustomPasswordlessRegistrationMessageTextToDefaultRequest,
ResetCustomPasswordlessRegistrationMessageTextToDefaultResponse,
ResetCustomPasswordResetMessageTextToDefaultRequest,
ResetCustomPasswordResetMessageTextToDefaultResponse,
ResetCustomVerifyEmailMessageTextToDefaultRequest,
ResetCustomVerifyEmailMessageTextToDefaultResponse,
ResetCustomVerifyEmailOTPMessageTextToDefaultRequest,
ResetCustomVerifyEmailOTPMessageTextToDefaultResponse,
ResetCustomVerifyPhoneMessageTextToDefaultRequest,
ResetCustomVerifyPhoneMessageTextToDefaultResponse,
ResetCustomVerifySMSOTPMessageTextToDefaultRequest,
ResetCustomVerifySMSOTPMessageTextToDefaultResponse,
} from '../proto/generated/zitadel/management_pb';
import { SearchQuery } from '../proto/generated/zitadel/member_pb';
import { ListQuery } from '../proto/generated/zitadel/object_pb';
import { GrpcService } from './grpc.service';
@@ -415,6 +447,12 @@ export class AdminService {
return this.grpcService.admin.getCustomInitMessageText(req, null).then((resp) => resp.toObject());
}
public resetCustomInitMessageTextToDefault(lang: string): Promise<ResetCustomInitMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomInitMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.admin.resetCustomInitMessageTextToDefault(req, null).then((resp) => resp.toObject());
}
public setDefaultInitMessageText(
req: SetDefaultInitMessageTextRequest,
): Promise<SetDefaultInitMessageTextResponse.AsObject> {
@@ -439,6 +477,14 @@ export class AdminService {
return this.grpcService.admin.setDefaultVerifyEmailMessageText(req, null).then((resp) => resp.toObject());
}
public resetCustomVerifyEmailMessageTextToDefault(
lang: string,
): Promise<ResetCustomVerifyEmailMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomVerifyEmailMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.admin.resetCustomVerifyEmailMessageTextToDefault(req, null).then((resp) => resp.toObject());
}
public getDefaultVerifyPhoneMessageText(
req: GetDefaultVerifyPhoneMessageTextRequest,
): Promise<GetDefaultVerifyPhoneMessageTextResponse.AsObject> {
@@ -457,6 +503,66 @@ export class AdminService {
return this.grpcService.admin.setDefaultVerifyPhoneMessageText(req, null).then((resp) => resp.toObject());
}
public resetCustomVerifyPhoneMessageTextToDefault(
lang: string,
): Promise<ResetCustomVerifyPhoneMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomVerifyPhoneMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.admin.resetCustomVerifyPhoneMessageTextToDefault(req, null).then((resp) => resp.toObject());
}
public getDefaultVerifySMSOTPMessageText(
req: GetDefaultVerifySMSOTPMessageTextRequest,
): Promise<GetDefaultVerifySMSOTPMessageTextResponse.AsObject> {
return this.grpcService.admin.getDefaultVerifySMSOTPMessageText(req, null).then((resp) => resp.toObject());
}
public getCustomVerifySMSOTPMessageText(
req: GetCustomVerifySMSOTPMessageTextRequest,
): Promise<GetCustomVerifySMSOTPMessageTextResponse.AsObject> {
return this.grpcService.admin.getCustomVerifySMSOTPMessageText(req, null).then((resp) => resp.toObject());
}
public setDefaultVerifySMSOTPMessageText(
req: SetDefaultVerifySMSOTPMessageTextRequest,
): Promise<SetDefaultVerifySMSOTPMessageTextResponse.AsObject> {
return this.grpcService.admin.setDefaultVerifySMSOTPMessageText(req, null).then((resp) => resp.toObject());
}
public resetCustomVerifySMSOTPMessageTextToDefault(
lang: string,
): Promise<ResetCustomVerifySMSOTPMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomVerifySMSOTPMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.admin.resetCustomVerifySMSOTPMessageTextToDefault(req, null).then((resp) => resp.toObject());
}
public getDefaultVerifyEmailOTPMessageText(
req: GetDefaultVerifyEmailOTPMessageTextRequest,
): Promise<GetDefaultVerifyEmailOTPMessageTextResponse.AsObject> {
return this.grpcService.admin.getDefaultVerifyEmailOTPMessageText(req, null).then((resp) => resp.toObject());
}
public getCustomVerifyEmailOTPMessageText(
req: GetCustomVerifyEmailOTPMessageTextRequest,
): Promise<GetCustomVerifyEmailOTPMessageTextResponse.AsObject> {
return this.grpcService.admin.getCustomVerifyEmailOTPMessageText(req, null).then((resp) => resp.toObject());
}
public setDefaultVerifyEmailOTPMessageText(
req: SetDefaultVerifyEmailOTPMessageTextRequest,
): Promise<SetDefaultVerifyEmailOTPMessageTextResponse.AsObject> {
return this.grpcService.admin.setDefaultVerifyEmailOTPMessageText(req, null).then((resp) => resp.toObject());
}
public resetCustomVerifyEmailOTPMessageTextToDefault(
lang: string,
): Promise<ResetCustomVerifyEmailOTPMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomVerifyEmailOTPMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.admin.resetCustomVerifyEmailOTPMessageTextToDefault(req, null).then((resp) => resp.toObject());
}
public getDefaultPasswordResetMessageText(
req: GetDefaultPasswordResetMessageTextRequest,
): Promise<GetDefaultPasswordResetMessageTextResponse.AsObject> {
@@ -475,6 +581,14 @@ export class AdminService {
return this.grpcService.admin.setDefaultPasswordResetMessageText(req, null).then((resp) => resp.toObject());
}
public resetCustomPasswordResetMessageTextToDefault(
lang: string,
): Promise<ResetCustomPasswordResetMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomPasswordResetMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.admin.resetCustomPasswordResetMessageTextToDefault(req, null).then((resp) => resp.toObject());
}
public getDefaultDomainClaimedMessageText(
req: GetDefaultDomainClaimedMessageTextRequest,
): Promise<GetDefaultDomainClaimedMessageTextResponse.AsObject> {
@@ -493,6 +607,14 @@ export class AdminService {
return this.grpcService.admin.setDefaultDomainClaimedMessageText(req, null).then((resp) => resp.toObject());
}
public resetCustomDomainClaimedMessageTextToDefault(
lang: string,
): Promise<ResetCustomDomainClaimedMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomDomainClaimedMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.admin.resetCustomDomainClaimedMessageTextToDefault(req, null).then((resp) => resp.toObject());
}
public getDefaultPasswordlessRegistrationMessageText(
req: GetDefaultPasswordlessRegistrationMessageTextRequest,
): Promise<GetDefaultPasswordlessRegistrationMessageTextResponse.AsObject> {
@@ -511,6 +633,16 @@ export class AdminService {
return this.grpcService.admin.setDefaultPasswordlessRegistrationMessageText(req, null).then((resp) => resp.toObject());
}
public resetCustomPasswordlessRegistrationMessageTextToDefault(
lang: string,
): Promise<ResetCustomPasswordlessRegistrationMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomPasswordlessRegistrationMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.admin
.resetCustomPasswordlessRegistrationMessageTextToDefault(req, null)
.then((resp) => resp.toObject());
}
public getDefaultPasswordChangeMessageText(
req: GetDefaultPasswordChangeMessageTextRequest,
): Promise<GetDefaultPasswordChangeMessageTextResponse.AsObject> {
@@ -529,6 +661,14 @@ export class AdminService {
return this.grpcService.admin.setDefaultPasswordChangeMessageText(req, null).then((resp) => resp.toObject());
}
public resetCustomPasswordChangeMessageTextToDefault(
lang: string,
): Promise<ResetCustomPasswordChangeMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomPasswordChangeMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.admin.resetCustomPasswordChangeMessageTextToDefault(req, null).then((resp) => resp.toObject());
}
public SetUpOrg(org: SetUpOrgRequest.Org, human: SetUpOrgRequest.Human): Promise<SetUpOrgResponse.AsObject> {
const req = new SetUpOrgRequest();

View File

@@ -135,8 +135,12 @@ import {
GetCustomPasswordResetMessageTextResponse,
GetCustomVerifyEmailMessageTextRequest,
GetCustomVerifyEmailMessageTextResponse,
GetCustomVerifyEmailOTPMessageTextRequest,
GetCustomVerifyEmailOTPMessageTextResponse,
GetCustomVerifyPhoneMessageTextRequest,
GetCustomVerifyPhoneMessageTextResponse,
GetCustomVerifySMSOTPMessageTextRequest,
GetCustomVerifySMSOTPMessageTextResponse,
GetDefaultDomainClaimedMessageTextRequest,
GetDefaultDomainClaimedMessageTextResponse,
GetDefaultInitMessageTextRequest,
@@ -155,8 +159,12 @@ import {
GetDefaultPasswordResetMessageTextResponse,
GetDefaultVerifyEmailMessageTextRequest,
GetDefaultVerifyEmailMessageTextResponse,
GetDefaultVerifyEmailOTPMessageTextRequest,
GetDefaultVerifyEmailOTPMessageTextResponse,
GetDefaultVerifyPhoneMessageTextRequest,
GetDefaultVerifyPhoneMessageTextResponse,
GetDefaultVerifySMSOTPMessageTextRequest,
GetDefaultVerifySMSOTPMessageTextResponse,
GetDomainPolicyRequest,
GetDomainPolicyResponse,
GetFlowRequest,
@@ -375,8 +383,12 @@ import {
ResetCustomPasswordResetMessageTextToDefaultResponse,
ResetCustomVerifyEmailMessageTextToDefaultRequest,
ResetCustomVerifyEmailMessageTextToDefaultResponse,
ResetCustomVerifyEmailOTPMessageTextToDefaultRequest,
ResetCustomVerifyEmailOTPMessageTextToDefaultResponse,
ResetCustomVerifyPhoneMessageTextToDefaultRequest,
ResetCustomVerifyPhoneMessageTextToDefaultResponse,
ResetCustomVerifySMSOTPMessageTextToDefaultRequest,
ResetCustomVerifySMSOTPMessageTextToDefaultResponse,
ResetLabelPolicyToDefaultRequest,
ResetLabelPolicyToDefaultResponse,
ResetLockoutPolicyToDefaultRequest,
@@ -408,8 +420,12 @@ import {
SetCustomPasswordResetMessageTextResponse,
SetCustomVerifyEmailMessageTextRequest,
SetCustomVerifyEmailMessageTextResponse,
SetCustomVerifyEmailOTPMessageTextRequest,
SetCustomVerifyEmailOTPMessageTextResponse,
SetCustomVerifyPhoneMessageTextRequest,
SetCustomVerifyPhoneMessageTextResponse,
SetCustomVerifySMSOTPMessageTextRequest,
SetCustomVerifySMSOTPMessageTextResponse,
SetHumanInitialPasswordRequest,
SetOrgMetadataRequest,
SetOrgMetadataResponse,
@@ -620,6 +636,58 @@ export class ManagementService {
return this.grpcService.mgmt.resetCustomVerifyPhoneMessageTextToDefault(req, null).then((resp) => resp.toObject());
}
public getDefaultVerifySMSOTPMessageText(
req: GetDefaultVerifySMSOTPMessageTextRequest,
): Promise<GetDefaultVerifySMSOTPMessageTextResponse.AsObject> {
return this.grpcService.mgmt.getDefaultVerifySMSOTPMessageText(req, null).then((resp) => resp.toObject());
}
public getCustomVerifySMSOTPMessageText(
req: GetCustomVerifySMSOTPMessageTextRequest,
): Promise<GetCustomVerifySMSOTPMessageTextResponse.AsObject> {
return this.grpcService.mgmt.getCustomVerifySMSOTPMessageText(req, null).then((resp) => resp.toObject());
}
public setCustomVerifySMSOTPMessageText(
req: SetCustomVerifySMSOTPMessageTextRequest,
): Promise<SetCustomVerifySMSOTPMessageTextResponse.AsObject> {
return this.grpcService.mgmt.setCustomVerifySMSOTPMessageText(req, null).then((resp) => resp.toObject());
}
public resetCustomVerifySMSOTPMessageTextToDefault(
lang: string,
): Promise<ResetCustomVerifySMSOTPMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomVerifySMSOTPMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.mgmt.resetCustomVerifySMSOTPMessageTextToDefault(req, null).then((resp) => resp.toObject());
}
public getDefaultVerifyEmailOTPMessageText(
req: GetDefaultVerifyEmailOTPMessageTextRequest,
): Promise<GetDefaultVerifyEmailOTPMessageTextResponse.AsObject> {
return this.grpcService.mgmt.getDefaultVerifyEmailOTPMessageText(req, null).then((resp) => resp.toObject());
}
public getCustomVerifyEmailOTPMessageText(
req: GetCustomVerifyEmailOTPMessageTextRequest,
): Promise<GetCustomVerifyEmailOTPMessageTextResponse.AsObject> {
return this.grpcService.mgmt.getCustomVerifyEmailOTPMessageText(req, null).then((resp) => resp.toObject());
}
public setCustomVerifyEmailOTPMessageText(
req: SetCustomVerifyEmailOTPMessageTextRequest,
): Promise<SetCustomVerifyEmailOTPMessageTextResponse.AsObject> {
return this.grpcService.mgmt.setCustomVerifyEmailOTPMessageText(req, null).then((resp) => resp.toObject());
}
public resetCustomVerifyEmailOTPMessageTextToDefault(
lang: string,
): Promise<ResetCustomVerifyEmailOTPMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomVerifyEmailOTPMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.mgmt.resetCustomVerifyEmailOTPMessageTextToDefault(req, null).then((resp) => resp.toObject());
}
public getDefaultPasswordResetMessageText(
req: GetDefaultPasswordResetMessageTextRequest,
): Promise<GetDefaultPasswordResetMessageTextResponse.AsObject> {
@@ -678,6 +746,30 @@ export class ManagementService {
return this.grpcService.mgmt.getDefaultPasswordlessRegistrationMessageText(req, null).then((resp) => resp.toObject());
}
public getCustomPasswordlessRegistrationMessageText(
req: GetCustomPasswordlessRegistrationMessageTextRequest,
): Promise<GetCustomPasswordlessRegistrationMessageTextResponse.AsObject> {
return this.grpcService.mgmt.getCustomPasswordlessRegistrationMessageText(req, null).then((resp) => resp.toObject());
}
public setCustomPasswordlessRegistrationMessageCustomText(
req: SetCustomPasswordlessRegistrationMessageTextRequest,
): Promise<SetCustomPasswordlessRegistrationMessageTextResponse.AsObject> {
return this.grpcService.mgmt
.setCustomPasswordlessRegistrationMessageCustomText(req, null)
.then((resp) => resp.toObject());
}
public resetCustomPasswordlessRegistrationMessageTextToDefault(
lang: string,
): Promise<ResetCustomPasswordlessRegistrationMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomPasswordlessRegistrationMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.mgmt
.resetCustomPasswordlessRegistrationMessageTextToDefault(req, null)
.then((resp) => resp.toObject());
}
public getDefaultPasswordChangeMessageText(
req: GetDefaultPasswordChangeMessageTextRequest,
): Promise<GetDefaultPasswordChangeMessageTextResponse.AsObject> {
@@ -704,30 +796,6 @@ export class ManagementService {
return this.grpcService.mgmt.resetCustomPasswordChangeMessageTextToDefault(req, null).then((resp) => resp.toObject());
}
public getCustomPasswordlessRegistrationMessageText(
req: GetCustomPasswordlessRegistrationMessageTextRequest,
): Promise<GetCustomPasswordlessRegistrationMessageTextResponse.AsObject> {
return this.grpcService.mgmt.getCustomPasswordlessRegistrationMessageText(req, null).then((resp) => resp.toObject());
}
public setCustomPasswordlessRegistrationMessageCustomText(
req: SetCustomPasswordlessRegistrationMessageTextRequest,
): Promise<SetCustomPasswordlessRegistrationMessageTextResponse.AsObject> {
return this.grpcService.mgmt
.setCustomPasswordlessRegistrationMessageCustomText(req, null)
.then((resp) => resp.toObject());
}
public resetCustomPasswordlessRegistrationMessageTextToDefault(
lang: string,
): Promise<ResetCustomPasswordlessRegistrationMessageTextToDefaultResponse.AsObject> {
const req = new ResetCustomPasswordlessRegistrationMessageTextToDefaultRequest();
req.setLanguage(lang);
return this.grpcService.mgmt
.resetCustomPasswordlessRegistrationMessageTextToDefault(req, null)
.then((resp) => resp.toObject());
}
public updateUserName(userId: string, username: string): Promise<UpdateUserNameResponse.AsObject> {
const req = new UpdateUserNameRequest();
req.setUserId(userId);

View File

@@ -1287,6 +1287,8 @@
"INIT": "Инициализация",
"VE": "Потвърди Имейл",
"VP": "Потвърдете телефона",
"VSO": "Проверка на SMS OTP",
"VEO": "Проверка на електронна поща OTP",
"PR": "Нулиране на парола",
"DC": "Заявка за домейн",
"PL": "Без парола",
@@ -1307,7 +1309,9 @@
"verifiedPhone": "Потвърден телефон",
"changedate": "Промяна на датата",
"username": "Потребителско име",
"tempUsername": "Временно потребителско име"
"tempUsername": "Временно потребителско име",
"otp": "Еднократна парола",
"verifyUrl": "URL за потвърждаване на еднократна парола"
},
"TOAST": {
"UPDATED": "Персонализираните текстове са запазени."

View File

@@ -1293,6 +1293,8 @@
"INIT": "Initialisierung",
"VE": "Emailverifikation",
"VP": "Telefonnummerverifikation",
"VSO": "SMS-OTP überprüfen",
"VEO": "E-Mail-OTP überprüfen",
"PR": "Passwort Wiederherstellung",
"DC": "Domainbeanspruchung",
"PL": "Passwortlos",
@@ -1313,7 +1315,9 @@
"verifiedPhone": "Verifizierte Telefonnummer",
"changedate": "Änderungsdatum",
"username": "Username",
"tempUsername": "Temp. Username"
"tempUsername": "Temp. Username",
"otp": "Einmalpasswort",
"verifyUrl": "URL zur Überprüfung des Einmalpassworts"
},
"TOAST": {
"UPDATED": "Benutzerdefinierte Texte gespeichert."

View File

@@ -1294,6 +1294,8 @@
"INIT": "Initialization",
"VE": "Verify Email",
"VP": "Verify Phone",
"VSO": "Verify SMS OTP",
"VEO": "Verify Email OTP",
"PR": "Password Reset",
"DC": "Domain Claim",
"PL": "Passwordless",
@@ -1314,7 +1316,9 @@
"verifiedPhone": "Verified phone",
"changedate": "Change date",
"username": "Username",
"tempUsername": "Temp username"
"tempUsername": "Temp username",
"otp": "One-time password",
"verifyUrl": "Verify One-time-password URL"
},
"TOAST": {
"UPDATED": "Custom Texts saved."

View File

@@ -1294,6 +1294,8 @@
"INIT": "Inicialización",
"VE": "Verificación de email",
"VP": "Verificación de teléfono",
"VSO": "Verificar OTP de SMS",
"VEO": "Verificar OTP de correo electrónico",
"PR": "Restablecimiento de contraseña",
"DC": "Reclamar un dominio",
"PL": "Acceso sin contraseña",
@@ -1314,7 +1316,9 @@
"verifiedPhone": "Teléfono verificado",
"changedate": "Cambiar fecha",
"username": "Nombre de usuario",
"tempUsername": "Nombre de usuario temporal"
"tempUsername": "Nombre de usuario temporal",
"otp": "Contraseña de un solo uso",
"verifyUrl": "URL para verificar la contraseña de un solo uso"
},
"TOAST": {
"UPDATED": "Textos personalizados guardados."

View File

@@ -1293,6 +1293,8 @@
"INIT": "Initialisation",
"VE": "Vérifier l'email",
"VP": "Vérifier le téléphone",
"VSO": "Vérifier SMS OTP",
"VEO": "Vérifier l'OTP par courrier électronique",
"PR": "Réinitialisation du mot de passe",
"DC": "Réclamation de domaine",
"PL": "Sans mot de passe",
@@ -1313,7 +1315,9 @@
"verifiedPhone": "Téléphone vérifié",
"changedate": "Date de changement",
"username": "Nom d'utilisateur",
"tempUsername": "Nom d'utilisateur temporaire"
"tempUsername": "Nom d'utilisateur temporaire",
"otp": "Mot de passe à usage unique",
"verifyUrl": "URL pour vérifier le mot de passe à usage unique"
},
"TOAST": {
"UPDATED": "Textes personnalisés enregistrés."

View File

@@ -1293,6 +1293,8 @@
"INIT": "Inizializzazione",
"VE": "Verificazione l'e-mail",
"VP": "Verificazione del telefono",
"VSO": "Verifica OTP SMS",
"VEO": "Verifica OTP Email",
"PR": "Ripristino della password",
"DC": "Rivendicazione del dominio",
"PL": "Autenticazione Passwordless",
@@ -1313,7 +1315,9 @@
"verifiedPhone": "Telefono verificato",
"changedate": "Cambia data",
"username": "Nome utente",
"tempUsername": "Nome utente temporaneo"
"tempUsername": "Nome utente temporaneo",
"otp": "Password monouso",
"verifyUrl": "URL per verificare la password monouso"
},
"TOAST": {
"UPDATED": "Testi personalizzati salvati."

View File

@@ -1289,6 +1289,8 @@
"INIT": "初期セットアップ",
"VE": "メールの認証",
"VP": "電話番号の認証",
"VSO": "SMS OTPを確認する",
"VEO": "メールOTPを確認する",
"PR": "パスワードのリセット",
"DC": "ドメインクレーム",
"PL": "パスワードレス",
@@ -1309,7 +1311,9 @@
"verifiedPhone": "認証済みの電話番号",
"changedate": "変更日",
"username": "ユーザー名",
"tempUsername": "一時ユーザー名"
"tempUsername": "一時ユーザー名",
"otp": "ワンタイムパスワード",
"verifyUrl": "ワンタイムパスワードを確認するURL"
},
"TOAST": {
"UPDATED": "カスタムテキストが保存されました。"

View File

@@ -1294,6 +1294,8 @@
"INIT": "Иницијализација",
"VE": "Верификација на е-пошта",
"VP": "Верификација на телефонски број",
"VSO": "Провери SMS OTP",
"VEO": "Провери Email OTP",
"PR": "Ресетирање на лозинка",
"DC": "Зафатница на домен",
"PL": "Лозинка без лозинка",
@@ -1314,7 +1316,9 @@
"verifiedPhone": "Верифициран телефонски број",
"changedate": "Датум на промена",
"username": "Корисничко име",
"tempUsername": "Привремено корисничко име"
"tempUsername": "Привремено корисничко име",
"otp": "Еднократна лозинка",
"verifyUrl": "URL за потврдување на еднократна лозинка"
},
"TOAST": {
"UPDATED": "Прилагодените текстови се зачувани."

View File

@@ -1293,6 +1293,8 @@
"INIT": "Inicjalizacja",
"VE": "Weryfikacja e-mail",
"VP": "Weryfikacja telefonu",
"VSO": "Zweryfikuj SMS OTP",
"VEO": "Zweryfikuj Email OTP",
"PR": "Resetowanie hasła",
"DC": "Rejestracja domeny",
"PL": "Bez hasła",
@@ -1313,7 +1315,9 @@
"verifiedPhone": "Zweryfikowany telefon",
"changedate": "Data zmiany",
"username": "Nazwa użytkownika",
"tempUsername": "Tymczasowa nazwa użytkownika"
"tempUsername": "Tymczasowa nazwa użytkownika",
"otp": "Hasło jednorazowe",
"verifyUrl": "URL do weryfikacji hasła jednorazowego"
},
"TOAST": {
"UPDATED": "Teksty niestandardowe zapisane."

View File

@@ -1294,6 +1294,8 @@
"INIT": "Inicialização",
"VE": "Verificar Email",
"VP": "Verificar Telefone",
"VSO": "Verificar OTP de SMS",
"VEO": "Verificar OTP de Email",
"PR": "Redefinição de Senha",
"DC": "Reivindicação de Domínio",
"PL": "Sem senha",
@@ -1314,7 +1316,9 @@
"verifiedPhone": "Telefone verificado",
"changedate": "Data de alteração",
"username": "Nome de usuário",
"tempUsername": "Nome de usuário temporário"
"tempUsername": "Nome de usuário temporário",
"otp": "Senha de uso único",
"verifyUrl": "URL para verificar a senha de uso único"
},
"TOAST": {
"UPDATED": "Textos personalizados salvos."

View File

@@ -1292,6 +1292,8 @@
"INIT": "初始化",
"VE": "验证电子邮箱",
"VP": "验证手机号码",
"VSO": "验证短信一次性密码",
"VEO": "验证电子邮件一次性密码",
"PR": "重置密码",
"DC": "域名声明",
"PL": "无密码身份验证",
@@ -1312,7 +1314,9 @@
"verifiedPhone": "已验证的手机号码",
"changedate": "修改于",
"username": "用户名",
"tempUsername": "临时用户名"
"tempUsername": "临时用户名",
"otp": "一次性密码",
"verifyUrl": "验证一次性密码的URL"
},
"TOAST": {
"UPDATED": "自定义文本已保存。"