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  }