Browse Source

Add ExportRealm method and small integration test

master
CMajeri 8 years ago
parent
commit
6d7de7ffb2
  1. 92
      definitions.go
  2. 8
      realm.go
  3. 24
      realm_test.go

92
definitions.go

@ -58,7 +58,7 @@ type AuthenticationExecutionRepresentation struct {
type AuthenticationFlowRepresentation struct {
Alias *string `json:"alias,omitempty"`
AuthenticationExecutions *AuthenticationExecutionExportRepresentation `json:"authenticationExecutions,omitempty"`
AuthenticationExecutions *[]AuthenticationExecutionExportRepresentation `json:"authenticationExecutions,omitempty"`
BuiltIn *bool `json:"builtIn,omitempty"`
Description *string `json:"description,omitempty"`
Id *string `json:"id,omitempty"`
@ -69,7 +69,7 @@ type AuthenticationFlowRepresentation struct {
type AuthenticatorConfigInfoRepresentation struct {
HelpText *string `json:"helpText,omitempty"`
Name *string `json:"name,omitempty"`
Properties *ConfigPropertyRepresentation `json:"properties,omitempty"`
Properties *[]ConfigPropertyRepresentation `json:"properties,omitempty"`
ProviderId *string `json:"providerId,omitempty"`
}
@ -103,7 +103,7 @@ type ClientInitialAccessPresentation struct {
type ClientMappingsRepresentation struct {
Client *string `json:"client,omitempty"`
Id *string `json:"id,omitempty"`
Mappings *RoleRepresentation `json:"mappings,omitempty"`
Mappings *[]RoleRepresentation `json:"mappings,omitempty"`
}
type ClientRepresentation struct {
@ -130,7 +130,7 @@ type ClientRepresentation struct {
NodeReRegistrationTimeout *int32 `json:"nodeReRegistrationTimeout,omitempty"`
NotBefore *int32 `json:"notBefore,omitempty"`
Protocol *string `json:"protocol,omitempty"`
ProtocolMappers *ProtocolMapperRepresentation `json:"protocolMappers,omitempty"`
ProtocolMappers *[]ProtocolMapperRepresentation `json:"protocolMappers,omitempty"`
PublicClient *bool `json:"publicClient,omitempty"`
RedirectUris *[]string `json:"redirectUris,omitempty"`
RegisteredNodes *map[string]interface{} `json:"registeredNodes,omitempty"`
@ -158,7 +158,7 @@ type ClientTemplateRepresentation struct {
ImplicitFlowEnabled *bool `json:"implicitFlowEnabled,omitempty"`
Name *string `json:"name,omitempty"`
Protocol *string `json:"protocol,omitempty"`
ProtocolMappers *ProtocolMapperRepresentation `json:"protocolMappers,omitempty"`
ProtocolMappers *[]ProtocolMapperRepresentation `json:"protocolMappers,omitempty"`
PublicClient *bool `json:"publicClient,omitempty"`
ServiceAccountsEnabled *bool `json:"serviceAccountsEnabled,omitempty"`
StandardFlowEnabled *bool `json:"standardFlowEnabled,omitempty"`
@ -187,7 +187,7 @@ 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"`
Properties *[]ConfigPropertyRepresentation `json:"properties,omitempty"`
}
type ConfigPropertyRepresentation struct {
@ -247,7 +247,7 @@ type GroupRepresentation struct {
Name *string `json:"name,omitempty"`
Path *string `json:"path,omitempty"`
RealmRoles *[]string `json:"realmRoles,omitempty"`
SubGroups *GroupRepresentation `json:"subGroups,omitempty"`
SubGroups *[]GroupRepresentation `json:"subGroups,omitempty"`
}
type IdentityProviderMapperRepresentation struct {
@ -275,10 +275,10 @@ type IdentityProviderRepresentation struct {
type KeysMetadataRepresentation struct {
Active *map[string]interface{} `json:"active,omitempty"`
Keys *KeysMetadataRepresentation_KeyMetadataRepresentation `json:"keys,omitempty"`
Keys *[]KeysMetadataRepresentationKeyMetadataRepresentation `json:"keys,omitempty"`
}
type KeysMetadataRepresentation_KeyMetadataRepresentation struct {
type KeysMetadataRepresentationKeyMetadataRepresentation struct {
Certificate *string `json:"certificate,omitempty"`
Kid *string `json:"kid,omitempty"`
ProviderId *string `json:"providerId,omitempty"`
@ -305,7 +305,7 @@ type ManagementPermissionReference struct {
type MappingsRepresentation struct {
ClientMappings *map[string]interface{} `json:"clientMappings,omitempty"`
RealmMappings *RoleRepresentation `json:"realmMappings,omitempty"`
RealmMappings *[]RoleRepresentation `json:"realmMappings,omitempty"`
}
type MemoryInfoRepresentation struct {
@ -325,13 +325,13 @@ type MultivaluedHashMap struct {
}
type PartialImportRepresentation struct {
Clients *ClientRepresentation `json:"clients,omitempty"`
Groups *GroupRepresentation `json:"groups,omitempty"`
IdentityProviders *IdentityProviderRepresentation `json:"identityProviders,omitempty"`
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"`
Users *[]UserRepresentation `json:"users,omitempty"`
}
type PasswordPolicyTypeRepresentation struct {
@ -397,15 +397,15 @@ type RealmRepresentation struct {
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"`
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"`
ClientTemplates *[]ClientTemplateRepresentation `json:"clientTemplates,omitempty"`
Clients *[]ClientRepresentation `json:"clients,omitempty"`
Components *MultivaluedHashMap `json:"components,omitempty"`
DefaultGroups *[]string `json:"defaultGroups,omitempty"`
DefaultLocale *string `json:"defaultLocale,omitempty"`
@ -423,11 +423,11 @@ type RealmRepresentation struct {
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"`
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"`
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"`
@ -446,7 +446,7 @@ type RealmRepresentation struct {
OtpSupportedApplications *[]string `json:"otpSupportedApplications,omitempty"`
PasswordPolicy *string `json:"passwordPolicy,omitempty"`
PermanentLockout *bool `json:"permanentLockout,omitempty"`
ProtocolMappers *ProtocolMapperRepresentation `json:"protocolMappers,omitempty"`
ProtocolMappers *[]ProtocolMapperRepresentation `json:"protocolMappers,omitempty"`
QuickLoginCheckMilliSeconds *int64 `json:"quickLoginCheckMilliSeconds,omitempty"`
Realm *string `json:"realm,omitempty"`
RefreshTokenMaxReuse *int32 `json:"refreshTokenMaxReuse,omitempty"`
@ -454,20 +454,20 @@ type RealmRepresentation struct {
RegistrationEmailAsUsername *bool `json:"registrationEmailAsUsername,omitempty"`
RegistrationFlow *string `json:"registrationFlow,omitempty"`
RememberMe *bool `json:"rememberMe,omitempty"`
RequiredActions *RequiredActionProviderRepresentation `json:"requiredActions,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"`
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"`
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"`
}
@ -491,10 +491,10 @@ type ResourceRepresentation struct {
Icon_uri *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"`
Policies *[]PolicyRepresentation `json:"policies,omitempty"`
Scopes *[]ScopeRepresentation `json:"scopes,omitempty"`
Type *string `json:"type,omitempty"`
TypedScopes *ScopeRepresentation `json:"typedScopes,omitempty"`
TypedScopes *[]ScopeRepresentation `json:"typedScopes,omitempty"`
Uri *string `json:"uri,omitempty"`
}
@ -503,16 +503,16 @@ type ResourceServerRepresentation struct {
ClientId *string `json:"clientId,omitempty"`
Id *string `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Policies *PolicyRepresentation `json:"policies,omitempty"`
Policies *[]PolicyRepresentation `json:"policies,omitempty"`
PolicyEnforcementMode *string `json:"policyEnforcementMode,omitempty"`
Resources *ResourceRepresentation `json:"resources,omitempty"`
Scopes *ScopeRepresentation `json:"scopes,omitempty"`
Resources *[]ResourceRepresentation `json:"resources,omitempty"`
Scopes *[]ScopeRepresentation `json:"scopes,omitempty"`
}
type RoleRepresentation struct {
ClientRole *bool `json:"clientRole,omitempty"`
Composite *bool `json:"composite,omitempty"`
Composites *RoleRepresentation_Composites `json:"composites,omitempty"`
Composites *RoleRepresentationComposites `json:"composites,omitempty"`
ContainerId *string `json:"containerId,omitempty"`
Description *string `json:"description,omitempty"`
Id *string `json:"id,omitempty"`
@ -520,14 +520,14 @@ type RoleRepresentation struct {
ScopeParamRequired *bool `json:"scopeParamRequired,omitempty"`
}
type RoleRepresentation_Composites struct {
type RoleRepresentationComposites struct {
Client *map[string]interface{} `json:"client,omitempty"`
Realm *[]string `json:"realm,omitempty"`
}
type RolesRepresentation struct {
Client *map[string]interface{} `json:"client,omitempty"`
Realm *RoleRepresentation `json:"realm,omitempty"`
Realm *[]RoleRepresentation `json:"realm,omitempty"`
}
type ScopeMappingRepresentation struct {
@ -541,23 +541,23 @@ 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"`
Policies *[]PolicyRepresentation `json:"policies,omitempty"`
Resources *[]ResourceRepresentation `json:"resources,omitempty"`
}
type ServerInfoRepresentation struct {
BuiltinProtocolMappers *map[string]interface{} `json:"builtinProtocolMappers,omitempty"`
ClientImporters *map[string]interface{} `json:"clientImporters,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"`
IdentityProviders *[]map[string]interface{} `json:"identityProviders,omitempty"`
MemoryInfo *MemoryInfoRepresentation `json:"memoryInfo,omitempty"`
PasswordPolicies *PasswordPolicyTypeRepresentation `json:"passwordPolicies,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"`
SocialProviders *[]map[string]interface{} `json:"socialProviders,omitempty"`
SystemInfo *SystemInfoRepresentation `json:"systemInfo,omitempty"`
Themes *map[string]interface{} `json:"themes,omitempty"`
}
@ -628,15 +628,15 @@ type UserFederationProviderRepresentation struct {
type UserRepresentation struct {
Access *map[string]interface{} `json:"access,omitempty"`
Attributes *map[string]interface{} `json:"attributes,omitempty"`
ClientConsents *UserConsentRepresentation `json:"clientConsents,omitempty"`
ClientConsents *[]UserConsentRepresentation `json:"clientConsents,omitempty"`
ClientRoles *map[string]interface{} `json:"clientRoles,omitempty"`
CreatedTimestamp *int64 `json:"createdTimestamp,omitempty"`
Credentials *CredentialRepresentation `json:"credentials,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"`
FederatedIdentities *[]FederatedIdentityRepresentation `json:"federatedIdentities,omitempty"`
FederationLink *string `json:"federationLink,omitempty"`
FirstName *string `json:"firstName,omitempty"`
Groups *[]string `json:"groups,omitempty"`

8
realm.go

@ -8,6 +8,7 @@ import (
const (
realmRootPath = "/auth/admin/realms"
realmPath = realmRootPath + "/:realm"
exportRealmPath = "/auth/realms/:realm/export/realm"
)
// GetRealms get the top level represention of all the realms. Nested information like users are
@ -41,3 +42,10 @@ func (c *Client) UpdateRealm(realmName string, realm RealmRepresentation) error
func (c *Client) DeleteRealm(realmName string) error {
return c.delete(url.Path(realmPath), url.Param("realm", realmName))
}
// ExportRealm recovers the full realm.
func (c *Client) ExportRealm(realmName string) (RealmRepresentation, error) {
var resp = RealmRepresentation{}
var err = c.get(&resp, url.Path(exportRealmPath), url.Param("realm", realmName))
return resp, err
}

24
realm_test.go

@ -1 +1,25 @@
package keycloak
import (
"testing"
"time"
"github.com/davecgh/go-spew/spew"
"github.com/stretchr/testify/require"
)
func TestExportRealms(t *testing.T) {
var client, err = New(Config{
Addr: "http://keycloak:80",
Username: "admin",
Password: "admin",
Timeout: 10 * time.Second,
})
require.Nil(t, err, "Err wasnt nil!", err)
{
var realm, err = client.ExportRealm("master")
require.Nil(t, err, "Err isnt nil!", err)
spew.Dump(realm)
}
}

Loading…
Cancel
Save