github.com/GoogleCloudPlatform/terraformer@v0.8.18/providers/keycloak/realm.go (about) 1 // Copyright 2018 The Terraformer Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package keycloak 16 17 import ( 18 "reflect" 19 "strconv" 20 "strings" 21 22 "github.com/GoogleCloudPlatform/terraformer/terraformutils" 23 "github.com/mrparkers/terraform-provider-keycloak/keycloak" 24 ) 25 26 func (g RealmGenerator) createRealmResources(realms []*keycloak.Realm) []terraformutils.Resource { 27 var resources []terraformutils.Resource 28 for _, realm := range realms { 29 resources = append(resources, terraformutils.NewSimpleResource( 30 realm.Id, 31 "realm_"+normalizeResourceName(realm.Realm), 32 "keycloak_realm", 33 "keycloak", 34 []string{}, 35 )) 36 } 37 return resources 38 } 39 40 func (g RealmGenerator) createRequiredActionResources(requiredActions []*keycloak.RequiredAction) []terraformutils.Resource { 41 var resources []terraformutils.Resource 42 for _, requiredAction := range requiredActions { 43 resources = append(resources, terraformutils.NewResource( 44 requiredAction.RealmId+"/"+requiredAction.Alias, 45 "required_action_"+normalizeResourceName(requiredAction.RealmId)+"_"+normalizeResourceName(requiredAction.Alias), 46 "keycloak_required_action", 47 "keycloak", 48 map[string]string{ 49 "realm_id": requiredAction.RealmId, 50 "alias": requiredAction.Alias, 51 }, 52 []string{}, 53 map[string]interface{}{}, 54 )) 55 } 56 return resources 57 } 58 59 func (g RealmGenerator) createCustomUserFederationResources(customUserFederations *[]keycloak.CustomUserFederation) []terraformutils.Resource { 60 var resources []terraformutils.Resource 61 for _, customUserFederation := range *customUserFederations { 62 if customUserFederation.ProviderId == "ldap" { 63 if customUserFederation.Config["bindCredential"][0] != "" { 64 var bindDn string 65 for _, i := range strings.Split(customUserFederation.Config["bindDn"][0], ",") { 66 attrib := strings.Split(i, "=") 67 if strings.ToLower(attrib[0]) == "cn" { 68 bindDn = attrib[1] 69 } 70 } 71 resources = append(resources, terraformutils.NewResource( 72 customUserFederation.Id, 73 "ldap_user_federation_"+normalizeResourceName(customUserFederation.RealmId)+"_"+normalizeResourceName(customUserFederation.Name)+"_"+normalizeResourceName(bindDn), 74 "keycloak_ldap_user_federation", 75 "keycloak", 76 map[string]string{ 77 "realm_id": customUserFederation.RealmId, 78 "provider_id": customUserFederation.ProviderId, 79 "bind_dn": bindDn, 80 }, 81 []string{}, 82 map[string]interface{}{}, 83 )) 84 } else { 85 resources = append(resources, terraformutils.NewResource( 86 customUserFederation.Id, 87 "ldap_user_federation_"+normalizeResourceName(customUserFederation.RealmId)+"_"+normalizeResourceName(customUserFederation.Name), 88 "keycloak_ldap_user_federation", 89 "keycloak", 90 map[string]string{ 91 "realm_id": customUserFederation.RealmId, 92 "provider_id": customUserFederation.ProviderId, 93 }, 94 []string{}, 95 map[string]interface{}{}, 96 )) 97 } 98 } 99 } 100 return resources 101 } 102 103 func (g RealmGenerator) createLdapMapperResources(realmID, providerName string, mappers *[]interface{}) []terraformutils.Resource { 104 var resources []terraformutils.Resource 105 var providerID string 106 var mapperID string 107 var mapperName string 108 var mapperType string 109 var name string 110 mapperNames := make(map[string]int) 111 for _, mapper := range *mappers { 112 switch reflect.TypeOf(mapper).String() { 113 case "*keycloak.LdapFullNameMapper": 114 providerID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapFullNameMapper).LdapUserFederationId 115 mapperID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapFullNameMapper).Id 116 mapperName = reflect.ValueOf(mapper).Interface().(*keycloak.LdapFullNameMapper).Name 117 mapperType = "full_name" 118 case "*keycloak.LdapGroupMapper": 119 providerID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapGroupMapper).LdapUserFederationId 120 mapperID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapGroupMapper).Id 121 mapperName = reflect.ValueOf(mapper).Interface().(*keycloak.LdapGroupMapper).Name 122 mapperType = "group" 123 case "*keycloak.LdapRoleMapper": 124 providerID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapRoleMapper).LdapUserFederationId 125 mapperID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapRoleMapper).Id 126 mapperName = reflect.ValueOf(mapper).Interface().(*keycloak.LdapRoleMapper).Name 127 mapperType = "role" 128 case "*keycloak.LdapHardcodedGroupMapper": 129 providerID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapHardcodedGroupMapper).LdapUserFederationId 130 mapperID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapHardcodedGroupMapper).Id 131 mapperName = reflect.ValueOf(mapper).Interface().(*keycloak.LdapHardcodedGroupMapper).Name 132 mapperType = "hardcoded_group" 133 case "*keycloak.LdapHardcodedRoleMapper": 134 providerID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapHardcodedRoleMapper).LdapUserFederationId 135 mapperID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapHardcodedRoleMapper).Id 136 mapperName = reflect.ValueOf(mapper).Interface().(*keycloak.LdapHardcodedRoleMapper).Name 137 mapperType = "hardcoded_role" 138 case "*keycloak.LdapMsadLdsUserAccountControlMapper": 139 providerID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapMsadLdsUserAccountControlMapper).LdapUserFederationId 140 mapperID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapMsadLdsUserAccountControlMapper).Id 141 mapperName = reflect.ValueOf(mapper).Interface().(*keycloak.LdapMsadLdsUserAccountControlMapper).Name 142 mapperType = "msad_lds_user_account_control" 143 case "*keycloak.LdapMsadUserAccountControlMapper": 144 providerID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapMsadUserAccountControlMapper).LdapUserFederationId 145 mapperID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapMsadUserAccountControlMapper).Id 146 mapperName = reflect.ValueOf(mapper).Interface().(*keycloak.LdapMsadUserAccountControlMapper).Name 147 mapperType = "msad_user_account_control" 148 case "*keycloak.LdapUserAttributeMapper": 149 providerID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapUserAttributeMapper).LdapUserFederationId 150 mapperID = reflect.ValueOf(mapper).Interface().(*keycloak.LdapUserAttributeMapper).Id 151 mapperName = reflect.ValueOf(mapper).Interface().(*keycloak.LdapUserAttributeMapper).Name 152 mapperType = "user_attribute" 153 default: 154 continue 155 } 156 name = "ldap_" + mapperType + "_mapper_" + normalizeResourceName(realmID) + "_" + normalizeResourceName(providerName) + "_" + normalizeResourceName(mapperName) 157 for k, v := range mapperNames { 158 if k == name { 159 v++ 160 name += strconv.Itoa(v) 161 } 162 } 163 if name == "ldap_"+mapperType+"_mapper_"+normalizeResourceName(realmID)+"_"+normalizeResourceName(providerName)+"_"+normalizeResourceName(mapperName) { 164 mapperNames[name] = 1 165 } 166 resources = append(resources, terraformutils.NewResource( 167 mapperID, 168 name, 169 "keycloak_ldap_"+mapperType+"_mapper", 170 "keycloak", 171 map[string]string{ 172 "realm_id": realmID, 173 "provider_id": providerID, 174 }, 175 []string{}, 176 map[string]interface{}{}, 177 )) 178 } 179 return resources 180 }