keycloak

package module
v0.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 25, 2021 License: AGPL-3.0 Imports: 14 Imported by: 0

README

Golang Keycloak REST Client

This Golang library provides Types and Methods to drive a Keycloak instance through its REST Admin interface.

Supported Features

  • Realms: CRUD, Export, Import
  • Clients: CRU
  • Users: CRUD
  • Components: CRUD

Hello, World example

package main

import (
	"fmt"
	"log"
	"time"

	keycloak "github.com/nmasse-itix/keycloak-client"
)

func main() {
	config := keycloak.Config{
		AddrTokenProvider: "http://localhost:8080/auth/realm/master",
		AddrAPI:           "http://localhost:8080/auth",
		Timeout:           10 * time.Second,
	}

	client, err := keycloak.NewClient(config)
	if err != nil {
		log.Fatalf("could not create keycloak client: %v", err)
	}

	accessToken, err := client.GetToken("master", "admin", "admin")
	if err != nil {
		log.Fatalf("could not get access token: %v", err)
	}

	realms, err := client.GetRealms(accessToken)
	if err != nil {
		log.Fatalf("could not get realms: %v", err)
	}

	for _, realm := range realms {
		fmt.Println(*realm.Realm)
	}
}

Documentation

Index

Constants

View Source
const (
	MsgErrMissingParam              = "missingParameter"
	MsgErrInvalidParam              = "invalidParameter"
	MsgErrCannotObtain              = "cannotObtain"
	MsgErrCannotMarshal             = "cannotMarshal"
	MsgErrCannotUnmarshal           = "cannotUnmarshal"
	MsgErrCannotParse               = "cannotParse"
	MsgErrCannotCreate              = "cannotCreate"
	MsgErrUnkownHTTPContentType     = "unkownHTTPContentType"
	MsgErrUnknownResponseStatusCode = "unknownResponseStatusCode"
	MsgErrExistingValue             = "existing"
	MsgErrReadOnly                  = "readOnlyValue"

	EvenParams       = "key/valParametersShouldBeEven"
	TokenProviderURL = "tokenProviderURL"
	APIURL           = "APIURL"
	TokenMsg         = "token"
	Response         = "response"
	AccessToken      = "accessToken"
)

Constants for error management

Variables

This section is empty.

Functions

This section is empty.

Types

type ActivationCodeRepresentation

type ActivationCodeRepresentation struct {
	Code *string `json:"code,omitempty"`
}

ActivationCodeRepresentation struct

type AdminEventRepresentation

type AdminEventRepresentation struct {
	AuthDetails    *AuthDetailsRepresentation `json:"authDetails,omitempty"`
	Error          *string                    `json:"error,omitempty"`
	OperationType  *string                    `json:"operationType,omitempty"`
	RealmID        *string                    `json:"realmId,omitempty"`
	Representation *string                    `json:"representation,omitempty"`
	ResourcePath   *string                    `json:"resourcePath,omitempty"`
	ResourceType   *string                    `json:"resourceType,omitempty"`
	Time           *int64                     `json:"time,omitempty"`
}

AdminEventRepresentation struct

type AttachementRepresentation

type AttachementRepresentation struct {
	Filename    *string `json:"filename,omitempty"`
	ContentType *string `json:"contentType,omitempty"`
	Content     *string `json:"content,omitempty"`
}

AttachementRepresentation struct

type AttributeKey

type AttributeKey string

AttributeKey type

type Attributes

type Attributes map[AttributeKey][]string

Attributes type

func (Attributes) Get

func (a Attributes) Get(key AttributeKey) []string

Get a given attribute

func (Attributes) GetBool

func (a Attributes) GetBool(key AttributeKey) (*bool, error)

GetBool gets the first value of a given attribute

func (Attributes) GetDate

func (a Attributes) GetDate(key AttributeKey, dateLayouts []string) *string

GetDate returns an attribute which contains a date value

func (Attributes) GetInt

func (a Attributes) GetInt(key AttributeKey) (*int, error)

GetInt gets the first value of a given attribute

func (Attributes) GetString

func (a Attributes) GetString(key AttributeKey) *string

GetString gets the first value of a given attribute

func (Attributes) GetTime

func (a Attributes) GetTime(key AttributeKey, dateLayouts []string) (*time.Time, error)

GetTime returns an attribute which contains a date value

func (Attributes) Merge

func (a Attributes) Merge(others *Attributes)

Merge current attributes with others (Values from others replace those with the same key in current attributes)

func (Attributes) Set

func (a Attributes) Set(key AttributeKey, value []string)

Set a given attribute

func (Attributes) SetBool

func (a Attributes) SetBool(key AttributeKey, value bool)

SetBool sets the value of a given attribute

func (Attributes) SetBoolWhenNotNil

func (a Attributes) SetBoolWhenNotNil(key AttributeKey, value *bool)

SetBoolWhenNotNil sets an attribute value if it is not nil

func (Attributes) SetDate

func (a Attributes) SetDate(key AttributeKey, value string, dateLayouts []string)

SetDate sets a date

func (Attributes) SetDateWhenNotNil

func (a Attributes) SetDateWhenNotNil(key AttributeKey, value *string, dateLayouts []string)

SetDateWhenNotNil sets a date attribute if it is not nil

func (Attributes) SetInt

func (a Attributes) SetInt(key AttributeKey, value int)

SetInt sets the value of a given attribute

func (Attributes) SetIntWhenNotNil

func (a Attributes) SetIntWhenNotNil(key AttributeKey, value *int)

SetIntWhenNotNil sets an attribute value if it is not nil

func (Attributes) SetString

func (a Attributes) SetString(key AttributeKey, value string)

SetString sets the value of a given attribute

func (Attributes) SetStringWhenNotNil

func (a Attributes) SetStringWhenNotNil(key AttributeKey, value *string)

SetStringWhenNotNil sets an attribute value if it is not nil

func (Attributes) SetTime

func (a Attributes) SetTime(key AttributeKey, value time.Time, dateLayout string)

SetTime sets a date

func (Attributes) SetTimeWhenNotNil

func (a Attributes) SetTimeWhenNotNil(key AttributeKey, value *time.Time, dateLayout string)

SetTimeWhenNotNil sets a date attribute if it is not nil

type AuthDetailsRepresentation

type AuthDetailsRepresentation struct {
	ClientID  *string `json:"clientId,omitempty"`
	IPAddress *string `json:"ipAddress,omitempty"`
	RealmID   *string `json:"realmId,omitempty"`
	UserID    *string `json:"userId,omitempty"`
}

AuthDetailsRepresentation struct

type AuthenticationExecutionExportRepresentation

type AuthenticationExecutionExportRepresentation struct {
	Authenticator       *string `json:"authenticator,omitempty"`
	AuthenticatorConfig *string `json:"authenticatorConfig,omitempty"`
	AuthenticatorFlow   *bool   `json:"authenticatorFlow,omitempty"`
	AutheticatorFlow    *bool   `json:"autheticatorFlow,omitempty"`
	FlowAlias           *string `json:"flowAlias,omitempty"`
	Priority            *int32  `json:"priority,omitempty"`
	Requirement         *string `json:"requirement,omitempty"`
	UserSetupAllowed    *bool   `json:"userSetupAllowed,omitempty"`
}

AuthenticationExecutionExportRepresentation struct

type AuthenticationExecutionInfoRepresentation

type AuthenticationExecutionInfoRepresentation struct {
	Alias                *string   `json:"alias,omitempty"`
	AuthenticationConfig *string   `json:"authenticationConfig,omitempty"`
	AuthenticationFlow   *bool     `json:"authenticationFlow,omitempty"`
	Configurable         *bool     `json:"configurable,omitempty"`
	DisplayName          *string   `json:"displayName,omitempty"`
	FlowID               *string   `json:"flowId,omitempty"`
	ID                   *string   `json:"id,omitempty"`
	Index                *int32    `json:"index,omitempty"`
	Level                *int32    `json:"level,omitempty"`
	ProviderID           *string   `json:"providerId,omitempty"`
	Requirement          *string   `json:"requirement,omitempty"`
	RequirementChoices   *[]string `json:"requirementChoices,omitempty"`
}

AuthenticationExecutionInfoRepresentation struct

type AuthenticationExecutionRepresentation

type AuthenticationExecutionRepresentation struct {
	Authenticator       *string `json:"authenticator,omitempty"`
	AuthenticatorConfig *string `json:"authenticatorConfig,omitempty"`
	AuthenticatorFlow   *bool   `json:"authenticatorFlow,omitempty"`
	AutheticatorFlow    *bool   `json:"autheticatorFlow,omitempty"`
	FlowID              *string `json:"flowId,omitempty"`
	ID                  *string `json:"id,omitempty"`
	ParentFlow          *string `json:"parentFlow,omitempty"`
	Priority            *int32  `json:"priority,omitempty"`
	Requirement         *string `json:"requirement,omitempty"`
}

AuthenticationExecutionRepresentation struct

type AuthenticationFlowRepresentation

type AuthenticationFlowRepresentation struct {
	Alias                    *string                                        `json:"alias,omitempty"`
	AuthenticationExecutions *[]AuthenticationExecutionExportRepresentation `json:"authenticationExecutions,omitempty"`
	BuiltIn                  *bool                                          `json:"builtIn,omitempty"`
	Description              *string                                        `json:"description,omitempty"`
	ID                       *string                                        `json:"id,omitempty"`
	ProviderID               *string                                        `json:"providerId,omitempty"`
	TopLevel                 *bool                                          `json:"topLevel,omitempty"`
}

AuthenticationFlowRepresentation struct

type AuthenticatorConfigInfoRepresentation

type AuthenticatorConfigInfoRepresentation struct {
	HelpText   *string                         `json:"helpText,omitempty"`
	Name       *string                         `json:"name,omitempty"`
	Properties *[]ConfigPropertyRepresentation `json:"properties,omitempty"`
	ProviderID *string                         `json:"providerId,omitempty"`
}

AuthenticatorConfigInfoRepresentation struct

type AuthenticatorConfigRepresentation

type AuthenticatorConfigRepresentation struct {
	Alias  *string                 `json:"alias,omitempty"`
	Config *map[string]interface{} `json:"config,omitempty"`
	ID     *string                 `json:"id,omitempty"`
}

AuthenticatorConfigRepresentation struct

type CertificateRepresentation

type CertificateRepresentation struct {
	Certificate *string `json:"certificate,omitempty"`
	Kid         *string `json:"kid,omitempty"`
	PrivateKey  *string `json:"privateKey,omitempty"`
	PublicKey   *string `json:"publicKey,omitempty"`
}

CertificateRepresentation struct

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client is the keycloak client.

func NewClient

func NewClient(config Config) (*Client, error)

NewClient returns a keycloak client.

func (*Client) AddClientRolesToUserRoleMapping

func (c *Client) AddClientRolesToUserRoleMapping(accessToken string, realmName, userID, clientID string, roles []RoleRepresentation) error

AddClientRolesToUserRoleMapping add client-level roles to the user role mapping.

func (*Client) AddGroupToUser

func (c *Client) AddGroupToUser(accessToken string, realmName, userID, groupID string) error

AddGroupToUser adds a group to the groups of the user.

func (*Client) AssignClientRole

func (c *Client) AssignClientRole(accessToken string, realmName string, groupID string, clientID string, roles []RoleRepresentation) error

AssignClientRole assigns client roles to a specific group

func (*Client) ClearAllLoginFailures

func (c *Client) ClearAllLoginFailures(accessToken string, realmName string) error

ClearAllLoginFailures clears any user login failures for all users. This can release temporary disabled users.

func (*Client) ClearUserLoginFailures

func (c *Client) ClearUserLoginFailures(accessToken string, realmName, userID string) error

ClearUserLoginFailures clear any user login failures for the user. This can release temporary disabled user.

func (*Client) CopyExistingAuthenticationFlow

func (c *Client) CopyExistingAuthenticationFlow(accessToken string, realmName, flowAlias, newName string) error

CopyExistingAuthenticationFlow copy the existing authentication flow under a new name. 'flowAlias' is the name of the existing authentication flow, 'newName' is the new name of the authentication flow.

func (*Client) CountUsers

func (c *Client) CountUsers(accessToken string, realmName string) (int, error)

CountUsers returns the number of users in the realm.

func (*Client) CreateActivationCode

func (c *Client) CreateActivationCode(accessToken string, realmName string, userID string) (ActivationCodeRepresentation, error)

CreateActivationCode creates a new activation code authenticator and returns the code.

func (*Client) CreateAuthenticationExecution

func (c *Client) CreateAuthenticationExecution(accessToken string, realmName string, authExec AuthenticationExecutionRepresentation) (string, error)

CreateAuthenticationExecution add new authentication execution

func (*Client) CreateAuthenticationExecutionForFlow

func (c *Client) CreateAuthenticationExecutionForFlow(accessToken string, realmName, flowAlias, provider string) (string, error)

CreateAuthenticationExecutionForFlow add a new authentication execution to a flow. 'flowAlias' is the alias of the parent flow.

func (*Client) CreateAuthenticationFlow

func (c *Client) CreateAuthenticationFlow(accessToken string, realmName string, authFlow AuthenticationFlowRepresentation) error

CreateAuthenticationFlow creates a new authentication flow.

func (*Client) CreateClient

func (c *Client) CreateClient(accessToken string, realmName string, clientRep ClientRepresentation) (string, error)

CreateClient creates a new client.

func (*Client) CreateClientInitialAccess

func (c *Client) CreateClientInitialAccess(accessToken string, realmName string, access ClientInitialAccessCreatePresentation) (ClientInitialAccessPresentation, error)

CreateClientInitialAccess creates a new initial access token.

func (*Client) CreateClientRole

func (c *Client) CreateClientRole(accessToken string, realmName, clientID string, role RoleRepresentation) (string, error)

CreateClientRole creates a new role for the realm or client

func (*Client) CreateComponent

func (c *Client) CreateComponent(accessToken string, realmName string, component ComponentRepresentation) (string, error)

CreateComponent creates a new component in the realm

func (*Client) CreateFlowWithExecutionForExistingFlow

func (c *Client) CreateFlowWithExecutionForExistingFlow(accessToken string, realmName, flowAlias, alias, flowType, provider, description string) (string, error)

CreateFlowWithExecutionForExistingFlow add a new flow with a new execution to an existing flow. 'flowAlias' is the alias of the parent authentication flow.

func (*Client) CreateGroup

func (c *Client) CreateGroup(accessToken string, reqRealmName string, group GroupRepresentation) (string, error)

CreateGroup creates the group from its GroupRepresentation. The group name must be unique.

func (*Client) CreateRealm

func (c *Client) CreateRealm(accessToken string, realm RealmRepresentation) (string, error)

CreateRealm creates the realm from its RealmRepresentation.

func (*Client) CreateRecoveryCode

func (c *Client) CreateRecoveryCode(accessToken string, realmName string, userID string) (RecoveryCodeRepresentation, error)

CreateRecoveryCode creates a new recovery code authenticator and returns the code.

func (*Client) CreateUser

func (c *Client) CreateUser(accessToken string, targetRealmName string, user UserRepresentation) (string, error)

CreateUser creates the user from its UserRepresentation. The username must be unique.

func (*Client) DeleteAuthenticationExecution

func (c *Client) DeleteAuthenticationExecution(accessToken string, realmName, executionID string) error

DeleteAuthenticationExecution deletes the execution.

func (*Client) DeleteAuthenticationFlow

func (c *Client) DeleteAuthenticationFlow(accessToken string, realmName, flowID string) error

DeleteAuthenticationFlow deletes an authentication flow.

func (*Client) DeleteAuthenticatorConfig

func (c *Client) DeleteAuthenticatorConfig(accessToken string, realmName, configID string) error

DeleteAuthenticatorConfig deletes the authenticator configuration.

func (*Client) DeleteClientInitialAccess

func (c *Client) DeleteClientInitialAccess(accessToken string, realmName, accessID string) error

DeleteClientInitialAccess deletes the client initial access.

func (*Client) DeleteClientRolesFromUserRoleMapping

func (c *Client) DeleteClientRolesFromUserRoleMapping(accessToken string, realmName, userID, clientID string) error

DeleteClientRolesFromUserRoleMapping deletes client-level roles from user role mapping.

func (*Client) DeleteComponent

func (c *Client) DeleteComponent(accessToken string, realmName, componentID string) error

DeleteComponent deletes a component in the realm

func (*Client) DeleteCredential

func (c *Client) DeleteCredential(accessToken string, realmName string, userID string, credentialID string) error

DeleteCredential deletes the credential

func (*Client) DeleteGroup

func (c *Client) DeleteGroup(accessToken string, realmName string, groupID string) error

DeleteGroup deletes a specific group’s representation

func (*Client) DeleteGroupFromUser

func (c *Client) DeleteGroupFromUser(accessToken string, realmName, userID, groupID string) error

DeleteGroupFromUser adds a group to the groups of the user.

func (*Client) DeleteRealm

func (c *Client) DeleteRealm(accessToken string, realmName string) error

DeleteRealm deletes the realm.

func (*Client) DeleteRequiredAction

func (c *Client) DeleteRequiredAction(accessToken string, realmName, actionAlias string) error

DeleteRequiredAction deletes the required action.

func (*Client) DeleteUser

func (c *Client) DeleteUser(accessToken string, realmName, userID string) error

DeleteUser deletes the user.

func (*Client) ExecuteActionsEmail

func (c *Client) ExecuteActionsEmail(accessToken string, realmName string, userID string, actions []string, paramKV ...string) error

ExecuteActionsEmail sends an update account email to the user. An email contains a link the user can click to perform a set of required actions.

func (*Client) ExportRealm

func (c *Client) ExportRealm(accessToken string, realmName string) (RealmRepresentation, error)

ExportRealm recovers the full realm.

func (*Client) GenerateCertificate

func (c *Client) GenerateCertificate(accessToken string, realmName, idClient, attr string) (CertificateRepresentation, error)

GenerateCertificate generates a new certificate with new key pair. idClient is the id of client (not client-id).

func (*Client) GenerateKeyPairAndCertificate

func (c *Client) GenerateKeyPairAndCertificate(accessToken string, realmName, idClient, attr string, keyStoreConfig KeyStoreConfig) ([]byte, error)

GenerateKeyPairAndCertificate generates a keypair and certificate and serves the private key in a specified keystore format.

func (*Client) GetAttackDetectionStatus

func (c *Client) GetAttackDetectionStatus(accessToken string, realmName, userID string) (map[string]interface{}, error)

GetAttackDetectionStatus gets the status of a username in brute force detection.

func (*Client) GetAuthenticationExecutionForFlow

func (c *Client) GetAuthenticationExecutionForFlow(accessToken string, realmName, flowAlias string) (AuthenticationExecutionInfoRepresentation, error)

GetAuthenticationExecutionForFlow returns the authentication executions for a flow.

func (*Client) GetAuthenticationFlow

func (c *Client) GetAuthenticationFlow(accessToken string, realmName, flowID string) (AuthenticationFlowRepresentation, error)

GetAuthenticationFlow gets the authentication flow for id.

func (*Client) GetAuthenticationFlows

func (c *Client) GetAuthenticationFlows(accessToken string, realmName string) ([]AuthenticationFlowRepresentation, error)

GetAuthenticationFlows returns a list of authentication flows.

func (*Client) GetAuthenticatorConfig

func (c *Client) GetAuthenticatorConfig(accessToken string, realmName, configID string) (AuthenticatorConfigRepresentation, error)

GetAuthenticatorConfig returns the authenticator configuration.

func (*Client) GetAuthenticatorProviderConfig

func (c *Client) GetAuthenticatorProviderConfig(accessToken string, realmName, providerID string) (AuthenticatorConfigInfoRepresentation, error)

GetAuthenticatorProviderConfig returns the authenticator provider’s configuration description.

func (*Client) GetAuthenticatorProviders

func (c *Client) GetAuthenticatorProviders(accessToken string, realmName string) ([]map[string]interface{}, error)

GetAuthenticatorProviders returns a list of authenticator providers.

func (*Client) GetAvailableGroupClientRoles

func (c *Client) GetAvailableGroupClientRoles(accessToken string, realmName string, groupID string, clientID string) ([]RoleRepresentation, error)

GetAvailableGroupClientRoles gets client roles available in a specific group

func (*Client) GetClient

func (c *Client) GetClient(accessToken string, realmName, idClient string) (ClientRepresentation, error)

GetClient get the representation of the client. idClient is the id of client (not client-id).

func (*Client) GetClientAuthenticatorProviders

func (c *Client) GetClientAuthenticatorProviders(accessToken string, realmName string) ([]map[string]interface{}, error)

GetClientAuthenticatorProviders returns a list of client authenticator providers.

func (*Client) GetClientInitialAccess

func (c *Client) GetClientInitialAccess(accessToken string, realmName string) ([]ClientInitialAccessPresentation, error)

GetClientInitialAccess returns a list of clients initial access.

func (*Client) GetClientMappers

func (c *Client) GetClientMappers(accessToke string, realmName, idClient string) ([]ClientMapperRepresentation, error)

GetClientMappers gets mappers of the client specified by id

func (*Client) GetClientRegistrationPolicy

func (c *Client) GetClientRegistrationPolicy(accessToken string, realmName, configID string) ([]ComponentTypeRepresentation, error)

GetClientRegistrationPolicy is the base path to retrieve providers with the configProperties properly filled.

func (*Client) GetClientRoleMappings

func (c *Client) GetClientRoleMappings(accessToken string, realmName, userID, clientID string) ([]RoleRepresentation, error)

GetClientRoleMappings gets client-level role mappings for the user, and the app.

func (*Client) GetClientRoles

func (c *Client) GetClientRoles(accessToken string, realmName, idClient string) ([]RoleRepresentation, error)

GetClientRoles gets all roles for the realm or client

func (*Client) GetClients

func (c *Client) GetClients(accessToken string, realmName string, paramKV ...string) ([]ClientRepresentation, error)

GetClients returns a list of clients belonging to the realm. Parameters: clientId (filter by clientId), viewableOnly (filter clients that cannot be viewed in full by admin, default="false")

func (*Client) GetComponent

func (c *Client) GetComponent(accessToken string, realmName string, componentID string) ([]ComponentRepresentation, error)

GetComponent gets a component of the realm

func (*Client) GetComponents

func (c *Client) GetComponents(accessToken string, realmName string) ([]ComponentRepresentation, error)

GetComponents gets all components of the realm

func (*Client) GetConfigDescriptionForClients

func (c *Client) GetConfigDescriptionForClients(accessToken string, realmName string) (map[string]interface{}, error)

GetConfigDescriptionForClients returns the configuration descriptions for all clients.

func (*Client) GetCredentialTypes

func (c *Client) GetCredentialTypes(accessToken string, realmName string) ([]string, error)

GetCredentialTypes returns list of credentials types available for the realm

func (*Client) GetCredentials

func (c *Client) GetCredentials(accessToken string, realmName string, userID string) ([]CredentialRepresentation, error)

GetCredentials returns the list of credentials of the user

func (*Client) GetFormActionProviders

func (c *Client) GetFormActionProviders(accessToken string, realmName string) ([]map[string]interface{}, error)

GetFormActionProviders returns a list of form action providers.

func (*Client) GetFormProviders

func (c *Client) GetFormProviders(accessToken string, realmName string) ([]map[string]interface{}, error)

GetFormProviders returns a list of form providers.

func (*Client) GetGroup

func (c *Client) GetGroup(accessToken string, realmName string, groupID string) (GroupRepresentation, error)

GetGroup gets a specific group’s representation

func (*Client) GetGroupClientRoles

func (c *Client) GetGroupClientRoles(accessToken string, realmName string, groupID string, clientID string) ([]RoleRepresentation, error)

GetGroupClientRoles gets client roles assigned to a specific group

func (*Client) GetGroups

func (c *Client) GetGroups(accessToken string, realmName string) ([]GroupRepresentation, error)

GetGroups gets all groups for the realm

func (*Client) GetGroupsOfUser

func (c *Client) GetGroupsOfUser(accessToken string, realmName, userID string) ([]GroupRepresentation, error)

GetGroupsOfUser gets the groups of the user.

func (*Client) GetIdp

func (c *Client) GetIdp(accessToken string, realmName string, idpAlias string) (IdentityProviderRepresentation, error)

GetIdp gets an identity provider matching the given alias

func (*Client) GetIdpMappers

func (c *Client) GetIdpMappers(accessToken string, realmName string, idpAlias string) ([]IdentityProviderMapperRepresentation, error)

GetIdpMappers gets the mappers of the specified identity provider

func (*Client) GetIdps

func (c *Client) GetIdps(accessToken string, realmName string) ([]IdentityProviderRepresentation, error)

GetIdps gets the list of identity providers

func (*Client) GetKeyInfo

func (c *Client) GetKeyInfo(accessToken string, realmName, idClient, attr string) (CertificateRepresentation, error)

GetKeyInfo returns the key info. idClient is the id of client (not client-id).

func (*Client) GetKeyStore

func (c *Client) GetKeyStore(accessToken string, realmName, idClient, attr string, keyStoreConfig KeyStoreConfig) ([]byte, error)

GetKeyStore returns a keystore file for the client, containing private key and public certificate. idClient is the id of client (not client-id).

func (*Client) GetRealm

func (c *Client) GetRealm(accessToken string, realmName string) (RealmRepresentation, error)

GetRealm get the top level represention of the realm. Nested information like users are not included.

func (*Client) GetRealmCredentialRegistrators

func (c *Client) GetRealmCredentialRegistrators(accessToken string, realmName string) ([]string, error)

GetRealmCredentialRegistrators returns list of credentials types available for the realm

func (*Client) GetRealmLevelRoleMappings

func (c *Client) GetRealmLevelRoleMappings(accessToken string, realmName, userID string) ([]RoleRepresentation, error)

GetRealmLevelRoleMappings gets realm level role mappings

func (*Client) GetRealms

func (c *Client) GetRealms(accessToken string) ([]RealmRepresentation, error)

GetRealms get the top level represention of all the realms. Nested information like users are not included.

func (*Client) GetRequiredAction

func (c *Client) GetRequiredAction(accessToken string, realmName, actionAlias string) (RequiredActionProviderRepresentation, error)

GetRequiredAction returns the required action for the alias.

func (*Client) GetRequiredActions

func (c *Client) GetRequiredActions(accessToken string, realmName string) ([]RequiredActionProviderRepresentation, error)

GetRequiredActions returns a list of required actions.

func (*Client) GetRole

func (c *Client) GetRole(accessToken string, realmName string, roleID string) (RoleRepresentation, error)

GetRole gets a specific role’s representation

func (*Client) GetRoles

func (c *Client) GetRoles(accessToken string, realmName string) ([]RoleRepresentation, error)

GetRoles gets all roles for the realm or client

func (*Client) GetSecret

func (c *Client) GetSecret(accessToken string, realmName, idClient string) (CredentialRepresentation, error)

GetSecret get the client secret. idClient is the id of client (not client-id).

func (*Client) GetToken

func (c *Client) GetToken(realm string, username string, password string) (string, error)

GetToken returns a valid token from keycloak

func (*Client) GetUnregisteredRequiredActions

func (c *Client) GetUnregisteredRequiredActions(accessToken string, realmName string) ([]map[string]interface{}, error)

GetUnregisteredRequiredActions returns a list of unregistered required actions.

func (*Client) GetUser

func (c *Client) GetUser(accessToken string, realmName, userID string) (UserRepresentation, error)

GetUser gets the represention of the user.

func (*Client) GetUsers

func (c *Client) GetUsers(accessToken string, targetRealmName string, paramKV ...string) ([]UserRepresentation, error)

GetUsers returns a list of users, filtered according to the query parameters. Parameters: email, first (paging offset, int), firstName, lastName, username, max (maximum result size, default = 100), search (string contained in username, firstname, lastname or email)

func (*Client) LinkShadowUser

func (c *Client) LinkShadowUser(accessToken string, reqRealmName string, userID string, provider string, fedIDKC FederatedIdentityRepresentation) error

LinkShadowUser links shadow user to a realm in the context of brokering

func (*Client) LowerExecutionPriority

func (c *Client) LowerExecutionPriority(accessToken string, realmName, executionID string) error

LowerExecutionPriority lowers the execution’s priority.

func (*Client) MoveAfter

func (c *Client) MoveAfter(accessToken string, realmName string, userID string, credentialID string, previousCredentialID string) error

MoveAfter moves the credential after the specified one into the list

func (*Client) MoveToFirst

func (c *Client) MoveToFirst(accessToken string, realmName string, userID string, credentialID string) error

MoveToFirst moves the credential at the top of the list

func (*Client) RaiseExecutionPriority

func (c *Client) RaiseExecutionPriority(accessToken string, realmName, executionID string) error

RaiseExecutionPriority raise the execution’s priority.

func (*Client) RegisterRequiredAction

func (c *Client) RegisterRequiredAction(accessToken string, realmName, providerID, name string) error

RegisterRequiredAction register a new required action.

func (*Client) RemoveClientRole

func (c *Client) RemoveClientRole(accessToken string, realmName string, groupID string, clientID string, roles []RoleRepresentation) error

RemoveClientRole deletes client roles from a specific group

func (*Client) ResetPassword

func (c *Client) ResetPassword(accessToken string, realmName, userID string, cred CredentialRepresentation) error

ResetPassword resets password of the user.

func (*Client) SendReminderEmail

func (c *Client) SendReminderEmail(accessToken string, realmName string, userID string, paramKV ...string) error

SendReminderEmail sends a reminder email to a user

func (*Client) SendSMS

func (c *Client) SendSMS(accessToken string, realmName string, smsRep SMSRepresentation) error

SendSMS sends an SMS to a user

func (*Client) SendSmsCode

func (c *Client) SendSmsCode(accessToken string, realmName string, userID string) (SmsCodeRepresentation, error)

SendSmsCode sends a SMS code and return it

func (*Client) UpdateAuthenticationExecution

func (c *Client) UpdateAuthenticationExecution(accessToken string, realmName, executionID string, authConfig AuthenticatorConfigRepresentation) error

UpdateAuthenticationExecution update execution with new configuration.

func (*Client) UpdateAuthenticationExecutionForFlow

func (c *Client) UpdateAuthenticationExecutionForFlow(accessToken string, realmName, flowAlias string, authExecInfo AuthenticationExecutionInfoRepresentation) error

UpdateAuthenticationExecutionForFlow updates the authentication executions of a flow.

func (*Client) UpdateAuthenticatorConfig

func (c *Client) UpdateAuthenticatorConfig(accessToken string, realmName, configID string, config AuthenticatorConfigRepresentation) error

UpdateAuthenticatorConfig updates the authenticator configuration.

func (*Client) UpdateClient

func (c *Client) UpdateClient(accessToken string, realmName, idClient string, clientRep ClientRepresentation) error

UpdateClient updates the client. idClient is the id of client (not client-id).

func (*Client) UpdateComponent

func (c *Client) UpdateComponent(accessToken string, realmName, componentID string, component ComponentRepresentation) error

UpdateComponent updates a new component in the realm

func (*Client) UpdateLabelCredential

func (c *Client) UpdateLabelCredential(accessToken string, realmName string, userID string, credentialID string, label string) error

UpdateLabelCredential updates the label of credential

func (*Client) UpdateRealm

func (c *Client) UpdateRealm(accessToken string, realmName string, realm RealmRepresentation) error

UpdateRealm update the top lovel information of the realm. Any user, role or client information from the realm representation will be ignored.

func (*Client) UpdateRequiredAction

func (c *Client) UpdateRequiredAction(accessToken string, realmName, actionAlias string, action RequiredActionProviderRepresentation) error

UpdateRequiredAction updates the required action.

func (*Client) UpdateUser

func (c *Client) UpdateUser(accessToken string, realmName, userID string, user UserRepresentation) error

UpdateUser updates the user.

func (*Client) UploadCertificate

func (c *Client) UploadCertificate(accessToken string, realmName, idClient, attr string, file []byte) (CertificateRepresentation, error)

UploadCertificate uploads only a certificate, not the private key.

func (*Client) UploadCertificatePrivateKey

func (c *Client) UploadCertificatePrivateKey(accessToken string, realmName, idClient, attr string, file []byte) (CertificateRepresentation, error)

UploadCertificatePrivateKey uploads a certificate and eventually a private key.

type ClientDetailedError

type ClientDetailedError struct {
	HTTPStatus int
	Message    string
}

ClientDetailedError struct

func (ClientDetailedError) Error

func (e ClientDetailedError) Error() string

Error implements error

func (ClientDetailedError) ErrorMessage

func (e ClientDetailedError) ErrorMessage() string

ErrorMessage implements common-service/errors/DetailedError

func (ClientDetailedError) Status

func (e ClientDetailedError) Status() int

Status implements common-service/errors/DetailedError

type ClientInitialAccessCreatePresentation

type ClientInitialAccessCreatePresentation struct {
	Count      *int32 `json:"count,omitempty"`
	Expiration *int32 `json:"expiration,omitempty"`
}

ClientInitialAccessCreatePresentation struct

type ClientInitialAccessPresentation

type ClientInitialAccessPresentation struct {
	Count          *int32  `json:"count,omitempty"`
	Expiration     *int32  `json:"expiration,omitempty"`
	ID             *string `json:"id,omitempty"`
	RemainingCount *int32  `json:"remainingCount,omitempty"`
	Timestamp      *int32  `json:"timestamp,omitempty"`
	Token          *string `json:"token,omitempty"`
}

ClientInitialAccessPresentation struct

type ClientMapperRepresentation

type ClientMapperRepresentation struct {
	ContainerID    *string `json:"containerId,omitempty"`
	ContainerName  *string `json:"containerName,omitempty"`
	ContainerType  *string `json:"containerType,omitempty"`
	MapperID       *string `json:"mapperId,omitempty"`
	MapperName     *string `json:"mapperName,omitempty"`
	ProtocolMapper *string `json:"protocolMapper,omitempty"`
}

ClientMapperRepresentation struct https://www.org/docs-api/9.0/rest-api/index.html#_clientscopeevaluateresource-protocolmapperevaluationrepresentation

type ClientMappingsRepresentation

type ClientMappingsRepresentation struct {
	Client   *string               `json:"client,omitempty"`
	ID       *string               `json:"id,omitempty"`
	Mappings *[]RoleRepresentation `json:"mappings,omitempty"`
}

ClientMappingsRepresentation struct

type ClientRepresentation

type ClientRepresentation struct {
	Access                       *map[string]interface{}         `json:"access,omitempty"`
	AdminURL                     *string                         `json:"adminUrl,omitempty"`
	Attributes                   *map[string]interface{}         `json:"attributes,omitempty"`
	AuthorizationServicesEnabled *bool                           `json:"authorizationServicesEnabled,omitempty"`
	AuthorizationSettings        *ResourceServerRepresentation   `json:"authorizationSettings,omitempty"`
	BaseURL                      *string                         `json:"baseUrl,omitempty"`
	BearerOnly                   *bool                           `json:"bearerOnly,omitempty"`
	ClientAuthenticatorType      *string                         `json:"clientAuthenticatorType,omitempty"`
	ClientID                     *string                         `json:"clientId,omitempty"`
	ClientTemplate               *string                         `json:"clientTemplate,omitempty"`
	ConsentRequired              *bool                           `json:"consentRequired,omitempty"`
	DefaultRoles                 *[]string                       `json:"defaultRoles,omitempty"`
	Description                  *string                         `json:"description,omitempty"`
	DirectAccessGrantsEnabled    *bool                           `json:"directAccessGrantsEnabled,omitempty"`
	Enabled                      *bool                           `json:"enabled,omitempty"`
	FrontchannelLogout           *bool                           `json:"frontchannelLogout,omitempty"`
	FullScopeAllowed             *bool                           `json:"fullScopeAllowed,omitempty"`
	ID                           *string                         `json:"id,omitempty"`
	ImplicitFlowEnabled          *bool                           `json:"implicitFlowEnabled,omitempty"`
	Name                         *string                         `json:"name,omitempty"`
	NodeReRegistrationTimeout    *int32                          `json:"nodeReRegistrationTimeout,omitempty"`
	NotBefore                    *int32                          `json:"notBefore,omitempty"`
	Protocol                     *string                         `json:"protocol,omitempty"`
	ProtocolMappers              *[]ProtocolMapperRepresentation `json:"protocolMappers,omitempty"`
	PublicClient                 *bool                           `json:"publicClient,omitempty"`
	RedirectUris                 *[]string                       `json:"redirectUris,omitempty"`
	RegisteredNodes              *map[string]interface{}         `json:"registeredNodes,omitempty"`
	RegistrationAccessToken      *string                         `json:"registrationAccessToken,omitempty"`
	RootURL                      *string                         `json:"rootUrl,omitempty"`
	Secret                       *string                         `json:"secret,omitempty"`
	ServiceAccountsEnabled       *bool                           `json:"serviceAccountsEnabled,omitempty"`
	StandardFlowEnabled          *bool                           `json:"standardFlowEnabled,omitempty"`
	SurrogateAuthRequired        *bool                           `json:"surrogateAuthRequired,omitempty"`
	UseTemplateConfig            *bool                           `json:"useTemplateConfig,omitempty"`
	UseTemplateMappers           *bool                           `json:"useTemplateMappers,omitempty"`
	UseTemplateScope             *bool                           `json:"useTemplateScope,omitempty"`
	WebOrigins                   *[]string                       `json:"webOrigins,omitempty"`
}

ClientRepresentation struct

type ClientTemplateRepresentation

type ClientTemplateRepresentation struct {
	Attributes                *map[string]interface{}         `json:"attributes,omitempty"`
	BearerOnly                *bool                           `json:"bearerOnly,omitempty"`
	ConsentRequired           *bool                           `json:"consentRequired,omitempty"`
	Description               *string                         `json:"description,omitempty"`
	DirectAccessGrantsEnabled *bool                           `json:"directAccessGrantsEnabled,omitempty"`
	FrontchannelLogout        *bool                           `json:"frontchannelLogout,omitempty"`
	FullScopeAllowed          *bool                           `json:"fullScopeAllowed,omitempty"`
	ID                        *string                         `json:"id,omitempty"`
	ImplicitFlowEnabled       *bool                           `json:"implicitFlowEnabled,omitempty"`
	Name                      *string                         `json:"name,omitempty"`
	Protocol                  *string                         `json:"protocol,omitempty"`
	ProtocolMappers           *[]ProtocolMapperRepresentation `json:"protocolMappers,omitempty"`
	PublicClient              *bool                           `json:"publicClient,omitempty"`
	ServiceAccountsEnabled    *bool                           `json:"serviceAccountsEnabled,omitempty"`
	StandardFlowEnabled       *bool                           `json:"standardFlowEnabled,omitempty"`
}

ClientTemplateRepresentation struct

type ComponentExportRepresentation

type ComponentExportRepresentation struct {
	Config        *MultivaluedHashMap             `json:"config,omitempty"`
	ID            *string                         `json:"id,omitempty"`
	Name          *string                         `json:"name,omitempty"`
	ProviderID    *string                         `json:"providerId,omitempty"`
	SubComponents *ComponentsExportRepresentation `json:"subComponents,omitempty"`
	SubType       *string                         `json:"subType,omitempty"`
}

ComponentExportRepresentation struct

type ComponentRepresentation

type ComponentRepresentation struct {
	Config       *MultivaluedHashMap `json:"config,omitempty"`
	ID           *string             `json:"id,omitempty"`
	Name         *string             `json:"name,omitempty"`
	ParentID     *string             `json:"parentId,omitempty"`
	ProviderID   *string             `json:"providerId,omitempty"`
	ProviderType *string             `json:"providerType,omitempty"`
	SubType      *string             `json:"subType,omitempty"`
}

ComponentRepresentation struct

type ComponentTypeRepresentation

type ComponentTypeRepresentation struct {
	HelpText   *string                         `json:"helpText,omitempty"`
	ID         *string                         `json:"id,omitempty"`
	Metadata   *map[string]interface{}         `json:"metadata,omitempty"`
	Properties *[]ConfigPropertyRepresentation `json:"properties,omitempty"`
}

ComponentTypeRepresentation struct

type ComponentsExportRepresentation

type ComponentsExportRepresentation map[string][]ComponentExportRepresentation

ComponentsExportRepresentation struct

type Config

type Config struct {
	AddrTokenProvider string
	AddrAPI           string
	Timeout           time.Duration
	CacheTTL          time.Duration
	ErrorTolerance    time.Duration
}

Config is the keycloak client http config.

type ConfigPropertyRepresentation

type ConfigPropertyRepresentation struct {
	DefaultValue *map[string]interface{} `json:"defaultValue,omitempty"`
	HelpText     *string                 `json:"helpText,omitempty"`
	Label        *string                 `json:"label,omitempty"`
	Name         *string                 `json:"name,omitempty"`
	Options      *[]string               `json:"options,omitempty"`
	Secret       *bool                   `json:"secret,omitempty"`
	Type         *string                 `json:"type,omitempty"`
}

ConfigPropertyRepresentation struct

type CredentialRepresentation

type CredentialRepresentation struct {
	ID             *string `json:"id,omitempty"`
	Type           *string `json:"type,omitempty"`
	UserLabel      *string `json:"userLabel,omitempty"`
	CreatedDate    *int64  `json:"createdDate,omitempty"`
	CredentialData *string `json:"credentialData,omitempty"`
	Value          *string `json:"value,omitempty"`
	Temporary      *bool   `json:"temporary,omitempty"`
}

CredentialRepresentation struct

type EmailRepresentation

type EmailRepresentation struct {
	Recipient   *string                      `json:"recipient,omitempty"`
	Theming     *EmailThemingRepresentation  `json:"theming,omitempty"`
	Attachments *[]AttachementRepresentation `json:"attachments,omitempty"`
}

EmailRepresentation struct

type EmailThemingRepresentation

type EmailThemingRepresentation struct {
	SubjectKey         *string            `json:"subjectKey,omitempty"`
	SubjectParameters  *[]string          `json:"subjectParameters,omitempty"`
	Template           *string            `json:"template,omitempty"`
	TemplateParameters *map[string]string `json:"templateParameters,omitempty"`
	Locale             *string            `json:"locale,omitempty"`
}

EmailThemingRepresentation struct

type EventRepresentation

type EventRepresentation struct {
	ClientID  *string                 `json:"clientId,omitempty"`
	Details   *map[string]interface{} `json:"details,omitempty"`
	Error     *string                 `json:"error,omitempty"`
	IPAddress *string                 `json:"ipAddress,omitempty"`
	RealmID   *string                 `json:"realmId,omitempty"`
	SessionID *string                 `json:"sessionId,omitempty"`
	Time      *int64                  `json:"time,omitempty"`
	Type      *string                 `json:"type,omitempty"`
	UserID    *string                 `json:"userId,omitempty"`
}

EventRepresentation struct

type FederatedIdentityRepresentation

type FederatedIdentityRepresentation struct {
	IdentityProvider *string `json:"identityProvider,omitempty"`
	UserID           *string `json:"userId,omitempty"`
	UserName         *string `json:"userName,omitempty"`
}

FederatedIdentityRepresentation struct

type GlobalRequestResult

type GlobalRequestResult struct {
	FailedRequests  *[]string `json:"failedRequests,omitempty"`
	SuccessRequests *[]string `json:"successRequests,omitempty"`
}

GlobalRequestResult struct

type GroupRepresentation

type GroupRepresentation struct {
	Access      *map[string]interface{} `json:"access,omitempty"`
	Attributes  *map[string]interface{} `json:"attributes,omitempty"`
	ClientRoles *map[string]interface{} `json:"clientRoles,omitempty"`
	ID          *string                 `json:"id,omitempty"`
	Name        *string                 `json:"name,omitempty"`
	Path        *string                 `json:"path,omitempty"`
	RealmRoles  *[]string               `json:"realmRoles,omitempty"`
	SubGroups   *[]GroupRepresentation  `json:"subGroups,omitempty"`
}

GroupRepresentation struct

type HTTPError

type HTTPError struct {
	HTTPStatus int
	Message    string
}

HTTPError is returned when an error occured while contacting the keycloak instance.

func (HTTPError) Error

func (e HTTPError) Error() string

type IdentityProviderMapperRepresentation

type IdentityProviderMapperRepresentation struct {
	Config                 *map[string]interface{} `json:"config,omitempty"`
	ID                     *string                 `json:"id,omitempty"`
	IdentityProviderAlias  *string                 `json:"identityProviderAlias,omitempty"`
	IdentityProviderMapper *string                 `json:"identityProviderMapper,omitempty"`
	Name                   *string                 `json:"name,omitempty"`
}

IdentityProviderMapperRepresentation struct

type IdentityProviderRepresentation

type IdentityProviderRepresentation struct {
	AddReadTokenRoleOnCreate  *bool                   `json:"addReadTokenRoleOnCreate,omitempty"`
	Alias                     *string                 `json:"alias,omitempty"`
	Config                    *map[string]interface{} `json:"config,omitempty"`
	DisplayName               *string                 `json:"displayName,omitempty"`
	Enabled                   *bool                   `json:"enabled,omitempty"`
	FirstBrokerLoginFlowAlias *string                 `json:"firstBrokerLoginFlowAlias,omitempty"`
	InternalID                *string                 `json:"internalId,omitempty"`
	LinkOnly                  *bool                   `json:"linkOnly,omitempty"`
	PostBrokerLoginFlowAlias  *string                 `json:"postBrokerLoginFlowAlias,omitempty"`
	ProviderID                *string                 `json:"providerId,omitempty"`
	StoreToken                *bool                   `json:"storeToken,omitempty"`
	TrustEmail                *bool                   `json:"trustEmail,omitempty"`
}

IdentityProviderRepresentation struct

type KeyStoreConfig

type KeyStoreConfig struct {
	Format           *string `json:"format,omitempty"`
	KeyAlias         *string `json:"keyAlias,omitempty"`
	KeyPassword      *string `json:"keyPassword,omitempty"`
	RealmAlias       *string `json:"realmAlias,omitempty"`
	RealmCertificate *bool   `json:"realmCertificate,omitempty"`
	StorePassword    *string `json:"storePassword,omitempty"`
}

KeyStoreConfig struct

type KeysMetadataRepresentation

type KeysMetadataRepresentation struct {
	Active *map[string]interface{}                                `json:"active,omitempty"`
	Keys   *[]KeysMetadataRepresentationKeyMetadataRepresentation `json:"keys,omitempty"`
}

KeysMetadataRepresentation struct

type KeysMetadataRepresentationKeyMetadataRepresentation

type KeysMetadataRepresentationKeyMetadataRepresentation struct {
	Certificate      *string `json:"certificate,omitempty"`
	Kid              *string `json:"kid,omitempty"`
	ProviderID       *string `json:"providerId,omitempty"`
	ProviderPriority *int64  `json:"providerPriority,omitempty"`
	PublicKey        *string `json:"publicKey,omitempty"`
	Status           *string `json:"status,omitempty"`
	Type             *string `json:"type,omitempty"`
}

KeysMetadataRepresentationKeyMetadataRepresentation struct

type ManagementPermissionReference

type ManagementPermissionReference struct {
	Enabled          *bool                   `json:"enabled,omitempty"`
	Resource         *string                 `json:"resource,omitempty"`
	ScopePermissions *map[string]interface{} `json:"scopePermissions,omitempty"`
}

ManagementPermissionReference struct

type MappingsRepresentation

type MappingsRepresentation struct {
	ClientMappings *map[string]interface{} `json:"clientMappings,omitempty"`
	RealmMappings  *[]RoleRepresentation   `json:"realmMappings,omitempty"`
}

MappingsRepresentation struct

type MemoryInfoRepresentation

type MemoryInfoRepresentation struct {
	Free           *int64  `json:"free,omitempty"`
	FreeFormated   *string `json:"freeFormated,omitempty"`
	FreePercentage *int64  `json:"freePercentage,omitempty"`
	Total          *int64  `json:"total,omitempty"`
	TotalFormated  *string `json:"totalFormated,omitempty"`
	Used           *int64  `json:"used,omitempty"`
	UsedFormated   *string `json:"usedFormated,omitempty"`
}

MemoryInfoRepresentation struct

type MultivaluedHashMap

type MultivaluedHashMap map[string][]string

MultivaluedHashMap struct

type PartialImportRepresentation

type PartialImportRepresentation struct {
	Clients           *[]ClientRepresentation           `json:"clients,omitempty"`
	Groups            *[]GroupRepresentation            `json:"groups,omitempty"`
	IdentityProviders *[]IdentityProviderRepresentation `json:"identityProviders,omitempty"`
	IfResourceExists  *string                           `json:"ifResourceExists,omitempty"`
	Policy            *string                           `json:"policy,omitempty"`
	Roles             *RolesRepresentation              `json:"roles,omitempty"`
	Users             *[]UserRepresentation             `json:"users,omitempty"`
}

PartialImportRepresentation struct

type PasswordPolicyTypeRepresentation

type PasswordPolicyTypeRepresentation struct {
	ConfigType        *string `json:"configType,omitempty"`
	DefaultValue      *string `json:"defaultValue,omitempty"`
	DisplayName       *string `json:"displayName,omitempty"`
	ID                *string `json:"id,omitempty"`
	MultipleSupported *bool   `json:"multipleSupported,omitempty"`
}

PasswordPolicyTypeRepresentation struct

type PolicyRepresentation

type PolicyRepresentation struct {
	Config           *map[string]interface{} `json:"config,omitempty"`
	DecisionStrategy *string                 `json:"decisionStrategy,omitempty"`
	Description      *string                 `json:"description,omitempty"`
	ID               *string                 `json:"id,omitempty"`
	Logic            *string                 `json:"logic,omitempty"`
	Name             *string                 `json:"name,omitempty"`
	Policies         *[]string               `json:"policies,omitempty"`
	Resources        *[]string               `json:"resources,omitempty"`
	Scopes           *[]string               `json:"scopes,omitempty"`
	Type             *string                 `json:"type,omitempty"`
}

PolicyRepresentation struct

type ProfileInfoRepresentation

type ProfileInfoRepresentation struct {
	DisabledFeatures *[]string `json:"disabledFeatures,omitempty"`
	Name             *string   `json:"name,omitempty"`
}

ProfileInfoRepresentation struct

type ProtocolMapperRepresentation

type ProtocolMapperRepresentation struct {
	Config          *map[string]interface{} `json:"config,omitempty"`
	ConsentRequired *bool                   `json:"consentRequired,omitempty"`
	ConsentText     *string                 `json:"consentText,omitempty"`
	ID              *string                 `json:"id,omitempty"`
	Name            *string                 `json:"name,omitempty"`
	Protocol        *string                 `json:"protocol,omitempty"`
	ProtocolMapper  *string                 `json:"protocolMapper,omitempty"`
}

ProtocolMapperRepresentation struct

type ProviderRepresentation

type ProviderRepresentation struct {
	OperationalInfo *map[string]interface{} `json:"operationalInfo,omitempty"`
	Order           *int32                  `json:"order,omitempty"`
}

ProviderRepresentation struct

type RealmEventsConfigRepresentation

type RealmEventsConfigRepresentation struct {
	AdminEventsDetailsEnabled *bool     `json:"adminEventsDetailsEnabled,omitempty"`
	AdminEventsEnabled        *bool     `json:"adminEventsEnabled,omitempty"`
	EnabledEventTypes         *[]string `json:"enabledEventTypes,omitempty"`
	EventsEnabled             *bool     `json:"eventsEnabled,omitempty"`
	EventsExpiration          *int64    `json:"eventsExpiration,omitempty"`
	EventsListeners           *[]string `json:"eventsListeners,omitempty"`
}

RealmEventsConfigRepresentation struct

type RealmRepresentation

type RealmRepresentation struct {
	AccessCodeLifespan                  *int32                                  `json:"accessCodeLifespan,omitempty"`
	AccessCodeLifespanLogin             *int32                                  `json:"accessCodeLifespanLogin,omitempty"`
	AccessCodeLifespanUserAction        *int32                                  `json:"accessCodeLifespanUserAction,omitempty"`
	AccessTokenLifespan                 *int32                                  `json:"accessTokenLifespan,omitempty"`
	AccessTokenLifespanForImplicitFlow  *int32                                  `json:"accessTokenLifespanForImplicitFlow,omitempty"`
	AccountTheme                        *string                                 `json:"accountTheme,omitempty"`
	ActionTokenGeneratedByAdminLifespan *int32                                  `json:"actionTokenGeneratedByAdminLifespan,omitempty"`
	ActionTokenGeneratedByUserLifespan  *int32                                  `json:"actionTokenGeneratedByUserLifespan,omitempty"`
	AdminEventsDetailsEnabled           *bool                                   `json:"adminEventsDetailsEnabled,omitempty"`
	AdminEventsEnabled                  *bool                                   `json:"adminEventsEnabled,omitempty"`
	AdminTheme                          *string                                 `json:"adminTheme,omitempty"`
	Attributes                          *map[string]interface{}                 `json:"attributes,omitempty"`
	AuthenticationFlows                 *[]AuthenticationFlowRepresentation     `json:"authenticationFlows,omitempty"`
	AuthenticatorConfig                 *[]AuthenticatorConfigRepresentation    `json:"authenticatorConfig,omitempty"`
	BrowserFlow                         *string                                 `json:"browserFlow,omitempty"`
	BrowserSecurityHeaders              *map[string]interface{}                 `json:"browserSecurityHeaders,omitempty"`
	BruteForceProtected                 *bool                                   `json:"bruteForceProtected,omitempty"`
	ClientAuthenticationFlow            *string                                 `json:"clientAuthenticationFlow,omitempty"`
	ClientScopeMappings                 *map[string]interface{}                 `json:"clientScopeMappings,omitempty"`
	ClientTemplates                     *[]ClientTemplateRepresentation         `json:"clientTemplates,omitempty"`
	Clients                             *[]ClientRepresentation                 `json:"clients,omitempty"`
	Components                          *ComponentsExportRepresentation         `json:"components,omitempty"`
	DefaultGroups                       *[]string                               `json:"defaultGroups,omitempty"`
	DefaultLocale                       *string                                 `json:"defaultLocale,omitempty"`
	DefaultRoles                        *[]string                               `json:"defaultRoles,omitempty"`
	DirectGrantFlow                     *string                                 `json:"directGrantFlow,omitempty"`
	DisplayName                         *string                                 `json:"displayName,omitempty"`
	DisplayNameHTML                     *string                                 `json:"displayNameHtml,omitempty"`
	DockerAuthenticationFlow            *string                                 `json:"dockerAuthenticationFlow,omitempty"`
	DuplicateEmailsAllowed              *bool                                   `json:"duplicateEmailsAllowed,omitempty"`
	EditUsernameAllowed                 *bool                                   `json:"editUsernameAllowed,omitempty"`
	EmailTheme                          *string                                 `json:"emailTheme,omitempty"`
	Enabled                             *bool                                   `json:"enabled,omitempty"`
	EnabledEventTypes                   *[]string                               `json:"enabledEventTypes,omitempty"`
	EventsEnabled                       *bool                                   `json:"eventsEnabled,omitempty"`
	EventsExpiration                    *int64                                  `json:"eventsExpiration,omitempty"`
	EventsListeners                     *[]string                               `json:"eventsListeners,omitempty"`
	FailureFactor                       *int32                                  `json:"failureFactor,omitempty"`
	FederatedUsers                      *[]UserRepresentation                   `json:"federatedUsers,omitempty"`
	Groups                              *[]GroupRepresentation                  `json:"groups,omitempty"`
	ID                                  *string                                 `json:"id,omitempty"`
	IdentityProviderMappers             *[]IdentityProviderMapperRepresentation `json:"identityProviderMappers,omitempty"`
	IdentityProviders                   *[]IdentityProviderRepresentation       `json:"identityProviders,omitempty"`
	InternationalizationEnabled         *bool                                   `json:"internationalizationEnabled,omitempty"`
	KeycloakVersion                     *string                                 `json:"keycloakVersion,omitempty"`
	LoginTheme                          *string                                 `json:"loginTheme,omitempty"`
	LoginWithEmailAllowed               *bool                                   `json:"loginWithEmailAllowed,omitempty"`
	MaxDeltaTimeSeconds                 *int32                                  `json:"maxDeltaTimeSeconds,omitempty"`
	MaxFailureWaitSeconds               *int32                                  `json:"maxFailureWaitSeconds,omitempty"`
	MinimumQuickLoginWaitSeconds        *int32                                  `json:"minimumQuickLoginWaitSeconds,omitempty"`
	NotBefore                           *int32                                  `json:"notBefore,omitempty"`
	OfflineSessionIdleTimeout           *int32                                  `json:"offlineSessionIdleTimeout,omitempty"`
	OtpPolicyAlgorithm                  *string                                 `json:"otpPolicyAlgorithm,omitempty"`
	OtpPolicyDigits                     *int32                                  `json:"otpPolicyDigits,omitempty"`
	OtpPolicyInitialCounter             *int32                                  `json:"otpPolicyInitialCounter,omitempty"`
	OtpPolicyLookAheadWindow            *int32                                  `json:"otpPolicyLookAheadWindow,omitempty"`
	OtpPolicyPeriod                     *int32                                  `json:"otpPolicyPeriod,omitempty"`
	OtpPolicyType                       *string                                 `json:"otpPolicyType,omitempty"`
	OtpSupportedApplications            *[]string                               `json:"otpSupportedApplications,omitempty"`
	PasswordPolicy                      *string                                 `json:"passwordPolicy,omitempty"`
	PermanentLockout                    *bool                                   `json:"permanentLockout,omitempty"`
	ProtocolMappers                     *[]ProtocolMapperRepresentation         `json:"protocolMappers,omitempty"`
	QuickLoginCheckMilliSeconds         *int64                                  `json:"quickLoginCheckMilliSeconds,omitempty"`
	Realm                               *string                                 `json:"realm,omitempty"`
	RefreshTokenMaxReuse                *int32                                  `json:"refreshTokenMaxReuse,omitempty"`
	RegistrationAllowed                 *bool                                   `json:"registrationAllowed,omitempty"`
	RegistrationEmailAsUsername         *bool                                   `json:"registrationEmailAsUsername,omitempty"`
	RegistrationFlow                    *string                                 `json:"registrationFlow,omitempty"`
	RememberMe                          *bool                                   `json:"rememberMe,omitempty"`
	RequiredActions                     *[]RequiredActionProviderRepresentation `json:"requiredActions,omitempty"`
	ResetCredentialsFlow                *string                                 `json:"resetCredentialsFlow,omitempty"`
	ResetPasswordAllowed                *bool                                   `json:"resetPasswordAllowed,omitempty"`
	RevokeRefreshToken                  *bool                                   `json:"revokeRefreshToken,omitempty"`
	Roles                               *RolesRepresentation                    `json:"roles,omitempty"`
	ScopeMappings                       *[]ScopeMappingRepresentation           `json:"scopeMappings,omitempty"`
	SMTPServer                          *map[string]interface{}                 `json:"smtpServer,omitempty"`
	SslRequired                         *string                                 `json:"sslRequired,omitempty"`
	SsoSessionIdleTimeout               *int32                                  `json:"ssoSessionIdleTimeout,omitempty"`
	SsoSessionMaxLifespan               *int32                                  `json:"ssoSessionMaxLifespan,omitempty"`
	SupportedLocales                    *[]string                               `json:"supportedLocales,omitempty"`
	UserFederationMappers               *[]UserFederationMapperRepresentation   `json:"userFederationMappers,omitempty"`
	UserFederationProviders             *[]UserFederationProviderRepresentation `json:"userFederationProviders,omitempty"`
	Users                               *[]UserRepresentation                   `json:"users,omitempty"`
	VerifyEmail                         *bool                                   `json:"verifyEmail,omitempty"`
	WaitIncrementSeconds                *int32                                  `json:"waitIncrementSeconds,omitempty"`
}

RealmRepresentation struct

type RecoveryCodeRepresentation

type RecoveryCodeRepresentation struct {
	Code *string `json:"code,omitempty"`
}

RecoveryCodeRepresentation struct

type RequiredActionProviderRepresentation

type RequiredActionProviderRepresentation struct {
	Alias         *string                 `json:"alias,omitempty"`
	Config        *map[string]interface{} `json:"config,omitempty"`
	DefaultAction *bool                   `json:"defaultAction,omitempty"`
	Enabled       *bool                   `json:"enabled,omitempty"`
	Name          *string                 `json:"name,omitempty"`
	ProviderID    *string                 `json:"providerId,omitempty"`
}

RequiredActionProviderRepresentation struct

type ResourceOwnerRepresentation

type ResourceOwnerRepresentation struct {
	ID   *string `json:"id,omitempty"`
	Name *string `json:"name,omitempty"`
}

ResourceOwnerRepresentation struct

type ResourceRepresentation

type ResourceRepresentation struct {
	ID          *string                      `json:"id,omitempty"`
	IconURI     *string                      `json:"icon_uri,omitempty"`
	Name        *string                      `json:"name,omitempty"`
	Owner       *ResourceOwnerRepresentation `json:"owner,omitempty"`
	Policies    *[]PolicyRepresentation      `json:"policies,omitempty"`
	Scopes      *[]ScopeRepresentation       `json:"scopes,omitempty"`
	Type        *string                      `json:"type,omitempty"`
	TypedScopes *[]ScopeRepresentation       `json:"typedScopes,omitempty"`
	URI         *string                      `json:"uri,omitempty"`
}

ResourceRepresentation struct

type ResourceServerRepresentation

type ResourceServerRepresentation struct {
	AllowRemoteResourceManagement *bool                     `json:"allowRemoteResourceManagement,omitempty"`
	ClientID                      *string                   `json:"clientId,omitempty"`
	ID                            *string                   `json:"id,omitempty"`
	Name                          *string                   `json:"name,omitempty"`
	Policies                      *[]PolicyRepresentation   `json:"policies,omitempty"`
	PolicyEnforcementMode         *string                   `json:"policyEnforcementMode,omitempty"`
	Resources                     *[]ResourceRepresentation `json:"resources,omitempty"`
	Scopes                        *[]ScopeRepresentation    `json:"scopes,omitempty"`
}

ResourceServerRepresentation struct

type RoleRepresentation

type RoleRepresentation struct {
	ClientRole         *bool                         `json:"clientRole,omitempty"`
	Composite          *bool                         `json:"composite,omitempty"`
	Composites         *RoleRepresentationComposites `json:"composites,omitempty"`
	ContainerID        *string                       `json:"containerId,omitempty"`
	Description        *string                       `json:"description,omitempty"`
	ID                 *string                       `json:"id,omitempty"`
	Name               *string                       `json:"name,omitempty"`
	ScopeParamRequired *bool                         `json:"scopeParamRequired,omitempty"`
}

RoleRepresentation struct

type RoleRepresentationComposites

type RoleRepresentationComposites struct {
	Client *map[string]interface{} `json:"client,omitempty"`
	Realm  *[]string               `json:"realm,omitempty"`
}

RoleRepresentationComposites struct

type RolesRepresentation

type RolesRepresentation struct {
	Client *map[string]interface{} `json:"client,omitempty"`
	Realm  *[]RoleRepresentation   `json:"realm,omitempty"`
}

RolesRepresentation struct

type SMSRepresentation

type SMSRepresentation struct {
	MSISDN  *string                   `json:"msisdn,omitempty"`
	Theming *SMSThemingRepresentation `json:"theming,omitempty"`
}

SMSRepresentation struct

type SMSThemingRepresentation

type SMSThemingRepresentation struct {
	MessageKey        *string   `json:"messageKey,omitempty"`
	MessageParameters *[]string `json:"messageParameters,omitempty"`
	Locale            *string   `json:"locale,omitempty"`
}

SMSThemingRepresentation struct

type ScopeMappingRepresentation

type ScopeMappingRepresentation struct {
	Client         *string   `json:"client,omitempty"`
	ClientTemplate *string   `json:"clientTemplate,omitempty"`
	Roles          *[]string `json:"roles,omitempty"`
	Self           *string   `json:"self,omitempty"`
}

ScopeMappingRepresentation struct

type ScopeRepresentation

type ScopeRepresentation struct {
	IconURI   *string                   `json:"iconUri,omitempty"`
	ID        *string                   `json:"id,omitempty"`
	Name      *string                   `json:"name,omitempty"`
	Policies  *[]PolicyRepresentation   `json:"policies,omitempty"`
	Resources *[]ResourceRepresentation `json:"resources,omitempty"`
}

ScopeRepresentation struct

type ServerInfoRepresentation

type ServerInfoRepresentation struct {
	BuiltinProtocolMappers *map[string]interface{}             `json:"builtinProtocolMappers,omitempty"`
	ClientImporters        *[]map[string]interface{}           `json:"clientImporters,omitempty"`
	ClientInstallations    *map[string]interface{}             `json:"clientInstallations,omitempty"`
	ComponentTypes         *map[string]interface{}             `json:"componentTypes,omitempty"`
	Enums                  *map[string]interface{}             `json:"enums,omitempty"`
	IdentityProviders      *[]map[string]interface{}           `json:"identityProviders,omitempty"`
	MemoryInfo             *MemoryInfoRepresentation           `json:"memoryInfo,omitempty"`
	PasswordPolicies       *[]PasswordPolicyTypeRepresentation `json:"passwordPolicies,omitempty"`
	ProfileInfo            *ProfileInfoRepresentation          `json:"profileInfo,omitempty"`
	ProtocolMapperTypes    *map[string]interface{}             `json:"protocolMapperTypes,omitempty"`
	Providers              *map[string]interface{}             `json:"providers,omitempty"`
	SocialProviders        *[]map[string]interface{}           `json:"socialProviders,omitempty"`
	SystemInfo             *SystemInfoRepresentation           `json:"systemInfo,omitempty"`
	Themes                 *map[string]interface{}             `json:"themes,omitempty"`
}

ServerInfoRepresentation struct

type SmsCodeRepresentation

type SmsCodeRepresentation struct {
	Code *string `json:"code,omitempty"`
}

SmsCodeRepresentation struct

type SpiInfoRepresentation

type SpiInfoRepresentation struct {
	Internal  *bool                   `json:"internal,omitempty"`
	Providers *map[string]interface{} `json:"providers,omitempty"`
}

SpiInfoRepresentation struct

type StatisticsUsersRepresentation

type StatisticsUsersRepresentation struct {
	Total    int64 `json:"total,omitempty"`
	Disabled int64 `json:"disabled,omitempty"`
	Inactive int64 `json:"inactive,omitempty"`
}

StatisticsUsersRepresentation elements returned by GetStatisticsUsers

type SynchronizationResult

type SynchronizationResult struct {
	Added   *int32  `json:"added,omitempty"`
	Failed  *int32  `json:"failed,omitempty"`
	Ignored *bool   `json:"ignored,omitempty"`
	Removed *int32  `json:"removed,omitempty"`
	Status  *string `json:"status,omitempty"`
	Updated *int32  `json:"updated,omitempty"`
}

SynchronizationResult struct

type SystemInfoRepresentation

type SystemInfoRepresentation struct {
	FileEncoding   *string `json:"fileEncoding,omitempty"`
	JavaHome       *string `json:"javaHome,omitempty"`
	JavaRuntime    *string `json:"javaRuntime,omitempty"`
	JavaVendor     *string `json:"javaVendor,omitempty"`
	JavaVersion    *string `json:"javaVersion,omitempty"`
	JavaVM         *string `json:"javaVm,omitempty"`
	JavaVMVersion  *string `json:"javaVmVersion,omitempty"`
	OsArchitecture *string `json:"osArchitecture,omitempty"`
	OsName         *string `json:"osName,omitempty"`
	OsVersion      *string `json:"osVersion,omitempty"`
	ServerTime     *string `json:"serverTime,omitempty"`
	Uptime         *string `json:"uptime,omitempty"`
	UptimeMillis   *int64  `json:"uptimeMillis,omitempty"`
	UserDir        *string `json:"userDir,omitempty"`
	UserLocale     *string `json:"userLocale,omitempty"`
	UserName       *string `json:"userName,omitempty"`
	UserTimezone   *string `json:"userTimezone,omitempty"`
	Version        *string `json:"version,omitempty"`
}

SystemInfoRepresentation struct

type UserConsentRepresentation

type UserConsentRepresentation struct {
	ClientID               *string                 `json:"clientId,omitempty"`
	CreatedDate            *int64                  `json:"createdDate,omitempty"`
	GrantedClientRoles     *map[string]interface{} `json:"grantedClientRoles,omitempty"`
	GrantedProtocolMappers *map[string]interface{} `json:"grantedProtocolMappers,omitempty"`
	GrantedRealmRoles      *[]string               `json:"grantedRealmRoles,omitempty"`
	LastUpdatedDate        *int64                  `json:"lastUpdatedDate,omitempty"`
}

UserConsentRepresentation struct

type UserFederationMapperRepresentation

type UserFederationMapperRepresentation struct {
	Config                        *map[string]interface{} `json:"config,omitempty"`
	FederationMapperType          *string                 `json:"federationMapperType,omitempty"`
	FederationProviderDisplayName *string                 `json:"federationProviderDisplayName,omitempty"`
	ID                            *string                 `json:"id,omitempty"`
	Name                          *string                 `json:"name,omitempty"`
}

UserFederationMapperRepresentation struct

type UserFederationProviderRepresentation

type UserFederationProviderRepresentation struct {
	ChangedSyncPeriod *int32                  `json:"changedSyncPeriod,omitempty"`
	Config            *map[string]interface{} `json:"config,omitempty"`
	DisplayName       *string                 `json:"displayName,omitempty"`
	FullSyncPeriod    *int32                  `json:"fullSyncPeriod,omitempty"`
	ID                *string                 `json:"id,omitempty"`
	LastSync          *int32                  `json:"lastSync,omitempty"`
	Priority          *int32                  `json:"priority,omitempty"`
	ProviderName      *string                 `json:"providerName,omitempty"`
}

UserFederationProviderRepresentation struct

type UserRepresentation

type UserRepresentation struct {
	Access                     *map[string]bool                   `json:"access,omitempty"`
	Attributes                 *Attributes                        `json:"attributes,omitempty"`
	ClientConsents             *[]UserConsentRepresentation       `json:"clientConsents,omitempty"`
	ClientRoles                *map[string][]string               `json:"clientRoles,omitempty"`
	CreatedTimestamp           *int64                             `json:"createdTimestamp,omitempty"`
	Credentials                *[]CredentialRepresentation        `json:"credentials,omitempty"`
	DisableableCredentialTypes *[]string                          `json:"disableableCredentialTypes,omitempty"`
	Email                      *string                            `json:"email,omitempty"`
	EmailVerified              *bool                              `json:"emailVerified,omitempty"`
	Enabled                    *bool                              `json:"enabled,omitempty"`
	FederatedIdentities        *[]FederatedIdentityRepresentation `json:"federatedIdentities,omitempty"`
	FederationLink             *string                            `json:"federationLink,omitempty"`
	FirstName                  *string                            `json:"firstName,omitempty"`
	Groups                     *[]string                          `json:"groups,omitempty"`
	ID                         *string                            `json:"id,omitempty"`
	LastName                   *string                            `json:"lastName,omitempty"`
	NotBefore                  *int32                             `json:"notBefore,omitempty"`
	Origin                     *string                            `json:"origin,omitempty"`
	RealmRoles                 *[]string                          `json:"realmRoles,omitempty"`
	RequiredActions            *[]string                          `json:"requiredActions,omitempty"`
	Self                       *string                            `json:"self,omitempty"`
	ServiceAccountClientID     *string                            `json:"serviceAccountClientId,omitempty"`
	Username                   *string                            `json:"username,omitempty"`
}

UserRepresentation struct

func (*UserRepresentation) GetAttribute

func (u *UserRepresentation) GetAttribute(key AttributeKey) []string

GetAttribute returns an attribute given its key

func (*UserRepresentation) GetAttributeBool

func (u *UserRepresentation) GetAttributeBool(key AttributeKey) (*bool, error)

GetAttributeBool returns the first value of an attribute given its key

func (*UserRepresentation) GetAttributeDate

func (u *UserRepresentation) GetAttributeDate(key AttributeKey, dateLayouts []string) *string

GetAttributeDate returns an attribute which contains a date value

func (*UserRepresentation) GetAttributeInt

func (u *UserRepresentation) GetAttributeInt(key AttributeKey) (*int, error)

GetAttributeInt returns the first value of an attribute given its key

func (*UserRepresentation) GetAttributeString

func (u *UserRepresentation) GetAttributeString(key AttributeKey) *string

GetAttributeString returns the first value of an attribute given its key

func (*UserRepresentation) GetAttributeTime

func (u *UserRepresentation) GetAttributeTime(key AttributeKey, dateLayouts []string) (*time.Time, error)

GetAttributeTime returns an attribute which contains a date value

func (*UserRepresentation) SetAttribute

func (u *UserRepresentation) SetAttribute(key AttributeKey, value []string)

SetAttribute sets an attribute

func (*UserRepresentation) SetAttributeBool

func (u *UserRepresentation) SetAttributeBool(key AttributeKey, value bool)

SetAttributeBool sets an attribute with a single value

func (*UserRepresentation) SetAttributeDate

func (u *UserRepresentation) SetAttributeDate(key AttributeKey, date string, dateLayouts []string)

SetAttributeDate sets a date attribute

func (*UserRepresentation) SetAttributeInt

func (u *UserRepresentation) SetAttributeInt(key AttributeKey, value int)

SetAttributeInt sets an attribute with a single value

func (*UserRepresentation) SetAttributeString

func (u *UserRepresentation) SetAttributeString(key AttributeKey, value string)

SetAttributeString sets an attribute with a single value

func (*UserRepresentation) SetAttributeTime

func (u *UserRepresentation) SetAttributeTime(key AttributeKey, date time.Time, dateLayout string)

SetAttributeTime sets a date attribute

type UserSessionRepresentation

type UserSessionRepresentation struct {
	Clients    *map[string]interface{} `json:"clients,omitempty"`
	ID         *string                 `json:"id,omitempty"`
	IPAddress  *string                 `json:"ipAddress,omitempty"`
	LastAccess *int64                  `json:"lastAccess,omitempty"`
	Start      *int64                  `json:"start,omitempty"`
	UserID     *string                 `json:"userId,omitempty"`
	Username   *string                 `json:"username,omitempty"`
}

UserSessionRepresentation struct

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL