feat: add it-IT to internationalization (#2439)

* login it

* deepl translations, corrections

* login, en typos

* it internal, typo fixes

* message texts, optim console texts, guide for internationalization

* missing console, fix de, en

* Add missing keys from main

* translate missing keys

* add it to console selection, change it policy descriptors

* add missing i18n from jwt idp, fixes

* add missing translations

* missing translations

* fix

* auth user language change, interceptor

* remove multiline operator

Co-authored-by: Livio Amstutz <livio.a@gmail.com>
This commit is contained in:
Max Peintner
2021-11-15 08:23:35 +01:00
committed by GitHub
parent cfdb8c3301
commit 12eed30c08
15 changed files with 3082 additions and 275 deletions

View File

@@ -22,6 +22,8 @@ import {
GetMyProfileResponse,
GetMyUserRequest,
GetMyUserResponse,
GetSupportedLanguagesRequest,
GetSupportedLanguagesResponse,
ListMyAuthFactorsRequest,
ListMyAuthFactorsResponse,
ListMyLinkedIDPsRequest,
@@ -86,8 +88,6 @@ import { Gender, MembershipQuery, User, WebAuthNVerification } from '../proto/ge
import { GrpcService } from './grpc.service';
import { StorageKey, StorageLocation, StorageService } from './storage.service';
@Injectable({
providedIn: 'root',
})
@@ -108,26 +108,26 @@ export class GrpcAuthService {
private storage: StorageService,
) {
this.user = merge(
of(this.oauthService.getAccessToken()).pipe(
filter(token => token ? true : false),
),
of(this.oauthService.getAccessToken()).pipe(filter((token) => (token ? true : false))),
this.oauthService.events.pipe(
filter(e => e.type === 'token_received'),
filter((e) => e.type === 'token_received'),
timeout(this.oauthService.waitForTokenInMsec || 0),
catchError(_ => of(null)), // timeout is not an error
map(_ => this.oauthService.getAccessToken()),
catchError((_) => of(null)), // timeout is not an error
map((_) => this.oauthService.getAccessToken()),
),
).pipe(
take(1),
mergeMap(() => {
return from(this.getMyUser().then(resp => {
const user = resp.user;
if (user) {
return user;
} else {
return undefined;
}
}));
return from(
this.getMyUser().then((resp) => {
const user = resp.user;
if (user) {
return user;
} else {
return undefined;
}
}),
);
}),
finalize(() => {
this.loadPermissions();
@@ -143,7 +143,7 @@ export class GrpcAuthService {
public async getActiveOrg(id?: string): Promise<Org.AsObject> {
if (id) {
const find = this.cachedOrgs.find(tmp => tmp.id === id);
const find = this.cachedOrgs.find((tmp) => tmp.id === id);
if (find) {
this.setActiveOrg(find);
return Promise.resolve(find);
@@ -151,7 +151,7 @@ export class GrpcAuthService {
const orgs = (await this.listMyProjectOrgs(10, 0)).resultList;
this.cachedOrgs = orgs;
const toFind = this.cachedOrgs.find(tmp => tmp.id === id);
const toFind = this.cachedOrgs.find((tmp) => tmp.id === id);
if (toFind) {
this.setActiveOrg(toFind);
return Promise.resolve(toFind);
@@ -167,7 +167,7 @@ export class GrpcAuthService {
}
const org = this.storage.getItem<Org.AsObject>(StorageKey.organization, StorageLocation.local);
if (org && orgs.find(tmp => tmp.id === org.id)) {
if (org && orgs.find((tmp) => tmp.id === org.id)) {
this.storage.setItem(StorageKey.organization, org, StorageLocation.session);
return org;
}
@@ -175,7 +175,7 @@ export class GrpcAuthService {
if (orgs.length === 0) {
return Promise.reject(new Error('No organizations found!'));
}
const orgToSet = orgs.find(element => element.id !== '0' && element.name !== '');
const orgToSet = orgs.find((element) => element.id !== '0' && element.name !== '');
if (orgToSet) {
this.setActiveOrg(orgToSet);
@@ -197,31 +197,35 @@ export class GrpcAuthService {
}
private loadPermissions(): void {
from(this.listMyZitadelPermissions()).pipe(
map(rolesResp => rolesResp.resultList),
catchError(_ => {
return of([]);
}),
finalize(() => {
this.fetchedZitadelPermissions.next(true);
}),
).subscribe(roles => {
this.zitadelPermissions.next(roles);
});
from(this.listMyZitadelPermissions())
.pipe(
map((rolesResp) => rolesResp.resultList),
catchError((_) => {
return of([]);
}),
finalize(() => {
this.fetchedZitadelPermissions.next(true);
}),
)
.subscribe((roles) => {
this.zitadelPermissions.next(roles);
});
}
private loadFeatures(): void {
from(this.listMyZitadelFeatures()).pipe(
map(featuresResp => featuresResp.resultList),
catchError(_ => {
return of([]);
}),
finalize(() => {
this.fetchedZitadelFeatures.next(true);
}),
).subscribe(features => {
this.zitadelFeatures.next(features);
});
from(this.listMyZitadelFeatures())
.pipe(
map((featuresResp) => featuresResp.resultList),
catchError((_) => {
return of([]);
}),
finalize(() => {
this.fetchedZitadelFeatures.next(true);
}),
)
.subscribe((features) => {
this.zitadelFeatures.next(features);
});
}
/**
@@ -230,7 +234,7 @@ export class GrpcAuthService {
*/
public isAllowed(roles: string[] | RegExp[]): Observable<boolean> {
if (roles && roles.length > 0) {
return this.zitadelPermissions.pipe(switchMap(zroles => of(this.hasRoles(zroles, roles))));
return this.zitadelPermissions.pipe(switchMap((zroles) => of(this.hasRoles(zroles, roles))));
} else {
return of(false);
}
@@ -242,11 +246,15 @@ export class GrpcAuthService {
* @param requestedRoles required roles for accessing the respective component
*/
public hasRoles(userRoles: string[], requestedRoles: string[] | RegExp[]): boolean {
return requestedRoles.findIndex((regexp: any) => {
return userRoles.findIndex(role => {
return new RegExp(regexp).test(role);
}) > -1;
}) > -1;
return (
requestedRoles.findIndex((regexp: any) => {
return (
userRoles.findIndex((role) => {
return new RegExp(regexp).test(role);
}) > -1
);
}) > -1
);
}
/**
@@ -255,7 +263,7 @@ export class GrpcAuthService {
*/
public canUseFeature(features: string[] | RegExp[]): Observable<boolean> {
if (features && features.length > 0) {
return this.zitadelFeatures.pipe(switchMap(zFeatures => of(this.hasFeature(zFeatures, features))));
return this.zitadelFeatures.pipe(switchMap((zFeatures) => of(this.hasFeature(zFeatures, features))));
} else {
return of(false);
}
@@ -267,33 +275,33 @@ export class GrpcAuthService {
* @param requestedFeature required features for accessing the respective component
*/
public hasFeature(userFeatures: string[], requestedFeatures: string[] | RegExp[]): boolean {
return requestedFeatures.findIndex((regexp: any) => {
return userFeatures.findIndex(feature => {
return new RegExp(regexp).test(feature);
}) > -1;
}) > -1;
return (
requestedFeatures.findIndex((regexp: any) => {
return (
userFeatures.findIndex((feature) => {
return new RegExp(regexp).test(feature);
}) > -1
);
}) > -1
);
}
public getMyProfile(): Promise<GetMyProfileResponse.AsObject> {
return this.grpcService.auth.getMyProfile(new GetMyProfileRequest(), null).then(resp => resp.toObject());
return this.grpcService.auth.getMyProfile(new GetMyProfileRequest(), null).then((resp) => resp.toObject());
}
public getMyPasswordComplexityPolicy(): Promise<GetMyPasswordComplexityPolicyResponse.AsObject> {
return this.grpcService.auth.getMyPasswordComplexityPolicy(
new GetMyPasswordComplexityPolicyRequest(), null,
).then(resp => resp.toObject());
return this.grpcService.auth
.getMyPasswordComplexityPolicy(new GetMyPasswordComplexityPolicyRequest(), null)
.then((resp) => resp.toObject());
}
public getMyUser(): Promise<GetMyUserResponse.AsObject> {
return this.grpcService.auth.getMyUser(
new GetMyUserRequest(), null,
).then(resp => resp.toObject());
return this.grpcService.auth.getMyUser(new GetMyUserRequest(), null).then((resp) => resp.toObject());
}
public listMyMultiFactors(): Promise<ListMyAuthFactorsResponse.AsObject> {
return this.grpcService.auth.listMyAuthFactors(
new ListMyAuthFactorsRequest(), null,
).then(resp => resp.toObject());
return this.grpcService.auth.listMyAuthFactors(new ListMyAuthFactorsRequest(), null).then((resp) => resp.toObject());
}
public listMyProjectOrgs(
@@ -313,7 +321,7 @@ export class GrpcAuthService {
req.setQueriesList(queryList);
}
return this.grpcService.auth.listMyProjectOrgs(req, null).then(resp => resp.toObject());
return this.grpcService.auth.listMyProjectOrgs(req, null).then((resp) => resp.toObject());
}
public updateMyProfile(
@@ -343,7 +351,7 @@ export class GrpcAuthService {
if (preferredLanguage) {
req.setPreferredLanguage(preferredLanguage);
}
return this.grpcService.auth.updateMyProfile(req, null).then(resp => resp.toObject());
return this.grpcService.auth.updateMyProfile(req, null).then((resp) => resp.toObject());
}
public get zitadelPermissionsChanged(): Observable<string[]> {
@@ -352,11 +360,14 @@ export class GrpcAuthService {
public listMyUserSessions(): Promise<ListMyUserSessionsResponse.AsObject> {
const req = new ListMyUserSessionsRequest();
return this.grpcService.auth.listMyUserSessions(req, null).then(resp => resp.toObject());
return this.grpcService.auth.listMyUserSessions(req, null).then((resp) => resp.toObject());
}
public listMyUserGrants(limit?: number, offset?: number, queryList?: ListQuery[]):
Promise<ListMyUserGrantsResponse.AsObject> {
public listMyUserGrants(
limit?: number,
offset?: number,
queryList?: ListQuery[],
): Promise<ListMyUserGrantsResponse.AsObject> {
const req = new ListMyUserGrantsRequest();
const query = new ListQuery();
if (limit) {
@@ -366,10 +377,12 @@ export class GrpcAuthService {
query.setOffset(offset);
}
req.setQuery(query);
return this.grpcService.auth.listMyUserGrants(req, null).then(resp => resp.toObject());
return this.grpcService.auth.listMyUserGrants(req, null).then((resp) => resp.toObject());
}
public listMyMemberships(limit: number, offset: number,
public listMyMemberships(
limit: number,
offset: number,
queryList?: MembershipQuery[],
): Promise<ListMyMembershipsResponse.AsObject> {
const req = new ListMyMembershipsRequest();
@@ -384,92 +397,87 @@ export class GrpcAuthService {
req.setQueriesList(queryList);
}
req.setQuery(metadata);
return this.grpcService.auth.listMyMemberships(req, null).then(resp => resp.toObject());
return this.grpcService.auth.listMyMemberships(req, null).then((resp) => resp.toObject());
}
public getMyEmail(): Promise<GetMyEmailResponse.AsObject> {
const req = new GetMyEmailRequest();
return this.grpcService.auth.getMyEmail(req, null).then(resp => resp.toObject());
return this.grpcService.auth.getMyEmail(req, null).then((resp) => resp.toObject());
}
public setMyEmail(email: string): Promise<SetMyEmailResponse.AsObject> {
const req = new SetMyEmailRequest();
req.setEmail(email);
return this.grpcService.auth.setMyEmail(req, null).then(resp => resp.toObject());
return this.grpcService.auth.setMyEmail(req, null).then((resp) => resp.toObject());
}
public resendMyEmailVerification(): Promise<ResendMyEmailVerificationResponse.AsObject> {
const req = new ResendMyEmailVerificationRequest();
return this.grpcService.auth.resendMyEmailVerification(req, null).then(resp => resp.toObject());
return this.grpcService.auth.resendMyEmailVerification(req, null).then((resp) => resp.toObject());
}
public getSupportedLanguages(): Promise<GetSupportedLanguagesResponse.AsObject> {
const req = new GetSupportedLanguagesRequest();
return this.grpcService.auth.getSupportedLanguages(req, null).then((resp) => resp.toObject());
}
public removeMyPhone(): Promise<RemoveMyPhoneResponse.AsObject> {
return this.grpcService.auth.removeMyPhone(
new RemoveMyPhoneRequest(), null,
).then(resp => resp.toObject());
return this.grpcService.auth.removeMyPhone(new RemoveMyPhoneRequest(), null).then((resp) => resp.toObject());
}
public updateMyUserName(username: string): Promise<UpdateMyUserNameResponse.AsObject> {
const req = new UpdateMyUserNameRequest();
req.setUserName(username);
return this.grpcService.auth.updateMyUserName(req, null).then(resp => resp.toObject());
return this.grpcService.auth.updateMyUserName(req, null).then((resp) => resp.toObject());
}
public listMyZitadelPermissions(): Promise<ListMyZitadelPermissionsResponse.AsObject> {
return this.grpcService.auth.listMyZitadelPermissions(
new ListMyZitadelPermissionsRequest(), null,
).then(resp => resp.toObject());
return this.grpcService.auth
.listMyZitadelPermissions(new ListMyZitadelPermissionsRequest(), null)
.then((resp) => resp.toObject());
}
public listMyZitadelFeatures(): Promise<ListMyZitadelFeaturesResponse.AsObject> {
return this.grpcService.auth.listMyZitadelFeatures(
new ListMyZitadelFeaturesRequest(), null,
).then(resp => resp.toObject());
return this.grpcService.auth
.listMyZitadelFeatures(new ListMyZitadelFeaturesRequest(), null)
.then((resp) => resp.toObject());
}
public getMyPhone(): Promise<GetMyPhoneResponse.AsObject> {
return this.grpcService.auth.getMyPhone(
new GetMyPhoneRequest(), null,
).then(resp => resp.toObject());
return this.grpcService.auth.getMyPhone(new GetMyPhoneRequest(), null).then((resp) => resp.toObject());
}
public setMyPhone(phone: string): Promise<SetMyPhoneResponse.AsObject> {
const req = new SetMyPhoneRequest();
req.setPhone(phone);
return this.grpcService.auth.setMyPhone(req, null).then(resp => resp.toObject());
return this.grpcService.auth.setMyPhone(req, null).then((resp) => resp.toObject());
}
public resendMyPhoneVerification(): Promise<ResendMyPhoneVerificationResponse.AsObject> {
const req = new ResendMyPhoneVerificationRequest();
return this.grpcService.auth.resendMyPhoneVerification(req, null).then(resp => resp.toObject());
return this.grpcService.auth.resendMyPhoneVerification(req, null).then((resp) => resp.toObject());
}
public updateMyPassword(oldPassword: string, newPassword: string): Promise<UpdateMyPasswordResponse.AsObject> {
const req = new UpdateMyPasswordRequest();
req.setOldPassword(oldPassword);
req.setNewPassword(newPassword);
return this.grpcService.auth.updateMyPassword(req, null).then(resp => resp.toObject());
return this.grpcService.auth.updateMyPassword(req, null).then((resp) => resp.toObject());
}
public removeMyLinkedIDP(
idpId: string,
linkedUserId: string,
): Promise<RemoveMyLinkedIDPResponse.AsObject> {
public removeMyLinkedIDP(idpId: string, linkedUserId: string): Promise<RemoveMyLinkedIDPResponse.AsObject> {
const req = new RemoveMyLinkedIDPRequest();
req.setLinkedUserId(linkedUserId);
req.setIdpId(idpId);
return this.grpcService.auth.removeMyLinkedIDP(req, null).then(resp => resp.toObject());
return this.grpcService.auth.removeMyLinkedIDP(req, null).then((resp) => resp.toObject());
}
public removeMyAvatar(): Promise<RemoveMyAvatarResponse.AsObject> {
const req = new RemoveMyAvatarRequest();
return this.grpcService.auth.removeMyAvatar(req, null).then(resp => resp.toObject());
return this.grpcService.auth.removeMyAvatar(req, null).then((resp) => resp.toObject());
}
public listMyLinkedIDPs(
limit: number,
offset: number,
): Promise<ListMyLinkedIDPsResponse.AsObject> {
public listMyLinkedIDPs(limit: number, offset: number): Promise<ListMyLinkedIDPsResponse.AsObject> {
const req = new ListMyLinkedIDPsRequest();
const metadata = new ListQuery();
if (limit) {
@@ -479,25 +487,21 @@ export class GrpcAuthService {
metadata.setOffset(offset);
}
req.setQuery(metadata);
return this.grpcService.auth.listMyLinkedIDPs(req, null).then(resp => resp.toObject());
return this.grpcService.auth.listMyLinkedIDPs(req, null).then((resp) => resp.toObject());
}
public addMyMultiFactorOTP(): Promise<AddMyAuthFactorOTPResponse.AsObject> {
return this.grpcService.auth.addMyAuthFactorOTP(
new AddMyAuthFactorOTPRequest(), null,
).then(resp => resp.toObject());
return this.grpcService.auth.addMyAuthFactorOTP(new AddMyAuthFactorOTPRequest(), null).then((resp) => resp.toObject());
}
public addMyMultiFactorU2F(): Promise<AddMyAuthFactorU2FResponse.AsObject> {
return this.grpcService.auth.addMyAuthFactorU2F(
new AddMyAuthFactorU2FRequest(), null,
).then(resp => resp.toObject());
return this.grpcService.auth.addMyAuthFactorU2F(new AddMyAuthFactorU2FRequest(), null).then((resp) => resp.toObject());
}
public removeMyMultiFactorU2F(tokenId: string): Promise<RemoveMyAuthFactorU2FResponse.AsObject> {
const req = new RemoveMyAuthFactorU2FRequest();
req.setTokenId(tokenId);
return this.grpcService.auth.removeMyAuthFactorU2F(req, null).then(resp => resp.toObject());
return this.grpcService.auth.removeMyAuthFactorU2F(req, null).then((resp) => resp.toObject());
}
public verifyMyMultiFactorU2F(credential: string, tokenname: string): Promise<VerifyMyAuthFactorU2FResponse.AsObject> {
@@ -507,25 +511,21 @@ export class GrpcAuthService {
verification.setTokenName(tokenname);
req.setVerification(verification);
return this.grpcService.auth.verifyMyAuthFactorU2F(req, null).then(resp => resp.toObject());
return this.grpcService.auth.verifyMyAuthFactorU2F(req, null).then((resp) => resp.toObject());
}
public listMyPasswordless(): Promise<ListMyPasswordlessResponse.AsObject> {
return this.grpcService.auth.listMyPasswordless(
new ListMyPasswordlessRequest(), null,
).then(resp => resp.toObject());
return this.grpcService.auth.listMyPasswordless(new ListMyPasswordlessRequest(), null).then((resp) => resp.toObject());
}
public addMyPasswordless(): Promise<AddMyPasswordlessResponse.AsObject> {
return this.grpcService.auth.addMyPasswordless(
new AddMyPasswordlessRequest(), null,
).then(resp => resp.toObject());
return this.grpcService.auth.addMyPasswordless(new AddMyPasswordlessRequest(), null).then((resp) => resp.toObject());
}
public removeMyPasswordless(tokenId: string): Promise<RemoveMyPasswordlessResponse.AsObject> {
const req = new RemoveMyPasswordlessRequest();
req.setTokenId(tokenId);
return this.grpcService.auth.removeMyPasswordless(req, null).then(resp => resp.toObject());
return this.grpcService.auth.removeMyPasswordless(req, null).then((resp) => resp.toObject());
}
public verifyMyPasswordless(credential: string, tokenname: string): Promise<VerifyMyPasswordlessResponse.AsObject> {
@@ -535,37 +535,35 @@ export class GrpcAuthService {
verification.setPublicKeyCredential(credential);
req.setVerification(verification);
return this.grpcService.auth.verifyMyPasswordless(
req, null,
).then(resp => resp.toObject());
return this.grpcService.auth.verifyMyPasswordless(req, null).then((resp) => resp.toObject());
}
public sendMyPasswordlessLink(): Promise<SendMyPasswordlessLinkResponse.AsObject> {
const req = new SendMyPasswordlessLinkRequest();
return this.grpcService.auth.sendMyPasswordlessLink(req, null).then(resp => resp.toObject());
return this.grpcService.auth.sendMyPasswordlessLink(req, null).then((resp) => resp.toObject());
}
public addMyPasswordlessLink(): Promise<AddMyPasswordlessLinkResponse.AsObject> {
const req = new AddMyPasswordlessLinkRequest();
return this.grpcService.auth.addMyPasswordlessLink(req, null).then(resp => resp.toObject());
return this.grpcService.auth.addMyPasswordlessLink(req, null).then((resp) => resp.toObject());
}
public removeMyMultiFactorOTP(): Promise<RemoveMyAuthFactorOTPResponse.AsObject> {
return this.grpcService.auth.removeMyAuthFactorOTP(
new RemoveMyAuthFactorOTPRequest(), null,
).then(resp => resp.toObject());
return this.grpcService.auth
.removeMyAuthFactorOTP(new RemoveMyAuthFactorOTPRequest(), null)
.then((resp) => resp.toObject());
}
public verifyMyMultiFactorOTP(code: string): Promise<VerifyMyAuthFactorOTPResponse.AsObject> {
const req = new VerifyMyAuthFactorOTPRequest();
req.setCode(code);
return this.grpcService.auth.verifyMyAuthFactorOTP(req, null).then(resp => resp.toObject());
return this.grpcService.auth.verifyMyAuthFactorOTP(req, null).then((resp) => resp.toObject());
}
public verifyMyPhone(code: string): Promise<VerifyMyPhoneResponse.AsObject> {
const req = new VerifyMyPhoneRequest();
req.setCode(code);
return this.grpcService.auth.verifyMyPhone(req, null).then(resp => resp.toObject());
return this.grpcService.auth.verifyMyPhone(req, null).then((resp) => resp.toObject());
}
public listMyUserChanges(limit: number, sequence: number): Promise<ListMyUserChangesResponse.AsObject> {
@@ -579,6 +577,6 @@ export class GrpcAuthService {
query.setSequence(sequence);
}
req.setQuery(query);
return this.grpcService.auth.listMyUserChanges(req, null).then(resp => resp.toObject());
return this.grpcService.auth.listMyUserChanges(req, null).then((resp) => resp.toObject());
}
}