540 user fed settings (#198)

* all fields roughed in working on tab

* reduce to just the settings without page

* remove unused imports

* fix some comments

* correct some typos and capitalization

* remove ldap translation
This commit is contained in:
Sarah Rambacher 2020-10-30 16:15:37 -04:00 committed by GitHub
parent 2766f8b14b
commit 6b3990e1b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 1028 additions and 45 deletions

View file

@ -16,6 +16,7 @@ import sessions from "./sessions/messages.json";
import events from "./events/messages.json";
import storybook from "./stories/messages.json";
import userFederation from "./user-federation/messages.json";
import userFederationHelp from "./user-federation/help.json";
const initOptions = {
defaultNS: "common",
@ -36,6 +37,7 @@ const initOptions = {
...events,
...storybook,
...userFederation,
...userFederationHelp,
},
},
lng: "en",

View file

@ -0,0 +1,17 @@
import React from "react";
import { Meta } from "@storybook/react";
import { Page } from "@patternfly/react-core";
import { UserFederationLdapSettingsTab } from "../user-federation/UserFederationLdapSettingsTab";
export default {
title: "User Federation LDAP Settings Tab",
component: UserFederationLdapSettingsTab,
} as Meta;
export const view = () => {
return (
<Page>
<UserFederationLdapSettingsTab />
</Page>
);
};

View file

@ -0,0 +1,81 @@
import { Form, FormGroup, Switch } from "@patternfly/react-core";
import { useTranslation } from "react-i18next";
import React from "react";
import { HelpItem } from "../components/help-enabler/HelpItem";
export const LdapSettingsAdvanced = () => {
const { t } = useTranslation("user-federation");
const helpText = useTranslation("user-federation-help").t;
return (
<>
<Form isHorizontal>
<FormGroup
label={t("enableLdapv3Password")}
labelIcon={
<HelpItem
helpText={helpText("enableLdapv3PasswordHelp")}
forLabel={t("enableLdapv3Password")}
forID="kc-enable-ldapv3-password"
/>
}
fieldId="kc-enable-ldapv3-password"
hasNoPaddingTop
>
<Switch
id={"kc-enable-ldapv3-password"}
isChecked={false}
isDisabled={false}
onChange={() => undefined as any}
label={t("common:on")}
labelOff={t("common:off")}
/>
</FormGroup>
<FormGroup
label={t("validatePasswordPolicy")}
labelIcon={
<HelpItem
helpText={helpText("validatePasswordPolicyHelp")}
forLabel={t("validatePasswordPolicy")}
forID="kc-validate-password-policy"
/>
}
fieldId="kc-validate-password-policy"
hasNoPaddingTop
>
<Switch
id={"kc-validate-password-policy"}
isChecked={false}
isDisabled={false}
onChange={() => undefined as any}
label={t("common:on")}
labelOff={t("common:off")}
/>
</FormGroup>
<FormGroup
label={t("trustEmail")}
labelIcon={
<HelpItem
helpText={helpText("trustEmailHelp")}
forLabel={t("trustEmail")}
forID="kc-trust-email"
/>
}
fieldId="kc-trust-email"
hasNoPaddingTop
>
<Switch
id={"kc-trust-email"}
isChecked={false}
isDisabled={false}
onChange={() => undefined as any}
label={t("common:on")}
labelOff={t("common:off")}
/>
</FormGroup>
</Form>
</>
);
};

View file

@ -0,0 +1,51 @@
import { Form, FormGroup, Select, SelectOption } from "@patternfly/react-core";
import { useTranslation } from "react-i18next";
import React from "react";
import { HelpItem } from "../components/help-enabler/HelpItem";
export const LdapSettingsCache = () => {
const { t } = useTranslation("user-federation");
const helpText = useTranslation("user-federation-help").t;
return (
<>
{/* Cache settings */}
<Form isHorizontal>
<FormGroup
label={t("cachePolicy")}
labelIcon={
<HelpItem
helpText={helpText("cachePolicyHelp")}
forLabel={t("cachePolicy")}
forID="kc-cache-policy"
/>
}
fieldId="kc-cache-policy"
>
<Select
toggleId="kc-cache-policy"
// isOpen={openType}
onToggle={() => {}}
// variant={SelectVariant.single}
// value={selected}
// selections={selected}
// onSelect={(_, value) => {
// setSelected(value as string);
// setOpenType(false);
// }}
aria-label="Select Input"
>
{/* {configFormats.map((configFormat) => ( */}
<SelectOption
key={"key"}
value={"value"}
// isSelected={selected === configFormat.id}
>
{"display name"}
</SelectOption>
</Select>
</FormGroup>
</Form>
</>
);
};

View file

@ -0,0 +1,224 @@
import {
Button,
Form,
FormGroup,
InputGroup,
Select,
SelectOption,
Switch,
TextInput,
} from "@patternfly/react-core";
import { useTranslation } from "react-i18next";
import React from "react";
import { HelpItem } from "../components/help-enabler/HelpItem";
import { EyeIcon } from "@patternfly/react-icons";
export const LdapSettingsConnection = () => {
const { t } = useTranslation("user-federation");
const helpText = useTranslation("user-federation-help").t;
return (
<>
{/* Cache settings */}
<Form isHorizontal>
<FormGroup
label={t("connectionURL")}
labelIcon={
<HelpItem
helpText={helpText("consoleDisplayConnectionUrlHelp")}
forLabel={t("connectionURL")}
forID="kc-connection-url"
/>
}
fieldId="kc-connection-url"
isRequired
>
<TextInput
isRequired
type="text"
id="kc-connection-url"
name="kc-connection-url"
// value={value1}
// onChange={this.handleTextInputChange1}
/>
</FormGroup>
<FormGroup
label={t("enableStarttls")}
labelIcon={
<HelpItem
helpText={helpText("enableStarttlsHelp")}
forLabel={t("enableStarttls")}
forID="kc-enable-start-tls"
/>
}
fieldId="kc-enable-start-tls"
hasNoPaddingTop
>
<Switch
id={"kc-enable-start-tls"}
isChecked={true}
isDisabled={false}
onChange={() => undefined as any}
label={t("common:on")}
labelOff={t("common:off")}
/>
</FormGroup>
<FormGroup
label={t("useTruststoreSpi")}
labelIcon={
<HelpItem
helpText={helpText("useTruststoreSpiHelp")}
forLabel={t("useTruststoreSpi")}
forID="kc-use-truststore-spi"
/>
}
fieldId="kc-use-truststore-spi"
>
<Select
toggleId="kc-use-truststore-spi"
// isOpen={openType}
onToggle={() => {}}
// variant={SelectVariant.single}
// value={selected}
// selections={selected}
// onSelect={(_, value) => {
// setSelected(value as string);
// setOpenType(false);
// }}
aria-label="Only for LDAPS" // TODO
>
{/* {configFormats.map((configFormat) => ( */}
<SelectOption
key={"key"}
value={"value"}
// isSelected={selected === configFormat.id}
>
{"display name"}
</SelectOption>
{/* ))} */}
</Select>
</FormGroup>
<FormGroup
label={t("connectionPooling")}
labelIcon={
<HelpItem
helpText={helpText("connectionPoolingHelp")}
forLabel={t("connectionPooling")}
forID="kc-connection-pooling"
/>
}
fieldId="kc-connection-pooling"
hasNoPaddingTop
>
<Switch
id={"kc-connection-pooling"}
isChecked={true}
isDisabled={false}
onChange={() => undefined as any}
label={t("common:on")}
labelOff={t("common:off")}
/>
</FormGroup>
<FormGroup
label={t("connectionTimeout")}
labelIcon={
<HelpItem
helpText={helpText("connectionTimeoutHelp")}
forLabel={t("connectionTimeout")}
forID="kc-connection-timeout"
/>
}
fieldId="kc-connection-timeout"
>
<TextInput
type="text"
id="kc-connection-timeout"
name="kc-connection-timeout"
// value={value1}
// onChange={this.handleTextInputChange1}
/>
</FormGroup>
<FormGroup
label={t("bindType")}
labelIcon={
<HelpItem
helpText={helpText("bindTypeHelp")}
forLabel={t("bindType")}
forID="kc-bind-type"
/>
}
fieldId="kc-bind-type"
isRequired
>
<Select
toggleId="kc-bind-type"
// isOpen={openType}
onToggle={() => {}}
// variant={SelectVariant.single}
// value={selected}
// selections={selected}
// onSelect={(_, value) => {
// setSelected(value as string);
// setOpenType(false);
// }}
aria-label="simple" // TODO
></Select>
</FormGroup>
<FormGroup
label={t("bindDn")}
labelIcon={
<HelpItem
helpText={helpText("bindDnHelp")}
forLabel={t("bindDn")}
forID="kc-bind-dn"
/>
}
fieldId="kc-bind-dn"
>
<TextInput
type="text"
id="kc-bind-dn"
name="kc-bind-dn"
// value={value1}
// onChange={this.handleTextInputChange1}
/>
</FormGroup>
<FormGroup
label={t("bindCredentials")}
labelIcon={
<HelpItem
helpText={helpText("bindCredentialsHelp")}
forLabel={t("bindCredentials")}
forID="kc-bind-credentials"
/>
}
fieldId="kc-bind-credentials"
isRequired
>
<InputGroup>
<TextInput
name="kc-bind-credentials"
id="kc-bind-credentials"
type="password"
aria-label="bind credentials"
isRequired
/>
<Button
variant="control"
aria-label="show password button for bind credentials"
>
<EyeIcon />
</Button>
</InputGroup>
</FormGroup>
</Form>
</>
);
};

View file

@ -0,0 +1,66 @@
import { Form, FormGroup, Select, TextInput } from "@patternfly/react-core";
import { useTranslation } from "react-i18next";
import React from "react";
import { HelpItem } from "../components/help-enabler/HelpItem";
export const LdapSettingsGeneral = () => {
const { t } = useTranslation("user-federation");
const helpText = useTranslation("user-federation-help").t;
return (
<>
{/* Cache settings */}
<Form isHorizontal>
<FormGroup
label={t("consoleDisplayName")}
labelIcon={
<HelpItem
helpText={helpText("consoleDisplayNameHelp")}
forLabel={t("consoleDisplayName")}
forID="kc-console-display-name"
/>
}
fieldId="kc-console-display-name"
isRequired
>
<TextInput
isRequired
type="text"
id="kc-console-display-name"
name="kc-console-display-name"
// value={value1}
// onChange={this.handleTextInputChange1}
/>
</FormGroup>
<FormGroup
label={t("vendor")}
labelIcon={
<HelpItem
helpText={helpText("vendorHelp")}
forLabel={t("vendor")}
forID="kc-vendor"
/>
}
fieldId="kc-vendor"
isRequired
>
<Select
toggleId="kc-vendor"
// isOpen={openType}
onToggle={() => {}}
// variant={SelectVariant.single}
// value={selected}
// selections={selected}
// onSelect={(_, value) => {
// setSelected(value as string);
// setOpenType(false);
// }}
aria-label="Other"
isDisabled
></Select>
</FormGroup>
</Form>
</>
);
};

View file

@ -0,0 +1,60 @@
import { Form, FormGroup, Switch } from "@patternfly/react-core";
import { useTranslation } from "react-i18next";
import React from "react";
import { HelpItem } from "../components/help-enabler/HelpItem";
export const LdapSettingsKerberosIntegration = () => {
const { t } = useTranslation("user-federation");
const helpText = useTranslation("user-federation-help").t;
return (
<>
{/* Kerberos integration */}
<Form isHorizontal>
<FormGroup
label={t("allowKerberosAuthentication")}
labelIcon={
<HelpItem
helpText={helpText("allowKerberosAuthenticationHelp")}
forLabel={t("allowKerberosAuthentication")}
forID="kc-allow-kerberos-authentication"
/>
}
fieldId="kc-allow-kerberos-authentication"
hasNoPaddingTop
>
<Switch
id={"kc-allow-kerberos-authentication"}
isChecked={true}
isDisabled={false}
onChange={() => undefined as any}
label={t("common:on")}
labelOff={t("common:off")}
/>
</FormGroup>
<FormGroup
label={t("useKerberosForPasswordAuthentication")}
labelIcon={
<HelpItem
helpText={helpText("useKerberosForPasswordAuthenticationHelp")}
forLabel={t("useKerberosForPasswordAuthentication")}
forID="kc-use-kerberos-password-authentication"
/>
}
fieldId="kc-use-kerberos-password-authentication"
hasNoPaddingTop
>
<Switch
id={"kc-use-kerberos-password-authentication"}
isChecked={true}
isDisabled={false}
onChange={() => undefined as any}
label={t("common:on")}
labelOff={t("common:off")}
/>
</FormGroup>
</Form>
</>
);
};

View file

@ -0,0 +1,283 @@
import {
Form,
FormGroup,
Select,
SelectOption,
Switch,
TextInput,
} from "@patternfly/react-core";
import { useTranslation } from "react-i18next";
import React from "react";
import { HelpItem } from "../components/help-enabler/HelpItem";
export const LdapSettingsSearching = () => {
const { t } = useTranslation("user-federation");
const helpText = useTranslation("user-federation-help").t;
return (
<>
{/* Cache settings */}
<Form isHorizontal>
<FormGroup
label={t("editMode")}
labelIcon={
<HelpItem
helpText={helpText("editModeHelp")}
forLabel={t("editMode")}
forID="kc-edit-mode"
/>
}
fieldId="kc-edit-mode"
>
<Select
toggleId="kc-edit-mode"
// isOpen={openType}
onToggle={() => {}}
// variant={SelectVariant.single}
// value={selected}
// selections={selected}
// onSelect={(_, value) => {
// setSelected(value as string);
// setOpenType(false);
// }}
aria-label="Select a mode"
>
{/* {configFormats.map((configFormat) => ( */}
<SelectOption
key={"key"}
value={"value"}
// isSelected={selected === configFormat.id}
>
{"display name"}
</SelectOption>
{/* ))} */}
</Select>
</FormGroup>
<FormGroup
label={t("usersDN")}
labelIcon={
<HelpItem
helpText={helpText("usersDNHelp")}
forLabel={t("usersDN")}
forID="kc-console-users-dn"
/>
}
fieldId="kc-console-users-dn"
isRequired
>
<TextInput
isRequired
type="text"
id="kc-console-users-dn"
name="kc-console-users-dn"
// value={value1}
// onChange={this.handleTextInputChange1}
/>
</FormGroup>
<FormGroup
label={t("usernameLdapAttribute")}
labelIcon={
<HelpItem
helpText={helpText("usernameLdapAttributeHelp")}
forLabel={t("usernameLdapAttribute")}
forID="kc-username-ldap-attribute"
/>
}
fieldId="kc-username-ldap-attribute"
isRequired
>
<TextInput
isRequired
type="text"
id="kc-username-ldap-attribute"
name="kc-username-ldap-attribute"
// value={value1}
// onChange={this.handleTextInputChange1}
/>
</FormGroup>
<FormGroup
label={t("rdnLdapAttribute")}
labelIcon={
<HelpItem
helpText={helpText("rdnLdapAttributeHelp")}
forLabel={t("rdnLdapAttribute")}
forID="kc-rdn-ldap-attribute"
/>
}
fieldId="kc-rdn-ldap-attribute"
isRequired
>
<TextInput
isRequired
type="text"
id="kc-rdn-ldap-attribute"
name="kc-rdn-ldap-attribute"
// value={value1}
// onChange={this.handleTextInputChange1}
/>
</FormGroup>
<FormGroup
label={t("uuidLdapAttribute")}
labelIcon={
<HelpItem
helpText={helpText("uuidLdapAttributeHelp")}
forLabel={t("uuidLdapAttribute")}
forID="kc-uuid-ldap-attribute"
/>
}
fieldId="kc-uuid-ldap-attribute"
isRequired
>
<TextInput
isRequired
type="text"
id="kc-uuid-ldap-attribute"
name="kc-uuid-ldap-attribute"
// value={value1}
// onChange={this.handleTextInputChange1}
/>
</FormGroup>
<FormGroup
label={t("userObjectClasses")}
labelIcon={
<HelpItem
helpText={helpText("userObjectClassesHelp")}
forLabel={t("userObjectClasses")}
forID="kc-user-object-classes"
/>
}
fieldId="kc-user-object-classes"
isRequired
>
<TextInput
isRequired
type="text"
id="kc-user-object-classes"
name="kc-user-object-classes"
// value={value1}
// onChange={this.handleTextInputChange1}
/>
</FormGroup>
<FormGroup
label={t("userLdapFilter")}
labelIcon={
<HelpItem
helpText={helpText("userLdapFilterHelp")}
forLabel={t("userLdapFilter")}
forID="kc-user-ldap-filter"
/>
}
fieldId="kc-user-ldap-filter"
>
<Select
toggleId="kc-user-ldap-filter"
// isOpen={openType}
onToggle={() => {}}
// variant={SelectVariant.single}
// value={selected}
// selections={selected}
// onSelect={(_, value) => {
// setSelected(value as string);
// setOpenType(false);
// }}
aria-label="Only for LDAPS" // TODO
>
{/* {configFormats.map((configFormat) => ( */}
<SelectOption
key={"key"}
value={"value"}
// isSelected={selected === configFormat.id}
>
{"display name"}
</SelectOption>
{/* ))} */}
</Select>
</FormGroup>
<FormGroup
label={t("searchScope")}
labelIcon={
<HelpItem
helpText={helpText("searchScopeHelp")}
forLabel={t("searchScope")}
forID="kc-search-scope"
/>
}
fieldId="kc-search-scope"
>
<Select
toggleId="kc-search-scope"
// isOpen={openType}
onToggle={() => {}}
// variant={SelectVariant.single}
// value={selected}
// selections={selected}
// onSelect={(_, value) => {
// setSelected(value as string);
// setOpenType(false);
// }}
aria-label="Only for LDAPS" // TODO
>
{/* {configFormats.map((configFormat) => ( */}
<SelectOption
key={"key"}
value={"value"}
// isSelected={selected === configFormat.id}
>
{"display name"}
</SelectOption>
{/* ))} */}
</Select>
</FormGroup>
<FormGroup
label={t("readTimeout")}
labelIcon={
<HelpItem
helpText={helpText("readTimeoutHelp")}
forLabel={t("readTimeout")}
forID="kc-read-timeout"
/>
}
fieldId="kc-read-timeout"
>
<TextInput
type="text"
id="kc-read-timeout"
name="kc-read-timeout"
// value={value1}
// onChange={this.handleTextInputChange1}
/>
</FormGroup>
<FormGroup
label={t("pagination")}
labelIcon={
<HelpItem
helpText={helpText("paginationHelp")}
forLabel={t("pagination")}
forID="kc-console-pagination"
/>
}
fieldId="kc-console-pagination"
hasNoPaddingTop
>
<Switch
id={"kc-console-pagination"}
isChecked={true}
isDisabled={false}
onChange={() => undefined as any}
label={t("common:on")}
labelOff={t("common:off")}
/>
</FormGroup>
</Form>
</>
);
};

View file

@ -0,0 +1,96 @@
import { Form, FormGroup, Switch, TextInput } from "@patternfly/react-core";
import { useTranslation } from "react-i18next";
import React from "react";
import { HelpItem } from "../components/help-enabler/HelpItem";
export const LdapSettingsSynchronization = () => {
const { t } = useTranslation("user-federation");
const helpText = useTranslation("user-federation-help").t;
return (
<>
{/* Synchronization settings */}
<Form isHorizontal>
<FormGroup
label={t("importUsers")}
labelIcon={
<HelpItem
helpText={helpText("importUsersHelp")}
forLabel={t("importUsers")}
forID="kc-import-users"
/>
}
fieldId="kc-import-users"
hasNoPaddingTop
>
<Switch
id={"kc-import-users"}
isChecked={true}
isDisabled={false}
onChange={() => undefined as any} //TODO: switch shows/hides other fields
label={t("common:on")}
labelOff={t("common:off")}
/>
</FormGroup>
<FormGroup
label={t("batchSize")}
labelIcon={
<HelpItem
helpText={helpText("batchSizeHelp")}
forLabel={t("batchSize")}
forID="kc-batch-size"
/>
}
fieldId="kc-batch-size"
>
<TextInput type="text" id="kc-batch-size" name="batchSize" />
</FormGroup>
<FormGroup
label={t("periodicFullSync")}
labelIcon={
<HelpItem
helpText={helpText("periodicFullSyncHelp")}
forLabel={t("periodicFullSync")}
forID="kc-periodic-full-sync"
/>
}
fieldId="kc-periodic-full-sync"
hasNoPaddingTop
>
<Switch
id={"kc-periodic-full-sync"}
label={t("common:on")}
labelOff={t("common:off")}
isChecked={true}
isDisabled={false}
onChange={() => undefined as any}
/>
</FormGroup>
<FormGroup
label={t("periodicChangedUsersSync")}
labelIcon={
<HelpItem
helpText={helpText("periodicChangedUsersSyncHelp")}
forLabel={t("periodicChangedUsersSync")}
forID="kc-periodic-changed-users-sync"
/>
}
fieldId="kc-periodic-changed-users-sync"
hasNoPaddingTop
>
<Switch
id={"kc-periodic-changed-users-sync"}
isChecked={true}
isDisabled={false}
onChange={() => undefined as any}
label={t("common:on")}
labelOff={t("common:off")}
/>
</FormGroup>
</Form>
</>
);
};

View file

@ -0,0 +1,54 @@
import { PageSection } from "@patternfly/react-core";
import { useTranslation } from "react-i18next";
import React from "react";
import { ScrollForm } from "../components/scroll-form/ScrollForm";
import { LdapSettingsAdvanced } from "./LdapSettingsAdvanced";
import { LdapSettingsKerberosIntegration } from "./LdapSettingsKerberosIntegration";
import { LdapSettingsCache } from "./LdapSettingsCache";
import { LdapSettingsSynchronization } from "./LdapSettingsSynchronization";
import { LdapSettingsGeneral } from "./LdapSettingsGeneral";
import { LdapSettingsConnection } from "./LdapSettingsConnection";
import { LdapSettingsSearching } from "./LdapSettingsSearching";
export const UserFederationLdapSettingsTab = () => {
const { t } = useTranslation("user-federation");
return (
<>
<PageSection variant="light" isFilled>
<ScrollForm
sections={[
t("generalOptions"),
t("connectionAndAuthenticationSettings"),
t("ldapSearchingAndUpdatingSettings"),
t("synchronizationSettings"),
t("kerberosIntegration"),
t("cacheSettings"),
t("advancedSettings"),
]}
>
{/* General settings */}
<LdapSettingsGeneral />
{/* Connection settings */}
<LdapSettingsConnection />
{/* Searching and updating settings */}
<LdapSettingsSearching />
{/* Synchronization settings */}
<LdapSettingsSynchronization />
{/* Kerberos integration */}
<LdapSettingsKerberosIntegration />
{/* Cache settings */}
<LdapSettingsCache />
{/* Advanced settings */}
<LdapSettingsAdvanced />
</ScrollForm>
</PageSection>
</>
);
};

View file

@ -0,0 +1,43 @@
{
"user-federation-help": {
"generalOptions": "General options",
"consoleDisplayNameHelp": "Display name of provider when linked in admin console",
"vendorHelp": "LDAP vendor (provider)",
"consoleDisplayConnectionUrlHelp": "Connection URL to your LDAP server",
"enableStarttlsHelp": "Encrypts the connection to LDAP using STARTTLS, which will disable connection pooling",
"useTruststoreSpiHelp": "Specifies whether LDAP connection will use the Truststore SPI with the truststore configured in standalone.xml/domain.sml. 'Always' means that it will always use it. 'Never' means that it will not use it. 'Only for ldaps' means that it will use it if your connection URL use ldaps. Note even if standalone.xml/domain.xml is not configured, the default java cacerts or certificate specified by 'javax.net.ssl.trustStore' property will be used.",
"connectionPoolingHelp": "Determines if Keycloak should use connection pooling for accessing LDAP server",
"connectionTimeoutHelp": "LDAP connection timeout in milliseconds",
"bindTypeHelp": "Type of the authentication method used during LDAP bind operation. It is used in most of the requests sent to the LDAP server. Currently only 'none' (anonymous LDAP authentication) or 'simple' (bind credential + bind password authentication) mechanisms are available.",
"bindDnHelp": "DN of the LDAP admin, which will be used by Keycloak to access LDAP server",
"bindCredentialsHelp": "Password of LDAP admin. This field is able to obtain its value from vault, use ${vault.ID} format.",
"editModeHelp": "READ_ONLY is a read-only LDAP store. WRITABLE means data will be synced back to LDAP on demand. UNSYNCED means user data will be imported, but not synced back to LDAP.",
"usersDNHelp": "Full DN of LDAP tree where your users are. This DN is the parent of LDAP users. It could be for example 'ou=users,dc=example,dc=com' assuming that your typical user will have DN like 'uid='john',ou=users,dc=example,dc=com'",
"usernameLdapAttributeHelp": "Name of LDAP attribute, which is mapped as Keycloak username. For many LDAP server vendors it can be 'uid'. For Active directory it can be 'sAMAccountName' or 'cn'. The attribute should be filled for all LDAP user records you want to import from LDAP to Keycloak.",
"rdnLdapAttributeHelp": "Name of LDAP attribute, which is used as RDN (top attribute) of typical user DN. Usually it's the same as Username LDAP attribute, however it is not required. For example for Active directory, it is common to use 'cn' as RDN attribute when username attribute might be 'sAMAccountName'.",
"uuidLdapAttributeHelp": "Name of LDAP attribute, which is used as unique object identifier (UUID) for objects in LDAP. For many LDAP server vendors, is is 'entryUUID'; however some are different. For example for Active directory it should be 'objectGUID'. If your LDAP server does not support the notion of UUID, you can use any other attribute that is supposed to be unique among LDAP users in tree. For example 'uid' or 'entryDN'.",
"userObjectClassesHelp": "All values of LDAP objectClass attribute for users in LDAP divided by comma. For example: 'inetOrgPerson, organizationalPerson'. Newly created Keycloak users will be written to LDAP with all those object classes and existing LDAP user records are found just if they contain all those object classes.",
"userLdapFilterHelp": "Additional LDAP filter for filtering searched users. Leave this empty if you don't need additional filter. Make sure that it starts with '(' and ends with ')'",
"searchScopeHelp": "For one level, the search applies only for users in the DNs specified by User DNs. For subtree, the search applies to the whole subtree. See LDAP documentation for more details.",
"readTimeoutHelp": "LDAP read timeout in milliseconds. This timeout applies for LDAP read operations.",
"paginationHelp": "Does the LDAP server support pagination",
"importUsersHelp": "Import users",
"batchSizeHelp": "Count of LDAP users to be imported from LDAP to Keycloak within a single transaction",
"periodicFullSyncHelp": "Whether periodic full synchronization of LDAP users to Keycloak should be enabled or not",
"periodicChangedUsersSyncHelp": "Whether periodic synchronization of changed or newly created LDAP users to Keycloak should be enabled or not",
"allowKerberosAuthenticationHelp": "Enable/disable HTTP authentication of users with SPNEGO/Kerberos tokens. The data about authenticated users will be provisioned from this LDAP server",
"useKerberosForPasswordAuthenticationHelp": "User Kerberos login module for authenticate username/password against Kerberos server instead of authenticating against LDAP server with Directory Service API",
"cachePolicyHelp": "Cache Policy for this storage provider. 'DEFAULT' is whatever the default settings are for the global cache. 'EVICT_DAILY' is a time of day every day that the cache will be invalidated. 'EVICT_WEEKLY' is a day of the week and time the cache will be invalidated. 'MAX_LIFESPAN' is the time in milliseconds that will be the lifespan of a cache entry.",
"enableLdapv3PasswordHelp": "Use the LDAPv3 Password Modify Extended Operation (RFC-3062). The password modify extended operation usually requires that LDAP user already has password in the LDAP server. So when this is used with 'Sync Registrations', it can be good to add also 'Hardcoded LDAP attribute mapper' with randomly generated initial password.",
"validatePasswordPolicyHelp": "Determines if Keycloak should validate the password with the realm password policy before updating it",
"trustEmailHelp": "If enabled, email provided by this provider is not verified even if verification is enabled for the realm.",
"IDK-periodicChangedUsersSyncHelp": "Should newly created users be created within LDAP store? Priority affects which provider is chosen to sync the new user."
}
}

View file

@ -2,54 +2,60 @@
"user-federation": {
"userFederation": "User federation",
"descriptionLanding": "This is the description for the user federation landing page",
"createClient": "Create client",
"importClient": "Import client",
"clientID": "Client ID",
"type": "Type",
"homeURL": "Home URL",
"description": "Description",
"name": "Name",
"formatOption": "Format option",
"downloadAdaptorTitle": "Download adaptor configs",
"details": "Details",
"clientList": "Client list",
"clientSettings": "Client details",
"selectEncryptionType": "Select Encryption type",
"generalSettings": "General Settings",
"capabilityConfig": "Capability config",
"clientsExplain": "Clients are applications and services that can request authentication of a user",
"createSuccess": "Client created successfully",
"createError": "Could not create client: '{{error}}'",
"clientImportError": "Could not import client",
"clientSaveSuccess": "Client successfully updated",
"clientSaveError": "Client could not be updated:",
"clientImportSuccess": "Client imported successfully",
"clientDeletedSuccess": "The client has been deleted",
"clientDeleteError": "Could not delete client:",
"clientDeleteConfirmTitle": "Delete client?",
"disableConfirmTitle": "Disable client?",
"disableConfirm": "If you disable this client, you cannot initiate a login or obtain access tokens.",
"clientDeleteConfirm": "If you delete this client, all associated data will be removed.",
"clientAuthentication": "Client authentication",
"authentication": "Authentication",
"authenticationFlow": "Authentication flow",
"standardFlow": "Standard flow",
"directAccess": "Direct access",
"serviceAccount": "Service account",
"enableServiceAccount": "Enable service account",
"displayOnClient": "Display client on screen",
"consentScreenText": "Client consent screen text",
"loginSettings": "Login settings",
"accessSettings": "Access settings",
"rootUrl": "Root URL",
"validRedirectUri": "Valid redirect URIs",
"loginTheme": "Login theme",
"consentRequired": "Consent required",
"searchForClient": "Search for client",
"userFederationExplanation": "Keycloak can federate external user databases. Out of the box we have support for LDAP and Active Directory.",
"getStarted": "To get started, select a provider from the list below.",
"providers": "Add providers",
"addKerberos": "Add Kerberos providers",
"addLdap": "Add LDAP providers"
"addLdap": "Add LDAP providers",
"syncChangedUsers": "Sync changed users",
"syncAllUsers": "Sync all users",
"unlinkUsers": "Unlink users",
"removeImported": "Remove imported",
"deleteProvider": "Delete provider",
"generalOptions": "General options",
"consoleDisplayName": "Console display name",
"vendor": "Vendor",
"connectionAndAuthenticationSettings": "Connection and authentication settings",
"connectionURL": "Connection URL",
"enableStarttls": "Enable StartTLS",
"useTruststoreSpi": "Use Truststore SPI",
"connectionPooling": "Connection pooling",
"connectionTimeout": "Connection timeout",
"bindType": "Bind type",
"bindDn": "Bind DN",
"bindCredentials": "Bind credentials",
"ldapSearchingAndUpdatingSettings": "LDAP searching and updating",
"editMode": "Edit mode",
"usersDN": "Users DN",
"usernameLdapAttribute": "Username LDAP attribute",
"rdnLdapAttribute": "RDN LDAP attribute",
"uuidLdapAttribute": "UUID LDAP attribute",
"userObjectClasses": "User object classes",
"userLdapFilter": "User LDAP filter",
"searchScope": "Search scope",
"readTimeout": "Read timeout",
"pagination": "Pagination",
"synchronizationSettings": "Synchronization settings",
"importUsers": "Import users",
"batchSize": "Batch size",
"periodicFullSync": "Periodic full sync",
"periodicChangedUsersSync": "Periodic changed users sync",
"kerberosIntegration": "Kerberos integration",
"allowKerberosAuthentication": "Allow Kerberos authentication",
"useKerberosForPasswordAuthentication": "Use Kerberos for password authentication",
"cacheSettings": "Cache settings",
"cachePolicy": "Cache policy",
"advancedSettings": "Advanced settings",
"enableLdapv3Password": "Enable the LDAPv3 password modify extended operation",
"validatePasswordPolicy": "Validate password policy",
"trustEmail": "Trust email"
}
}