@@ -2,6 +2,7 @@ package provider
2
2
3
3
import (
4
4
"context"
5
+ "github.com/hashicorp/go-version"
5
6
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
6
7
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
7
8
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
@@ -610,6 +611,12 @@ func resourceKeycloakRealm() *schema.Resource {
610
611
Optional : true ,
611
612
Computed : true ,
612
613
},
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
+ },
613
620
614
621
// misc attributes
615
622
"attributes" : {
@@ -684,7 +691,7 @@ func getRealmSMTPPasswordFromData(data *schema.ResourceData) (string, bool) {
684
691
return "" , false
685
692
}
686
693
687
- func setRealmFlowBindings (data * schema.ResourceData , realm * keycloak.Realm ) {
694
+ func setRealmFlowBindings (data * schema.ResourceData , realm * keycloak.Realm , keycloakVersion * version. Version ) {
688
695
if flow , ok := data .GetOk ("browser_flow" ); ok {
689
696
realm .BrowserFlow = stringPointer (flow .(string ))
690
697
} else {
@@ -720,9 +727,17 @@ func setRealmFlowBindings(data *schema.ResourceData, realm *keycloak.Realm) {
720
727
} else {
721
728
realm .DockerAuthenticationFlow = stringPointer ("docker auth" )
722
729
}
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
+ }
723
738
}
724
739
725
- func getRealmFromData (data * schema.ResourceData ) (* keycloak.Realm , error ) {
740
+ func getRealmFromData (data * schema.ResourceData , keycloakVersion * version. Version ) (* keycloak.Realm , error ) {
726
741
internationalizationEnabled := false
727
742
supportLocales := make ([]string , 0 )
728
743
defaultLocale := ""
@@ -1012,7 +1027,7 @@ func getRealmFromData(data *schema.ResourceData) (*keycloak.Realm, error) {
1012
1027
realm .PasswordPolicy = passwordPolicy .(string )
1013
1028
}
1014
1029
1015
- setRealmFlowBindings (data , realm )
1030
+ setRealmFlowBindings (data , realm , keycloakVersion )
1016
1031
1017
1032
attributes := map [string ]interface {}{}
1018
1033
if v , ok := data .GetOk ("attributes" ); ok {
@@ -1176,7 +1191,7 @@ func setDefaultSecuritySettingsBruteForceDetection(realm *keycloak.Realm) {
1176
1191
realm .MaxDeltaTimeSeconds = 43200
1177
1192
}
1178
1193
1179
- func setRealmData (data * schema.ResourceData , realm * keycloak.Realm ) {
1194
+ func setRealmData (data * schema.ResourceData , realm * keycloak.Realm , keycloakVersion * version. Version ) {
1180
1195
data .SetId (realm .Realm )
1181
1196
1182
1197
data .Set ("realm" , realm .Realm )
@@ -1296,6 +1311,10 @@ func setRealmData(data *schema.ResourceData, realm *keycloak.Realm) {
1296
1311
data .Set ("client_authentication_flow" , realm .ClientAuthenticationFlow )
1297
1312
data .Set ("docker_authentication_flow" , realm .DockerAuthenticationFlow )
1298
1313
1314
+ if keycloakVersion .GreaterThanOrEqual (keycloak .Version_24 .AsVersion ()) {
1315
+ data .Set ("first_broker_login_flow" , realm .FirstBrokerLoginFlow )
1316
+ }
1317
+
1299
1318
//WebAuthn
1300
1319
webAuthnPolicy := make (map [string ]interface {})
1301
1320
webAuthnPolicy ["acceptable_aaguids" ] = realm .WebAuthnPolicyAcceptableAaguids
@@ -1375,8 +1394,9 @@ func getHeaderSettings(realm *keycloak.Realm) map[string]interface{} {
1375
1394
1376
1395
func resourceKeycloakRealmCreate (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
1377
1396
keycloakClient := meta .(* keycloak.KeycloakClient )
1397
+ keycloakVersion := keycloakClient .Version ()
1378
1398
1379
- realm , err := getRealmFromData (data )
1399
+ realm , err := getRealmFromData (data , keycloakVersion )
1380
1400
if err != nil {
1381
1401
return diag .FromErr (err )
1382
1402
}
@@ -1396,13 +1416,14 @@ func resourceKeycloakRealmCreate(ctx context.Context, data *schema.ResourceData,
1396
1416
return diag .FromErr (err )
1397
1417
}
1398
1418
1399
- setRealmData (data , realm )
1419
+ setRealmData (data , realm , keycloakVersion )
1400
1420
1401
1421
return resourceKeycloakRealmRead (ctx , data , meta )
1402
1422
}
1403
1423
1404
1424
func resourceKeycloakRealmRead (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
1405
1425
keycloakClient := meta .(* keycloak.KeycloakClient )
1426
+ keycloakVersion := keycloakClient .Version ()
1406
1427
1407
1428
realm , err := keycloakClient .GetRealm (ctx , data .Id ())
1408
1429
if err != nil {
@@ -1414,15 +1435,16 @@ func resourceKeycloakRealmRead(ctx context.Context, data *schema.ResourceData, m
1414
1435
realm .SmtpServer .Password = smtpPassword
1415
1436
}
1416
1437
1417
- setRealmData (data , realm )
1438
+ setRealmData (data , realm , keycloakVersion )
1418
1439
1419
1440
return nil
1420
1441
}
1421
1442
1422
1443
func resourceKeycloakRealmUpdate (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
1423
1444
keycloakClient := meta .(* keycloak.KeycloakClient )
1445
+ keycloakVersion := keycloakClient .Version ()
1424
1446
1425
- realm , err := getRealmFromData (data )
1447
+ realm , err := getRealmFromData (data , keycloakVersion )
1426
1448
if err != nil {
1427
1449
return diag .FromErr (err )
1428
1450
}
@@ -1437,7 +1459,7 @@ func resourceKeycloakRealmUpdate(ctx context.Context, data *schema.ResourceData,
1437
1459
return diag .FromErr (err )
1438
1460
}
1439
1461
1440
- setRealmData (data , realm )
1462
+ setRealmData (data , realm , keycloakVersion )
1441
1463
1442
1464
return nil
1443
1465
}
0 commit comments