feat(idp): provide option to auto link user (#7734)

* init auto linking

* prompt handling

* working

* translations

* console

* fixes

* unify

* custom texts

* fix tests

* linting

* fix check of existing user

* fix bg translation

* set unspecified as default in the form
This commit is contained in:
Livio Spring
2024-04-10 17:46:30 +02:00
committed by GitHub
parent b3e3239d76
commit dcfa2f7955
75 changed files with 1432 additions and 418 deletions

View File

@@ -15,6 +15,7 @@ import {
InitPasswordDoneScreenText,
InitPasswordScreenText,
LinkingUserDoneScreenText,
LinkingUserPromptScreenText,
LoginScreenText,
LogoutDoneScreenText,
MFAProvidersText,
@@ -375,5 +376,12 @@ export function mapRequestValues(map: Partial<Map>, req: Req): Req {
r34.setUsernameLabel(map.externalRegistrationUserOverviewText?.usernameLabel ?? '');
req.setExternalRegistrationUserOverviewText(r34);
const r35 = new LinkingUserPromptScreenText();
r35.setTitle(map.linkingUserPromptText?.title ?? '');
r35.setDescription(map.linkingUserPromptText?.description ?? '');
r35.setLinkButtonText(map.linkingUserPromptText?.linkButtonText ?? '');
r35.setOtherButtonText(map.linkingUserPromptText?.otherButtonText ?? '');
req.setLinkingUserPromptText(r35);
return req;
}

View File

@@ -41,6 +41,7 @@ const KeyNamesArray = [
'initPasswordText',
'initializeDoneText',
'initializeUserText',
'linkingUserPromptText',
'linkingUserDoneText',
'loginText',
'logoutText',

View File

@@ -23,4 +23,12 @@
<mat-checkbox formControlName="isLinkingAllowed">{{ 'IDP.OPTIONS.ISLINKINGALLOWED' | translate }}</mat-checkbox>
</div>
</cnsl-info-section>
<cnsl-info-section class="auto-reg-info">
<p class="checkbox-desc">{{ 'IDP.OPTIONS.AUTOLINKING_DESC' | translate }}</p>
<mat-select formControlName="autoLinking">
<mat-option *ngFor="let linkingType of linkingTypes" [value]="linkingType">
{{ 'IDP.OPTIONS.AUTOLINKINGTYPE.' + linkingType | translate }}
</mat-option>
</mat-select>
</cnsl-info-section>
</form>

View File

@@ -1,7 +1,8 @@
import { Component, EventEmitter, Input, OnChanges, OnDestroy, Output } from '@angular/core';
import { FormControl, FormGroup } from '@angular/forms';
import { Subject, takeUntil } from 'rxjs';
import { Options } from 'src/app/proto/generated/zitadel/idp_pb';
import { Options, AutoLinkingOption } from 'src/app/proto/generated/zitadel/idp_pb';
import { AccessTokenType } from '../../proto/generated/zitadel/user_pb';
@Component({
selector: 'cnsl-provider-options',
@@ -17,8 +18,15 @@ export class ProviderOptionsComponent implements OnChanges, OnDestroy {
isAutoUpdate: new FormControl(false, []),
isCreationAllowed: new FormControl(true, []),
isLinkingAllowed: new FormControl(true, []),
autoLinking: new FormControl(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED, []),
});
public linkingTypes: AutoLinkingOption[] = [
AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED,
AutoLinkingOption.AUTO_LINKING_OPTION_USERNAME,
AutoLinkingOption.AUTO_LINKING_OPTION_EMAIL,
];
constructor() {
this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value) => {
if (value) {
@@ -27,6 +35,7 @@ export class ProviderOptionsComponent implements OnChanges, OnDestroy {
opt.setIsAutoUpdate(value.isAutoUpdate);
opt.setIsCreationAllowed(value.isCreationAllowed);
opt.setIsLinkingAllowed(value.isLinkingAllowed);
opt.setAutoLinking(value.autoLinking);
this.optionsChanged.emit(opt);
}
});

View File

@@ -2,13 +2,22 @@ import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatSelectModule } from '@angular/material/select';
import { TranslateModule } from '@ngx-translate/core';
import { InfoSectionModule } from '../info-section/info-section.module';
import { ProviderOptionsComponent } from './provider-options.component';
@NgModule({
declarations: [ProviderOptionsComponent],
imports: [CommonModule, MatCheckboxModule, FormsModule, InfoSectionModule, ReactiveFormsModule, TranslateModule],
imports: [
CommonModule,
MatCheckboxModule,
MatSelectModule,
FormsModule,
InfoSectionModule,
ReactiveFormsModule,
TranslateModule,
],
exports: [ProviderOptionsComponent],
})
export class ProviderOptionsModule {}

View File

@@ -10,7 +10,7 @@ import {
GetProviderByIDRequest as AdminGetProviderByIDRequest,
UpdateAppleProviderRequest as AdminUpdateAppleProviderRequest,
} from 'src/app/proto/generated/zitadel/admin_pb';
import { Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import { AutoLinkingOption, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import {
AddAppleProviderRequest as MgmtAddAppleProviderRequest,
GetProviderByIDRequest as MgmtGetProviderByIDRequest,
@@ -34,7 +34,10 @@ const MAX_ALLOWED_SIZE = 5 * 1024;
})
export class ProviderAppleComponent {
public showOptional: boolean = false;
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
public options: Options = new Options()
.setIsCreationAllowed(true)
.setIsLinkingAllowed(true)
.setAutoLinking(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED);
// DEPRECATED: use id$ instead
public id: string | null = '';
// DEPRECATED: assert service$ instead

View File

@@ -10,7 +10,14 @@ import {
GetProviderByIDRequest as AdminGetProviderByIDRequest,
UpdateAzureADProviderRequest as AdminUpdateAzureADProviderRequest,
} from 'src/app/proto/generated/zitadel/admin_pb';
import { AzureADTenant, AzureADTenantType, IDPOwnerType, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import {
AutoLinkingOption,
AzureADTenant,
AzureADTenantType,
IDPOwnerType,
Options,
Provider,
} from 'src/app/proto/generated/zitadel/idp_pb';
import {
AddAzureADProviderRequest as MgmtAddAzureADProviderRequest,
GetProviderByIDRequest as MgmtGetProviderByIDRequest,
@@ -32,7 +39,10 @@ import { ProviderNextService } from '../provider-next/provider-next.service';
})
export class ProviderAzureADComponent {
public showOptional: boolean = false;
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
public options: Options = new Options()
.setIsCreationAllowed(true)
.setIsLinkingAllowed(true)
.setAutoLinking(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED);
// DEPRECATED: use id$ instead
public id: string | null = '';
// DEPRECATED: assert service$ instead

View File

@@ -10,7 +10,7 @@ import {
GetProviderByIDRequest as AdminGetProviderByIDRequest,
UpdateGitHubEnterpriseServerProviderRequest as AdminUpdateGitHubEnterpriseServerProviderRequest,
} from 'src/app/proto/generated/zitadel/admin_pb';
import { Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import { AutoLinkingOption, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import {
AddGitHubEnterpriseServerProviderRequest as MgmtAddGitHubEnterpriseServerProviderRequest,
GetProviderByIDRequest as MgmtGetProviderByIDRequest,
@@ -32,7 +32,10 @@ import { ProviderNextService } from '../provider-next/provider-next.service';
})
export class ProviderGithubESComponent {
public showOptional: boolean = false;
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
public options: Options = new Options()
.setIsCreationAllowed(true)
.setIsLinkingAllowed(true)
.setAutoLinking(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED);
// DEPRECATED: use id$ instead
public id: string | null = '';

View File

@@ -10,7 +10,7 @@ import {
GetProviderByIDRequest as AdminGetProviderByIDRequest,
UpdateGitHubProviderRequest as AdminUpdateGithubProviderRequest,
} from 'src/app/proto/generated/zitadel/admin_pb';
import { Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import { AutoLinkingOption, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import {
AddGitHubProviderRequest as MgmtAddGithubProviderRequest,
GetProviderByIDRequest as MgmtGetProviderByIDRequest,
@@ -32,7 +32,10 @@ import { ProviderNextService } from '../provider-next/provider-next.service';
})
export class ProviderGithubComponent {
public showOptional: boolean = false;
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
public options: Options = new Options()
.setIsCreationAllowed(true)
.setIsLinkingAllowed(true)
.setAutoLinking(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED);
// DEPRECATED: use id$ instead
public id: string | null = '';
// DEPRECATED: assert service$ instead

View File

@@ -10,7 +10,7 @@ import {
GetProviderByIDRequest as AdminGetProviderByIDRequest,
UpdateGitLabSelfHostedProviderRequest as AdminUpdateGitLabSelfHostedProviderRequest,
} from 'src/app/proto/generated/zitadel/admin_pb';
import { Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import { AutoLinkingOption, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import {
AddGitLabSelfHostedProviderRequest as MgmtAddGitLabSelfHostedProviderRequest,
GetProviderByIDRequest as MgmtGetProviderByIDRequest,
@@ -32,7 +32,10 @@ import { ProviderNextService } from '../provider-next/provider-next.service';
})
export class ProviderGitlabSelfHostedComponent {
public showOptional: boolean = false;
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
public options: Options = new Options()
.setIsCreationAllowed(true)
.setIsLinkingAllowed(true)
.setAutoLinking(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED);
// DEPRECATED: use id$ instead
public id: string | null = '';
// DEPRECATED: assert service$ instead

View File

@@ -10,7 +10,7 @@ import {
GetProviderByIDRequest as AdminGetProviderByIDRequest,
UpdateGitLabProviderRequest as AdminUpdateGitLabProviderRequest,
} from 'src/app/proto/generated/zitadel/admin_pb';
import { Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import { AutoLinkingOption, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import {
AddGitLabProviderRequest as MgmtAddGitLabProviderRequest,
GetProviderByIDRequest as MgmtGetProviderByIDRequest,
@@ -32,7 +32,10 @@ import { ProviderNextService } from '../provider-next/provider-next.service';
})
export class ProviderGitlabComponent {
public showOptional: boolean = false;
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
public options: Options = new Options()
.setIsCreationAllowed(true)
.setIsLinkingAllowed(true)
.setAutoLinking(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED);
// DEPRECATED: use id$ instead
public id: string | null = '';
// DEPRECATED: assert service$ instead

View File

@@ -10,7 +10,7 @@ import {
GetProviderByIDRequest as AdminGetProviderByIDRequest,
UpdateGoogleProviderRequest as AdminUpdateGoogleProviderRequest,
} from 'src/app/proto/generated/zitadel/admin_pb';
import { Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import { AutoLinkingOption, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import {
AddGoogleProviderRequest as MgmtAddGoogleProviderRequest,
GetProviderByIDRequest as MgmtGetProviderByIDRequest,
@@ -32,7 +32,10 @@ import { ProviderNextService } from '../provider-next/provider-next.service';
})
export class ProviderGoogleComponent {
public showOptional: boolean = false;
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
public options: Options = new Options()
.setIsCreationAllowed(true)
.setIsLinkingAllowed(true)
.setAutoLinking(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED);
// DEPRECATED: use id$ instead
public id: string | null = '';
// DEPRECATED: assert service$ instead

View File

@@ -9,7 +9,7 @@ import {
GetProviderByIDRequest as AdminGetProviderByIDRequest,
UpdateJWTProviderRequest as AdminUpdateJWTProviderRequest,
} from 'src/app/proto/generated/zitadel/admin_pb';
import { Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import { AutoLinkingOption, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import {
AddJWTProviderRequest as MgmtAddJWTProviderRequest,
GetProviderByIDRequest as MgmtGetProviderByIDRequest,
@@ -32,7 +32,10 @@ import { ProviderNextService } from '../provider-next/provider-next.service';
})
export class ProviderJWTComponent {
public showOptional: boolean = false;
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
public options: Options = new Options()
.setIsCreationAllowed(true)
.setIsLinkingAllowed(true)
.setAutoLinking(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED);
// DEPRECATED: use id$ instead
public id: string | null = '';

View File

@@ -9,7 +9,7 @@ import {
GetProviderByIDRequest as AdminGetProviderByIDRequest,
UpdateLDAPProviderRequest as AdminUpdateLDAPProviderRequest,
} from 'src/app/proto/generated/zitadel/admin_pb';
import { LDAPAttributes, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import { AutoLinkingOption, LDAPAttributes, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import {
AddLDAPProviderRequest as MgmtAddLDAPProviderRequest,
GetProviderByIDRequest as MgmtGetProviderByIDRequest,
@@ -32,7 +32,10 @@ import { ProviderNextService } from '../provider-next/provider-next.service';
export class ProviderLDAPComponent {
public updateBindPassword: boolean = false;
public showOptional: boolean = false;
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
public options: Options = new Options()
.setIsCreationAllowed(true)
.setIsLinkingAllowed(true)
.setAutoLinking(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED);
public attributes: LDAPAttributes = new LDAPAttributes();
// DEPRECATED: use id$ instead
public id: string | null = '';

View File

@@ -10,7 +10,7 @@ import {
GetProviderByIDRequest as AdminGetProviderByIDRequest,
UpdateGenericOAuthProviderRequest as AdminUpdateGenericOAuthProviderRequest,
} from 'src/app/proto/generated/zitadel/admin_pb';
import { Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import { AutoLinkingOption, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import {
AddGenericOAuthProviderRequest as MgmtAddGenericOAuthProviderRequest,
GetProviderByIDRequest as MgmtGetProviderByIDRequest,
@@ -32,7 +32,10 @@ import { ProviderNextService } from '../provider-next/provider-next.service';
})
export class ProviderOAuthComponent {
public showOptional: boolean = false;
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
public options: Options = new Options()
.setIsCreationAllowed(true)
.setIsLinkingAllowed(true)
.setAutoLinking(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED);
// DEPRECATED: use id$ instead
public id: string | null = '';

View File

@@ -10,7 +10,7 @@ import {
GetProviderByIDRequest as AdminGetProviderByIDRequest,
UpdateGenericOIDCProviderRequest as AdminUpdateGenericOIDCProviderRequest,
} from 'src/app/proto/generated/zitadel/admin_pb';
import { Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import { AutoLinkingOption, Options, Provider } from 'src/app/proto/generated/zitadel/idp_pb';
import {
AddGenericOIDCProviderRequest as MgmtAddGenericOIDCProviderRequest,
GetProviderByIDRequest as MgmtGetProviderByIDRequest,
@@ -32,7 +32,10 @@ import { ProviderNextService } from '../provider-next/provider-next.service';
})
export class ProviderOIDCComponent {
public showOptional: boolean = false;
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
public options: Options = new Options()
.setIsCreationAllowed(true)
.setIsLinkingAllowed(true)
.setAutoLinking(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED);
// DEPRECATED: use id$ instead
public id: string | null = '';

View File

@@ -1,6 +1,6 @@
import { Component, Injector, Type } from '@angular/core';
import { Location } from '@angular/common';
import { Options, Provider, SAMLBinding } from '../../../proto/generated/zitadel/idp_pb';
import { AutoLinkingOption, Options, Provider, SAMLBinding } from '../../../proto/generated/zitadel/idp_pb';
import { AbstractControl, FormGroup, UntypedFormControl, UntypedFormGroup } from '@angular/forms';
import { PolicyComponentServiceType } from '../../policies/policy-component-types.enum';
import { ManagementService } from '../../../services/mgmt.service';
@@ -37,7 +37,10 @@ export class ProviderSamlSpComponent {
public provider?: Provider.AsObject;
public form!: FormGroup;
public showOptional: boolean = false;
public options: Options = new Options().setIsCreationAllowed(true).setIsLinkingAllowed(true);
public options: Options = new Options()
.setIsCreationAllowed(true)
.setIsLinkingAllowed(true)
.setAutoLinking(AutoLinkingOption.AUTO_LINKING_OPTION_UNSPECIFIED);
// DEPRECATED: assert service$ instead
public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT;
// DEPRECATED: use service$ instead

View File

@@ -1582,6 +1582,7 @@
"initPasswordText": "Инициализиране на парола",
"initializeDoneText": "Инициализирането на потребителя е готово",
"initializeUserText": "Инициализирайте потребителя",
"linkingUserPromptText": "Потребителският промпт за свързване",
"linkingUserDoneText": "Свързването на потребителя е готово",
"loginText": "Влизам",
"logoutText": "Излез от профила си",
@@ -2014,7 +2015,13 @@
"ISCREATIONALLOWED": "Създаването на акаунт е разрешено",
"ISCREATIONALLOWED_DESC": "Определя дали могат да се създават акаунти.",
"ISLINKINGALLOWED": "Свързването на акаунти е разрешено",
"ISLINKINGALLOWED_DESC": "Определя дали дадена самоличност може да бъде свързана със съществуващ акаунт."
"ISLINKINGALLOWED_DESC": "Определя дали дадена самоличност може да бъде свързана със съществуващ акаунт.",
"AUTOLINKING_DESC": "Определя дали идентичността ще бъде подканена да бъде свързана със съществуващ профил.",
"AUTOLINKINGTYPE": {
"0": "Изключено",
"1": "Проверка за съществуващо потребителско име",
"2": "Проверка за съществуващ имейл"
}
},
"OWNERTYPES": {
"0": "неизвестен",

View File

@@ -1589,6 +1589,7 @@
"initPasswordText": "Inicializace hesla",
"initializeDoneText": "Inicializace uživatele dokončena",
"initializeUserText": "Inicializace uživatele",
"linkingUserPromptText": "Uživatelský propojovací text",
"linkingUserDoneText": "Propojení uživatele dokončeno",
"loginText": "Přihlášení",
"logoutText": "Odhlášení",
@@ -2025,7 +2026,13 @@
"ISCREATIONALLOWED": "Je povoleno vytváření účtu",
"ISCREATIONALLOWED_DESC": "Určuje, zda lze vytvářet účty.",
"ISLINKINGALLOWED": "Je povoleno propojení účtů",
"ISLINKINGALLOWED_DESC": "Určuje, zda lze identitu propojit s existujícím účtem."
"ISLINKINGALLOWED_DESC": "Určuje, zda lze identitu propojit s existujícím účtem.",
"AUTOLINKING_DESC": "Určuje, zda se bude identita vyzývat k propojení se stávajícím účtem.",
"AUTOLINKINGTYPE": {
"0": "Vypnuto",
"1": "Kontrola existence uživatelského jména",
"2": "Kontrola existence e-mailu"
}
},
"OWNERTYPES": {
"0": "neznámý",

View File

@@ -1588,6 +1588,7 @@
"initPasswordText": "Passwort Initialisierung",
"initializeDoneText": "Benutzereinrichtung erfolgreich",
"initializeUserText": "Benutzereinrichtung",
"linkingUserPromptText": "Aufforderung zur Benutzerverlinkung",
"linkingUserDoneText": "Benutzerverlinkung erfolgreich",
"loginText": "Anmelden",
"logoutText": "Abmelden",
@@ -2015,7 +2016,13 @@
"ISCREATIONALLOWED": "Account erstellen erlaubt",
"ISCREATIONALLOWED_DESC": "Legt fest, ob Konten erstellt werden können.",
"ISLINKINGALLOWED": "Account linking erlaubt",
"ISLINKINGALLOWED_DESC": "Legt fest, ob eine Identität mit einem bestehenden Konto verknüpft werden kann."
"ISLINKINGALLOWED_DESC": "Legt fest, ob eine Identität mit einem bestehenden Konto verknüpft werden kann.",
"AUTOLINKING_DESC": "Legt fest, ob eine Identität aufgefordert wird, mit einem vorhandenen Konto verknüpft zu werden.",
"AUTOLINKINGTYPE": {
"0": "Deaktiviert",
"1": "Überprüfung auf vorhandenen Benutzernamen",
"2": "Überprüfung auf vorhandene E-Mail"
}
},
"OWNERTYPES": {
"0": "unknown",

View File

@@ -1589,6 +1589,7 @@
"initPasswordText": "Initialize password",
"initializeDoneText": "Initialize user done",
"initializeUserText": "Initialize user",
"linkingUserPromptText": "Linking user prompt",
"linkingUserDoneText": "Linking user done",
"loginText": "Login",
"logoutText": "Logout",
@@ -2028,7 +2029,13 @@
"ISCREATIONALLOWED": "Account creation allowed",
"ISCREATIONALLOWED_DESC": "Determines whether accounts can be created.",
"ISLINKINGALLOWED": "Account linking allowed",
"ISLINKINGALLOWED_DESC": "Determines whether an identity can be linked to an existing account."
"ISLINKINGALLOWED_DESC": "Determines whether an identity can be linked to an existing account.",
"AUTOLINKING_DESC": "Determines whether an identity will be prompted to be linked to an existing account.",
"AUTOLINKINGTYPE": {
"0": "Disabled",
"1": "Check for existing Username",
"2": "Check for existing Email"
}
},
"OWNERTYPES": {
"0": "unknown",

View File

@@ -1590,6 +1590,7 @@
"initPasswordText": "Inicializar contraseña",
"initializeDoneText": "Inicializar usuario, hecho",
"initializeUserText": "Inicializar usuario",
"linkingUserPromptText": "Mensaje de enlace de usuario",
"linkingUserDoneText": "Vinculación de usuario, hecho",
"loginText": "Iniciar sesión",
"logoutText": "Cerrar sesión",
@@ -2021,7 +2022,13 @@
"ISCREATIONALLOWED": "Creación de cuentas permitida",
"ISCREATIONALLOWED_DESC": "Determina si se pueden crear cuentas.",
"ISLINKINGALLOWED": "Permitida la vinculación de cuentas",
"ISLINKINGALLOWED_DESC": "Determina si una identidad puede vincularse a una cuenta existente."
"ISLINKINGALLOWED_DESC": "Determina si una identidad puede vincularse a una cuenta existente.",
"AUTOLINKING_DESC": "Determina si se pedirá a una identidad que se vincule a una cuenta existente.",
"AUTOLINKINGTYPE": {
"0": "Desactivado",
"1": "Comprobar nombre de usuario existente",
"2": "Comprobar correo electrónico existente"
}
},
"OWNERTYPES": {
"0": "desconocido",

View File

@@ -1588,6 +1588,7 @@
"initPasswordText": "Initialiser le mot de passe",
"initializeDoneText": "Initialiser l'utilisateur terminé",
"initializeUserText": "Initialiser l'utilisateur",
"linkingUserPromptText": "Message de liaison utilisateur",
"linkingUserDoneText": "Lier l'utilisateur fait",
"loginText": "Connexion",
"logoutText": "Déconnexion",
@@ -2019,7 +2020,13 @@
"ISCREATIONALLOWED": "la création est-elle autorisée",
"ISCREATIONALLOWED_DESC": "Détermine si des comptes peuvent être créés.",
"ISLINKINGALLOWED": "la liaison est-elle autorisée",
"ISLINKINGALLOWED_DESC": "Détermine si une identité peut être liée à un compte existant."
"ISLINKINGALLOWED_DESC": "Détermine si une identité peut être liée à un compte existant.",
"AUTOLINKING_DESC": "Détermine si une identité sera invitée à être liée à un compte existant.",
"AUTOLINKINGTYPE": {
"0": "Désactivé",
"1": "Vérification de l'existence du nom d'utilisateur",
"2": "Vérification de l'existence de l'e-mail"
}
},
"OWNERTYPES": {
"0": "inconnu",

View File

@@ -1588,6 +1588,7 @@
"initPasswordText": "Inizializzazione della password",
"initializeDoneText": "Inizializzazione utente finita",
"initializeUserText": "Inizializzazione utente",
"linkingUserPromptText": "Testo di promemoria per collegare l'utente",
"linkingUserDoneText": "Collegamento dell'utente finito",
"loginText": "Accesso",
"logoutText": "Logout",
@@ -2019,7 +2020,13 @@
"ISCREATIONALLOWED": "Creazione consentita",
"ISCREATIONALLOWED_DESC": "Determina se i conti possono essere creati.",
"ISLINKINGALLOWED": "Collegamento consentito",
"ISLINKINGALLOWED_DESC": "Determina se un'identità può essere collegata a un account esistente."
"ISLINKINGALLOWED_DESC": "Determina se un'identità può essere collegata a un account esistente.",
"AUTOLINKING_DESC": "Determina se un'identità verrà invitata a essere collegata a un account esistente.",
"AUTOLINKINGTYPE": {
"0": "Disabilitato",
"1": "Verifica dell'esistenza del nome utente",
"2": "Verifica dell'esistenza dell'email"
}
},
"OWNERTYPES": {
"0": "sconosciuto",

View File

@@ -1585,6 +1585,7 @@
"initPasswordText": "パスワードを初期化する",
"initializeDoneText": "ユーザーの初期化が完了しました",
"initializeUserText": "ユーザーを初期化する",
"linkingUserPromptText": "ユーザーのリンクプロンプト",
"linkingUserDoneText": "ユーザーのリンクが完了しました",
"loginText": "ログイン",
"logoutText": "ログアウト",
@@ -2016,7 +2017,13 @@
"ISCREATIONALLOWED": "アカウント作成を許可",
"ISCREATIONALLOWED_DESC": "アカウントを作成できるかどうかを決めます。",
"ISLINKINGALLOWED": "アカウントリンクを許可",
"ISLINKINGALLOWED_DESC": "IDを既存のアカウントにリンクできるかどうかを決めます。"
"ISLINKINGALLOWED_DESC": "IDを既存のアカウントにリンクできるかどうかを決めます。",
"AUTOLINKING_DESC": "アイデンティティが既存のアカウントにリンクされるように促されるかどうかを決定します。",
"AUTOLINKINGTYPE": {
"0": "無効",
"1": "既存のユーザー名のチェック",
"2": "既存のメールアドレスのチェック"
}
},
"OWNERTYPES": {
"0": "不明",

View File

@@ -1590,6 +1590,7 @@
"initPasswordText": "Иницијализација на лозинка",
"initializeDoneText": "Иницијализацијата на корисникот е завршена",
"initializeUserText": "Иницијализација на корисник",
"linkingUserPromptText": "Поврзување на кориснички промпт",
"linkingUserDoneText": "Поврзувањето на корисникот е завршено",
"loginText": "Најава",
"logoutText": "Одјава",
@@ -2023,7 +2024,13 @@
"ISCREATIONALLOWED": "Дозволено креирање на кориснички сметки",
"ISCREATIONALLOWED_DESC": "Одредува дали може да се креираат кориснички сметки.",
"ISLINKINGALLOWED": "Дозволено поврзување на кориснички сметки",
"ISLINKINGALLOWED_DESC": "Одредува дали може да се поврзе идентитет со постоечка корисничка сметка."
"ISLINKINGALLOWED_DESC": "Одредува дали може да се поврзе идентитет со постоечка корисничка сметка.",
"AUTOLINKING_DESC": "Одредува дали ќе се бара идентитетот да биде поврзан со постоечки профил.",
"AUTOLINKINGTYPE": {
"0": "Исклучено",
"1": "Проверка за постоечко корисничко име",
"2": "Проверка за постоечка е-пошта"
}
},
"OWNERTYPES": {
"0": "непознато",

View File

@@ -1589,6 +1589,7 @@
"initPasswordText": "Initialiseer wachtwoord",
"initializeDoneText": "Gebruiker initialisatie voltooid",
"initializeUserText": "Initialiseer gebruiker",
"linkingUserPromptText": "Gebruiker koppelingsprompt",
"linkingUserDoneText": "Gebruiker koppeling voltooid",
"loginText": "Login",
"logoutText": "Uitloggen",
@@ -2028,7 +2029,13 @@
"ISCREATIONALLOWED": "Account creatie toegestaan",
"ISCREATIONALLOWED_DESC": "Bepaalt of accounts kunnen worden aangemaakt.",
"ISLINKINGALLOWED": "Account koppeling toegestaan",
"ISLINKINGALLOWED_DESC": "Bepaalt of een identiteit kan worden gekoppeld aan een bestaand account."
"ISLINKINGALLOWED_DESC": "Bepaalt of een identiteit kan worden gekoppeld aan een bestaand account.",
"AUTOLINKING_DESC": "Bepaalt of een identiteit wordt gevraagd om te worden gekoppeld aan een bestaand account.",
"AUTOLINKINGTYPE": {
"0": "Uitgeschakeld",
"1": "Controleren op bestaande gebruikersnaam",
"2": "Controleren op bestaand e-mailadres"
}
},
"OWNERTYPES": {
"0": "onbekend",

View File

@@ -1588,6 +1588,7 @@
"initPasswordText": "Inicjalizacja hasła",
"initializeDoneText": "Inicjalizacja użytkownika zakończona",
"initializeUserText": "Inicjalizacja użytkownika",
"linkingUserPromptText": "Komunikat o łączeniu użytkowników",
"linkingUserDoneText": "Łączenie użytkownika zakończone",
"loginText": "Zaloguj się",
"logoutText": "Wyloguj się",
@@ -2019,7 +2020,13 @@
"ISCREATIONALLOWED": "tworzenie dozwolone",
"ISCREATIONALLOWED_DESC": "Określa, czy można tworzyć konta.",
"ISLINKINGALLOWED": "dozwolone łączenie rachunków",
"ISLINKINGALLOWED_DESC": "Określa, czy tożsamość może być powiązana z istniejącym kontem."
"ISLINKINGALLOWED_DESC": "Określa, czy tożsamość może być powiązana z istniejącym kontem.",
"AUTOLINKING_DESC": "Określa, czy tożsamość będzie proszona o połączenie z istniejącym kontem.",
"AUTOLINKINGTYPE": {
"0": "Wyłączone",
"1": "Sprawdź istniejącą nazwę użytkownika",
"2": "Sprawdź istniejący adres e-mail"
}
},
"OWNERTYPES": {
"0": "nieznany",

View File

@@ -1590,6 +1590,7 @@
"initPasswordText": "Inicialização de senha",
"initializeDoneText": "Inicialização de usuário concluída",
"initializeUserText": "Inicializaçãode usuário",
"linkingUserPromptText": "Prompt de usuário para vinculação",
"linkingUserDoneText": "Vinculação de usuário concluída",
"loginText": "Login",
"logoutText": "Logout",
@@ -2021,7 +2022,13 @@
"ISCREATIONALLOWED": "Criação de Conta Permitida",
"ISCREATIONALLOWED_DESC": "Determina se as contas podem ser criadas.",
"ISLINKINGALLOWED": "Vinculação de Conta Permitida",
"ISLINKINGALLOWED_DESC": "Determina se uma identidade pode ser vinculada a uma conta existente."
"ISLINKINGALLOWED_DESC": "Determina se uma identidade pode ser vinculada a uma conta existente.",
"AUTOLINKING_DESC": "Determina se uma identidade será solicitada a ser vinculada a uma conta existente.",
"AUTOLINKINGTYPE": {
"0": "Desativado",
"1": "Verificar nome de usuário existente",
"2": "Verificar e-mail existente"
}
},
"OWNERTYPES": {
"0": "desconhecido",

View File

@@ -1656,6 +1656,7 @@
"initPasswordText": "Инициализировать пароль",
"initializeDoneText": "Инициализация пользователя выполнена",
"initializeUserText": "Инициализировать пользователя",
"linkingUserPromptText": "Текст приглашения к привязке пользователя",
"linkingUserDoneText": "Привязка пользователя выполнена",
"loginText": "Вход",
"logoutText": "Выход",
@@ -2114,7 +2115,13 @@
"ISCREATIONALLOWED": "Создание учетной записи разрешено",
"ISCREATIONALLOWED_DESC": "Определяет, можно ли создавать учетные записи.",
"ISLINKINGALLOWED": "Привязка аккаунтов разрешена",
"ISLINKINGALLOWED_DESC": "Определяет, можно ли связать личность с существующей учетной записью."
"ISLINKINGALLOWED_DESC": "Определяет, можно ли связать личность с существующей учетной записью.",
"AUTOLINKING_DESC": "Определяет, будет ли запрошено связать идентификацию с существующим аккаунтом.",
"AUTOLINKINGTYPE": {
"0": "Отключено",
"1": "Проверка существующего имени пользователя",
"2": "Проверка существующего адреса электронной почты"
}
},
"OWNERTYPES": {
"0": "неизвестен",

View File

@@ -1587,6 +1587,7 @@
"initPasswordText": "初始化密码",
"initializeDoneText": "初始化用户完成",
"initializeUserText": "初始化用户",
"linkingUserPromptText": "用户链接提示",
"linkingUserDoneText": "链接用户完成",
"loginText": "登录",
"logoutText": "登出",
@@ -2018,7 +2019,13 @@
"ISCREATIONALLOWED": "是否允许创作",
"ISCREATIONALLOWED_DESC": "确定是否可以创建账户。",
"ISLINKINGALLOWED": "是否允许连接",
"ISLINKINGALLOWED_DESC": "确定一个身份是否可以与一个现有的账户相联系。"
"ISLINKINGALLOWED_DESC": "确定一个身份是否可以与一个现有的账户相联系。",
"AUTOLINKING_DESC": "确定是否提示将身份链接到现有帐户。",
"AUTOLINKINGTYPE": {
"0": "已禁用",
"1": "检查现有用户名",
"2": "检查现有电子邮件"
}
},
"OWNERTYPES": {
"0": "未知",