Merge pull request #2107 from mstruk/i18n

KEYCLOAK-2305 Complete internationalization of admin console
This commit is contained in:
Stian Thorgersen 2016-01-26 12:50:03 +01:00
commit b93deddda3
77 changed files with 1669 additions and 841 deletions

View file

@ -71,7 +71,7 @@ applications=Applicationen
account=Benutzerkonto
federatedIdentity=Federated Identity
authenticator=Authenticator
sessions=Sessions
sessions=Sessionen
log=Log
configureAuthenticators=Authenticators konfigurieren

View file

@ -1,6 +1,8 @@
# Common messages
enabled=de Enabled
name=de Name
displayName=de Display name
displayNameHtml=de HTML Display name
save=de Save
cancel=de Cancel
onText=AN
@ -50,7 +52,6 @@ login-username=de Login Username
password=de Password
login-password=de Login Password
login-theme=de Login Theme
select-one=de Select one...
login-theme.tooltip=de Select theme for login, TOTP, grant, registration, and forgot password pages.
account-theme=de Account Theme
account-theme.tooltip=de Select theme for user account management pages.
@ -62,10 +63,12 @@ i18n-enabled=de Internationalization Enabled
supported-locales=de Supported Locales
supported-locales.placeholder=de Type a locale and enter
default-locale=de Default Locale
realm-cache-enabled=de Realm Cache Enabled
realm-cache-enabled.tooltip=de Enable/disable cache for realm, client and role data.
user-cache-enabled=de User Cache Enabled
user-cache-enabled.tooltip=de Enable/disable user and user role mapping cache.
realm-cache-clear=de Realm Cache
realm-cache-clear.tooltip=de Clears all entries from the realm cache (this will clear entries for all realms)
user-cache-clear=de User Cache
user-cache-clear.tooltip=de Clears all entries from the user cache (this will clear entries for all realms)
revoke-refresh-token=de Revoke Refresh Token
revoke-refresh-token.tooltip=de If enabled refresh tokens can only be used once. Otherwise refresh tokens are not revoked when used and can be used multiple times.
sso-session-idle=de SSO Session Idle
seconds=de Seconds
minutes=de Minutes
@ -74,8 +77,12 @@ days=de Days
sso-session-max=de SSO Session Max
sso-session-idle.tooltip=de Time a session is allowed to be idle before it expires. Tokens and browser sessions are invalidated when a session is expired.
sso-session-max.tooltip=de Max time before a session is expired. Tokens and browser sessions are invalidated when a session is expired.
offline-session-idle=de Offline Session Idle
offline-session-idle.tooltip=de Time an offline session is allowed to be idle before it expires. You need to use offline token to refresh at least once within this period, otherwise offline session will expire.
access-token-lifespan=de Access Token Lifespan
access-token-lifespan.tooltip=de Max time before an access token is expired. This value is recommended to be short relative to the SSO timeout.
access-token-lifespan-for-implicit-flow=de Access Token Lifespan For Implicit Flow
access-token-lifespan-for-implicit-flow.tooltip=de Max time before an access token issued during OpenID Connect Implicit Flow is expired. This value is recommended to be shorter than SSO timeout. There is no possibility to refresh token during implicit flow, that's why there is separate timeout different to 'Access Token Lifespan'.
client-login-timeout=de Client login timeout
client-login-timeout.tooltip=de Max time an client has to finish the access token protocol. This should normally be 1 minute.
login-timeout=de Login timeout
@ -105,14 +112,15 @@ realm-tab-email=de Email
realm-tab-themes=de Themes
realm-tab-cache=de Cache
realm-tab-tokens=de Tokens
realm-tab-client-initial-access=de Initial Access Tokens
realm-tab-security-defenses=de Security Defenses
realm-tab-general=de General
add-realm=de Add Realm
add-realm=de Add realm
#Session settings
realm-sessions=de Realm Sessions
revocation=de Revocation
logout-all=de Logout All
logout-all=de Logout all
active-sessions=de Active Sessions
sessions=de Sessions
not-before=de Not Before
@ -137,7 +145,7 @@ tokenClaimName.tooltip=de Name of the claim to insert into the token. This can
jsonType.label=de Claim JSON Type
jsonType.tooltip=de JSON type that should be used to populate the json claim in the token. long, int, boolean, and String are valid values.
includeInIdToken.label=de Add to ID token
includeInIdTokenTooltip.Should the claim be added to the ID token?
includeInIdToken.tooltip=de Should the claim be added to the ID token?
includeInAccessToken.label=de Add to access token
includeInAccessToken.tooltip=de Should the claim be added to the access token?
@ -170,6 +178,12 @@ client-protocol=de Client Protocol
client-protocol.tooltip=de 'OpenID connect' allows Clients to verify the identity of the End-User based on the authentication performed by an Authorization Server.'SAML' enables web-based authentication and authorization scenarios including cross-domain single sign-on (SSO) and uses security tokens containing assertions to pass information.
access-type=de Access Type
access-type.tooltip=de 'Confidential' clients require a secret to initiate login protocol. 'Public' clients do not require a secret. 'Bearer-only' clients are web services that never initiate a login.
standard-flow-enabled=de Standard Flow Enabled
standard-flow-enabled.tooltip=de This enables standard OpenID Connect redirect based authentication with authorization code. In terms of OpenID Connect or OAuth2 specifications, this enables support of 'Authorization Code Flow' for this client.
implicit-flow-enabled=de Implicit Flow Enabled
implicit-flow-enabled.tooltip=de This enables support for OpenID Connect redirect based authentication without authorization code. In terms of OpenID Connect or OAuth2 specifications, this enables support of 'Implicit Flow' for this client.
direct-access-grants-enabled=de Direct Access Grants Enabled
direct-access-grants-enabled.tooltip=de This enables support for Direct Access Grants, which means that client has access to username/password of user and exchange it directly with Keycloak server for access token. In terms of OAuth2 specification, this enables support of 'Resource Owner Password Credentials Grant' for this client.
service-accounts-enabled=de Service Accounts Enabled
service-accounts-enabled.tooltip=de Allows you to authenticate this client to Keycloak and retrieve access token dedicated to this client.
include-authnstatement=de Include AuthnStatement
@ -267,6 +281,9 @@ import-client-certificate=de Import Client Certificate
jwt-import.key-alias.tooltip=de Archive alias for your certificate.
secret=de Secret
regenerate-secret=de Regenerate Secret
registrationAccessToken=de Registration access token
registrationAccessToken.regenerate=de Regenerate registration access token
registrationAccessToken.tooltip=de The registration access token provides access for clients to the client registration service.
add-role=de Add Role
role-name=de Role Name
composite=de Composite
@ -334,6 +351,8 @@ offline-tokens.tooltip=de Total number of offline tokens for this client.
show-offline-tokens=de Show Offline Tokens
show-offline-tokens.tooltip=de Warning, this is a potentially expensive operation depending on number of offline tokens.
token-issued=de Token Issued
last-access=de Last Access
last-refresh=de Last Refresh
key-export=de Key Export
key-import=de Key Import
export-saml-key=de Export SAML Key
@ -354,13 +373,14 @@ service-account-is-not-enabled-for=de Service account is not enabled for {{clien
create-protocol-mappers=de Create Protocol Mappers
create-protocol-mapper=de Create Protocol Mapper
protocol=de Protocol
protocol.tooltip=de Protocol.
protocol.tooltip=de Protocol...
id=de ID
mapper.name.tooltip=de Name of the mapper.
mapper.consent-required.tooltip=de When granting temporary access, must the user consent to providing this data to the client?
consent-text=de Consent Text
consent-text.tooltip=de Text to display on consent page.
mapper-type=de Mapper Type
mapper-type.tooltip=de Type of the mapper
select-role=de Select role
select-role.tooltip=de Enter role in the textbox to the left, or click this button to browse and select the role you want.
@ -370,6 +390,8 @@ table-of-identity-providers=de Table of identity providers
add-provider.placeholder=de Add provider...
provider=de Provider
gui-order=de GUI order
first-broker-login-flow=de First Login Flow
post-broker-login-flow=de Post Login Flow
redirect-uri=de Redirect URI
redirect-uri.tooltip=de The redirect uri to use when configuring the identity provider.
alias=de Alias
@ -389,6 +411,8 @@ update-profile-on-first-login.tooltip=de Define conditions under which a user ha
trust-email=de Trust Email
trust-email.tooltip=de If enabled then email provided by this provider is not verified even if verification is enabled for the realm.
gui-order.tooltip=de Number defining order of the provider in GUI (eg. on Login page).
first-broker-login-flow.tooltip=de Alias of authentication flow, which is triggered after first login with this identity provider. Term 'First Login' means that there is not yet existing Keycloak account linked with the authenticated identity provider account.
post-broker-login-flow.tooltip=de Alias of authentication flow, which is triggered after each login with this identity provider. Useful if you want additional verification of each user authenticated with this identity provider (for example OTP). Leave this empty if you don't want any additional authenticators to be triggered after login with this identity provider. Also note, that authenticator implementations must assume that user is already set in ClientSession as identity provider already set it.
openid-connect-config=de OpenID Connect Config
openid-connect-config.tooltip=de OIDC SP and external IDP configuration.
authorization-url=de Authorization URL
@ -461,3 +485,417 @@ identity-provider-mappers=de Identity Provider Mappers
create-identity-provider-mapper=de Create Identity Provider Mapper
add-identity-provider-mapper=de Add Identity Provider Mapper
client.description.tooltip=de Specifies description of the client. For example 'My Client for TimeSheets'. Supports keys for localized values as well. For example\: ${my_client_description}
expires=de Expires
expiration=de Expiration
expiration.tooltip=de Specifies how long the token should be valid
count=de Count
count.tooltip=de Specifies how many clients can be created using the token
remainingCount=de Remaining Count
created=de Created
back=de Back
initial-access-tokens=de Initial Access Tokens
add-initial-access-tokens=de Add Initial Access Token
initial-access-token=de Initial Access Token
initial-access.copyPaste.tooltip=de Copy/paste the initial access token before navigating away from this page as it's not posible to retrieve later
continue=de Continue
initial-access-token.confirm.title=de Copy Initial Access Token
initial-access-token.confirm.text=de Please copy and paste the initial access token before confirming as it can't be retrieved later
client-templates=de Client Templates
client-templates.tooltip=de Client templates allow you to define common configuration that is shared between multiple clients
groups=de Groups
group.add-selected.tooltip=de Realm roles that can be assigned to the group.
group.assigned-roles.tooltip=de Realm roles mapped to the group
group.effective-roles.tooltip=de All realm role mappings. Some roles here might be inherited from a mapped composite role.
group.available-roles.tooltip=de Assignable roles from this client.
group.assigned-roles-client.tooltip=de Role mappings for this client.
group.effective-roles-client.tooltip=de Role mappings for this client. Some roles here might be inherited from a mapped composite role.
default-roles=de Default Roles
no-realm-roles-available=de No realm roles available
users=de Users
user.add-selected.tooltip=de Realm roles that can be assigned to the user.
user.assigned-roles.tooltip=de Realm roles mapped to the user
user.effective-roles.tooltip=de All realm role mappings. Some roles here might be inherited from a mapped composite role.
user.available-roles.tooltip=de Assignable roles from this client.
user.assigned-roles-client.tooltip=de Role mappings for this client.
user.effective-roles-client.tooltip=de Role mappings for this client. Some roles here might be inherited from a mapped composite role.
default.available-roles.tooltip=de Realm level roles that can be assigned.
realm-default-roles=de Realm Default Roles
realm-default-roles.tooltip=de Realm level roles assigned to new users.
default.available-roles-client.tooltip=de Roles from this client that are assignable as a default.
client-default-roles=de Client Default Roles
client-default-roles.tooltip=de Roles from this client assigned as a default role.
composite.available-roles.tooltip=de Realm level roles associated with this composite role.
composite.associated-roles.tooltip=de Realm level roles associated with this composite role.
composite.available-roles-client.tooltip=de Roles from this client that you can associate to this composite role.
composite.associated-roles-client.tooltip=de Client roles associated with this composite role.
partial-import=de Partial Import
file=de File
import-from-realm=de Import from realm
import-users=de Import users
import-clients=de Import clients
import-identity-providers=de Import identity providers
import-realm-roles=de Import realm roles
import-client-roles=de Import client roles
if-resource-exists=de If a resource exists
fail=de Fail
skip=de Skip
overwrite=de Overwrite
if-resource-exists.tooltip=de Specify what should be done if you try to import a resource that already exists.
action=de Action
role-selector=de Role Selector
realm-roles.tooltip=de Realm roles that can be selected.
select-a-role=de Select a role
select-realm-role=de Select realm role
client-roles.tooltip=de Client roles that can be selected.
select-client-role=de Select client role
client-template=de Client Template
client-template.tooltip=de Client template this client inherits configuration from
client-saml-endpoint=de Client SAML Endpoint
add-client-template=de Add client template
manage=de Manage
authentication=de Authentication
user-federation=de User Federation
events=de Events
realm-settings=de Realm Settings
configure=de Configure
select-realm=de Select realm
add=de Add
client-template.name.tooltip=de Name of the client template. Must be unique in the realm
client-template.description.tooltip=de Description of the client template
client-template.protocol.tooltip=de Which SSO protocol configuration is being supplied by this client template
add-user-federation-provider=de Add user federation provider
required-settings=de Required Settings
provider-id=de Provider ID
console-display-name=de Console Display Name
console-display-name.tooltip=de Display name of provider when linked in admin console.
priority=de Priority
priority.tooltip=de Priority of provider when doing a user lookup. Lowest first.
sync-settings=de Sync Settings
periodic-full-sync=de Periodic Full Sync
periodic-full-sync.tooltip=de Does periodic full synchronization of provider users to Keycloak should be enabled or not
full-sync-period=de Full Sync Period
full-sync-period.tooltip=de Period for full synchronization in seconds
periodic-changed-users-sync=de Periodic Changed Users Sync
periodic-changed-users-sync.tooltip=de Does periodic synchronization of changed or newly created provider users to Keycloak should be enabled or not
changed-users-sync-period=de Changed Users Sync Period
changed-users-sync-period.tooltip=de Period for synchronization of changed or newly created provider users in seconds
synchronize-changed-users=de Synchronize changed users
synchronize-all-users=de Synchronize all users
kerberos-realm=de Kerberos Realm
kerberos-realm.tooltip=de Name of kerberos realm. For example FOO.ORG
server-principal=de Server Principal
server-principal.tooltip=de Full name of server principal for HTTP service including server and domain name. For example HTTP/host.foo.org@FOO.ORG
keytab=de KeyTab
keytab.tooltip=de Location of Kerberos KeyTab file containing the credentials of server principal. For example /etc/krb5.keytab
debug=de Debug
debug.tooltip=de Enable/disable debug logging to standard output for Krb5LoginModule.
allow-password-authentication=de Allow Password Authentication
allow-password-authentication.tooltip=de Enable/disable possibility of username/password authentication against Kerberos database
edit-mode=de Edit Mode
edit-mode.tooltip=de READ_ONLY means that password updates are not allowed and user always authenticates with Kerberos password. UNSYNCED means user can change his password in Keycloak database and this one will be used instead of Kerberos password then
ldap.edit-mode.tooltip=de 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.
update-profile-first-login=de Update Profile First Login
update-profile-first-login.tooltip=de Update profile on first login
sync-registrations=de Sync Registrations
ldap.sync-registrations.tooltip=de Should newly created users be created within LDAP store? Priority effects which provider is chose to sync the new user.
vendor=de Vendor
ldap.vendor.tooltip=de LDAP vendor (provider)
username-ldap-attribute=de Username LDAP attribute
ldap-attribute-name-for-username=de LDAP attribute name for username
username-ldap-attribute.tooltip=de 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.
rdn-ldap-attribute=de RDN LDAP attribute
ldap-attribute-name-for-user-rdn=de LDAP attribute name for user RDN
rdn-ldap-attribute.tooltip=de 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's not required. For example for Active directory it's common to use 'cn' as RDN attribute when username attribute might be 'sAMAccountName'.
uuid-ldap-attribute=de UUID LDAP attribute
ldap-attribute-name-for-uuid=de LDAP attribute name for UUID
uuid-ldap-attribute.tooltip=de Name of LDAP attribute, which is used as unique object identifier (UUID) for objects in LDAP. For many LDAP server vendors it's 'entryUUID' however some are different. For example for Active directory it should be 'objectGUID'. If your LDAP server really doesn't support the notion of UUID, you can use any other attribute, which is supposed to be unique among LDAP users in tree. For example 'uid' or 'entryDN'.
user-object-classes=de User Object Classes
ldap-user-object-classes.placeholder=de LDAP User Object Classes (div. by comma)
ldap-connection-url=de LDAP connection URL
ldap-users-dn=de LDAP Users DN
ldap-bind-dn=de LDAP Bind DN
ldap-bind-credentials=de LDAP Bind Credentials
ldap-filter=de LDAP Filter
ldap.user-object-classes.tooltip=de 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.\
connection-url=de Connection URL
ldap.connection-url.tooltip=de Connection URL to your LDAP server
test-connection=de Test connection
users-dn=de Users DN
ldap.users-dn.tooltip=de Full DN of LDAP tree where your users are. This DN is 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'
authentication-type=de Authentication Type
ldap.authentication-type.tooltip=de LDAP Authentication type. Right now just 'none' (anonymous LDAP authentication) or 'simple' (Bind credential + Bind password authentication) mechanisms are available
bind-dn=de Bind DN
ldap.bind-dn.tooltip=de DN of LDAP admin, which will be used by Keycloak to access LDAP server
bind-credential=de Bind Credential
ldap.bind-credential.tooltip=de Password of LDAP admin
test-authentication=de Test authentication
custom-user-ldap-filter=de Custom User LDAP Filter
ldap.custom-user-ldap-filter.tooltip=de 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 ')'
search-scope=de Search Scope
ldap.search-scope.tooltip=de For one level, we search for users just in DNs specified by User DNs. For subtree, we search in whole of their subtree. See LDAP documentation for more details
connection-pooling=de Connection Pooling
ldap.connection-pooling.tooltip=de Does Keycloak should use connection pooling for accessing LDAP server
ldap.pagination.tooltip=de Does the LDAP server support pagination.
kerberos-integration=de Kerberos Integration
allow-kerberos-authentication=de Allow Kerberos authentication
ldap.allow-kerberos-authentication.tooltip=de Enable/disable HTTP authentication of users with SPNEGO/Kerberos tokens. The data about authenticated users will be provisioned from this LDAP server
use-kerberos-for-password-authentication=de Use Kerberos For Password Authentication
ldap.use-kerberos-for-password-authentication.tooltip=de Use Kerberos login module for authenticate username/password against Kerberos server instead of authenticating against LDAP server with Directory Service API
batch-size=de Batch Size
ldap.batch-size.tooltip=de Count of LDAP users to be imported from LDAP to Keycloak within single transaction.
ldap.periodic-full-sync.tooltip=de Does periodic full synchronization of LDAP users to Keycloak should be enabled or not
ldap.periodic-changed-users-sync.tooltip=de Does periodic synchronization of changed or newly created LDAP users to Keycloak should be enabled or not
ldap.changed-users-sync-period.tooltip=de Period for synchronization of changed or newly created LDAP users in seconds
user-federation-mappers=de User Federation Mappers
create-user-federation-mapper=de Create user federation mapper
add-user-federation-mapper=de Add user federation mapper
provider-name=de Provider Name
no-user-federation-providers-configured=de No user federation providers configured
add-identity-provider=de Add identity provider
add-identity-provider-link=de Add identity provider link
identity-provider=de Identity Provider
identity-provider-user-id=de Identity Provider User ID
identity-provider-user-id.tooltip=de Unique ID of the user on the Identity Provider side
identity-provider-username=de Identity Provider Username
identity-provider-username.tooltip=de Username on the Identity Provider side
pagination=de Pagination
browser-flow=de Browser Flow
browser-flow.tooltip=de Select the flow you want to use for browser authentication.
registration-flow=de Registration Flow
registration-flow.tooltip=de Select the flow you want to use for registration.
direct-grant-flow=de Direct Grant Flow
direct-grant-flow.tooltip=de Select the flow you want to use for direct grant authentication.
reset-credentials=de Reset Credentials
reset-credentials.tooltip=de Select the flow you want to use when the user has forgotten their credentials.
client-authentication=de Client Authentication
client-authentication.tooltip=de Select the flow you want to use for authentication of clients.
new=de New
copy=de Copy
add-execution=de Add execution
add-flow=de Add flow
auth-type=de Auth Type
requirement=de Requirement
config=de Config
no-executions-available=de No executions available
authentication-flows=de Authentication Flows
create-authenticator-config=de Create authenticator config
authenticator.alias.tooltip=de Name of the configuration
otp-type=de OTP Type
time-based=de Time Based
counter-based=de Counter Based
otp-type.tooltip=de totp is Time-Based One Time Password. 'hotp' is a counter base one time password in which the server keeps a counter to hash against.
otp-hash-algorithm=de OTP Hash Algorithm
otp-hash-algorithm.tooltip=de What hashing algorithm should be used to generate the OTP.
number-of-digits=de Number of Digits
otp.number-of-digits.tooltip=de How many digits should the OTP have?
look-ahead-window=de Look Ahead Window
otp.look-ahead-window.tooltip=de How far ahead should the server look just in case the token generator and server are out of time sync or counter sync?
initial-counter=de Initial Counter
otp.initial-counter.tooltip=de What should the initial counter value be?
otp-token-period=de OTP Token Period
otp-token-period.tooltip=de How many seconds should an OTP token be valid? Defaults to 30 seconds.
table-of-password-policies=de Table of Password Policies
add-policy.placeholder=de Add policy...
policy-type=de Policy Type
policy-value=de Policy Value
admin-events=de Admin Events
admin-events.tooltip=de Displays saved admin events for the realm. Events are related to admin account, for example a realm creation. To enable persisted events go to config.
login-events=de Login Events
filter=de Filter
update=de Update
reset=de Reset
operation-types=de Operation Types
select-operations.placeholder=de Select operations...
resource-path=de Resource Path
resource-path.tooltip=de Filter by resource path. Supports wildcards '*' to match a single part of the path and '**' matches multiple parts. For example 'realms/*/clients/asbc' matches client with id asbc in any realm, while or 'realms/master/**' matches anything in the master realm.
date-(from)=de Date (From)
date-(to)=de Date (To)
authentication-details=de Authentication Details
ip-address=de IP Address
time=de Time
operation-type=de Operation Type
auth=de Auth
representation=de Representation
register=de Register
required-action=de Required Action
default-action=de Default Action
auth.default-action.tooltip=de If enabled, any new user will have this required action assigned to it.
no-required-actions-configured=de No required actions configured
defaults-to-id=de Defaults to id
flows=de Flows
bindings=de Bindings
required-actions=de Required Actions
password-policy=de Password Policy
otp-policy=de OTP Policy
user-groups=de User Groups
default-groups=de Default Groups
groups.default-groups.tooltip=de Set of groups that new users will automatically join.
cut=de Cut
paste=de Paste
create-group=de Create group
create-authenticator-execution=de Create Authenticator Execution
create-form-action-execution=de Create Form Action Execution
create-top-level-form=de Create Top Level Form
flow.alias.tooltip=de Specifies display name for the flow.
top-level-flow-type=de Top Level Flow Type
flow.generic=de generic
flow.client=de client
top-level-flow-type.tooltip=de What kind of top level flow is it? Type 'client' is used for authentication of clients (applications) when generic is for users and everything else
create-execution-flow=de Create Execution Flow
flow-type=de Flow Type
flow.form.type=de form
flow-type.tooltip=de What kind of form is it
form-provider=de Form Provider
default-groups.tooltip=de Newly created or registered users will automatically be added to these groups
select-a-type.placeholder=de select a type
available-groups=de Available Groups
available-groups.tooltip=de Select a group you want to add as a default.
value=de Value
table-of-group-members=de Table of group members
last-name=de Last Name
first-name=de First Name
email=de Email
toggle-navigation=de Toggle navigation
manage-account=de Manage account
sign-out=de Sign Out
server-info=de Server Info
resource-not-found=de Resource <strong>not found</strong>...
resource-not-found.instruction=de We could not find the resource you are looking for. Please make sure the URL you entered is correct.
go-to-the-home-page=de Go to the home page &raquo;
page-not-found=de Page <strong>not found</strong>...
page-not-found.instruction=de We could not find the page you are looking for. Please make sure the URL you entered is correct.
events.tooltip=de Displays saved events for the realm. Events are related to user accounts, for example a user login. To enable persisted events go to config.
select-event-types.placeholder=de Select event types...
events-config.tooltip=de Displays configuration options to enable persistence of user and admin events.
select-an-action.placeholder=de Select an action...
event-listeners.tooltip=de Configure what listeners receive events for the realm.
login.save-events.tooltip=de If enabled login events are saved to the database which makes events available to the admin and account management consoles.
clear-events.tooltip=de Deletes all events in the database.
events.expiration.tooltip=de Sets the expiration for events. Expired events are periodically deleted from the database.
admin-events-settings=de Admin Events Settings
save-events=de Save events
admin.save-events.tooltip=de If enabled admin events are saved to the database which makes events available to the admin console.
saved-types.tooltip=de Configure what event types are saved.
include-representation=de Include Representation
include-representation.tooltip=de Include JSON representation for create and update requests.
clear-admin-events.tooltip=de Deletes all admin events in the database.
server-version=de Server Version
info=de Info
providers=de Providers
server-time=de Server Time
server-uptime=de Server Uptime
memory=de Memory
total-memory=de Total Memory
free-memory=de Free Memory
used-memory=de Used Memory
system=de System
current-working-directory=de Current Working Directory
java-version=de Java Version
java-vendor=de Java Vendor
java-runtime=de Java Runtime
java-vm=de Java VM
java-vm-version=de Java VM Version
java-home=de Java Home
user-name=de User Name
user-timezone=de User Timezone
user-locale=de User Locale
system-encoding=de System Encoding
operating-system=de Operating System
os-architecture=de OS Architecture
spi=de SPI
granted-roles=de Granted Roles
granted-protocol-mappers=de Granted Protocol Mappers
additional-grants=de Additional Grants
revoke=de Revoke
new-password=de New Password
password-confirmation=de Password Confirmation
credentials.temporary.tooltip=de If enabled user is required to change password on next login
remove-totp=de Remove TOTP
credentials.remove-totp.tooltip=de Remove one time password generator for user.
reset-actions=de Reset Actions
credentials.reset-actions.tooltip=de Set of actions to execute when sending the user a Reset Actions Email. 'Verify email' sends an email to the user to verify their email address. 'Update profile' requires user to enter in new personal information. 'Update password' requires user to enter in a new password. 'Configure TOTP' requires setup of a mobile password generator.
reset-actions-email=de Reset Actions Email
send-email=de Send email
credentials.reset-actions-email.tooltip=de Sends an email to user with an embedded link. Clicking on link will allow the user to execute the reset actions. They will not have to login prior to this. For example, set the action to update password, click this button, and the user will be able to change their password without logging in.
add-user=de Add user
created-at=de Created At
user-enabled=de User Enabled
user-enabled.tooltip=de A disabled user cannot login.
user-temporarily-locked=de User Temporarily Locked
user-temporarily-locked.tooltip=de The user may have been locked due to failing to login too many times.
unlock-user=de Unlock user
federation-link=de Federation Link
email-verified=de Email Verified
email-verified.tooltip=de Has the user's email been verified?
required-user-actions=de Required User Actions
required-user-actions.tooltip=de Require an action when the user logs in. 'Verify email' sends an email to the user to verify their email address. 'Update profile' requires user to enter in new personal information. 'Update password' requires user to enter in a new password. 'Configure TOTP' requires setup of a mobile password generator.
locale=de Locale
select-one.placeholder=de Select one...
impersonate=de Impersonate
impersonate-user=de Impersonate user
impersonate-user.tooltip=de Login as this user. If user is in same realm as you, your current login session will be logged out before you are logged in as this user.
identity-provider-alias=de Identity Provider Alias
provider-user-id=de Provider User ID
provider-username=de Provider Username
no-identity-provider-links-available=de No identity provider links available
group-membership=de Group Membership
leave=de Leave
group-membership.tooltip=de Groups user is a member of. Select a listed group and click the Leave button to leave the group.
membership.available-groups.tooltip=de Groups a user can join. Select a group and click the join button.
table-of-realm-users=de Table of Realm Users
view-all-users=de View all users
unlock-users=de Unlock users
no-users-available=de No users available
users.instruction=de Please enter a search, or click on view all users
consents=de Consents
started=de Started
logout-all-sessions=de Logout all sessions
logout=de Logout
new-name=de New Name
ok=de Ok
attributes=de Attributes
role-mappings=de Role Mappings
members=de Members
details=de Details
identity-provider-links=de Identity Provider Links
register-required-action=de Register required action
gender=de Gender
address=de Address
phone=de Phone
profile-url=de Profile URL
picture-url=de Picture URL
website=de Website
import-keys-and-cert=de Import keys and cert
import-keys-and-cert.tooltip=de Upload the client's key pair and cert.
upload-keys=de Upload Keys
download-keys-and-cert=de Download keys and cert
no-value-assigned.placeholder=de No value assigned
remove=de Remove
no-group-members=de No group members
temporary=de Temporary
join=de Join
event-type=de Event Type
events-config=de Events Config
event-listeners=de Event Listeners
login-events-settings=de Login Events Settings
clear-events=de Clear Events
saved-types=de Saved Types
clear-admin-events=de Clear admin events
clear-changes=de Clear changes

View file

@ -54,7 +54,6 @@ login-username=Login Username
password=Password
login-password=Login Password
login-theme=Login Theme
select-one=Select one...
login-theme.tooltip=Select theme for login, TOTP, grant, registration, and forgot password pages.
account-theme=Account Theme
account-theme.tooltip=Select theme for user account management pages.
@ -118,12 +117,12 @@ realm-tab-tokens=Tokens
realm-tab-client-initial-access=Initial Access Tokens
realm-tab-security-defenses=Security Defenses
realm-tab-general=General
add-realm=Add Realm
add-realm=Add realm
#Session settings
realm-sessions=Realm Sessions
revocation=Revocation
logout-all=Logout All
logout-all=Logout all
active-sessions=Active Sessions
sessions=Sessions
not-before=Not Before
@ -148,7 +147,7 @@ tokenClaimName.tooltip=Name of the claim to insert into the token. This can be
jsonType.label=Claim JSON Type
jsonType.tooltip=JSON type that should be used to populate the json claim in the token. long, int, boolean, and String are valid values.
includeInIdToken.label=Add to ID token
includeInIdTokenTooltip.Should the claim be added to the ID token?
includeInIdToken.tooltip=Should the claim be added to the ID token?
includeInAccessToken.label=Add to access token
includeInAccessToken.tooltip=Should the claim be added to the access token?
@ -171,7 +170,7 @@ select-file=Select file
view-details=View details
clear-import=Clear import
client-id.tooltip=Specifies ID referenced in URI and tokens. For example 'my-client'. For SAML this is also the expected issuer value from authn requests
client.name.tooltip=Specifies display name of the client. For example 'My Client'. Supports keys for localized values as well. For example\: ${my_client}
client.name.tooltip=Specifies display name of the client. For example 'My Client'. Supports keys for localized values as well. For example\\: ${my_client}
client.enabled.tooltip=Disabled clients cannot initiate a login or have obtain access tokens.
consent-required=Consent Required
consent-required.tooltip=If enabled users have to consent to client access.
@ -374,14 +373,14 @@ service-account-is-not-enabled-for=Service account is not enabled for {{client}}
create-protocol-mappers=Create Protocol Mappers
create-protocol-mapper=Create Protocol Mapper
protocol=Protocol
protocol.tooltip=Protocol.
protocol.tooltip=Protocol...
id=ID
mapper.name.tooltip=Name of the mapper.
mapper.consent-required.tooltip=When granting temporary access, must the user consent to providing this data to the client?
consent-text=Consent Text
consent-text.tooltip=Text to display on consent page.
mapper-type=Mapper Type
mapper-type.tooltip=Type of the mapper
# realm identity providers
identity-providers=Identity Providers
table-of-identity-providers=Table of identity providers
@ -488,14 +487,14 @@ realm=Realm
identity-provider-mappers=Identity Provider Mappers
create-identity-provider-mapper=Create Identity Provider Mapper
add-identity-provider-mapper=Add Identity Provider Mapper
client.description.tooltip=Specifies description of the client. For example 'My Client for TimeSheets'. Supports keys for localized values as well. For example\: ${my_client_description}
client.description.tooltip=Specifies description of the client. For example 'My Client for TimeSheets'. Supports keys for localized values as well. For example\\: ${my_client_description}
expires=Expires
expiration=Expiration
expiration.tooltip=Specifies how long the token should be valid
count=Count
count.tooltip=Specifies how many clients can be created using the token
remainingCount=Remaining count
remainingCount=Remaining Count
created=Created
back=Back
initial-access-tokens=Initial Access Tokens
@ -505,3 +504,402 @@ initial-access.copyPaste.tooltip=Copy/paste the initial access token before navi
continue=Continue
initial-access-token.confirm.title=Copy Initial Access Token
initial-access-token.confirm.text=Please copy and paste the initial access token before confirming as it can't be retrieved later
client-templates=Client Templates
client-templates.tooltip=Client templates allow you to define common configuration that is shared between multiple clients
groups=Groups
group.add-selected.tooltip=Realm roles that can be assigned to the group.
group.assigned-roles.tooltip=Realm roles mapped to the group
group.effective-roles.tooltip=All realm role mappings. Some roles here might be inherited from a mapped composite role.
group.available-roles.tooltip=Assignable roles from this client.
group.assigned-roles-client.tooltip=Role mappings for this client.
group.effective-roles-client.tooltip=Role mappings for this client. Some roles here might be inherited from a mapped composite role.
default-roles=Default Roles
no-realm-roles-available=No realm roles available
users=Users
user.add-selected.tooltip=Realm roles that can be assigned to the user.
user.assigned-roles.tooltip=Realm roles mapped to the user
user.effective-roles.tooltip=All realm role mappings. Some roles here might be inherited from a mapped composite role.
user.available-roles.tooltip=Assignable roles from this client.
user.assigned-roles-client.tooltip=Role mappings for this client.
user.effective-roles-client.tooltip=Role mappings for this client. Some roles here might be inherited from a mapped composite role.
default.available-roles.tooltip=Realm level roles that can be assigned.
realm-default-roles=Realm Default Roles
realm-default-roles.tooltip=Realm level roles assigned to new users.
default.available-roles-client.tooltip=Roles from this client that are assignable as a default.
client-default-roles=Client Default Roles
client-default-roles.tooltip=Roles from this client assigned as a default role.
composite.available-roles.tooltip=Realm level roles associated with this composite role.
composite.associated-roles.tooltip=Realm level roles associated with this composite role.
composite.available-roles-client.tooltip=Roles from this client that you can associate to this composite role.
composite.associated-roles-client.tooltip=Client roles associated with this composite role.
partial-import=Partial Import
file=File
import-from-realm=Import from realm
import-users=Import users
import-clients=Import clients
import-identity-providers=Import identity providers
import-realm-roles=Import realm roles
import-client-roles=Import client roles
if-resource-exists=If a resource exists
fail=Fail
skip=Skip
overwrite=Overwrite
if-resource-exists.tooltip=Specify what should be done if you try to import a resource that already exists.
action=Action
role-selector=Role Selector
realm-roles.tooltip=Realm roles that can be selected.
select-a-role=Select a role
select-realm-role=Select realm role
client-roles.tooltip=Client roles that can be selected.
select-client-role=Select client role
client-template=Client Template
client-template.tooltip=Client template this client inherits configuration from
client-saml-endpoint=Client SAML Endpoint
add-client-template=Add client template
manage=Manage
authentication=Authentication
user-federation=User Federation
events=Events
realm-settings=Realm Settings
configure=Configure
select-realm=Select realm
add=Add
client-template.name.tooltip=Name of the client template. Must be unique in the realm
client-template.description.tooltip=Description of the client template
client-template.protocol.tooltip=Which SSO protocol configuration is being supplied by this client template
add-user-federation-provider=Add user federation provider
required-settings=Required Settings
provider-id=Provider ID
console-display-name=Console Display Name
console-display-name.tooltip=Display name of provider when linked in admin console.
priority=Priority
priority.tooltip=Priority of provider when doing a user lookup. Lowest first.
sync-settings=Sync Settings
periodic-full-sync=Periodic Full Sync
periodic-full-sync.tooltip=Does periodic full synchronization of provider users to Keycloak should be enabled or not
full-sync-period=Full Sync Period
full-sync-period.tooltip=Period for full synchronization in seconds
periodic-changed-users-sync=Periodic Changed Users Sync
periodic-changed-users-sync.tooltip=Does periodic synchronization of changed or newly created provider users to Keycloak should be enabled or not
changed-users-sync-period=Changed Users Sync Period
changed-users-sync-period.tooltip=Period for synchronization of changed or newly created provider users in seconds
synchronize-changed-users=Synchronize changed users
synchronize-all-users=Synchronize all users
kerberos-realm=Kerberos Realm
kerberos-realm.tooltip=Name of kerberos realm. For example FOO.ORG
server-principal=Server Principal
server-principal.tooltip=Full name of server principal for HTTP service including server and domain name. For example HTTP/host.foo.org@FOO.ORG
keytab=KeyTab
keytab.tooltip=Location of Kerberos KeyTab file containing the credentials of server principal. For example /etc/krb5.keytab
debug=Debug
debug.tooltip=Enable/disable debug logging to standard output for Krb5LoginModule.
allow-password-authentication=Allow Password Authentication
allow-password-authentication.tooltip=Enable/disable possibility of username/password authentication against Kerberos database
edit-mode=Edit Mode
edit-mode.tooltip=READ_ONLY means that password updates are not allowed and user always authenticates with Kerberos password. UNSYNCED means user can change his password in Keycloak database and this one will be used instead of Kerberos password then
ldap.edit-mode.tooltip=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.
update-profile-first-login=Update Profile First Login
update-profile-first-login.tooltip=Update profile on first login
sync-registrations=Sync Registrations
ldap.sync-registrations.tooltip=Should newly created users be created within LDAP store? Priority effects which provider is chose to sync the new user.
vendor=Vendor
ldap.vendor.tooltip=LDAP vendor (provider)
username-ldap-attribute=Username LDAP attribute
ldap-attribute-name-for-username=LDAP attribute name for username
username-ldap-attribute.tooltip=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.
rdn-ldap-attribute=RDN LDAP attribute
ldap-attribute-name-for-user-rdn=LDAP attribute name for user RDN
rdn-ldap-attribute.tooltip=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's not required. For example for Active directory it's common to use 'cn' as RDN attribute when username attribute might be 'sAMAccountName'.
uuid-ldap-attribute=UUID LDAP attribute
ldap-attribute-name-for-uuid=LDAP attribute name for UUID
uuid-ldap-attribute.tooltip=Name of LDAP attribute, which is used as unique object identifier (UUID) for objects in LDAP. For many LDAP server vendors it's 'entryUUID' however some are different. For example for Active directory it should be 'objectGUID'. If your LDAP server really doesn't support the notion of UUID, you can use any other attribute, which is supposed to be unique among LDAP users in tree. For example 'uid' or 'entryDN'.
user-object-classes=User Object Classes
ldap-user-object-classes.placeholder=LDAP User Object Classes (div. by comma)
ldap-connection-url=LDAP connection URL
ldap-users-dn=LDAP Users DN
ldap-bind-dn=LDAP Bind DN
ldap-bind-credentials=LDAP Bind Credentials
ldap-filter=LDAP Filter
ldap.user-object-classes.tooltip=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.
connection-url=Connection URL
ldap.connection-url.tooltip=Connection URL to your LDAP server
test-connection=Test connection
users-dn=Users DN
ldap.users-dn.tooltip=Full DN of LDAP tree where your users are. This DN is 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'
authentication-type=Authentication Type
ldap.authentication-type.tooltip=LDAP Authentication type. Right now just 'none' (anonymous LDAP authentication) or 'simple' (Bind credential + Bind password authentication) mechanisms are available
bind-dn=Bind DN
ldap.bind-dn.tooltip=DN of LDAP admin, which will be used by Keycloak to access LDAP server
bind-credential=Bind Credential
ldap.bind-credential.tooltip=Password of LDAP admin
test-authentication=Test authentication
custom-user-ldap-filter=Custom User LDAP Filter
ldap.custom-user-ldap-filter.tooltip=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 ')'
search-scope=Search Scope
ldap.search-scope.tooltip=For one level, we search for users just in DNs specified by User DNs. For subtree, we search in whole of their subtree. See LDAP documentation for more details
connection-pooling=Connection Pooling
ldap.connection-pooling.tooltip=Does Keycloak should use connection pooling for accessing LDAP server
ldap.pagination.tooltip=Does the LDAP server support pagination.
kerberos-integration=Kerberos Integration
allow-kerberos-authentication=Allow Kerberos authentication
ldap.allow-kerberos-authentication.tooltip=Enable/disable HTTP authentication of users with SPNEGO/Kerberos tokens. The data about authenticated users will be provisioned from this LDAP server
use-kerberos-for-password-authentication=Use Kerberos For Password Authentication
ldap.use-kerberos-for-password-authentication.tooltip=Use Kerberos login module for authenticate username/password against Kerberos server instead of authenticating against LDAP server with Directory Service API
batch-size=Batch Size
ldap.batch-size.tooltip=Count of LDAP users to be imported from LDAP to Keycloak within single transaction.
ldap.periodic-full-sync.tooltip=Does periodic full synchronization of LDAP users to Keycloak should be enabled or not
ldap.periodic-changed-users-sync.tooltip=Does periodic synchronization of changed or newly created LDAP users to Keycloak should be enabled or not
ldap.changed-users-sync-period.tooltip=Period for synchronization of changed or newly created LDAP users in seconds
user-federation-mappers=User Federation Mappers
create-user-federation-mapper=Create user federation mapper
add-user-federation-mapper=Add user federation mapper
provider-name=Provider Name
no-user-federation-providers-configured=No user federation providers configured
add-identity-provider=Add identity provider
add-identity-provider-link=Add identity provider link
identity-provider=Identity Provider
identity-provider-user-id=Identity Provider User ID
identity-provider-user-id.tooltip=Unique ID of the user on the Identity Provider side
identity-provider-username=Identity Provider Username
identity-provider-username.tooltip=Username on the Identity Provider side
pagination=Pagination
browser-flow=Browser Flow
browser-flow.tooltip=Select the flow you want to use for browser authentication.
registration-flow=Registration Flow
registration-flow.tooltip=Select the flow you want to use for registration.
direct-grant-flow=Direct Grant Flow
direct-grant-flow.tooltip=Select the flow you want to use for direct grant authentication.
reset-credentials=Reset Credentials
reset-credentials.tooltip=Select the flow you want to use when the user has forgotten their credentials.
client-authentication=Client Authentication
client-authentication.tooltip=Select the flow you want to use for authentication of clients.
new=New
copy=Copy
add-execution=Add execution
add-flow=Add flow
auth-type=Auth Type
requirement=Requirement
config=Config
no-executions-available=No executions available
authentication-flows=Authentication Flows
create-authenticator-config=Create authenticator config
authenticator.alias.tooltip=Name of the configuration
otp-type=OTP Type
time-based=Time Based
counter-based=Counter Based
otp-type.tooltip=totp is Time-Based One Time Password. 'hotp' is a counter base one time password in which the server keeps a counter to hash against.
otp-hash-algorithm=OTP Hash Algorithm
otp-hash-algorithm.tooltip=What hashing algorithm should be used to generate the OTP.
number-of-digits=Number of Digits
otp.number-of-digits.tooltip=How many digits should the OTP have?
look-ahead-window=Look Ahead Window
otp.look-ahead-window.tooltip=How far ahead should the server look just in case the token generator and server are out of time sync or counter sync?
initial-counter=Initial Counter
otp.initial-counter.tooltip=What should the initial counter value be?
otp-token-period=OTP Token Period
otp-token-period.tooltip=How many seconds should an OTP token be valid? Defaults to 30 seconds.
table-of-password-policies=Table of Password Policies
add-policy.placeholder=Add policy...
policy-type=Policy Type
policy-value=Policy Value
admin-events=Admin Events
admin-events.tooltip=Displays saved admin events for the realm. Events are related to admin account, for example a realm creation. To enable persisted events go to config.
login-events=Login Events
filter=Filter
update=Update
reset=Reset
operation-types=Operation Types
select-operations.placeholder=Select operations...
resource-path=Resource Path
resource-path.tooltip=Filter by resource path. Supports wildcards '*' to match a single part of the path and '**' matches multiple parts. For example 'realms/*/clients/asbc' matches client with id asbc in any realm, while or 'realms/master/**' matches anything in the master realm.
date-(from)=Date (From)
date-(to)=Date (To)
authentication-details=Authentication Details
ip-address=IP Address
time=Time
operation-type=Operation Type
auth=Auth
representation=Representation
register=Register
required-action=Required Action
default-action=Default Action
auth.default-action.tooltip=If enabled, any new user will have this required action assigned to it.
no-required-actions-configured=No required actions configured
defaults-to-id=Defaults to id
flows=Flows
bindings=Bindings
required-actions=Required Actions
password-policy=Password Policy
otp-policy=OTP Policy
user-groups=User Groups
default-groups=Default Groups
groups.default-groups.tooltip=Set of groups that new users will automatically join.
cut=Cut
paste=Paste
create-group=Create group
create-authenticator-execution=Create Authenticator Execution
create-form-action-execution=Create Form Action Execution
create-top-level-form=Create Top Level Form
flow.alias.tooltip=Specifies display name for the flow.
top-level-flow-type=Top Level Flow Type
flow.generic=generic
flow.client=client
top-level-flow-type.tooltip=What kind of top level flow is it? Type 'client' is used for authentication of clients (applications) when generic is for users and everything else
create-execution-flow=Create Execution Flow
flow-type=Flow Type
flow.form.type=form
flow-type.tooltip=What kind of form is it
form-provider=Form Provider
default-groups.tooltip=Newly created or registered users will automatically be added to these groups
select-a-type.placeholder=select a type
available-groups=Available Groups
available-groups.tooltip=Select a group you want to add as a default.
value=Value
table-of-group-members=Table of group members
last-name=Last Name
first-name=First Name
email=Email
toggle-navigation=Toggle navigation
manage-account=Manage account
sign-out=Sign Out
server-info=Server Info
resource-not-found=Resource <strong>not found</strong>...
resource-not-found.instruction=We could not find the resource you are looking for. Please make sure the URL you entered is correct.
go-to-the-home-page=Go to the home page &raquo;
page-not-found=Page <strong>not found</strong>...
page-not-found.instruction=We could not find the page you are looking for. Please make sure the URL you entered is correct.
events.tooltip=Displays saved events for the realm. Events are related to user accounts, for example a user login. To enable persisted events go to config.
select-event-types.placeholder=Select event types...
events-config.tooltip=Displays configuration options to enable persistence of user and admin events.
select-an-action.placeholder=Select an action...
event-listeners.tooltip=Configure what listeners receive events for the realm.
login.save-events.tooltip=If enabled login events are saved to the database which makes events available to the admin and account management consoles.
clear-events.tooltip=Deletes all events in the database.
events.expiration.tooltip=Sets the expiration for events. Expired events are periodically deleted from the database.
admin-events-settings=Admin Events Settings
save-events=Save Events
admin.save-events.tooltip=If enabled admin events are saved to the database which makes events available to the admin console.
saved-types.tooltip=Configure what event types are saved.
include-representation=Include Representation
include-representation.tooltip=Include JSON representation for create and update requests.
clear-admin-events.tooltip=Deletes all admin events in the database.
server-version=Server Version
info=Info
providers=Providers
server-time=Server Time
server-uptime=Server Uptime
memory=Memory
total-memory=Total Memory
free-memory=Free Memory
used-memory=Used Memory
system=System
current-working-directory=Current Working Directory
java-version=Java Version
java-vendor=Java Vendor
java-runtime=Java Runtime
java-vm=Java VM
java-vm-version=Java VM Version
java-home=Java Home
user-name=User Name
user-timezone=User Timezone
user-locale=User Locale
system-encoding=System Encoding
operating-system=Operating System
os-architecture=OS Architecture
spi=SPI
granted-roles=Granted Roles
granted-protocol-mappers=Granted Protocol Mappers
additional-grants=Additional Grants
revoke=Revoke
new-password=New Password
password-confirmation=Password Confirmation
credentials.temporary.tooltip=If enabled user is required to change password on next login
remove-totp=Remove TOTP
credentials.remove-totp.tooltip=Remove one time password generator for user.
reset-actions=Reset Actions
credentials.reset-actions.tooltip=Set of actions to execute when sending the user a Reset Actions Email. 'Verify email' sends an email to the user to verify their email address. 'Update profile' requires user to enter in new personal information. 'Update password' requires user to enter in a new password. 'Configure TOTP' requires setup of a mobile password generator.
reset-actions-email=Reset Actions Email
send-email=Send email
credentials.reset-actions-email.tooltip=Sends an email to user with an embedded link. Clicking on link will allow the user to execute the reset actions. They will not have to login prior to this. For example, set the action to update password, click this button, and the user will be able to change their password without logging in.
add-user=Add user
created-at=Created At
user-enabled=User Enabled
user-enabled.tooltip=A disabled user cannot login.
user-temporarily-locked=User Temporarily Locked
user-temporarily-locked.tooltip=The user may have been locked due to failing to login too many times.
unlock-user=Unlock user
federation-link=Federation Link
email-verified=Email Verified
email-verified.tooltip=Has the user's email been verified?
required-user-actions=Required User Actions
required-user-actions.tooltip=Require an action when the user logs in. 'Verify email' sends an email to the user to verify their email address. 'Update profile' requires user to enter in new personal information. 'Update password' requires user to enter in a new password. 'Configure TOTP' requires setup of a mobile password generator.
locale=Locale
select-one.placeholder=Select one...
impersonate=Impersonate
impersonate-user=Impersonate user
impersonate-user.tooltip=Login as this user. If user is in same realm as you, your current login session will be logged out before you are logged in as this user.
identity-provider-alias=Identity Provider Alias
provider-user-id=Provider User ID
provider-username=Provider Username
no-identity-provider-links-available=No identity provider links available
group-membership=Group Membership
leave=Leave
group-membership.tooltip=Groups user is a member of. Select a listed group and click the Leave button to leave the group.
membership.available-groups.tooltip=Groups a user can join. Select a group and click the join button.
table-of-realm-users=Table of Realm Users
view-all-users=View all users
unlock-users=Unlock users
no-users-available=No users available
users.instruction=Please enter a search, or click on view all users
consents=Consents
started=Started
logout-all-sessions=Logout all sessions
logout=Logout
new-name=New Name
ok=Ok
attributes=Attributes
role-mappings=Role Mappings
members=Members
details=Details
identity-provider-links=Identity Provider Links
register-required-action=Register required action
gender=Gender
address=Address
phone=Phone
profile-url=Profile URL
picture-url=Picture URL
website=Website
import-keys-and-cert=Import keys and cert
import-keys-and-cert.tooltip=Upload the client's key pair and cert.
upload-keys=Upload Keys
download-keys-and-cert=Download keys and cert
no-value-assigned.placeholder=No value assigned
remove=Remove
no-group-members=No group members
temporary=Temporary
join=Join
event-type=Event Type
events-config=Events Config
event-listeners=Event Listeners
login-events-settings=Login Events Settings
clear-events=Clear events
saved-types=Saved Types
clear-admin-events=Clear admin events
clear-changes=Clear changes

View file

@ -390,6 +390,7 @@ module.controller('RealmThemeCtrl', function($scope, Current, Realm, realm, serv
});
module.controller('RealmCacheCtrl', function($scope, realm, RealmClearUserCache, RealmClearRealmCache, Notifications) {
$scope.realm = angular.copy(realm);
$scope.clearUserCache = function() {
RealmClearUserCache.save({ realm: realm.realm}, function () {

View file

@ -1,66 +1,66 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>Authentication</h1>
<h1>{{:: 'authentication' | translate}}</h1>
<kc-tabs-authentication></kc-tabs-authentication>
<form class="form-horizontal" name="realmForm" novalidate kc-read-only="!access.manageRealm">
<div class="form-group">
<label for="browser" class="col-md-2 control-label">Browser Flow</label>
<label for="browser" class="col-md-2 control-label">{{:: 'browser-flow' | translate}}</label>
<div class="col-md-2">
<div>
<select id="browser" ng-model="realm.browserFlow" class="form-control" ng-options="flow.alias as flow.alias for flow in flows">
</select>
</div>
</div>
<kc-tooltip>Select the flow you want to use for browser authentication.</kc-tooltip>
<kc-tooltip>{{:: 'browser-flow.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label for="registration" class="col-md-2 control-label">Registration Flow</label>
<label for="registration" class="col-md-2 control-label">{{:: 'registration-flow' | translate}}</label>
<div class="col-md-2">
<div>
<select id="registration" ng-model="realm.registrationFlow" class="form-control" ng-options="flow.alias as flow.alias for flow in flows">
</select>
</div>
</div>
<kc-tooltip>Select the flow you want to use for registration.</kc-tooltip>
<kc-tooltip>{{:: 'registration-flow.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label for="grant" class="col-md-2 control-label">Direct Grant Flow</label>
<label for="grant" class="col-md-2 control-label">{{:: 'direct-grant-flow' | translate}}</label>
<div class="col-md-2">
<div>
<select id="grant" ng-model="realm.directGrantFlow" class="form-control" ng-options="flow.alias as flow.alias for flow in flows">
</select>
</div>
</div>
<kc-tooltip>Select the flow you want to use for direct grant authentication.</kc-tooltip>
<kc-tooltip>{{:: 'direct-grant-flow.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label for="resetCredentials" class="col-md-2 control-label">Reset Credentials</label>
<label for="resetCredentials" class="col-md-2 control-label">{{:: 'reset-credentials' | translate}}</label>
<div class="col-md-2">
<div>
<select id="resetCredentials" ng-model="realm.resetCredentialsFlow" class="form-control" ng-options="flow.alias as flow.alias for flow in flows">
</select>
</div>
</div>
<kc-tooltip>Select the flow you want to use when the user has forgotten their credentials.</kc-tooltip>
<kc-tooltip>{{:: 'reset-credentials.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label for="resetCredentials" class="col-md-2 control-label">Client Authentication</label>
<label for="resetCredentials" class="col-md-2 control-label">{{:: 'client-authentication' | translate}}</label>
<div class="col-md-2">
<div>
<select id="clientAuthentication" ng-model="realm.clientAuthenticationFlow" class="form-control" ng-options="flow.alias as flow.alias for flow in clientFlows">
</select>
</div>
</div>
<kc-tooltip>Select the flow you want to use for authentication of clients.</kc-tooltip>
<kc-tooltip>{{:: 'client-authentication.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group" data-ng-show="access.manageRealm">
<div class="col-md-10 col-md-offset-2">
<button kc-save data-ng-disabled="!changed">Save</button>
<button kc-reset data-ng-disabled="!changed">Cancel</button>
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
<button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,5 +1,5 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>Authentication</h1>
<h1>{{:: 'authentication' | translate}}</h1>
<kc-tabs-authentication></kc-tabs-authentication>
@ -15,17 +15,17 @@
</div>
&nbsp;&nbsp;<i class="fa fa-question-circle text-muted" tooltip-trigger="mouseover mouseout" tooltip="{{flow.description}}" tooltip-placement="right"> </i>
<div class="pull-right" data-ng-show="access.manageRealm">
<button class="btn btn-default" data-ng-click="createFlow()">New</button>
<button class="btn btn-default" data-ng-click="copyFlow()">Copy</button>
<button class="btn btn-default" data-ng-hide="flow.builtIn" data-ng-click="removeFlow()">Delete</button>
<button class="btn btn-default" data-ng-hide="flow.builtIn" data-ng-click="addExecution()">Add Execution</button>
<button class="btn btn-default" data-ng-hide="flow.builtIn || flow.providerId === 'client-flow'" data-ng-click="addFlow()">Add Flow</button>
<button class="btn btn-default" data-ng-click="createFlow()">{{:: 'new' | translate}}</button>
<button class="btn btn-default" data-ng-click="copyFlow()">{{:: 'copy' | translate}}</button>
<button class="btn btn-default" data-ng-hide="flow.builtIn" data-ng-click="removeFlow()">{{:: 'delete' | translate}}</button>
<button class="btn btn-default" data-ng-hide="flow.builtIn" data-ng-click="addExecution()">{{:: 'add-execution' | translate}}</button>
<button class="btn btn-default" data-ng-hide="flow.builtIn || flow.providerId === 'client-flow'" data-ng-click="addFlow()">{{:: 'add-flow' | translate}}</button>
</div>
</th>
</tr>
<tr data-ng-hide="executions.length == 0">
<th colspan="{{levelmax + 1}}">Auth Type</th>
<th colspan="{{choicesmax}}">Requirement</th>
<th colspan="{{levelmax + 1}}">{{:: 'auth-type' | translate}}</th>
<th colspan="{{choicesmax}}">{{:: 'requirement' | translate}}</th>
<th>&nbsp;</th>
</tr>
</thead>
@ -48,19 +48,19 @@
<td ng-repeat="emptee in execution.empties"></td>
<td>
<div class="dropdown" data-ng-hide="flow.builtIn && !execution.configurable">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Actions <b class="caret"></b></a>
<a href="#" class="dropdown-toggle" data-toggle="dropdown">{{:: 'actions' | translate}} <b class="caret"></b></a>
<ul class="dropdown-menu" >
<li data-ng-hide="flow.builtIn"><a href="" ng-click="removeExecution(execution)">Delete</a></li>
<li data-ng-hide="flow.builtIn || !execution.authenticationFlow"><a href="" ng-click="addSubFlowExecution(execution)">Add Execution</a></li>
<li data-ng-hide="flow.builtIn || !execution.authenticationFlow"><a href="" ng-click="addSubFlow(execution)">Add Flow</a></li>
<li data-ng-show="execution.configurable && execution.authenticationConfig == null"><a href="#/create/authentication/{{realm.realm}}/flows/{{flow.id}}/execution/{{execution.id}}/provider/{{execution.providerId}}">Config</a></li>
<li data-ng-show="execution.configurable && execution.authenticationConfig != null"><a href="#/realms/{{realm.realm}}/authentication/flows/{{flow.id}}/config/{{execution.providerId}}/{{execution.authenticationConfig}}">Config</a></li>
<li data-ng-hide="flow.builtIn"><a href="" ng-click="removeExecution(execution)">{{:: 'delete' | translate}}</a></li>
<li data-ng-hide="flow.builtIn || !execution.authenticationFlow"><a href="" ng-click="addSubFlowExecution(execution)">{{:: 'add-execution' | translate}}</a></li>
<li data-ng-hide="flow.builtIn || !execution.authenticationFlow"><a href="" ng-click="addSubFlow(execution)">{{:: 'add-flow' | translate}}</a></li>
<li data-ng-show="execution.configurable && execution.authenticationConfig == null"><a href="#/create/authentication/{{realm.realm}}/flows/{{flow.id}}/execution/{{execution.id}}/provider/{{execution.providerId}}">{{:: 'config' | translate}}</a></li>
<li data-ng-show="execution.configurable && execution.authenticationConfig != null"><a href="#/realms/{{realm.realm}}/authentication/flows/{{flow.id}}/config/{{execution.providerId}}/{{execution.authenticationConfig}}">{{:: 'config' | translate}}</a></li>
</ul>
</div>
</td>
</tr>
<tr data-ng-show="executions.length == 0">
<td>No executions available</td>
<td>{{:: 'no-executions-available' | translate}}</td>
</tr>
</tbody>
</table>

View file

@ -1,13 +1,13 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/authentication/flows">Authentication Flows</a></li>
<li><a href="#/realms/{{realm.realm}}/authentication/flows">{{:: 'authentication-flows' | translate}}</a></li>
<li><a href="#/realms/{{realm.realm}}/authentication/flows/{{flow.alias}}">{{flow.alias | capitalize}}</a></li>
<li class="active" data-ng-show="create">Create Authenticator Config</li>
<li class="active" data-ng-show="create">{{:: 'create-authenticator-config' | translate}}</li>
<li class="active" data-ng-hide="create">{{config.alias}}</li>
</ol>
<h1 data-ng-show="create">Create Authenticator Config</h1>
<h1 data-ng-show="create">{{:: 'create-authenticator-config' | translate}}</h1>
<h1 data-ng-hide="create">{{config.alias|capitalize}}<a><i class="pficon pficon-delete clickable" data-ng-show="!create && access.manageRealm"
data-ng-hide="changed" data-ng-click="remove()"></i></a></h1>
@ -15,32 +15,32 @@
<fieldset>
<div class="form-group clearfix" data-ng-show="!create">
<label class="col-md-2 control-label" for="configId">ID </label>
<label class="col-md-2 control-label" for="configId">{{:: 'id' | translate}} </label>
<div class="col-md-6">
<input class="form-control" id="configId" type="text" ng-model="config.id" readonly>
</div>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="name">Alias</label>
<label class="col-md-2 control-label" for="name">{{:: 'alias' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="name" type="text" ng-model="config.alias" data-ng-readonly="!create">
</div>
<kc-tooltip>Name of the configuration.</kc-tooltip>
<kc-tooltip>{{:: 'authenticator.alias.tooltip' | translate}}</kc-tooltip>
</div>
<kc-provider-config realm="realm" config="config.config" properties="configType.properties"></kc-provider-config>
</fieldset>
<div class="form-group">
<div class="col-md-10 col-md-offset-2" data-ng-show="create && access.manageRealm">
<button kc-save>Save</button>
<button kc-cancel data-ng-click="cancel()">Cancel</button>
<button kc-save>{{:: 'save' | translate}}</button>
<button kc-cancel data-ng-click="cancel()">{{:: 'cancel' | translate}}</button>
</div>
</div>
<div class="form-group">
<div class="col-md-10 col-md-offset-2" data-ng-show="!create && access.manageRealm">
<button kc-save data-ng-disabled="!changed">Save</button>
<button kc-reset data-ng-disabled="!changed">Cancel</button>
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
<button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,62 +1,62 @@
<fieldset class="border-top">
<div class="form-group">
<label class="col-md-2 control-label" for="username">Username</label>
<label class="col-md-2 control-label" for="username">{{:: 'username' | translate}}</label>
<div class="col-md-6">
<input ng-model="claims.username" name="username" id="username" onoffswitch />
<input ng-model="claims.username" name="username" id="username" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="claimName">Name</label>
<label class="col-md-2 control-label" for="claimName">{{:: 'name' | translate}}</label>
<div class="col-md-6">
<input ng-model="claims.name" name="claimName" id="claimName" onoffswitch />
<input ng-model="claims.name" name="claimName" id="claimName" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="email">Email</label>
<label class="col-md-2 control-label" for="email">{{:: 'email' | translate}}</label>
<div class="col-md-6">
<input ng-model="claims.email" name="email" id="email" onoffswitch />
<input ng-model="claims.email" name="email" id="email" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="gender">Gender</label>
<label class="col-md-2 control-label" for="gender">{{:: 'gender' | translate}}</label>
<div class="col-md-6">
<input ng-model="claims.gender" name="gender" id="gender" onoffswitch />
<input ng-model="claims.gender" name="gender" id="gender" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="address">Address</label>
<label class="col-md-2 control-label" for="address">{{:: 'address' | translate}}</label>
<div class="col-md-6">
<input ng-model="claims.address" name="address" id="address" onoffswitch />
<input ng-model="claims.address" name="address" id="address" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="locale">Locale</label>
<label class="col-md-2 control-label" for="locale">{{:: 'locale' | translate}}</label>
<div class="col-md-6">
<input ng-model="claims.locale" name="locale" id="locale" onoffswitch />
<input ng-model="claims.locale" name="locale" id="locale" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="phone">Phone</label>
<label class="col-md-2 control-label" for="phone">{{:: 'phone' | translate}}</label>
<div class="col-md-6">
<input ng-model="claims.phone" name="phone" id="phone" onoffswitch />
<input ng-model="claims.phone" name="phone" id="phone" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="profile">Profile URL</label>
<label class="col-md-2 control-label" for="profile">{{:: 'profile-url' | translate}}</label>
<div class="col-md-6">
<input ng-model="claims.profile" name="profile" id="profile" onoffswitch />
<input ng-model="claims.profile" name="profile" id="profile" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="picture">Picture URL</label>
<label class="col-md-2 control-label" for="picture">{{:: 'picture-url' | translate}}</label>
<div class="col-md-6">
<input ng-model="claims.picture" name="picture" id="picture" onoffswitch />
<input ng-model="claims.picture" name="picture" id="picture" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="website">Website</label>
<label class="col-md-2 control-label" for="website">{{:: 'website' | translate}}</label>
<div class="col-md-6">
<input ng-model="claims.website" name="website" id="website" onoffswitch />
<input ng-model="claims.website" name="website" id="website" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
</fieldset>

View file

@ -15,7 +15,7 @@
<form class="form-horizontal" name="clusteringForm" novalidate kc-read-only="!access.manageClients" data-ng-show="create || registered">
<div class="form-group">
<label class="col-md-2 control-label" for="host">Host</label>
<label class="col-md-2 control-label" for="host">{{:: 'host' | translate}}</label>
<div class="col-sm-6">
<input ng-disabled="!create" class="form-control" type="text" id="host" name="host" data-ng-model="node.host" required>
</div>

View file

@ -58,7 +58,7 @@
<kc-tooltip>{{:: 'client-protocol.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="protocol">Client Template</label>
<label class="col-md-2 control-label" for="protocol">{{:: 'client-template' | translate}}</label>
<div class="col-sm-6">
<div>
<select class="form-control" id="template"
@ -67,7 +67,7 @@
</select>
</div>
</div>
<kc-tooltip>Client template this client inherits configuration from</kc-tooltip>
<kc-tooltip>{{:: 'client-template.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group" data-ng-show="protocol == 'openid-connect'">
<label class="col-md-2 control-label" for="accessType">{{:: 'access-type' | translate}}</label>

View file

@ -54,7 +54,7 @@
<div class="form-group">
<div>
<button class="btn btn-default" data-ng-click="done()">{{:: 'Back' | translate}}</button>
<button class="btn btn-default" data-ng-click="done()">{{:: 'back' | translate}}</button>
</div>
</div>
</form>

View file

@ -9,9 +9,9 @@
<form class="form-horizontal" name="keyForm" novalidate kc-read-only="!access.manageRealm">
<fieldset>
<legend collapsed><span class="text">Import Keys and Cert</span> <kc-tooltip>Upload the client's key pair and cert.</kc-tooltip></legend>
<legend collapsed><span class="text">{{:: 'import-keys-and-cert' | translate}}</span> <kc-tooltip>{{:: 'import-keys-and-cert.tooltip' | translate}}</kc-tooltip></legend>
<div class="form-group">
<label class="col-md-2 control-label" for="uploadKeyFormat">Archive Format</label>
<label class="col-md-2 control-label" for="uploadKeyFormat">{{:: 'archive-format' | translate}}</label>
<div class="col-sm-6">
<div>
<select class="form-control" id="uploadKeyFormat"
@ -20,34 +20,34 @@
</select>
</div>
</div>
<kc-tooltip>Java keystore or PKCS12 archive format.</kc-tooltip>
<kc-tooltip>{{:: 'archive-format.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="uploadKeyAlias">Key Alias</label>
<label class="col-md-2 control-label" for="uploadKeyAlias">{{:: 'key-alias' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="text" id="uploadKeyAlias" name="uploadKeyAlias" data-ng-model="uploadKeyAlias" autofocus required>
</div>
<kc-tooltip>Archive alias for your private key and certificate.</kc-tooltip>
<kc-tooltip>{{:: 'key-alias.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="keyPassword">Key Password</label>
<label class="col-md-2 control-label" for="keyPassword">{{:: 'key-password' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="password" id="uploadKeyPassword" name="uploadKeyPassword" data-ng-model="uploadKeyPassword" autofocus required>
</div>
<kc-tooltip>Password to access the private key in the archive</kc-tooltip>
<kc-tooltip>{{:: 'key-password.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="uploadStorePassword">Store Password</label>
<label class="col-md-2 control-label" for="uploadStorePassword">{{:: 'store-password' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="password" id="uploadStorePassword" name="uploadStorePassword" data-ng-model="uploadStorePassword" autofocus required>
</div>
<kc-tooltip>Password to access the archive itself</kc-tooltip>
<kc-tooltip>{{:: 'store-password.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Upload Keys </label>
<label class="col-md-2 control-label">{{:: 'upload-keys' | translate}} </label>
<div class="col-md-6">
<div class="controls kc-button-input-file" data-ng-show="!files || files.length == 0">
<a href="#" class="btn btn-default"><span class="kc-icon-upload">Icon: Upload</span>Choose a File...</a>
<a href="#" class="btn btn-default"><span class="kc-icon-upload">Icon: Upload</span>{{:: 'choose-a-file.placeholder' | translate}}</a>
<input id="import-file" type="file" class="transparent" ng-file-select="onFileSelect($files)">
</div>
<span class="kc-uploaded-file" data-ng-show="files.length > 0">
@ -56,14 +56,14 @@
</div>
</div>
<div class="pull-right form-actions" data-ng-show="files.length > 0">
<button type="submit" data-ng-click="clearFileSelect()" class="btn btn-lg btn-default">Cancel</button>
<button type="submit" data-ng-click="uploadFile()" class="btn btn-lg btn-primary">Upload</button>
<button type="submit" data-ng-click="clearFileSelect()" class="btn btn-lg btn-default">{{:: 'cancel' | translate}}</button>
<button type="submit" data-ng-click="uploadFile()" class="btn btn-lg btn-primary">{{:: 'upload' | translate}}</button>
</div>
</fieldset>
<fieldset class="form-group col-sm-10" data-ng-hide="!keyInfo.privateKey">
<legend collapsed><span class="text">Download Keys and Cert</span> <kc-tooltip>Client key pair, cert, and realm certificate will be stuffed into a PKCS12 or Java keystore that you can use in your clients.</kc-tooltip></legend>
<legend collapsed><span class="text">{{:: 'download-keys-and-cert' | translate}}</span> <kc-tooltip>Client key pair, cert, and realm certificate will be stuffed into a PKCS12 or Java keystore that you can use in your clients.</kc-tooltip></legend>
<div class="form-group">
<label class="col-md-2 control-label" for="downloadKeyFormat">Archive Format</label>
<label class="col-md-2 control-label" for="downloadKeyFormat">{{:: 'archive-format' | translate}}</label>
<div class="col-sm-6">
<div>
<select class="form-control" id="downloadKeyFormat"

View file

@ -32,7 +32,7 @@
<label class="col-md-2 control-label" for="fullScopeAllowed">{{:: 'full-scope-allowed' | translate}}</label>
<kc-tooltip>Client template has full scope allowed, which means this client will have the full scope of all roles.</kc-tooltip>
<div class="col-md-1">
<input ng-model="template.fullScopeAllowed" name="fullScopeAllowed" id="fullScopeAllowed" ng-disabled="true" onoffswitch />
<input ng-model="template.fullScopeAllowed" name="fullScopeAllowed" id="fullScopeAllowed" ng-disabled="true" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
<div class="col-md-1">
<i>inherited</i>

View file

@ -1,8 +1,8 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/client-templates">Client Templates</a></li>
<li data-ng-show="create">Add Client Template</li>
<li><a href="#/realms/{{realm.realm}}/client-templates">{{:: 'client-templates' | translate}}</a></li>
<li data-ng-show="create">{{:: 'add-client-template' | translate}}</li>
<li data-ng-hide="create">{{template.name}}</li>
</ol>
@ -11,21 +11,21 @@
<form class="form-horizontal" name="clientForm" novalidate kc-read-only="!access.manageClients">
<fieldset class="border-top">
<div class="form-group">
<label class="col-md-2 control-label" for="name">Name </label>
<label class="col-md-2 control-label" for="name">{{:: 'name' | translate}} </label>
<div class="col-sm-6">
<input class="form-control" type="text" id="name" name="name" data-ng-model="template.name" autofocus>
</div>
<kc-tooltip>Name of the client template. Must be unique in the realm</kc-tooltip>
<kc-tooltip>{{:: 'client-template.name.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="description">Description </label>
<label class="col-md-2 control-label" for="description">{{:: 'description' | translate}} </label>
<div class="col-sm-6">
<input class="form-control" type="text" id="description" name="description" data-ng-model="template.description">
</div>
<kc-tooltip>Description of the client template</kc-tooltip>
<kc-tooltip>{{:: 'client-template.description.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="protocol">Protocol</label>
<label class="col-md-2 control-label" for="protocol">{{:: 'protocol' | translate}}</label>
<div class="col-sm-6">
<div>
<select class="form-control" id="protocol"
@ -35,7 +35,7 @@
</select>
</div>
</div>
<kc-tooltip>Which SSO protocol configuration is being supplied by this client template</kc-tooltip>
<kc-tooltip>{{:: 'client-template.protocol.tooltip' | translate}}</kc-tooltip>
</div>
</fieldset>

View file

@ -1,7 +1,7 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>
<span>Client Templates</span>
<kc-tooltip>Client templates allow you to define common configuration that is shared between multiple clients</kc-tooltip>
<span>{{:: 'client-templates' | translate}}</span>
<kc-tooltip>{{:: 'client-templates.tooltip' | translate}}</kc-tooltip>
</h1>
<table class="table table-striped table-bordered">

View file

@ -1,7 +1,7 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/client-templates">Client Templates</a></li>
<li><a href="#/realms/{{realm.realm}}/client-templates">{{:: 'client-templates' | translate}}</a></li>
<li><a href="#/realms/{{realm.realm}}/client-templates/{{template.id}}">{{template.name}}</a></li>
<li><a href="#/realms/{{realm.realm}}/client-templates/{{template.id}}/mappers">{{:: 'mappers' | translate}}</a></li>
<li class="active">{{:: 'add-builtin-protocol-mappers' | translate}}</li>

View file

@ -1,7 +1,7 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/client-templates">Client Templates</a></li>
<li><a href="#/realms/{{realm.realm}}/client-templates">{{:: 'client-templates' | translate}}</a></li>
<li>{{template.name}}</li>
</ol>

View file

@ -1,7 +1,7 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{model.realm.realm}}/client-templates">Client Templates</a></li>
<li><a href="#/realms/{{model.realm.realm}}/client-templates">{{:: 'client-templates' | translate}}</a></li>
<li><a href="#/realms/{{model.realm.realm}}/client-templates/{{model.template.id}}">{{model.template.name}}</a></li>
<li><a href="#/realms/{{model.realm.realm}}/client-templates/{{model.template.id}}/mappers">{{:: 'mappers' | translate}}</a></li>
<li class="active" data-ng-show="model.create">{{:: 'create-protocol-mappers' | translate}}</li>

View file

@ -1,7 +1,7 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/client-templates">Client Templates</a></li>
<li><a href="#/realms/{{realm.realm}}/client-templates">{{:: 'client-templates' | translate}}</a></li>
<li>{{template.name}}</li>
</ol>

View file

@ -45,7 +45,7 @@
<kc-tooltip>{{:: 'client-protocol.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="protocol">Client Template</label>
<label class="col-md-2 control-label" for="protocol">{{:: 'client-template' | translate}}</label>
<div class="col-sm-6">
<div>
<select class="form-control" id="template"
@ -55,7 +55,7 @@
</select>
</div>
</div>
<kc-tooltip>Client template this client inherits configuration from</kc-tooltip>
<kc-tooltip>{{:: 'client-template.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group" data-ng-hide="protocol == 'saml'">
<label class="col-md-2 control-label" for="rootUrl">{{:: 'root-url' | translate}} <span class="required">*</span></label>
@ -65,7 +65,7 @@
<kc-tooltip>{{:: 'root-url.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group" data-ng-show="protocol == 'saml'">
<label class="col-md-2 control-label" for="masterSamlUrl">Client SAML Endpoint <span class="required">*</span></label>
<label class="col-md-2 control-label" for="masterSamlUrl">{{:: 'client-saml-endpoint' | translate}} <span class="required">*</span></label>
<div class="col-sm-6">
<input class="form-control" type="text" name="masterSamlUrl" id="masterSamlUrl"
data-ng-model="client.adminUrl">

View file

@ -1,12 +1,12 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<div>
<h1 data-ng-show="parentFlow.providerId == 'basic-flow'">Create Authenticator Execution</h1>
<h1 data-ng-show="parentFlow.providerId == 'for-flow'">Create Form Action Execution</h1>
<h1 data-ng-show="parentFlow.providerId == 'basic-flow'">{{:: 'create-authenticator-execution' | translate}}</h1>
<h1 data-ng-show="parentFlow.providerId == 'for-flow'">{{:: 'create-form-action-execution' | translate}}</h1>
</div>
<kc-tabs-authentication></kc-tabs-authentication>
<form class="form-horizontal" name="clientForm" novalidate kc-read-only="!access.manageRealm">
<div class="form-group">
<label class="col-md-2 control-label" for="provider">Provider</label>
<label class="col-md-2 control-label" for="provider">{{:: 'provider' | translate}}</label>
<div class="col-sm-6">
<div>
<select class="form-control" id="provider"
@ -19,8 +19,8 @@
</div>
<div class="form-group">
<div class="col-md-10 col-md-offset-2">
<button kc-save>Save</button>
<button type="button" class="btn btn-default" ng-click="cancel()">Cancel</button>
<button kc-save>{{:: 'save' | translate}}</button>
<button type="button" class="btn btn-default" ng-click="cancel()">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,38 +1,38 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>Create Execution Flow</h1>
<h1>{{:: 'create-execution-flow' | translate}}</h1>
<kc-tabs-authentication></kc-tabs-authentication>
<form class="form-horizontal" name="clientForm" novalidate kc-read-only="!access.manageRealm">
<div class="form-group">
<label class="col-md-2 control-label" for="alias">Alias </label>
<label class="col-md-2 control-label" for="alias">{{:: 'alias' | translate}} </label>
<div class="col-sm-6">
<input class="form-control" type="text" id="alias" name="alias" data-ng-model="flow.alias" autofocus required>
</div>
<kc-tooltip>Specifies display name for the flow.</kc-tooltip>
<kc-tooltip>{{:: 'flow.alias.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="description">Description </label>
<label class="col-md-2 control-label" for="description">{{:: 'description' | translate}} </label>
<div class="col-md-6">
<textarea class="form-control" rows="5" cols="50" id="description" name="description" data-ng-model="flow.description"></textarea>
</div>
</div>
<div class="form-group" data-ng-hide="flow.type == 'client-flow'">
<label class="col-md-2 control-label" for="flowType">Flow Type</label>
<label class="col-md-2 control-label" for="flowType">{{:: 'flow-type' | translate}}</label>
<div class="col-sm-6">
<div>
<select class="form-control" id="flowType"
ng-model="flow.type">
<option value="basic-flow">generic</option>
<option value="form-flow">form</option>
<option value="basic-flow">{{:: 'flow.generic.type' | translate}}</option>
<option value="form-flow">{{:: 'flow.form.type' | translate}}</option>
</select>
</div>
</div>
<kc-tooltip>What kind of form is it</kc-tooltip>
<kc-tooltip>{{:: 'flow-type.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group" data-ng-show="flow.type == 'form-flow'">
<label class="col-md-2 control-label" for="provider">Form Provider</label>
<label class="col-md-2 control-label" for="provider">{{:: 'form-provider' | translate}}</label>
<div class="col-sm-6">
<div>
<select class="form-control" id="provider"
@ -45,8 +45,8 @@
</div>
<div class="form-group">
<div class="col-md-10 col-md-offset-2">
<button kc-save>Save</button>
<button type="button" class="btn btn-default" ng-click="cancel()">Cancel</button>
<button kc-save>{{:: 'save' | translate}}</button>
<button type="button" class="btn btn-default" ng-click="cancel()">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,40 +1,40 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>Create Top Level Flow</h1>
<h1>{{:: 'create-top-level-form' | translate}}</h1>
<kc-tabs-authentication></kc-tabs-authentication>
<form class="form-horizontal" name="clientForm" novalidate kc-read-only="!access.manageRealm">
<div class="form-group">
<label class="col-md-2 control-label" for="alias">Alias </label>
<label class="col-md-2 control-label" for="alias">{{:: 'alias' | translate}} </label>
<div class="col-sm-6">
<input class="form-control" type="text" id="alias" name="alias" data-ng-model="flow.alias" autofocus required>
</div>
<kc-tooltip>Specifies display name for the flow.</kc-tooltip>
<kc-tooltip>{{:: 'flow.alias.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="description">Description </label>
<label class="col-md-2 control-label" for="description">{{:: 'description' | translate}} </label>
<div class="col-md-6">
<textarea class="form-control" rows="5" cols="50" id="description" name="description" data-ng-model="flow.description"></textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="flowType">Top Level Flow Type</label>
<label class="col-md-2 control-label" for="flowType">{{:: 'top-level-flow-type' | translate}}</label>
<div class="col-sm-6">
<div>
<select class="form-control" id="flowType"
ng-model="flow.providerId">
<option value="basic-flow">generic</option>
<option value="client-flow">client</option>
<option value="basic-flow">{{:: 'flow.generic' | translate}}</option>
<option value="client-flow">{{:: 'flow.client' | translate}}</option>
</select>
</div>
</div>
<kc-tooltip>What kind of top level flow is it? Type 'client' is used for authentication of clients (applications) when generic is for users and everything else</kc-tooltip>
<kc-tooltip>{{:: 'top-level-flow-type.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<div class="col-md-10 col-md-offset-2">
<button kc-save>Save</button>
<button type="button" class="btn btn-default" ng-click="cancel()">Cancel</button>
<button kc-save>{{:: 'save' | translate}}</button>
<button type="button" class="btn btn-default" ng-click="cancel()">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,11 +1,11 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<div>
<h1>Create Group</h1>
<h1>{{:: 'create-group' | translate}}</h1>
</div>
<form class="form-horizontal" name="clientForm" novalidate>
<fieldset class="border-top">
<div class="form-group">
<label class="col-md-2 control-label"for="name">Name <span class="required">*</span></label>
<label class="col-md-2 control-label"for="name">{{:: 'name' | translate}} <span class="required">*</span></label>
<div class="col-md-6">
<input class="form-control" type="text" id="name" name="name" data-ng-model="group.name" autofocus
required >
@ -15,8 +15,8 @@
<div class="form-group">
<div class="col-md-10 col-md-offset-2">
<button kc-save>Save</button>
<button kc-cancel data-ng-click="cancel()">Cancel</button>
<button kc-save>{{:: 'save' | translate}}</button>
<button kc-cancel data-ng-click="cancel()">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -13,11 +13,11 @@
<tr>
<th class="kc-table-actions" colspan="5">
<div class="form-inline">
<label class="control-label">Default Groups</label>
<kc-tooltip>Newly created or registered users will automatically be added to these groups</kc-tooltip>
<label class="control-label">{{:: 'default-groups' | translate}}</label>
<kc-tooltip>{{:: 'default-groups.tooltip' | translate}}</kc-tooltip>
<div class="pull-right" data-ng-show="access.manageRealm">
<button id="removeDefaultGroup" class="btn btn-default" ng-click="removeDefaultGroup()">Remove</button>
<button id="removeDefaultGroup" class="btn btn-default" ng-click="removeDefaultGroup()">{{:: 'remove' | translate}}</button>
</div>
</div>
</th>
@ -29,7 +29,7 @@
<select id="defaultGroups" class="form-control" size=5
ng-model="selectedGroup"
ng-options="r.path for r in defaultGroups">
<option style="display:none" value="">select a type</option>
<option style="display:none" value="">{{:: 'select-a-type.placeholder' | translate}}</option>
</select>
@ -45,11 +45,11 @@
<th class="kc-table-actions" colspan="5">
<div class="form-inline">
<label class="control-label">Available Groups</label>
<kc-tooltip>Select a group you want to add as a default.</kc-tooltip>
<label class="control-label">{{:: 'available-groups' | translate}}</label>
<kc-tooltip>{{:: 'available-groups.tooltip' | translate}}</kc-tooltip>
<div class="pull-right" data-ng-show="access.manageRealm">
<button id="addDefaultGroup" class="btn btn-default" ng-click="addDefaultGroup()">Add</button>
<button id="addDefaultGroup" class="btn btn-default" ng-click="addDefaultGroup()">{{:: 'add' | translate}}</button>
</div>
</div>
</th>

View file

@ -1,34 +1,34 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/user-federation">User Federation</a></li>
<li><a href="#/realms/{{realm.realm}}/user-federation">{{:: 'user-federation' | translate}}</a></li>
<li data-ng-hide="create">{{instance.displayName|capitalize}}</li>
<li data-ng-show="create">Add User Federation Provider</li>
<li data-ng-show="create">{{:: 'add-user-federation-provider' | translate}}</li>
</ol>
<kc-tabs-user-federation></kc-tabs-user-federation>
<form class="form-horizontal" name="realmForm" novalidate kc-read-only="!access.manageRealm">
<fieldset>
<legend><span class="text">Required Settings</span></legend>
<legend><span class="text">{{:: 'required-settings' | translate}}</span></legend>
<div class="form-group clearfix" data-ng-show="!create">
<label class="col-md-2 control-label" for="providerId">Provider ID </label>
<label class="col-md-2 control-label" for="providerId">{{:: 'provider-id' | translate}} </label>
<div class="col-md-6">
<input class="form-control" id="providerId" type="text" ng-model="instance.id" readonly>
</div>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="consoleDisplayName">Console display name </label>
<label class="col-md-2 control-label" for="consoleDisplayName">{{:: 'console-display-name' | translate}} </label>
<div class="col-md-6">
<input class="form-control" id="consoleDisplayName" type="text" ng-model="instance.displayName" placeholder="defaults to id">
<input class="form-control" id="consoleDisplayName" type="text" ng-model="instance.displayName" placeholder="{{:: 'defaults-to-id' | translate}}">
</div>
<kc-tooltip>Display name of provider when linked in admin console.</kc-tooltip>
<kc-tooltip>{{:: 'console-display-name.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="priority">Priority </label>
<label class="col-md-2 control-label" for="priority">{{:: 'priority' | translate}} </label>
<div class="col-md-6">
<input class="form-control" id="priority" type="text" ng-model="instance.priority">
</div>
<kc-tooltip>Priority of provider when doing a user lookup. Lowest first.</kc-tooltip>
<kc-tooltip>{{:: 'priority.tooltip' | translate}}</kc-tooltip>
</div>
<div data-ng-repeat="option in providerFactory.options" class="form-group">
<label class="col-md-2 control-label">{{option|capitalize}} </label>
@ -43,50 +43,50 @@
</fieldset>
<fieldset>
<legend><span class="text">Sync settings</span></legend>
<legend><span class="text">{{:: 'sync-settings' | translate}}</span></legend>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="fullSyncEnabled">Periodic full sync</label>
<label class="col-md-2 control-label" for="fullSyncEnabled">{{:: 'periodic-full-sync' | translate}}</label>
<div class="col-md-6">
<input ng-model="fullSyncEnabled" name="fullSyncEnabled" id="fullSyncEnabled" onoffswitch />
<input ng-model="fullSyncEnabled" name="fullSyncEnabled" id="fullSyncEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Does periodic full synchronization of provider users to Keycloak should be enabled or not</kc-tooltip>
<kc-tooltip>{{:: 'periodic-full-sync.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix" data-ng-show="fullSyncEnabled">
<label class="col-md-2 control-label" for="fullSyncPeriod">Full sync period</label>
<label class="col-md-2 control-label" for="fullSyncPeriod">{{:: 'full-sync-period' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="number" ng-model="instance.fullSyncPeriod" id="fullSyncPeriod" />
</div>
<kc-tooltip>Period for full synchronization in seconds</kc-tooltip>
<kc-tooltip>{{:: 'full-sync-period.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="changedSyncEnabled">Periodic changed users sync</label>
<label class="col-md-2 control-label" for="changedSyncEnabled">{{:: 'periodic-changed-users-sync' | translate}}</label>
<div class="col-md-6">
<input ng-model="changedSyncEnabled" name="changedSyncEnabled" id="changedSyncEnabled" onoffswitch />
<input ng-model="changedSyncEnabled" name="changedSyncEnabled" id="changedSyncEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Does periodic synchronization of changed or newly created provider users to Keycloak should be enabled or not</kc-tooltip>
<kc-tooltip>{{:: 'periodic-changed-users-sync.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix" data-ng-show="changedSyncEnabled">
<label class="col-md-2 control-label" for="changedSyncPeriod">Changed users sync period</label>
<label class="col-md-2 control-label" for="changedSyncPeriod">{{:: 'changed-users-sync-period' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="number" ng-model="instance.changedSyncPeriod" id="changedSyncPeriod" />
</div>
<kc-tooltip>Period for synchronization of changed or newly created provider users in seconds</kc-tooltip>
<kc-tooltip>{{:: 'changed-users-sync-period.tooltip' | translate}}</kc-tooltip>
</div>
</fieldset>
<div class="form-group">
<div class="col-md-10 col-md-offset-2" data-ng-show="create && access.manageUsers">
<button kc-save>Save</button>
<button kc-cancel data-ng-click="cancel()">Cancel</button>
<button kc-save>{{:: 'save' | translate}}</button>
<button kc-cancel data-ng-click="cancel()">{{:: 'cancel' | translate}}</button>
</div>
</div>
<div class="form-group">
<div class="col-md-10 col-md-offset-2" data-ng-show="!create && access.manageUsers">
<button kc-save data-ng-disabled="!changed">Save</button>
<button kc-reset data-ng-disabled="!changed">Cancel</button>
<button class="btn btn-primary" data-ng-click="triggerChangedUsersSync()" data-ng-hide="changed">Synchronize changed users</button>
<button class="btn btn-primary" data-ng-click="triggerFullSync()" data-ng-hide="changed">Synchronize all users</button>
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
<button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
<button class="btn btn-primary" data-ng-click="triggerChangedUsersSync()" data-ng-hide="changed">{{:: 'synchronize-changed-users' | translate}}</button>
<button class="btn btn-primary" data-ng-click="triggerFullSync()" data-ng-hide="changed">{{:: 'synchronize-all-users' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,74 +1,74 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/user-federation">User Federation</a></li>
<li><a href="#/realms/{{realm.realm}}/user-federation">{{:: 'user-federation' | translate}}</a></li>
<li data-ng-hide="create">{{instance.displayName|capitalize}}</li>
<li data-ng-show="create">Add User Federation Provider</li>
<li data-ng-show="create">{{:: 'add-user-federation-provider' | translate}}</li>
</ol>
<kc-tabs-user-federation></kc-tabs-user-federation>
<form class="form-horizontal" name="realmForm" novalidate kc-read-only="!access.manageRealm">
<fieldset>
<legend><span class="text">Required Settings</span></legend>
<legend><span class="text">{{:: 'required-settings' | translate}}</span></legend>
<div class="form-group clearfix" data-ng-show="!create">
<label class="col-md-2 control-label" for="providerId">Provider ID </label>
<label class="col-md-2 control-label" for="providerId">{{:: 'provider-id' | translate}} </label>
<div class="col-md-6">
<input class="form-control" id="providerId" type="text" ng-model="instance.id" readonly>
</div>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="consoleDisplayName">Console display name </label>
<label class="col-md-2 control-label" for="consoleDisplayName">{{:: 'console-display-name' | translate}} </label>
<div class="col-md-6">
<input class="form-control" id="consoleDisplayName" type="text" ng-model="instance.displayName" placeholder="defaults to id">
<input class="form-control" id="consoleDisplayName" type="text" ng-model="instance.displayName" placeholder="{{:: 'defaults-to-id' | translate}}">
</div>
<kc-tooltip>Display name of provider when linked in admin console.</kc-tooltip>
<kc-tooltip>{{:: 'console-display-name.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="priority">Priority </label>
<label class="col-md-2 control-label" for="priority">{{:: 'priority' | translate}} </label>
<div class="col-md-6">
<input class="form-control" id="priority" type="text" ng-model="instance.priority">
</div>
<kc-tooltip>Priority of provider when doing a user lookup. Lowest first.</kc-tooltip>
<kc-tooltip>{{:: 'priority.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="kerberosRealm"><span class="required">*</span> Kerberos Realm</label>
<label class="col-md-2 control-label" for="kerberosRealm"><span class="required">*</span> {{:: 'kerberos-realm' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="kerberosRealm" type="text" ng-model="instance.config.kerberosRealm" required>
</div>
<kc-tooltip>Name of kerberos realm. For example FOO.ORG</kc-tooltip>
<kc-tooltip>{{:: 'kerberos-realm.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="serverPrincipal"><span class="required">*</span> Server principal</label>
<label class="col-md-2 control-label" for="serverPrincipal"><span class="required">*</span> {{:: 'server-principal' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="serverPrincipal" type="text" ng-model="instance.config.serverPrincipal" required>
</div>
<kc-tooltip>Full name of server principal for HTTP service including server and domain name. For example HTTP/host.foo.org@FOO.ORG</kc-tooltip>
<kc-tooltip>{{:: 'server-principal.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="keyTab"><span class="required">*</span> KeyTab</label>
<label class="col-md-2 control-label" for="keyTab"><span class="required">*</span> {{:: 'keytab' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="keyTab" type="text" ng-model="instance.config.keyTab" required>
</div>
<kc-tooltip>Location of Kerberos KeyTab file containing the credentials of server principal. For example /etc/krb5.keytab</kc-tooltip>
<kc-tooltip>{{:: 'keytab.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="debug">Debug </label>
<label class="col-md-2 control-label" for="debug">{{:: 'debug' | translate}} </label>
<div class="col-md-6">
<input ng-model="instance.config.debug" id="debug" onoffswitch />
<input ng-model="instance.config.debug" id="debug" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Enable/disable debug logging to standard output for Krb5LoginModule.</kc-tooltip>
<kc-tooltip>{{:: 'debug.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="allowPasswordAuthentication">Allow Password Authentication </label>
<label class="col-md-2 control-label" for="allowPasswordAuthentication">{{:: 'allow-password-authentication' | translate}} </label>
<div class="col-md-6">
<input ng-model="instance.config.allowPasswordAuthentication" id="allowPasswordAuthentication" onoffswitch />
<input ng-model="instance.config.allowPasswordAuthentication" id="allowPasswordAuthentication" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Enable/disable possibility of username/password authentication against Kerberos database</kc-tooltip>
<kc-tooltip>{{:: 'allow-password-authentication.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group" data-ng-show="instance.config.allowPasswordAuthentication">
<label class="col-md-2 control-label" for="editMode">Edit mode</label>
<label class="col-md-2 control-label" for="editMode">{{:: 'edit-mode' | translate}}</label>
<div class="col-md-6">
<div>
<select class="form-control" id="editMode"
@ -78,29 +78,29 @@
</select>
</div>
</div>
<kc-tooltip>READ_ONLY means that password updates are not allowed and user always authenticates with Kerberos password. UNSYNCED means user can change his password in Keycloak database and this one will be used instead of Kerberos password then</kc-tooltip>
<kc-tooltip>{{:: 'edit-mode.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="updateProfileFirstLogin">Update Profile First Login </label>
<label class="col-md-2 control-label" for="updateProfileFirstLogin">{{:: 'update-profile-first-login' | translate}} </label>
<div class="col-md-6">
<input ng-model="instance.config.updateProfileFirstLogin" id="updateProfileFirstLogin" onoffswitch />
<input ng-model="instance.config.updateProfileFirstLogin" id="updateProfileFirstLogin" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Update profile on first login</kc-tooltip>
<kc-tooltip>{{:: 'update-profile-first-login.tooltip' | translate}}</kc-tooltip>
</div>
</fieldset>
<div class="form-group">
<div class="col-md-10 col-md-offset-2" data-ng-show="create && access.manageUsers">
<button kc-save>Save</button>
<button kc-cancel data-ng-click="cancel()">Cancel</button>
<button kc-save>{{:: 'save' | translate}}</button>
<button kc-cancel data-ng-click="cancel()">{{:: 'cancel' | translate}}</button>
</div>
</div>
<div class="form-group">
<div class="col-md-10 col-md-offset-2" data-ng-show="!create && access.manageUsers">
<button kc-save data-ng-disabled="!changed">Save</button>
<button kc-reset data-ng-disabled="!changed">Cancel</button>
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
<button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,8 +1,8 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/user-federation">User Federation</a></li>
<li><a href="#/realms/{{realm.realm}}/user-federation">{{:: 'user-federation' | translate}}</a></li>
<li data-ng-hide="create">{{instance.displayName|capitalize}}</li>
<li data-ng-show="create">Add User Federation Provider</li>
<li data-ng-show="create">{{:: 'add-user-federation-provider' | translate}}</li>
</ol>
<kc-tabs-user-federation></kc-tabs-user-federation>
@ -10,29 +10,29 @@
<form class="form-horizontal" name="realmForm" novalidate kc-read-only="!access.manageRealm">
<fieldset>
<legend><span class="text">Required Settings</span></legend>
<legend><span class="text">{{:: 'required-settings' | translate}}</span></legend>
<div class="form-group clearfix" data-ng-show="!create">
<label class="col-md-2 control-label" for="providerId">Provider ID </label>
<label class="col-md-2 control-label" for="providerId">{{:: 'provider-id' | translate}} </label>
<div class="col-md-6">
<input class="form-control" id="providerId" type="text" ng-model="instance.id" readonly>
</div>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="consoleDisplayName">Console display name </label>
<label class="col-md-2 control-label" for="consoleDisplayName">{{:: 'console-display-name' | translate}} </label>
<div class="col-md-6">
<input class="form-control" id="consoleDisplayName" type="text" ng-model="instance.displayName" placeholder="defaults to id">
<input class="form-control" id="consoleDisplayName" type="text" ng-model="instance.displayName" placeholder="{{:: 'defaults-to-id' | translate}}">
</div>
<kc-tooltip>Display name of provider when linked in admin console.</kc-tooltip>
<kc-tooltip>{{:: 'console-display-name.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="priority">Priority </label>
<label class="col-md-2 control-label" for="priority">{{:: 'priority' | translate}} </label>
<div class="col-md-6">
<input class="form-control" id="priority" type="text" ng-model="instance.priority">
</div>
<kc-tooltip>Priority of provider when doing a user lookup. Lowest first.</kc-tooltip>
<kc-tooltip>{{:: 'priority.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="editMode">Edit mode</label>
<label class="col-md-2 control-label" for="editMode">{{:: 'edit-mode' | translate}}</label>
<div class="col-md-6">
<div>
<select class="form-control" id="editMode"
@ -43,17 +43,17 @@
</select>
</div>
</div>
<kc-tooltip>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.</kc-tooltip>
<kc-tooltip>{{:: 'ldap.edit-mode.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix block">
<label class="col-md-2 control-label" for="syncRegistrations">Sync Registrations</label>
<label class="col-md-2 control-label" for="syncRegistrations">{{:: 'sync-registrations' | translate}}</label>
<div class="col-md-6">
<input ng-model="instance.config.syncRegistrations" name="syncRegistrations" id="syncRegistrations" onoffswitch />
<input ng-model="instance.config.syncRegistrations" name="syncRegistrations" id="syncRegistrations" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Should newly created users be created within LDAP store? Priority effects which provider is chose to sync the new user.</kc-tooltip>
<kc-tooltip>{{:: 'ldap.sync-registrations.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="vendor"><span class="required">*</span> Vendor</label>
<label class="col-md-2 control-label" for="vendor"><span class="required">*</span> {{:: 'vendor' | translate}}</label>
<div class="col-md-6">
<div data-ng-show="create">
<select class="form-control" id="vendor"
@ -66,64 +66,55 @@
<input class="form-control" id="vendor-ro" type="text" ng-model="vendorName" readonly>
</div>
</div>
<kc-tooltip>LDAP vendor (provider)</kc-tooltip>
<kc-tooltip>{{:: 'ldap.vendor.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="usernameLDAPAttribute"><span class="required">*</span> Username LDAP attribute</label>
<label class="col-md-2 control-label" for="usernameLDAPAttribute"><span class="required">*</span> {{:: 'username-ldap-attribute' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="usernameLDAPAttribute" type="text" ng-model="instance.config.usernameLDAPAttribute" placeholder="LDAP attribute name for username" required>
<input class="form-control" id="usernameLDAPAttribute" type="text" ng-model="instance.config.usernameLDAPAttribute" placeholder="{{:: 'ldap-attribute-name-for-username' | translate}}" required>
</div>
<kc-tooltip>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.
</kc-tooltip>
<kc-tooltip>{{:: 'username-ldap-attribute.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="rdnLDAPAttribute"><span class="required">*</span> RDN LDAP attribute</label>
<label class="col-md-2 control-label" for="rdnLDAPAttribute"><span class="required">*</span> {{:: 'rdn-ldap-attribute' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="rdnLDAPAttribute" type="text" ng-model="instance.config.rdnLDAPAttribute" placeholder="LDAP attribute name for user RDN" required>
<input class="form-control" id="rdnLDAPAttribute" type="text" ng-model="instance.config.rdnLDAPAttribute" placeholder="{{:: 'ldap-attribute-name-for-user-rdn' | translate}}" required>
</div>
<kc-tooltip>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's not required.
For example for Active directory it's common to use 'cn' as RDN attribute when username attribute might be 'sAMAccountName' .
</kc-tooltip>
<kc-tooltip>{{:: 'rdn-ldap-attribute.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="uuidLDAPAttribute"><span class="required">*</span> UUID LDAP attribute</label>
<label class="col-md-2 control-label" for="uuidLDAPAttribute"><span class="required">*</span> {{:: 'uuid-ldap-attribute' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="uuidLDAPAttribute" type="text" ng-model="instance.config.uuidLDAPAttribute" placeholder="LDAP attribute name for UUID" required>
<input class="form-control" id="uuidLDAPAttribute" type="text" ng-model="instance.config.uuidLDAPAttribute" placeholder="{{:: 'ldap-attribute-name-for-uuid' | translate}}" required>
</div>
<kc-tooltip>Name of LDAP attribute, which is used as unique object identifier (UUID) for objects in LDAP. For many LDAP server vendors it's 'entryUUID' however some are different. For example for Active directory it should be 'objectGUID' .
If your LDAP server really doesn't support the notion of UUID, you can use any other attribute, which is supposed to be unique among LDAP users in tree. For example 'uid' or 'entryDN' .
</kc-tooltip>
<kc-tooltip>{{:: 'uuid-ldap-attribute.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="userObjectClasses"><span class="required">*</span> User Object Classes</label>
<label class="col-md-2 control-label" for="userObjectClasses"><span class="required">*</span> {{:: 'user-object-classes' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="userObjectClasses" type="text" ng-model="instance.config.userObjectClasses" placeholder="LDAP User Object Classes (div. by comma)" required>
<input class="form-control" id="userObjectClasses" type="text" ng-model="instance.config.userObjectClasses" placeholder="{{:: 'ldap-user-object-classes.placeholder' | translate}}" required>
</div>
<kc-tooltip>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. </kc-tooltip>
<kc-tooltip>{{:: 'ldap.user-object-classes.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="ldapConnectionUrl"><span class="required">*</span> Connection URL</label>
<label class="col-md-2 control-label" for="ldapConnectionUrl"><span class="required">*</span> {{:: 'connection-url' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="ldapConnectionUrl" type="text" ng-model="instance.config.connectionUrl" placeholder="LDAP connection URL" required>
<input class="form-control" id="ldapConnectionUrl" type="text" ng-model="instance.config.connectionUrl" placeholder="{{:: 'ldap-connection-url' | translate}}" required>
</div>
<kc-tooltip>Connection URL to your LDAP server</kc-tooltip>
<kc-tooltip>{{:: 'ldap.connection-url.tooltip' | translate}}</kc-tooltip>
<div class="col-sm-4" data-ng-show="access.manageRealm">
<a class="btn btn-primary" data-ng-click="testConnection()">Test connection</a>
<a class="btn btn-primary" data-ng-click="testConnection()">{{:: 'test-connection' | translate}}</a>
</div>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="ldapUsersDn"><span class="required">*</span> Users DN</label>
<label class="col-md-2 control-label" for="ldapUsersDn"><span class="required">*</span> {{:: 'users-dn' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="ldapUsersDn" type="text" ng-model="instance.config.usersDn" placeholder="LDAP Users DN" required>
<input class="form-control" id="ldapUsersDn" type="text" ng-model="instance.config.usersDn" placeholder="{{:: 'ldap-users-dn' | translate}}" required>
</div>
<kc-tooltip>Full DN of LDAP tree where your users are. This DN is 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'
</kc-tooltip>
<kc-tooltip>{{:: 'ldap.users-dn.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="authType"><span class="required">*</span> Authentication Type</label>
<label class="col-md-2 control-label" for="authType"><span class="required">*</span> {{:: 'authentication-type' | translate}}</label>
<div class="col-md-6">
<div>
<select class="form-control" id="authType"
@ -133,34 +124,34 @@
</select>
</div>
</div>
<kc-tooltip>LDAP Authentication type. Right now just 'none' (anonymous LDAP authentication) or 'simple' (Bind credential + Bind password authentication) mechanisms are available</kc-tooltip>
<kc-tooltip>{{:: 'ldap.authentication-type.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix" data-ng-hide="instance.config.authType == 'none'">
<label class="col-md-2 control-label" for="ldapBindDn"><span class="required">*</span> Bind DN</label>
<label class="col-md-2 control-label" for="ldapBindDn"><span class="required">*</span> {{:: 'bind-dn' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="ldapBindDn" type="text" ng-model="instance.config.bindDn" placeholder="LDAP Bind DN" data-ng-required="instance.config.authType != 'none'">
<input class="form-control" id="ldapBindDn" type="text" ng-model="instance.config.bindDn" placeholder="{{:: 'ldap-bind-dn' | translate}}" data-ng-required="instance.config.authType != 'none'">
</div>
<kc-tooltip>DN of LDAP admin, which will be used by Keycloak to access LDAP server</kc-tooltip>
<kc-tooltip>{{:: 'ldap.bind-dn.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix" data-ng-hide="instance.config.authType == 'none'">
<label class="col-md-2 control-label" for="ldapBindCredential"><span class="required">*</span> Bind Credential</label>
<label class="col-md-2 control-label" for="ldapBindCredential"><span class="required">*</span> {{:: 'bind-credential' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="ldapBindCredential" type="password" ng-model="instance.config.bindCredential" placeholder="LDAP Bind Credentials" data-ng-required="instance.config.authType != 'none'">
<input class="form-control" id="ldapBindCredential" type="password" ng-model="instance.config.bindCredential" placeholder="{{:: 'ldap-bind-credentials' | translate}}" data-ng-required="instance.config.authType != 'none'">
</div>
<kc-tooltip>Password of LDAP admin</kc-tooltip>
<kc-tooltip>{{:: 'ldap.bind-credential.tooltip' | translate}}</kc-tooltip>
<div class="col-sm-4" data-ng-show="access.manageRealm">
<a class="btn btn-primary" data-ng-click="testAuthentication()">Test authentication</a>
<a class="btn btn-primary" data-ng-click="testAuthentication()">{{:: 'test-authentication' | translate}}</a>
</div>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="customUserSearchFilter">Custom User LDAP Filter</label>
<label class="col-md-2 control-label" for="customUserSearchFilter">{{:: 'custom-user-ldap-filter' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="customUserSearchFilter" type="text" ng-model="instance.config.customUserSearchFilter" placeholder="LDAP Filter">
<input class="form-control" id="customUserSearchFilter" type="text" ng-model="instance.config.customUserSearchFilter" placeholder="{{:: 'ldap-filter' | translate}}">
</div>
<kc-tooltip>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 ')'</kc-tooltip>
<kc-tooltip>{{:: 'ldap.custom-user-ldap-filter.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="searchScope">Search scope</label>
<label class="col-md-2 control-label" for="searchScope">{{:: 'search-scope' | translate}}</label>
<div class="col-md-6">
<div>
<select class="form-control" id="searchScope"
@ -170,122 +161,122 @@
</select>
</div>
</div>
<kc-tooltip>For one level, we search for users just in DNs specified by User DNs. For subtree, we search in whole of their subtree. See LDAP documentation for more details</kc-tooltip>
<kc-tooltip>{{:: 'ldap.search-scope.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="connectionPooling">Connection pooling</label>
<label class="col-md-2 control-label" for="connectionPooling">{{:: 'connection-pooling' | translate}}</label>
<div class="col-md-6">
<input ng-model="instance.config.connectionPooling" name="connectionPooling" id="connectionPooling" onoffswitch />
<input ng-model="instance.config.connectionPooling" name="connectionPooling" id="connectionPooling" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Does Keycloak should use connection pooling for accessing LDAP server</kc-tooltip>
<kc-tooltip>{{:: 'ldap.connection-pooling.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="pagination">Pagination</label>
<label class="col-md-2 control-label" for="pagination">{{:: 'pagination' | translate}}</label>
<div class="col-md-6">
<input ng-model="instance.config.pagination" name="pagination" id="pagination" onoffswitch />
<input ng-model="instance.config.pagination" name="pagination" id="pagination" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Does the LDAP server support pagination.</kc-tooltip>
<kc-tooltip>{{:: 'ldap.pagination.tooltip' | translate}}</kc-tooltip>
</div>
</fieldset>
<fieldset>
<legend><span class="text">Kerberos integration</span></legend>
<legend><span class="text">{{:: 'kerberos-integration' | translate}}</span></legend>
<div class="form-group">
<label class="col-md-2 control-label" for="allowKerberosAuthentication">Allow Kerberos authentication </label>
<label class="col-md-2 control-label" for="allowKerberosAuthentication">{{:: 'allow-kerberos-authentication' | translate}} </label>
<div class="col-md-6">
<input ng-model="instance.config.allowKerberosAuthentication" id="allowKerberosAuthentication" onoffswitch />
<input ng-model="instance.config.allowKerberosAuthentication" id="allowKerberosAuthentication" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Enable/disable HTTP authentication of users with SPNEGO/Kerberos tokens. The data about authenticated users will be provisioned from this LDAP server</kc-tooltip>
<kc-tooltip>{{:: 'ldap.allow-kerberos-authentication.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix" data-ng-show="instance.config.allowKerberosAuthentication">
<label class="col-md-2 control-label" for="kerberosRealm"><span class="required">*</span> Kerberos Realm</label>
<label class="col-md-2 control-label" for="kerberosRealm"><span class="required">*</span> {{:: 'kerberos-realm' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="kerberosRealm" type="text" ng-model="instance.config.kerberosRealm" ng-required="instance.config.allowKerberosAuthentication">
</div>
<kc-tooltip>Name of kerberos realm. For example FOO.ORG</kc-tooltip>
<kc-tooltip>{{:: 'kerberos-realm.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix" data-ng-show="instance.config.allowKerberosAuthentication">
<label class="col-md-2 control-label" for="serverPrincipal"><span class="required">*</span> Server principal</label>
<label class="col-md-2 control-label" for="serverPrincipal"><span class="required">*</span> {{:: 'server-principal' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="serverPrincipal" type="text" ng-model="instance.config.serverPrincipal" ng-required="instance.config.allowKerberosAuthentication">
</div>
<kc-tooltip>Full name of server principal for HTTP service including server and domain name. For example HTTP/host.foo.org@FOO.ORG</kc-tooltip>
<kc-tooltip>{{:: 'server-principal.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix" data-ng-show="instance.config.allowKerberosAuthentication">
<label class="col-md-2 control-label" for="keyTab"><span class="required">*</span> KeyTab</label>
<label class="col-md-2 control-label" for="keyTab"><span class="required">*</span> {{:: 'keytab' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="keyTab" type="text" ng-model="instance.config.keyTab" ng-required="instance.config.allowKerberosAuthentication">
</div>
<kc-tooltip>Location of Kerberos KeyTab file containing the credentials of server principal. For example /etc/krb5.keytab</kc-tooltip>
<kc-tooltip>{{:: 'keytab.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group" data-ng-show="instance.config.allowKerberosAuthentication">
<label class="col-md-2 control-label" for="debug">Debug </label>
<label class="col-md-2 control-label" for="debug">{{:: 'debug' | translate}} </label>
<div class="col-md-6">
<input ng-model="instance.config.debug" id="debug" onoffswitch />
<input ng-model="instance.config.debug" id="debug" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Enable/disable debug logging to standard output for Krb5LoginModule.</kc-tooltip>
<kc-tooltip>{{:: 'debug.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group" data-ng-show="instance.config.allowKerberosAuthentication">
<label class="col-md-2 control-label" for="debug">Use Kerberos For Password Authentication </label>
<label class="col-md-2 control-label" for="debug">{{:: 'use-kerberos-for-password-authentication' | translate}} </label>
<div class="col-md-6">
<input ng-model="instance.config.useKerberosForPasswordAuthentication" id="useKerberosForPasswordAuthentication" onoffswitch />
<input ng-model="instance.config.useKerberosForPasswordAuthentication" id="useKerberosForPasswordAuthentication" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Use Kerberos login module for authenticate username/password against Kerberos server instead of authenticating against LDAP server with Directory Service API</kc-tooltip>
<kc-tooltip>{{:: 'ldap.use-kerberos-for-password-authentication.tooltip' | translate}}</kc-tooltip>
</div>
</fieldset>
<fieldset>
<legend><span class="text">Sync settings</span></legend>
<legend><span class="text">{{:: 'sync-settings' | translate}}</span></legend>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="batchSizeForSync">Batch size</label>
<label class="col-md-2 control-label" for="batchSizeForSync">{{:: 'batch-size' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="text" ng-model="instance.config.batchSizeForSync" id="batchSizeForSync" />
</div>
<kc-tooltip>Count of LDAP users to be imported from LDAP to Keycloak within single transaction.</kc-tooltip>
<kc-tooltip>{{:: 'ldap.batch-size.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="fullSyncEnabled">Periodic full sync</label>
<label class="col-md-2 control-label" for="fullSyncEnabled">{{:: 'periodic-full-sync' | translate}}</label>
<div class="col-md-6">
<input ng-model="fullSyncEnabled" name="fullSyncEnabled" id="fullSyncEnabled" onoffswitch />
<input ng-model="fullSyncEnabled" name="fullSyncEnabled" id="fullSyncEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Does periodic full synchronization of LDAP users to Keycloak should be enabled or not</kc-tooltip>
<kc-tooltip>{{:: 'ldap.periodic-full-sync.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix" data-ng-show="fullSyncEnabled">
<label class="col-md-2 control-label" for="fullSyncPeriod">Full sync period</label>
<label class="col-md-2 control-label" for="fullSyncPeriod">{{:: 'full-sync-period' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="number" ng-model="instance.fullSyncPeriod" id="fullSyncPeriod" />
</div>
<kc-tooltip>Period for full synchronization in seconds</kc-tooltip>
<kc-tooltip>{{:: 'full-sync-period.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="changedSyncEnabled">Periodic changed users sync</label>
<label class="col-md-2 control-label" for="changedSyncEnabled">{{:: 'periodic-changed-users-sync' | translate}}</label>
<div class="col-md-6">
<input ng-model="changedSyncEnabled" name="changedSyncEnabled" id="changedSyncEnabled" onoffswitch />
<input ng-model="changedSyncEnabled" name="changedSyncEnabled" id="changedSyncEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>Does periodic synchronization of changed or newly created LDAP users to Keycloak should be enabled or not</kc-tooltip>
<kc-tooltip>{{:: 'ldap.periodic-changed-users-sync.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix" data-ng-show="changedSyncEnabled">
<label class="col-md-2 control-label" for="changedSyncPeriod">Changed users sync period</label>
<label class="col-md-2 control-label" for="changedSyncPeriod">{{:: 'changed-users-sync-period' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="number" ng-model="instance.changedSyncPeriod" id="changedSyncPeriod" />
</div>
<kc-tooltip>Period for synchronization of changed or newly created LDAP users in seconds</kc-tooltip>
<kc-tooltip>{{:: 'ldap.changed-users-sync-period.tooltip' | translate}}</kc-tooltip>
</div>
</fieldset>
<div class="form-group">
<div class="col-md-10 col-md-offset-2" data-ng-show="create && access.manageUsers">
<button kc-save>Save</button>
<button kc-cancel data-ng-click="cancel()">Cancel</button>
<button kc-save>{{:: 'save' | translate}}</button>
<button kc-cancel data-ng-click="cancel()">{{:: 'cancel' | translate}}</button>
</div>
</div>
<div class="form-group">
<div class="col-md-10 col-md-offset-2" data-ng-show="!create && access.manageUsers">
<button kc-save data-ng-disabled="!changed">Save</button>
<button kc-reset data-ng-disabled="!changed">Cancel</button>
<button class="btn btn-primary" data-ng-click="triggerChangedUsersSync()" data-ng-hide="changed">Synchronize changed users</button>
<button class="btn btn-primary" data-ng-click="triggerFullSync()" data-ng-hide="changed">Synchronize all users</button>
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
<button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
<button class="btn btn-primary" data-ng-click="triggerChangedUsersSync()" data-ng-hide="changed">{{:: 'synchronize-changed-users' | translate}}</button>
<button class="btn btn-primary" data-ng-click="triggerFullSync()" data-ng-hide="changed">{{:: 'synchronize-all-users' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,33 +1,33 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/user-federation">User Federation</a></li>
<li><a href="#/realms/{{realm.realm}}/user-federation">{{:: 'user-federation' | translate}}</a></li>
<li><a href="#/realms/{{realm.realm}}/user-federation/providers/{{provider.providerName}}/{{provider.id}}">{{provider.displayName|capitalize}}</a></li>
<li><a href="#/realms/{{realm.realm}}/user-federation/providers/{{provider.providerName}}/{{provider.id}}/mappers">User Federation Mappers</a></li>
<li class="active" data-ng-show="create">Create User Federation Mapper</li>
<li><a href="#/realms/{{realm.realm}}/user-federation/providers/{{provider.providerName}}/{{provider.id}}/mappers">{{:: 'user-federation-mappers' | translate}}</a></li>
<li class="active" data-ng-show="create">{{:: 'create-user-federation-mapper' | translate}}</li>
<li class="active" data-ng-hide="create">{{mapper.name}}</li>
</ol>
<h1 data-ng-hide="create">{{mapper.name|capitalize}}<i class="pficon pficon-delete clickable" data-ng-show="!create && access.manageRealm"
data-ng-hide="changed" data-ng-click="remove()"></i></h1>
<h1 data-ng-show="create">Add User Federation Mapper</h1>
<h1 data-ng-show="create">{{:: 'add-user-federation-mapper' | translate}}</h1>
<form class="form-horizontal" name="realmForm" novalidate kc-read-only="!access.manageRealm">
<fieldset>
<div class="form-group clearfix" data-ng-show="!create">
<label class="col-md-2 control-label" for="mapperId">ID </label>
<label class="col-md-2 control-label" for="mapperId">{{:: 'id' | translate}} </label>
<div class="col-md-6">
<input class="form-control" id="mapperId" type="text" ng-model="mapper.id" readonly>
</div>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="name">Name <span class="required">*</span></label>
<label class="col-md-2 control-label" for="name">{{:: 'name' | translate}} <span class="required">*</span></label>
<div class="col-md-6">
<input class="form-control" id="name" type="text" ng-model="mapper.name" data-ng-readonly="!create" required>
</div>
<kc-tooltip>Name of the mapper.</kc-tooltip>
<kc-tooltip>{{:: 'mapper.name.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group" data-ng-show="create">
<label class="col-md-2 control-label" for="mapperTypeCreate">Mapper Type</label>
<label class="col-md-2 control-label" for="mapperTypeCreate">{{:: 'mapper-type' | translate}}</label>
<div class="col-sm-6">
<div>
<select class="form-control" id="mapperTypeCreate"
@ -39,7 +39,7 @@
<kc-tooltip>{{mapperType.helpText}}</kc-tooltip>
</div>
<div class="form-group clearfix" data-ng-hide="create">
<label class="col-md-2 control-label" for="mapperType">Mapper Type</label>
<label class="col-md-2 control-label" for="mapperType">{{:: 'mapper-type' | translate}}</label>
<div class="col-md-6">
<input class="form-control" id="mapperType" type="text" ng-model="mapperType.name" data-ng-readonly="true">
</div>

View file

@ -1,8 +1,8 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/user-federation">User Federation</a></li>
<li><a href="#/realms/{{realm.realm}}/user-federation">{{:: 'user-federation' | translate}}</a></li>
<li><a href="#/realms/{{realm.realm}}/user-federation/providers/{{provider.providerName}}/{{provider.id}}">{{provider.displayName|capitalize}}</a></li>
<li>User Federation Mappers</li>
<li>{{:: 'user-federation-mappers' | translate}}</li>
</ol>
<kc-tabs-user-federation></kc-tabs-user-federation>
@ -14,22 +14,22 @@
<div class="form-inline">
<div class="form-group">
<div class="input-group">
<input type="text" placeholder="Search..." data-ng-model="search.name" class="form-control search" onkeyup="if(event.keyCode == 13){$(this).next('I').click();}">
<input type="text" placeholder="{{:: 'search.placeholder' | translate}}" data-ng-model="search.name" class="form-control search" onkeyup="if(event.keyCode == 13){$(this).next('I').click();}">
<div class="input-group-addon">
<i class="fa fa-search" type="submit"></i>
</div>
</div>
</div>
<div class="pull-right" data-ng-show="hasAnyMapperTypes">
<a class="btn btn-primary" href="#/create/user-federation-mappers/{{realm.realm}}/{{provider.providerName}}/{{provider.id}}">Create</a>
<a class="btn btn-primary" href="#/create/user-federation-mappers/{{realm.realm}}/{{provider.providerName}}/{{provider.id}}">{{:: 'create' | translate}}</a>
</div>
</div>
</th>
</tr>
<tr data-ng-hide="mappers.length == 0">
<th>Name</th>
<th>Category</th>
<th>Type</th>
<th>{{:: 'name' | translate}}</th>
<th>{{:: 'category' | translate}}</th>
<th>{{:: 'type' | translate}}</th>
</tr>
</thead>
<tbody>
@ -39,7 +39,7 @@
<td>{{mapperTypes[mapper.federationMapperType].name}}</td>
</tr>
<tr data-ng-show="mappers.length == 0">
<td>No mappers available</td>
<td>{{:: 'no-mappers-available' | translate}}</td>
</tr>
</tbody>
</table>

View file

@ -10,9 +10,9 @@
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Key</th>
<th>Value</th>
<th>Actions</th>
<th>{{:: 'key' | translate}}</th>
<th>{{:: 'value' | translate}}</th>
<th>{{:: 'actions' | translate}}</th>
</tr>
</thead>
<tbody>
@ -20,14 +20,14 @@
<td>{{key}}</td>
<td><input ng-model="group.attributes[key]" class="form-control" type="text" name="{{key}}" id="attribute-{{key}}" /></td>
<td class="kc-action-cell">
<button type="button" class="btn btn-default btn-block btn-sm" data-ng-click="removeAttribute(key)">Delete</button>
<button type="button" class="btn btn-default btn-block btn-sm" data-ng-click="removeAttribute(key)">{{:: 'delete' | translate}}</button>
</td>
</tr>
<tr>
<td><input ng-model="newAttribute.key" class="form-control" type="text" id="newAttributeKey" /></td>
<td><input ng-model="newAttribute.value" class="form-control" type="text" id="newAttributeValue" /></td>
<td class="kc-action-cell">
<button class="btn btn-default btn-block btn-sm" data-ng-click="addAttribute()" data-ng-disabled="!newAttribute.key.length || !newAttribute.value.length">Add</button>
<button class="btn btn-default btn-block btn-sm" data-ng-click="addAttribute()" data-ng-disabled="!newAttribute.key.length || !newAttribute.value.length">{{:: 'add' | translate}}</button>
</td>
</tr>
</tbody>
@ -35,8 +35,8 @@
<div class="form-group" data-ng-show="access.manageUsers">
<div class="col-md-12">
<button kc-save data-ng-disabled="!changed">Save</button>
<button kc-reset data-ng-disabled="!changed">Cancel</button>
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
<button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,6 +1,6 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/groups">Groups</a></li>
<li><a href="#/realms/{{realm.realm}}/groups">{{:: 'groups' | translate}}</a></li>
<li>{{group.name}}</li>
</ol>
@ -8,7 +8,7 @@
<form class="form-horizontal" name="clientForm" novalidate>
<fieldset class="border-top">
<div class="form-group">
<label class="col-md-2 control-label"for="name">Name <span class="required">*</span></label>
<label class="col-md-2 control-label"for="name">{{:: 'name' | translate}} <span class="required">*</span></label>
<div class="col-md-6">
<input class="form-control" type="text" id="name" name="name" data-ng-model="group.name" autofocus
required >
@ -18,8 +18,8 @@
<div class="form-group" data-ng-show="access.manageUsers">
<div class="col-md-10 col-md-offset-2">
<button kc-save data-ng-disabled="!changed">Save</button>
<button kc-reset data-ng-disabled="!changed" data-ng-click="cancel()">Cancel</button>
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
<button kc-reset data-ng-disabled="!changed" data-ng-click="cancel()">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -7,11 +7,11 @@
<th class="kc-table-actions" colspan="5">
<div class="form-inline">
<div class="pull-right" data-ng-show="access.manageUsers">
<button id="createGroup" class="btn btn-default" ng-click="createGroup(tree.currentNode)">New</button>
<button id="editGroup" ng-disabled="isDisabled()" class="btn btn-default" ng-click="edit(tree.currentNode)">Edit</button>
<button id="cutGroup" ng-disabled="isDisabled()" class="btn btn-default" ng-click="cut(tree.currentNode)">Cut</button>
<button id="pasteGroup" ng-disabled="!cutNode" class="btn btn-default" ng-click="paste(tree.currentNode)">Paste</button>
<button id="removeGroup" ng-disabled="isDisabled()" class="btn btn-default" ng-click="remove(tree.currentNode)">Delete</button>
<button id="createGroup" class="btn btn-default" ng-click="createGroup(tree.currentNode)">{{:: 'new' | translate}}</button>
<button id="editGroup" ng-disabled="isDisabled()" class="btn btn-default" ng-click="edit(tree.currentNode)">{{:: 'edit' | translate}}</button>
<button id="cutGroup" ng-disabled="isDisabled()" class="btn btn-default" ng-click="cut(tree.currentNode)">{{:: 'cut' | translate}}</button>
<button id="pasteGroup" ng-disabled="!cutNode" class="btn btn-default" ng-click="paste(tree.currentNode)">{{:: 'paste' | translate}}</button>
<button id="removeGroup" ng-disabled="isDisabled()" class="btn btn-default" ng-click="remove(tree.currentNode)">{{:: 'delete' | translate}}</button>
</div>
</div>
</th>

View file

@ -1,19 +1,19 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/groups">Groups</a></li>
<li><a href="#/realms/{{realm.realm}}/groups">{{:: 'groups' | translate}}</a></li>
<li>{{group.name}}</li>
</ol>
<kc-tabs-group></kc-tabs-group>
<table class="table table-striped table-bordered">
<caption data-ng-show="users" class="hidden">Table of group members</caption>
<caption data-ng-show="users" class="hidden">{{:: 'table-of-group-members' | translate}}</caption>
<thead>
<tr>
<tr data-ng-show="searchLoaded && users.length > 0">
<th>Username</th>
<th>Last Name</th>
<th>First Name</th>
<th>Email</th>
<th>{{:: 'username' | translate}}</th>
<th>{{:: 'last-name' | translate}}</th>
<th>{{:: 'first-name' | translate}}</th>
<th>{{:: 'email' | translate}}</th>
<th></th>
</tr>
</tr>
@ -22,9 +22,9 @@
<tr>
<td colspan="7">
<div class="table-nav">
<button data-ng-click="firstPage()" class="first" ng-disabled="query.first == 0">First page</button>
<button data-ng-click="previousPage()" class="prev" ng-disabled="query.first == 0">Previous page</button>
<button data-ng-click="nextPage()" class="next" ng-disabled="users.length < query.max">Next page</button>
<button data-ng-click="firstPage()" class="first" ng-disabled="query.first == 0">{{:: 'first-page' | translate}}</button>
<button data-ng-click="previousPage()" class="prev" ng-disabled="query.first == 0">{{:: 'previous-page' | translate}}</button>
<button data-ng-click="nextPage()" class="next" ng-disabled="users.length < query.max">{{:: 'next-page' | translate}}</button>
</div>
</td>
</tr>
@ -36,12 +36,12 @@
<td>{{user.firstName}}</td>
<td>{{user.email}}</td>
<td class="kc-action-cell">
<button class="btn btn-default btn-block btn-sm" kc-open="/realms/{{realm.realm}}/users/{{user.id}}">Edit</button>
<button class="btn btn-default btn-block btn-sm" kc-open="/realms/{{realm.realm}}/users/{{user.id}}">{{:: 'edit' | translate}}</button>
</td>
</tr>
<tr data-ng-show="!users || users.length == 0">
<td class="text-muted" data-ng-show="searchLoaded && users.length == 0 && lastSearch != null">No group members</td>
<td class="text-muted" data-ng-show="searchLoaded && users.length == 0 && lastSearch == null">No group members</td>
<td class="text-muted" data-ng-show="searchLoaded && users.length == 0 && lastSearch != null">{{:: 'no-group-members' | translate}}</td>
<td class="text-muted" data-ng-show="searchLoaded && users.length == 0 && lastSearch == null">{{:: 'no-group-members' | translate}}</td>
</tr>
</tbody>
</table>

View file

@ -1,6 +1,6 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/groups">Groups</a></li>
<li><a href="#/realms/{{realm.realm}}/groups">{{:: 'groups' | translate}}</a></li>
<li>{{group.name}}</li>
</ol>
@ -8,37 +8,37 @@
<form class="form-horizontal" name="realmForm" novalidate>
<div class="form-group" kc-read-only="!access.manageUsers">
<label class="col-md-2 control-label" class="control-label">Realm Roles</label>
<label class="col-md-2 control-label" class="control-label">{{:: 'realm-roles' | translate}}</label>
<div class="col-md-10">
<div class="row">
<div class="col-md-3">
<label class="control-label" for="available">Available Roles</label>
<label class="control-label" for="available">{{:: 'available-roles' | translate}}</label>
<select id="available" class="form-control" multiple size="5"
ng-multiple="true"
ng-model="selectedRealmRoles"
ng-options="r.name for r in realmRoles">
</select>
<button ng-disabled="selectedRealmRoles.length == 0" ng-disabled="c.length == 0" class="btn btn-default" type="submit" ng-click="addRealmRole()">
Add selected <i class="fa fa-angle-right"></i>
{{:: 'add-selected' | translate}} <i class="fa fa-angle-right"></i>
</button>
<kc-tooltip>Realm roles that can be assigned to the group.</kc-tooltip>
<kc-tooltip>{{:: 'group.add-selected.tooltip' | translate}}</kc-tooltip>
</div>
<div class="col-md-3">
<label class="control-label" for="assigned">Assigned Roles</label>
<kc-tooltip>Realm roles mapped to the group</kc-tooltip>
<label class="control-label" for="assigned">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'group.assigned-roles.tooltip' | translate}}</kc-tooltip>
<select id="assigned" class="form-control" multiple size=5
ng-multiple="true"
ng-model="selectedRealmMappings"
ng-options="r.name for r in realmMappings">
</select>
<button ng-disabled="selectedRealmMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteRealmRole()">
<i class="fa fa-angle-double-left"></i> Remove selected
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
</button>
</div>
<div class="col-md-3">
<label class="control-label" for="realm-composite">Effective Roles</label>
<kc-tooltip>All realm role mappings. Some roles here might be inherited from a mapped composite role.</kc-tooltip>
<label class="control-label" for="realm-composite">{{:: 'effective-roles' | translate}}</label>
<kc-tooltip>{{:: 'group.effective-roles.tooltip' | translate}}</kc-tooltip>
<select id="realm-composite" class="form-control" multiple size=5
disabled="true"
ng-model="dummymodel"
@ -51,40 +51,40 @@
<div class="form-group">
<label class="col-md-2 control-label" class="control-label">
<span>Client Roles</span>
<span>{{:: 'client-roles' | translate}}</span>
<select class="form-control" id="clients" name="clients" ng-change="changeClient()" ng-model="targetClient" ng-options="a.clientId for a in clients" ng-disabled="false"></select>
</label>
<div class="col-md-10" kc-read-only="!access.manageUsers">
<div class="row" data-ng-hide="targetClient">
<div class="col-md-4"><span class="text-muted">Select client to view roles for client</span></div>
<div class="col-md-4"><span class="text-muted">{{:: 'select-client-to-view-roles' | translate}}</span></div>
</div>
<div class="row" data-ng-show="targetClient">
<div class="col-md-3">
<label class="control-label" for="available-client">Available Roles</label>
<kc-tooltip>Assignable roles from this client.</kc-tooltip>
<label class="control-label" for="available-client">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'group.available-roles.tooltip' | translate}}</kc-tooltip>
<select id="available-client" class="form-control" multiple size="5"
ng-multiple="true"
ng-model="selectedClientRoles"
ng-options="r.name for r in clientRoles">
</select>
<button ng-disabled="selectedClientRoles.length == 0" class="btn btn-default" type="submit" ng-click="addClientRole()">
Add selected <i class="fa fa-angle-double-right"></i>
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
</button>
</div>
<div class="col-md-3">
<label class="control-label" for="assigned-client">Assigned Roles</label>
<kc-tooltip>Role mappings for this client.</kc-tooltip>
<label class="control-label" for="assigned-client">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'group.assigned-roles-client.tooltip' | translate}}</kc-tooltip>
<select id="assigned-client" class="form-control" multiple size=5
ng-multiple="true"
ng-model="selectedClientMappings"
ng-options="r.name for r in clientMappings">
</select>
<button ng-disabled="selectedClientMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteClientRole()">
<i class="fa fa-angle-double-left"></i> Remove selected
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
</button>
</div>
<div class="col-md-3">
<label class="control-label" for="client-composite">Effective Roles <span tooltip-placement="right" tooltip-trigger="mouseover mouseout" tooltip="Role mappings for this client. Some roles here might be inherited from a mapped composite role." class="fa fa-info-circle"></span></label>
<label class="control-label" for="client-composite">{{:: 'effective-roles' | translate}} <span tooltip-placement="right" tooltip-trigger="mouseover mouseout" tooltip="{{:: 'group.effective-roles-client.tooltip' | translate}}" class="fa fa-info-circle"></span></label>
<select id="client-composite" class="form-control" multiple size=5
disabled="true"
ng-model="dummymodel"

View file

@ -1,6 +1,6 @@
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="sr-only">{{:: 'toggle-navigation' | translate}}</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
@ -15,10 +15,10 @@
{{auth.user.displayName|capitalize}} <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="{{authUrl}}/realms/{{auth.user.realm}}/account?referrer=security-admin-console">Manage Account</a></li>
<li><a href="#/server-info">Server Info</a></li>
<li><a href="{{authUrl}}/realms/{{auth.user.realm}}/account?referrer=security-admin-console">{{:: 'manage-account' | translate}}</a></li>
<li><a href="#/server-info">{{:: 'server-info' | translate}}</a></li>
<li class="divider"></li>
<li><a href="" ng-click="auth.authz.logout()">Sign Out</a></li>
<li><a href="" ng-click="auth.authz.logout()">{{:: 'sign-out' | translate}}</a></li>
</ul>
</li>
</ul>

View file

@ -1,8 +1,8 @@
<div style="padding: 20px 20px 0 20px">
<table class="table table-striped table-bordered">
<tr><td width="100px">Realm</td><td>{{event.authDetails.realmId}}</td></tr>
<tr><td width="100px">Client</td><td>{{event.authDetails.clientId}}</td></tr>
<tr><td width="100px">User</td><td>{{event.authDetails.userId}}</td></tr>
<tr><td width="100px">IP Address</td><td>{{event.authDetails.ipAddress}}</td></tr>
<tr><td width="100px">{{:: 'realm' | translate}}</td><td>{{event.authDetails.realmId}}</td></tr>
<tr><td width="100px">{{:: 'client' | translate}}</td><td>{{event.authDetails.clientId}}</td></tr>
<tr><td width="100px">{{:: 'user' | translate}}</td><td>{{event.authDetails.userId}}</td></tr>
<tr><td width="100px">{{:: 'ip-address' | translate}}</td><td>{{event.authDetails.ipAddress}}</td></tr>
</table>
</div>

View file

@ -2,27 +2,27 @@
<button type="button" class="close" ng-click="cancel()">
<span class="pficon pficon-close"></span>
</button>
<h4 class="modal-title">Role Selector</h4>
<h4 class="modal-title">{{:: 'role-selector' | translate}}</h4>
</div>
<div style="padding: 0 15px 15px 15px;">
<form>
<div data-ng-show="realmRoles.length > 0" style="margin-bottom: 30px;">
<label class="control-label" for="available">Realm Roles</label>
<kc-tooltip>Realm roles that can be selected.</kc-tooltip>
<label class="control-label" for="available">{{:: 'realm-roles' | translate}}</label>
<kc-tooltip>{{:: 'realm-roles.tooltip' | translate}}</kc-tooltip>
<select id="available" class="form-control" size="5"
ng-dblclick="selectRealmRole()"
ng-model="selectedRealmRole.role"
ng-options="r.name for r in realmRoles | orderBy:'toString()'">
<option style="display:none" value="">Select a role</option>
<option style="display:none" value="">{{:: 'select-a-role' | translate}}</option>
</select>
<button class="btn btn-default" type="submit" data-ng-disabled="!selectedRealmRole.role" ng-click="selectRealmRole()" tooltip-trigger="mouseover mouseout" tooltip="Select realm role" tooltip-placement="right">
Select Realm Role</i>
{{:: 'select-realm-role' | translate}}</i>
</button>
</div>
<div data-ng-show="clients.length > 0">
<label class="control-label">
<span>Client Roles</span>
<kc-tooltip>Client roles that can be selected.</kc-tooltip>
<span>{{:: 'client-roles' | translate}}</span>
<kc-tooltip>{{:: 'client-roles.tooltip' | translate}}</kc-tooltip>
<select class="form-control" id="clients" name="clients" ng-change="changeClient()" ng-model="client.selected" ng-options="a.clientId for a in clients" ng-disabled="false">
</select>
</label>
@ -30,10 +30,10 @@
ng-dblclick="selectClientRole()"
ng-model="selectedClientRole.role"
ng-options="r.name for r in clientRoles | orderBy:'toString()'">
<option style="display:none" value="">Select a role</option>
<option style="display:none" value="">{{:: 'select-a-role' | translate}}</option>
</select>
<button class="btn btn-default" type="submit" data-ng-disabled="!selectedClientRole.role" ng-click="selectClientRole()" tooltip-trigger="mouseover mouseout" tooltip="Select client role" tooltip-placement="right">
Select Client Role
{{:: 'select-client-role' | translate}}
</button>
</div>
</form>

View file

@ -2,12 +2,12 @@
<button type="button" class="close" ng-click="cancel()">
<span class="pficon pficon-close"></span>
</button>
<h4 class="modal-title">Register Required Action</h4>
<h4 class="modal-title">{{:: 'register-required-action' | translate}}</h4>
</div>
<div class="modal-body">
<form>
<div>
<label class="control-label" for="selector">Required Action</label>
<label class="control-label" for="selector">{{:: 'required-action' | translate}}</label>
<select id="selector" class="form-control"
ng-model="selected.selected"
ng-options="r.name for r in unregisteredRequiredActions">
@ -16,6 +16,6 @@
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" ng-click="cancel()">Cancel</button>
<button type="button" class="btn btn-primary" ng-click="ok()">Ok</button>
<button type="button" class="btn btn-default" ng-click="cancel()">{{:: 'cancel' | translate}}</button>
<button type="button" class="btn btn-primary" ng-click="ok()">{{:: 'ok' | translate}}</button>
</div>

View file

@ -1,7 +1,7 @@
<div id="content-area" class="col-sm-12" role="main">
<div class="error-container">
<h2>Resource <strong>not found</strong>...</h2>
<p class="instruction">We could not find the resource you are looking for. Please make sure the URL you entered is correct.</p>
<a href="#/" class="link-right">Go to the home page &raquo;</a>
<h2 translate="resource-not-found"></h2>
<p class="instruction">{{:: 'resource-not-found.instruction' | translate}}</p>
<a href="#/" class="link-right" translate="go-to-the-home-page"></a>
</div>
</div>

View file

@ -1,23 +1,23 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>Authentication</h1>
<h1>{{:: 'authentication' | translate}}</h1>
<kc-tabs-authentication></kc-tabs-authentication>
<form class="form-horizontal" name="realmForm" novalidate kc-read-only="!access.manageRealm">
<div class="form-group">
<label for="type" class="col-md-2 control-label">OTP Type</label>
<label for="type" class="col-md-2 control-label">{{:: 'otp-type' | translate}}</label>
<div class="col-md-2">
<div>
<select id="type" ng-model="realm.otpPolicyType" class="form-control">
<option value="totp">Time Based</option>
<option value="hotp">Counter Based</option>
<option value="totp">{{:: 'time-based' | translate}}</option>
<option value="hotp">{{:: 'counter-based' | translate}}</option>
</select>
</div>
</div>
<kc-tooltip>totp is Time-Based One Time Password. 'hotp' is a counter base one time password in which the server keeps a counter to hash against.</kc-tooltip>
<kc-tooltip>{{:: 'otp-type.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label for="alg" class="col-md-2 control-label">OTP Hash Algorithm</label>
<label for="alg" class="col-md-2 control-label">{{:: 'otp-hash-algorithm' | translate}}</label>
<div class="col-md-2">
<div>
<select id="alg" ng-model="realm.otpPolicyAlgorithm" class="form-control">
@ -27,49 +27,49 @@
</select>
</div>
</div>
<kc-tooltip>What hashing algorithm should be used to generate the OTP.</kc-tooltip>
<kc-tooltip>{{:: 'otp-hash-algorithm.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="digits">Number of Digits</label>
<label class="col-md-2 control-label" for="digits">{{:: 'number-of-digits' | translate}}</label>
<div class="col-md-2">
<div>
<select id="digits" ng-model="realm.otpPolicyDigits" class="form-control" ng-options="item as item for item in optionsDigits">
</select>
</div>
</div>
<kc-tooltip>How many digits should the OTP have?</kc-tooltip>
<kc-tooltip>{{:: 'otp.number-of-digits.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="lookAhead">Look ahead window</label>
<label class="col-md-2 control-label" for="lookAhead">{{:: 'look-ahead-window' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="number" required min="1" max="120" id="lookAhead" name="lookAhead" data-ng-model="realm.otpPolicyLookAheadWindow" autofocus>
</div>
<kc-tooltip>How far ahead should the server look just in case the token generator and server are out of time sync or counter sync?</kc-tooltip>
<kc-tooltip>{{:: 'otp.look-ahead-window.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group" data-ng-if="realm.otpPolicyType == 'hotp'">
<label class="col-md-2 control-label" for="counter">Initial Counter</label>
<label class="col-md-2 control-label" for="counter">{{:: 'initial-counter' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="number" data-ng-required="realm.otpPolicyType == 'hotp'" min="1" max="120" id="counter" name="counter" data-ng-model="realm.otpPolicyInitialCounter" autofocus>
</div>
<kc-tooltip>What should the initial counter value be?</kc-tooltip>
<kc-tooltip>{{:: 'otp.initial-counter.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group" data-ng-if="realm.otpPolicyType == 'totp'">
<label class="col-md-2 control-label" for="counter">OTP Token Period</label>
<label class="col-md-2 control-label" for="counter">{{:: 'otp-token-period' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="number" data-ng-required="realm.otpPolicyType == 'totp'" min="1" max="120" id="period" name="period" data-ng-model="realm.otpPolicyPeriod">
</div>
<kc-tooltip>How many seconds should an OTP token be valid? Defaults to 30 seconds.</kc-tooltip>
<kc-tooltip>{{:: 'otp-token-period.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group" data-ng-show="access.manageRealm">
<div class="col-md-10 col-md-offset-2">
<button kc-save data-ng-disabled="!changed">Save</button>
<button kc-reset data-ng-disabled="!changed">Cancel</button>
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
<button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,7 +1,7 @@
<div id="content-area" class="col-sm-12" role="main">
<div class="error-container">
<h2>Page <strong>not found</strong>...</h2>
<p class="instruction">We could not find the page you are looking for. Please make sure the URL you entered is correct.</p>
<a href="#" class="link-right">Go to the home page &raquo;</a>
<h2 translate="page-not-found"></h2>
<p class="instruction">{{:: 'page-not-found.instruction' | translate}}</p>
<a href="#" class="link-right" translate="go-to-the-home-page"></a>
</div>
</div>

View file

@ -1,11 +1,11 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>Partial Import</h1>
<h1>{{:: 'partial-import' | translate}}</h1>
<form class="form-horizontal" name="partialImportForm" novalidate>
<fieldset class="border-top">
<div class="form-group">
<label for="name" class="col-sm-2 control-label">File</label>
<label for="name" class="col-sm-2 control-label">{{:: 'file' | translate}}</label>
<div class="col-md-6" data-ng-hide="importing">
<label for="import-file" class="btn btn-default">{{:: 'select-file'| translate}} <i class="pficon pficon-import"></i></label>
@ -19,7 +19,7 @@
</div>
<div class="form-group" data-ng-show="importing && isMultiRealm && !hasResults()">
<label for="fromRealm" class="col-md-2 control-label">Import from realm</label>
<label for="fromRealm" class="col-md-2 control-label">{{:: 'import-from-realm' | translate}}</label>
<div class="col-md-2">
<div>
<select id="fromRealm" ng-model="fileContent" class="form-control"
@ -30,52 +30,52 @@
</div>
<div class="form-group" data-ng-show="importing && hasArray('users') && !hasResults()">
<label class="col-md-2 control-label" for="importUsers">Import Users ({{itemCount('users')}})</label>
<label class="col-md-2 control-label" for="importUsers">{{:: 'import-users' | translate}} ({{itemCount('users')}})</label>
<div class="col-sm-6">
<input ng-model="importUsers" name="importUsers" id="importUsers" onoffswitch on-text="{{:: 'onText'| translate}}" off-text="{{:: 'offText'| translate}}"/>
</div>
</div>
<div class="form-group" data-ng-show="importing && hasArray('clients') && !hasResults()">
<label class="col-md-2 control-label" for="importClients">Import Clients ({{itemCount('clients')}})</label>
<label class="col-md-2 control-label" for="importClients">{{:: 'import-clients' | translate}} ({{itemCount('clients')}})</label>
<div class="col-sm-6">
<input ng-model="importClients" name="importClients" id="importClients" onoffswitch on-text="{{:: 'onText'| translate}}" off-text="{{:: 'offText'| translate}}"/>
</div>
</div>
<div class="form-group" data-ng-show="importing && hasArray('identityProviders') && !hasResults()">
<label class="col-md-2 control-label" for="importIdentityProviders">Import Identity Providers ({{itemCount('identityProviders')}})</label>
<label class="col-md-2 control-label" for="importIdentityProviders">{{:: 'import-identity-providers' | translate}} ({{itemCount('identityProviders')}})</label>
<div class="col-sm-6">
<input ng-model="importIdentityProviders" name="importIdentityProviders" id="importIdentityProviders" onoffswitch on-text="{{:: 'onText'| translate}}" off-text="{{:: 'offText'| translate}}"/>
</div>
</div>
<div class="form-group" data-ng-show="importing && hasRealmRoles() && !hasResults()">
<label class="col-md-2 control-label" for="importRealmRoles">Import Realm Roles ({{itemCount('roles.realm')}})</label>
<label class="col-md-2 control-label" for="importRealmRoles">{{:: 'import-realm-roles' | translate}} ({{itemCount('roles.realm')}})</label>
<div class="col-sm-6">
<input ng-model="importRealmRoles" name="importRealmRoles" id="importRealmRoles" onoffswitch on-text="{{:: 'onText'| translate}}" off-text="{{:: 'offText'| translate}}"/>
</div>
</div>
<div class="form-group" data-ng-show="importing && hasClientRoles() && !hasResults()">
<label class="col-md-2 control-label" for="importClientRoles">Import Client Roles ({{itemCount('roles.client')}})</label>
<label class="col-md-2 control-label" for="importClientRoles">{{:: 'import-client-roles' | translate}} ({{itemCount('roles.client')}})</label>
<div class="col-sm-6">
<input ng-model="importClientRoles" name="importClientRoles" id="importClientRoles" onoffswitch on-text="{{:: 'onText'| translate}}" off-text="{{:: 'offText'| translate}}"/>
</div>
</div>
<div class="form-group" data-ng-show="importing && hasResources() && !hasResults()">
<label for="ifResourceExists" class="col-md-2 control-label">If a resource exists</label>
<label for="ifResourceExists" class="col-md-2 control-label">{{:: 'if-resource-exists' | translate}}</label>
<div class="col-md-2">
<div>
<select id="ifResourceExists" ng-model="ifResourceExists" class="form-control">
<option value="FAIL">Fail</option>
<option value="SKIP">Skip</option>
<option value="OVERWRITE">Overwrite</option>
<option value="FAIL">{{:: 'fail' | translate}}</option>
<option value="SKIP">{{:: 'skip' | translate}}</option>
<option value="OVERWRITE">{{:: 'overwrite' | translate}}</option>
</select>
</div>
</div>
<kc-tooltip>Specify what should be done if you try to import a resource that already exists.</kc-tooltip>
<kc-tooltip>{{:: 'if-resource-exists.tooltip' | translate}}</kc-tooltip>
</div>
</fieldset>
@ -90,10 +90,10 @@
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Action</th>
<th>Type</th>
<th>Name</th>
<th>Id</th>
<th>{{:: 'action' | translate}}</th>
<th>{{:: 'type' | translate}}</th>
<th>{{:: 'name' | translate}}</th>
<th>{{:: 'id' | translate}}</th>
</tr>
</thead>
<tbody>
@ -109,9 +109,9 @@
</table>
<div class="table-nav">
<button data-ng-click="setFirstPage()" class="first" ng-disabled="">First page</button>
<button data-ng-click="setPreviousPage()" class="prev" ng-disabled="!hasPrevious()">Previous page</button>
<button data-ng-click="setNextPage()" class="next" ng-disabled="!hasNext()">Next page</button>
<button data-ng-click="setFirstPage()" class="first" ng-disabled="">{{:: 'first-page' | translate}}</button>
<button data-ng-click="setPreviousPage()" class="prev" ng-disabled="!hasPrevious()">{{:: 'previous-page' | translate}}</button>
<button data-ng-click="setNextPage()" class="next" ng-disabled="!hasNext()">{{:: 'next-page' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,11 +1,11 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>Authentication</h1>
<h1>{{:: 'authentication' | translate}}</h1>
<kc-tabs-authentication></kc-tabs-authentication>
<form class="form-horizontal" name="realmForm" novalidate kc-read-only="!access.manageRealm">
<table class="table table-striped table-bordered">
<caption class="hidden">Table of Password Policies</caption>
<caption class="hidden">{{:: 'table-of-password-policies' | translate}}</caption>
<thead>
<tr ng-show="(allPolicies|removeSelectedPolicies:policy).length > 0">
<th colspan="5" class="kc-table-actions">
@ -14,16 +14,16 @@
<select class="form-control" ng-model="selectedPolicy"
ng-options="(p.name|capitalize) for p in (allPolicies|removeSelectedPolicies:policy)"
data-ng-change="addPolicy(selectedPolicy); selectedPolicy = null">
<option value="" disabled selected>Add policy...</option>
<option value="" disabled selected>{{:: 'add-policy.placeholder' | translate}}</option>
</select>
</div>
</div>
</th>
</tr>
<tr>
<th>Policy Type</th>
<th>Policy Value</th>
<th>Actions</th>
<th>{{:: 'policy-type' | translate}}</th>
<th>{{:: 'policy-value' | translate}}</th>
<th>{{:: 'actions' | translate}}</th>
</tr>
</thead>
<tbody>
@ -31,10 +31,10 @@
<td>{{p.name|capitalize}}</td>
<td>
<input class="form-control" ng-model="p.value" ng-show="p.name != 'notUsername' "
placeholder="No value assigned" min="1" required>
placeholder="{{:: 'no-value-assigned.placeholder' | translate}}" min="1" required>
</td>
<td class="kc-action-cell">
<button type="button" class="btn btn-default btn-block btn-sm" ng-click="removePolicy($index)">Delete</button>
<button type="button" class="btn btn-default btn-block btn-sm" ng-click="removePolicy($index)">{{:: 'delete' | translate}}</button>
</td>
</tr>
</tbody>
@ -42,8 +42,8 @@
<div class="form-group" data-ng-show="access.manageRealm">
<div class="col-md-12">
<button kc-save data-ng-disabled="!changed">Save</button>
<button kc-reset data-ng-disabled="!changed">Cancel</button>
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
<button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,42 +1,42 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>Add Realm</h1>
<h1>{{:: 'add-realm' | translate}}</h1>
<form class="form-horizontal" name="realmForm" novalidate>
<fieldset>
<div class="form-group">
<label for="name" class="col-sm-2 control-label">Import</label>
<label for="name" class="col-sm-2 control-label">{{:: 'import' | translate}}</label>
<div class="col-md-6" data-ng-hide="importing">
<label for="import-file" class="btn btn-default">Select file <i class="pficon pficon-import"></i></label>
<label for="import-file" class="btn btn-default">{{:: 'select-file' | translate}} <i class="pficon pficon-import"></i></label>
<input id="import-file" type="file" class="hidden" kc-on-read-file="importFile($fileContent)">
</div>
<div class="col-md-6" data-ng-show="importing">
<input type="button" class="btn btn-default" data-ng-click="viewImportDetails()" value="View details"/>
<input type="button" class="btn btn-default" data-ng-click="reset()" value="Clear import"/>
<input type="button" class="btn btn-default" data-ng-click="viewImportDetails()" value="{{:: 'view-details' | translate}}"/>
<input type="button" class="btn btn-default" data-ng-click="reset()" value="{{:: 'clear-import' | translate}}"/>
</div>
</div>
<div class="form-group">
<label for="name" class="col-sm-2 control-label">Name <span class="required">*</span></label>
<label for="name" class="col-sm-2 control-label">{{:: 'name' | translate}} <span class="required">*</span></label>
<div class="col-md-6">
<input class="form-control" type="text" id="name" name="name" data-ng-model="realm.realm" autofocusrequired>
</div>
</div>
<div class="form-group">
<label for="enabled" class="col-sm-2 control-label">Enabled</label>
<label for="enabled" class="col-sm-2 control-label">{{:: 'enabled' | translate}}</label>
<div class="col-md-6">
<input ng-model="realm.enabled" name="enabled" id="enabled" onoffswitch />
<input ng-model="realm.enabled" name="enabled" id="enabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
</fieldset>
<div class="form-group">
<div class="col-md-10 col-md-offset-2">
<button kc-save data-ng-disabled="!changed">Create</button>
<button kc-cancel data-ng-click="cancel()">Cancel</button>
<button kc-save data-ng-disabled="!changed">{{:: 'create' | translate}}</button>
<button kc-cancel data-ng-click="cancel()">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,38 +1,38 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>Roles</h1>
<h1>{{:: 'roles' | translate}}</h1>
<ul class="nav nav-tabs">
<li><a href="#/realms/{{realm.realm}}/roles">Realm Roles</a></li>
<li class="active"><a href="#/realms/{{realm.realm}}/default-roles">Default Roles</a></li>
<li><a href="#/realms/{{realm.realm}}/roles">{{:: 'realm-roles' | translate}}</a></li>
<li class="active"><a href="#/realms/{{realm.realm}}/default-roles">{{:: 'default-roles' | translate}}</a></li>
</ul>
<form class="form-horizontal" name="realmForm" novalidate kc-read-only="!access.manageRealm">
<div class="form-group">
<label class="col-md-2 control-label" class="control-label">Realm Roles</label>
<label class="col-md-2 control-label" class="control-label">{{:: 'realm-roles' | translate}}</label>
<div class="col-md-10">
<div class="row">
<div class="col-md-4">
<label class="control-label" for="available">Available Roles</label>
<kc-tooltip>Realm level roles that can be assigned.</kc-tooltip>
<label class="control-label" for="available">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'default.available-roles.tooltip' | translate}}</kc-tooltip>
<select id="available" class="form-control" multiple size="5"
ng-multiple="true"
ng-model="selectedRealmRoles"
ng-options="r for r in availableRealmRoles | orderBy:'toString()'">
</select>
<button ng-disabled="selectedRealmRoles.length == 0" class="btn btn-default" type="submit" ng-click="addRealmDefaultRole()">
Add selected <i class="fa fa-angle-double-right"></i>
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
</button>
</div>
<div class="col-md-4">
<label class="control-label" for="assigned">Realm Default Roles</label>
<kc-tooltip>Realm level roles assigned to new users.</kc-tooltip>
<label class="control-label" for="assigned">{{:: 'realm-default-roles' | translate}}</label>
<kc-tooltip>{{:: 'realm-default-roles.tooltip' | translate}}</kc-tooltip>
<select id="assigned" class="form-control" multiple size=5
ng-multiple="true"
ng-model="selectedRealmDefRoles"
ng-options="r for r in realm.defaultRoles | orderBy:'toString()'">
</select>
<button ng-disabled="selectedRealmDefRoles.length == 0" class="btn btn-default" type="submit" ng-click="deleteRealmDefaultRole()">
<i class="fa fa-angle-double-left"></i> Remove selected
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
</button>
</div>
</div>
@ -41,36 +41,36 @@
<div class="form-group">
<label class="col-md-2 control-label" class="control-label">
<span>Client Roles</span>
<span>{{:: 'client-roles' | translate}}</span>
<select class="form-control" id="clients" name="clients" ng-change="changeClient()" ng-model="client" ng-options="a.clientId for a in clients" ng-disabled="false"></select>
</label>
<div class="col-md-10" data-ng-show="client">
<div class="row" data-ng-hide="client">
<div class="col-md-4"><span class="text-muted">Select client to view roles for client</span></div>
<div class="col-md-4"><span class="text-muted">{{:: 'select-client-to-view-roles' | translate}}</span></div>
</div>
<div class="row" data-ng-show="client">
<div class="col-md-4">
<label class="control-label" for="available-client">Available Roles</label>
<kc-tooltip>Roles from this client that are assignable as a default.</kc-tooltip>
<label class="control-label" for="available-client">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'default.available-roles-client.tooltip' | translate}}</kc-tooltip>
<select id="available-client" class="form-control" multiple size="5"
ng-multiple="true"
ng-model="selectedClientRoles"
ng-options="r for r in availableClientRoles | orderBy:'toString()'">
</select>
<button ng-disabled="selectedClientRoles.length == 0" class="btn btn-default" type="submit" ng-click="addClientDefaultRole()">
Add selected <i class="fa fa-angle-double-right"></i>
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
</button>
</div>
<div class="col-md-4">
<label class="control-label" for="assigned-client">Client Default Roles</label>
<kc-tooltip>Roles from this client assigned as a default role.</kc-tooltip>
<label class="control-label" for="assigned-client">{{:: 'client-default-roles' | translate}}</label>
<kc-tooltip>{{:: 'client-default-roles.tooltip' | translate}}</kc-tooltip>
<select id="assigned-client" class="form-control" multiple size=5
ng-multiple="true"
ng-model="selectedClientDefRoles"
ng-options="r for r in client.defaultRoles | orderBy:'toString()'">
</select>
<button ng-disabled="selectedClientDefRoles.length == 0" class="btn btn-default" type="submit" ng-click="rmClientDefaultRole()">
<i class="fa fa-angle-double-left"></i> Remove selected
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
</button>
</div>
</div>

View file

@ -1,13 +1,13 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>
<span>Admin Events</span>
<kc-tooltip>Displays saved admin events for the realm. Events are related to admin account, for example a realm creation. To enable persisted events go to config.</kc-tooltip>
<span>{{:: 'admin-events' | translate}}</span>
<kc-tooltip>{{:: 'admin-events.tooltip' | translate}}</kc-tooltip>
</h1>
<ul class="nav nav-tabs">
<li data-ng-class="(path[2] == 'events') && 'active'"><a href="#/realms/{{realm.realm}}/events">Login Events</a></li>
<li data-ng-class="(path[2] == 'admin-events') && 'active'"><a href="#/realms/{{realm.realm}}/admin-events">Admin Events</a></li>
<li data-ng-class="(path[2] == 'events-settings') && 'active'"><a href="#/realms/{{realm.realm}}/events-settings">Config</a></li>
<li data-ng-class="(path[2] == 'events') && 'active'"><a href="#/realms/{{realm.realm}}/events">{{:: 'login-events' | translate}}</a></li>
<li data-ng-class="(path[2] == 'admin-events') && 'active'"><a href="#/realms/{{realm.realm}}/admin-events">{{:: 'admin-events' | translate}}</a></li>
<li data-ng-class="(path[2] == 'events-settings') && 'active'"><a href="#/realms/{{realm.realm}}/events-settings">{{:: 'config' | translate}}</a></li>
</ul>
<h2></h2>
@ -26,61 +26,61 @@
<button class="btn btn-default" data-ng-click="filter = !filter">
<span class="glyphicon glyphicon-plus" data-ng-show="!filter"></span>
<span class="glyphicon glyphicon-minus" data-ng-show="filter"></span>
Filter
{{:: 'filter' | translate}}
</button>
<button class="btn btn-default btn-default" data-ng-click="update()">Update</button>
<button class="btn btn-default btn-default" data-ng-click="reset()">Reset</button>
<button class="btn btn-default btn-default" data-ng-click="update()">{{:: 'update' | translate}}</button>
<button class="btn btn-default btn-default" data-ng-click="reset()">{{:: 'reset' | translate}}</button>
</div>
<form class="form-horizontal" data-ng-show="filter">
<div class="form-group">
<label class="col-sm-2 control-label" for="adminEnabledEventOperations">Operation Types</label>
<label class="col-sm-2 control-label" for="adminEnabledEventOperations">{{:: 'operation-types' | translate}}</label>
<div class="col-sm-5">
<input ui-select2="adminEnabledEventOperationsOptions" id="adminEnabledEventOperations" ng-model="query.operationTypes" data-placeholder="Select operations..."/>
<input ui-select2="adminEnabledEventOperationsOptions" id="adminEnabledEventOperations" ng-model="query.operationTypes" data-placeholder="{{:: 'select-operations.placeholder' | translate}}"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="resource">Resource Path</label>
<label class="col-sm-2 control-label" for="resource">{{:: 'resource-path' | translate}}</label>
<div class="col-sm-4">
<input class="form-control" type="text" id="resource" name="resource" data-ng-model="query.resourcePath">
</div>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="Filter by resource path. Supports wildcards '*' to match a single part of the path and '**' matches multiple parts. For example 'realms/*/clients/asbc' matches client with id asbc in any realm, while or 'realms/master/**' matches anything in the master realm." class="fa fa-info-circle"></span>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="{{:: 'resource-path.tooltip' | translate}}" class="fa fa-info-circle"></span>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="dateFrom">Date (From)</label>
<label class="col-sm-2 control-label" for="dateFrom">{{:: 'date-(from)' | translate}}</label>
<div class="col-sm-4">
<input class="form-control" type="text" id="dateFrom" name="dateFrom" data-ng-model="query.dateFrom" placeholder="yyyy-MM-dd">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="dateTo">Date (To)</label>
<label class="col-sm-2 control-label" for="dateTo">{{:: 'date-(to)' | translate}}</label>
<div class="col-sm-4">
<input class="form-control" type="text" id="dateTo" name="dateTo" data-ng-model="query.dateTo" placeholder="yyyy-MM-dd">
</div>
</div>
<fieldset>
<legend><span class="text">Authentication Details</span></legend>
<legend><span class="text">{{:: 'authentication-details' | translate}}</span></legend>
<div class="form-group">
<label class="col-sm-2 control-label" for="realm">Realm</label>
<label class="col-sm-2 control-label" for="realm">{{:: 'realm' | translate}}</label>
<div class="col-sm-4">
<input class="form-control" type="text" id="realm" name="realm" data-ng-model="query.authRealm">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="client">Client</label>
<label class="col-sm-2 control-label" for="client">{{:: 'client' | translate}}</label>
<div class="col-sm-4">
<input class="form-control" type="text" id="client" name="client" data-ng-model="query.authClient">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="user">User</label>
<label class="col-sm-2 control-label" for="user">{{:: 'user' | translate}}</label>
<div class="col-sm-4">
<input class="form-control" type="text" id="user" name="user" data-ng-model="query.authUser">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="ipAddress">IP Address</label>
<label class="col-sm-2 control-label" for="ipAddress">{{:: 'ip-address' | translate}}</label>
<div class="col-sm-4">
<input class="form-control" type="text" id="ipAddress" name="ipAddress" data-ng-model="query.authIpAddress">
</div>
@ -91,10 +91,10 @@
</th>
</tr>
<tr>
<th width="100px">Time</th>
<th width="180px">Operation Type</th>
<th width="180px">Resource Path</th>
<th>Details</th>
<th width="100px">{{:: 'time' | translate}}</th>
<th width="180px">{{:: 'operation-type' | translate}}</th>
<th width="180px">{{:: 'resource-path' | translate}}</th>
<th>{{:: 'details' | translate}}</th>
</tr>
</thead>
<tfoot>
@ -113,10 +113,10 @@
<td>{{event.resourcePath}}</td>
<td>
<button type="button" class="btn btn-default btn-xs" data-ng-click="viewAuth(event)">
Auth
{{:: 'auth' | translate}}
</button>
<button type="button" class="btn btn-default btn-xs" data-ng-click="viewRepresentation(event)" data-ng-show="event.representation">
Representation
{{:: 'representation' | translate}}
</button>
</td>
</tr>

View file

@ -1,112 +1,112 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>
<span>Events Config</span>
<kc-tooltip>Displays configuration options to enable persistence of user and admin events.</kc-tooltip>
<span>{{:: 'events-config' | translate}}</span>
<kc-tooltip>{{:: 'events-config.tooltip' | translate}}</kc-tooltip>
</h1>
<ul class="nav nav-tabs">
<li data-ng-class="(path[2] == 'events') && 'active'"><a href="#/realms/{{realm.realm}}/events">Login Events</a></li>
<li data-ng-class="(path[2] == 'admin-events') && 'active'"><a href="#/realms/{{realm.realm}}/admin-events">Admin Events</a></li>
<li data-ng-class="(path[2] == 'events-settings') && 'active'"><a href="#/realms/{{realm.realm}}/events-settings">Config</a></li>
<li data-ng-class="(path[2] == 'events') && 'active'"><a href="#/realms/{{realm.realm}}/events">{{:: 'login-events' | translate}}</a></li>
<li data-ng-class="(path[2] == 'admin-events') && 'active'"><a href="#/realms/{{realm.realm}}/admin-events">{{:: 'admin-events' | translate}}</a></li>
<li data-ng-class="(path[2] == 'events-settings') && 'active'"><a href="#/realms/{{realm.realm}}/events-settings">{{:: 'config' | translate}}</a></li>
</ul>
<div id="content">
<h2>Events Config</h2>
<h2>{{:: 'events-config' | translate}}</h2>
<form class="form-horizontal" name="realmForm" novalidate kc-read-only="!access.manageEvents">
<fieldset class="border-top">
<div class="form-group">
<label class="col-md-2 control-label" for="eventsListeners" class="control-label">Event Listeners</label>
<label class="col-md-2 control-label" for="eventsListeners" class="control-label">{{:: 'event-listeners' | translate}}</label>
<div class="col-md-6">
<select ui-select2 ng-model="eventsConfig.eventsListeners" data-placeholder="Select an action..." multiple>
<select ui-select2 ng-model="eventsConfig.eventsListeners" data-placeholder="{{:: 'select-an-action.placeholder' | translate}}" multiple>
<option ng-repeat="listener in eventListeners" value="{{listener}}">{{listener}}</option>
</select>
</div>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="Configure what listeners receive events for the realm." class="fa fa-info-circle"></span>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="{{:: 'event-listeners.tooltip' | translate}}" class="fa fa-info-circle"></span>
</div>
</fieldset>
<fieldset>
<legend><span class="text">Login Events Settings</span></legend>
<legend><span class="text">{{:: 'login-events-settings' | translate}}</span></legend>
<div class="form-group">
<label class="col-md-2 control-label" for="enabled">Save Events</label>
<label class="col-md-2 control-label" for="enabled">{{:: 'save-events' | translate}}</label>
<div class="col-md-6">
<input ng-model="eventsConfig.eventsEnabled" name="enabled" id="enabled" onoffswitch />
<input ng-model="eventsConfig.eventsEnabled" name="enabled" id="enabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="If enabled login events are saved to the database which makes events available to the admin and account management consoles." class="fa fa-info-circle"></span>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="{{:: 'login.save-events.tooltip' | translate}}" class="fa fa-info-circle"></span>
</div>
<div class="form-group" data-ng-show="eventsConfig.eventsEnabled">
<label class="col-md-2 control-label" for="enabledEventTypes" class="control-label">Saved Types</label>
<label class="col-md-2 control-label" for="enabledEventTypes" class="control-label">{{:: 'saved-types' | translate}}</label>
<div class="col-md-6">
<input ui-select2="eventSelectOptions" id="enabledEventTypes" ng-model="eventsConfig.enabledEventTypes" data-placeholder="Select event types..."/>
<input ui-select2="eventSelectOptions" id="enabledEventTypes" ng-model="eventsConfig.enabledEventTypes" data-placeholder="{{:: 'select-event-types.placeholder' | translate}}"/>
</div>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="Configure what event types are saved." class="fa fa-info-circle"></span>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="{{:: 'saved-types.tooltip' | translate}}" class="fa fa-info-circle"></span>
</div>
<div class="form-group" data-ng-show="access.manageEvents && eventsConfig.eventsEnabled">
<label class="col-md-2 control-label" for="password">Clear Events</label>
<label class="col-md-2 control-label" for="password">{{:: 'clear-events' | translate}}</label>
<div class="col-md-6">
<button class="btn btn-danger" type="submit" data-ng-click="clearEvents()" >Clear Events</button>
<button class="btn btn-danger" type="submit" data-ng-click="clearEvents()" >{{:: 'clear-events' | translate}}</button>
</div>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="Deletes all events in the database." class="fa fa-info-circle"></span>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="{{:: 'clear-events.tooltip' | translate}}" class="fa fa-info-circle"></span>
</div>
<div class="form-group input-select" data-ng-show="eventsConfig.eventsEnabled">
<label class="col-md-2 control-label" for="expiration">Expiration</label>
<label class="col-md-2 control-label" for="expiration">{{:: 'expiration' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="number" data-ng-model="eventsConfig.eventsExpiration" id="expiration" name="expiration" min="0"/>
</div>
<div class="col-md-2 select-kc">
<select name="expirationUnit" data-ng-model="eventsConfig.expirationUnit" >
<option>Minutes</option>
<option>Hours</option>
<option>Days</option>
<option>{{:: 'minutes' | translate}}</option>
<option>{{:: 'hours' | translate}}</option>
<option>{{:: 'days' | translate}}</option>
</select>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="Sets the expiration for events. Expired events are periodically deleted from the database." class="fa fa-info-circle"></span>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="{{:: 'events.expiration.tooltip' | translate}}" class="fa fa-info-circle"></span>
</div>
</div>
</fieldset>
<fieldset>
<legend><span class="text">Admin Events Settings</span></legend>
<legend><span class="text">{{:: 'admin-events-settings' | translate}}</span></legend>
<div class="form-group">
<label class="col-md-2 control-label" for="adminEventsEnabled">Save Events</label>
<label class="col-md-2 control-label" for="adminEventsEnabled">{{:: 'save-events' | translate}}</label>
<div class="col-md-6">
<input ng-model="eventsConfig.adminEventsEnabled" name="adminEventsEnabled" id="adminEventsEnabled" onoffswitch />
<input ng-model="eventsConfig.adminEventsEnabled" name="adminEventsEnabled" id="adminEventsEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="If enabled admin events are saved to the database which makes events available to the admin console." class="fa fa-info-circle"></span>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="{{:: 'admin.save-events.tooltip' | translate}}" class="fa fa-info-circle"></span>
</div>
<div class="form-group" data-ng-show="eventsConfig.adminEventsEnabled">
<label class="col-md-2 control-label" for="adminEventsDetailsEnabled">Include Representation</label>
<label class="col-md-2 control-label" for="adminEventsDetailsEnabled">{{:: 'include-representation' | translate}}</label>
<div class="col-md-6">
<input ng-model="eventsConfig.adminEventsDetailsEnabled" name="adminEventsDetailsEnabled" id="adminEventsDetailsEnabled" onoffswitch />
<input ng-model="eventsConfig.adminEventsDetailsEnabled" name="adminEventsDetailsEnabled" id="adminEventsDetailsEnabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="Include JSON representation for create and update requests." class="fa fa-info-circle"></span>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="{{:: 'include-representation.tooltip' | translate}}" class="fa fa-info-circle"></span>
</div>
<div class="form-group" data-ng-show="access.manageEvents && eventsConfig.adminEventsEnabled">
<label class="col-md-2 control-label" for="password">Clear Admin Events</label>
<label class="col-md-2 control-label" for="password">{{:: 'clear-admin-events' | translate}}</label>
<div class="col-md-6">
<button class="btn btn-danger" type="submit" data-ng-click="clearAdminEvents()" >Clear Admin Events</button>
<button class="btn btn-danger" type="submit" data-ng-click="clearAdminEvents()" >{{:: 'clear-admin-events' | translate}}</button>
</div>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="Deletes all admin events in the database." class="fa fa-info-circle"></span>
<span tooltip-trigger="mouseover mouseout" tooltip-placement="right" tooltip="{{:: 'clear-admin-events.tooltip' | translate}}" class="fa fa-info-circle"></span>
</div>
</fieldset>
<div class="pull-right form-actions" data-ng-show="access.manageEvents">
<button data-kc-reset data-ng-show="changed">Clear changes</button>
<button data-kc-save data-ng-show="changed">Save</button>
<button data-kc-reset data-ng-show="changed">{{:: 'clear-changes' | translate}}</button>
<button data-kc-save data-ng-show="changed">{{:: 'save' | translate}}</button>
</div>
</form>
</div>

View file

@ -1,13 +1,13 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>
<span>Events</span>
<kc-tooltip>Displays saved events for the realm. Events are related to user accounts, for example a user login. To enable persisted events go to config.</kc-tooltip>
<span>{{:: 'events' | translate}}</span>
<kc-tooltip>{{:: 'events.tooltip' | translate}}</kc-tooltip>
</h1>
<ul class="nav nav-tabs">
<li data-ng-class="(path[2] == 'events') && 'active'"><a href="#/realms/{{realm.realm}}/events">Login Events</a></li>
<li data-ng-class="(path[2] == 'admin-events') && 'active'"><a href="#/realms/{{realm.realm}}/admin-events">Admin Events</a></li>
<li data-ng-class="(path[2] == 'events-settings') && 'active'"><a href="#/realms/{{realm.realm}}/events-settings">Config</a></li>
<li data-ng-class="(path[2] == 'events') && 'active'"><a href="#/realms/{{realm.realm}}/events">{{:: 'login-events' | translate}}</a></li>
<li data-ng-class="(path[2] == 'admin-events') && 'active'"><a href="#/realms/{{realm.realm}}/admin-events">{{:: 'admin-events' | translate}}</a></li>
<li data-ng-class="(path[2] == 'events-settings') && 'active'"><a href="#/realms/{{realm.realm}}/events-settings">{{:: 'config' | translate}}</a></li>
</ul>
<table class="table table-striped table-bordered">
@ -24,39 +24,39 @@
<button class="btn btn-default" data-ng-click="filter = !filter">
<span class="glyphicon glyphicon-plus" data-ng-show="!filter"></span>
<span class="glyphicon glyphicon-minus" data-ng-show="filter"></span>
Filter
{{:: 'filter' | translate}}
</button>
<button class="btn btn-default btn-default" data-ng-click="update()">Update</button>
<button class="btn btn-default btn-default" data-ng-click="reset()">Reset</button>
<button class="btn btn-default btn-default" data-ng-click="update()">{{:: 'update' | translate}}</button>
<button class="btn btn-default btn-default" data-ng-click="reset()">{{:: 'reset' | translate}}</button>
</div>
<form class="form-horizontal">
<div class="form-group" data-ng-show="filter">
<label class="col-md-2 control-label" for="eventTypes">Event Type</label>
<label class="col-md-2 control-label" for="eventTypes">{{:: 'event-type' | translate}}</label>
<div class="col-sm-5">
<input ui-select2="eventSelectOptions" id="eventTypes" ng-model="query.type" data-placeholder="Select event types..."/>
<input ui-select2="eventSelectOptions" id="eventTypes" ng-model="query.type" data-placeholder="{{:: 'select-event-types.placeholder' | translate}}"/>
</div>
</div>
<div class="form-group" data-ng-show="filter">
<label class="col-md-2 control-label" for="client">Client</label>
<label class="col-md-2 control-label" for="client">{{:: 'client' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="text" id="client" name="client" data-ng-model="query.client">
</div>
</div>
<div class="form-group" data-ng-show="filter">
<label class="col-md-2 control-label" for="user">User</label>
<label class="col-md-2 control-label" for="user">{{:: 'user' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="text" id="user" name="user" data-ng-model="query.user">
</div>
</div>
<div class="form-group" data-ng-show="filter">
<label class="col-md-2 control-label" for="dateFrom">Date (From)</label>
<label class="col-md-2 control-label" for="dateFrom">{{:: 'date-(from)' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="text" id="dateFrom" name="dateFrom" data-ng-model="query.dateFrom" placeholder="yyyy-MM-dd">
</div>
</div>
<div class="form-group" data-ng-show="filter">
<label class="col-md-2 control-label" for="dateTo">Date (To)</label>
<label class="col-md-2 control-label" for="dateTo">{{:: 'date-(to)' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="text" id="dateTo" name="dateTo" data-ng-model="query.dateTo" placeholder="yyyy-MM-dd">
</div>
@ -66,9 +66,9 @@
</th>
</tr>
<tr>
<th width="100px">Time</th>
<th width="180px">Event Type</th>
<th>Details</th>
<th width="100px">{{:: 'time' | translate}}</th>
<th width="180px">{{:: 'event-type' | translate}}</th>
<th>{{:: 'details' | translate}}</th>
</tr>
</thead>
<tfoot>
@ -86,12 +86,12 @@
<td>{{event.type}}</td>
<td>
<table class="table table-striped table-bordered">
<tr><td width="100px">Client</td><td>{{event.clientId}}</td></tr>
<tr><td>User</td><td>{{event.userId}}</td></tr>
<tr><td>IP Address</td><td>{{event.ipAddress}}</td></tr>
<tr data-ng-show="event.error"><td>Error</td><td>{{event.error}}</td></tr>
<tr><td width="100px">{{:: 'client' | translate}}</td><td>{{event.clientId}}</td></tr>
<tr><td>{{:: 'user' | translate}}</td><td>{{event.userId}}</td></tr>
<tr><td>{{:: 'ip-address' | translate}}</td><td>{{event.ipAddress}}</td></tr>
<tr data-ng-show="event.error"><td>{{:: 'error' | translate}}</td><td>{{event.error}}</td></tr>
<tr>
<td>Details</td>
<td>{{:: 'details' | translate}}</td>
<td>
<button type="button" class="btn btn-default btn-xs" ng-click="event.collapse = !event.collapse">
<span class="glyphicon glyphicon-plus" data-ng-show="!event.collapse"></span>
@ -106,7 +106,7 @@
</td>
</tr>
<tr data-ng-show="event.representation">
<td>Representation</td>
<td>{{:: 'representation' | translate}}</td>
<td>
<button type="button" class="btn btn-default btn-xs" ng-click="collapseRep = !collapseRep">
<span class="glyphicon glyphicon-plus" data-ng-show="!collapseRep"></span>

View file

@ -23,20 +23,20 @@
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="smtpSSL">{{:: 'enable-ssl' | translate}}</label>
<div class="col-md-6">
<input ng-model="realm.smtpServer.ssl" name="smtpSSL" id="smtpSSL" onoffswitch onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
<input ng-model="realm.smtpServer.ssl" name="smtpSSL" id="smtpSSL" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="smtpStartTLS">{{:: 'enable-start-tls' | translate}}</label>
<div class="col-md-6">
<input ng-model="realm.smtpServer.starttls" name="smtpStartTLS" id="smtpStartTLS" onoffswitch onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
<input ng-model="realm.smtpServer.starttls" name="smtpStartTLS" id="smtpStartTLS" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="smtpAuth">{{:: 'enable-auth' | translate}}</label>
<div class="col-md-6">
<input ng-model="realm.smtpServer.auth" name="smtpAuth" id="smtpAuth" onoffswitch onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
<input ng-model="realm.smtpServer.auth" name="smtpAuth" id="smtpAuth" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
</div>
<div class="form-group clearfix" data-ng-show="realm.smtpServer.auth">

View file

@ -10,7 +10,7 @@
<select class="form-control" id="loginTheme"
ng-model="realm.loginTheme"
ng-options="o.name as o.name for o in serverInfo.themes.login">
<option value="" disabled selected>{{:: 'select-one' | translate}}</option>
<option value="" disabled selected>{{:: 'select-one.placeholder' | translate}}</option>
</select>
</div>
</div>
@ -23,7 +23,7 @@
<select class="form-control" id="accountTheme"
ng-model="realm.accountTheme"
ng-options="o.name as o.name for o in serverInfo.themes.account">
<option value="" disabled selected>{{:: 'select-one' | translate}}</option>
<option value="" disabled selected>{{:: 'select-one.placeholder' | translate}}</option>
</select>
</div>
</div>
@ -36,7 +36,7 @@
<select class="form-control" id="adminTheme"
ng-model="realm.adminTheme"
ng-options="o.name as o.name for o in serverInfo.themes.admin">
<option value="" disabled selected>{{:: 'select-one' | translate}}</option>
<option value="" disabled selected>{{:: 'select-one.placeholder' | translate}}</option>
</select>
</div>
</div>
@ -49,7 +49,7 @@
<select class="form-control" id="emailTheme"
ng-model="realm.emailTheme"
ng-options="o.name as o.name for o in serverInfo.themes.email">
<option value="" disabled selected>{{:: 'select-one' | translate}}</option>
<option value="" disabled selected>{{:: 'select-one.placeholder' | translate}}</option>
</select>
</div>
</div>
@ -79,7 +79,7 @@
ng-options="o as o for o in realm.supportedLocales"
ng-required="realm.internationalizationEnabled"
ng-disabled="!realm.internationalizationEnabled">
<option value="" disabled selected>{{:: 'select-one' | translate}}</option>
<option value="" disabled selected>{{:: 'select-one.placeholder' | translate}}</option>
</select>
</div>
</div>

View file

@ -1,5 +1,5 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>Authentication</h1>
<h1>{{:: 'authentication' | translate}}</h1>
<kc-tabs-authentication></kc-tabs-authentication>
<table class="table table-striped table-bordered">
@ -7,14 +7,14 @@
<tr data-ng-hide="unregisteredRequiredActions.length == 0">
<th colspan = "3" class="kc-table-actions">
<div class="pull-right" data-ng-show="access.manageRealm">
<button class="btn btn-default" data-ng-click="register()">Register</button>
<button class="btn btn-default" data-ng-click="register()">{{:: 'register' | translate}}</button>
</div>
</th>
</tr>
<tr data-ng-hide="requiredActions.length == 0">
<th>Required Action</th>
<th>Enabled</th>
<th>Default Action <i class="fa fa-question-circle text-muted" tooltip-trigger="mouseover mouseout" tooltip="If enabled, any new user will have this required action assigned to it." tooltip-placement="top"></i></th>
<th>{{:: 'required-action' | translate}}</th>
<th>{{:: 'enabled' | translate}}</th>
<th>{{:: 'default-action' | translate}} <i class="fa fa-question-circle text-muted" tooltip-trigger="mouseover mouseout" tooltip="{{:: 'auth.default-action.tooltip' | translate}}" tooltip-placement="top"></i></th>
</tr>
</thead>
<tbody>
@ -24,7 +24,7 @@
<td><input type="checkbox" ng-model="requiredAction.defaultAction" ng-change="updateRequiredAction(requiredAction)" id="{{requiredAction.alias}}.defaultAction"></td>
</tr>
<tr data-ng-show="requiredActions.length == 0">
<td>No required actions configured</td>
<td>{{:: 'no-required-actions-configured' | translate}}</td>
</tr>
</tbody>
</table>

View file

@ -1,20 +1,20 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/roles">Roles</a></li>
<li><a href="#/realms/{{realm.realm}}/roles">{{:: 'roles' | translate}}</a></li>
<li data-ng-hide="create">{{role.name}}</li>
<li data-ng-show="create">Add Role</li>
<li data-ng-show="create">{{:: 'add-role' | translate}}</li>
</ol>
<h1 data-ng-hide="create">{{role.name|capitalize}} <i id="removeRole" class="pficon pficon-delete clickable" data-ng-show="!create && access.manageRealm"
data-ng-hide="changed" data-ng-click="remove()"></i></h1>
<h1 data-ng-show="create">Add Role</h1>
<h1 data-ng-show="create">{{:: 'add-role' | translate}}</h1>
<form class="form-horizontal clearfix" name="realmForm" novalidate kc-read-only="!access.manageRealm">
<fieldset>
<legend><span class="text">Role</span></legend>
<legend><span class="text">{{:: 'role' | translate}}</span></legend>
<div class="form-group">
<label class="col-md-2 control-label" for="name"><span class="required" data-ng-show="create">*</span> Role name</label>
<label class="col-md-2 control-label" for="name"><span class="required" data-ng-show="create">*</span> {{:: 'role-name' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="text" id="name" name="name" data-ng-model="role.name" autofocus
@ -22,71 +22,71 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="description">Description </label>
<label class="col-md-2 control-label" for="description">{{:: 'description' | translate}} </label>
<div class="col-md-6">
<textarea class="form-control" rows="5" cols="50" id="description" name="description" data-ng-model="role.description"></textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="scopeParamRequired">Scope Param Required </label>
<kc-tooltip>This role will be granted just if scope parameter with role name is used during authorization/token request.</kc-tooltip>
<label class="col-md-2 control-label" for="scopeParamRequired">{{:: 'scope-param-required' | translate}} </label>
<kc-tooltip>{{:: 'scope-param-required.tooltip' | translate}}</kc-tooltip>
<div class="col-md-6">
<input ng-model="role.scopeParamRequired" name="scopeParamRequired" id="scopeParamRequired" onoffswitch />
<input ng-model="role.scopeParamRequired" name="scopeParamRequired" id="scopeParamRequired" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
</div>
<div class="form-group" data-ng-hide="create">
<label class="col-md-2 control-label" for="compositeSwitch" class="control-label">Composite Roles</label>
<label class="col-md-2 control-label" for="compositeSwitch" class="control-label">{{:: 'composite-roles' | translate}}</label>
<div class="col-md-6">
<input ng-model="compositeSwitch" name="compositeSwitch" id="compositeSwitch" ng-disabled="compositeSwitchDisabled" onoffswitch />
<input ng-model="compositeSwitch" name="compositeSwitch" id="compositeSwitch" ng-disabled="compositeSwitchDisabled" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>When this role is (un)assigned to a user any role associated with it will be (un)assigned implicitly.</kc-tooltip>
<kc-tooltip>{{:: 'composite-roles.tooltip' | translate}}</kc-tooltip>
</div>
</fieldset>
<div class="form-group">
<div class="col-md-10 col-md-offset-2" data-ng-show="create">
<button kc-save data-ng-show="changed">Save</button>
<button kc-cancel data-ng-click="cancel()" data-ng-show="changed">Cancel</button>
<button kc-save data-ng-show="changed">{{:: 'save' | translate}}</button>
<button kc-cancel data-ng-click="cancel()" data-ng-show="changed">{{:: 'cancel' | translate}}</button>
</div>
</div>
<div class="form-group">
<div class="col-md-10 col-md-offset-2" data-ng-show="!create && access.manageRealm">
<button kc-save data-ng-disabled="!changed">Save</button>
<button kc-reset data-ng-disabled="!changed">Cancel</button>
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
<button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
</div>
</div>
<fieldset data-ng-show="!create && (compositeSwitch || role.composite)">
<legend uncollapsed class="collapsible"><span class="text">Composite Roles</span> </legend>
<legend uncollapsed class="collapsible"><span class="text">{{:: 'composite-roles' | translate}}</span> </legend>
<div class="form-group">
<label class="col-md-2 control-label" class="control-label">Realm Roles</label>
<label class="col-md-2 control-label" class="control-label">{{:: 'realm-roles' | translate}}</label>
<div class="col-md-10">
<div class="row">
<div class="col-md-4">
<label class="control-label">Available Roles</label>
<kc-tooltip>Realm level roles associated with this composite role.</kc-tooltip>
<label class="control-label">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'composite.available-roles.tooltip' | translate}}</kc-tooltip>
<select id="available" class="form-control" multiple size="5"
ng-multiple="true"
ng-model="selectedRealmRoles"
ng-options="r.name for r in realmRoles | orderBy:'name'">
</select>
<button ng-disabled="selectedRealmRoles.length == 0" class="btn btn-default" type="submit" ng-click="addRealmRole()">
Add selected <i class="fa fa-angle-double-right"></i>
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
</button>
</div>
<div class="col-md-4">
<label class="control-label">Associated Roles</label>
<kc-tooltip>Realm level roles associated with this composite role.</kc-tooltip>
<label class="control-label">{{:: 'associated-roles' | translate}}</label>
<kc-tooltip>{{:: 'composite.associated-roles.tooltip' | translate}}</kc-tooltip>
<select id="assigned" class="form-control" multiple size=5
ng-multiple="true"
ng-model="selectedRealmMappings"
ng-options="r.name for r in realmMappings | orderBy:'name'">
</select>
<button ng-disabled="selectedRealmMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteRealmRole()">
<i class="fa fa-angle-double-left"></i> Remove selected
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
</button>
</div>
</div>
@ -95,37 +95,37 @@
<div class="form-group">
<label class="col-md-2 control-label" class="control-label">
<span>Client Roles</span>
<span>{{:: 'client-roles' | translate}}</span>
<select class="form-control" id="clients" name="clients" ng-change="changeClient()" ng-model="compositeClient" ng-options="a.clientId for a in clients" ng-disabled="false"></select>
</label>
<div class="col-md-10">
<div class="row" data-ng-hide="compositeClient">
<div class="col-md-4"><span class="text-muted">Select client to view roles for client</span></div>
<div class="col-md-4"><span class="text-muted">{{:: 'select-client-to-view-roles' | translate}}</span></div>
</div>
<div class="row" data-ng-show="compositeClient">
<div class="col-md-4">
<label class="control-label" for="available-client">Available Roles</label>
<kc-tooltip>Roles from this client that you can associate to this composite role.</kc-tooltip>
<label class="control-label" for="available-client">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'composite.available-roles-client.tooltip' | translate}}</kc-tooltip>
<select id="available-client" class="form-control" multiple size="5"
ng-multiple="true"
ng-model="selectedClientRoles"
ng-options="r.name for r in clientRoles | orderBy:'name'">
</select>
<button ng-disabled="selectedClientRoles.length == 0" class="btn btn-default" type="submit" ng-click="addClientRole()">
Add selected <i class="fa fa-angle-right"></i>
{{:: 'add-selected' | translate}} <i class="fa fa-angle-right"></i>
</button>
</div>
<div class="col-md-4">
<label class="control-label" for="assigned-client">Associated Roles</label>
<kc-tooltip>Client roles associated with this composite role.</kc-tooltip>
<label class="control-label" for="assigned-client">{{:: 'associated-roles' | translate}}</label>
<kc-tooltip>{{:: 'composite.associated-roles-client.tooltip' | translate}}</kc-tooltip>
<select id="assigned-client" class="form-control" multiple size=5
ng-multiple="true"
ng-model="selectedClientMappings"
ng-options="r.name for r in clientMappings | orderBy:'name'">
</select>
<button ng-disabled="selectedClientMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteClientRole()">
<i class="fa fa-angle-left"></i> Remove selected
<i class="fa fa-angle-left"></i> {{:: 'remove-selected' | translate}}
</button>
</div>
</div>

View file

@ -2,8 +2,8 @@
<h1>Roles</h1>
<ul class="nav nav-tabs">
<li class="active"><a href="#/realms/{{realm.realm}}/roles">Realm Roles</a></li>
<li><a href="#/realms/{{realm.realm}}/default-roles">Default Roles</a></li>
<li class="active"><a href="#/realms/{{realm.realm}}/roles">{{:: 'realm-roles' | translate}}</a></li>
<li><a href="#/realms/{{realm.realm}}/default-roles">{{:: 'default-roles' | translate}}</a></li>
</ul>
<table class="table table-striped table-bordered">
@ -13,7 +13,7 @@
<div class="form-inline">
<div class="form-group">
<div class="input-group">
<input type="text" placeholder="Search..." data-ng-model="searchQuery" class="form-control search" onkeyup="if(event.keyCode == 13){$(this).next('I').click();}">
<input type="text" placeholder="{{:: 'search.placeholder' | translate}}" data-ng-model="searchQuery" class="form-control search" onkeyup="if(event.keyCode == 13){$(this).next('I').click();}">
<div class="input-group-addon">
<i class="fa fa-search" type="submit"></i>
</div>
@ -21,33 +21,33 @@
</div>
<div class="pull-right" data-ng-show="access.manageRealm">
<a id="createRole" class="btn btn-default" href="#/create/role/{{realm.realm}}">Add Role</a>
<a id="createRole" class="btn btn-default" href="#/create/role/{{realm.realm}}">{{:: 'add-role' | translate}}</a>
</div>
</div>
</th>
</tr>
<tr data-ng-show="roles && roles.length > 0">
<th>Role Name</th>
<th>Composite</th>
<th>Description</th>
<th colspan="2">Actions</th>
<th>{{:: 'role-name' | translate}}</th>
<th>{{:: 'composite' | translate}}</th>
<th>{{:: 'description' | translate}}</th>
<th colspan="2">{{:: 'actions' | translate}}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="role in roles | orderBy:'name' | filter:{name: searchQuery}">
<td><a href="#/realms/{{realm.realm}}/roles/{{role.id}}">{{role.name}}</a></td>
<td>{{role.composite}}</td>
<td translate="{{role.composite}}"></td>
<td>{{role.description}}</td>
<td class="kc-action-cell">
<button class="btn btn-default btn-block btn-sm" kc-open="/realms/{{realm.realm}}/roles/{{role.id}}">Edit</button>
<button class="btn btn-default btn-block btn-sm" kc-open="/realms/{{realm.realm}}/roles/{{role.id}}">{{:: 'edit' | translate}}</button>
</td>
<td class="kc-action-cell">
<button class="btn btn-default btn-block btn-sm" data-ng-click="removeRole(role)">Delete</button>
<button class="btn btn-default btn-block btn-sm" data-ng-click="removeRole(role)">{{:: 'delete' | translate}}</button>
</td>
</tr>
<tr data-ng-show="(roles | filter:{name: searchQuery}).length == 0">
<td class="text-muted" colspan="3" data-ng-show="searchQuery">No results</td>
<td class="text-muted" colspan="3" data-ng-hide="searchQuery">No realm roles available</td>
<td class="text-muted" colspan="3" data-ng-show="searchQuery">{{:: 'no-results' | translate}}</td>
<td class="text-muted" colspan="3" data-ng-hide="searchQuery">{{:: 'no-realm-roles-available' | translate}}</td>
</tr>
</tbody>
</table>

View file

@ -1,6 +1,6 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/users">Users</a></li>
<li><a href="#/realms/{{realm.realm}}/users">{{:: 'users' | translate}}</a></li>
<li>{{user.username}}</li>
</ol>
@ -8,37 +8,37 @@
<form class="form-horizontal" name="realmForm" novalidate>
<div class="form-group" kc-read-only="!access.manageUsers">
<label class="col-md-2 control-label" class="control-label">Realm Roles</label>
<label class="col-md-2 control-label" class="control-label">{{:: 'realm-roles' | translate}}</label>
<div class="col-md-10">
<div class="row">
<div class="col-md-3">
<label class="control-label" for="available">Available Roles</label>
<label class="control-label" for="available">{{:: 'available-roles' | translate}}</label>
<select id="available" class="form-control" multiple size="5"
ng-multiple="true"
ng-model="selectedRealmRoles"
ng-options="r.name for r in realmRoles">
</select>
<button ng-disabled="selectedRealmRoles.length == 0" ng-disabled="c.length == 0" class="btn btn-default" type="submit" ng-click="addRealmRole()">
Add selected <i class="fa fa-angle-right"></i>
{{:: 'add-selected' | translate}} <i class="fa fa-angle-right"></i>
</button>
<kc-tooltip>Realm roles that can be assigned to the user.</kc-tooltip>
<kc-tooltip>{{:: 'user.add-selected.tooltip' | translate}}</kc-tooltip>
</div>
<div class="col-md-3">
<label class="control-label" for="assigned">Assigned Roles</label>
<kc-tooltip>Realm roles mapped to the user</kc-tooltip>
<label class="control-label" for="assigned">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'user.assigned-roles.tooltip' | translate}}</kc-tooltip>
<select id="assigned" class="form-control" multiple size=5
ng-multiple="true"
ng-model="selectedRealmMappings"
ng-options="r.name for r in realmMappings">
</select>
<button ng-disabled="selectedRealmMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteRealmRole()">
<i class="fa fa-angle-double-left"></i> Remove selected
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
</button>
</div>
<div class="col-md-3">
<label class="control-label" for="realm-composite">Effective Roles</label>
<kc-tooltip>All realm role mappings. Some roles here might be inherited from a mapped composite role.</kc-tooltip>
<label class="control-label" for="realm-composite">{{:: 'effective-roles' | translate}}</label>
<kc-tooltip>{{:: 'user.effective-roles.tooltip' | translate}}</kc-tooltip>
<select id="realm-composite" class="form-control" multiple size=5
disabled="true"
ng-model="dummymodel"
@ -51,40 +51,40 @@
<div class="form-group">
<label class="col-md-2 control-label" class="control-label">
<span>Client Roles</span>
<span>{{:: 'client-roles' | translate}}</span>
<select class="form-control" id="clients" name="clients" ng-change="changeClient()" ng-model="targetClient" ng-options="a.clientId for a in clients" ng-disabled="false"></select>
</label>
<div class="col-md-10" kc-read-only="!access.manageUsers">
<div class="row" data-ng-hide="targetClient">
<div class="col-md-4"><span class="text-muted">Select client to view roles for client</span></div>
<div class="col-md-4"><span class="text-muted">{{:: 'select-client-to-view-roles' | translate}}</span></div>
</div>
<div class="row" data-ng-show="targetClient">
<div class="col-md-3">
<label class="control-label" for="available-client">Available Roles</label>
<kc-tooltip>Assignable roles from this client.</kc-tooltip>
<label class="control-label" for="available-client">{{:: 'available-roles' | translate}}</label>
<kc-tooltip>{{:: 'user.available-roles.tooltip' | translate}}</kc-tooltip>
<select id="available-client" class="form-control" multiple size="5"
ng-multiple="true"
ng-model="selectedClientRoles"
ng-options="r.name for r in clientRoles">
</select>
<button ng-disabled="selectedClientRoles.length == 0" class="btn btn-default" type="submit" ng-click="addClientRole()">
Add selected <i class="fa fa-angle-double-right"></i>
{{:: 'add-selected' | translate}} <i class="fa fa-angle-double-right"></i>
</button>
</div>
<div class="col-md-3">
<label class="control-label" for="assigned-client">Assigned Roles</label>
<kc-tooltip>Role mappings for this client.</kc-tooltip>
<label class="control-label" for="assigned-client">{{:: 'assigned-roles' | translate}}</label>
<kc-tooltip>{{:: 'user.assigned-roles-client.tooltip' | translate}}</kc-tooltip>
<select id="assigned-client" class="form-control" multiple size=5
ng-multiple="true"
ng-model="selectedClientMappings"
ng-options="r.name for r in clientMappings">
</select>
<button ng-disabled="selectedClientMappings.length == 0" class="btn btn-default" type="submit" ng-click="deleteClientRole()">
<i class="fa fa-angle-double-left"></i> Remove selected
<i class="fa fa-angle-double-left"></i> {{:: 'remove-selected' | translate}}
</button>
</div>
<div class="col-md-3">
<label class="control-label" for="client-composite">Effective Roles <span tooltip-placement="right" tooltip-trigger="mouseover mouseout" tooltip="Role mappings for this client. Some roles here might be inherited from a mapped composite role." class="fa fa-info-circle"></span></label>
<label class="control-label" for="client-composite">{{:: 'effective-roles' | translate}} <span tooltip-placement="right" tooltip-trigger="mouseover mouseout" tooltip="{{:: 'user.effective-roles-client.tooltip' | translate}}" class="fa fa-info-circle"></span></label>
<select id="client-composite" class="form-control" multiple size=5
disabled="true"
ng-model="dummymodel"

View file

@ -1,12 +1,12 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>
Server Info
{{:: 'server-info' | translate}}
<i id="serverInfoReload" class="pficon pficon-restart clickable" data-ng-click="serverInfoReload()"></i>
</h1>
<ul class="nav nav-tabs">
<li><a href="#/server-info">Info</a></li>
<li class="active"><a href="#/server-info/providers">Providers</a></li>
<li><a href="#/server-info">{{:: 'info' | translate}}</a></li>
<li class="active"><a href="#/server-info/providers">{{:: 'providers' | translate}}</a></li>
</ul>
<table class="table table-striped table-bordered">
@ -16,15 +16,15 @@
<div class="form-inline">
<div class="form-group">
<div class="input-group">
<input type="text" placeholder="Search..." data-ng-model="search" class="form-control search" onkeyup="if(event.keyCode == 13){$(this).next('I').click();}">
<input type="text" placeholder="{{:: 'search.placeholder' | translate}}" data-ng-model="search" class="form-control search" onkeyup="if(event.keyCode == 13){$(this).next('I').click();}">
</div>
</div>
</div>
</th>
</tr>
<tr>
<th width="20%">SPI</th>
<th>Providers</th>
<th width="20%">{{:: 'spi' | translate}}</th>
<th>{{:: 'providers' | translate}}</th>
</tr>
</thead>
<tbody>

View file

@ -1,100 +1,100 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>
Server Info
{{:: 'server-info' | translate}}
<i id="serverInfoReload" class="pficon pficon-restart clickable" data-ng-click="serverInfoReload()"></i>
</h1>
<ul class="nav nav-tabs">
<li class="active"><a href="#/server-info">Info</a></li>
<li><a href="#/server-info/providers">Providers</a></li>
<li class="active"><a href="#/server-info">{{:: 'info' | translate}}</a></li>
<li><a href="#/server-info/providers">{{:: 'providers' | translate}}</a></li>
</ul>
<table class="table table-striped table-bordered">
<tr>
<td width="20%">Server Version</td>
<td width="20%">{{:: 'server-version' | translate}}</td>
<td>{{serverInfo.systemInfo.version}}</td>
</tr>
<tr>
<td>Server Time</td>
<td>{{:: 'server-time' | translate}}</td>
<td>{{serverInfo.systemInfo.serverTime}}</td>
</tr>
<tr>
<td>Server Uptime</td>
<td>{{:: 'server-uptime' | translate}}</td>
<td>{{serverInfo.systemInfo.uptime}}</td>
</tr>
</table>
<fieldset>
<legend>Memory</legend>
<legend>{{:: 'memory' | translate}}</legend>
<table class="table table-striped table-bordered" style="margin-top: 0;">
<tr>
<td width="20%">Total Memory</td>
<td width="20%">{{:: 'total-memory' | translate}}</td>
<td>{{serverInfo.memoryInfo.totalFormated}}</td>
</tr>
<tr>
<td>Free Memory</td>
<td>{{:: 'free-memory' | translate}}</td>
<td>{{serverInfo.memoryInfo.freeFormated}} ({{serverInfo.memoryInfo.freePercentage}}%)</td>
</tr>
<tr>
<td>Used Memory</td>
<td>{{:: 'used-memory' | translate}}</td>
<td>{{serverInfo.memoryInfo.usedFormated}}</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>System</legend>
<legend>{{:: 'system' | translate}}</legend>
<table class="table table-striped table-bordered" style="margin-top: 0;">
<tr>
<td width="20%">Current Working Directory</td>
<td width="20%">{{:: 'current-working-directory' | translate}}</td>
<td>{{serverInfo.systemInfo.userDir}}</td>
</tr>
<tr>
<td>Java Version</td>
<td>{{:: 'java-version' | translate}}</td>
<td>{{serverInfo.systemInfo.javaVersion}}</td>
</tr>
<tr>
<td>Java Vendor</td>
<td>{{:: 'java-vendor' | translate}}</td>
<td>{{serverInfo.systemInfo.javaVendor}}</td>
</tr>
<tr>
<td>Java Runtime</td>
<td>{{:: 'java-runtime' | translate}}</td>
<td>{{serverInfo.systemInfo.javaRuntime}}</td>
</tr>
<tr>
<td>Java VM</td>
<td>{{:: 'java-vm' | translate}}</td>
<td>{{serverInfo.systemInfo.javaVm}}</td>
</tr>
<tr>
<td>Java VM Version</td>
<td>{{:: 'java-vm-version' | translate}}</td>
<td>{{serverInfo.systemInfo.javaVmVersion}}</td>
</tr>
<tr>
<td>Java Home</td>
<td>{{:: 'java-home' | translate}}</td>
<td>{{serverInfo.systemInfo.javaHome}}</td>
</tr>
<tr>
<td>User Name</td>
<td>{{:: 'user-name' | translate}}</td>
<td>{{serverInfo.systemInfo.userName}}</td>
</tr>
<tr>
<td>User Timezone</td>
<td>{{:: 'user-timezone' | translate}}</td>
<td>{{serverInfo.systemInfo.userTimezone}}</td>
</tr>
<tr>
<td>User Locale</td>
<td>{{:: 'user-locale' | translate}}</td>
<td>{{serverInfo.systemInfo.userLocale}}</td>
</tr>
<tr>
<td>System Encoding</td>
<td>{{:: 'system-encoding' | translate}}</td>
<td>{{serverInfo.systemInfo.fileEncoding}}</td>
</tr>
<tr>
<td>Operating System</td>
<td>{{:: 'operating-system' | translate}}</td>
<td>{{serverInfo.systemInfo.osName}} {{serverInfo.systemInfo.osVersion}}</td>
</tr>
<tr>
<td>OS Architecture</td>
<td>{{:: 'os-architecture' | translate}}</td>
<td>{{serverInfo.systemInfo.osArchitecture}}</td>
</tr>
</table>

View file

@ -1,6 +1,6 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/users">Users</a></li>
<li><a href="#/realms/{{realm.realm}}/users">{{:: 'users' | translate}}</a></li>
<li>{{user.username}}</li>
</ol>
@ -10,9 +10,9 @@
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Key</th>
<th>Value</th>
<th>Actions</th>
<th>{{:: 'key' | translate}}</th>
<th>{{:: 'value' | translate}}</th>
<th>{{:: 'actions' | translate}}</th>
</tr>
</thead>
<tbody>
@ -20,14 +20,14 @@
<td>{{key}}</td>
<td><input ng-model="user.attributes[key]" class="form-control" type="text" name="{{key}}" id="attribute-{{key}}" /></td>
<td class="kc-action-cell">
<button type="button" class="btn btn-default btn-block btn-sm" data-ng-click="removeAttribute(key)">Delete</button>
<button type="button" class="btn btn-default btn-block btn-sm" data-ng-click="removeAttribute(key)">{{:: 'delete' | translate}}</button>
</td>
</tr>
<tr>
<td><input ng-model="newAttribute.key" class="form-control" type="text" id="newAttributeKey" /></td>
<td><input ng-model="newAttribute.value" class="form-control" type="text" id="newAttributeValue" /></td>
<td class="kc-action-cell">
<button class="btn btn-default btn-block btn-sm" data-ng-click="addAttribute()" data-ng-disabled="!newAttribute.key.length || !newAttribute.value.length">Add</button>
<button class="btn btn-default btn-block btn-sm" data-ng-click="addAttribute()" data-ng-disabled="!newAttribute.key.length || !newAttribute.value.length">{{:: 'add' | translate}}</button>
</td>
</tr>
</tbody>
@ -35,8 +35,8 @@
<div class="form-group" data-ng-show="access.manageUsers">
<div class="col-md-12">
<button kc-save data-ng-disabled="!changed">Save</button>
<button kc-reset data-ng-disabled="!changed">Cancel</button>
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
<button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
</div>
</div>
</form>

View file

@ -1,6 +1,6 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/users">Users</a></li>
<li><a href="#/realms/{{realm.realm}}/users">{{:: 'users' | translate}}</a></li>
<li>{{user.username}}</li>
</ol>
@ -9,11 +9,11 @@
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Client</th>
<th>Granted Roles</th>
<th>Granted Protocol Mappers</th>
<th>Additional Grants</th>
<th>Action</th>
<th>{{:: 'client' | translate}}</th>
<th>{{:: 'granted-roles' | translate}}</th>
<th>{{:: 'granted-protocol-mappers' | translate}}</th>
<th>{{:: 'additional-grants' | translate}}</th>
<th>{{:: 'action' | translate}}</th>
</tr>
</thead>
<tbody>
@ -43,7 +43,7 @@
</td>
<td class="kc-action-cell">
<button class="btn btn-default btn-block btn-sm" ng-click="revokeConsent(consent.clientId)">
<i class="pficon pficon-delete"></i> Revoke
<i class="pficon pficon-delete"></i> {{:: 'revoke' | translate}}
</button>
</td>
</tr>

View file

@ -1,6 +1,6 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/users">Users</a></li>
<li><a href="#/realms/{{realm.realm}}/users">{{:: 'users' | translate}}</a></li>
<li>{{user.username}}</li>
</ol>
@ -9,60 +9,60 @@
<form class="form-horizontal" name="userForm" novalidate>
<fieldset class="border-top">
<div class="form-group">
<label class="col-md-2 control-label" for="password">New password <span class="required" data-ng-show="create">*</span></label>
<label class="col-md-2 control-label" for="password">{{:: 'new-password' | translate}} <span class="required" data-ng-show="create">*</span></label>
<div class="col-md-6">
<input class="form-control" type="password" id="password" name="password" data-ng-model="password" required>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="confirmPassword">Password confirmation <span class="required" data-ng-show="create">*</span></label>
<label class="col-md-2 control-label" for="confirmPassword">{{:: 'password-confirmation' | translate}} <span class="required" data-ng-show="create">*</span></label>
<div class="col-md-6">
<input class="form-control" type="password" id="confirmPassword" name="confirmPassword" data-ng-model="confirmPassword" required>
</div>
</div>
<div class="form-group clearfix block">
<label class="col-md-2 control-label" for="temporaryPassword">Temporary</label>
<label class="col-md-2 control-label" for="temporaryPassword">{{:: 'temporary' | translate}}</label>
<div class="col-sm-6">
<input ng-model="temporaryPassword" name="temporaryPassword" id="temporaryPassword" onoffswitch />
<input ng-model="temporaryPassword" name="temporaryPassword" id="temporaryPassword" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}" />
</div>
<kc-tooltip>If enabled user is required to change password on next login</kc-tooltip>
<kc-tooltip>{{:: 'credentials.temporary.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group">
<div class="col-md-10 col-md-offset-2" data-ng-show="password && confirmPassword">
<button class="btn btn-danger" type="submit" data-ng-click="resetPassword(true)">Reset Password</button>
<button class="btn btn-danger" type="submit" data-ng-click="resetPassword(true)">{{:: 'reset-password' | translate}}</button>
</div>
</div>
</fieldset>
<fieldset class="border-top" data-ng-show="user.totp">
<div class="form-group" data-ng-show="user.totp">
<label class="col-md-2 control-label">Remove totp</label>
<label class="col-md-2 control-label">{{:: 'remove-totp' | translate}}</label>
<div class="col-sm-5" data-ng-show="user.totp">
<button class="btn btn-danger" type="submit" data-ng-click="removeTotp()" tooltip-trigger="mouseover mouseout" tooltip="Remove one time password generator for user." tooltip-placement="right">Remove TOTP</button>
<button class="btn btn-danger" type="submit" data-ng-click="removeTotp()" tooltip-trigger="mouseover mouseout" tooltip="{{:: 'credentials.remove-totp.tooltip' | translate}}" tooltip-placement="right">{{:: 'remove-totp' | translate}}</button>
</div>
</div>
</fieldset >
<fieldset class="border-top" data-ng-show="user.email">
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="reqActions">Reset Actions</label>
<label class="col-md-2 control-label" for="reqActions">{{:: 'reset-actions' | translate}}</label>
<div class="col-md-6">
<select ui-select2 id="reqActions" ng-model="emailActions" data-placeholder="Select an action..." multiple>
<select ui-select2 id="reqActions" ng-model="emailActions" data-placeholder="{{:: 'select-an-action.placeholder' | translate}}" multiple>
<option ng-repeat="action in userReqActionList" value="{{action.alias}}">{{action.name}}</option>
</select>
</div>
<kc-tooltip>Set of actions to execute when sending the user a Reset Actions Email. 'Verify email' sends an email to the user to verify their email address. 'Update profile' requires user to enter in new personal information. 'Update password' requires user to enter in a new password. 'Configure TOTP' requires setup of a mobile password generator.</kc-tooltip>
<kc-tooltip>{{:: 'credentials.reset-actions.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="reqActionsEmail">Reset Actions Email</label>
<label class="col-md-2 control-label" for="reqActionsEmail">{{:: 'reset-actions-email' | translate}}</label>
<div class="col-md-6">
<button id="reqActionsEmail" class="btn btn-default" data-ng-click="sendExecuteActionsEmail()">Send Email</button>
<button id="reqActionsEmail" class="btn btn-default" data-ng-click="sendExecuteActionsEmail()">{{:: 'send-email' | translate}}</button>
</div>
<kc-tooltip>Sends an email to user with an embedded link. Clicking on link will allow the user to execute the reset actions. They will not have to login prior to this. For example, set the action to update password, click this button, and the user will be able to change their password without logging in.</kc-tooltip>
<kc-tooltip>{{:: 'credentials.reset-actions-email.tooltip' | translate}}</kc-tooltip>
</div>
</fieldset>
</form>

View file

@ -1,8 +1,8 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/users">Users</a></li>
<li><a href="#/realms/{{realm.realm}}/users">{{:: 'users' | translate}}</a></li>
<li data-ng-hide="create">{{user.username}}</li>
<li data-ng-show="create">Add User</li>
<li data-ng-show="create">{{:: 'add-user' | translate}}</li>
</ol>
<kc-tabs-user></kc-tabs-user>
@ -11,21 +11,21 @@
<fieldset class="border-top">
<div class="form-group">
<label class="col-md-2 control-label"for="id">ID</label>
<label class="col-md-2 control-label"for="id">{{:: 'id' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="text" id="id" name="id" data-ng-model="user.id" autofocus data-ng-readonly="true">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"for="id">Created at</label>
<label class="col-md-2 control-label"for="id">{{:: 'created-at' | translate}}</label>
<div class="col-md-6">
{{user.createdTimestamp|date:'shortDate'}}&nbsp;{{user.createdTimestamp|date:'mediumTime'}}
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"for="username">Username <span class="required" data-ng-show="create">*</span></label>
<label class="col-md-2 control-label"for="username">{{:: 'username' | translate}} <span class="required" data-ng-show="create">*</span></label>
<div class="col-md-6">
<!-- Characters >,<,/,\ are forbidden in username -->
<input class="form-control" type="text" id="username" name="username" data-ng-model="user.username" autofocus
@ -35,7 +35,7 @@
<div class="form-group">
<label class="col-md-2 control-label" for="email">Email</label>
<label class="col-md-2 control-label" for="email">{{:: 'email' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="email" name="email" id="email"
@ -43,7 +43,7 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="firstName">First Name</label>
<label class="col-md-2 control-label" for="firstName">{{:: 'first-name' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="text" name="firstName" id="firstName"
@ -51,7 +51,7 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="lastName">Last Name</label>
<label class="col-md-2 control-label" for="lastName">{{:: 'last-name' | translate}}</label>
<div class="col-md-6">
<input class="form-control" type="text" name="lastName" id="lastName"
@ -60,79 +60,79 @@
</div>
<div class="form-group clearfix block">
<label class="col-md-2 control-label" for="userEnabled">User Enabled</label>
<label class="col-md-2 control-label" for="userEnabled">{{:: 'user-enabled' | translate}}</label>
<div class="col-md-6">
<input ng-model="user.enabled" name="userEnabled" id="userEnabled" ng-disabled="!access.manageUsers" onoffswitch />
<input ng-model="user.enabled" name="userEnabled" id="userEnabled" ng-disabled="!access.manageUsers" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
<kc-tooltip>A disabled user cannot login.</kc-tooltip>
<kc-tooltip>{{:: 'user-enabled.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix block" data-ng-show="realm.bruteForceProtected && !create">
<label class="col-md-2 control-label" for="temporarilyDisabled">User Temporarily Locked</label>
<label class="col-md-2 control-label" for="temporarilyDisabled">{{:: 'user-temporarily-locked' | translate}}</label>
<div class="col-md-1">
<input ng-model="temporarilyDisabled" name="temporarilyDisabled" id="temporarilyDisabled" data-ng-readonly="true" data-ng-disabled="true" onoffswitch />
<input ng-model="temporarilyDisabled" name="temporarilyDisabled" id="temporarilyDisabled" data-ng-readonly="true" data-ng-disabled="true" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
<kc-tooltip>The user may have been locked due to failing to login too many times.</kc-tooltip>
<kc-tooltip>{{:: 'user-temporarily-locked.tooltip' | translate}}</kc-tooltip>
<div class="col-sm-2">
<button type="submit" data-ng-click="unlockUser()" data-ng-show="temporarilyDisabled" class="btn btn-default">Unlock User</button>
<button type="submit" data-ng-click="unlockUser()" data-ng-show="temporarilyDisabled" class="btn btn-default">{{:: 'unlock-user' | translate}}</button>
</div>
</div>
<div class="form-group clearfix block" data-ng-show="!create && user.federationLink">
<label class="col-md-2 control-label" for="userEnabled">Federation Link</label>
<label class="col-md-2 control-label" for="userEnabled">{{:: 'federation-link' | translate}}</label>
<div class="col-md-6">
<a href="{{federationLink}}">{{federationLinkName}}</a>
</div>
</div>
<div class="form-group clearfix block">
<label class="col-md-2 control-label" for="emailVerified">Email verified</label>
<label class="col-md-2 control-label" for="emailVerified">{{:: 'email-verified' | translate}}</label>
<div class="col-md-6">
<input ng-model="user.emailVerified" name="emailVerified" id="emailVerified" ng-disabled="!access.manageUsers" onoffswitch />
<input ng-model="user.emailVerified" name="emailVerified" id="emailVerified" ng-disabled="!access.manageUsers" onoffswitch on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
<kc-tooltip>Has the user's email been verified?</kc-tooltip>
<kc-tooltip>{{:: 'email-verified.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="reqActions">Required User Actions</label>
<label class="col-md-2 control-label" for="reqActions">{{:: 'required-user-actions' | translate}}</label>
<div class="col-md-6">
<select ui-select2 id="reqActions" ng-model="user.requiredActions" data-placeholder="Select an action..." multiple>
<select ui-select2 id="reqActions" ng-model="user.requiredActions" data-placeholder="{{:: 'select-an-action.placeholder' | translate}}" multiple>
<option ng-repeat="action in userReqActionList" value="{{action.alias}}">{{action.name}}</option>
</select>
</div>
<kc-tooltip>Require an action when the user logs in. 'Verify email' sends an email to the user to verify their email address. 'Update profile' requires user to enter in new personal information. 'Update password' requires user to enter in a new password. 'Configure TOTP' requires setup of a mobile password generator.</kc-tooltip>
<kc-tooltip>{{:: 'required-user-actions.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix" data-ng-if="realm.internationalizationEnabled">
<label class="col-md-2 control-label" for="locale">Locale</label>
<label class="col-md-2 control-label" for="locale">{{:: 'locale' | translate}}</label>
<div class="col-md-6">
<div>
<select class="form-control" id="locale"
ng-model="user.attributes.locale"
ng-options="o as o for o in realm.supportedLocales">
<option value="" disabled selected>Select one...</option>
<option value="" disabled selected>{{:: 'select-one.placeholder' | translate}}</option>
</select>
</div>
</div>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="impersonate">Impersonate user</label>
<label class="col-md-2 control-label" for="impersonate">{{:: 'impersonate-user' | translate}}</label>
<div class="col-md-6">
<button id="impersonate" data-ng-show="access.impersonation" class="btn btn-default" data-ng-click="impersonate()">Impersonate</button>
<button id="impersonate" data-ng-show="access.impersonation" class="btn btn-default" data-ng-click="impersonate()">{{:: 'impersonate' | translate}}</button>
</div>
<kc-tooltip>Login as this user. If user is in same realm as you, your current login session will be logged out before you are logged in as this user.</kc-tooltip>
<kc-tooltip>{{:: 'impersonate-user.tooltip' | translate}}</kc-tooltip>
</div>
</fieldset>
<div class="form-group">
<div class="col-md-10 col-md-offset-2" data-ng-show="create && access.manageUsers">
<button kc-save data-ng-show="changed">Save</button>
<button kc-cancel data-ng-click="cancel()">Cancel</button>
<button kc-save data-ng-show="changed">{{:: 'save' | translate}}</button>
<button kc-cancel data-ng-click="cancel()">{{:: 'cancel' | translate}}</button>
</div>
<div class="col-md-10 col-md-offset-2" data-ng-show="!create && access.manageUsers">
<button kc-save data-ng-disabled="!changed">Save</button>
<button kc-reset data-ng-disabled="!changed">Cancel</button>
<button kc-save data-ng-disabled="!changed">{{:: 'save' | translate}}</button>
<button kc-reset data-ng-disabled="!changed">{{:: 'cancel' | translate}}</button>
</div>
</div>

View file

@ -1,17 +1,17 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/users">Users</a></li>
<li><a href="#/realms/{{realm.realm}}/users">{{:: 'users' | translate}}</a></li>
<li>{{user.username}}</li>
</ol>
<h1 data-ng-show="create">Add Identity Provider Link</h1>
<h1 data-ng-show="create">{{:: 'add-identity-provider-link' | translate}}</h1>
<kc-tabs-user></kc-tabs-user>
<form class="form-horizontal" name="realmForm" novalidate kc-read-only="!access.manageRealm">
<fieldset>
<div class="form-group">
<label class="col-md-2 control-label" for="identityProvider">Identity Provier <span class="required">*</span></label>
<label class="col-md-2 control-label" for="identityProvider">{{:: 'identity-provider' | translate}} <span class="required">*</span></label>
<div class="col-sm-6">
<div>
<select class="form-control" id="identityProvider"
@ -23,18 +23,18 @@
</div>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="userId">Identity Provider User ID <span class="required">*</span></label>
<label class="col-md-2 control-label" for="userId">{{:: 'identity-provider-user-id' | translate}} <span class="required">*</span></label>
<div class="col-md-6">
<input class="form-control" id="userId" type="text" ng-model="federatedIdentity.userId" required>
</div>
<kc-tooltip>Unique ID of the user on the Identity Provider side</kc-tooltip>
<kc-tooltip>{{:: 'identity-provider-user-id.tooltip' | translate}}</kc-tooltip>
</div>
<div class="form-group clearfix">
<label class="col-md-2 control-label" for="userName">Identity Provider Username <span class="required">*</span></label>
<label class="col-md-2 control-label" for="userName">{{:: 'identity-provider-username' | translate}} <span class="required">*</span></label>
<div class="col-md-6">
<input class="form-control" id="userName" type="text" ng-model="federatedIdentity.userName" required>
</div>
<kc-tooltip>Username on the Identity Provider side</kc-tooltip>
<kc-tooltip>{{:: 'identity-provider-username.tooltip' | translate}}</kc-tooltip>
</div>
</fieldset>
@ -42,8 +42,8 @@
<div class="form-group" data-ng-show="access.manageRealm">
<div class="col-md-10 col-md-offset-2">
<button kc-save>Save</button>
<button kc-cancel data-ng-click="cancel()">Cancel</button>
<button kc-save>{{:: 'save' | translate}}</button>
<button kc-cancel data-ng-click="cancel()">{{:: 'cancel' | translate}}</button>
</div>
</div>

View file

@ -1,6 +1,6 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/users">Users</a></li>
<li><a href="#/realms/{{realm.realm}}/users">{{:: 'users' | translate}}</a></li>
<li>{{user.username}}</li>
</ol>
@ -12,16 +12,16 @@
<th class="kc-table-actions" colspan="4">
<div class="form-inline">
<div class="pull-right">
<a class="btn btn-primary" href="#/create/federated-identity/{{realm.realm}}/{{user.id}}">Create</a>
<a class="btn btn-primary" href="#/create/federated-identity/{{realm.realm}}/{{user.id}}">{{:: 'create' | translate}}</a>
</div>
</div>
</th>
</tr>
<tr data-ng-hide="federatedIdentities.length == 0">
<th>Identity Provider Alias</th>
<th>Provider user ID</th>
<th>Provider username</th>
<th>Action</th>
<th>{{:: 'identity-provider-alias' | translate}}</th>
<th>{{:: 'provider-user-id' | translate}}</th>
<th>{{:: 'provider-username' | translate}}</th>
<th>{{:: 'action' | translate}}</th>
</tr>
</thead>
<tbody>
@ -30,11 +30,11 @@
<td>{{identity.userId}}</td>
<td>{{identity.userName}}</td>
<td class="kc-action-cell">
<button class="btn btn-default btn-block btn-sm" ng-click="removeProviderLink(identity)">Remove</button>
<button class="btn btn-default btn-block btn-sm" ng-click="removeProviderLink(identity)">{{:: 'remove' | translate}}</button>
</td>
</tr>
<tr data-ng-show="federatedIdentities.length == 0">
<td>No identity provider links available</td>
<td>{{:: 'no-identity-provider-links-available' | translate}}</td>
</tr>
</tbody>
</table>

View file

@ -1,6 +1,6 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>
<span>User Federation</span>
<span>{{:: 'user-federation' | translate}}</span>
</h1>
<table class="table table-striped table-bordered">
@ -12,17 +12,17 @@
<select class="form-control" ng-model="selectedProvider"
ng-options="p.id for p in providers"
data-ng-change="addProvider(selectedProvider); selectedProvider = null">
<option value="" disabled selected>Add provider...</option>
<option value="" disabled selected>{{:: 'add-provider.placeholder' | translate}}</option>
</select>
</div>
</div>
</th>
</tr>
<tr data-ng-show="instances && instances.length > 0">
<th>ID</th>
<th>Provider Name</th>
<th>Priority</th>
<th colspan="2">Actions</th>
<th>{{:: 'id' | translate}}</th>
<th>{{:: 'provider-name' | translate}}</th>
<th>{{:: 'priority' | translate}}</th>
<th colspan="2">{{:: 'actions' | translate}}</th>
</tr>
</thead>
<tbody>
@ -31,14 +31,14 @@
<td>{{instance.providerName|capitalize}}</td>
<td>{{instance.priority}}</td>
<td class="kc-action-cell">
<button class="btn btn-default btn-block btn-sm" kc-open="/realms/{{realm.realm}}/user-federation/providers/{{instance.providerName}}/{{instance.id}}">Edit</button>
<button class="btn btn-default btn-block btn-sm" kc-open="/realms/{{realm.realm}}/user-federation/providers/{{instance.providerName}}/{{instance.id}}">{{:: 'edit' | translate}}</button>
</td>
<td class="kc-action-cell">
<button class="btn btn-default btn-block btn-sm" data-ng-click="removeUserFederation(instance)">Delete</button>
<button class="btn btn-default btn-block btn-sm" data-ng-click="removeUserFederation(instance)">{{:: 'delete' | translate}}</button>
</td>
</tr>
<tr data-ng-show="!instances || instances.length == 0">
<td class="text-muted">No user federation providers configured</td>
<td class="text-muted">{{:: 'no-user-federation-providers-configured' | translate}}</td>
</tr>
</tbody>
</table>

View file

@ -1,6 +1,6 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/users">Users</a></li>
<li><a href="#/realms/{{realm.realm}}/users">{{:: 'users' | translate}}</a></li>
<li>{{user.username}}</li>
</ol>
@ -18,11 +18,11 @@
<tr>
<th class="kc-table-actions" colspan="5">
<div class="form-inline">
<label class="control-label">Group Membership</label>
<kc-tooltip>Groups user is a member of. Select a listed group and click the Leave button to leave the group.</kc-tooltip>
<label class="control-label">{{:: 'group-membership' | translate}}</label>
<kc-tooltip>{{:: 'group-membership.tooltip' | translate}}</kc-tooltip>
<div class="pull-right" data-ng-show="access.manageUsers">
<button id="leaveGroups" class="btn btn-default" ng-click="leaveGroup()">Leave</button>
<button id="leaveGroups" class="btn btn-default" ng-click="leaveGroup()">{{:: 'leave' | translate}}</button>
</div>
</div>
</th>
@ -34,7 +34,7 @@
<select id="groupMembership" class="form-control" size=5
ng-model="selectedGroup"
ng-options="r.path for r in groupMemberships">
<option style="display:none" value="">select a type</option>
<option style="display:none" value="">{{:: 'select-a-type.placeholder' | translate}}</option>
</select>
@ -50,11 +50,11 @@
<th class="kc-table-actions" colspan="5">
<div class="form-inline">
<label class="control-label">Available Groups</label>
<kc-tooltip>Groups a user can join. Select a group and click the join button.</kc-tooltip>
<label class="control-label">{{:: 'available-groups' | translate}}</label>
<kc-tooltip>{{:: 'membership.available-groups.tooltip' | translate}}</kc-tooltip>
<div class="pull-right" data-ng-show="access.manageUsers">
<button id="joinGroup" class="btn btn-default" ng-click="joinGroup()">Join</button>
<button id="joinGroup" class="btn btn-default" ng-click="joinGroup()">{{:: 'join' | translate}}</button>
</div>
</div>
</th>

View file

@ -1,37 +1,37 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<h1>Users</h1>
<h1>{{:: 'users' | translate}}</h1>
<table class="table table-striped table-bordered">
<caption data-ng-show="users" class="hidden">Table of realm users</caption>
<caption data-ng-show="users" class="hidden">{{:: 'table-of-realm-users' | translate}}</caption>
<thead>
<tr>
<th colspan="{{access.impersonation == true ? '8' : '7'}}">
<div class="form-inline">
<div class="form-group">
<div class="input-group">
<input type="text" placeholder="Search..." data-ng-model="query.search" class="form-control search" onkeydown="if (event.keyCode == 13) document.getElementById('userSearch').click()">
<input type="text" placeholder="{{:: 'search.placeholder' | translate}}" data-ng-model="query.search" class="form-control search" onkeydown="if (event.keyCode == 13) document.getElementById('userSearch').click()">
<div class="input-group-addon">
<i class="fa fa-search" id="userSearch" data-ng-click="firstPage()"></i>
</div>
</div>
</div>
<button id="viewAllUsers" class="btn btn-default" ng-click="query.search = null; firstPage()">View all users</button>
<button id="viewAllUsers" class="btn btn-default" ng-click="query.search = null; firstPage()">{{:: 'view-all-users' | translate}}</button>
<div class="pull-right" data-ng-show="access.manageUsers">
<button data-ng-click="unlockUsers()" class="btn btn-default">Unlock Users</button>
<a id="createUser" class="btn btn-default" href="#/create/user/{{realm.realm}}">Add User</a>
<button data-ng-click="unlockUsers()" class="btn btn-default">{{:: 'unlock-users' | translate}}</button>
<a id="createUser" class="btn btn-default" href="#/create/user/{{realm.realm}}">{{:: 'add-user' | translate}}</a>
</div>
</div>
</th>
</tr>
<tr>
<tr data-ng-show="searchLoaded && users.length > 0">
<th class="w-15">ID</th>
<th class="w-15">Username</th>
<th class="w-15">Email</th>
<th class="w-15">Last Name</th>
<th class="w-15">First Name</th>
<th colspan="{{access.impersonation == true ? '3' : '2'}}">Actions</th>
<th class="w-15">{{:: 'id' | translate}}</th>
<th class="w-15">{{:: 'username' | translate}}</th>
<th class="w-15">{{:: 'email' | translate}}</th>
<th class="w-15">{{:: 'last-name' | translate}}</th>
<th class="w-15">{{:: 'first-name' | translate}}</th>
<th colspan="{{access.impersonation == true ? '3' : '2'}}">{{:: 'actions' | translate}}</th>
</tr>
</tr>
</thead>
@ -39,9 +39,9 @@
<tr>
<td colspan="7">
<div class="table-nav">
<button data-ng-click="firstPage()" class="first" ng-disabled="query.first == 0">First page</button>
<button data-ng-click="previousPage()" class="prev" ng-disabled="query.first == 0">Previous page</button>
<button data-ng-click="nextPage()" class="next" ng-disabled="users.length < query.max">Next page</button>
<button data-ng-click="firstPage()" class="first" ng-disabled="query.first == 0">{{:: 'first-page' | translate}}</button>
<button data-ng-click="previousPage()" class="prev" ng-disabled="query.first == 0">{{:: 'previous-page' | translate}}</button>
<button data-ng-click="nextPage()" class="next" ng-disabled="users.length < query.max">{{:: 'next-page' | translate}}</button>
</div>
</td>
</tr>
@ -54,19 +54,19 @@
<td class="clip">{{user.lastName}}</td>
<td class="clip">{{user.firstName}}</td>
<td class="kc-action-cell">
<button class="btn btn-default btn-block btn-sm" kc-open="/realms/{{realm.realm}}/users/{{user.id}}">Edit</button>
<button class="btn btn-default btn-block btn-sm" kc-open="/realms/{{realm.realm}}/users/{{user.id}}">{{:: 'edit' | translate}}</button>
</td>
<td data-ng-show="access.impersonation" class="kc-action-cell">
<button class="btn btn-default btn-block btn-sm" data-ng-click="impersonate(user.id)">Impersonate</button>
<button class="btn btn-default btn-block btn-sm" data-ng-click="impersonate(user.id)">{{:: 'impersonate' | translate}}</button>
</td>
<td data-ng-show="access.manageUsers" class="kc-action-cell">
<button class="btn btn-default btn-block btn-sm" data-ng-click="removeUser(user)">Delete</button>
<button class="btn btn-default btn-block btn-sm" data-ng-click="removeUser(user)">{{:: 'delete' | translate}}</button>
</td>
</tr>
<tr data-ng-show="!users || users.length == 0">
<td class="text-muted" data-ng-show="!users">Please enter a search, or click on view all users</td>
<td class="text-muted" data-ng-show="searchLoaded && users.length == 0 && lastSearch != null">No results</td>
<td class="text-muted" data-ng-show="searchLoaded && users.length == 0 && lastSearch == null">No users available</td>
<td class="text-muted" data-ng-show="!users">{{:: 'users.instruction' | translate}}</td>
<td class="text-muted" data-ng-show="searchLoaded && users.length == 0 && lastSearch != null">{{:: 'no-results' | translate}}</td>
<td class="text-muted" data-ng-show="searchLoaded && users.length == 0 && lastSearch == null">{{:: 'no-users-available' | translate}}</td>
</tr>
</tbody>
</table>

View file

@ -1,8 +1,8 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/users">Users</a></li>
<li><a href="#/realms/{{realm.realm}}/users">{{:: 'users' | translate}}</a></li>
<li><a href="#/realms/{{realm.realm}}/users/{{user.id}}">{{user.username}}</a></li>
<li><a href="#/realms/{{realm.realm}}/users/{{user.id}}/consents">consents</a></li>
<li><a href="#/realms/{{realm.realm}}/users/{{user.id}}/consents">{{:: 'consents' | translate}}</a></li>
<li>{{client.clientId}}</li>
</ol>
@ -11,9 +11,9 @@
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>IP Address</th>
<th>Started</th>
<th>Last Refresh</th>
<th>{{:: 'ip-address' | translate}}</th>
<th>{{:: 'started' | translate}}</th>
<th>{{:: 'last-refresh' | translate}}</th>
</tr>
</thead>
<tbody>
@ -27,7 +27,7 @@
<div class="form-group">
<div class="col-md-10 col-md-offset-2">
<button kc-cancel data-ng-click="cancel()">Back</button>
<button kc-cancel data-ng-click="cancel()">{{:: 'back' | translate}}</button>
</div>
</div>
</div>

View file

@ -1,6 +1,6 @@
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
<ol class="breadcrumb">
<li><a href="#/realms/{{realm.realm}}/users">Users</a></li>
<li><a href="#/realms/{{realm.realm}}/users">{{:: 'users' | translate}}</a></li>
<li>{{user.username}}</li>
</ol>
@ -11,16 +11,16 @@
<tr data-ng-show="access.manageUsers">
<th class="kc-table-actions" colspan="6">
<div class="pull-right" data-ng-show="access.manageUsers">
<a id="logoutAllSessions" class="btn btn-default" ng-click="logoutAll()">Logout All Sessions</a>
<a id="logoutAllSessions" class="btn btn-default" ng-click="logoutAll()">{{:: 'logout-all-sessions' | translate}}</a>
</div>
</th>
</tr>
<tr>
<th>IP Address</th>
<th>Started</th>
<th>Last Access</th>
<th>{{:: 'ip-address' | translate}}</th>
<th>{{:: 'started' | translate}}</th>
<th>{{:: 'last-access' | translate}}</th>
<th>{{:: 'clients' | translate}}</th>
<th data-ng-show="access.manageUsers">Action</th>
<th data-ng-show="access.manageUsers">{{:: 'action' | translate}}</th>
</tr>
</thead>
<tbody>
@ -35,7 +35,7 @@
</ul>
</td>
<td class="kc-action-cell" data-ng-show="access.manageUsers">
<button class="btn btn-default btn-block btn-sm" ng-click="logoutSession(session.id)">Logout</button>
<button class="btn btn-default btn-block btn-sm" ng-click="logoutSession(session.id)">{{:: 'logout' | translate}}</button>
</td>
</tr>
</tbody>

View file

@ -7,12 +7,12 @@
<div class="modal-body">
<form>
<div>
<label class="control-label" for="name">New name</label>
<label class="control-label" for="name">{{:: 'new-name' | translate}}</label>
<input class="form-control" type="text" id="name" data-ng-model="name.value">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" ng-click="cancel()">Cancel</button>
<button type="button" class="btn btn-primary" ng-click="ok()">Ok</button>
<button type="button" class="btn btn-default" ng-click="cancel()">{{:: 'cancel' | translate}}</button>
<button type="button" class="btn btn-primary" ng-click="ok()">{{:: 'ok' | translate}}</button>
</div>

View file

@ -2,7 +2,7 @@
<div class="realm-selector">
<h2 data-ng-show="current.realm">{{current.realm.realm|capitalize}} <i class="fa fa-angle-down"></i></h2>
<h2 data-ng-hide="current.realm">Select realm <i class="fa fa-angle-down"></i></h2>
<h2 data-ng-hide="current.realm">{{:: 'select-realm' | translate}} <i class="fa fa-angle-down"></i></h2>
<div class="realm-dropmenu">
<!-- if it has more than 5 it generates a scroll bar -->
<ul>
@ -11,13 +11,13 @@
</li>
</ul>
<div class="realm-add" data-ng-show="auth.user && access.createRealm">
<a href="#/create/realm" class="btn btn-sm btn-block btn-primary">Add Realm</a>
<a href="#/create/realm" class="btn btn-sm btn-block btn-primary">{{:: 'add-realm' | translate}}</a>
</div>
</div>
</div>
<div class="nav-category" data-ng-show="current.realm">
<h2>Configure</h2>
<h2>{{:: 'configure' | translate}}</h2>
<ul class="nav nav-pills nav-stacked">
<li data-ng-show="access.viewRealm" data-ng-class="((!path[2]
|| path[2] == 'required-credentials'
@ -27,25 +27,25 @@
|| path[2] == 'cache-settings'
|| path[2] == 'defense'
|| path[2] == 'keys-settings' || path[2] == 'smtp-settings' || path[2] == 'ldap-settings' || path[2] == 'auth-settings') && path[3] != 'clients') && 'active'">
<a href="#/realms/{{realm.realm}}"><span class="pficon pficon-settings"></span> Realm Settings</a>
<a href="#/realms/{{realm.realm}}"><span class="pficon pficon-settings"></span> {{:: 'realm-settings' | translate}}</a>
</li>
<li data-ng-show="access.viewClients" data-ng-class="(path[2] == 'clients' || path[1] == 'client' || path[3] == 'clients') && 'active'"><a href="#/realms/{{realm.realm}}/clients"><i class="fa fa-cube"></i> Clients</a></li>
<li data-ng-show="access.viewClients" data-ng-class="(path[2] == 'client-templates' || path[1] == 'client-template' || path[3] == 'client-templates') && 'active'"><a href="#/realms/{{realm.realm}}/client-templates"><i class="fa fa-cubes"></i> Client Templates</a></li>
<li data-ng-show="access.viewRealm" data-ng-class="(path[2] == 'roles' || path[2] == 'default-roles' || (path[1] == 'role' && path[3] != 'clients')) && 'active'"><a href="#/realms/{{realm.realm}}/roles"><i class="fa fa-tasks"></i> Roles</a></li>
<li data-ng-show="access.viewRealm" data-ng-class="(path[2] == 'identity-provider-settings' || path[2] == 'identity-provider-mappers') && 'active'"><a href="#/realms/{{realm.realm}}/identity-provider-settings"><i class="fa fa-exchange"></i> Identity Providers</a></li>
<li data-ng-show="access.viewRealm" data-ng-class="(path[1] == 'user-federation' || path[2] == 'user-federation') && 'active'"><a href="#/realms/{{realm.realm}}/user-federation"><i class="fa fa-database"></i> User Federation</a></li>
<li data-ng-show="access.viewRealm" data-ng-class="(path[1] == 'authentication' || path[2] == 'authentication') && 'active'"><a href="#/realms/{{realm.realm}}/authentication/flows"><i class="fa fa-lock"></i> Authentication</a></li>
<li data-ng-show="access.viewClients" data-ng-class="(path[2] == 'clients' || path[1] == 'client' || path[3] == 'clients') && 'active'"><a href="#/realms/{{realm.realm}}/clients"><i class="fa fa-cube"></i> {{:: 'clients' | translate}}</a></li>
<li data-ng-show="access.viewClients" data-ng-class="(path[2] == 'client-templates' || path[1] == 'client-template' || path[3] == 'client-templates') && 'active'"><a href="#/realms/{{realm.realm}}/client-templates"><i class="fa fa-cubes"></i> {{:: 'client-templates' | translate}}</a></li>
<li data-ng-show="access.viewRealm" data-ng-class="(path[2] == 'roles' || path[2] == 'default-roles' || (path[1] == 'role' && path[3] != 'clients')) && 'active'"><a href="#/realms/{{realm.realm}}/roles"><i class="fa fa-tasks"></i> {{:: 'roles' | translate}}</a></li>
<li data-ng-show="access.viewRealm" data-ng-class="(path[2] == 'identity-provider-settings' || path[2] == 'identity-provider-mappers') && 'active'"><a href="#/realms/{{realm.realm}}/identity-provider-settings"><i class="fa fa-exchange"></i> {{:: 'identity-providers' | translate}}</a></li>
<li data-ng-show="access.viewRealm" data-ng-class="(path[1] == 'user-federation' || path[2] == 'user-federation') && 'active'"><a href="#/realms/{{realm.realm}}/user-federation"><i class="fa fa-database"></i> {{:: 'user-federation' | translate}}</a></li>
<li data-ng-show="access.viewRealm" data-ng-class="(path[1] == 'authentication' || path[2] == 'authentication') && 'active'"><a href="#/realms/{{realm.realm}}/authentication/flows"><i class="fa fa-lock"></i> {{:: 'authentication' | translate}}</a></li>
</ul>
</div>
<div class="nav-category" data-ng-show="current.realm">
<h2>Manage</h2>
<h2>{{:: 'manage' | translate}}</h2>
<ul class="nav nav-pills nav-stacked">
<li data-ng-show="access.viewUsers" data-ng-class="(path[2] == 'groups' || path[1] == 'group') && 'active'"><a href="#/realms/{{realm.realm}}/groups"><span class="pficon pficon-users"></span> Groups</a></li>
<li data-ng-show="access.viewUsers" data-ng-class="(path[2] == 'users' || path[1] == 'user') && 'active'"><a href="#/realms/{{realm.realm}}/users"><span class="pficon pficon-user"></span> Users</a></li>
<li data-ng-show="access.viewRealm" data-ng-class="(path[2] == 'sessions') && 'active'"><a href="#/realms/{{realm.realm}}/sessions/realm"><i class="fa fa-clock-o"></i> Sessions</a></li>
<li data-ng-show="access.viewEvents" data-ng-class="(path[2] == 'events' || path[2] == 'events-settings') && 'active'"><a href="#/realms/{{realm.realm}}/events"><i class="fa fa-calendar"></i> Events</a></li>
<li data-ng-show="access.manageRealm" ng-class="(path[2] =='partial-import') && 'active'"><a href="#/realms/{{realm.realm}}/partial-import"><span class="pficon pficon-import"></span> Import</a></li>
<li data-ng-show="access.viewUsers" data-ng-class="(path[2] == 'groups' || path[1] == 'group') && 'active'"><a href="#/realms/{{realm.realm}}/groups"><span class="pficon pficon-users"></span> {{:: 'groups' | translate}}</a></li>
<li data-ng-show="access.viewUsers" data-ng-class="(path[2] == 'users' || path[1] == 'user') && 'active'"><a href="#/realms/{{realm.realm}}/users"><span class="pficon pficon-user"></span> {{:: 'users' | translate}}</a></li>
<li data-ng-show="access.viewRealm" data-ng-class="(path[2] == 'sessions') && 'active'"><a href="#/realms/{{realm.realm}}/sessions/realm"><i class="fa fa-clock-o"></i> {{:: 'sessions' | translate}}</a></li>
<li data-ng-show="access.viewEvents" data-ng-class="(path[2] == 'events' || path[2] == 'events-settings') && 'active'"><a href="#/realms/{{realm.realm}}/events"><i class="fa fa-calendar"></i> {{:: 'events' | translate}}</a></li>
<li data-ng-show="access.manageRealm" ng-class="(path[2] =='partial-import') && 'active'"><a href="#/realms/{{realm.realm}}/partial-import"><span class="pficon pficon-import"></span> {{:: 'import' | translate}}</a></li>
</ul>
</div>
</div>

View file

@ -1,7 +1,7 @@
<ul class="nav nav-tabs">
<li ng-class="{active: path[3] == 'flows'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/authentication/flows">Flows</a></li>
<li ng-class="{active: path[3] == 'flow-bindings'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/authentication/flow-bindings">Bindings</a></li>
<li ng-class="{active: path[3] == 'required-actions'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/authentication/required-actions">Required Actions</a></li>
<li ng-class="{active: path[3] == 'password-policy'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/authentication/password-policy">Password Policy</a></li>
<li ng-class="{active: path[3] == 'otp-policy'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/authentication/otp-policy">OTP Policy</a></li>
<li ng-class="{active: path[3] == 'flows'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/authentication/flows">{{:: 'flows' | translate}}</a></li>
<li ng-class="{active: path[3] == 'flow-bindings'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/authentication/flow-bindings">{{:: 'bindings' | translate}}</a></li>
<li ng-class="{active: path[3] == 'required-actions'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/authentication/required-actions">{{:: 'required-actions' | translate}}</a></li>
<li ng-class="{active: path[3] == 'password-policy'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/authentication/password-policy">{{:: 'password-policy' | translate}}</a></li>
<li ng-class="{active: path[3] == 'otp-policy'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/authentication/otp-policy">{{:: 'otp-policy' | translate}}</a></li>
</ul>

View file

@ -1,6 +1,6 @@
<div data-ng-controller="ClientTemplateTabCtrl">
<h1 data-ng-show="create">Add Client Template</h1>
<h1 data-ng-show="create">{{:: 'add-client-template' | translate}}</h1>
<h1 data-ng-hide="create">
{{template.name|capitalize}}
<i id="removeClientTemplate" class="pficon pficon-delete clickable" data-ng-show="access.manageClients" data-ng-click="removeClientTemplate()"></i>

View file

@ -1,11 +1,11 @@
<div data-ng-controller="GroupTabCtrl">
<h1>
<span>User Groups</span>
<span>{{:: 'user-groups' | translate}}</span>
</h1>
<ul class="nav nav-tabs">
<li ng-class="{active: path[2] == 'groups'}"><a href="#/realms/{{realm.realm}}/groups">Groups</a></li>
<li ng-class="{active: path[2] == 'default-groups'}"><a href="#/realms/{{realm.realm}}/default-groups">Default Groups</a><kc-tooltip>Set of groups that new users will automatically join.</kc-tooltip>
<li ng-class="{active: path[2] == 'groups'}"><a href="#/realms/{{realm.realm}}/groups">{{:: 'groups' | translate}}</a></li>
<li ng-class="{active: path[2] == 'default-groups'}"><a href="#/realms/{{realm.realm}}/default-groups">{{:: 'default-groups' | translate}}</a><kc-tooltip>{{:: 'groups.default-groups.tooltip' | translate}}</kc-tooltip>
</li>
</ul>
</div>

View file

@ -5,9 +5,9 @@
</h1>
<ul class="nav nav-tabs">
<li ng-class="{active: !path[4]}"><a href="#/realms/{{realm.realm}}/groups/{{group.id}}">Settings</a></li>
<li ng-class="{active: path[4] == 'attributes'}"><a href="#/realms/{{realm.realm}}/groups/{{group.id}}/attributes">Attributes</a></li>
<li ng-class="{active: path[4] == 'role-mappings'}" ><a href="#/realms/{{realm.realm}}/groups/{{group.id}}/role-mappings">Role Mappings</a></li>
<li ng-class="{active: path[4] == 'members'}"><a href="#/realms/{{realm.realm}}/groups/{{group.id}}/members">Members</a></li>
<li ng-class="{active: !path[4]}"><a href="#/realms/{{realm.realm}}/groups/{{group.id}}">{{:: 'settings' | translate}}</a></li>
<li ng-class="{active: path[4] == 'attributes'}"><a href="#/realms/{{realm.realm}}/groups/{{group.id}}/attributes">{{:: 'attributes' | translate}}</a></li>
<li ng-class="{active: path[4] == 'role-mappings'}" ><a href="#/realms/{{realm.realm}}/groups/{{group.id}}/role-mappings">{{:: 'role-mappings' | translate}}</a></li>
<li ng-class="{active: path[4] == 'members'}"><a href="#/realms/{{realm.realm}}/groups/{{group.id}}/members">{{:: 'members' | translate}}</a></li>
</ul>
</div>

View file

@ -3,11 +3,11 @@
{{identityProvider.alias|capitalize}}
<i class="pficon pficon-delete clickable" data-ng-hide="newIdentityProvider || changed" data-ng-click="removeIdentityProvider()"></i>
</h1>
<h1 data-ng-show="path[0] == 'create'">Add Identity Provider</h1>
<h1 data-ng-show="path[0] == 'create'">{{:: 'add-identity-provider' | translate}}</h1>
<ul class="nav nav-tabs" data-ng-hide="newIdentityProvider">
<li ng-class="{active: !path[6] && path.length > 5}"><a href="#/realms/{{realm.realm}}/identity-provider-settings/provider/{{identityProvider.providerId}}/{{identityProvider.alias}}">Settings</a></li>
<li ng-class="{active: path[4] == 'mappers'}"><a href="#/realms/{{realm.realm}}/identity-provider-mappers/{{identityProvider.alias}}/mappers">Mappers</a></li>
<li ng-class="{active: path[6] == 'export'}"><a href="#/realms/{{realm.realm}}/identity-provider-settings/provider/{{identityProvider.providerId}}/{{identityProvider.alias}}/export" data-ng-show="!importFile && !newIdentityProvider && identityProvider.providerId == 'saml'">Export</a></li>
<li ng-class="{active: !path[6] && path.length > 5}"><a href="#/realms/{{realm.realm}}/identity-provider-settings/provider/{{identityProvider.providerId}}/{{identityProvider.alias}}">{{:: 'settings' | translate}}</a></li>
<li ng-class="{active: path[4] == 'mappers'}"><a href="#/realms/{{realm.realm}}/identity-provider-mappers/{{identityProvider.alias}}/mappers">{{:: 'mappers' | translate}}</a></li>
<li ng-class="{active: path[6] == 'export'}"><a href="#/realms/{{realm.realm}}/identity-provider-settings/provider/{{identityProvider.providerId}}/{{identityProvider.alias}}/export" data-ng-show="!importFile && !newIdentityProvider && identityProvider.providerId == 'saml'">{{:: 'export' | translate}}</a></li>
</ul>
</div>

View file

@ -3,10 +3,10 @@
{{instance.displayName|capitalize}}
<i class="pficon pficon-delete clickable" data-ng-show="!create && access.manageUsers" data-ng-click="removeUserFederation()"></i>
</h1>
<h1 data-ng-show="create">Add User Federation Provider</h1>
<h1 data-ng-show="create">{{:: 'add-user-federation-provider' | translate}}</h1>
<ul class="nav nav-tabs" data-ng-hide="create">
<li ng-class="{active: !path[6]}"><a href="#/realms/{{realm.realm}}/user-federation/providers/{{instance.providerName}}/{{instance.id}}">Settings</a></li>
<li ng-class="{active: path[6] == 'mappers'}"><a href="#/realms/{{realm.realm}}/user-federation/providers/{{instance.providerName}}/{{instance.id}}/mappers">Mappers</a></li>
<li ng-class="{active: !path[6]}"><a href="#/realms/{{realm.realm}}/user-federation/providers/{{instance.providerName}}/{{instance.id}}">{{:: 'settings' | translate}}</a></li>
<li ng-class="{active: path[6] == 'mappers'}"><a href="#/realms/{{realm.realm}}/user-federation/providers/{{instance.providerName}}/{{instance.id}}/mappers">{{:: 'mappers' | translate}}</a></li>
</ul>
</div>

View file

@ -3,16 +3,16 @@
{{user.username|capitalize}}
<i id="removeUser" class="pficon pficon-delete clickable" data-ng-show="!create && access.manageUsers" data-ng-click="removeUser()"></i>
</h1>
<h1 data-ng-show="create">Add User</h1>
<h1 data-ng-show="create">{{:: 'add-user' | translate}}</h1>
<ul class="nav nav-tabs" data-ng-show="!create">
<li ng-class="{active: !path[4] && path[0] != 'create'}"><a href="#/realms/{{realm.realm}}/users/{{user.id}}">Details</a></li>
<li ng-class="{active: path[4] == 'user-attributes'}"><a href="#/realms/{{realm.realm}}/users/{{user.id}}/user-attributes">Attributes</a></li>
<li ng-class="{active: path[4] == 'user-credentials'}" data-ng-show="access.manageUsers"><a href="#/realms/{{realm.realm}}/users/{{user.id}}/user-credentials">Credentials</a></li>
<li ng-class="{active: path[4] == 'role-mappings'}" ><a href="#/realms/{{realm.realm}}/users/{{user.id}}/role-mappings">Role Mappings</a></li>
<li ng-class="{active: path[4] == 'groups'}" ><a href="#/realms/{{realm.realm}}/users/{{user.id}}/groups">Groups</a></li>
<li ng-class="{active: path[4] == 'consents'}"><a href="#/realms/{{realm.realm}}/users/{{user.id}}/consents">Consents</a></li>
<li ng-class="{active: path[4] == 'sessions'}" ><a href="#/realms/{{realm.realm}}/users/{{user.id}}/sessions">Sessions</a></li>
<li ng-class="{active: path[4] == 'federated-identity' || path[1] == 'federated-identity'}" data-ng-show="user.federatedIdentities != null"><a href="#/realms/{{realm.realm}}/users/{{user.id}}/federated-identity">Identity Provider Links</a></li>
<li ng-class="{active: !path[4] && path[0] != 'create'}"><a href="#/realms/{{realm.realm}}/users/{{user.id}}">{{:: 'details' | translate}}</a></li>
<li ng-class="{active: path[4] == 'user-attributes'}"><a href="#/realms/{{realm.realm}}/users/{{user.id}}/user-attributes">{{:: 'attributes' | translate}}</a></li>
<li ng-class="{active: path[4] == 'user-credentials'}" data-ng-show="access.manageUsers"><a href="#/realms/{{realm.realm}}/users/{{user.id}}/user-credentials">{{:: 'credentials' | translate}}</a></li>
<li ng-class="{active: path[4] == 'role-mappings'}" ><a href="#/realms/{{realm.realm}}/users/{{user.id}}/role-mappings">{{:: 'role-mappings' | translate}}</a></li>
<li ng-class="{active: path[4] == 'groups'}" ><a href="#/realms/{{realm.realm}}/users/{{user.id}}/groups">{{:: 'groups' | translate}}</a></li>
<li ng-class="{active: path[4] == 'consents'}"><a href="#/realms/{{realm.realm}}/users/{{user.id}}/consents">{{:: 'consents' | translate}}</a></li>
<li ng-class="{active: path[4] == 'sessions'}" ><a href="#/realms/{{realm.realm}}/users/{{user.id}}/sessions">{{:: 'sessions' | translate}}</a></li>
<li ng-class="{active: path[4] == 'federated-identity' || path[1] == 'federated-identity'}" data-ng-show="user.federatedIdentities != null"><a href="#/realms/{{realm.realm}}/users/{{user.id}}/federated-identity">{{:: 'identity-provider-links' | translate}}</a></li>
</ul>
</div>