@@ -2,6 +2,7 @@ package provider
22
33import (
44 "context"
5+ "github.com/hashicorp/go-version"
56 "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
67 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
78 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
@@ -610,6 +611,12 @@ func resourceKeycloakRealm() *schema.Resource {
610611 Optional : true ,
611612 Computed : true ,
612613 },
614+ "first_broker_login_flow" : {
615+ Type : schema .TypeString ,
616+ Description : "Which flow should be used for FirstBrokerLoginFlow" ,
617+ Optional : true ,
618+ Computed : true ,
619+ },
613620
614621 // misc attributes
615622 "attributes" : {
@@ -684,7 +691,7 @@ func getRealmSMTPPasswordFromData(data *schema.ResourceData) (string, bool) {
684691 return "" , false
685692}
686693
687- func setRealmFlowBindings (data * schema.ResourceData , realm * keycloak.Realm ) {
694+ func setRealmFlowBindings (data * schema.ResourceData , realm * keycloak.Realm , keycloakVersion * version. Version ) {
688695 if flow , ok := data .GetOk ("browser_flow" ); ok {
689696 realm .BrowserFlow = stringPointer (flow .(string ))
690697 } else {
@@ -720,9 +727,17 @@ func setRealmFlowBindings(data *schema.ResourceData, realm *keycloak.Realm) {
720727 } else {
721728 realm .DockerAuthenticationFlow = stringPointer ("docker auth" )
722729 }
730+
731+ if keycloakVersion .GreaterThanOrEqual (keycloak .Version_24 .AsVersion ()) {
732+ if flow , ok := data .GetOk ("first_broker_login_flow" ); ok {
733+ realm .FirstBrokerLoginFlow = stringPointer (flow .(string ))
734+ } else {
735+ realm .FirstBrokerLoginFlow = stringPointer ("first broker login" )
736+ }
737+ }
723738}
724739
725- func getRealmFromData (data * schema.ResourceData ) (* keycloak.Realm , error ) {
740+ func getRealmFromData (data * schema.ResourceData , keycloakVersion * version. Version ) (* keycloak.Realm , error ) {
726741 internationalizationEnabled := false
727742 supportLocales := make ([]string , 0 )
728743 defaultLocale := ""
@@ -1012,7 +1027,7 @@ func getRealmFromData(data *schema.ResourceData) (*keycloak.Realm, error) {
10121027 realm .PasswordPolicy = passwordPolicy .(string )
10131028 }
10141029
1015- setRealmFlowBindings (data , realm )
1030+ setRealmFlowBindings (data , realm , keycloakVersion )
10161031
10171032 attributes := map [string ]interface {}{}
10181033 if v , ok := data .GetOk ("attributes" ); ok {
@@ -1176,7 +1191,7 @@ func setDefaultSecuritySettingsBruteForceDetection(realm *keycloak.Realm) {
11761191 realm .MaxDeltaTimeSeconds = 43200
11771192}
11781193
1179- func setRealmData (data * schema.ResourceData , realm * keycloak.Realm ) {
1194+ func setRealmData (data * schema.ResourceData , realm * keycloak.Realm , keycloakVersion * version. Version ) {
11801195 data .SetId (realm .Realm )
11811196
11821197 data .Set ("realm" , realm .Realm )
@@ -1296,6 +1311,10 @@ func setRealmData(data *schema.ResourceData, realm *keycloak.Realm) {
12961311 data .Set ("client_authentication_flow" , realm .ClientAuthenticationFlow )
12971312 data .Set ("docker_authentication_flow" , realm .DockerAuthenticationFlow )
12981313
1314+ if keycloakVersion .GreaterThanOrEqual (keycloak .Version_24 .AsVersion ()) {
1315+ data .Set ("first_broker_login_flow" , realm .FirstBrokerLoginFlow )
1316+ }
1317+
12991318 //WebAuthn
13001319 webAuthnPolicy := make (map [string ]interface {})
13011320 webAuthnPolicy ["acceptable_aaguids" ] = realm .WebAuthnPolicyAcceptableAaguids
@@ -1375,8 +1394,9 @@ func getHeaderSettings(realm *keycloak.Realm) map[string]interface{} {
13751394
13761395func resourceKeycloakRealmCreate (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
13771396 keycloakClient := meta .(* keycloak.KeycloakClient )
1397+ keycloakVersion := keycloakClient .Version ()
13781398
1379- realm , err := getRealmFromData (data )
1399+ realm , err := getRealmFromData (data , keycloakVersion )
13801400 if err != nil {
13811401 return diag .FromErr (err )
13821402 }
@@ -1396,13 +1416,14 @@ func resourceKeycloakRealmCreate(ctx context.Context, data *schema.ResourceData,
13961416 return diag .FromErr (err )
13971417 }
13981418
1399- setRealmData (data , realm )
1419+ setRealmData (data , realm , keycloakVersion )
14001420
14011421 return resourceKeycloakRealmRead (ctx , data , meta )
14021422}
14031423
14041424func resourceKeycloakRealmRead (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
14051425 keycloakClient := meta .(* keycloak.KeycloakClient )
1426+ keycloakVersion := keycloakClient .Version ()
14061427
14071428 realm , err := keycloakClient .GetRealm (ctx , data .Id ())
14081429 if err != nil {
@@ -1414,15 +1435,16 @@ func resourceKeycloakRealmRead(ctx context.Context, data *schema.ResourceData, m
14141435 realm .SmtpServer .Password = smtpPassword
14151436 }
14161437
1417- setRealmData (data , realm )
1438+ setRealmData (data , realm , keycloakVersion )
14181439
14191440 return nil
14201441}
14211442
14221443func resourceKeycloakRealmUpdate (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
14231444 keycloakClient := meta .(* keycloak.KeycloakClient )
1445+ keycloakVersion := keycloakClient .Version ()
14241446
1425- realm , err := getRealmFromData (data )
1447+ realm , err := getRealmFromData (data , keycloakVersion )
14261448 if err != nil {
14271449 return diag .FromErr (err )
14281450 }
@@ -1437,7 +1459,7 @@ func resourceKeycloakRealmUpdate(ctx context.Context, data *schema.ResourceData,
14371459 return diag .FromErr (err )
14381460 }
14391461
1440- setRealmData (data , realm )
1462+ setRealmData (data , realm , keycloakVersion )
14411463
14421464 return nil
14431465}
0 commit comments