diff --git a/docs/resources/realm_keystore_aes_generated.md b/docs/resources/realm_keystore_aes_generated.md index 81581165d..e0515422c 100644 --- a/docs/resources/realm_keystore_aes_generated.md +++ b/docs/resources/realm_keystore_aes_generated.md @@ -17,7 +17,7 @@ resource "keycloak_realm" "realm" { resource "keycloak_realm_keystore_aes_generated" "keystore_aes_generated" { name = "my-aes-generated-key" - realm_id = keycloak_realm.realm.realm + realm_id = keycloak_realm.realm.id enabled = true active = true @@ -43,5 +43,5 @@ Realm keys can be imported using realm name and keystore id, you can find it in Example: ```bash -$ terraform import keycloak_realm_keystore_aes_generated.keystore_aes_generated my-realm/my-realm/618cfba7-49aa-4c09-9a19-2f699b576f0b +$ terraform import keycloak_realm_keystore_aes_generated.keystore_aes_generated my-realm/618cfba7-49aa-4c09-9a19-2f699b576f0b ``` diff --git a/docs/resources/realm_keystore_ecdsa_generated.md b/docs/resources/realm_keystore_ecdsa_generated.md index 5d086233a..77c058386 100644 --- a/docs/resources/realm_keystore_ecdsa_generated.md +++ b/docs/resources/realm_keystore_ecdsa_generated.md @@ -17,7 +17,7 @@ resource "keycloak_realm" "realm" { resource "keycloak_realm_keystore_ecdsa_generated" "keystore_ecdsa_generated" { name = "my-ecdsa-generated-key" - realm_id = keycloak_realm.realm.realm + realm_id = keycloak_realm.realm.id enabled = true active = true @@ -43,5 +43,5 @@ Realm keys can be imported using realm name and keystore id, you can find it in Example: ```bash -$ terraform import keycloak_realm_keystore_ecdsa_generated.keystore_ecdsa_generated my-realm/my-realm/618cfba7-49aa-4c09-9a19-2f699b576f0b +$ terraform import keycloak_realm_keystore_ecdsa_generated.keystore_ecdsa_generated my-realm/618cfba7-49aa-4c09-9a19-2f699b576f0b ``` diff --git a/docs/resources/realm_keystore_hmac_generated.md b/docs/resources/realm_keystore_hmac_generated.md index 0c12b6fc7..da6659f8f 100644 --- a/docs/resources/realm_keystore_hmac_generated.md +++ b/docs/resources/realm_keystore_hmac_generated.md @@ -17,7 +17,7 @@ resource "keycloak_realm" "realm" { resource "keycloak_realm_keystore_hmac_generated" "keystore_hmac_generated" { name = "my-hmac-generated-key" - realm_id = keycloak_realm.realm.realm + realm_id = keycloak_realm.realm.id enabled = true active = true @@ -45,5 +45,5 @@ Realm keys can be imported using realm name and keystore id, you can find it in Example: ```bash -$ terraform import keycloak_realm_keystore_hmac_generated.keystore_hmac_generated my-realm/my-realm/618cfba7-49aa-4c09-9a19-2f699b576f0b +$ terraform import keycloak_realm_keystore_hmac_generated.keystore_hmac_generated my-realm/618cfba7-49aa-4c09-9a19-2f699b576f0b ``` diff --git a/docs/resources/realm_keystore_java_keystore.md b/docs/resources/realm_keystore_java_keystore.md index 92018dfe6..ac5b83ba4 100644 --- a/docs/resources/realm_keystore_java_keystore.md +++ b/docs/resources/realm_keystore_java_keystore.md @@ -11,13 +11,13 @@ A realm keystore manages generated key pairs that are used by Keycloak to perfor ## Example Usage ```hcl -resource "keycloak_realm" "my_realm" { +resource "keycloak_realm" "realm" { realm = "my-realm" } resource "keycloak_realm_keystore_java_keystore" "java_keystore" { name = "my-java-keystore" - realm_id = keycloak_realm.my_realm.realm + realm_id = keycloak_realm.realm.id enabled = true active = true @@ -52,5 +52,5 @@ Realm keys can be imported using realm name and keystore id, you can find it in Example: ```bash -$ terraform import keycloak_realm_keystore_java_keystore.java_keystore my-realm/my-realm/618cfba7-49aa-4c09-9a19-2f699b576f0b +$ terraform import keycloak_realm_keystore_java_keystore.java_keystore my-realm/618cfba7-49aa-4c09-9a19-2f699b576f0b ``` diff --git a/docs/resources/realm_keystore_rsa.md b/docs/resources/realm_keystore_rsa.md index 1f0321ca9..c16acac6d 100644 --- a/docs/resources/realm_keystore_rsa.md +++ b/docs/resources/realm_keystore_rsa.md @@ -11,13 +11,13 @@ A realm keystore manages generated key pairs that are used by Keycloak to perfor ## Example Usage ```hcl -resource "keycloak_realm" "my_realm" { +resource "keycloak_realm" "realm" { realm = "my-realm" } resource "keycloak_realm_keystore_rsa" "keystore_rsa" { name = "my-rsa-key" - realm_id = keycloak_realm.my_realm.realm + realm_id = keycloak_realm.realm.id enabled = true active = true @@ -50,5 +50,5 @@ Realm keys can be imported using realm name and keystore id, you can find it in Example: ```bash -$ terraform import keycloak_realm_keystore_rsa.keystore_rsa my-realm/my-realm/618cfba7-49aa-4c09-9a19-2f699b576f0b +$ terraform import keycloak_realm_keystore_rsa.keystore_rsa my-realm/618cfba7-49aa-4c09-9a19-2f699b576f0b ``` diff --git a/docs/resources/realm_keystore_rsa_generated.md b/docs/resources/realm_keystore_rsa_generated.md index ddbb7a7c0..16f8f9b8e 100644 --- a/docs/resources/realm_keystore_rsa_generated.md +++ b/docs/resources/realm_keystore_rsa_generated.md @@ -17,7 +17,7 @@ resource "keycloak_realm" "realm" { resource "keycloak_realm_keystore_rsa_generated" "keystore_rsa_generated" { name = "my-rsa-generated-key" - realm_id = keycloak_realm.realm.realm + realm_id = keycloak_realm.realm.id enabled = true active = true @@ -45,5 +45,5 @@ Realm keys can be imported using realm name and keystore id, you can find it in Example: ```bash -$ terraform import keycloak_realm_keystore_rsa_generated.keystore_rsa_generated my-realm/my-realm/618cfba7-49aa-4c09-9a19-2f699b576f0b +$ terraform import keycloak_realm_keystore_rsa_generated.keystore_rsa_generated my-realm/618cfba7-49aa-4c09-9a19-2f699b576f0b ``` diff --git a/docs/resources/realm_user_profile.md b/docs/resources/realm_user_profile.md index a95d8405e..089f05b11 100644 --- a/docs/resources/realm_user_profile.md +++ b/docs/resources/realm_user_profile.md @@ -18,7 +18,7 @@ It can be done via the administration UI, or by setting the `userProfileEnabled` ## Example Usage ```hcl -resource "keycloak_realm" "my_realm" { +resource "keycloak_realm" "realm" { realm = "my-realm" attributes = { diff --git a/go.mod b/go.mod index c20f6db98..da8cb5fdd 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,9 @@ require ( github.com/hashicorp/errwrap v1.0.0 github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 github.com/hashicorp/go-retryablehttp v0.7.0 - github.com/hashicorp/go-version v1.3.0 - github.com/hashicorp/terraform-plugin-sdk/v2 v2.10.1 + github.com/hashicorp/go-version v1.4.0 + github.com/hashicorp/terraform-plugin-log v0.3.0 + github.com/hashicorp/terraform-plugin-sdk/v2 v2.12.0 github.com/imdario/mergo v0.3.12 golang.org/x/net v0.0.0-20210326060303-6b1517762897 ) diff --git a/go.sum b/go.sum index 0161e9b87..ffdf1e36e 100644 --- a/go.sum +++ b/go.sum @@ -1,42 +1,6 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.61.0 h1:NLQf5e1OMspfNT1RAHOB3ublr1TW3YTXO8OiWwVjK2U= -cloud.google.com/go v0.61.0/go.mod h1:XukKJg4Y7QsUu0Hxg3qQKUWR4VuWivmyMK2+rUyxAqw= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= @@ -49,8 +13,9 @@ github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXva github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/andybalholm/crlf v0.0.0-20171020200849-670099aa064f/go.mod h1:k8feO4+kXDxro6ErPXBRTJ/ro2mf0SsFG8s7doP9kJE= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/apparentlymart/go-cidr v1.0.1 h1:NmIwLZ/KdsjIUlhf+/Np40atNXm/+lZ5txfTJ/SpF+U= -github.com/apparentlymart/go-cidr v1.0.1/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apparentlymart/go-cidr v1.1.0 h1:2mAhrMoF+nhXqxTzSZMUzDHkLjmIHC+Zzn4tdgBZjnU= +github.com/apparentlymart/go-cidr v1.1.0/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc= github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0 h1:MzVXffFUye+ZcSR6opIgz9Co7WcDx6ZcY+RjfFHoA0I= github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= @@ -59,21 +24,16 @@ github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/ github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec= github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= -github.com/aws/aws-sdk-go v1.25.3 h1:uM16hIw9BotjZKMZlX05SN2EFtaWfi/NonPKIARiBLQ= -github.com/aws/aws-sdk-go v1.25.3/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -83,10 +43,13 @@ github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= @@ -96,62 +59,38 @@ github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU= @@ -162,48 +101,39 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUKaCaGKZ/dR2roBXv0vKbSCnssIldfQdI= github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= -github.com/hashicorp/go-getter v1.5.3 h1:NF5+zOlQegim+w/EUhSLh6QhXHmZMEeHLQzllkQ3ROU= -github.com/hashicorp/go-getter v1.5.3/go.mod h1:BrrV/1clo8cCYu6mxvboYg+KutTiFnXjMEgDD8+i7ZI= -github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.16.1 h1:IVQwpTGNRRIHafnTs2dQLIk4ENtneRIEEJWOVDqz99o= -github.com/hashicorp/go-hclog v0.16.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.3.0/go.mod h1:F9eH4LrE/ZsRdbwhfjs9k9HoDUwAHnYtXdgmf1AVNs0= -github.com/hashicorp/go-plugin v1.4.1 h1:6UltRQlLN9iZO513VveELp5xyaFxVD2+1OVylE+2E+w= -github.com/hashicorp/go-plugin v1.4.1/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= +github.com/hashicorp/go-plugin v1.4.3 h1:DXmvivbWD5qdiBts9TpBC7BYL1Aia5sxbRgQB+v6UZM= +github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= -github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.3.0 h1:McDWVJIU/y+u1BRV06dPaLfLCaT7fUTJLp5r04x7iNw= github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/go-version v1.4.0 h1:aAQzgqIrRKRa7w75CKpbBxYsmUoPjzVm1W59ca1L0J4= +github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/hc-install v0.3.1 h1:VIjllE6KyAI1A244G8kTaHXy+TL5/XYzvrtFi8po/Yk= github.com/hashicorp/hc-install v0.3.1/go.mod h1:3LCdWcCDS1gaHC9mhHCGbkYfoY6vdsKohGjugbZdZak= -github.com/hashicorp/hcl/v2 v2.3.0 h1:iRly8YaMwTBAKhn1Ybk7VSdzbnopghktCD031P8ggUE= -github.com/hashicorp/hcl/v2 v2.3.0/go.mod h1:d+FwDBbOLvpAM3Z6J7gPj/VoAGkNe/gm352ZhjJ/Zv8= +github.com/hashicorp/hcl/v2 v2.11.1 h1:yTyWcXcm9XB0TEkyU/JCRU6rYy4K+mgLtzn2wlrJbcc= +github.com/hashicorp/hcl/v2 v2.11.1/go.mod h1:FwWsfWEjyV/CMj8s/gqAuiviY72rJ1/oayI9WftqcKg= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/terraform-exec v0.15.0 h1:cqjh4d8HYNQrDoEmlSGelHmg2DYDh5yayckvJ5bV18E= -github.com/hashicorp/terraform-exec v0.15.0/go.mod h1:H4IG8ZxanU+NW0ZpDRNsvh9f0ul7C0nHP+rUR/CHs7I= +github.com/hashicorp/terraform-exec v0.16.0 h1:XUh9pJPcbfZsuhReVvmRarQTaiiCnYogFCCjOvEYuug= +github.com/hashicorp/terraform-exec v0.16.0/go.mod h1:wB5JHmjxZ/YVNZuv9npAXKmz5pGyxy8PSi0GRR0+YjA= github.com/hashicorp/terraform-json v0.13.0 h1:Li9L+lKD1FO5RVFRM1mMMIBDoUHslOniyEi5CM+FWGY= github.com/hashicorp/terraform-json v0.13.0/go.mod h1:y5OdLBCT+rxbwnpxZs9kGL7R9ExU76+cpdY8zHwoazk= -github.com/hashicorp/terraform-plugin-go v0.5.0 h1:+gCDdF0hcYCm0YBTxrP4+K1NGIS5ZKZBKDORBewLJmg= -github.com/hashicorp/terraform-plugin-go v0.5.0/go.mod h1:PAVN26PNGpkkmsvva1qfriae5Arky3xl3NfzKa8XFVM= -github.com/hashicorp/terraform-plugin-log v0.2.0 h1:rjflRuBqCnSk3UHOR25MP1G5BDLKktTA6lNjjcAnBfI= -github.com/hashicorp/terraform-plugin-log v0.2.0/go.mod h1:E1kJmapEHzqu1x6M++gjvhzM2yMQNXPVWZRCB8sgYjg= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.10.1 h1:B9AocC+dxrCqcf4vVhztIkSkt3gpRjUkEka8AmZWGlQ= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.10.1/go.mod h1:FjM9DXWfP0w/AeOtJoSKHBZ01LqmaO6uP4bXhv3fekw= +github.com/hashicorp/terraform-plugin-go v0.8.0 h1:MvY43PcDj9VlBjYifBWCO/6j1wf106xU8d5Tob/WRs0= +github.com/hashicorp/terraform-plugin-go v0.8.0/go.mod h1:E3GuvfX0Pz2Azcl6BegD6t51StXsVZMOYQoGO8mkHM0= +github.com/hashicorp/terraform-plugin-log v0.3.0 h1:NPENNOjaJSVX0f7JJTl4f/2JKRPQ7S2ZN9B4NSqq5kA= +github.com/hashicorp/terraform-plugin-log v0.3.0/go.mod h1:EjueSP/HjlyFAsDqt+okpCPjkT4NDynAe32AeDC4vps= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.12.0 h1:rjJxyLUVA180BG0ZXTOree4x2RVvo2jigdYoT2rw5j0= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.12.0/go.mod h1:TPjMXvpPNWagHzYOmVPzzRRIBTuaLVukR+esL08tgzg= github.com/hashicorp/terraform-registry-address v0.0.0-20210412075316-9b2996cce896 h1:1FGtlkJw87UsTMg5s8jrekrHmUPUJaMcu6ELiVhQrNw= github.com/hashicorp/terraform-registry-address v0.0.0-20210412075316-9b2996cce896/go.mod h1:bzBPnUIkI0RxauU8Dqo+2KrZZ28Cf48s8V6IHt3p4co= github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734 h1:HKLsbzeOsfXmKNpr3GiT18XAblV0BjCbzL8KQAMZGa0= @@ -211,9 +141,6 @@ github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734/go.mod github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -221,17 +148,8 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.11.2 h1:MiK62aErc3gIiVEtyzKfeOHgW7atJb5g/KNX5m3c2nQ= -github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= @@ -244,32 +162,23 @@ github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LE github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mitchellh/cli v1.1.2/go.mod h1:6iaV0fGdElS6dPBx0EApTxHrcWvmJphyh2n8YBLPPZ4= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= +github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= @@ -281,9 +190,8 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= @@ -296,75 +204,40 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= -github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= +github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= +github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/zclconf/go-cty v1.1.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= -github.com/zclconf/go-cty v1.9.1 h1:viqrgQwFl5UpSxc046qblj78wZXVDFnSOufaOTER+cc= +github.com/zclconf/go-cty v1.8.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty v1.9.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= +github.com/zclconf/go-cty v1.10.0 h1:mp9ZXQeIcN8kAwuqorjH+Q+njbJKjLrvB2yIh4q7U+0= +github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e h1:gsTQYXdTw2Gq7RBsWvlQ91b+aEQ6bXFUngBGuR8sPpI= golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -374,73 +247,35 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191009170851-d66e71096ffb/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210326060303-6b1517762897 h1:KrsHThm5nFk34YtATK1LsThyGhGbGe1olrte/HInHvs= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -449,125 +284,45 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200713011307-fd294ab11aed h1:+qzWo37K31KxduIYaBeMqJ8MUOyTayOQKpH9aDPLMSY= golang.org/x/tools v0.0.0-20200713011307-fd294ab11aed/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0 h1:BaiDisFir8O4IJxvAabCGGkQ6yCJegNQqSVoYUNAnbk= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200711021454-869866162049 h1:YFTFpQhgvrLrmxtiIncJxFXeCyq84ixuKWVCaCAi9Oc= google.golang.org/genproto v0.0.0-20200711021454-869866162049/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.32.0 h1:zWTV+LMdc3kaiJMSTOFz2UgSBgx8RNQoTGiZu3fR9S0= -google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -577,31 +332,25 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/keycloak/authentication_execution.go b/keycloak/authentication_execution.go index 840d955f6..971448eea 100644 --- a/keycloak/authentication_execution.go +++ b/keycloak/authentication_execution.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "time" ) @@ -63,10 +64,10 @@ func (list AuthenticationExecutionList) Swap(i, j int) { list[i], list[j] = list[j], list[i] } -func (keycloakClient *KeycloakClient) ListAuthenticationExecutions(realmId, parentFlowAlias string) (AuthenticationExecutionList, error) { +func (keycloakClient *KeycloakClient) ListAuthenticationExecutions(ctx context.Context, realmId, parentFlowAlias string) (AuthenticationExecutionList, error) { var authenticationExecutions []*AuthenticationExecutionInfo - err := keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/flows/%s/executions", realmId, parentFlowAlias), &authenticationExecutions, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/flows/%s/executions", realmId, parentFlowAlias), &authenticationExecutions, nil) if err != nil { return nil, err } @@ -74,11 +75,11 @@ func (keycloakClient *KeycloakClient) ListAuthenticationExecutions(realmId, pare return authenticationExecutions, err } -func (keycloakClient *KeycloakClient) GetAuthenticationExecutionInfoFromProviderId(realmId, parentFlowAlias, providerId string) (*AuthenticationExecutionInfo, error) { +func (keycloakClient *KeycloakClient) GetAuthenticationExecutionInfoFromProviderId(ctx context.Context, realmId, parentFlowAlias, providerId string) (*AuthenticationExecutionInfo, error) { var authenticationExecutions []*AuthenticationExecutionInfo var authenticationExecution AuthenticationExecutionInfo - err := keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/flows/%s/executions", realmId, parentFlowAlias), &authenticationExecutions, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/flows/%s/executions", realmId, parentFlowAlias), &authenticationExecutions, nil) if err != nil { return nil, err } @@ -86,7 +87,7 @@ func (keycloakClient *KeycloakClient) GetAuthenticationExecutionInfoFromProvider // Retry 3 more times if not found, sometimes it took split milliseconds the Authentication Executions to populate if len(authenticationExecutions) == 0 { for i := 0; i < 3; i++ { - err := keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/flows/%s/executions", realmId, parentFlowAlias), &authenticationExecutions, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/flows/%s/executions", realmId, parentFlowAlias), &authenticationExecutions, nil) if len(authenticationExecutions) > 0 { break @@ -117,15 +118,15 @@ func (keycloakClient *KeycloakClient) GetAuthenticationExecutionInfoFromProvider return nil, fmt.Errorf("no authentication execution under parent flow alias %s with provider id %s found", parentFlowAlias, providerId) } -func (keycloakClient *KeycloakClient) NewAuthenticationExecution(execution *AuthenticationExecution) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/authentication/flows/%s/executions/execution", execution.RealmId, execution.ParentFlowAlias), &authenticationExecutionCreate{Provider: execution.Authenticator}) +func (keycloakClient *KeycloakClient) NewAuthenticationExecution(ctx context.Context, execution *AuthenticationExecution) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/authentication/flows/%s/executions/execution", execution.RealmId, execution.ParentFlowAlias), &authenticationExecutionCreate{Provider: execution.Authenticator}) if err != nil { return err } execution.Id = getIdFromLocationHeader(location) - err = keycloakClient.UpdateAuthenticationExecution(execution) + err = keycloakClient.UpdateAuthenticationExecution(ctx, execution) if err != nil { return err } @@ -133,10 +134,10 @@ func (keycloakClient *KeycloakClient) NewAuthenticationExecution(execution *Auth return nil } -func (keycloakClient *KeycloakClient) GetAuthenticationExecution(realmId, parentFlowAlias, id string) (*AuthenticationExecution, error) { +func (keycloakClient *KeycloakClient) GetAuthenticationExecution(ctx context.Context, realmId, parentFlowAlias, id string) (*AuthenticationExecution, error) { var authenticationExecution AuthenticationExecution - err := keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/executions/%s", realmId, id), &authenticationExecution, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/executions/%s", realmId, id), &authenticationExecution, nil) if err != nil { return nil, err } @@ -147,40 +148,40 @@ func (keycloakClient *KeycloakClient) GetAuthenticationExecution(realmId, parent return &authenticationExecution, nil } -func (keycloakClient *KeycloakClient) UpdateAuthenticationExecution(execution *AuthenticationExecution) error { +func (keycloakClient *KeycloakClient) UpdateAuthenticationExecution(ctx context.Context, execution *AuthenticationExecution) error { authenticationExecutionUpdateRequirement := &authenticationExecutionRequirementUpdate{ RealmId: execution.RealmId, ParentFlowAlias: execution.ParentFlowAlias, Id: execution.Id, Requirement: execution.Requirement, } - return keycloakClient.UpdateAuthenticationExecutionRequirement(authenticationExecutionUpdateRequirement) + return keycloakClient.UpdateAuthenticationExecutionRequirement(ctx, authenticationExecutionUpdateRequirement) } -func (keycloakClient *KeycloakClient) UpdateAuthenticationExecutionRequirement(executionRequirementUpdate *authenticationExecutionRequirementUpdate) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/authentication/flows/%s/executions", executionRequirementUpdate.RealmId, executionRequirementUpdate.ParentFlowAlias), executionRequirementUpdate) +func (keycloakClient *KeycloakClient) UpdateAuthenticationExecutionRequirement(ctx context.Context, executionRequirementUpdate *authenticationExecutionRequirementUpdate) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/authentication/flows/%s/executions", executionRequirementUpdate.RealmId, executionRequirementUpdate.ParentFlowAlias), executionRequirementUpdate) } -func (keycloakClient *KeycloakClient) DeleteAuthenticationExecution(realmId, id string) error { - err := keycloakClient.delete(fmt.Sprintf("/realms/%s/authentication/executions/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteAuthenticationExecution(ctx context.Context, realmId, id string) error { + err := keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/authentication/executions/%s", realmId, id), nil) if err != nil { // For whatever reason, this fails sometimes with a 500 during acceptance tests. try again - return keycloakClient.delete(fmt.Sprintf("/realms/%s/authentication/executions/%s", realmId, id), nil) + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/authentication/executions/%s", realmId, id), nil) } return nil } -func (keycloakClient *KeycloakClient) RaiseAuthenticationExecutionPriority(realmId, id string) error { - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/authentication/executions/%s/raise-priority", realmId, id), nil) +func (keycloakClient *KeycloakClient) RaiseAuthenticationExecutionPriority(ctx context.Context, realmId, id string) error { + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/authentication/executions/%s/raise-priority", realmId, id), nil) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) LowerAuthenticationExecutionPriority(realmId, id string) error { - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/authentication/executions/%s/lower-priority", realmId, id), nil) +func (keycloakClient *KeycloakClient) LowerAuthenticationExecutionPriority(ctx context.Context, realmId, id string) error { + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/authentication/executions/%s/lower-priority", realmId, id), nil) if err != nil { return err } diff --git a/keycloak/authentication_execution_config.go b/keycloak/authentication_execution_config.go index 8966c1bce..020636040 100644 --- a/keycloak/authentication_execution_config.go +++ b/keycloak/authentication_execution_config.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -14,8 +15,8 @@ type AuthenticationExecutionConfig struct { } // https://www.keycloak.org/docs-api/8.0/rest-api/index.html#_newexecutionconfig -func (keycloakClient *KeycloakClient) NewAuthenticationExecutionConfig(config *AuthenticationExecutionConfig) (string, error) { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/authentication/executions/%s/config", config.RealmId, config.ExecutionId), config) +func (keycloakClient *KeycloakClient) NewAuthenticationExecutionConfig(ctx context.Context, config *AuthenticationExecutionConfig) (string, error) { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/authentication/executions/%s/config", config.RealmId, config.ExecutionId), config) if err != nil { return "", err } @@ -23,16 +24,16 @@ func (keycloakClient *KeycloakClient) NewAuthenticationExecutionConfig(config *A } // https://www.keycloak.org/docs-api/8.0/rest-api/index.html#_getauthenticatorconfig -func (keycloakClient *KeycloakClient) GetAuthenticationExecutionConfig(config *AuthenticationExecutionConfig) error { - return keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/config/%s", config.RealmId, config.Id), config, nil) +func (keycloakClient *KeycloakClient) GetAuthenticationExecutionConfig(ctx context.Context, config *AuthenticationExecutionConfig) error { + return keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/config/%s", config.RealmId, config.Id), config, nil) } // https://www.keycloak.org/docs-api/8.0/rest-api/index.html#_updateauthenticatorconfig -func (keycloakClient *KeycloakClient) UpdateAuthenticationExecutionConfig(config *AuthenticationExecutionConfig) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/authentication/config/%s", config.RealmId, config.Id), config) +func (keycloakClient *KeycloakClient) UpdateAuthenticationExecutionConfig(ctx context.Context, config *AuthenticationExecutionConfig) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/authentication/config/%s", config.RealmId, config.Id), config) } // https://www.keycloak.org/docs-api/8.0/rest-api/index.html#_removeauthenticatorconfig -func (keycloakClient *KeycloakClient) DeleteAuthenticationExecutionConfig(config *AuthenticationExecutionConfig) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/authentication/config/%s", config.RealmId, config.Id), nil) +func (keycloakClient *KeycloakClient) DeleteAuthenticationExecutionConfig(ctx context.Context, config *AuthenticationExecutionConfig) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/authentication/config/%s", config.RealmId, config.Id), nil) } diff --git a/keycloak/authentication_flow.go b/keycloak/authentication_flow.go index a5b76662c..b9231d129 100644 --- a/keycloak/authentication_flow.go +++ b/keycloak/authentication_flow.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "time" ) @@ -15,10 +16,10 @@ type AuthenticationFlow struct { BuiltIn bool `json:"builtIn"` } -func (keycloakClient *KeycloakClient) ListAuthenticationFlows(realmId string) ([]*AuthenticationFlow, error) { +func (keycloakClient *KeycloakClient) ListAuthenticationFlows(ctx context.Context, realmId string) ([]*AuthenticationFlow, error) { var authenticationFlows []*AuthenticationFlow - err := keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/flows", realmId), &authenticationFlows, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/flows", realmId), &authenticationFlows, nil) if err != nil { return nil, err } @@ -30,11 +31,11 @@ func (keycloakClient *KeycloakClient) ListAuthenticationFlows(realmId string) ([ return authenticationFlows, nil } -func (keycloakClient *KeycloakClient) NewAuthenticationFlow(authenticationFlow *AuthenticationFlow) error { +func (keycloakClient *KeycloakClient) NewAuthenticationFlow(ctx context.Context, authenticationFlow *AuthenticationFlow) error { authenticationFlow.TopLevel = true authenticationFlow.BuiltIn = false - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/authentication/flows", authenticationFlow.RealmId), authenticationFlow) + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/authentication/flows", authenticationFlow.RealmId), authenticationFlow) if err != nil { return err } @@ -43,9 +44,9 @@ func (keycloakClient *KeycloakClient) NewAuthenticationFlow(authenticationFlow * return nil } -func (keycloakClient *KeycloakClient) GetAuthenticationFlow(realmId, id string) (*AuthenticationFlow, error) { +func (keycloakClient *KeycloakClient) GetAuthenticationFlow(ctx context.Context, realmId, id string) (*AuthenticationFlow, error) { var authenticationFlow AuthenticationFlow - err := keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/flows/%s", realmId, id), &authenticationFlow, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/flows/%s", realmId, id), &authenticationFlow, nil) if err != nil { return nil, err } @@ -54,11 +55,11 @@ func (keycloakClient *KeycloakClient) GetAuthenticationFlow(realmId, id string) return &authenticationFlow, nil } -func (keycloakClient *KeycloakClient) GetAuthenticationFlowFromAlias(realmId, alias string) (*AuthenticationFlow, error) { +func (keycloakClient *KeycloakClient) GetAuthenticationFlowFromAlias(ctx context.Context, realmId, alias string) (*AuthenticationFlow, error) { var authenticationFlows []*AuthenticationFlow var authenticationFlow *AuthenticationFlow = nil - err := keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/flows", realmId), &authenticationFlows, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/flows", realmId), &authenticationFlows, nil) if err != nil { return nil, err } @@ -66,7 +67,7 @@ func (keycloakClient *KeycloakClient) GetAuthenticationFlowFromAlias(realmId, al // Retry 3 more times if not found, sometimes it took split milliseconds the Authentication to populate if len(authenticationFlows) == 0 { for i := 0; i < 3; i++ { - err := keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/flows", realmId), &authenticationFlows, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/flows", realmId), &authenticationFlows, nil) if len(authenticationFlows) > 0 { break @@ -98,18 +99,18 @@ func (keycloakClient *KeycloakClient) GetAuthenticationFlowFromAlias(realmId, al return authenticationFlow, nil } -func (keycloakClient *KeycloakClient) UpdateAuthenticationFlow(authenticationFlow *AuthenticationFlow) error { +func (keycloakClient *KeycloakClient) UpdateAuthenticationFlow(ctx context.Context, authenticationFlow *AuthenticationFlow) error { authenticationFlow.TopLevel = true authenticationFlow.BuiltIn = false - return keycloakClient.put(fmt.Sprintf("/realms/%s/authentication/flows/%s", authenticationFlow.RealmId, authenticationFlow.Id), authenticationFlow) + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/authentication/flows/%s", authenticationFlow.RealmId, authenticationFlow.Id), authenticationFlow) } -func (keycloakClient *KeycloakClient) DeleteAuthenticationFlow(realmId, id string) error { - err := keycloakClient.delete(fmt.Sprintf("/realms/%s/authentication/flows/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteAuthenticationFlow(ctx context.Context, realmId, id string) error { + err := keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/authentication/flows/%s", realmId, id), nil) if err != nil { // For whatever reason, this fails sometimes with a 500 during acceptance tests. try again - return keycloakClient.delete(fmt.Sprintf("/realms/%s/authentication/flows/%s", realmId, id), nil) + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/authentication/flows/%s", realmId, id), nil) } return nil } diff --git a/keycloak/authentication_subflow.go b/keycloak/authentication_subflow.go index 1a3305a4f..f6b9ee0d2 100644 --- a/keycloak/authentication_subflow.go +++ b/keycloak/authentication_subflow.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "errors" "fmt" ) @@ -28,7 +29,7 @@ type authenticationSubFlowCreate struct { Description string `json:"description"` } -func (keycloakClient *KeycloakClient) NewAuthenticationSubFlow(authenticationSubFlow *AuthenticationSubFlow) error { +func (keycloakClient *KeycloakClient) NewAuthenticationSubFlow(ctx context.Context, authenticationSubFlow *AuthenticationSubFlow) error { authenticationSubFlow.TopLevel = false authenticationSubFlow.BuiltIn = false authenticationSubFlowCreate := &authenticationSubFlowCreate{ @@ -38,33 +39,33 @@ func (keycloakClient *KeycloakClient) NewAuthenticationSubFlow(authenticationSub Description: authenticationSubFlow.Description, } - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/authentication/flows/%s/executions/flow", authenticationSubFlow.RealmId, authenticationSubFlow.ParentFlowAlias), authenticationSubFlowCreate) + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/authentication/flows/%s/executions/flow", authenticationSubFlow.RealmId, authenticationSubFlow.ParentFlowAlias), authenticationSubFlowCreate) if err != nil { return err } authenticationSubFlow.Id = getIdFromLocationHeader(location) if authenticationSubFlow.Requirement != "DISABLED" { - return keycloakClient.UpdateAuthenticationSubFlow(authenticationSubFlow) + return keycloakClient.UpdateAuthenticationSubFlow(ctx, authenticationSubFlow) } return nil } -func (keycloakClient *KeycloakClient) GetAuthenticationSubFlow(realmId, parentFlowAlias, id string) (*AuthenticationSubFlow, error) { +func (keycloakClient *KeycloakClient) GetAuthenticationSubFlow(ctx context.Context, realmId, parentFlowAlias, id string) (*AuthenticationSubFlow, error) { var authenticationSubFlow AuthenticationSubFlow - err := keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/flows/%s", realmId, id), &authenticationSubFlow, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/flows/%s", realmId, id), &authenticationSubFlow, nil) if err != nil { return nil, err } authenticationSubFlow.RealmId = realmId authenticationSubFlow.ParentFlowAlias = parentFlowAlias - executionId, err := keycloakClient.getExecutionId(&authenticationSubFlow) + executionId, err := keycloakClient.getExecutionId(ctx, &authenticationSubFlow) if err != nil { return nil, err } - subFlowExecution, err := keycloakClient.GetAuthenticationExecution(realmId, parentFlowAlias, executionId) + subFlowExecution, err := keycloakClient.GetAuthenticationExecution(ctx, realmId, parentFlowAlias, executionId) if err != nil { return nil, err } @@ -74,8 +75,8 @@ func (keycloakClient *KeycloakClient) GetAuthenticationSubFlow(realmId, parentFl return &authenticationSubFlow, nil } -func (keycloakClient *KeycloakClient) getExecutionId(authenticationSubFlow *AuthenticationSubFlow) (string, error) { - list, err := keycloakClient.ListAuthenticationExecutions(authenticationSubFlow.RealmId, authenticationSubFlow.ParentFlowAlias) +func (keycloakClient *KeycloakClient) getExecutionId(ctx context.Context, authenticationSubFlow *AuthenticationSubFlow) (string, error) { + list, err := keycloakClient.ListAuthenticationExecutions(ctx, authenticationSubFlow.RealmId, authenticationSubFlow.ParentFlowAlias) if err != nil { return "", err } @@ -88,17 +89,17 @@ func (keycloakClient *KeycloakClient) getExecutionId(authenticationSubFlow *Auth return "", errors.New("no execution id found for subflow") } -func (keycloakClient *KeycloakClient) UpdateAuthenticationSubFlow(authenticationSubFlow *AuthenticationSubFlow) error { +func (keycloakClient *KeycloakClient) UpdateAuthenticationSubFlow(ctx context.Context, authenticationSubFlow *AuthenticationSubFlow) error { authenticationSubFlow.TopLevel = false authenticationSubFlow.BuiltIn = false - err := keycloakClient.put(fmt.Sprintf("/realms/%s/authentication/flows/%s", authenticationSubFlow.RealmId, authenticationSubFlow.Id), authenticationSubFlow) + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/authentication/flows/%s", authenticationSubFlow.RealmId, authenticationSubFlow.Id), authenticationSubFlow) if err != nil { return err } - executionId, err := keycloakClient.getExecutionId(authenticationSubFlow) + executionId, err := keycloakClient.getExecutionId(ctx, authenticationSubFlow) if err != nil { return err } @@ -110,48 +111,48 @@ func (keycloakClient *KeycloakClient) UpdateAuthenticationSubFlow(authentication Id: executionId, Requirement: authenticationSubFlow.Requirement, } - return keycloakClient.UpdateAuthenticationExecutionRequirement(authenticationExecutionUpdateRequirement) + return keycloakClient.UpdateAuthenticationExecutionRequirement(ctx, authenticationExecutionUpdateRequirement) } -func (keycloakClient *KeycloakClient) DeleteAuthenticationSubFlow(realmId, parentFlowAlias, id string) error { +func (keycloakClient *KeycloakClient) DeleteAuthenticationSubFlow(ctx context.Context, realmId, parentFlowAlias, id string) error { authenticationSubFlow := AuthenticationSubFlow{ Id: id, ParentFlowAlias: parentFlowAlias, RealmId: realmId, } - executionId, err := keycloakClient.getExecutionId(&authenticationSubFlow) + executionId, err := keycloakClient.getExecutionId(ctx, &authenticationSubFlow) if err != nil { return err } - return keycloakClient.DeleteAuthenticationExecution(authenticationSubFlow.RealmId, executionId) + return keycloakClient.DeleteAuthenticationExecution(ctx, authenticationSubFlow.RealmId, executionId) } -func (keycloakClient *KeycloakClient) RaiseAuthenticationSubFlowPriority(realmId, parentFlowAlias, id string) error { +func (keycloakClient *KeycloakClient) RaiseAuthenticationSubFlowPriority(ctx context.Context, realmId, parentFlowAlias, id string) error { authenticationSubFlow := AuthenticationSubFlow{ Id: id, ParentFlowAlias: parentFlowAlias, RealmId: realmId, } - executionId, err := keycloakClient.getExecutionId(&authenticationSubFlow) + executionId, err := keycloakClient.getExecutionId(ctx, &authenticationSubFlow) if err != nil { return err } - return keycloakClient.RaiseAuthenticationExecutionPriority(authenticationSubFlow.RealmId, executionId) + return keycloakClient.RaiseAuthenticationExecutionPriority(ctx, authenticationSubFlow.RealmId, executionId) } -func (keycloakClient *KeycloakClient) LowerAuthenticationSubFlowPriority(realmId, parentFlowAlias, id string) error { +func (keycloakClient *KeycloakClient) LowerAuthenticationSubFlowPriority(ctx context.Context, realmId, parentFlowAlias, id string) error { authenticationSubFlow := AuthenticationSubFlow{ Id: id, ParentFlowAlias: parentFlowAlias, RealmId: realmId, } - executionId, err := keycloakClient.getExecutionId(&authenticationSubFlow) + executionId, err := keycloakClient.getExecutionId(ctx, &authenticationSubFlow) if err != nil { return err } - return keycloakClient.LowerAuthenticationExecutionPriority(authenticationSubFlow.RealmId, executionId) + return keycloakClient.LowerAuthenticationExecutionPriority(ctx, authenticationSubFlow.RealmId, executionId) } diff --git a/keycloak/custom_identity_provider_mapper.go b/keycloak/custom_identity_provider_mapper.go index 47d06cf32..e26f4ca09 100644 --- a/keycloak/custom_identity_provider_mapper.go +++ b/keycloak/custom_identity_provider_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "reflect" ) @@ -19,8 +20,8 @@ type CustomIdentityProviderMapper struct { Config *CustomIdentityProviderMapperConfig `json:"config,omitempty"` } -func (keycloakClient *KeycloakClient) NewCustomIdentityProviderMapper(customIdentityProviderMapper *CustomIdentityProviderMapper) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers", customIdentityProviderMapper.Realm, customIdentityProviderMapper.IdentityProviderAlias), customIdentityProviderMapper) +func (keycloakClient *KeycloakClient) NewCustomIdentityProviderMapper(ctx context.Context, customIdentityProviderMapper *CustomIdentityProviderMapper) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers", customIdentityProviderMapper.Realm, customIdentityProviderMapper.IdentityProviderAlias), customIdentityProviderMapper) if err != nil { return err } @@ -30,12 +31,12 @@ func (keycloakClient *KeycloakClient) NewCustomIdentityProviderMapper(customIden return nil } -func (keycloakClient *KeycloakClient) GetCustomIdentityProviderMapper(realm, alias, id string) (*CustomIdentityProviderMapper, error) { +func (keycloakClient *KeycloakClient) GetCustomIdentityProviderMapper(ctx context.Context, realm, alias, id string) (*CustomIdentityProviderMapper, error) { var customIdentityProviderMapper CustomIdentityProviderMapper customIdentityProviderMapper.Realm = realm customIdentityProviderMapper.IdentityProviderAlias = alias - err := keycloakClient.get(fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers/%s", realm, alias, id), &customIdentityProviderMapper, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers/%s", realm, alias, id), &customIdentityProviderMapper, nil) if err != nil { return nil, err } @@ -43,12 +44,12 @@ func (keycloakClient *KeycloakClient) GetCustomIdentityProviderMapper(realm, ali return &customIdentityProviderMapper, nil } -func (keycloakClient *KeycloakClient) UpdateCustomIdentityProviderMapper(customIdentityProviderMapper *CustomIdentityProviderMapper) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers/%s", customIdentityProviderMapper.Realm, customIdentityProviderMapper.IdentityProviderAlias, customIdentityProviderMapper.Id), customIdentityProviderMapper) +func (keycloakClient *KeycloakClient) UpdateCustomIdentityProviderMapper(ctx context.Context, customIdentityProviderMapper *CustomIdentityProviderMapper) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers/%s", customIdentityProviderMapper.Realm, customIdentityProviderMapper.IdentityProviderAlias, customIdentityProviderMapper.Id), customIdentityProviderMapper) } -func (keycloakClient *KeycloakClient) DeleteCustomIdentityProviderMapper(realm, alias, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers/%s", realm, alias, id), nil) +func (keycloakClient *KeycloakClient) DeleteCustomIdentityProviderMapper(ctx context.Context, realm, alias, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers/%s", realm, alias, id), nil) } func (f *CustomIdentityProviderMapperConfig) UnmarshalJSON(data []byte) error { diff --git a/keycloak/custom_user_federation.go b/keycloak/custom_user_federation.go index 1de970e5e..5f3340407 100644 --- a/keycloak/custom_user_federation.go +++ b/keycloak/custom_user_federation.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -109,9 +110,9 @@ func convertFromComponentToCustomUserFederation(component *component, realmName return custom, nil } -func (keycloakClient *KeycloakClient) ValidateCustomUserFederation(custom *CustomUserFederation) error { +func (keycloakClient *KeycloakClient) ValidateCustomUserFederation(ctx context.Context, custom *CustomUserFederation) error { // validate if the given custom user storage provider exists on the server. - serverInfo, err := keycloakClient.GetServerInfo() + serverInfo, err := keycloakClient.GetServerInfo(ctx) if err != nil { return err } @@ -123,8 +124,8 @@ func (keycloakClient *KeycloakClient) ValidateCustomUserFederation(custom *Custo return nil } -func (keycloakClient *KeycloakClient) NewCustomUserFederation(customUserFederation *CustomUserFederation) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", customUserFederation.RealmId), convertFromCustomUserFederationToComponent(customUserFederation)) +func (keycloakClient *KeycloakClient) NewCustomUserFederation(ctx context.Context, customUserFederation *CustomUserFederation) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", customUserFederation.RealmId), convertFromCustomUserFederationToComponent(customUserFederation)) if err != nil { return err } @@ -134,10 +135,10 @@ func (keycloakClient *KeycloakClient) NewCustomUserFederation(customUserFederati return nil } -func (keycloakClient *KeycloakClient) GetCustomUserFederation(realmName, id string) (*CustomUserFederation, error) { +func (keycloakClient *KeycloakClient) GetCustomUserFederation(ctx context.Context, realmName, id string) (*CustomUserFederation, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmName, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmName, id), &component, nil) if err != nil { return nil, err } @@ -145,12 +146,12 @@ func (keycloakClient *KeycloakClient) GetCustomUserFederation(realmName, id stri return convertFromComponentToCustomUserFederation(component, realmName) } -func (keycloakClient *KeycloakClient) GetCustomUserFederations(realmName, realmId string) (*[]CustomUserFederation, error) { +func (keycloakClient *KeycloakClient) GetCustomUserFederations(ctx context.Context, realmName, realmId string) (*[]CustomUserFederation, error) { var components []*component var customUserFederations []CustomUserFederation var customUserFederation *CustomUserFederation - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components?parent=%s&type=%s", realmName, realmId, userStorageProviderType), &components, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components?parent=%s&type=%s", realmName, realmId, userStorageProviderType), &components, nil) if err != nil { return nil, err } @@ -165,10 +166,10 @@ func (keycloakClient *KeycloakClient) GetCustomUserFederations(realmName, realmI return &customUserFederations, nil } -func (keycloakClient *KeycloakClient) UpdateCustomUserFederation(customUserFederation *CustomUserFederation) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", customUserFederation.RealmId, customUserFederation.Id), convertFromCustomUserFederationToComponent(customUserFederation)) +func (keycloakClient *KeycloakClient) UpdateCustomUserFederation(ctx context.Context, customUserFederation *CustomUserFederation) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", customUserFederation.RealmId, customUserFederation.Id), convertFromCustomUserFederationToComponent(customUserFederation)) } -func (keycloakClient *KeycloakClient) DeleteCustomUserFederation(realmName, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmName, id), nil) +func (keycloakClient *KeycloakClient) DeleteCustomUserFederation(ctx context.Context, realmName, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmName, id), nil) } diff --git a/keycloak/default_roles.go b/keycloak/default_roles.go index 7eac22fce..f07843d47 100644 --- a/keycloak/default_roles.go +++ b/keycloak/default_roles.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -10,10 +11,9 @@ type DefaultRoles struct { DefaultRoles []string `json:"-"` } -func (keycloakClient *KeycloakClient) GetDefaultRoles(realmId, id string) ([]*Role, error) { +func (keycloakClient *KeycloakClient) GetDefaultRoles(ctx context.Context, realmId, id string) ([]*Role, error) { var composites []*Role - err := keycloakClient.get(fmt.Sprintf("/realms/%s/roles-by-id/%s/composites/realm", realmId, id), - &composites, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/roles-by-id/%s/composites/realm", realmId, id), &composites, nil) if err != nil { return nil, err } diff --git a/keycloak/generic_client.go b/keycloak/generic_client.go index 169425359..7e3fddbe1 100644 --- a/keycloak/generic_client.go +++ b/keycloak/generic_client.go @@ -1,6 +1,9 @@ package keycloak -import "fmt" +import ( + "context" + "fmt" +) type GenericClient struct { Id string `json:"id,omitempty"` @@ -13,10 +16,10 @@ type GenericClient struct { Description string `json:"description"` } -func (keycloakClient *KeycloakClient) listGenericClients(realmId string) ([]*GenericClient, error) { +func (keycloakClient *KeycloakClient) listGenericClients(ctx context.Context, realmId string) ([]*GenericClient, error) { var clients []*GenericClient - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients", realmId), &clients, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients", realmId), &clients, nil) if err != nil { return nil, err } @@ -28,10 +31,10 @@ func (keycloakClient *KeycloakClient) listGenericClients(realmId string) ([]*Gen return clients, nil } -func (keycloakClient *KeycloakClient) GetGenericClient(realmId, id string) (*GenericClient, error) { +func (keycloakClient *KeycloakClient) GetGenericClient(ctx context.Context, realmId, id string) (*GenericClient, error) { var client GenericClient - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s", realmId, id), &client, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s", realmId, id), &client, nil) if err != nil { return nil, err } @@ -41,14 +44,14 @@ func (keycloakClient *KeycloakClient) GetGenericClient(realmId, id string) (*Gen return &client, nil } -func (keycloakClient *KeycloakClient) GetGenericClientByClientId(realmId, clientId string) (*GenericClient, error) { +func (keycloakClient *KeycloakClient) GetGenericClientByClientId(ctx context.Context, realmId, clientId string) (*GenericClient, error) { var clients []GenericClient params := map[string]string{ "clientId": clientId, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients", realmId), &clients, params) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients", realmId), &clients, params) if err != nil { return nil, err } diff --git a/keycloak/generic_client_description_converter.go b/keycloak/generic_client_description_converter.go index 9513466e1..122be20dd 100644 --- a/keycloak/generic_client_description_converter.go +++ b/keycloak/generic_client_description_converter.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "encoding/json" "fmt" ) @@ -45,10 +46,10 @@ type GenericClientRepresentation struct { WebOrigins []string `json:"webOrigins"` } -func (keycloakClient *KeycloakClient) NewGenericClientDescription(realmId string, body string) (*GenericClientRepresentation, error) { +func (keycloakClient *KeycloakClient) NewGenericClientDescription(ctx context.Context, realmId string, body string) (*GenericClientRepresentation, error) { var genericClientRepresentation GenericClientRepresentation - result, err := keycloakClient.sendRaw(fmt.Sprintf("/realms/%s/client-description-converter", realmId), []byte(body)) + result, err := keycloakClient.sendRaw(ctx, fmt.Sprintf("/realms/%s/client-description-converter", realmId), []byte(body)) if err != nil { return nil, err diff --git a/keycloak/generic_client_protocol_mapper.go b/keycloak/generic_client_protocol_mapper.go index 88fed00e1..2eb2e56db 100644 --- a/keycloak/generic_client_protocol_mapper.go +++ b/keycloak/generic_client_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -20,10 +21,10 @@ type OpenidClientWithGenericClientProtocolMappers struct { ProtocolMappers []*GenericClientProtocolMapper } -func (keycloakClient *KeycloakClient) NewGenericClientProtocolMapper(genericClientProtocolMapper *GenericClientProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewGenericClientProtocolMapper(ctx context.Context, genericClientProtocolMapper *GenericClientProtocolMapper) error { path := protocolMapperPath(genericClientProtocolMapper.RealmId, genericClientProtocolMapper.ClientId, genericClientProtocolMapper.ClientScopeId) - _, location, err := keycloakClient.post(path, genericClientProtocolMapper) + _, location, err := keycloakClient.post(ctx, path, genericClientProtocolMapper) if err != nil { return err } @@ -33,10 +34,10 @@ func (keycloakClient *KeycloakClient) NewGenericClientProtocolMapper(genericClie return nil } -func (keycloakClient *KeycloakClient) GetGenericClientProtocolMappers(realmId string, clientId string) (*OpenidClientWithGenericClientProtocolMappers, error) { +func (keycloakClient *KeycloakClient) GetGenericClientProtocolMappers(ctx context.Context, realmId string, clientId string) (*OpenidClientWithGenericClientProtocolMappers, error) { var openidClientWithGenericClientProtocolMappers OpenidClientWithGenericClientProtocolMappers - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s", realmId, clientId), &openidClientWithGenericClientProtocolMappers, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s", realmId, clientId), &openidClientWithGenericClientProtocolMappers, nil) if err != nil { return nil, err } @@ -53,10 +54,10 @@ func (keycloakClient *KeycloakClient) GetGenericClientProtocolMappers(realmId st } -func (keycloakClient *KeycloakClient) GetGenericClientProtocolMapper(realmId string, clientId string, clientScopeId string, mapperId string) (*GenericClientProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetGenericClientProtocolMapper(ctx context.Context, realmId string, clientId string, clientScopeId string, mapperId string) (*GenericClientProtocolMapper, error) { var genericClientProtocolMapper GenericClientProtocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &genericClientProtocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &genericClientProtocolMapper, nil) if err != nil { return nil, err } @@ -69,17 +70,17 @@ func (keycloakClient *KeycloakClient) GetGenericClientProtocolMapper(realmId str return &genericClientProtocolMapper, nil } -func (keycloakClient *KeycloakClient) UpdateGenericClientProtocolMapper(genericClientProtocolMapper *GenericClientProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateGenericClientProtocolMapper(ctx context.Context, genericClientProtocolMapper *GenericClientProtocolMapper) error { path := individualProtocolMapperPath(genericClientProtocolMapper.RealmId, genericClientProtocolMapper.ClientId, genericClientProtocolMapper.ClientScopeId, genericClientProtocolMapper.Id) - return keycloakClient.put(path, genericClientProtocolMapper) + return keycloakClient.put(ctx, path, genericClientProtocolMapper) } -func (keycloakClient *KeycloakClient) DeleteGenericClientProtocolMapper(realmId string, clientId string, clientScopeId string, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteGenericClientProtocolMapper(ctx context.Context, realmId string, clientId string, clientScopeId string, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (mapper *GenericClientProtocolMapper) Validate(keycloakClient *KeycloakClient) error { +func (mapper *GenericClientProtocolMapper) Validate(ctx context.Context, keycloakClient *KeycloakClient) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } @@ -87,7 +88,7 @@ func (mapper *GenericClientProtocolMapper) Validate(keycloakClient *KeycloakClie return fmt.Errorf("validation error: only one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/group.go b/keycloak/group.go index c19dbda1d..b8af96b20 100644 --- a/keycloak/group.go +++ b/keycloak/group.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strings" ) @@ -22,14 +23,14 @@ type Group struct { * The best we can do is check subGroup's path with the group's path to figure out what sub-path to follow * until we find it. */ -func (keycloakClient *KeycloakClient) groupParentId(group *Group) (string, error) { +func (keycloakClient *KeycloakClient) groupParentId(ctx context.Context, group *Group) (string, error) { // Check the path of the group being passed in. // If there is only one group in the path, then this is a top-level group with no parentId if group.Path == "/"+group.Name { return "", nil } - groups, err := keycloakClient.ListGroupsWithName(group.RealmId, group.Name) + groups, err := keycloakClient.ListGroupsWithName(ctx, group.RealmId, group.Name) if err != nil { return "", err } @@ -72,7 +73,7 @@ func (keycloakClient *KeycloakClient) ValidateGroupMembers(usernames []interface * Top level groups are created via POST /realms/${realm_id}/groups * Child groups are created via POST /realms/${realm_id}/groups/${parent_id}/children */ -func (keycloakClient *KeycloakClient) NewGroup(group *Group) error { +func (keycloakClient *KeycloakClient) NewGroup(ctx context.Context, group *Group) error { var createGroupUrl string if group.ParentId == "" { @@ -81,7 +82,7 @@ func (keycloakClient *KeycloakClient) NewGroup(group *Group) error { createGroupUrl = fmt.Sprintf("/realms/%s/groups/%s/children", group.RealmId, group.ParentId) } - _, location, err := keycloakClient.post(createGroupUrl, group) + _, location, err := keycloakClient.post(ctx, createGroupUrl, group) if err != nil { return err } @@ -91,10 +92,10 @@ func (keycloakClient *KeycloakClient) NewGroup(group *Group) error { return nil } -func (keycloakClient *KeycloakClient) GetGroups(realmId string) ([]*Group, error) { +func (keycloakClient *KeycloakClient) GetGroups(ctx context.Context, realmId string) ([]*Group, error) { var groups []*Group - err := keycloakClient.get(fmt.Sprintf("/realms/%s/groups", realmId), &groups, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/groups", realmId), &groups, nil) if err != nil { return nil, err } @@ -106,17 +107,17 @@ func (keycloakClient *KeycloakClient) GetGroups(realmId string) ([]*Group, error return groups, nil } -func (keycloakClient *KeycloakClient) GetGroup(realmId, id string) (*Group, error) { +func (keycloakClient *KeycloakClient) GetGroup(ctx context.Context, realmId, id string) (*Group, error) { var group Group - err := keycloakClient.get(fmt.Sprintf("/realms/%s/groups/%s", realmId, id), &group, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/groups/%s", realmId, id), &group, nil) if err != nil { return nil, err } group.RealmId = realmId // it's important to set RealmId here because fetching the ParentId depends on it - parentId, err := keycloakClient.groupParentId(&group) + parentId, err := keycloakClient.groupParentId(ctx, &group) if err != nil { return nil, err } @@ -126,7 +127,7 @@ func (keycloakClient *KeycloakClient) GetGroup(realmId, id string) (*Group, erro return &group, nil } -func (keycloakClient *KeycloakClient) GetGroupByName(realmId, name string) (*Group, error) { +func (keycloakClient *KeycloakClient) GetGroupByName(ctx context.Context, realmId, name string) (*Group, error) { var groups []Group // We can't get a group by name, so we have to search for it @@ -134,7 +135,7 @@ func (keycloakClient *KeycloakClient) GetGroupByName(realmId, name string) (*Gro "search": name, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/groups", realmId), &groups, params) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/groups", realmId), &groups, params) if err != nil { return nil, err } @@ -152,7 +153,7 @@ func (keycloakClient *KeycloakClient) GetGroupByName(realmId, name string) (*Gro if group != nil { group.RealmId = realmId // it's important to set RealmId here because fetching the ParentId depends on it - parentId, err := keycloakClient.groupParentId(group) + parentId, err := keycloakClient.groupParentId(ctx, group) if err != nil { return nil, err } @@ -182,22 +183,22 @@ func getGroupByDFS(groupName string, groups []*Group) *Group { return nil } -func (keycloakClient *KeycloakClient) UpdateGroup(group *Group) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/groups/%s", group.RealmId, group.Id), group) +func (keycloakClient *KeycloakClient) UpdateGroup(ctx context.Context, group *Group) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/groups/%s", group.RealmId, group.Id), group) } -func (keycloakClient *KeycloakClient) DeleteGroup(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/groups/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteGroup(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/groups/%s", realmId, id), nil) } -func (keycloakClient *KeycloakClient) ListGroupsWithName(realmId, name string) ([]*Group, error) { +func (keycloakClient *KeycloakClient) ListGroupsWithName(ctx context.Context, realmId, name string) ([]*Group, error) { var groups []*Group params := map[string]string{ "search": name, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/groups", realmId), &groups, params) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/groups", realmId), &groups, params) if err != nil { return nil, err } @@ -205,14 +206,14 @@ func (keycloakClient *KeycloakClient) ListGroupsWithName(realmId, name string) ( return groups, nil } -func (keycloakClient *KeycloakClient) GetGroupMembers(realmId, groupId string) ([]*User, error) { +func (keycloakClient *KeycloakClient) GetGroupMembers(ctx context.Context, realmId, groupId string) ([]*User, error) { var users []*User var first, pagination int = 0, 50 var iterationUsers []*User - for ok := true; ok; ok = (len(iterationUsers) > 0) { + for ok := true; ok; ok = len(iterationUsers) > 0 { iterationUsers = nil - err := keycloakClient.get(fmt.Sprintf("/realms/%s/groups/%s/members?max=%d&first=%d", realmId, groupId, pagination, first), &iterationUsers, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/groups/%s/members?max=%d&first=%d", realmId, groupId, pagination, first), &iterationUsers, nil) if err != nil { return nil, err } @@ -233,23 +234,23 @@ func defaultGroupURL(realmName, groupId string) string { // PutDefaultGroup will PUT a new group ID to the realm default groups. This is effectively // an "upsert". -func (keycloakClient *KeycloakClient) PutDefaultGroup(realmName, groupId string) error { +func (keycloakClient *KeycloakClient) PutDefaultGroup(ctx context.Context, realmName, groupId string) error { url := defaultGroupURL(realmName, groupId) - return keycloakClient.put(url, nil) + return keycloakClient.put(ctx, url, nil) } // DeleteDefaultGroup deletes a group ID from the realm default groups. -func (keycloakClient *KeycloakClient) DeleteDefaultGroup(realmName, groupId string) error { +func (keycloakClient *KeycloakClient) DeleteDefaultGroup(ctx context.Context, realmName, groupId string) error { url := defaultGroupURL(realmName, groupId) - return keycloakClient.delete(url, nil) + return keycloakClient.delete(ctx, url, nil) } // GetDefaultGroups returns all the default groups for a realm. -func (keycloakClient *KeycloakClient) GetDefaultGroups(realmName string) ([]Group, error) { +func (keycloakClient *KeycloakClient) GetDefaultGroups(ctx context.Context, realmName string) ([]Group, error) { url := fmt.Sprintf("/realms/%s/default-groups", realmName) var defaultGroups []Group - err := keycloakClient.get(url, &defaultGroups, nil) + err := keycloakClient.get(ctx, url, &defaultGroups, nil) return defaultGroups, err } diff --git a/keycloak/group_permissions.go b/keycloak/group_permissions.go index 313afb4c7..54fc58883 100644 --- a/keycloak/group_permissions.go +++ b/keycloak/group_permissions.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -16,18 +17,18 @@ type GroupPermissions struct { ScopePermissions map[string]interface{} `json:"scopePermissions"` } -func (keycloakClient *KeycloakClient) EnableGroupPermissions(realmId, groupId string) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/groups/%s/management/permissions", realmId, groupId), GroupPermissionsInput{Enabled: true}) +func (keycloakClient *KeycloakClient) EnableGroupPermissions(ctx context.Context, realmId, groupId string) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/groups/%s/management/permissions", realmId, groupId), GroupPermissionsInput{Enabled: true}) } -func (keycloakClient *KeycloakClient) DisableGroupPermissions(realmId, groupId string) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/groups/%s/management/permissions", realmId, groupId), GroupPermissionsInput{Enabled: false}) +func (keycloakClient *KeycloakClient) DisableGroupPermissions(ctx context.Context, realmId, groupId string) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/groups/%s/management/permissions", realmId, groupId), GroupPermissionsInput{Enabled: false}) } -func (keycloakClient *KeycloakClient) GetGroupPermissions(realmId, groupId string) (*GroupPermissions, error) { +func (keycloakClient *KeycloakClient) GetGroupPermissions(ctx context.Context, realmId, groupId string) (*GroupPermissions, error) { var groupPermissions GroupPermissions - err := keycloakClient.get(fmt.Sprintf("/realms/%s/groups/%s/management/permissions", realmId, groupId), &groupPermissions, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/groups/%s/management/permissions", realmId, groupId), &groupPermissions, nil) if err != nil { return nil, err } diff --git a/keycloak/group_role_mappings.go b/keycloak/group_role_mappings.go index 7cb4f059d..88d89cae1 100644 --- a/keycloak/group_role_mappings.go +++ b/keycloak/group_role_mappings.go @@ -1,10 +1,13 @@ package keycloak -import "fmt" +import ( + "context" + "fmt" +) -func (keycloakClient *KeycloakClient) GetGroupRoleMappings(realmId string, userId string) (*RoleMapping, error) { +func (keycloakClient *KeycloakClient) GetGroupRoleMappings(ctx context.Context, realmId string, userId string) (*RoleMapping, error) { var roleMapping *RoleMapping - err := keycloakClient.get(fmt.Sprintf("/realms/%s/groups/%s/role-mappings", realmId, userId), &roleMapping, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/groups/%s/role-mappings", realmId, userId), &roleMapping, nil) if err != nil { return nil, err } @@ -12,26 +15,26 @@ func (keycloakClient *KeycloakClient) GetGroupRoleMappings(realmId string, userI return roleMapping, nil } -func (keycloakClient *KeycloakClient) AddRealmRolesToGroup(realmId, groupId string, roles []*Role) error { - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/groups/%s/role-mappings/realm", realmId, groupId), roles) +func (keycloakClient *KeycloakClient) AddRealmRolesToGroup(ctx context.Context, realmId, groupId string, roles []*Role) error { + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/groups/%s/role-mappings/realm", realmId, groupId), roles) return err } -func (keycloakClient *KeycloakClient) AddClientRolesToGroup(realmId, groupId, clientId string, roles []*Role) error { - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/groups/%s/role-mappings/clients/%s", realmId, groupId, clientId), roles) +func (keycloakClient *KeycloakClient) AddClientRolesToGroup(ctx context.Context, realmId, groupId, clientId string, roles []*Role) error { + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/groups/%s/role-mappings/clients/%s", realmId, groupId, clientId), roles) return err } -func (keycloakClient *KeycloakClient) RemoveRealmRolesFromGroup(realmId, groupId string, roles []*Role) error { - err := keycloakClient.delete(fmt.Sprintf("/realms/%s/groups/%s/role-mappings/realm", realmId, groupId), roles) +func (keycloakClient *KeycloakClient) RemoveRealmRolesFromGroup(ctx context.Context, realmId, groupId string, roles []*Role) error { + err := keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/groups/%s/role-mappings/realm", realmId, groupId), roles) return err } -func (keycloakClient *KeycloakClient) RemoveClientRolesFromGroup(realmId, groupId, clientId string, roles []*Role) error { - err := keycloakClient.delete(fmt.Sprintf("/realms/%s/groups/%s/role-mappings/clients/%s", realmId, groupId, clientId), roles) +func (keycloakClient *KeycloakClient) RemoveClientRolesFromGroup(ctx context.Context, realmId, groupId, clientId string, roles []*Role) error { + err := keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/groups/%s/role-mappings/clients/%s", realmId, groupId, clientId), roles) return err } diff --git a/keycloak/identity_provider.go b/keycloak/identity_provider.go index 063b90d35..88b29cd29 100644 --- a/keycloak/identity_provider.go +++ b/keycloak/identity_provider.go @@ -1,8 +1,8 @@ package keycloak import ( + "context" "fmt" - "log" "reflect" ) @@ -66,9 +66,8 @@ type IdentityProvider struct { Config *IdentityProviderConfig `json:"config"` } -func (keycloakClient *KeycloakClient) NewIdentityProvider(identityProvider *IdentityProvider) error { - log.Printf("[WARN] Realm: %s", identityProvider.Realm) - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/identity-provider/instances", identityProvider.Realm), identityProvider) +func (keycloakClient *KeycloakClient) NewIdentityProvider(ctx context.Context, identityProvider *IdentityProvider) error { + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances", identityProvider.Realm), identityProvider) if err != nil { return err } @@ -76,11 +75,11 @@ func (keycloakClient *KeycloakClient) NewIdentityProvider(identityProvider *Iden return nil } -func (keycloakClient *KeycloakClient) GetIdentityProvider(realm, alias string) (*IdentityProvider, error) { +func (keycloakClient *KeycloakClient) GetIdentityProvider(ctx context.Context, realm, alias string) (*IdentityProvider, error) { var identityProvider IdentityProvider identityProvider.Realm = realm - err := keycloakClient.get(fmt.Sprintf("/realms/%s/identity-provider/instances/%s", realm, alias), &identityProvider, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s", realm, alias), &identityProvider, nil) if err != nil { return nil, err } @@ -88,12 +87,12 @@ func (keycloakClient *KeycloakClient) GetIdentityProvider(realm, alias string) ( return &identityProvider, nil } -func (keycloakClient *KeycloakClient) UpdateIdentityProvider(identityProvider *IdentityProvider) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/identity-provider/instances/%s", identityProvider.Realm, identityProvider.Alias), identityProvider) +func (keycloakClient *KeycloakClient) UpdateIdentityProvider(ctx context.Context, identityProvider *IdentityProvider) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s", identityProvider.Realm, identityProvider.Alias), identityProvider) } -func (keycloakClient *KeycloakClient) DeleteIdentityProvider(realm, alias string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/identity-provider/instances/%s", realm, alias), nil) +func (keycloakClient *KeycloakClient) DeleteIdentityProvider(ctx context.Context, realm, alias string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s", realm, alias), nil) } func (f *IdentityProviderConfig) UnmarshalJSON(data []byte) error { diff --git a/keycloak/identity_provider_mapper.go b/keycloak/identity_provider_mapper.go index 7cfc9999b..46b644ba0 100644 --- a/keycloak/identity_provider_mapper.go +++ b/keycloak/identity_provider_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "reflect" ) @@ -30,8 +31,8 @@ type IdentityProviderMapper struct { Config *IdentityProviderMapperConfig `json:"config,omitempty"` } -func (keycloakClient *KeycloakClient) NewIdentityProviderMapper(identityProviderMapper *IdentityProviderMapper) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers", identityProviderMapper.Realm, identityProviderMapper.IdentityProviderAlias), identityProviderMapper) +func (keycloakClient *KeycloakClient) NewIdentityProviderMapper(ctx context.Context, identityProviderMapper *IdentityProviderMapper) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers", identityProviderMapper.Realm, identityProviderMapper.IdentityProviderAlias), identityProviderMapper) if err != nil { return err } @@ -41,12 +42,12 @@ func (keycloakClient *KeycloakClient) NewIdentityProviderMapper(identityProvider return nil } -func (keycloakClient *KeycloakClient) GetIdentityProviderMapper(realm, alias, id string) (*IdentityProviderMapper, error) { +func (keycloakClient *KeycloakClient) GetIdentityProviderMapper(ctx context.Context, realm, alias, id string) (*IdentityProviderMapper, error) { var identityProviderMapper IdentityProviderMapper identityProviderMapper.Realm = realm identityProviderMapper.IdentityProviderAlias = alias - err := keycloakClient.get(fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers/%s", realm, alias, id), &identityProviderMapper, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers/%s", realm, alias, id), &identityProviderMapper, nil) if err != nil { return nil, err } @@ -54,12 +55,12 @@ func (keycloakClient *KeycloakClient) GetIdentityProviderMapper(realm, alias, id return &identityProviderMapper, nil } -func (keycloakClient *KeycloakClient) UpdateIdentityProviderMapper(identityProviderMapper *IdentityProviderMapper) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers/%s", identityProviderMapper.Realm, identityProviderMapper.IdentityProviderAlias, identityProviderMapper.Id), identityProviderMapper) +func (keycloakClient *KeycloakClient) UpdateIdentityProviderMapper(ctx context.Context, identityProviderMapper *IdentityProviderMapper) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers/%s", identityProviderMapper.Realm, identityProviderMapper.IdentityProviderAlias, identityProviderMapper.Id), identityProviderMapper) } -func (keycloakClient *KeycloakClient) DeleteIdentityProviderMapper(realm, alias, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers/%s", realm, alias, id), nil) +func (keycloakClient *KeycloakClient) DeleteIdentityProviderMapper(ctx context.Context, realm, alias, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s/mappers/%s", realm, alias, id), nil) } func (f *IdentityProviderMapperConfig) UnmarshalJSON(data []byte) error { diff --git a/keycloak/identity_provider_permissions.go b/keycloak/identity_provider_permissions.go index 63458cb07..672808bc1 100644 --- a/keycloak/identity_provider_permissions.go +++ b/keycloak/identity_provider_permissions.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -16,20 +17,20 @@ type IdentityProviderPermissions struct { ScopePermissions map[string]interface{} `json:"scopePermissions"` } -func (keycloakClient *KeycloakClient) EnableIdentityProviderPermissions(realmId, providerAlias string) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/identity-provider/instances/%s/management/permissions", realmId, providerAlias), IdentityProviderPermissionsInput{Enabled: true}) +func (keycloakClient *KeycloakClient) EnableIdentityProviderPermissions(ctx context.Context, realmId, providerAlias string) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s/management/permissions", realmId, providerAlias), IdentityProviderPermissionsInput{Enabled: true}) } -func (keycloakClient *KeycloakClient) DisableIdentityProviderPermissions(realmId, providerAlias string) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/identity-provider/instances/%s/management/permissions", realmId, providerAlias), IdentityProviderPermissionsInput{Enabled: false}) +func (keycloakClient *KeycloakClient) DisableIdentityProviderPermissions(ctx context.Context, realmId, providerAlias string) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s/management/permissions", realmId, providerAlias), IdentityProviderPermissionsInput{Enabled: false}) } -func (keycloakClient *KeycloakClient) GetIdentityProviderPermissions(realmId, providerAlias string) (*IdentityProviderPermissions, error) { +func (keycloakClient *KeycloakClient) GetIdentityProviderPermissions(ctx context.Context, realmId, providerAlias string) (*IdentityProviderPermissions, error) { var identityProviderPermissions IdentityProviderPermissions identityProviderPermissions.RealmId = realmId identityProviderPermissions.ProviderAlias = providerAlias - err := keycloakClient.get(fmt.Sprintf("/realms/%s/identity-provider/instances/%s/management/permissions", realmId, providerAlias), &identityProviderPermissions, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/identity-provider/instances/%s/management/permissions", realmId, providerAlias), &identityProviderPermissions, nil) if err != nil { return nil, err } diff --git a/keycloak/keycloak_client.go b/keycloak/keycloak_client.go index 2eac333f6..c37e9bcb6 100644 --- a/keycloak/keycloak_client.go +++ b/keycloak/keycloak_client.go @@ -2,12 +2,13 @@ package keycloak import ( "bytes" + "context" "crypto/tls" "crypto/x509" "encoding/json" "fmt" + "github.com/hashicorp/terraform-plugin-log/tflog" "io/ioutil" - "log" "net/http" "net/http/cookiejar" "net/url" @@ -50,7 +51,7 @@ const ( tokenUrl = "%s/realms/%s/protocol/openid-connect/token" ) -func NewKeycloakClient(url, basePath, clientId, clientSecret, realm, username, password string, initialLogin bool, clientTimeout int, caCert string, tlsInsecureSkipVerify bool, userAgent string, additionalHeaders map[string]string) (*KeycloakClient, error) { +func NewKeycloakClient(ctx context.Context, url, basePath, clientId, clientSecret, realm, username, password string, initialLogin bool, clientTimeout int, caCert string, tlsInsecureSkipVerify bool, userAgent string, additionalHeaders map[string]string) (*KeycloakClient, error) { clientCredentials := &ClientCredentials{ ClientId: clientId, ClientSecret: clientSecret, @@ -65,7 +66,7 @@ func NewKeycloakClient(url, basePath, clientId, clientSecret, realm, username, p if initialLogin { return nil, fmt.Errorf("must specify client id, username and password for password grant, or client id and secret for client credentials grant") } else { - log.Printf("[WARN] missing required keycloak credentials, but proceeding anyways as initial_login is false") + tflog.Warn(ctx, "missing required keycloak credentials, but proceeding anyways as initial_login is false") } } @@ -85,7 +86,7 @@ func NewKeycloakClient(url, basePath, clientId, clientSecret, realm, username, p } if keycloakClient.initialLogin { - err = keycloakClient.login() + err = keycloakClient.login(ctx) if err != nil { return nil, fmt.Errorf("failed to perform initial login to Keycloak: %v", err) } @@ -100,13 +101,15 @@ func NewKeycloakClient(url, basePath, clientId, clientSecret, realm, username, p return &keycloakClient, nil } -func (keycloakClient *KeycloakClient) login() error { +func (keycloakClient *KeycloakClient) login(ctx context.Context) error { accessTokenUrl := fmt.Sprintf(tokenUrl, keycloakClient.baseUrl, keycloakClient.realm) accessTokenData := keycloakClient.getAuthenticationFormData() - log.Printf("[DEBUG] Login request: %s", accessTokenData.Encode()) + tflog.Debug(ctx, "Login request", map[string]interface{}{ + "request": accessTokenData.Encode(), + }) - accessTokenRequest, err := http.NewRequest(http.MethodPost, accessTokenUrl, strings.NewReader(accessTokenData.Encode())) + accessTokenRequest, err := http.NewRequestWithContext(ctx, http.MethodPost, accessTokenUrl, strings.NewReader(accessTokenData.Encode())) if err != nil { return err } @@ -133,7 +136,9 @@ func (keycloakClient *KeycloakClient) login() error { body, _ := ioutil.ReadAll(accessTokenResponse.Body) - log.Printf("[DEBUG] Login response: %s", body) + tflog.Debug(ctx, "Login response", map[string]interface{}{ + "response": string(body), + }) var clientCredentials ClientCredentials err = json.Unmarshal(body, &clientCredentials) @@ -145,17 +150,17 @@ func (keycloakClient *KeycloakClient) login() error { keycloakClient.clientCredentials.RefreshToken = clientCredentials.RefreshToken keycloakClient.clientCredentials.TokenType = clientCredentials.TokenType - info, err := keycloakClient.GetServerInfo() + info, err := keycloakClient.GetServerInfo(ctx) if err != nil { return err } - server_version := info.SystemInfo.ServerVersion - if strings.Contains(server_version, ".GA") { - server_version = strings.ReplaceAll(info.SystemInfo.ServerVersion, ".GA", "") + serverVersion := info.SystemInfo.ServerVersion + if strings.Contains(serverVersion, ".GA") { + serverVersion = strings.ReplaceAll(info.SystemInfo.ServerVersion, ".GA", "") } - v, err := version.NewVersion(server_version) + v, err := version.NewVersion(serverVersion) if err != nil { return err } @@ -165,13 +170,15 @@ func (keycloakClient *KeycloakClient) login() error { return nil } -func (keycloakClient *KeycloakClient) refresh() error { +func (keycloakClient *KeycloakClient) refresh(ctx context.Context) error { refreshTokenUrl := fmt.Sprintf(tokenUrl, keycloakClient.baseUrl, keycloakClient.realm) refreshTokenData := keycloakClient.getAuthenticationFormData() - log.Printf("[DEBUG] Refresh request: %s", refreshTokenData.Encode()) + tflog.Debug(ctx, "Refresh request", map[string]interface{}{ + "request": refreshTokenData.Encode(), + }) - refreshTokenRequest, err := http.NewRequest(http.MethodPost, refreshTokenUrl, strings.NewReader(refreshTokenData.Encode())) + refreshTokenRequest, err := http.NewRequestWithContext(ctx, http.MethodPost, refreshTokenUrl, strings.NewReader(refreshTokenData.Encode())) if err != nil { return err } @@ -195,13 +202,15 @@ func (keycloakClient *KeycloakClient) refresh() error { body, _ := ioutil.ReadAll(refreshTokenResponse.Body) - log.Printf("[DEBUG] Refresh response: %s", body) + tflog.Debug(ctx, "Refresh response", map[string]interface{}{ + "response": string(body), + }) // Handle 401 "User or client no longer has role permissions for client key" until I better understand why that happens in the first place if refreshTokenResponse.StatusCode == http.StatusBadRequest { - log.Printf("[DEBUG] Unexpected 400, attemting to log in again") + tflog.Debug(ctx, "Unexpected 400, attempting to log in again") - return keycloakClient.login() + return keycloakClient.login(ctx) } var clientCredentials ClientCredentials @@ -260,10 +269,10 @@ func (keycloakClient *KeycloakClient) addRequestHeaders(request *http.Request) { /** Sends an HTTP request and refreshes credentials on 403 or 401 errors */ -func (keycloakClient *KeycloakClient) sendRequest(request *http.Request, body []byte) ([]byte, string, error) { +func (keycloakClient *KeycloakClient) sendRequest(ctx context.Context, request *http.Request, body []byte) ([]byte, string, error) { if !keycloakClient.initialLogin { keycloakClient.initialLogin = true - err := keycloakClient.login() + err := keycloakClient.login(ctx) if err != nil { return nil, "", fmt.Errorf("error logging in: %s", err) } @@ -272,12 +281,18 @@ func (keycloakClient *KeycloakClient) sendRequest(request *http.Request, body [] requestMethod := request.Method requestPath := request.URL.Path - log.Printf("[DEBUG] Sending %s to %s", requestMethod, requestPath) + requestLogArgs := map[string]interface{}{ + "method": requestMethod, + "path": requestPath, + } + if body != nil { request.Body = ioutil.NopCloser(bytes.NewReader(body)) - log.Printf("[DEBUG] Request body: %s", string(body)) + requestLogArgs["body"] = string(body) } + tflog.Debug(ctx, "Sending request", requestLogArgs) + keycloakClient.addRequestHeaders(request) response, err := keycloakClient.httpClient.Do(request) @@ -288,9 +303,11 @@ func (keycloakClient *KeycloakClient) sendRequest(request *http.Request, body [] // Unauthorized: Token could have expired // Forbidden: After creating a realm, following GETs for the realm return 403 until you refresh if response.StatusCode == http.StatusUnauthorized || response.StatusCode == http.StatusForbidden { - log.Printf("[DEBUG] Response: %s. Attempting refresh", response.Status) + tflog.Debug(ctx, "Got unexpected response, attempting refresh", map[string]interface{}{ + "status": response.Status, + }) - err := keycloakClient.refresh() + err := keycloakClient.refresh(ctx) if err != nil { return nil, "", fmt.Errorf("error refreshing credentials: %s", err) } @@ -306,8 +323,6 @@ func (keycloakClient *KeycloakClient) sendRequest(request *http.Request, body [] } } - log.Printf("[DEBUG] Response: %s", response.Status) - defer response.Body.Close() responseBody, err := ioutil.ReadAll(response.Body) @@ -315,10 +330,16 @@ func (keycloakClient *KeycloakClient) sendRequest(request *http.Request, body [] return nil, "", err } + responseLogArgs := map[string]interface{}{ + "status": response.Status, + } + if len(responseBody) != 0 && request.URL.Path != "/auth/admin/serverinfo" { - log.Printf("[DEBUG] Response body: %s", responseBody) + responseLogArgs["body"] = string(responseBody) } + tflog.Debug(ctx, "Received response", responseLogArgs) + if response.StatusCode >= 400 { errorMessage := fmt.Sprintf("error sending %s request to %s: %s.", request.Method, request.URL.Path, response.Status) @@ -335,18 +356,18 @@ func (keycloakClient *KeycloakClient) sendRequest(request *http.Request, body [] return responseBody, response.Header.Get("Location"), nil } -func (keycloakClient *KeycloakClient) get(path string, resource interface{}, params map[string]string) error { - body, err := keycloakClient.getRaw(path, params) +func (keycloakClient *KeycloakClient) get(ctx context.Context, path string, resource interface{}, params map[string]string) error { + body, err := keycloakClient.getRaw(ctx, path, params) if err != nil { return err } return json.Unmarshal(body, resource) } -func (keycloakClient *KeycloakClient) getRaw(path string, params map[string]string) ([]byte, error) { +func (keycloakClient *KeycloakClient) getRaw(ctx context.Context, path string, params map[string]string) ([]byte, error) { resourceUrl := keycloakClient.baseUrl + apiUrl + path - request, err := http.NewRequest(http.MethodGet, resourceUrl, nil) + request, err := http.NewRequestWithContext(ctx, http.MethodGet, resourceUrl, nil) if err != nil { return nil, err } @@ -359,24 +380,24 @@ func (keycloakClient *KeycloakClient) getRaw(path string, params map[string]stri request.URL.RawQuery = query.Encode() } - body, _, err := keycloakClient.sendRequest(request, nil) + body, _, err := keycloakClient.sendRequest(ctx, request, nil) return body, err } -func (keycloakClient *KeycloakClient) sendRaw(path string, requestBody []byte) ([]byte, error) { +func (keycloakClient *KeycloakClient) sendRaw(ctx context.Context, path string, requestBody []byte) ([]byte, error) { resourceUrl := keycloakClient.baseUrl + apiUrl + path - request, err := http.NewRequest(http.MethodPost, resourceUrl, nil) + request, err := http.NewRequestWithContext(ctx, http.MethodPost, resourceUrl, nil) if err != nil { return nil, err } - body, _, err := keycloakClient.sendRequest(request, requestBody) + body, _, err := keycloakClient.sendRequest(ctx, request, requestBody) return body, err } -func (keycloakClient *KeycloakClient) post(path string, requestBody interface{}) ([]byte, string, error) { +func (keycloakClient *KeycloakClient) post(ctx context.Context, path string, requestBody interface{}) ([]byte, string, error) { resourceUrl := keycloakClient.baseUrl + apiUrl + path payload, err := keycloakClient.marshal(requestBody) @@ -384,17 +405,17 @@ func (keycloakClient *KeycloakClient) post(path string, requestBody interface{}) return nil, "", err } - request, err := http.NewRequest(http.MethodPost, resourceUrl, nil) + request, err := http.NewRequestWithContext(ctx, http.MethodPost, resourceUrl, nil) if err != nil { return nil, "", err } - body, location, err := keycloakClient.sendRequest(request, payload) + body, location, err := keycloakClient.sendRequest(ctx, request, payload) return body, location, err } -func (keycloakClient *KeycloakClient) put(path string, requestBody interface{}) error { +func (keycloakClient *KeycloakClient) put(ctx context.Context, path string, requestBody interface{}) error { resourceUrl := keycloakClient.baseUrl + apiUrl + path payload, err := keycloakClient.marshal(requestBody) @@ -402,17 +423,17 @@ func (keycloakClient *KeycloakClient) put(path string, requestBody interface{}) return err } - request, err := http.NewRequest(http.MethodPut, resourceUrl, nil) + request, err := http.NewRequestWithContext(ctx, http.MethodPut, resourceUrl, nil) if err != nil { return err } - _, _, err = keycloakClient.sendRequest(request, payload) + _, _, err = keycloakClient.sendRequest(ctx, request, payload) return err } -func (keycloakClient *KeycloakClient) delete(path string, requestBody interface{}) error { +func (keycloakClient *KeycloakClient) delete(ctx context.Context, path string, requestBody interface{}) error { resourceUrl := keycloakClient.baseUrl + apiUrl + path var ( @@ -427,22 +448,22 @@ func (keycloakClient *KeycloakClient) delete(path string, requestBody interface{ } } - request, err := http.NewRequest(http.MethodDelete, resourceUrl, nil) + request, err := http.NewRequestWithContext(ctx, http.MethodDelete, resourceUrl, nil) if err != nil { return err } - _, _, err = keycloakClient.sendRequest(request, payload) + _, _, err = keycloakClient.sendRequest(ctx, request, payload) return err } -func (keycloakClient *KeycloakClient) marshal(requestBody interface{}) ([]byte, error) { +func (keycloakClient *KeycloakClient) marshal(body interface{}) ([]byte, error) { if keycloakClient.debug { - return json.MarshalIndent(requestBody, "", " ") + return json.MarshalIndent(body, "", " ") } - return json.Marshal(requestBody) + return json.Marshal(body) } func newHttpClient(tlsInsecureSkipVerify bool, clientTimeout int, caCert string) (*http.Client, error) { diff --git a/keycloak/keycloak_client_test.go b/keycloak/keycloak_client_test.go index beaeadf45..4da400f37 100644 --- a/keycloak/keycloak_client_test.go +++ b/keycloak/keycloak_client_test.go @@ -1,9 +1,8 @@ package keycloak import ( + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" - "io/ioutil" - "log" "os" "strconv" "testing" @@ -26,6 +25,8 @@ var requiredEnvironmentVariables = []string{ // // This appears to have been fixed as of Keycloak 12.x func TestAccKeycloakApiClientRefresh(t *testing.T) { + ctx := context.Background() + for _, requiredEnvironmentVariable := range requiredEnvironmentVariables { if value := os.Getenv(requiredEnvironmentVariable); value == "" { t.Fatalf("%s must be set before running acceptance tests.", requiredEnvironmentVariable) @@ -41,19 +42,13 @@ func TestAccKeycloakApiClientRefresh(t *testing.T) { } } - // Disable [DEBUG] logs which terraform typically handles for you. Re-enable when finished - if tfLogLevel := os.Getenv("TF_LOG"); tfLogLevel == "" { - log.SetOutput(ioutil.Discard) - defer log.SetOutput(os.Stdout) - } - // Convert KEYCLOAK_CLIENT_TIMEOUT to int clientTimeout, err := strconv.Atoi(os.Getenv("KEYCLOAK_CLIENT_TIMEOUT")) if err != nil { t.Fatal("KEYCLOAK_CLIENT_TIMEOUT must be an integer") } - keycloakClient, err := NewKeycloakClient(os.Getenv("KEYCLOAK_URL"), "/auth", os.Getenv("KEYCLOAK_CLIENT_ID"), os.Getenv("KEYCLOAK_CLIENT_SECRET"), os.Getenv("KEYCLOAK_REALM"), os.Getenv("KEYCLOAK_USER"), os.Getenv("KEYCLOAK_PASSWORD"), true, clientTimeout, "", false, "", map[string]string{ + keycloakClient, err := NewKeycloakClient(ctx, os.Getenv("KEYCLOAK_URL"), "/auth", os.Getenv("KEYCLOAK_CLIENT_ID"), os.Getenv("KEYCLOAK_CLIENT_SECRET"), os.Getenv("KEYCLOAK_REALM"), os.Getenv("KEYCLOAK_USER"), os.Getenv("KEYCLOAK_PASSWORD"), true, clientTimeout, "", false, "", map[string]string{ "foo": "bar", }) if err != nil { @@ -61,7 +56,7 @@ func TestAccKeycloakApiClientRefresh(t *testing.T) { } // skip test if running 12.x or greater - if v, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(Version_12); v { + if v, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(ctx, Version_12); v { t.Skip() } @@ -71,7 +66,7 @@ func TestAccKeycloakApiClientRefresh(t *testing.T) { Id: realmName, } - err = keycloakClient.NewRealm(realm) + err = keycloakClient.NewRealm(ctx, realm) if err != nil { t.Fatalf("%s", err) } @@ -85,13 +80,13 @@ func TestAccKeycloakApiClientRefresh(t *testing.T) { oldTokenType = keycloakClient.clientCredentials.TokenType } - _, err = keycloakClient.GetRealm(realmName) // This should not fail since it will automatically refresh and try again + _, err = keycloakClient.GetRealm(ctx, realmName) // This should not fail since it will automatically refresh and try again if err != nil { t.Fatalf("%s", err) } // Clean up - the realm doesn't need to exist in order for us to assert against the refreshed tokens - err = keycloakClient.DeleteRealm(realmName) + err = keycloakClient.DeleteRealm(ctx, realmName) if err != nil { t.Fatalf("%s", err) } diff --git a/keycloak/ldap_full_name_mapper.go b/keycloak/ldap_full_name_mapper.go index bcf677cef..3611d79cd 100644 --- a/keycloak/ldap_full_name_mapper.go +++ b/keycloak/ldap_full_name_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -61,14 +62,14 @@ func convertFromComponentToLdapFullNameMapper(component *component, realmId stri } // the keycloak api client is passed in order to fetch the ldap provider for writable validation -func (keycloakClient *KeycloakClient) ValidateLdapFullNameMapper(mapper *LdapFullNameMapper) error { +func (keycloakClient *KeycloakClient) ValidateLdapFullNameMapper(ctx context.Context, mapper *LdapFullNameMapper) error { if mapper.ReadOnly && mapper.WriteOnly { return fmt.Errorf("validation error: ldap full name mapper cannot be both read only and write only") } // the mapper can't be write only if the ldap provider is not writable if mapper.WriteOnly { - ldapUserFederation, err := keycloakClient.GetLdapUserFederation(mapper.RealmId, mapper.LdapUserFederationId) + ldapUserFederation, err := keycloakClient.GetLdapUserFederation(ctx, mapper.RealmId, mapper.LdapUserFederationId) if err != nil { return err } @@ -81,8 +82,8 @@ func (keycloakClient *KeycloakClient) ValidateLdapFullNameMapper(mapper *LdapFul return nil } -func (keycloakClient *KeycloakClient) NewLdapFullNameMapper(ldapFullNameMapper *LdapFullNameMapper) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", ldapFullNameMapper.RealmId), convertFromLdapFullNameMapperToComponent(ldapFullNameMapper)) +func (keycloakClient *KeycloakClient) NewLdapFullNameMapper(ctx context.Context, ldapFullNameMapper *LdapFullNameMapper) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", ldapFullNameMapper.RealmId), convertFromLdapFullNameMapperToComponent(ldapFullNameMapper)) if err != nil { return err } @@ -92,10 +93,10 @@ func (keycloakClient *KeycloakClient) NewLdapFullNameMapper(ldapFullNameMapper * return nil } -func (keycloakClient *KeycloakClient) GetLdapFullNameMapper(realmId, id string) (*LdapFullNameMapper, error) { +func (keycloakClient *KeycloakClient) GetLdapFullNameMapper(ctx context.Context, realmId, id string) (*LdapFullNameMapper, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -103,10 +104,10 @@ func (keycloakClient *KeycloakClient) GetLdapFullNameMapper(realmId, id string) return convertFromComponentToLdapFullNameMapper(component, realmId) } -func (keycloakClient *KeycloakClient) UpdateLdapFullNameMapper(ldapFullNameMapper *LdapFullNameMapper) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", ldapFullNameMapper.RealmId, ldapFullNameMapper.Id), convertFromLdapFullNameMapperToComponent(ldapFullNameMapper)) +func (keycloakClient *KeycloakClient) UpdateLdapFullNameMapper(ctx context.Context, ldapFullNameMapper *LdapFullNameMapper) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", ldapFullNameMapper.RealmId, ldapFullNameMapper.Id), convertFromLdapFullNameMapperToComponent(ldapFullNameMapper)) } -func (keycloakClient *KeycloakClient) DeleteLdapFullNameMapper(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteLdapFullNameMapper(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/ldap_group_mapper.go b/keycloak/ldap_group_mapper.go index 1495085ae..d679bc261 100644 --- a/keycloak/ldap_group_mapper.go +++ b/keycloak/ldap_group_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" "strings" @@ -150,7 +151,7 @@ func convertFromComponentToLdapGroupMapper(component *component, realmId string) return ldapGroupMapper, nil } -func (keycloakClient *KeycloakClient) ValidateLdapGroupMapper(ldapGroupMapper *LdapGroupMapper) error { +func (keycloakClient *KeycloakClient) ValidateLdapGroupMapper(ctx context.Context, ldapGroupMapper *LdapGroupMapper) error { if ldapGroupMapper.MembershipAttributeType == "UID" && ldapGroupMapper.PreserveGroupInheritance == true { return fmt.Errorf("validation error: group inheritance cannot be preserved while membership attribute type is UID") } @@ -158,8 +159,8 @@ func (keycloakClient *KeycloakClient) ValidateLdapGroupMapper(ldapGroupMapper *L return nil } -func (keycloakClient *KeycloakClient) NewLdapGroupMapper(ldapGroupMapper *LdapGroupMapper) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", ldapGroupMapper.RealmId), convertFromLdapGroupMapperToComponent(ldapGroupMapper)) +func (keycloakClient *KeycloakClient) NewLdapGroupMapper(ctx context.Context, ldapGroupMapper *LdapGroupMapper) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", ldapGroupMapper.RealmId), convertFromLdapGroupMapperToComponent(ldapGroupMapper)) if err != nil { return err } @@ -169,10 +170,10 @@ func (keycloakClient *KeycloakClient) NewLdapGroupMapper(ldapGroupMapper *LdapGr return nil } -func (keycloakClient *KeycloakClient) GetLdapGroupMapper(realmId, id string) (*LdapGroupMapper, error) { +func (keycloakClient *KeycloakClient) GetLdapGroupMapper(ctx context.Context, realmId, id string) (*LdapGroupMapper, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -180,10 +181,10 @@ func (keycloakClient *KeycloakClient) GetLdapGroupMapper(realmId, id string) (*L return convertFromComponentToLdapGroupMapper(component, realmId) } -func (keycloakClient *KeycloakClient) UpdateLdapGroupMapper(ldapGroupMapper *LdapGroupMapper) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", ldapGroupMapper.RealmId, ldapGroupMapper.Id), convertFromLdapGroupMapperToComponent(ldapGroupMapper)) +func (keycloakClient *KeycloakClient) UpdateLdapGroupMapper(ctx context.Context, ldapGroupMapper *LdapGroupMapper) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", ldapGroupMapper.RealmId, ldapGroupMapper.Id), convertFromLdapGroupMapperToComponent(ldapGroupMapper)) } -func (keycloakClient *KeycloakClient) DeleteLdapGroupMapper(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteLdapGroupMapper(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/ldap_hardcoded_group_mapper.go b/keycloak/ldap_hardcoded_group_mapper.go index cda80039b..24842eba3 100644 --- a/keycloak/ldap_hardcoded_group_mapper.go +++ b/keycloak/ldap_hardcoded_group_mapper.go @@ -1,6 +1,9 @@ package keycloak -import "fmt" +import ( + "context" + "fmt" +) type LdapHardcodedGroupMapper struct { Id string @@ -37,15 +40,15 @@ func convertFromComponentToLdapHardcodedGroupMapper(component *component, realmI } } -func (keycloakClient *KeycloakClient) ValidateLdapHardcodedGroupMapper(ldapMapper *LdapHardcodedGroupMapper) error { +func (keycloakClient *KeycloakClient) ValidateLdapHardcodedGroupMapper(ctx context.Context, ldapMapper *LdapHardcodedGroupMapper) error { if len(ldapMapper.Group) == 0 { return fmt.Errorf("validation error: hardcoded group name must not be empty") } return nil } -func (keycloakClient *KeycloakClient) NewLdapHardcodedGroupMapper(ldapMapper *LdapHardcodedGroupMapper) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", ldapMapper.RealmId), convertFromLdapHardcodedGroupMapperToComponent(ldapMapper)) +func (keycloakClient *KeycloakClient) NewLdapHardcodedGroupMapper(ctx context.Context, ldapMapper *LdapHardcodedGroupMapper) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", ldapMapper.RealmId), convertFromLdapHardcodedGroupMapperToComponent(ldapMapper)) if err != nil { return err } @@ -55,10 +58,10 @@ func (keycloakClient *KeycloakClient) NewLdapHardcodedGroupMapper(ldapMapper *Ld return nil } -func (keycloakClient *KeycloakClient) GetLdapHardcodedGroupMapper(realmId, id string) (*LdapHardcodedGroupMapper, error) { +func (keycloakClient *KeycloakClient) GetLdapHardcodedGroupMapper(ctx context.Context, realmId, id string) (*LdapHardcodedGroupMapper, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -66,10 +69,10 @@ func (keycloakClient *KeycloakClient) GetLdapHardcodedGroupMapper(realmId, id st return convertFromComponentToLdapHardcodedGroupMapper(component, realmId), nil } -func (keycloakClient *KeycloakClient) UpdateLdapHardcodedGroupMapper(ldapMapper *LdapHardcodedGroupMapper) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", ldapMapper.RealmId, ldapMapper.Id), convertFromLdapHardcodedGroupMapperToComponent(ldapMapper)) +func (keycloakClient *KeycloakClient) UpdateLdapHardcodedGroupMapper(ctx context.Context, ldapMapper *LdapHardcodedGroupMapper) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", ldapMapper.RealmId, ldapMapper.Id), convertFromLdapHardcodedGroupMapperToComponent(ldapMapper)) } -func (keycloakClient *KeycloakClient) DeleteLdapHardcodedGroupMapper(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteLdapHardcodedGroupMapper(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/ldap_hardcoded_role_mapper.go b/keycloak/ldap_hardcoded_role_mapper.go index 322a30cd5..f4774ead5 100644 --- a/keycloak/ldap_hardcoded_role_mapper.go +++ b/keycloak/ldap_hardcoded_role_mapper.go @@ -1,6 +1,9 @@ package keycloak -import "fmt" +import ( + "context" + "fmt" +) type LdapHardcodedRoleMapper struct { Id string @@ -37,15 +40,15 @@ func convertFromComponentToLdapHardcodedRoleMapper(component *component, realmId } } -func (keycloakClient *KeycloakClient) ValidateLdapHardcodedRoleMapper(ldapMapper *LdapHardcodedRoleMapper) error { +func (keycloakClient *KeycloakClient) ValidateLdapHardcodedRoleMapper(ctx context.Context, ldapMapper *LdapHardcodedRoleMapper) error { if len(ldapMapper.Role) == 0 { return fmt.Errorf("validation error: hardcoded role name must not be empty") } return nil } -func (keycloakClient *KeycloakClient) NewLdapHardcodedRoleMapper(ldapMapper *LdapHardcodedRoleMapper) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", ldapMapper.RealmId), convertFromLdapHardcodedRoleMapperToComponent(ldapMapper)) +func (keycloakClient *KeycloakClient) NewLdapHardcodedRoleMapper(ctx context.Context, ldapMapper *LdapHardcodedRoleMapper) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", ldapMapper.RealmId), convertFromLdapHardcodedRoleMapperToComponent(ldapMapper)) if err != nil { return err } @@ -55,10 +58,10 @@ func (keycloakClient *KeycloakClient) NewLdapHardcodedRoleMapper(ldapMapper *Lda return nil } -func (keycloakClient *KeycloakClient) GetLdapHardcodedRoleMapper(realmId, id string) (*LdapHardcodedRoleMapper, error) { +func (keycloakClient *KeycloakClient) GetLdapHardcodedRoleMapper(ctx context.Context, realmId, id string) (*LdapHardcodedRoleMapper, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -66,10 +69,10 @@ func (keycloakClient *KeycloakClient) GetLdapHardcodedRoleMapper(realmId, id str return convertFromComponentToLdapHardcodedRoleMapper(component, realmId), nil } -func (keycloakClient *KeycloakClient) UpdateLdapHardcodedRoleMapper(ldapMapper *LdapHardcodedRoleMapper) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", ldapMapper.RealmId, ldapMapper.Id), convertFromLdapHardcodedRoleMapperToComponent(ldapMapper)) +func (keycloakClient *KeycloakClient) UpdateLdapHardcodedRoleMapper(ctx context.Context, ldapMapper *LdapHardcodedRoleMapper) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", ldapMapper.RealmId, ldapMapper.Id), convertFromLdapHardcodedRoleMapperToComponent(ldapMapper)) } -func (keycloakClient *KeycloakClient) DeleteLdapHardcodedRoleMapper(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteLdapHardcodedRoleMapper(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/ldap_msad_lds_user_account_control_mapper.go b/keycloak/ldap_msad_lds_user_account_control_mapper.go index 9b3ecb5bc..3f8fdf912 100644 --- a/keycloak/ldap_msad_lds_user_account_control_mapper.go +++ b/keycloak/ldap_msad_lds_user_account_control_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -30,8 +31,8 @@ func convertFromComponentToLdapMsadLdsUserAccountControlMapper(component *compon }, nil } -func (keycloakClient *KeycloakClient) NewLdapMsadLdsUserAccountControlMapper(ldapMsadLdsUserAccountControlMapper *LdapMsadLdsUserAccountControlMapper) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", ldapMsadLdsUserAccountControlMapper.RealmId), convertFromLdapMsadLdsUserAccountControlMapperToComponent(ldapMsadLdsUserAccountControlMapper)) +func (keycloakClient *KeycloakClient) NewLdapMsadLdsUserAccountControlMapper(ctx context.Context, ldapMsadLdsUserAccountControlMapper *LdapMsadLdsUserAccountControlMapper) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", ldapMsadLdsUserAccountControlMapper.RealmId), convertFromLdapMsadLdsUserAccountControlMapperToComponent(ldapMsadLdsUserAccountControlMapper)) if err != nil { return err } @@ -41,10 +42,10 @@ func (keycloakClient *KeycloakClient) NewLdapMsadLdsUserAccountControlMapper(lda return nil } -func (keycloakClient *KeycloakClient) GetLdapMsadLdsUserAccountControlMapper(realmId, id string) (*LdapMsadLdsUserAccountControlMapper, error) { +func (keycloakClient *KeycloakClient) GetLdapMsadLdsUserAccountControlMapper(ctx context.Context, realmId, id string) (*LdapMsadLdsUserAccountControlMapper, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -52,10 +53,10 @@ func (keycloakClient *KeycloakClient) GetLdapMsadLdsUserAccountControlMapper(rea return convertFromComponentToLdapMsadLdsUserAccountControlMapper(component, realmId) } -func (keycloakClient *KeycloakClient) UpdateLdapMsadLdsUserAccountControlMapper(ldapMsadLdsUserAccountControlMapper *LdapMsadLdsUserAccountControlMapper) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", ldapMsadLdsUserAccountControlMapper.RealmId, ldapMsadLdsUserAccountControlMapper.Id), convertFromLdapMsadLdsUserAccountControlMapperToComponent(ldapMsadLdsUserAccountControlMapper)) +func (keycloakClient *KeycloakClient) UpdateLdapMsadLdsUserAccountControlMapper(ctx context.Context, ldapMsadLdsUserAccountControlMapper *LdapMsadLdsUserAccountControlMapper) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", ldapMsadLdsUserAccountControlMapper.RealmId, ldapMsadLdsUserAccountControlMapper.Id), convertFromLdapMsadLdsUserAccountControlMapperToComponent(ldapMsadLdsUserAccountControlMapper)) } -func (keycloakClient *KeycloakClient) DeleteLdapMsadLdsUserAccountControlMapper(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteLdapMsadLdsUserAccountControlMapper(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/ldap_msad_user_account_control_mapper.go b/keycloak/ldap_msad_user_account_control_mapper.go index a2890bb70..866c1d06c 100644 --- a/keycloak/ldap_msad_user_account_control_mapper.go +++ b/keycloak/ldap_msad_user_account_control_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -45,8 +46,8 @@ func convertFromComponentToLdapMsadUserAccountControlMapper(component *component }, nil } -func (keycloakClient *KeycloakClient) NewLdapMsadUserAccountControlMapper(ldapMsadUserAccountControlMapper *LdapMsadUserAccountControlMapper) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", ldapMsadUserAccountControlMapper.RealmId), convertFromLdapMsadUserAccountControlMapperToComponent(ldapMsadUserAccountControlMapper)) +func (keycloakClient *KeycloakClient) NewLdapMsadUserAccountControlMapper(ctx context.Context, ldapMsadUserAccountControlMapper *LdapMsadUserAccountControlMapper) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", ldapMsadUserAccountControlMapper.RealmId), convertFromLdapMsadUserAccountControlMapperToComponent(ldapMsadUserAccountControlMapper)) if err != nil { return err } @@ -56,10 +57,10 @@ func (keycloakClient *KeycloakClient) NewLdapMsadUserAccountControlMapper(ldapMs return nil } -func (keycloakClient *KeycloakClient) GetLdapMsadUserAccountControlMapper(realmId, id string) (*LdapMsadUserAccountControlMapper, error) { +func (keycloakClient *KeycloakClient) GetLdapMsadUserAccountControlMapper(ctx context.Context, realmId, id string) (*LdapMsadUserAccountControlMapper, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -67,10 +68,10 @@ func (keycloakClient *KeycloakClient) GetLdapMsadUserAccountControlMapper(realmI return convertFromComponentToLdapMsadUserAccountControlMapper(component, realmId) } -func (keycloakClient *KeycloakClient) UpdateLdapMsadUserAccountControlMapper(ldapMsadUserAccountControlMapper *LdapMsadUserAccountControlMapper) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", ldapMsadUserAccountControlMapper.RealmId, ldapMsadUserAccountControlMapper.Id), convertFromLdapMsadUserAccountControlMapperToComponent(ldapMsadUserAccountControlMapper)) +func (keycloakClient *KeycloakClient) UpdateLdapMsadUserAccountControlMapper(ctx context.Context, ldapMsadUserAccountControlMapper *LdapMsadUserAccountControlMapper) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", ldapMsadUserAccountControlMapper.RealmId, ldapMsadUserAccountControlMapper.Id), convertFromLdapMsadUserAccountControlMapperToComponent(ldapMsadUserAccountControlMapper)) } -func (keycloakClient *KeycloakClient) DeleteLdapMsadUserAccountControlMapper(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteLdapMsadUserAccountControlMapper(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/ldap_role_mapper.go b/keycloak/ldap_role_mapper.go index b5a055e6d..253ea46e7 100644 --- a/keycloak/ldap_role_mapper.go +++ b/keycloak/ldap_role_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" "strings" @@ -118,12 +119,8 @@ func convertFromComponentToLdapRoleMapper(component *component, realmId string) return ldapRoleMapper, nil } -func (keycloakClient *KeycloakClient) ValidateLdapRoleMapper(ldapRoleMapper *LdapRoleMapper) error { - return nil -} - -func (keycloakClient *KeycloakClient) NewLdapRoleMapper(ldapRoleMapper *LdapRoleMapper) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", ldapRoleMapper.RealmId), convertFromLdapRoleMapperToComponent(ldapRoleMapper)) +func (keycloakClient *KeycloakClient) NewLdapRoleMapper(ctx context.Context, ldapRoleMapper *LdapRoleMapper) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", ldapRoleMapper.RealmId), convertFromLdapRoleMapperToComponent(ldapRoleMapper)) if err != nil { return err } @@ -133,10 +130,10 @@ func (keycloakClient *KeycloakClient) NewLdapRoleMapper(ldapRoleMapper *LdapRole return nil } -func (keycloakClient *KeycloakClient) GetLdapRoleMapper(realmId, id string) (*LdapRoleMapper, error) { +func (keycloakClient *KeycloakClient) GetLdapRoleMapper(ctx context.Context, realmId, id string) (*LdapRoleMapper, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -144,10 +141,10 @@ func (keycloakClient *KeycloakClient) GetLdapRoleMapper(realmId, id string) (*Ld return convertFromComponentToLdapRoleMapper(component, realmId) } -func (keycloakClient *KeycloakClient) UpdateLdapRoleMapper(ldapRoleMapper *LdapRoleMapper) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", ldapRoleMapper.RealmId, ldapRoleMapper.Id), convertFromLdapRoleMapperToComponent(ldapRoleMapper)) +func (keycloakClient *KeycloakClient) UpdateLdapRoleMapper(ctx context.Context, ldapRoleMapper *LdapRoleMapper) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", ldapRoleMapper.RealmId, ldapRoleMapper.Id), convertFromLdapRoleMapperToComponent(ldapRoleMapper)) } -func (keycloakClient *KeycloakClient) DeleteLdapRoleMapper(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteLdapRoleMapper(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/ldap_user_attribute_mapper.go b/keycloak/ldap_user_attribute_mapper.go index 3b164bcb5..f44f8fa62 100644 --- a/keycloak/ldap_user_attribute_mapper.go +++ b/keycloak/ldap_user_attribute_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -75,8 +76,8 @@ func convertFromComponentToLdapUserAttributeMapper(component *component, realmId }, nil } -func (keycloakClient *KeycloakClient) NewLdapUserAttributeMapper(ldapUserAttributeMapper *LdapUserAttributeMapper) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", ldapUserAttributeMapper.RealmId), convertFromLdapUserAttributeMapperToComponent(ldapUserAttributeMapper)) +func (keycloakClient *KeycloakClient) NewLdapUserAttributeMapper(ctx context.Context, ldapUserAttributeMapper *LdapUserAttributeMapper) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", ldapUserAttributeMapper.RealmId), convertFromLdapUserAttributeMapperToComponent(ldapUserAttributeMapper)) if err != nil { return err } @@ -86,10 +87,10 @@ func (keycloakClient *KeycloakClient) NewLdapUserAttributeMapper(ldapUserAttribu return nil } -func (keycloakClient *KeycloakClient) GetLdapUserAttributeMapper(realmId, id string) (*LdapUserAttributeMapper, error) { +func (keycloakClient *KeycloakClient) GetLdapUserAttributeMapper(ctx context.Context, realmId, id string) (*LdapUserAttributeMapper, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -97,10 +98,10 @@ func (keycloakClient *KeycloakClient) GetLdapUserAttributeMapper(realmId, id str return convertFromComponentToLdapUserAttributeMapper(component, realmId) } -func (keycloakClient *KeycloakClient) UpdateLdapUserAttributeMapper(ldapUserAttributeMapper *LdapUserAttributeMapper) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", ldapUserAttributeMapper.RealmId, ldapUserAttributeMapper.Id), convertFromLdapUserAttributeMapperToComponent(ldapUserAttributeMapper)) +func (keycloakClient *KeycloakClient) UpdateLdapUserAttributeMapper(ctx context.Context, ldapUserAttributeMapper *LdapUserAttributeMapper) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", ldapUserAttributeMapper.RealmId, ldapUserAttributeMapper.Id), convertFromLdapUserAttributeMapperToComponent(ldapUserAttributeMapper)) } -func (keycloakClient *KeycloakClient) DeleteLdapUserAttributeMapper(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteLdapUserAttributeMapper(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/ldap_user_federation.go b/keycloak/ldap_user_federation.go index 84ff5237f..437d2ee25 100644 --- a/keycloak/ldap_user_federation.go +++ b/keycloak/ldap_user_federation.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" "strings" @@ -429,7 +430,7 @@ func convertFromComponentToLdapUserFederation(component *component) (*LdapUserFe return ldap, nil } -func (keycloakClient *KeycloakClient) ValidateLdapUserFederation(ldap *LdapUserFederation) error { +func (keycloakClient *KeycloakClient) ValidateLdapUserFederation(ctx context.Context, ldap *LdapUserFederation) error { if (ldap.BindDn == "" && ldap.BindCredential != "") || (ldap.BindDn != "" && ldap.BindCredential == "") { return fmt.Errorf("validation error: authentication requires both BindDN and BindCredential to be set") } @@ -437,13 +438,13 @@ func (keycloakClient *KeycloakClient) ValidateLdapUserFederation(ldap *LdapUserF return nil } -func (keycloakClient *KeycloakClient) NewLdapUserFederation(ldapUserFederation *LdapUserFederation) error { +func (keycloakClient *KeycloakClient) NewLdapUserFederation(ctx context.Context, ldapUserFederation *LdapUserFederation) error { component, err := convertFromLdapUserFederationToComponent(ldapUserFederation) if err != nil { return err } - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", ldapUserFederation.RealmId), component) + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", ldapUserFederation.RealmId), component) if err != nil { return err } @@ -453,10 +454,10 @@ func (keycloakClient *KeycloakClient) NewLdapUserFederation(ldapUserFederation * return nil } -func (keycloakClient *KeycloakClient) GetLdapUserFederation(realmId, id string) (*LdapUserFederation, error) { +func (keycloakClient *KeycloakClient) GetLdapUserFederation(ctx context.Context, realmId, id string) (*LdapUserFederation, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -464,11 +465,11 @@ func (keycloakClient *KeycloakClient) GetLdapUserFederation(realmId, id string) return convertFromComponentToLdapUserFederation(component) } -func (keycloakClient *KeycloakClient) GetLdapUserFederationMappers(realmId, id string) (*[]interface{}, error) { +func (keycloakClient *KeycloakClient) GetLdapUserFederationMappers(ctx context.Context, realmId, id string) (*[]interface{}, error) { var components []*component var ldapUserFederationMappers []interface{} - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components?parent=%s&type=org.keycloak.storage.ldap.mappers.LDAPStorageMapper", realmId, id), &components, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components?parent=%s&type=org.keycloak.storage.ldap.mappers.LDAPStorageMapper", realmId, id), &components, nil) if err != nil { return nil, err } @@ -522,15 +523,15 @@ func (keycloakClient *KeycloakClient) GetLdapUserFederationMappers(realmId, id s return &ldapUserFederationMappers, nil } -func (keycloakClient *KeycloakClient) UpdateLdapUserFederation(ldapUserFederation *LdapUserFederation) error { +func (keycloakClient *KeycloakClient) UpdateLdapUserFederation(ctx context.Context, ldapUserFederation *LdapUserFederation) error { component, err := convertFromLdapUserFederationToComponent(ldapUserFederation) if err != nil { return err } - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", ldapUserFederation.RealmId, ldapUserFederation.Id), component) + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", ldapUserFederation.RealmId, ldapUserFederation.Id), component) } -func (keycloakClient *KeycloakClient) DeleteLdapUserFederation(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteLdapUserFederation(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/openid_audience_protocol_mapper.go b/keycloak/openid_audience_protocol_mapper.go index 4e83a49c4..656fe99c1 100644 --- a/keycloak/openid_audience_protocol_mapper.go +++ b/keycloak/openid_audience_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -60,10 +61,10 @@ func (protocolMapper *protocolMapper) convertToOpenIdAudienceProtocolMapper(real }, nil } -func (keycloakClient *KeycloakClient) GetOpenIdAudienceProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*OpenIdAudienceProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetOpenIdAudienceProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*OpenIdAudienceProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -71,14 +72,14 @@ func (keycloakClient *KeycloakClient) GetOpenIdAudienceProtocolMapper(realmId, c return protocolMapper.convertToOpenIdAudienceProtocolMapper(realmId, clientId, clientScopeId) } -func (keycloakClient *KeycloakClient) DeleteOpenIdAudienceProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenIdAudienceProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewOpenIdAudienceProtocolMapper(mapper *OpenIdAudienceProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewOpenIdAudienceProtocolMapper(ctx context.Context, mapper *OpenIdAudienceProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -88,13 +89,13 @@ func (keycloakClient *KeycloakClient) NewOpenIdAudienceProtocolMapper(mapper *Op return nil } -func (keycloakClient *KeycloakClient) UpdateOpenIdAudienceProtocolMapper(mapper *OpenIdAudienceProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateOpenIdAudienceProtocolMapper(ctx context.Context, mapper *OpenIdAudienceProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateOpenIdAudienceProtocolMapper(mapper *OpenIdAudienceProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateOpenIdAudienceProtocolMapper(ctx context.Context, mapper *OpenIdAudienceProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } @@ -111,7 +112,7 @@ func (keycloakClient *KeycloakClient) ValidateOpenIdAudienceProtocolMapper(mappe return fmt.Errorf("validation error: IncludedClientAudience and IncludedCustomAudience cannot both be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } @@ -123,7 +124,7 @@ func (keycloakClient *KeycloakClient) ValidateOpenIdAudienceProtocolMapper(mappe } if mapper.IncludedClientAudience != "" { - clients, err := keycloakClient.listGenericClients(mapper.RealmId) + clients, err := keycloakClient.listGenericClients(ctx, mapper.RealmId) if err != nil { return err } diff --git a/keycloak/openid_audience_resolve_protocol_mapper.go b/keycloak/openid_audience_resolve_protocol_mapper.go index 63c8efc89..e6848b83f 100644 --- a/keycloak/openid_audience_resolve_protocol_mapper.go +++ b/keycloak/openid_audience_resolve_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -32,10 +33,10 @@ func (protocolMapper *protocolMapper) convertToOpenIdAudienceResolveProtocolMapp }, nil } -func (keycloakClient *KeycloakClient) GetOpenIdAudienceResolveProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*OpenIdAudienceResolveProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetOpenIdAudienceResolveProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*OpenIdAudienceResolveProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -43,14 +44,14 @@ func (keycloakClient *KeycloakClient) GetOpenIdAudienceResolveProtocolMapper(rea return protocolMapper.convertToOpenIdAudienceResolveProtocolMapper(realmId, clientId, clientScopeId) } -func (keycloakClient *KeycloakClient) DeleteOpenIdAudienceResolveProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenIdAudienceResolveProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewOpenIdAudienceResolveProtocolMapper(mapper *OpenIdAudienceResolveProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewOpenIdAudienceResolveProtocolMapper(ctx context.Context, mapper *OpenIdAudienceResolveProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -60,18 +61,18 @@ func (keycloakClient *KeycloakClient) NewOpenIdAudienceResolveProtocolMapper(map return nil } -func (keycloakClient *KeycloakClient) UpdateOpenIdAudienceResolveProtocolMapper(mapper *OpenIdAudienceResolveProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateOpenIdAudienceResolveProtocolMapper(ctx context.Context, mapper *OpenIdAudienceResolveProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateOpenIdAudienceResolveProtocolMapper(mapper *OpenIdAudienceResolveProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateOpenIdAudienceResolveProtocolMapper(ctx context.Context, mapper *OpenIdAudienceResolveProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/openid_client.go b/keycloak/openid_client.go index 9e2b82123..f362b6503 100644 --- a/keycloak/openid_client.go +++ b/keycloak/openid_client.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "reflect" ) @@ -83,10 +84,10 @@ type OpenidAuthenticationFlowBindingOverrides struct { DirectGrantId string `json:"direct_grant"` } -func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountUserId(realmId, clientId string) (*User, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountUserId(ctx context.Context, realmId, clientId string) (*User, error) { var serviceAccountUser User - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/service-account-user", realmId, clientId), &serviceAccountUser, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/service-account-user", realmId, clientId), &serviceAccountUser, nil) if err != nil { return &serviceAccountUser, err } @@ -96,7 +97,7 @@ func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountUserId(realmI return &serviceAccountUser, nil } -func (keycloakClient *KeycloakClient) ValidateOpenidClient(client *OpenidClient) error { +func (keycloakClient *KeycloakClient) ValidateOpenidClient(ctx context.Context, client *OpenidClient) error { if client.BearerOnly && (client.StandardFlowEnabled || client.ImplicitFlowEnabled || client.DirectAccessGrantsEnabled || client.ServiceAccountsEnabled) { return fmt.Errorf("validation error: Keycloak cannot issue tokens for bearer-only clients; no oauth2 flows can be enabled for this client") } @@ -109,7 +110,7 @@ func (keycloakClient *KeycloakClient) ValidateOpenidClient(client *OpenidClient) return fmt.Errorf("validation error: service accounts (client credentials flow) cannot be enabled on public clients") } - serverInfo, err := keycloakClient.GetServerInfo() + serverInfo, err := keycloakClient.GetServerInfo(ctx) if err != nil { return err } @@ -121,10 +122,10 @@ func (keycloakClient *KeycloakClient) ValidateOpenidClient(client *OpenidClient) return nil } -func (keycloakClient *KeycloakClient) NewOpenidClient(client *OpenidClient) error { +func (keycloakClient *KeycloakClient) NewOpenidClient(ctx context.Context, client *OpenidClient) error { client.Protocol = "openid-connect" - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/clients", client.RealmId), client) + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients", client.RealmId), client) if err != nil { return err } @@ -133,11 +134,11 @@ func (keycloakClient *KeycloakClient) NewOpenidClient(client *OpenidClient) erro if authorizationSettings := client.AuthorizationSettings; authorizationSettings != nil { if !(*authorizationSettings).KeepDefaults { - resource, err := keycloakClient.GetOpenidClientAuthorizationResourceByName(client.RealmId, client.Id, "default") + resource, err := keycloakClient.GetOpenidClientAuthorizationResourceByName(ctx, client.RealmId, client.Id, "default") if err != nil { return err } - err = keycloakClient.DeleteOpenidClientAuthorizationResource(resource.RealmId, resource.ResourceServerId, resource.Id) + err = keycloakClient.DeleteOpenidClientAuthorizationResource(ctx, resource.RealmId, resource.ResourceServerId, resource.Id) if err != nil { return err } @@ -147,11 +148,11 @@ func (keycloakClient *KeycloakClient) NewOpenidClient(client *OpenidClient) erro return nil } -func (keycloakClient *KeycloakClient) GetOpenidClients(realmId string, withSecrets bool) ([]*OpenidClient, error) { +func (keycloakClient *KeycloakClient) GetOpenidClients(ctx context.Context, realmId string, withSecrets bool) ([]*OpenidClient, error) { var clients []*OpenidClient var clientSecret OpenidClientSecret - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients", realmId), &clients, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients", realmId), &clients, nil) if err != nil { return nil, err } @@ -162,7 +163,7 @@ func (keycloakClient *KeycloakClient) GetOpenidClients(realmId string, withSecre continue } - err = keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/client-secret", realmId, client.Id), &clientSecret, nil) + err = keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/client-secret", realmId, client.Id), &clientSecret, nil) if err != nil { return nil, err } @@ -173,16 +174,16 @@ func (keycloakClient *KeycloakClient) GetOpenidClients(realmId string, withSecre return clients, nil } -func (keycloakClient *KeycloakClient) GetOpenidClient(realmId, id string) (*OpenidClient, error) { +func (keycloakClient *KeycloakClient) GetOpenidClient(ctx context.Context, realmId, id string) (*OpenidClient, error) { var client OpenidClient var clientSecret OpenidClientSecret - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s", realmId, id), &client, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s", realmId, id), &client, nil) if err != nil { return nil, err } - err = keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/client-secret", realmId, id), &clientSecret, nil) + err = keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/client-secret", realmId, id), &clientSecret, nil) if err != nil { return nil, err } @@ -193,7 +194,7 @@ func (keycloakClient *KeycloakClient) GetOpenidClient(realmId, id string) (*Open return &client, nil } -func (keycloakClient *KeycloakClient) GetOpenidClientByClientId(realmId, clientId string) (*OpenidClient, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientByClientId(ctx context.Context, realmId, clientId string) (*OpenidClient, error) { var clients []OpenidClient var clientSecret OpenidClientSecret @@ -201,7 +202,7 @@ func (keycloakClient *KeycloakClient) GetOpenidClientByClientId(realmId, clientI "clientId": clientId, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients", realmId), &clients, params) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients", realmId), &clients, params) if err != nil { return nil, err } @@ -212,7 +213,7 @@ func (keycloakClient *KeycloakClient) GetOpenidClientByClientId(realmId, clientI client := clients[0] - err = keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/client-secret", realmId, client.Id), &clientSecret, nil) + err = keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/client-secret", realmId, client.Id), &clientSecret, nil) if err != nil { return nil, err } @@ -223,20 +224,20 @@ func (keycloakClient *KeycloakClient) GetOpenidClientByClientId(realmId, clientI return &client, nil } -func (keycloakClient *KeycloakClient) UpdateOpenidClient(client *OpenidClient) error { +func (keycloakClient *KeycloakClient) UpdateOpenidClient(ctx context.Context, client *OpenidClient) error { client.Protocol = "openid-connect" - return keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s", client.RealmId, client.Id), client) + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s", client.RealmId, client.Id), client) } -func (keycloakClient *KeycloakClient) DeleteOpenidClient(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteOpenidClient(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s", realmId, id), nil) } -func (keycloakClient *KeycloakClient) getOpenidClientScopes(realmId, clientId, t string) ([]*OpenidClientScope, error) { +func (keycloakClient *KeycloakClient) getOpenidClientScopes(ctx context.Context, realmId, clientId, t string) ([]*OpenidClientScope, error) { var scopes []*OpenidClientScope - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/%s-client-scopes", realmId, clientId, t), &scopes, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/%s-client-scopes", realmId, clientId, t), &scopes, nil) if err != nil && ErrorIs404(err) { return nil, fmt.Errorf("validation error: client with id %s does not exist", clientId) } else if err != nil { @@ -246,18 +247,18 @@ func (keycloakClient *KeycloakClient) getOpenidClientScopes(realmId, clientId, t return scopes, nil } -func (keycloakClient *KeycloakClient) GetOpenidClientDefaultScopes(realmId, clientId string) ([]*OpenidClientScope, error) { - return keycloakClient.getOpenidClientScopes(realmId, clientId, "default") +func (keycloakClient *KeycloakClient) GetOpenidClientDefaultScopes(ctx context.Context, realmId, clientId string) ([]*OpenidClientScope, error) { + return keycloakClient.getOpenidClientScopes(ctx, realmId, clientId, "default") } -func (keycloakClient *KeycloakClient) GetOpenidClientOptionalScopes(realmId, clientId string) ([]*OpenidClientScope, error) { - return keycloakClient.getOpenidClientScopes(realmId, clientId, "optional") +func (keycloakClient *KeycloakClient) GetOpenidClientOptionalScopes(ctx context.Context, realmId, clientId string) ([]*OpenidClientScope, error) { + return keycloakClient.getOpenidClientScopes(ctx, realmId, clientId, "optional") } -func (keycloakClient *KeycloakClient) getRealmClientScopes(realmId, t string) ([]*OpenidClientScope, error) { +func (keycloakClient *KeycloakClient) getRealmClientScopes(ctx context.Context, realmId, t string) ([]*OpenidClientScope, error) { var scopes []*OpenidClientScope - err := keycloakClient.get(fmt.Sprintf("/realms/%s/default-%s-client-scopes", realmId, t), &scopes, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/default-%s-client-scopes", realmId, t), &scopes, nil) if err != nil { return nil, err } @@ -265,16 +266,16 @@ func (keycloakClient *KeycloakClient) getRealmClientScopes(realmId, t string) ([ return scopes, nil } -func (keycloakClient *KeycloakClient) GetRealmDefaultClientScopes(realmId string) ([]*OpenidClientScope, error) { - return keycloakClient.getRealmClientScopes(realmId, "default") +func (keycloakClient *KeycloakClient) GetRealmDefaultClientScopes(ctx context.Context, realmId string) ([]*OpenidClientScope, error) { + return keycloakClient.getRealmClientScopes(ctx, realmId, "default") } -func (keycloakClient *KeycloakClient) GetRealmOptionalClientScopes(realmId string) ([]*OpenidClientScope, error) { - return keycloakClient.getRealmClientScopes(realmId, "optional") +func (keycloakClient *KeycloakClient) GetRealmOptionalClientScopes(ctx context.Context, realmId string) ([]*OpenidClientScope, error) { + return keycloakClient.getRealmClientScopes(ctx, realmId, "optional") } -func (keycloakClient *KeycloakClient) attachOpenidClientScopes(realmId, clientId, t string, scopeNames []string) error { - openidClient, err := keycloakClient.GetOpenidClient(realmId, clientId) +func (keycloakClient *KeycloakClient) attachOpenidClientScopes(ctx context.Context, realmId, clientId, t string, scopeNames []string) error { + openidClient, err := keycloakClient.GetOpenidClient(ctx, realmId, clientId) if err != nil && ErrorIs404(err) { return fmt.Errorf("validation error: client with id %s does not exist", clientId) } else if err != nil { @@ -285,7 +286,7 @@ func (keycloakClient *KeycloakClient) attachOpenidClientScopes(realmId, clientId return fmt.Errorf("validation error: client with id %s uses access type BEARER-ONLY which does not use scopes", clientId) } - allOpenidClientScopes, err := keycloakClient.ListOpenidClientScopesWithFilter(realmId, includeOpenidClientScopesMatchingNames(scopeNames)) + allOpenidClientScopes, err := keycloakClient.ListOpenidClientScopesWithFilter(ctx, realmId, includeOpenidClientScopesMatchingNames(scopeNames)) if err != nil { return err } @@ -294,14 +295,14 @@ func (keycloakClient *KeycloakClient) attachOpenidClientScopes(realmId, clientId var duplicateScopeAssignmentErrorMessage string switch t { case "optional": - attachedDefaultClientScopes, err := keycloakClient.GetOpenidClientDefaultScopes(realmId, clientId) + attachedDefaultClientScopes, err := keycloakClient.GetOpenidClientDefaultScopes(ctx, realmId, clientId) if err != nil { return err } attachedClientScopes = append(attachedClientScopes, attachedDefaultClientScopes...) duplicateScopeAssignmentErrorMessage = "validation error: scope %s is already attached to client as a default scope" case "default": - attachedOptionalClientScopes, err := keycloakClient.GetOpenidClientOptionalScopes(realmId, clientId) + attachedOptionalClientScopes, err := keycloakClient.GetOpenidClientOptionalScopes(ctx, realmId, clientId) if err != nil { return err } @@ -316,7 +317,7 @@ func (keycloakClient *KeycloakClient) attachOpenidClientScopes(realmId, clientId } } - err := keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/%s-client-scopes/%s", realmId, clientId, t, openidClientScope.Id), nil) + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/%s-client-scopes/%s", realmId, clientId, t, openidClientScope.Id), nil) if err != nil { return err } @@ -325,22 +326,22 @@ func (keycloakClient *KeycloakClient) attachOpenidClientScopes(realmId, clientId return nil } -func (keycloakClient *KeycloakClient) AttachOpenidClientDefaultScopes(realmId, clientId string, scopeNames []string) error { - return keycloakClient.attachOpenidClientScopes(realmId, clientId, "default", scopeNames) +func (keycloakClient *KeycloakClient) AttachOpenidClientDefaultScopes(ctx context.Context, realmId, clientId string, scopeNames []string) error { + return keycloakClient.attachOpenidClientScopes(ctx, realmId, clientId, "default", scopeNames) } -func (keycloakClient *KeycloakClient) AttachOpenidClientOptionalScopes(realmId, clientId string, scopeNames []string) error { - return keycloakClient.attachOpenidClientScopes(realmId, clientId, "optional", scopeNames) +func (keycloakClient *KeycloakClient) AttachOpenidClientOptionalScopes(ctx context.Context, realmId, clientId string, scopeNames []string) error { + return keycloakClient.attachOpenidClientScopes(ctx, realmId, clientId, "optional", scopeNames) } -func (keycloakClient *KeycloakClient) detachOpenidClientScopes(realmId, clientId, t string, scopeNames []string) error { - allOpenidClientScopes, err := keycloakClient.ListOpenidClientScopesWithFilter(realmId, includeOpenidClientScopesMatchingNames(scopeNames)) +func (keycloakClient *KeycloakClient) detachOpenidClientScopes(ctx context.Context, realmId, clientId, t string, scopeNames []string) error { + allOpenidClientScopes, err := keycloakClient.ListOpenidClientScopesWithFilter(ctx, realmId, includeOpenidClientScopesMatchingNames(scopeNames)) if err != nil { return err } for _, openidClientScope := range allOpenidClientScopes { - err := keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s/%s-client-scopes/%s", realmId, clientId, t, openidClientScope.Id), nil) + err := keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s/%s-client-scopes/%s", realmId, clientId, t, openidClientScope.Id), nil) if err != nil { return err } @@ -349,12 +350,12 @@ func (keycloakClient *KeycloakClient) detachOpenidClientScopes(realmId, clientId return nil } -func (keycloakClient *KeycloakClient) DetachOpenidClientDefaultScopes(realmId, clientId string, scopeNames []string) error { - return keycloakClient.detachOpenidClientScopes(realmId, clientId, "default", scopeNames) +func (keycloakClient *KeycloakClient) DetachOpenidClientDefaultScopes(ctx context.Context, realmId, clientId string, scopeNames []string) error { + return keycloakClient.detachOpenidClientScopes(ctx, realmId, clientId, "default", scopeNames) } -func (keycloakClient *KeycloakClient) DetachOpenidClientOptionalScopes(realmId, clientId string, scopeNames []string) error { - return keycloakClient.detachOpenidClientScopes(realmId, clientId, "optional", scopeNames) +func (keycloakClient *KeycloakClient) DetachOpenidClientOptionalScopes(ctx context.Context, realmId, clientId string, scopeNames []string) error { + return keycloakClient.detachOpenidClientScopes(ctx, realmId, clientId, "optional", scopeNames) } func (f *OpenidClientAttributes) UnmarshalJSON(data []byte) error { diff --git a/keycloak/openid_client_authorization_aggregate_policy.go b/keycloak/openid_client_authorization_aggregate_policy.go index e2acc7b77..22f7bd749 100644 --- a/keycloak/openid_client_authorization_aggregate_policy.go +++ b/keycloak/openid_client_authorization_aggregate_policy.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "encoding/json" "fmt" ) @@ -17,8 +18,8 @@ type OpenidClientAuthorizationAggregatePolicy struct { Description string `json:"description"` } -func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationAggregatePolicy(policy *OpenidClientAuthorizationAggregatePolicy) error { - body, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/aggregate", policy.RealmId, policy.ResourceServerId), policy) +func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationAggregatePolicy(ctx context.Context, policy *OpenidClientAuthorizationAggregatePolicy) error { + body, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/aggregate", policy.RealmId, policy.ResourceServerId), policy) if err != nil { return err } @@ -29,19 +30,19 @@ func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationAggregatePolic return nil } -func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationAggregatePolicy(policy *OpenidClientAuthorizationAggregatePolicy) error { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/aggregate/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) +func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationAggregatePolicy(ctx context.Context, policy *OpenidClientAuthorizationAggregatePolicy) error { + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/aggregate/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationAggregatePolicy(realmId, resourceServerId, policyId string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/aggregate/%s", realmId, resourceServerId, policyId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationAggregatePolicy(ctx context.Context, realmId, resourceServerId, policyId string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/aggregate/%s", realmId, resourceServerId, policyId), nil) } -func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationAggregatePolicy(realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationAggregatePolicy, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationAggregatePolicy(ctx context.Context, realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationAggregatePolicy, error) { policy := OpenidClientAuthorizationAggregatePolicy{ Id: policyId, @@ -49,13 +50,13 @@ func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationAggregatePolic RealmId: realmId, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/aggregate/%s", realmId, resourceServerId, policyId), &policy, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/aggregate/%s", realmId, resourceServerId, policyId), &policy, nil) if err != nil { return nil, err } var keycloakPolicies []map[string]interface{} - errTwo := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/%s/associatedPolicies", realmId, resourceServerId, policyId), &keycloakPolicies, nil) + errTwo := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/%s/associatedPolicies", realmId, resourceServerId, policyId), &keycloakPolicies, nil) if errTwo != nil { return nil, err } diff --git a/keycloak/openid_client_authorization_client_policy.go b/keycloak/openid_client_authorization_client_policy.go index 09b2c9842..23572e505 100644 --- a/keycloak/openid_client_authorization_client_policy.go +++ b/keycloak/openid_client_authorization_client_policy.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "encoding/json" "fmt" ) @@ -17,8 +18,8 @@ type OpenidClientAuthorizationClientPolicy struct { Description string `json:"description"` } -func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationClientPolicy(policy *OpenidClientAuthorizationClientPolicy) error { - body, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/client", policy.RealmId, policy.ResourceServerId), policy) +func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationClientPolicy(ctx context.Context, policy *OpenidClientAuthorizationClientPolicy) error { + body, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/client", policy.RealmId, policy.ResourceServerId), policy) if err != nil { return err } @@ -29,26 +30,26 @@ func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationClientPolicy(p return nil } -func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationClientPolicy(policy *OpenidClientAuthorizationClientPolicy) error { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/client/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) +func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationClientPolicy(ctx context.Context, policy *OpenidClientAuthorizationClientPolicy) error { + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/client/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationClientPolicy(realmId, resourceServerId, policyId string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/client/%s", realmId, resourceServerId, policyId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationClientPolicy(ctx context.Context, realmId, resourceServerId, policyId string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/client/%s", realmId, resourceServerId, policyId), nil) } -func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationClientPolicy(realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationClientPolicy, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationClientPolicy(ctx context.Context, realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationClientPolicy, error) { policy := OpenidClientAuthorizationClientPolicy{ Id: policyId, ResourceServerId: resourceServerId, RealmId: realmId, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/client/%s", realmId, resourceServerId, policyId), &policy, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/client/%s", realmId, resourceServerId, policyId), &policy, nil) if err != nil { return nil, err } diff --git a/keycloak/openid_client_authorization_group_policy.go b/keycloak/openid_client_authorization_group_policy.go index 2c9cc225a..fd6d4eae8 100644 --- a/keycloak/openid_client_authorization_group_policy.go +++ b/keycloak/openid_client_authorization_group_policy.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "encoding/json" "fmt" ) @@ -24,8 +25,8 @@ type OpenidClientAuthorizationGroup struct { ExtendChildren bool `json:"extendChildren,omitempty"` } -func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationGroupPolicy(policy *OpenidClientAuthorizationGroupPolicy) error { - body, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/group", policy.RealmId, policy.ResourceServerId), policy) +func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationGroupPolicy(ctx context.Context, policy *OpenidClientAuthorizationGroupPolicy) error { + body, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/group", policy.RealmId, policy.ResourceServerId), policy) if err != nil { return err } @@ -36,26 +37,26 @@ func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationGroupPolicy(po return nil } -func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationGroupPolicy(policy *OpenidClientAuthorizationGroupPolicy) error { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/group/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) +func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationGroupPolicy(ctx context.Context, policy *OpenidClientAuthorizationGroupPolicy) error { + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/group/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationGroupPolicy(realmId, resourceServerId, policyId string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/group/%s", realmId, resourceServerId, policyId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationGroupPolicy(ctx context.Context, realmId, resourceServerId, policyId string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/group/%s", realmId, resourceServerId, policyId), nil) } -func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationGroupPolicy(realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationGroupPolicy, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationGroupPolicy(ctx context.Context, realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationGroupPolicy, error) { policy := OpenidClientAuthorizationGroupPolicy{ Id: policyId, ResourceServerId: resourceServerId, RealmId: realmId, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/group/%s", realmId, resourceServerId, policyId), &policy, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/group/%s", realmId, resourceServerId, policyId), &policy, nil) if err != nil { return nil, err } diff --git a/keycloak/openid_client_authorization_js_policy.go b/keycloak/openid_client_authorization_js_policy.go index b874c4007..0ccd7584d 100644 --- a/keycloak/openid_client_authorization_js_policy.go +++ b/keycloak/openid_client_authorization_js_policy.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "encoding/json" "fmt" "strings" @@ -18,13 +19,13 @@ type OpenidClientAuthorizationJSPolicy struct { Description string `json:"description"` } -func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationJSPolicy(policy *OpenidClientAuthorizationJSPolicy) error { +func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationJSPolicy(ctx context.Context, policy *OpenidClientAuthorizationJSPolicy) error { var body []byte var err error if strings.HasSuffix(policy.Code, ".js") { - body, _, err = keycloakClient.post(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/%s", policy.RealmId, policy.ResourceServerId, policy.Code), policy) + body, _, err = keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/%s", policy.RealmId, policy.ResourceServerId, policy.Code), policy) } else { - body, _, err = keycloakClient.post(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/js", policy.RealmId, policy.ResourceServerId), policy) + body, _, err = keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/js", policy.RealmId, policy.ResourceServerId), policy) } if err != nil { return err @@ -36,26 +37,26 @@ func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationJSPolicy(polic return nil } -func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationJSPolicy(policy *OpenidClientAuthorizationJSPolicy) error { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/js/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) +func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationJSPolicy(ctx context.Context, policy *OpenidClientAuthorizationJSPolicy) error { + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/js/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationJSPolicy(realmId, resourceServerId, policyId string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/js/%s", realmId, resourceServerId, policyId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationJSPolicy(ctx context.Context, realmId, resourceServerId, policyId string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/js/%s", realmId, resourceServerId, policyId), nil) } -func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationJSPolicy(realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationJSPolicy, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationJSPolicy(ctx context.Context, realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationJSPolicy, error) { policy := OpenidClientAuthorizationJSPolicy{ Id: policyId, ResourceServerId: resourceServerId, RealmId: realmId, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/js/%s", realmId, resourceServerId, policyId), &policy, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/js/%s", realmId, resourceServerId, policyId), &policy, nil) if err != nil { return nil, err } diff --git a/keycloak/openid_client_authorization_permission.go b/keycloak/openid_client_authorization_permission.go index a74bf6f8a..aadbed38e 100644 --- a/keycloak/openid_client_authorization_permission.go +++ b/keycloak/openid_client_authorization_permission.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "encoding/json" "fmt" ) @@ -18,7 +19,7 @@ type OpenidClientAuthorizationPermission struct { Type string `json:"type"` } -func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationPermission(realm, resourceServerId, id string) (*OpenidClientAuthorizationPermission, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationPermission(ctx context.Context, realm, resourceServerId, id string) (*OpenidClientAuthorizationPermission, error) { permission := OpenidClientAuthorizationPermission{ RealmId: realm, ResourceServerId: resourceServerId, @@ -29,22 +30,22 @@ func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationPermission(rea resources := []OpenidClientAuthorizationResource{} scopes := []OpenidClientAuthorizationScope{} - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/permission/%s", realm, resourceServerId, id), &permission, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/permission/%s", realm, resourceServerId, id), &permission, nil) if err != nil { return nil, err } - err = keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/%s/associatedPolicies", realm, resourceServerId, id), &policies, nil) + err = keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/%s/associatedPolicies", realm, resourceServerId, id), &policies, nil) if err != nil { return nil, err } - err = keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/permission/%s/resources", realm, resourceServerId, id), &resources, nil) + err = keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/permission/%s/resources", realm, resourceServerId, id), &resources, nil) if err != nil { return nil, err } - err = keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/permission/%s/scopes", realm, resourceServerId, id), &scopes, nil) + err = keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/permission/%s/scopes", realm, resourceServerId, id), &scopes, nil) if err != nil { return nil, err } @@ -64,8 +65,8 @@ func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationPermission(rea return &permission, nil } -func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationPermission(permission *OpenidClientAuthorizationPermission) error { - body, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/permission/%s", permission.RealmId, permission.ResourceServerId, permission.Type), permission) +func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationPermission(ctx context.Context, permission *OpenidClientAuthorizationPermission) error { + body, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/permission/%s", permission.RealmId, permission.ResourceServerId, permission.Type), permission) if err != nil { return err } @@ -76,14 +77,14 @@ func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationPermission(per return nil } -func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationPermission(permission *OpenidClientAuthorizationPermission) error { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/permission/%s/%s", permission.RealmId, permission.ResourceServerId, permission.Type, permission.Id), permission) +func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationPermission(ctx context.Context, permission *OpenidClientAuthorizationPermission) error { + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/permission/%s/%s", permission.RealmId, permission.ResourceServerId, permission.Type, permission.Id), permission) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationPermission(realmId, resourceServerId, permissionId string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/permission/%s", realmId, resourceServerId, permissionId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationPermission(ctx context.Context, realmId, resourceServerId, permissionId string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/permission/%s", realmId, resourceServerId, permissionId), nil) } diff --git a/keycloak/openid_client_authorization_policy.go b/keycloak/openid_client_authorization_policy.go index 9f442c0d1..5724dc27b 100644 --- a/keycloak/openid_client_authorization_policy.go +++ b/keycloak/openid_client_authorization_policy.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -18,10 +19,10 @@ type OpenidClientAuthorizationPolicy struct { Type string `json:"type"` } -func (keycloakClient *KeycloakClient) GetClientAuthorizationPolicyByName(realmId, resourceServerId, name string) (*OpenidClientAuthorizationPolicy, error) { +func (keycloakClient *KeycloakClient) GetClientAuthorizationPolicyByName(ctx context.Context, realmId, resourceServerId, name string) (*OpenidClientAuthorizationPolicy, error) { policies := []OpenidClientAuthorizationPolicy{} params := map[string]string{"name": name} - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy", realmId, resourceServerId), &policies, params) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy", realmId, resourceServerId), &policies, params) if err != nil { return nil, err } diff --git a/keycloak/openid_client_authorization_resource.go b/keycloak/openid_client_authorization_resource.go index d1b0de6b2..b1acefa42 100644 --- a/keycloak/openid_client_authorization_resource.go +++ b/keycloak/openid_client_authorization_resource.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "encoding/json" "fmt" ) @@ -19,8 +20,8 @@ type OpenidClientAuthorizationResource struct { Attributes map[string][]string `json:"attributes"` } -func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationResource(resource *OpenidClientAuthorizationResource) error { - body, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/resource", resource.RealmId, resource.ResourceServerId), resource) +func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationResource(ctx context.Context, resource *OpenidClientAuthorizationResource) error { + body, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/resource", resource.RealmId, resource.ResourceServerId), resource) if err != nil { return err } @@ -31,22 +32,22 @@ func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationResource(resou return nil } -func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationResource(realm, resourceServerId, resourceId string) (*OpenidClientAuthorizationResource, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationResource(ctx context.Context, realm, resourceServerId, resourceId string) (*OpenidClientAuthorizationResource, error) { resource := OpenidClientAuthorizationResource{ RealmId: realm, ResourceServerId: resourceServerId, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/resource/%s", realm, resourceServerId, resourceId), &resource, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/resource/%s", realm, resourceServerId, resourceId), &resource, nil) if err != nil { return nil, err } return &resource, nil } -func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationResourceByName(realmId, resourceServerId, name string) (*OpenidClientAuthorizationResource, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationResourceByName(ctx context.Context, realmId, resourceServerId, name string) (*OpenidClientAuthorizationResource, error) { resources := []OpenidClientAuthorizationResource{} params := map[string]string{"name": name} - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/resource", realmId, resourceServerId), &resources, params) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/resource", realmId, resourceServerId), &resources, params) if err != nil { return nil, err } @@ -57,14 +58,14 @@ func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationResourceByName return &resource, nil } -func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationResource(resource *OpenidClientAuthorizationResource) error { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/resource/%s", resource.RealmId, resource.ResourceServerId, resource.Id), resource) +func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationResource(ctx context.Context, resource *OpenidClientAuthorizationResource) error { + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/resource/%s", resource.RealmId, resource.ResourceServerId, resource.Id), resource) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationResource(realmId, clientId, resourceId string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/resource/%s", realmId, clientId, resourceId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationResource(ctx context.Context, realmId, clientId, resourceId string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/resource/%s", realmId, clientId, resourceId), nil) } diff --git a/keycloak/openid_client_authorization_role_policy.go b/keycloak/openid_client_authorization_role_policy.go index de04d5a46..d57cdf3c8 100644 --- a/keycloak/openid_client_authorization_role_policy.go +++ b/keycloak/openid_client_authorization_role_policy.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "encoding/json" "fmt" ) @@ -22,8 +23,8 @@ type OpenidClientAuthorizationRole struct { Required bool `json:"required"` } -func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationRolePolicy(policy *OpenidClientAuthorizationRolePolicy) error { - body, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/role", policy.RealmId, policy.ResourceServerId), policy) +func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationRolePolicy(ctx context.Context, policy *OpenidClientAuthorizationRolePolicy) error { + body, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/role", policy.RealmId, policy.ResourceServerId), policy) if err != nil { return err } @@ -34,26 +35,26 @@ func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationRolePolicy(pol return nil } -func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationRolePolicy(policy *OpenidClientAuthorizationRolePolicy) error { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/role/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) +func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationRolePolicy(ctx context.Context, policy *OpenidClientAuthorizationRolePolicy) error { + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/role/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationRolePolicy(realmId, resourceServerId, policyId string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/role/%s", realmId, resourceServerId, policyId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationRolePolicy(ctx context.Context, realmId, resourceServerId, policyId string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/role/%s", realmId, resourceServerId, policyId), nil) } -func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationRolePolicy(realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationRolePolicy, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationRolePolicy(ctx context.Context, realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationRolePolicy, error) { policy := OpenidClientAuthorizationRolePolicy{ Id: policyId, ResourceServerId: resourceServerId, RealmId: realmId, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/role/%s", realmId, resourceServerId, policyId), &policy, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/role/%s", realmId, resourceServerId, policyId), &policy, nil) if err != nil { return nil, err } diff --git a/keycloak/openid_client_authorization_scope.go b/keycloak/openid_client_authorization_scope.go index 2490f70ef..1578c1d25 100644 --- a/keycloak/openid_client_authorization_scope.go +++ b/keycloak/openid_client_authorization_scope.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "encoding/json" "fmt" ) @@ -14,8 +15,8 @@ type OpenidClientAuthorizationScope struct { IconUri string `json:"iconUri"` } -func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationScope(scope *OpenidClientAuthorizationScope) error { - body, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/scope", scope.RealmId, scope.ResourceServerId), scope) +func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationScope(ctx context.Context, scope *OpenidClientAuthorizationScope) error { + body, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/scope", scope.RealmId, scope.ResourceServerId), scope) if err != nil { return err } @@ -26,26 +27,26 @@ func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationScope(scope *O return nil } -func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationScope(realm, resourceServerId, scopeId string) (*OpenidClientAuthorizationScope, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationScope(ctx context.Context, realm, resourceServerId, scopeId string) (*OpenidClientAuthorizationScope, error) { scope := OpenidClientAuthorizationScope{ RealmId: realm, ResourceServerId: resourceServerId, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/scope/%s", realm, resourceServerId, scopeId), &scope, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/scope/%s", realm, resourceServerId, scopeId), &scope, nil) if err != nil { return nil, err } return &scope, nil } -func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationScope(scope *OpenidClientAuthorizationScope) error { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/scope/%s", scope.RealmId, scope.ResourceServerId, scope.Id), scope) +func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationScope(ctx context.Context, scope *OpenidClientAuthorizationScope) error { + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/scope/%s", scope.RealmId, scope.ResourceServerId, scope.Id), scope) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationScope(realmId, resourceServerId, scopeId string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/scope/%s", realmId, resourceServerId, scopeId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationScope(ctx context.Context, realmId, resourceServerId, scopeId string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/scope/%s", realmId, resourceServerId, scopeId), nil) } diff --git a/keycloak/openid_client_authorization_time_policy.go b/keycloak/openid_client_authorization_time_policy.go index 965dd556c..e69545e5d 100644 --- a/keycloak/openid_client_authorization_time_policy.go +++ b/keycloak/openid_client_authorization_time_policy.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "encoding/json" "fmt" ) @@ -28,8 +29,8 @@ type OpenidClientAuthorizationTimePolicy struct { Description string `json:"description"` } -func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationTimePolicy(policy *OpenidClientAuthorizationTimePolicy) error { - body, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/time", policy.RealmId, policy.ResourceServerId), policy) +func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationTimePolicy(ctx context.Context, policy *OpenidClientAuthorizationTimePolicy) error { + body, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/time", policy.RealmId, policy.ResourceServerId), policy) if err != nil { return err } @@ -40,26 +41,26 @@ func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationTimePolicy(pol return nil } -func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationTimePolicy(policy *OpenidClientAuthorizationTimePolicy) error { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/time/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) +func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationTimePolicy(ctx context.Context, policy *OpenidClientAuthorizationTimePolicy) error { + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/time/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationTimePolicy(realmId, resourceServerId, policyId string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/time/%s", realmId, resourceServerId, policyId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationTimePolicy(ctx context.Context, realmId, resourceServerId, policyId string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/time/%s", realmId, resourceServerId, policyId), nil) } -func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationTimePolicy(realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationTimePolicy, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationTimePolicy(ctx context.Context, realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationTimePolicy, error) { policy := OpenidClientAuthorizationTimePolicy{ Id: policyId, ResourceServerId: resourceServerId, RealmId: realmId, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/time/%s", realmId, resourceServerId, policyId), &policy, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/time/%s", realmId, resourceServerId, policyId), &policy, nil) if err != nil { return nil, err } diff --git a/keycloak/openid_client_authorization_user_policy.go b/keycloak/openid_client_authorization_user_policy.go index 7fe44d87a..a14f536ea 100644 --- a/keycloak/openid_client_authorization_user_policy.go +++ b/keycloak/openid_client_authorization_user_policy.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "encoding/json" "fmt" ) @@ -17,8 +18,8 @@ type OpenidClientAuthorizationUserPolicy struct { Description string `json:"description"` } -func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationUserPolicy(policy *OpenidClientAuthorizationUserPolicy) error { - body, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/user", policy.RealmId, policy.ResourceServerId), policy) +func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationUserPolicy(ctx context.Context, policy *OpenidClientAuthorizationUserPolicy) error { + body, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/user", policy.RealmId, policy.ResourceServerId), policy) if err != nil { return err } @@ -29,26 +30,26 @@ func (keycloakClient *KeycloakClient) NewOpenidClientAuthorizationUserPolicy(pol return nil } -func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationUserPolicy(policy *OpenidClientAuthorizationUserPolicy) error { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/user/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) +func (keycloakClient *KeycloakClient) UpdateOpenidClientAuthorizationUserPolicy(ctx context.Context, policy *OpenidClientAuthorizationUserPolicy) error { + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/user/%s", policy.RealmId, policy.ResourceServerId, policy.Id), policy) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationUserPolicy(realmId, resourceServerId, policyId string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/user/%s", realmId, resourceServerId, policyId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenidClientAuthorizationUserPolicy(ctx context.Context, realmId, resourceServerId, policyId string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/user/%s", realmId, resourceServerId, policyId), nil) } -func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationUserPolicy(realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationUserPolicy, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientAuthorizationUserPolicy(ctx context.Context, realmId, resourceServerId, policyId string) (*OpenidClientAuthorizationUserPolicy, error) { policy := OpenidClientAuthorizationUserPolicy{ Id: policyId, ResourceServerId: resourceServerId, RealmId: realmId, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/user/%s", realmId, resourceServerId, policyId), &policy, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/authz/resource-server/policy/user/%s", realmId, resourceServerId, policyId), &policy, nil) if err != nil { return nil, err } diff --git a/keycloak/openid_client_permissions.go b/keycloak/openid_client_permissions.go index 4e806d815..e245e1ffb 100644 --- a/keycloak/openid_client_permissions.go +++ b/keycloak/openid_client_permissions.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -16,20 +17,20 @@ type OpenidClientPermissions struct { ScopePermissions map[string]string `json:"scopePermissions"` } -func (keycloakClient *KeycloakClient) EnableOpenidClientPermissions(realmId, clientId string) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/management/permissions", realmId, clientId), OpenidClientPermissionsInput{Enabled: true}) +func (keycloakClient *KeycloakClient) EnableOpenidClientPermissions(ctx context.Context, realmId, clientId string) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/management/permissions", realmId, clientId), OpenidClientPermissionsInput{Enabled: true}) } -func (keycloakClient *KeycloakClient) DisableOpenidClientPermissions(realmId, clientId string) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/management/permissions", realmId, clientId), OpenidClientPermissionsInput{Enabled: false}) +func (keycloakClient *KeycloakClient) DisableOpenidClientPermissions(ctx context.Context, realmId, clientId string) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/management/permissions", realmId, clientId), OpenidClientPermissionsInput{Enabled: false}) } -func (keycloakClient *KeycloakClient) GetOpenidClientPermissions(realmId, clientId string) (*OpenidClientPermissions, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientPermissions(ctx context.Context, realmId, clientId string) (*OpenidClientPermissions, error) { var openidClientPermissions OpenidClientPermissions openidClientPermissions.RealmId = realmId openidClientPermissions.ClientId = clientId - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/management/permissions", realmId, clientId), &openidClientPermissions, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/management/permissions", realmId, clientId), &openidClientPermissions, nil) if err != nil { return nil, err } diff --git a/keycloak/openid_client_scope.go b/keycloak/openid_client_scope.go index 852893513..0dbe6c426 100644 --- a/keycloak/openid_client_scope.go +++ b/keycloak/openid_client_scope.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -20,10 +21,10 @@ type OpenidClientScope struct { type OpenidClientScopeFilterFunc func(*OpenidClientScope) bool -func (keycloakClient *KeycloakClient) NewOpenidClientScope(clientScope *OpenidClientScope) error { +func (keycloakClient *KeycloakClient) NewOpenidClientScope(ctx context.Context, clientScope *OpenidClientScope) error { clientScope.Protocol = "openid-connect" - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/client-scopes", clientScope.RealmId), clientScope) + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/client-scopes", clientScope.RealmId), clientScope) if err != nil { return err } @@ -33,10 +34,10 @@ func (keycloakClient *KeycloakClient) NewOpenidClientScope(clientScope *OpenidCl return nil } -func (keycloakClient *KeycloakClient) GetOpenidClientScope(realmId, id string) (*OpenidClientScope, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientScope(ctx context.Context, realmId, id string) (*OpenidClientScope, error) { var clientScope OpenidClientScope - err := keycloakClient.get(fmt.Sprintf("/realms/%s/client-scopes/%s", realmId, id), &clientScope, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/client-scopes/%s", realmId, id), &clientScope, nil) if err != nil { return nil, err } @@ -46,10 +47,10 @@ func (keycloakClient *KeycloakClient) GetOpenidClientScope(realmId, id string) ( return &clientScope, nil } -func (keycloakClient *KeycloakClient) GetOpenidDefaultClientScopes(realmId, clientId string) (*[]OpenidClientScope, error) { +func (keycloakClient *KeycloakClient) GetOpenidDefaultClientScopes(ctx context.Context, realmId, clientId string) (*[]OpenidClientScope, error) { var clientScopes []OpenidClientScope - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/default-client-scopes", realmId, clientId), &clientScopes, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/default-client-scopes", realmId, clientId), &clientScopes, nil) if err != nil { return nil, err } @@ -61,10 +62,10 @@ func (keycloakClient *KeycloakClient) GetOpenidDefaultClientScopes(realmId, clie return &clientScopes, nil } -func (keycloakClient *KeycloakClient) GetOpenidOptionalClientScopes(realmId, clientId string) (*[]OpenidClientScope, error) { +func (keycloakClient *KeycloakClient) GetOpenidOptionalClientScopes(ctx context.Context, realmId, clientId string) (*[]OpenidClientScope, error) { var clientScopes []OpenidClientScope - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/optional-client-scopes", realmId, clientId), &clientScopes, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/optional-client-scopes", realmId, clientId), &clientScopes, nil) if err != nil { return nil, err } @@ -76,21 +77,21 @@ func (keycloakClient *KeycloakClient) GetOpenidOptionalClientScopes(realmId, cli return &clientScopes, nil } -func (keycloakClient *KeycloakClient) UpdateOpenidClientScope(clientScope *OpenidClientScope) error { +func (keycloakClient *KeycloakClient) UpdateOpenidClientScope(ctx context.Context, clientScope *OpenidClientScope) error { clientScope.Protocol = "openid-connect" - return keycloakClient.put(fmt.Sprintf("/realms/%s/client-scopes/%s", clientScope.RealmId, clientScope.Id), clientScope) + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/client-scopes/%s", clientScope.RealmId, clientScope.Id), clientScope) } -func (keycloakClient *KeycloakClient) DeleteOpenidClientScope(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/client-scopes/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteOpenidClientScope(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/client-scopes/%s", realmId, id), nil) } -func (keycloakClient *KeycloakClient) ListOpenidClientScopesWithFilter(realmId string, filter OpenidClientScopeFilterFunc) ([]*OpenidClientScope, error) { +func (keycloakClient *KeycloakClient) ListOpenidClientScopesWithFilter(ctx context.Context, realmId string, filter OpenidClientScopeFilterFunc) ([]*OpenidClientScope, error) { var clientScopes []OpenidClientScope var openidClientScopes []*OpenidClientScope - err := keycloakClient.get(fmt.Sprintf("/realms/%s/client-scopes", realmId), &clientScopes, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/client-scopes", realmId), &clientScopes, nil) if err != nil { return nil, err } diff --git a/keycloak/openid_client_service_account_realm_role.go b/keycloak/openid_client_service_account_realm_role.go index 78031c610..f99aba084 100644 --- a/keycloak/openid_client_service_account_realm_role.go +++ b/keycloak/openid_client_service_account_realm_role.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -12,10 +13,10 @@ type OpenidClientServiceAccountRealmRole struct { Description string `json:"description"` } -func (keycloakClient *KeycloakClient) NewOpenidClientServiceAccountRealmRole(serviceAccountRole *OpenidClientServiceAccountRealmRole) error { +func (keycloakClient *KeycloakClient) NewOpenidClientServiceAccountRealmRole(ctx context.Context, serviceAccountRole *OpenidClientServiceAccountRealmRole) error { serviceAccountRoles := []OpenidClientServiceAccountRealmRole{*serviceAccountRole} - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm", serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId), serviceAccountRoles) + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm", serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId), serviceAccountRoles) if err != nil { return err @@ -23,20 +24,20 @@ func (keycloakClient *KeycloakClient) NewOpenidClientServiceAccountRealmRole(ser return nil } -func (keycloakClient *KeycloakClient) DeleteOpenidClientServiceAccountRealmRole(realm, serviceAccountUserId, roleId string) error { - serviceAccountRole, err := keycloakClient.GetOpenidClientServiceAccountRealmRole(realm, serviceAccountUserId, roleId) +func (keycloakClient *KeycloakClient) DeleteOpenidClientServiceAccountRealmRole(ctx context.Context, realm, serviceAccountUserId, roleId string) error { + serviceAccountRole, err := keycloakClient.GetOpenidClientServiceAccountRealmRole(ctx, realm, serviceAccountUserId, roleId) if err != nil { return err } serviceAccountRoles := []OpenidClientServiceAccountRealmRole{*serviceAccountRole} - err = keycloakClient.delete(fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm", realm, serviceAccountUserId), &serviceAccountRoles) + err = keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm", realm, serviceAccountUserId), &serviceAccountRoles) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountRealmRole(realm, serviceAccountUserId, roleId string) (*OpenidClientServiceAccountRealmRole, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountRealmRole(ctx context.Context, realm, serviceAccountUserId, roleId string) (*OpenidClientServiceAccountRealmRole, error) { serviceAccountRoles := []OpenidClientServiceAccountRealmRole{ { Id: roleId, @@ -44,7 +45,7 @@ func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountRealmRole(rea ServiceAccountUserId: serviceAccountUserId, }, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm/composite", realm, serviceAccountUserId), &serviceAccountRoles, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm/composite", realm, serviceAccountUserId), &serviceAccountRoles, nil) if err != nil { return nil, err } diff --git a/keycloak/openid_client_service_account_role.go b/keycloak/openid_client_service_account_role.go index 29cc9aa37..a2b18bb85 100644 --- a/keycloak/openid_client_service_account_role.go +++ b/keycloak/openid_client_service_account_role.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -15,29 +16,29 @@ type OpenidClientServiceAccountRole struct { Description string `json:"description"` } -func (keycloakClient *KeycloakClient) NewOpenidClientServiceAccountRole(serviceAccountRole *OpenidClientServiceAccountRole) error { +func (keycloakClient *KeycloakClient) NewOpenidClientServiceAccountRole(ctx context.Context, serviceAccountRole *OpenidClientServiceAccountRole) error { serviceAccountRoles := []OpenidClientServiceAccountRole{*serviceAccountRole} - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.ContainerId), serviceAccountRoles) + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.ContainerId), serviceAccountRoles) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) DeleteOpenidClientServiceAccountRole(realm, serviceAccountUserId, clientId, roleId string) error { - serviceAccountRole, err := keycloakClient.GetOpenidClientServiceAccountRole(realm, serviceAccountUserId, clientId, roleId) +func (keycloakClient *KeycloakClient) DeleteOpenidClientServiceAccountRole(ctx context.Context, realm, serviceAccountUserId, clientId, roleId string) error { + serviceAccountRole, err := keycloakClient.GetOpenidClientServiceAccountRole(ctx, realm, serviceAccountUserId, clientId, roleId) if err != nil { return err } serviceAccountRoles := []OpenidClientServiceAccountRole{*serviceAccountRole} - err = keycloakClient.delete(fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", realm, serviceAccountUserId, clientId), &serviceAccountRoles) + err = keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", realm, serviceAccountUserId, clientId), &serviceAccountRoles) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountRole(realm, serviceAccountUserId, clientId, roleId string) (*OpenidClientServiceAccountRole, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountRole(ctx context.Context, realm, serviceAccountUserId, clientId, roleId string) (*OpenidClientServiceAccountRole, error) { serviceAccountRoles := []OpenidClientServiceAccountRole{ { Id: roleId, @@ -46,7 +47,7 @@ func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountRole(realm, s ServiceAccountUserId: serviceAccountUserId, }, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", realm, serviceAccountUserId, clientId), &serviceAccountRoles, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", realm, serviceAccountUserId, clientId), &serviceAccountRoles, nil) if err != nil { return nil, err } @@ -60,10 +61,10 @@ func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountRole(realm, s return &OpenidClientServiceAccountRole{}, nil } -func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountRealmRoles(realm, serviceAccountUserId string) ([]*OpenidClientServiceAccountRole, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountRealmRoles(ctx context.Context, realm, serviceAccountUserId string) ([]*OpenidClientServiceAccountRole, error) { var serviceAccountRoles []*OpenidClientServiceAccountRole - err := keycloakClient.get(fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm/composite", realm, serviceAccountUserId), &serviceAccountRoles, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm/composite", realm, serviceAccountUserId), &serviceAccountRoles, nil) if err != nil { return nil, err } @@ -76,10 +77,10 @@ func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountRealmRoles(re return serviceAccountRoles, nil } -func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountClientRoles(realm, serviceAccountUserId, clientId string) ([]*OpenidClientServiceAccountRole, error) { +func (keycloakClient *KeycloakClient) GetOpenidClientServiceAccountClientRoles(ctx context.Context, realm, serviceAccountUserId, clientId string) ([]*OpenidClientServiceAccountRole, error) { var serviceAccountRoles []*OpenidClientServiceAccountRole - err := keycloakClient.get(fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", realm, serviceAccountUserId, clientId), &serviceAccountRoles, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", realm, serviceAccountUserId, clientId), &serviceAccountRoles, nil) if err != nil { return nil, err } diff --git a/keycloak/openid_full_name_protocol_mapper.go b/keycloak/openid_full_name_protocol_mapper.go index 1153d55d9..55c00cb4b 100644 --- a/keycloak/openid_full_name_protocol_mapper.go +++ b/keycloak/openid_full_name_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -60,10 +61,10 @@ func (protocolMapper *protocolMapper) convertToOpenIdFullNameProtocolMapper(real }, nil } -func (keycloakClient *KeycloakClient) GetOpenIdFullNameProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*OpenIdFullNameProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetOpenIdFullNameProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*OpenIdFullNameProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -71,14 +72,14 @@ func (keycloakClient *KeycloakClient) GetOpenIdFullNameProtocolMapper(realmId, c return protocolMapper.convertToOpenIdFullNameProtocolMapper(realmId, clientId, clientScopeId) } -func (keycloakClient *KeycloakClient) DeleteOpenIdFullNameProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenIdFullNameProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewOpenIdFullNameProtocolMapper(mapper *OpenIdFullNameProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewOpenIdFullNameProtocolMapper(ctx context.Context, mapper *OpenIdFullNameProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -88,18 +89,18 @@ func (keycloakClient *KeycloakClient) NewOpenIdFullNameProtocolMapper(mapper *Op return nil } -func (keycloakClient *KeycloakClient) UpdateOpenIdFullNameProtocolMapper(mapper *OpenIdFullNameProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateOpenIdFullNameProtocolMapper(ctx context.Context, mapper *OpenIdFullNameProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateOpenIdFullNameProtocolMapper(mapper *OpenIdFullNameProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateOpenIdFullNameProtocolMapper(ctx context.Context, mapper *OpenIdFullNameProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/openid_group_membership_protocol_mapper.go b/keycloak/openid_group_membership_protocol_mapper.go index c0320b29c..cbca7c6d4 100644 --- a/keycloak/openid_group_membership_protocol_mapper.go +++ b/keycloak/openid_group_membership_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -72,10 +73,10 @@ func (protocolMapper *protocolMapper) convertToOpenIdGroupMembershipProtocolMapp }, nil } -func (keycloakClient *KeycloakClient) GetOpenIdGroupMembershipProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*OpenIdGroupMembershipProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetOpenIdGroupMembershipProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*OpenIdGroupMembershipProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -83,14 +84,14 @@ func (keycloakClient *KeycloakClient) GetOpenIdGroupMembershipProtocolMapper(rea return protocolMapper.convertToOpenIdGroupMembershipProtocolMapper(realmId, clientId, clientScopeId) } -func (keycloakClient *KeycloakClient) DeleteOpenIdGroupMembershipProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenIdGroupMembershipProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewOpenIdGroupMembershipProtocolMapper(mapper *OpenIdGroupMembershipProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewOpenIdGroupMembershipProtocolMapper(ctx context.Context, mapper *OpenIdGroupMembershipProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -100,18 +101,18 @@ func (keycloakClient *KeycloakClient) NewOpenIdGroupMembershipProtocolMapper(map return nil } -func (keycloakClient *KeycloakClient) UpdateOpenIdGroupMembershipProtocolMapper(mapper *OpenIdGroupMembershipProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateOpenIdGroupMembershipProtocolMapper(ctx context.Context, mapper *OpenIdGroupMembershipProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateOpenIdGroupMembershipProtocolMapper(mapper *OpenIdGroupMembershipProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateOpenIdGroupMembershipProtocolMapper(ctx context.Context, mapper *OpenIdGroupMembershipProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/openid_hardcoded_claim_protocol_mapper.go b/keycloak/openid_hardcoded_claim_protocol_mapper.go index 7a9005d36..f5e502c67 100644 --- a/keycloak/openid_hardcoded_claim_protocol_mapper.go +++ b/keycloak/openid_hardcoded_claim_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -71,10 +72,10 @@ func (protocolMapper *protocolMapper) convertToOpenIdHardcodedClaimProtocolMappe }, nil } -func (keycloakClient *KeycloakClient) GetOpenIdHardcodedClaimProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*OpenIdHardcodedClaimProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetOpenIdHardcodedClaimProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*OpenIdHardcodedClaimProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -82,14 +83,14 @@ func (keycloakClient *KeycloakClient) GetOpenIdHardcodedClaimProtocolMapper(real return protocolMapper.convertToOpenIdHardcodedClaimProtocolMapper(realmId, clientId, clientScopeId) } -func (keycloakClient *KeycloakClient) DeleteOpenIdHardcodedClaimProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenIdHardcodedClaimProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewOpenIdHardcodedClaimProtocolMapper(mapper *OpenIdHardcodedClaimProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewOpenIdHardcodedClaimProtocolMapper(ctx context.Context, mapper *OpenIdHardcodedClaimProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -99,18 +100,18 @@ func (keycloakClient *KeycloakClient) NewOpenIdHardcodedClaimProtocolMapper(mapp return nil } -func (keycloakClient *KeycloakClient) UpdateOpenIdHardcodedClaimProtocolMapper(mapper *OpenIdHardcodedClaimProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateOpenIdHardcodedClaimProtocolMapper(ctx context.Context, mapper *OpenIdHardcodedClaimProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateOpenIdHardcodedClaimProtocolMapper(mapper *OpenIdHardcodedClaimProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateOpenIdHardcodedClaimProtocolMapper(ctx context.Context, mapper *OpenIdHardcodedClaimProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/openid_hardcoded_role_protocol_mapper.go b/keycloak/openid_hardcoded_role_protocol_mapper.go index 70d1b814e..62edf9514 100644 --- a/keycloak/openid_hardcoded_role_protocol_mapper.go +++ b/keycloak/openid_hardcoded_role_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strings" ) @@ -27,9 +28,9 @@ func parseRoleClientIdAndName(roleProp string) (string, string) { return "", parts[0] } -func (keycloakClient *KeycloakClient) getRolePropFromRole(role *Role) (string, error) { +func (keycloakClient *KeycloakClient) getRolePropFromRole(ctx context.Context, role *Role) (string, error) { if role.ClientRole { - client, err := keycloakClient.GetOpenidClient(role.RealmId, role.ContainerId) + client, err := keycloakClient.GetOpenidClient(ctx, role.RealmId, role.ContainerId) if err != nil { return "", err } @@ -64,10 +65,10 @@ func (protocolMapper *protocolMapper) convertToOpenIdHardcodedRoleProtocolMapper }, nil } -func (keycloakClient *KeycloakClient) GetOpenIdHardcodedRoleProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*OpenIdHardcodedRoleProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetOpenIdHardcodedRoleProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*OpenIdHardcodedRoleProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -76,7 +77,7 @@ func (keycloakClient *KeycloakClient) GetOpenIdHardcodedRoleProtocolMapper(realm var roleClientUId = "" if roleClientId != "" { - client, err := keycloakClient.GetOpenidClientByClientId(realmId, roleClientId) + client, err := keycloakClient.GetOpenidClientByClientId(ctx, realmId, roleClientId) if err != nil { return nil, err } @@ -84,7 +85,7 @@ func (keycloakClient *KeycloakClient) GetOpenIdHardcodedRoleProtocolMapper(realm roleClientUId = client.Id } - role, err := keycloakClient.GetRoleByName(realmId, roleClientUId, roleName) + role, err := keycloakClient.GetRoleByName(ctx, realmId, roleClientUId, roleName) if err != nil { return nil, err } @@ -92,24 +93,24 @@ func (keycloakClient *KeycloakClient) GetOpenIdHardcodedRoleProtocolMapper(realm return protocolMapper.convertToOpenIdHardcodedRoleProtocolMapper(realmId, clientId, clientScopeId, role.Id) } -func (keycloakClient *KeycloakClient) DeleteOpenIdHardcodedRoleProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenIdHardcodedRoleProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewOpenIdHardcodedRoleProtocolMapper(mapper *OpenIdHardcodedRoleProtocolMapper) error { - role, err := keycloakClient.GetRole(mapper.RealmId, mapper.RoleId) +func (keycloakClient *KeycloakClient) NewOpenIdHardcodedRoleProtocolMapper(ctx context.Context, mapper *OpenIdHardcodedRoleProtocolMapper) error { + role, err := keycloakClient.GetRole(ctx, mapper.RealmId, mapper.RoleId) if err != nil { return err } - roleProp, err := keycloakClient.getRolePropFromRole(role) + roleProp, err := keycloakClient.getRolePropFromRole(ctx, role) if err != nil { return err } path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper(roleProp)) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper(roleProp)) if err != nil { return err } @@ -119,28 +120,28 @@ func (keycloakClient *KeycloakClient) NewOpenIdHardcodedRoleProtocolMapper(mappe return nil } -func (keycloakClient *KeycloakClient) UpdateOpenIdHardcodedRoleProtocolMapper(mapper *OpenIdHardcodedRoleProtocolMapper) error { - role, err := keycloakClient.GetRole(mapper.RealmId, mapper.RoleId) +func (keycloakClient *KeycloakClient) UpdateOpenIdHardcodedRoleProtocolMapper(ctx context.Context, mapper *OpenIdHardcodedRoleProtocolMapper) error { + role, err := keycloakClient.GetRole(ctx, mapper.RealmId, mapper.RoleId) if err != nil { return err } - roleProp, err := keycloakClient.getRolePropFromRole(role) + roleProp, err := keycloakClient.getRolePropFromRole(ctx, role) if err != nil { return err } path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper(roleProp)) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper(roleProp)) } -func (keycloakClient *KeycloakClient) ValidateOpenIdHardcodedRoleProtocolMapper(mapper *OpenIdHardcodedRoleProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateOpenIdHardcodedRoleProtocolMapper(ctx context.Context, mapper *OpenIdHardcodedRoleProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/openid_script_protocol_mapper.go b/keycloak/openid_script_protocol_mapper.go index 57a32c30a..0d5e2435c 100644 --- a/keycloak/openid_script_protocol_mapper.go +++ b/keycloak/openid_script_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -81,10 +82,10 @@ func (protocolMapper *protocolMapper) convertToOpenIdScriptProtocolMapper(realmI }, nil } -func (keycloakClient *KeycloakClient) GetOpenIdScriptProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*OpenIdScriptProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetOpenIdScriptProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*OpenIdScriptProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -92,14 +93,14 @@ func (keycloakClient *KeycloakClient) GetOpenIdScriptProtocolMapper(realmId, cli return protocolMapper.convertToOpenIdScriptProtocolMapper(realmId, clientId, clientScopeId) } -func (keycloakClient *KeycloakClient) DeleteOpenIdScriptProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenIdScriptProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewOpenIdScriptProtocolMapper(mapper *OpenIdScriptProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewOpenIdScriptProtocolMapper(ctx context.Context, mapper *OpenIdScriptProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -109,18 +110,18 @@ func (keycloakClient *KeycloakClient) NewOpenIdScriptProtocolMapper(mapper *Open return nil } -func (keycloakClient *KeycloakClient) UpdateOpenIdScriptProtocolMapper(mapper *OpenIdScriptProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateOpenIdScriptProtocolMapper(ctx context.Context, mapper *OpenIdScriptProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateOpenIdScriptProtocolMapper(mapper *OpenIdScriptProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateOpenIdScriptProtocolMapper(ctx context.Context, mapper *OpenIdScriptProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/openid_user_attribute_protocol_mapper.go b/keycloak/openid_user_attribute_protocol_mapper.go index f03e680ce..7ee662758 100644 --- a/keycloak/openid_user_attribute_protocol_mapper.go +++ b/keycloak/openid_user_attribute_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -89,10 +90,10 @@ func (protocolMapper *protocolMapper) convertToOpenIdUserAttributeProtocolMapper }, nil } -func (keycloakClient *KeycloakClient) GetOpenIdUserAttributeProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*OpenIdUserAttributeProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetOpenIdUserAttributeProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*OpenIdUserAttributeProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -100,14 +101,14 @@ func (keycloakClient *KeycloakClient) GetOpenIdUserAttributeProtocolMapper(realm return protocolMapper.convertToOpenIdUserAttributeProtocolMapper(realmId, clientId, clientScopeId) } -func (keycloakClient *KeycloakClient) DeleteOpenIdUserAttributeProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenIdUserAttributeProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewOpenIdUserAttributeProtocolMapper(mapper *OpenIdUserAttributeProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewOpenIdUserAttributeProtocolMapper(ctx context.Context, mapper *OpenIdUserAttributeProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -117,18 +118,18 @@ func (keycloakClient *KeycloakClient) NewOpenIdUserAttributeProtocolMapper(mappe return nil } -func (keycloakClient *KeycloakClient) UpdateOpenIdUserAttributeProtocolMapper(mapper *OpenIdUserAttributeProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateOpenIdUserAttributeProtocolMapper(ctx context.Context, mapper *OpenIdUserAttributeProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateOpenIdUserAttributeProtocolMapper(mapper *OpenIdUserAttributeProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateOpenIdUserAttributeProtocolMapper(ctx context.Context, mapper *OpenIdUserAttributeProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/openid_user_client_role_protocol_mapper.go b/keycloak/openid_user_client_role_protocol_mapper.go index dadb8723c..b2dfefd2e 100644 --- a/keycloak/openid_user_client_role_protocol_mapper.go +++ b/keycloak/openid_user_client_role_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -83,10 +84,10 @@ func (protocolMapper *protocolMapper) convertToOpenIdUserClientRoleProtocolMappe }, nil } -func (keycloakClient *KeycloakClient) GetOpenIdUserClientRoleProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*OpenIdUserClientRoleProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetOpenIdUserClientRoleProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*OpenIdUserClientRoleProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -94,14 +95,14 @@ func (keycloakClient *KeycloakClient) GetOpenIdUserClientRoleProtocolMapper(real return protocolMapper.convertToOpenIdUserClientRoleProtocolMapper(realmId, clientId, clientScopeId) } -func (keycloakClient *KeycloakClient) DeleteOpenIdUserClientRoleProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenIdUserClientRoleProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewOpenIdUserClientRoleProtocolMapper(mapper *OpenIdUserClientRoleProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewOpenIdUserClientRoleProtocolMapper(ctx context.Context, mapper *OpenIdUserClientRoleProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -111,18 +112,18 @@ func (keycloakClient *KeycloakClient) NewOpenIdUserClientRoleProtocolMapper(mapp return nil } -func (keycloakClient *KeycloakClient) UpdateOpenIdUserClientRoleProtocolMapper(mapper *OpenIdUserClientRoleProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateOpenIdUserClientRoleProtocolMapper(ctx context.Context, mapper *OpenIdUserClientRoleProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateOpenIdUserClientRoleProtocolMapper(mapper *OpenIdUserClientRoleProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateOpenIdUserClientRoleProtocolMapper(ctx context.Context, mapper *OpenIdUserClientRoleProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/openid_user_property_protocol_mapper.go b/keycloak/openid_user_property_protocol_mapper.go index d4a47d1a6..276d3a843 100644 --- a/keycloak/openid_user_property_protocol_mapper.go +++ b/keycloak/openid_user_property_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -71,10 +72,10 @@ func (protocolMapper *protocolMapper) convertToOpenIdUserPropertyProtocolMapper( }, nil } -func (keycloakClient *KeycloakClient) GetOpenIdUserPropertyProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*OpenIdUserPropertyProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetOpenIdUserPropertyProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*OpenIdUserPropertyProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -82,14 +83,14 @@ func (keycloakClient *KeycloakClient) GetOpenIdUserPropertyProtocolMapper(realmI return protocolMapper.convertToOpenIdUserPropertyProtocolMapper(realmId, clientId, clientScopeId) } -func (keycloakClient *KeycloakClient) DeleteOpenIdUserPropertyProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenIdUserPropertyProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewOpenIdUserPropertyProtocolMapper(mapper *OpenIdUserPropertyProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewOpenIdUserPropertyProtocolMapper(ctx context.Context, mapper *OpenIdUserPropertyProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -99,18 +100,18 @@ func (keycloakClient *KeycloakClient) NewOpenIdUserPropertyProtocolMapper(mapper return nil } -func (keycloakClient *KeycloakClient) UpdateOpenIdUserPropertyProtocolMapper(mapper *OpenIdUserPropertyProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateOpenIdUserPropertyProtocolMapper(ctx context.Context, mapper *OpenIdUserPropertyProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (mapper *OpenIdUserPropertyProtocolMapper) Validate(keycloakClient *KeycloakClient) error { +func (mapper *OpenIdUserPropertyProtocolMapper) Validate(ctx context.Context, keycloakClient *KeycloakClient) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/openid_user_realm_role_protocol_mapper.go b/keycloak/openid_user_realm_role_protocol_mapper.go index f06cb2e44..1780d2fb1 100644 --- a/keycloak/openid_user_realm_role_protocol_mapper.go +++ b/keycloak/openid_user_realm_role_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -79,10 +80,10 @@ func (protocolMapper *protocolMapper) convertToOpenIdUserRealmRoleProtocolMapper }, nil } -func (keycloakClient *KeycloakClient) GetOpenIdUserRealmRoleProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*OpenIdUserRealmRoleProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetOpenIdUserRealmRoleProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*OpenIdUserRealmRoleProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -90,14 +91,14 @@ func (keycloakClient *KeycloakClient) GetOpenIdUserRealmRoleProtocolMapper(realm return protocolMapper.convertToOpenIdUserRealmRoleProtocolMapper(realmId, clientId, clientScopeId) } -func (keycloakClient *KeycloakClient) DeleteOpenIdUserRealmRoleProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenIdUserRealmRoleProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewOpenIdUserRealmRoleProtocolMapper(mapper *OpenIdUserRealmRoleProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewOpenIdUserRealmRoleProtocolMapper(ctx context.Context, mapper *OpenIdUserRealmRoleProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -107,18 +108,18 @@ func (keycloakClient *KeycloakClient) NewOpenIdUserRealmRoleProtocolMapper(mappe return nil } -func (keycloakClient *KeycloakClient) UpdateOpenIdUserRealmRoleProtocolMapper(mapper *OpenIdUserRealmRoleProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateOpenIdUserRealmRoleProtocolMapper(ctx context.Context, mapper *OpenIdUserRealmRoleProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateOpenIdUserRealmRoleProtocolMapper(mapper *OpenIdUserRealmRoleProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateOpenIdUserRealmRoleProtocolMapper(ctx context.Context, mapper *OpenIdUserRealmRoleProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/openid_user_session_note_protocol_mapper.go b/keycloak/openid_user_session_note_protocol_mapper.go index ed0d131ae..6282be125 100644 --- a/keycloak/openid_user_session_note_protocol_mapper.go +++ b/keycloak/openid_user_session_note_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -63,10 +64,10 @@ func (protocolMapper *protocolMapper) convertToOpenIdUserSessionNoteProtocolMapp }, nil } -func (keycloakClient *KeycloakClient) GetOpenIdUserSessionNoteProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*OpenIdUserSessionNoteProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetOpenIdUserSessionNoteProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*OpenIdUserSessionNoteProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -74,14 +75,14 @@ func (keycloakClient *KeycloakClient) GetOpenIdUserSessionNoteProtocolMapper(rea return protocolMapper.convertToOpenIdUserSessionNoteProtocolMapper(realmId, clientId, clientScopeId) } -func (keycloakClient *KeycloakClient) DeleteOpenIdUserSessionNoteProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteOpenIdUserSessionNoteProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewOpenIdUserSessionNoteProtocolMapper(mapper *OpenIdUserSessionNoteProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewOpenIdUserSessionNoteProtocolMapper(ctx context.Context, mapper *OpenIdUserSessionNoteProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -91,18 +92,18 @@ func (keycloakClient *KeycloakClient) NewOpenIdUserSessionNoteProtocolMapper(map return nil } -func (keycloakClient *KeycloakClient) UpdateOpenIdUserSessionNoteProtocolMapper(mapper *OpenIdUserSessionNoteProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateOpenIdUserSessionNoteProtocolMapper(ctx context.Context, mapper *OpenIdUserSessionNoteProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateOpenIdUserSessionNoteProtocolMapper(mapper *OpenIdUserSessionNoteProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateOpenIdUserSessionNoteProtocolMapper(ctx context.Context, mapper *OpenIdUserSessionNoteProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/protocol_mapper.go b/keycloak/protocol_mapper.go index 56495f1c0..05ea467ff 100644 --- a/keycloak/protocol_mapper.go +++ b/keycloak/protocol_mapper.go @@ -1,6 +1,9 @@ package keycloak -import "fmt" +import ( + "context" + "fmt" +) // https://www.keycloak.org/docs-api/4.2/rest-api/index.html#_protocolmapperrepresentation type protocolMapper struct { @@ -53,10 +56,10 @@ func individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId str return fmt.Sprintf("%s/%s", protocolMapperPath(realmId, clientId, clientScopeId), mapperId) } -func (keycloakClient *KeycloakClient) listGenericProtocolMappers(realmId, clientId, clientScopeId string) ([]*protocolMapper, error) { +func (keycloakClient *KeycloakClient) listGenericProtocolMappers(ctx context.Context, realmId, clientId, clientScopeId string) ([]*protocolMapper, error) { var protocolMappers []*protocolMapper - err := keycloakClient.get(protocolMapperPath(realmId, clientId, clientScopeId), &protocolMappers, nil) + err := keycloakClient.get(ctx, protocolMapperPath(realmId, clientId, clientScopeId), &protocolMappers, nil) if err != nil { return nil, err } diff --git a/keycloak/realm.go b/keycloak/realm.go index 38bbd0bf3..6f1a4e002 100644 --- a/keycloak/realm.go +++ b/keycloak/realm.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strings" ) @@ -163,26 +164,26 @@ type SmtpServer struct { Password string `json:"password,omitempty"` } -func (keycloakClient *KeycloakClient) NewRealm(realm *Realm) error { - _, _, err := keycloakClient.post("/realms", realm) +func (keycloakClient *KeycloakClient) NewRealm(ctx context.Context, realm *Realm) error { + _, _, err := keycloakClient.post(ctx, "/realms", realm) return err } -func (keycloakClient *KeycloakClient) GetRealm(name string) (*Realm, error) { +func (keycloakClient *KeycloakClient) GetRealm(ctx context.Context, name string) (*Realm, error) { var realm Realm - err := keycloakClient.get(fmt.Sprintf("/realms/%s", name), &realm, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s", name), &realm, nil) if err != nil { return nil, err } return &realm, nil } -func (keycloakClient *KeycloakClient) GetRealms() ([]*Realm, error) { +func (keycloakClient *KeycloakClient) GetRealms(ctx context.Context) ([]*Realm, error) { var realms []*Realm - err := keycloakClient.get("/realms", &realms, nil) + err := keycloakClient.get(ctx, "/realms", &realms, nil) if err != nil { return nil, err } @@ -190,10 +191,10 @@ func (keycloakClient *KeycloakClient) GetRealms() ([]*Realm, error) { return realms, nil } -func (keycloakClient *KeycloakClient) GetRealmKeys(name string) (*Keys, error) { +func (keycloakClient *KeycloakClient) GetRealmKeys(ctx context.Context, name string) (*Keys, error) { var keys Keys - err := keycloakClient.get(fmt.Sprintf("/realms/%s/keys", name), &keys, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/keys", name), &keys, nil) if err != nil { return nil, err } @@ -201,21 +202,21 @@ func (keycloakClient *KeycloakClient) GetRealmKeys(name string) (*Keys, error) { return &keys, nil } -func (keycloakClient *KeycloakClient) UpdateRealm(realm *Realm) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s", realm.Realm), realm) +func (keycloakClient *KeycloakClient) UpdateRealm(ctx context.Context, realm *Realm) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s", realm.Realm), realm) } -func (keycloakClient *KeycloakClient) DeleteRealm(name string) error { - err := keycloakClient.delete(fmt.Sprintf("/realms/%s", name), nil) +func (keycloakClient *KeycloakClient) DeleteRealm(ctx context.Context, name string) error { + err := keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s", name), nil) if err != nil { // For whatever reason, this fails sometimes with a 500 during acceptance tests. try again - return keycloakClient.delete(fmt.Sprintf("/realms/%s", name), nil) + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s", name), nil) } return nil } -func (keycloakClient *KeycloakClient) ValidateRealm(realm *Realm) error { +func (keycloakClient *KeycloakClient) ValidateRealm(ctx context.Context, realm *Realm) error { if realm.DuplicateEmailsAllowed == true && realm.RegistrationEmailAsUsername == true { return fmt.Errorf("validation error: DuplicateEmailsAllowed cannot be true if RegistrationEmailAsUsername is true") } @@ -229,7 +230,7 @@ func (keycloakClient *KeycloakClient) ValidateRealm(realm *Realm) error { } // validate if the given theme exists on the server. the keycloak API allows you to use any random string for a theme - serverInfo, err := keycloakClient.GetServerInfo() + serverInfo, err := keycloakClient.GetServerInfo(ctx) if err != nil { return err } diff --git a/keycloak/realm_events.go b/keycloak/realm_events.go index 1e3e7ce3b..e25206081 100644 --- a/keycloak/realm_events.go +++ b/keycloak/realm_events.go @@ -1,6 +1,9 @@ package keycloak -import "fmt" +import ( + "context" + "fmt" +) type RealmEventsConfig struct { AdminEventsDetailsEnabled bool `json:"adminEventsDetailsEnabled"` @@ -11,10 +14,10 @@ type RealmEventsConfig struct { EventsListeners []string `json:"eventsListeners,omitempty"` } -func (keycloakClient *KeycloakClient) GetRealmEventsConfig(realmId string) (*RealmEventsConfig, error) { +func (keycloakClient *KeycloakClient) GetRealmEventsConfig(ctx context.Context, realmId string) (*RealmEventsConfig, error) { var realmEventsConfig RealmEventsConfig - err := keycloakClient.get(fmt.Sprintf("/realms/%s/events/config", realmId), &realmEventsConfig, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/events/config", realmId), &realmEventsConfig, nil) if err != nil { return nil, err } @@ -22,6 +25,6 @@ func (keycloakClient *KeycloakClient) GetRealmEventsConfig(realmId string) (*Rea return &realmEventsConfig, nil } -func (keycloakClient *KeycloakClient) UpdateRealmEventsConfig(realmId string, realmEventsConfig *RealmEventsConfig) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/events/config", realmId), realmEventsConfig) +func (keycloakClient *KeycloakClient) UpdateRealmEventsConfig(ctx context.Context, realmId string, realmEventsConfig *RealmEventsConfig) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/events/config", realmId), realmEventsConfig) } diff --git a/keycloak/realm_keystore_aes_generated.go b/keycloak/realm_keystore_aes_generated.go index fda1d65ca..ad14c3960 100644 --- a/keycloak/realm_keystore_aes_generated.go +++ b/keycloak/realm_keystore_aes_generated.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -83,8 +84,8 @@ func convertFromComponentToRealmKeystoreAesGenerated(component *component, realm return realmKey, nil } -func (keycloakClient *KeycloakClient) NewRealmKeystoreAesGenerated(realmKey *RealmKeystoreAesGenerated) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", realmKey.RealmId), convertFromRealmKeystoreAesGeneratedToComponent(realmKey)) +func (keycloakClient *KeycloakClient) NewRealmKeystoreAesGenerated(ctx context.Context, realmKey *RealmKeystoreAesGenerated) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", realmKey.RealmId), convertFromRealmKeystoreAesGeneratedToComponent(realmKey)) if err != nil { return err } @@ -94,10 +95,10 @@ func (keycloakClient *KeycloakClient) NewRealmKeystoreAesGenerated(realmKey *Rea return nil } -func (keycloakClient *KeycloakClient) GetRealmKeystoreAesGenerated(realmId, id string) (*RealmKeystoreAesGenerated, error) { +func (keycloakClient *KeycloakClient) GetRealmKeystoreAesGenerated(ctx context.Context, realmId, id string) (*RealmKeystoreAesGenerated, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -105,10 +106,10 @@ func (keycloakClient *KeycloakClient) GetRealmKeystoreAesGenerated(realmId, id s return convertFromComponentToRealmKeystoreAesGenerated(component, realmId) } -func (keycloakClient *KeycloakClient) UpdateRealmKeystoreAesGenerated(realmKey *RealmKeystoreAesGenerated) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", realmKey.RealmId, realmKey.Id), convertFromRealmKeystoreAesGeneratedToComponent(realmKey)) +func (keycloakClient *KeycloakClient) UpdateRealmKeystoreAesGenerated(ctx context.Context, realmKey *RealmKeystoreAesGenerated) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", realmKey.RealmId, realmKey.Id), convertFromRealmKeystoreAesGeneratedToComponent(realmKey)) } -func (keycloakClient *KeycloakClient) DeleteRealmKeystoreAesGenerated(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteRealmKeystoreAesGenerated(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/realm_keystore_ecdsa_generated.go b/keycloak/realm_keystore_ecdsa_generated.go index 0d4c5ae66..fb6396ceb 100644 --- a/keycloak/realm_keystore_ecdsa_generated.go +++ b/keycloak/realm_keystore_ecdsa_generated.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -75,8 +76,8 @@ func convertFromComponentToRealmKeystoreEcdsaGenerated(component *component, rea return realmKey, nil } -func (keycloakClient *KeycloakClient) NewRealmKeystoreEcdsaGenerated(realmKey *RealmKeystoreEcdsaGenerated) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", realmKey.RealmId), convertFromRealmKeystoreEcdsaGeneratedToComponent(realmKey)) +func (keycloakClient *KeycloakClient) NewRealmKeystoreEcdsaGenerated(ctx context.Context, realmKey *RealmKeystoreEcdsaGenerated) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", realmKey.RealmId), convertFromRealmKeystoreEcdsaGeneratedToComponent(realmKey)) if err != nil { return err } @@ -86,10 +87,10 @@ func (keycloakClient *KeycloakClient) NewRealmKeystoreEcdsaGenerated(realmKey *R return nil } -func (keycloakClient *KeycloakClient) GetRealmKeystoreEcdsaGenerated(realmId, id string) (*RealmKeystoreEcdsaGenerated, error) { +func (keycloakClient *KeycloakClient) GetRealmKeystoreEcdsaGenerated(ctx context.Context, realmId, id string) (*RealmKeystoreEcdsaGenerated, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -97,10 +98,10 @@ func (keycloakClient *KeycloakClient) GetRealmKeystoreEcdsaGenerated(realmId, id return convertFromComponentToRealmKeystoreEcdsaGenerated(component, realmId) } -func (keycloakClient *KeycloakClient) UpdateRealmKeystoreEcdsaGenerated(realmKey *RealmKeystoreEcdsaGenerated) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", realmKey.RealmId, realmKey.Id), convertFromRealmKeystoreEcdsaGeneratedToComponent(realmKey)) +func (keycloakClient *KeycloakClient) UpdateRealmKeystoreEcdsaGenerated(ctx context.Context, realmKey *RealmKeystoreEcdsaGenerated) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", realmKey.RealmId, realmKey.Id), convertFromRealmKeystoreEcdsaGeneratedToComponent(realmKey)) } -func (keycloakClient *KeycloakClient) DeleteRealmKeystoreEcdsaGenerated(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteRealmKeystoreEcdsaGenerated(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/realm_keystore_hmac_generated.go b/keycloak/realm_keystore_hmac_generated.go index d31d883ee..e1f05a5a8 100644 --- a/keycloak/realm_keystore_hmac_generated.go +++ b/keycloak/realm_keystore_hmac_generated.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -88,8 +89,8 @@ func convertFromComponentToRealmKeystoreHmacGenerated(component *component, real return realmKey, nil } -func (keycloakClient *KeycloakClient) NewRealmKeystoreHmacGenerated(realmKey *RealmKeystoreHmacGenerated) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", realmKey.RealmId), convertFromRealmKeystoreHmacGeneratedToComponent(realmKey)) +func (keycloakClient *KeycloakClient) NewRealmKeystoreHmacGenerated(ctx context.Context, realmKey *RealmKeystoreHmacGenerated) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", realmKey.RealmId), convertFromRealmKeystoreHmacGeneratedToComponent(realmKey)) if err != nil { return err } @@ -99,10 +100,10 @@ func (keycloakClient *KeycloakClient) NewRealmKeystoreHmacGenerated(realmKey *Re return nil } -func (keycloakClient *KeycloakClient) GetRealmKeystoreHmacGenerated(realmId, id string) (*RealmKeystoreHmacGenerated, error) { +func (keycloakClient *KeycloakClient) GetRealmKeystoreHmacGenerated(ctx context.Context, realmId, id string) (*RealmKeystoreHmacGenerated, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -110,10 +111,10 @@ func (keycloakClient *KeycloakClient) GetRealmKeystoreHmacGenerated(realmId, id return convertFromComponentToRealmKeystoreHmacGenerated(component, realmId) } -func (keycloakClient *KeycloakClient) UpdateRealmKeystoreHmacGenerated(realmKey *RealmKeystoreHmacGenerated) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", realmKey.RealmId, realmKey.Id), convertFromRealmKeystoreHmacGeneratedToComponent(realmKey)) +func (keycloakClient *KeycloakClient) UpdateRealmKeystoreHmacGenerated(ctx context.Context, realmKey *RealmKeystoreHmacGenerated) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", realmKey.RealmId, realmKey.Id), convertFromRealmKeystoreHmacGeneratedToComponent(realmKey)) } -func (keycloakClient *KeycloakClient) DeleteRealmKeystoreHmacGenerated(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteRealmKeystoreHmacGenerated(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/realm_keystore_java_keystore.go b/keycloak/realm_keystore_java_keystore.go index 78fb3d5af..a280a705e 100644 --- a/keycloak/realm_keystore_java_keystore.go +++ b/keycloak/realm_keystore_java_keystore.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -96,8 +97,8 @@ func convertFromComponentToRealmKeystoreJavaKeystore(component *component, realm return realmKey, nil } -func (keycloakClient *KeycloakClient) NewRealmKeystoreJavaKeystore(realmKey *RealmKeystoreJavaKeystore) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", realmKey.RealmId), convertFromRealmKeystoreJavaKeystoreToComponent(realmKey)) +func (keycloakClient *KeycloakClient) NewRealmKeystoreJavaKeystore(ctx context.Context, realmKey *RealmKeystoreJavaKeystore) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", realmKey.RealmId), convertFromRealmKeystoreJavaKeystoreToComponent(realmKey)) if err != nil { return err } @@ -107,10 +108,10 @@ func (keycloakClient *KeycloakClient) NewRealmKeystoreJavaKeystore(realmKey *Rea return nil } -func (keycloakClient *KeycloakClient) GetRealmKeystoreJavaKeystore(realmId, id string) (*RealmKeystoreJavaKeystore, error) { +func (keycloakClient *KeycloakClient) GetRealmKeystoreJavaKeystore(ctx context.Context, realmId, id string) (*RealmKeystoreJavaKeystore, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -118,10 +119,10 @@ func (keycloakClient *KeycloakClient) GetRealmKeystoreJavaKeystore(realmId, id s return convertFromComponentToRealmKeystoreJavaKeystore(component, realmId) } -func (keycloakClient *KeycloakClient) UpdateRealmKeystoreJavaKeystore(realmKey *RealmKeystoreJavaKeystore) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", realmKey.RealmId, realmKey.Id), convertFromRealmKeystoreJavaKeystoreToComponent(realmKey)) +func (keycloakClient *KeycloakClient) UpdateRealmKeystoreJavaKeystore(ctx context.Context, realmKey *RealmKeystoreJavaKeystore) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", realmKey.RealmId, realmKey.Id), convertFromRealmKeystoreJavaKeystoreToComponent(realmKey)) } -func (keycloakClient *KeycloakClient) DeleteRealmKeystoreJavaKeystore(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteRealmKeystoreJavaKeystore(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/realm_keystore_rsa.go b/keycloak/realm_keystore_rsa.go index 1ac28e14b..821a769ea 100644 --- a/keycloak/realm_keystore_rsa.go +++ b/keycloak/realm_keystore_rsa.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -86,8 +87,8 @@ func convertFromComponentToRealmKeystoreRsa(component *component, realmId string return realmKey, nil } -func (keycloakClient *KeycloakClient) NewRealmKeystoreRsa(realmKey *RealmKeystoreRsa) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", realmKey.RealmId), convertFromRealmKeystoreRsaToComponent(realmKey)) +func (keycloakClient *KeycloakClient) NewRealmKeystoreRsa(ctx context.Context, realmKey *RealmKeystoreRsa) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", realmKey.RealmId), convertFromRealmKeystoreRsaToComponent(realmKey)) if err != nil { return err } @@ -97,10 +98,10 @@ func (keycloakClient *KeycloakClient) NewRealmKeystoreRsa(realmKey *RealmKeystor return nil } -func (keycloakClient *KeycloakClient) GetRealmKeystoreRsa(realmId, id string) (*RealmKeystoreRsa, error) { +func (keycloakClient *KeycloakClient) GetRealmKeystoreRsa(ctx context.Context, realmId, id string) (*RealmKeystoreRsa, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -108,10 +109,10 @@ func (keycloakClient *KeycloakClient) GetRealmKeystoreRsa(realmId, id string) (* return convertFromComponentToRealmKeystoreRsa(component, realmId) } -func (keycloakClient *KeycloakClient) UpdateRealmKeystoreRsa(realmKey *RealmKeystoreRsa) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", realmKey.RealmId, realmKey.Id), convertFromRealmKeystoreRsaToComponent(realmKey)) +func (keycloakClient *KeycloakClient) UpdateRealmKeystoreRsa(ctx context.Context, realmKey *RealmKeystoreRsa) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", realmKey.RealmId, realmKey.Id), convertFromRealmKeystoreRsaToComponent(realmKey)) } -func (keycloakClient *KeycloakClient) DeleteRealmKeystoreRsa(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteRealmKeystoreRsa(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/realm_keystore_rsa_generated.go b/keycloak/realm_keystore_rsa_generated.go index 4572d0379..849d198d3 100644 --- a/keycloak/realm_keystore_rsa_generated.go +++ b/keycloak/realm_keystore_rsa_generated.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -93,8 +94,8 @@ func convertFromComponentToRealmKeystoreRsaGenerated(component *component, realm return realmKey, nil } -func (keycloakClient *KeycloakClient) NewRealmKeystoreRsaGenerated(realmKey *RealmKeystoreRsaGenerated) error { - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/components", realmKey.RealmId), convertFromRealmKeystoreRsaGeneratedToComponent(realmKey)) +func (keycloakClient *KeycloakClient) NewRealmKeystoreRsaGenerated(ctx context.Context, realmKey *RealmKeystoreRsaGenerated) error { + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/components", realmKey.RealmId), convertFromRealmKeystoreRsaGeneratedToComponent(realmKey)) if err != nil { return err } @@ -104,10 +105,10 @@ func (keycloakClient *KeycloakClient) NewRealmKeystoreRsaGenerated(realmKey *Rea return nil } -func (keycloakClient *KeycloakClient) GetRealmKeystoreRsaGenerated(realmId, id string) (*RealmKeystoreRsaGenerated, error) { +func (keycloakClient *KeycloakClient) GetRealmKeystoreRsaGenerated(ctx context.Context, realmId, id string) (*RealmKeystoreRsaGenerated, error) { var component *component - err := keycloakClient.get(fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), &component, nil) if err != nil { return nil, err } @@ -115,10 +116,10 @@ func (keycloakClient *KeycloakClient) GetRealmKeystoreRsaGenerated(realmId, id s return convertFromComponentToRealmKeystoreRsaGenerated(component, realmId) } -func (keycloakClient *KeycloakClient) UpdateRealmKeystoreRsaGenerated(realmKey *RealmKeystoreRsaGenerated) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/components/%s", realmKey.RealmId, realmKey.Id), convertFromRealmKeystoreRsaGeneratedToComponent(realmKey)) +func (keycloakClient *KeycloakClient) UpdateRealmKeystoreRsaGenerated(ctx context.Context, realmKey *RealmKeystoreRsaGenerated) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/components/%s", realmKey.RealmId, realmKey.Id), convertFromRealmKeystoreRsaGeneratedToComponent(realmKey)) } -func (keycloakClient *KeycloakClient) DeleteRealmKeystoreRsaGenerated(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteRealmKeystoreRsaGenerated(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/components/%s", realmId, id), nil) } diff --git a/keycloak/realm_user_profile.go b/keycloak/realm_user_profile.go index f79485e08..0143a40e8 100644 --- a/keycloak/realm_user_profile.go +++ b/keycloak/realm_user_profile.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "encoding/json" "fmt" ) @@ -44,18 +45,13 @@ type RealmUserProfile struct { Groups []*RealmUserProfileGroup `json:"groups,omitempty"` } -func (keycloakClient *KeycloakClient) UpdateRealmUserProfile(realmId string, realmUserProfile *RealmUserProfile) error { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/users/profile", realmId), realmUserProfile) - if err != nil { - return err - } - - return nil +func (keycloakClient *KeycloakClient) UpdateRealmUserProfile(ctx context.Context, realmId string, realmUserProfile *RealmUserProfile) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/users/profile", realmId), realmUserProfile) } -func (keycloakClient *KeycloakClient) GetRealmUserProfile(realmId string) (*RealmUserProfile, error) { +func (keycloakClient *KeycloakClient) GetRealmUserProfile(ctx context.Context, realmId string) (*RealmUserProfile, error) { var realmUserProfile RealmUserProfile - body, err := keycloakClient.getRaw(fmt.Sprintf("/realms/%s/users/profile", realmId), nil) + body, err := keycloakClient.getRaw(ctx, fmt.Sprintf("/realms/%s/users/profile", realmId), nil) if err != nil { return nil, err } diff --git a/keycloak/required_action.go b/keycloak/required_action.go index 3f4ece2ba..d46c3db94 100644 --- a/keycloak/required_action.go +++ b/keycloak/required_action.go @@ -1,6 +1,9 @@ package keycloak -import "fmt" +import ( + "context" + "fmt" +) type RequiredAction struct { Id string `json:"-"` @@ -28,10 +31,10 @@ func (requiredActions *RequiredAction) getConfigOk(val string) (string, bool) { return "", false } -func (keycloakClient *KeycloakClient) GetRequiredActions(realmId string) ([]*RequiredAction, error) { +func (keycloakClient *KeycloakClient) GetRequiredActions(ctx context.Context, realmId string) ([]*RequiredAction, error) { var requiredActions []*RequiredAction - err := keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/required-actions", realmId), &requiredActions, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/required-actions", realmId), &requiredActions, nil) if err != nil { return nil, err } @@ -43,10 +46,10 @@ func (keycloakClient *KeycloakClient) GetRequiredActions(realmId string) ([]*Req return requiredActions, nil } -func (keycloakClient *KeycloakClient) GetUnregisteredRequiredActions(realmId string) ([]*RequiredAction, error) { +func (keycloakClient *KeycloakClient) GetUnregisteredRequiredActions(ctx context.Context, realmId string) ([]*RequiredAction, error) { var unregisteredRequiredActions []*RequiredAction - err := keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/unregistered-required-actions", realmId), &unregisteredRequiredActions, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/unregistered-required-actions", realmId), &unregisteredRequiredActions, nil) if err != nil { return nil, err } @@ -58,10 +61,10 @@ func (keycloakClient *KeycloakClient) GetUnregisteredRequiredActions(realmId str return unregisteredRequiredActions, nil } -func (keycloakClient *KeycloakClient) GetRequiredAction(realmId string, alias string) (*RequiredAction, error) { +func (keycloakClient *KeycloakClient) GetRequiredAction(ctx context.Context, realmId string, alias string) (*RequiredAction, error) { var requiredAction RequiredAction - err := keycloakClient.get(fmt.Sprintf("/realms/%s/authentication/required-actions/%s", realmId, alias), &requiredAction, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/authentication/required-actions/%s", realmId, alias), &requiredAction, nil) if err != nil { return nil, err } @@ -69,38 +72,38 @@ func (keycloakClient *KeycloakClient) GetRequiredAction(realmId string, alias st return &requiredAction, nil } -func (keycloakClient *KeycloakClient) RegisterRequiredAction(requiredAction *RequiredAction) error { - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/authentication/register-required-action", requiredAction.RealmId), requiredAction) +func (keycloakClient *KeycloakClient) RegisterRequiredAction(ctx context.Context, requiredAction *RequiredAction) error { + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/authentication/register-required-action", requiredAction.RealmId), requiredAction) return err } -func (keycloakClient *KeycloakClient) CreateRequiredAction(requiredAction *RequiredAction) error { +func (keycloakClient *KeycloakClient) CreateRequiredAction(ctx context.Context, requiredAction *RequiredAction) error { requiredAction.Id = fmt.Sprintf("%s/%s", requiredAction.RealmId, requiredAction.Alias) - return keycloakClient.UpdateRequiredAction(requiredAction) + return keycloakClient.UpdateRequiredAction(ctx, requiredAction) } -func (keycloakClient *KeycloakClient) UpdateRequiredAction(requiredAction *RequiredAction) error { +func (keycloakClient *KeycloakClient) UpdateRequiredAction(ctx context.Context, requiredAction *RequiredAction) error { - err := keycloakClient.ValidateRequiredAction(requiredAction) + err := keycloakClient.ValidateRequiredAction(ctx, requiredAction) if err != nil { return err } - return keycloakClient.put(fmt.Sprintf("/realms/%s/authentication/required-actions/%s", requiredAction.RealmId, requiredAction.Alias), requiredAction) + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/authentication/required-actions/%s", requiredAction.RealmId, requiredAction.Alias), requiredAction) } -func (keycloakClient *KeycloakClient) DeleteRequiredAction(realmName string, alias string) error { - err := keycloakClient.delete(fmt.Sprintf("/realms/%s/authentication/required-actions/%s", realmName, alias), nil) +func (keycloakClient *KeycloakClient) DeleteRequiredAction(ctx context.Context, realmName string, alias string) error { + err := keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/authentication/required-actions/%s", realmName, alias), nil) if err != nil { // For whatever reason, this fails sometimes with a 500 during acceptance tests. try again - return keycloakClient.delete(fmt.Sprintf("/realms/%s/authentication/required-actions/%s", realmName, alias), nil) + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/authentication/required-actions/%s", realmName, alias), nil) } return nil } -func (keycloakClient *KeycloakClient) ValidateRequiredAction(requiredAction *RequiredAction) error { - serverInfo, err := keycloakClient.GetServerInfo() +func (keycloakClient *KeycloakClient) ValidateRequiredAction(ctx context.Context, requiredAction *RequiredAction) error { + serverInfo, err := keycloakClient.GetServerInfo(ctx) if err != nil { return err } diff --git a/keycloak/role.go b/keycloak/role.go index 8b9aa59ed..f935213d7 100644 --- a/keycloak/role.go +++ b/keycloak/role.go @@ -1,8 +1,9 @@ package keycloak import ( + "context" "fmt" - "log" + "github.com/hashicorp/terraform-plugin-log/tflog" "net/url" ) @@ -37,7 +38,7 @@ func roleByNameUrl(realmId, clientId string) string { return fmt.Sprintf("/realms/%s/clients/%s/roles", realmId, clientId) } -func (keycloakClient *KeycloakClient) CreateRole(role *Role) error { +func (keycloakClient *KeycloakClient) CreateRole(ctx context.Context, role *Role) error { roleUrl := roleByNameUrl(role.RealmId, role.ClientId) if role.ClientId != "" { @@ -45,7 +46,7 @@ func (keycloakClient *KeycloakClient) CreateRole(role *Role) error { role.ClientRole = true } - _, _, err := keycloakClient.post(roleUrl, role) + _, _, err := keycloakClient.post(ctx, roleUrl, role) if err != nil { return err } @@ -53,7 +54,7 @@ func (keycloakClient *KeycloakClient) CreateRole(role *Role) error { var createdRole Role var roleName = url.PathEscape(role.Name) - err = keycloakClient.get(fmt.Sprintf("%s/%s", roleUrl, roleName), &createdRole, nil) + err = keycloakClient.get(ctx, fmt.Sprintf("%s/%s", roleUrl, roleName), &createdRole, nil) if err != nil { return err } @@ -61,13 +62,13 @@ func (keycloakClient *KeycloakClient) CreateRole(role *Role) error { role.Id = createdRole.Id // seems like role attributes aren't respected on create, so a following update is needed - return keycloakClient.UpdateRole(role) + return keycloakClient.UpdateRole(ctx, role) } -func (keycloakClient *KeycloakClient) GetRealmRoles(realmId string) ([]*Role, error) { +func (keycloakClient *KeycloakClient) GetRealmRoles(ctx context.Context, realmId string) ([]*Role, error) { var roles []*Role - err := keycloakClient.get(fmt.Sprintf("/realms/%s/roles", realmId), &roles, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/roles", realmId), &roles, nil) if err != nil { return nil, err } @@ -79,13 +80,13 @@ func (keycloakClient *KeycloakClient) GetRealmRoles(realmId string) ([]*Role, er return roles, nil } -func (keycloakClient *KeycloakClient) GetClientRoles(realmId string, clients []*OpenidClient) ([]*Role, error) { +func (keycloakClient *KeycloakClient) GetClientRoles(ctx context.Context, realmId string, clients []*OpenidClient) ([]*Role, error) { var roles []*Role for _, client := range clients { var rolesClient []*Role - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/roles", realmId, client.Id), &rolesClient, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/roles", realmId, client.Id), &rolesClient, nil) if err != nil { return nil, err } @@ -101,14 +102,14 @@ func (keycloakClient *KeycloakClient) GetClientRoles(realmId string, clients []* return roles, nil } -func (keycloakClient *KeycloakClient) GetClientRoleUsers(realmId string, roles []*Role) (*[]UsersInRole, error) { +func (keycloakClient *KeycloakClient) GetClientRoleUsers(ctx context.Context, realmId string, roles []*Role) (*[]UsersInRole, error) { var usersInRoles []UsersInRole for _, role := range roles { var usersInRole UsersInRole usersInRole.Role = role - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/roles/%s/users", realmId, role.ClientId, role.Name), &usersInRole.Users, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/roles/%s/users", realmId, role.ClientId, role.Name), &usersInRole.Users, nil) if usersInRole.Users == nil { continue } @@ -122,9 +123,9 @@ func (keycloakClient *KeycloakClient) GetClientRoleUsers(realmId string, roles [ return &usersInRoles, nil } -func (keycloakClient *KeycloakClient) GetRole(realmId, id string) (*Role, error) { +func (keycloakClient *KeycloakClient) GetRole(ctx context.Context, realmId, id string) (*Role, error) { var role Role - err := keycloakClient.get(fmt.Sprintf("/realms/%s/roles-by-id/%s", realmId, id), &role, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/roles-by-id/%s", realmId, id), &role, nil) if err != nil { return nil, err } @@ -138,11 +139,11 @@ func (keycloakClient *KeycloakClient) GetRole(realmId, id string) (*Role, error) return &role, nil } -func (keycloakClient *KeycloakClient) GetRoleByName(realmId, clientId, name string) (*Role, error) { +func (keycloakClient *KeycloakClient) GetRoleByName(ctx context.Context, realmId, clientId, name string) (*Role, error) { var role Role var roleName = url.PathEscape(name) - err := keycloakClient.get(fmt.Sprintf("%s/%s", roleByNameUrl(realmId, clientId), roleName), &role, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("%s/%s", roleByNameUrl(realmId, clientId), roleName), &role, nil) if err != nil { return nil, err } @@ -156,23 +157,25 @@ func (keycloakClient *KeycloakClient) GetRoleByName(realmId, clientId, name stri return &role, nil } -func (keycloakClient *KeycloakClient) UpdateRole(role *Role) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/roles-by-id/%s", role.RealmId, role.Id), role) +func (keycloakClient *KeycloakClient) UpdateRole(ctx context.Context, role *Role) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/roles-by-id/%s", role.RealmId, role.Id), role) } -func (keycloakClient *KeycloakClient) DeleteRole(realmId, id string) error { - err := keycloakClient.delete(fmt.Sprintf("/realms/%s/roles-by-id/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteRole(ctx context.Context, realmId, id string) error { + err := keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/roles-by-id/%s", realmId, id), nil) if err != nil { - log.Printf("[DEBUG] Failed to delete role with id %s. Trying again...", id) + tflog.Debug(ctx, "Failed to delete role, trying again", map[string]interface{}{ + "roleId": id, + }) - return keycloakClient.delete(fmt.Sprintf("/realms/%s/roles-by-id/%s", realmId, id), nil) + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/roles-by-id/%s", realmId, id), nil) } return nil } -func (keycloakClient *KeycloakClient) AddCompositesToRole(role *Role, compositeRoles []*Role) error { - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/roles-by-id/%s/composites", role.RealmId, role.Id), compositeRoles) +func (keycloakClient *KeycloakClient) AddCompositesToRole(ctx context.Context, role *Role, compositeRoles []*Role) error { + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/roles-by-id/%s/composites", role.RealmId, role.Id), compositeRoles) if err != nil { return err } @@ -180,8 +183,8 @@ func (keycloakClient *KeycloakClient) AddCompositesToRole(role *Role, compositeR return nil } -func (keycloakClient *KeycloakClient) RemoveCompositesFromRole(role *Role, compositeRoles []*Role) error { - err := keycloakClient.delete(fmt.Sprintf("/realms/%s/roles-by-id/%s/composites", role.RealmId, role.Id), compositeRoles) +func (keycloakClient *KeycloakClient) RemoveCompositesFromRole(ctx context.Context, role *Role, compositeRoles []*Role) error { + err := keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/roles-by-id/%s/composites", role.RealmId, role.Id), compositeRoles) if err != nil { return err } @@ -189,10 +192,10 @@ func (keycloakClient *KeycloakClient) RemoveCompositesFromRole(role *Role, compo return nil } -func (keycloakClient *KeycloakClient) GetRoleComposites(role *Role) ([]*Role, error) { +func (keycloakClient *KeycloakClient) GetRoleComposites(ctx context.Context, role *Role) ([]*Role, error) { var composites []*Role - err := keycloakClient.get(fmt.Sprintf("/realms/%s/roles-by-id/%s/composites", role.RealmId, role.Id), &composites, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/roles-by-id/%s/composites", role.RealmId, role.Id), &composites, nil) if err != nil { return nil, err } diff --git a/keycloak/role_scope_mapping.go b/keycloak/role_scope_mapping.go index 10d07699b..eeb916791 100644 --- a/keycloak/role_scope_mapping.go +++ b/keycloak/role_scope_mapping.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -20,10 +21,10 @@ func roleScopeMappingUrl(realmId, clientId string, clientScopeId string, role *R } } -func (keycloakClient *KeycloakClient) CreateRoleScopeMapping(realmId string, clientId string, clientScopeId string, role *Role) error { +func (keycloakClient *KeycloakClient) CreateRoleScopeMapping(ctx context.Context, realmId string, clientId string, clientScopeId string, role *Role) error { roleUrl := roleScopeMappingUrl(realmId, clientId, clientScopeId, role) - _, _, err := keycloakClient.post(roleUrl, []Role{*role}) + _, _, err := keycloakClient.post(ctx, roleUrl, []Role{*role}) if err != nil { return err } @@ -31,11 +32,11 @@ func (keycloakClient *KeycloakClient) CreateRoleScopeMapping(realmId string, cli return nil } -func (keycloakClient *KeycloakClient) GetRoleScopeMapping(realmId string, clientId string, clientScopeId string, role *Role) (*Role, error) { +func (keycloakClient *KeycloakClient) GetRoleScopeMapping(ctx context.Context, realmId string, clientId string, clientScopeId string, role *Role) (*Role, error) { roleUrl := roleScopeMappingUrl(realmId, clientId, clientScopeId, role) var roles []Role - err := keycloakClient.get(roleUrl, &roles, nil) + err := keycloakClient.get(ctx, roleUrl, &roles, nil) if err != nil { return nil, err } @@ -49,7 +50,7 @@ func (keycloakClient *KeycloakClient) GetRoleScopeMapping(realmId string, client return nil, nil } -func (keycloakClient *KeycloakClient) DeleteRoleScopeMapping(realmId string, clientId string, clientScopeId string, role *Role) error { +func (keycloakClient *KeycloakClient) DeleteRoleScopeMapping(ctx context.Context, realmId string, clientId string, clientScopeId string, role *Role) error { roleUrl := roleScopeMappingUrl(realmId, clientId, clientScopeId, role) - return keycloakClient.delete(roleUrl, nil) + return keycloakClient.delete(ctx, roleUrl, nil) } diff --git a/keycloak/saml_client.go b/keycloak/saml_client.go index 8921bc0d5..d07d94807 100644 --- a/keycloak/saml_client.go +++ b/keycloak/saml_client.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "reflect" ) @@ -61,11 +62,11 @@ type SamlClient struct { AuthenticationFlowBindingOverrides SamlAuthenticationFlowBindingOverrides `json:"authenticationFlowBindingOverrides,omitempty"` } -func (keycloakClient *KeycloakClient) NewSamlClient(client *SamlClient) error { +func (keycloakClient *KeycloakClient) NewSamlClient(ctx context.Context, client *SamlClient) error { client.Protocol = "saml" client.ClientAuthenticatorType = "client-secret" - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/clients", client.RealmId), client) + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/clients", client.RealmId), client) if err != nil { return err } @@ -75,10 +76,10 @@ func (keycloakClient *KeycloakClient) NewSamlClient(client *SamlClient) error { return nil } -func (keycloakClient *KeycloakClient) GetSamlClient(realmId, id string) (*SamlClient, error) { +func (keycloakClient *KeycloakClient) GetSamlClient(ctx context.Context, realmId, id string) (*SamlClient, error) { var client SamlClient - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s", realmId, id), &client, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s", realmId, id), &client, nil) if err != nil { return nil, err } @@ -88,19 +89,19 @@ func (keycloakClient *KeycloakClient) GetSamlClient(realmId, id string) (*SamlCl return &client, nil } -func (keycloakClient *KeycloakClient) GetSamlClientInstallationProvider(realmId, id string, providerId string) ([]byte, error) { - value, err := keycloakClient.getRaw(fmt.Sprintf("/realms/%s/clients/%s/installation/providers/%s", realmId, id, providerId), nil) +func (keycloakClient *KeycloakClient) GetSamlClientInstallationProvider(ctx context.Context, realmId, id string, providerId string) ([]byte, error) { + value, err := keycloakClient.getRaw(ctx, fmt.Sprintf("/realms/%s/clients/%s/installation/providers/%s", realmId, id, providerId), nil) return value, err } -func (keycloakClient *KeycloakClient) GetSamlClientByClientId(realmId, clientId string) (*SamlClient, error) { +func (keycloakClient *KeycloakClient) GetSamlClientByClientId(ctx context.Context, realmId, clientId string) (*SamlClient, error) { var clients []SamlClient params := map[string]string{ "clientId": clientId, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients", realmId), &clients, params) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients", realmId), &clients, params) if err != nil { return nil, err } @@ -116,21 +117,21 @@ func (keycloakClient *KeycloakClient) GetSamlClientByClientId(realmId, clientId return &client, nil } -func (keycloakClient *KeycloakClient) UpdateSamlClient(client *SamlClient) error { +func (keycloakClient *KeycloakClient) UpdateSamlClient(ctx context.Context, client *SamlClient) error { client.Protocol = "saml" client.ClientAuthenticatorType = "client-secret" - return keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s", client.RealmId, client.Id), client) + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s", client.RealmId, client.Id), client) } -func (keycloakClient *KeycloakClient) DeleteSamlClient(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteSamlClient(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s", realmId, id), nil) } -func (keycloakClient *KeycloakClient) getSamlClientScopes(realmId, clientId, t string) ([]*SamlClientScope, error) { +func (keycloakClient *KeycloakClient) getSamlClientScopes(ctx context.Context, realmId, clientId, t string) ([]*SamlClientScope, error) { var scopes []*SamlClientScope - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/%s-client-scopes", realmId, clientId, t), &scopes, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/%s-client-scopes", realmId, clientId, t), &scopes, nil) if err != nil { return nil, err } @@ -138,25 +139,25 @@ func (keycloakClient *KeycloakClient) getSamlClientScopes(realmId, clientId, t s return scopes, nil } -func (keycloakClient *KeycloakClient) GetSamlClientDefaultScopes(realmId, clientId string) ([]*SamlClientScope, error) { - return keycloakClient.getSamlClientScopes(realmId, clientId, "default") +func (keycloakClient *KeycloakClient) GetSamlClientDefaultScopes(ctx context.Context, realmId, clientId string) ([]*SamlClientScope, error) { + return keycloakClient.getSamlClientScopes(ctx, realmId, clientId, "default") } -func (keycloakClient *KeycloakClient) attachSamlClientScopes(realmId, clientId, t string, scopeNames []string) error { - _, err := keycloakClient.GetSamlClient(realmId, clientId) +func (keycloakClient *KeycloakClient) attachSamlClientScopes(ctx context.Context, realmId, clientId, t string, scopeNames []string) error { + _, err := keycloakClient.GetSamlClient(ctx, realmId, clientId) if err != nil && ErrorIs404(err) { return fmt.Errorf("validation error: client with id %s does not exist", clientId) } else if err != nil { return err } - allSamlClientScopes, err := keycloakClient.ListSamlClientScopesWithFilter(realmId, includeSamlClientScopesMatchingNames(scopeNames)) + allSamlClientScopes, err := keycloakClient.ListSamlClientScopesWithFilter(ctx, realmId, includeSamlClientScopesMatchingNames(scopeNames)) if err != nil { return err } for _, samlClientScope := range allSamlClientScopes { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/clients/%s/%s-client-scopes/%s", realmId, clientId, t, samlClientScope.Id), nil) + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/clients/%s/%s-client-scopes/%s", realmId, clientId, t, samlClientScope.Id), nil) if err != nil { return err } @@ -165,18 +166,18 @@ func (keycloakClient *KeycloakClient) attachSamlClientScopes(realmId, clientId, return nil } -func (keycloakClient *KeycloakClient) AttachSamlClientDefaultScopes(realmId, clientId string, scopeNames []string) error { - return keycloakClient.attachSamlClientScopes(realmId, clientId, "default", scopeNames) +func (keycloakClient *KeycloakClient) AttachSamlClientDefaultScopes(ctx context.Context, realmId, clientId string, scopeNames []string) error { + return keycloakClient.attachSamlClientScopes(ctx, realmId, clientId, "default", scopeNames) } -func (keycloakClient *KeycloakClient) detachSamlClientScopes(realmId, clientId, t string, scopeNames []string) error { - allSamlClientScopes, err := keycloakClient.ListSamlClientScopesWithFilter(realmId, includeSamlClientScopesMatchingNames(scopeNames)) +func (keycloakClient *KeycloakClient) detachSamlClientScopes(ctx context.Context, realmId, clientId, t string, scopeNames []string) error { + allSamlClientScopes, err := keycloakClient.ListSamlClientScopesWithFilter(ctx, realmId, includeSamlClientScopesMatchingNames(scopeNames)) if err != nil { return err } for _, samlClientScope := range allSamlClientScopes { - err := keycloakClient.delete(fmt.Sprintf("/realms/%s/clients/%s/%s-client-scopes/%s", realmId, clientId, t, samlClientScope.Id), nil) + err := keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/clients/%s/%s-client-scopes/%s", realmId, clientId, t, samlClientScope.Id), nil) if err != nil { return err } @@ -185,8 +186,8 @@ func (keycloakClient *KeycloakClient) detachSamlClientScopes(realmId, clientId, return nil } -func (keycloakClient *KeycloakClient) DetachSamlClientDefaultScopes(realmId, clientId string, scopeNames []string) error { - return keycloakClient.detachSamlClientScopes(realmId, clientId, "default", scopeNames) +func (keycloakClient *KeycloakClient) DetachSamlClientDefaultScopes(ctx context.Context, realmId, clientId string, scopeNames []string) error { + return keycloakClient.detachSamlClientScopes(ctx, realmId, clientId, "default", scopeNames) } func (f *SamlClientAttributes) UnmarshalJSON(data []byte) error { diff --git a/keycloak/saml_client_scope.go b/keycloak/saml_client_scope.go index b06ceb8b8..4b9365be0 100644 --- a/keycloak/saml_client_scope.go +++ b/keycloak/saml_client_scope.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -19,10 +20,10 @@ type SamlClientScope struct { type SamlClientScopeFilterFunc func(*SamlClientScope) bool -func (keycloakClient *KeycloakClient) NewSamlClientScope(clientScope *SamlClientScope) error { +func (keycloakClient *KeycloakClient) NewSamlClientScope(ctx context.Context, clientScope *SamlClientScope) error { clientScope.Protocol = "saml" - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/client-scopes", clientScope.RealmId), clientScope) + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/client-scopes", clientScope.RealmId), clientScope) if err != nil { return err } @@ -32,10 +33,10 @@ func (keycloakClient *KeycloakClient) NewSamlClientScope(clientScope *SamlClient return nil } -func (keycloakClient *KeycloakClient) GetSamlClientScope(realmId, id string) (*SamlClientScope, error) { +func (keycloakClient *KeycloakClient) GetSamlClientScope(ctx context.Context, realmId, id string) (*SamlClientScope, error) { var clientScope SamlClientScope - err := keycloakClient.get(fmt.Sprintf("/realms/%s/client-scopes/%s", realmId, id), &clientScope, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/client-scopes/%s", realmId, id), &clientScope, nil) if err != nil { return nil, err } @@ -45,10 +46,10 @@ func (keycloakClient *KeycloakClient) GetSamlClientScope(realmId, id string) (*S return &clientScope, nil } -func (keycloakClient *KeycloakClient) GetSamlDefaultClientScopes(realmId, clientId string) (*[]SamlClientScope, error) { +func (keycloakClient *KeycloakClient) GetSamlDefaultClientScopes(ctx context.Context, realmId, clientId string) (*[]SamlClientScope, error) { var clientScopes []SamlClientScope - err := keycloakClient.get(fmt.Sprintf("/realms/%s/clients/%s/default-client-scopes", realmId, clientId), &clientScopes, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/clients/%s/default-client-scopes", realmId, clientId), &clientScopes, nil) if err != nil { return nil, err } @@ -60,21 +61,21 @@ func (keycloakClient *KeycloakClient) GetSamlDefaultClientScopes(realmId, client return &clientScopes, nil } -func (keycloakClient *KeycloakClient) UpdateSamlClientScope(clientScope *SamlClientScope) error { +func (keycloakClient *KeycloakClient) UpdateSamlClientScope(ctx context.Context, clientScope *SamlClientScope) error { clientScope.Protocol = "saml" - return keycloakClient.put(fmt.Sprintf("/realms/%s/client-scopes/%s", clientScope.RealmId, clientScope.Id), clientScope) + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/client-scopes/%s", clientScope.RealmId, clientScope.Id), clientScope) } -func (keycloakClient *KeycloakClient) DeleteSamlClientScope(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/client-scopes/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteSamlClientScope(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/client-scopes/%s", realmId, id), nil) } -func (keycloakClient *KeycloakClient) ListSamlClientScopesWithFilter(realmId string, filter SamlClientScopeFilterFunc) ([]*SamlClientScope, error) { +func (keycloakClient *KeycloakClient) ListSamlClientScopesWithFilter(ctx context.Context, realmId string, filter SamlClientScopeFilterFunc) ([]*SamlClientScope, error) { var clientScopes []SamlClientScope var samlClientScopes []*SamlClientScope - err := keycloakClient.get(fmt.Sprintf("/realms/%s/client-scopes", realmId), &clientScopes, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/client-scopes", realmId), &clientScopes, nil) if err != nil { return nil, err } diff --git a/keycloak/saml_script_protocol_mapper.go b/keycloak/saml_script_protocol_mapper.go index ed7e1fd04..6b5502892 100644 --- a/keycloak/saml_script_protocol_mapper.go +++ b/keycloak/saml_script_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" "strconv" ) @@ -58,10 +59,10 @@ func (protocolMapper *protocolMapper) convertToSamlScriptProtocolMapper(realmId, }, nil } -func (keycloakClient *KeycloakClient) GetSamlScriptProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*SamlScriptProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetSamlScriptProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*SamlScriptProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -69,14 +70,14 @@ func (keycloakClient *KeycloakClient) GetSamlScriptProtocolMapper(realmId, clien return protocolMapper.convertToSamlScriptProtocolMapper(realmId, clientId, clientScopeId) } -func (keycloakClient *KeycloakClient) DeleteSamlScriptProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteSamlScriptProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewSamlScriptProtocolMapper(mapper *SamlScriptProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewSamlScriptProtocolMapper(ctx context.Context, mapper *SamlScriptProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -86,18 +87,18 @@ func (keycloakClient *KeycloakClient) NewSamlScriptProtocolMapper(mapper *SamlSc return nil } -func (keycloakClient *KeycloakClient) UpdateSamlScriptProtocolMapper(mapper *SamlScriptProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateSamlScriptProtocolMapper(ctx context.Context, mapper *SamlScriptProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateSamlScriptProtocolMapper(mapper *SamlScriptProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateSamlScriptProtocolMapper(ctx context.Context, mapper *SamlScriptProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/saml_user_attribute_protocol_mapper.go b/keycloak/saml_user_attribute_protocol_mapper.go index 5c760fdd7..363ef89d2 100644 --- a/keycloak/saml_user_attribute_protocol_mapper.go +++ b/keycloak/saml_user_attribute_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -47,10 +48,10 @@ func (protocolMapper *protocolMapper) convertToSamlUserAttributeProtocolMapper(r } } -func (keycloakClient *KeycloakClient) GetSamlUserAttributeProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*SamlUserAttributeProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetSamlUserAttributeProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*SamlUserAttributeProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -58,14 +59,14 @@ func (keycloakClient *KeycloakClient) GetSamlUserAttributeProtocolMapper(realmId return protocolMapper.convertToSamlUserAttributeProtocolMapper(realmId, clientId, clientScopeId), nil } -func (keycloakClient *KeycloakClient) DeleteSamlUserAttributeProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteSamlUserAttributeProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewSamlUserAttributeProtocolMapper(mapper *SamlUserAttributeProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewSamlUserAttributeProtocolMapper(ctx context.Context, mapper *SamlUserAttributeProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -75,18 +76,18 @@ func (keycloakClient *KeycloakClient) NewSamlUserAttributeProtocolMapper(mapper return nil } -func (keycloakClient *KeycloakClient) UpdateSamlUserAttributeProtocolMapper(mapper *SamlUserAttributeProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateSamlUserAttributeProtocolMapper(ctx context.Context, mapper *SamlUserAttributeProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateSamlUserAttributeProtocolMapper(mapper *SamlUserAttributeProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateSamlUserAttributeProtocolMapper(ctx context.Context, mapper *SamlUserAttributeProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/saml_user_property_protocol_mapper.go b/keycloak/saml_user_property_protocol_mapper.go index 3024ca8a7..b91f3afeb 100644 --- a/keycloak/saml_user_property_protocol_mapper.go +++ b/keycloak/saml_user_property_protocol_mapper.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -47,10 +48,10 @@ func (protocolMapper *protocolMapper) convertToSamlUserPropertyProtocolMapper(re } } -func (keycloakClient *KeycloakClient) GetSamlUserPropertyProtocolMapper(realmId, clientId, clientScopeId, mapperId string) (*SamlUserPropertyProtocolMapper, error) { +func (keycloakClient *KeycloakClient) GetSamlUserPropertyProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) (*SamlUserPropertyProtocolMapper, error) { var protocolMapper *protocolMapper - err := keycloakClient.get(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) + err := keycloakClient.get(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), &protocolMapper, nil) if err != nil { return nil, err } @@ -58,14 +59,14 @@ func (keycloakClient *KeycloakClient) GetSamlUserPropertyProtocolMapper(realmId, return protocolMapper.convertToSamlUserPropertyProtocolMapper(realmId, clientId, clientScopeId), nil } -func (keycloakClient *KeycloakClient) DeleteSamlUserPropertyProtocolMapper(realmId, clientId, clientScopeId, mapperId string) error { - return keycloakClient.delete(individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) +func (keycloakClient *KeycloakClient) DeleteSamlUserPropertyProtocolMapper(ctx context.Context, realmId, clientId, clientScopeId, mapperId string) error { + return keycloakClient.delete(ctx, individualProtocolMapperPath(realmId, clientId, clientScopeId, mapperId), nil) } -func (keycloakClient *KeycloakClient) NewSamlUserPropertyProtocolMapper(mapper *SamlUserPropertyProtocolMapper) error { +func (keycloakClient *KeycloakClient) NewSamlUserPropertyProtocolMapper(ctx context.Context, mapper *SamlUserPropertyProtocolMapper) error { path := protocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) - _, location, err := keycloakClient.post(path, mapper.convertToGenericProtocolMapper()) + _, location, err := keycloakClient.post(ctx, path, mapper.convertToGenericProtocolMapper()) if err != nil { return err } @@ -75,18 +76,18 @@ func (keycloakClient *KeycloakClient) NewSamlUserPropertyProtocolMapper(mapper * return nil } -func (keycloakClient *KeycloakClient) UpdateSamlUserPropertyProtocolMapper(mapper *SamlUserPropertyProtocolMapper) error { +func (keycloakClient *KeycloakClient) UpdateSamlUserPropertyProtocolMapper(ctx context.Context, mapper *SamlUserPropertyProtocolMapper) error { path := individualProtocolMapperPath(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) - return keycloakClient.put(path, mapper.convertToGenericProtocolMapper()) + return keycloakClient.put(ctx, path, mapper.convertToGenericProtocolMapper()) } -func (keycloakClient *KeycloakClient) ValidateSamlUserPropertyProtocolMapper(mapper *SamlUserPropertyProtocolMapper) error { +func (keycloakClient *KeycloakClient) ValidateSamlUserPropertyProtocolMapper(ctx context.Context, mapper *SamlUserPropertyProtocolMapper) error { if mapper.ClientId == "" && mapper.ClientScopeId == "" { return fmt.Errorf("validation error: one of ClientId or ClientScopeId must be set") } - protocolMappers, err := keycloakClient.listGenericProtocolMappers(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) + protocolMappers, err := keycloakClient.listGenericProtocolMappers(ctx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId) if err != nil { return err } diff --git a/keycloak/server_info.go b/keycloak/server_info.go index 0a0898d5e..9e0f34948 100644 --- a/keycloak/server_info.go +++ b/keycloak/server_info.go @@ -1,5 +1,7 @@ package keycloak +import "context" + type SystemInfo struct { ServerVersion string `json:"version"` } @@ -71,10 +73,10 @@ func (serverInfo *ServerInfo) providerInstalled(providerType, providerName strin return false } -func (keycloakClient *KeycloakClient) GetServerInfo() (*ServerInfo, error) { +func (keycloakClient *KeycloakClient) GetServerInfo(ctx context.Context) (*ServerInfo, error) { var serverInfo ServerInfo - err := keycloakClient.get("/serverinfo", &serverInfo, nil) + err := keycloakClient.get(ctx, "/serverinfo", &serverInfo, nil) if err != nil { return nil, err } diff --git a/keycloak/user.go b/keycloak/user.go index 583e26b8e..709beff0e 100644 --- a/keycloak/user.go +++ b/keycloak/user.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -32,7 +33,7 @@ type PasswordCredentials struct { Temporary bool `json:"temporary"` } -func (keycloakClient *KeycloakClient) NewUser(user *User) error { +func (keycloakClient *KeycloakClient) NewUser(ctx context.Context, user *User) error { newUser := User{ Id: user.Id, RealmId: user.RealmId, @@ -44,7 +45,7 @@ func (keycloakClient *KeycloakClient) NewUser(user *User) error { Enabled: user.Enabled, Attributes: user.Attributes, } - _, location, err := keycloakClient.post(fmt.Sprintf("/realms/%s/users", user.RealmId), newUser) + _, location, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/users", user.RealmId), newUser) if err != nil { return err } @@ -52,7 +53,7 @@ func (keycloakClient *KeycloakClient) NewUser(user *User) error { user.Id = getIdFromLocationHeader(location) for _, federatedIdentity := range user.FederatedIdentities { - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/users/%s/federated-identity/%s", user.RealmId, user.Id, federatedIdentity.IdentityProvider), federatedIdentity) + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/users/%s/federated-identity/%s", user.RealmId, user.Id, federatedIdentity.IdentityProvider), federatedIdentity) if err != nil { return err } @@ -61,24 +62,24 @@ func (keycloakClient *KeycloakClient) NewUser(user *User) error { return nil } -func (keycloakClient *KeycloakClient) ResetUserPassword(realmId, userId string, newPassword string, isTemporary bool) error { +func (keycloakClient *KeycloakClient) ResetUserPassword(ctx context.Context, realmId, userId string, newPassword string, isTemporary bool) error { resetCredentials := &PasswordCredentials{ Value: newPassword, Type: "password", Temporary: isTemporary, } - err := keycloakClient.put(fmt.Sprintf("/realms/%s/users/%s/reset-password", realmId, userId), resetCredentials) + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/users/%s/reset-password", realmId, userId), resetCredentials) if err != nil { return err } return nil } -func (keycloakClient *KeycloakClient) GetUsers(realmId string) ([]*User, error) { +func (keycloakClient *KeycloakClient) GetUsers(ctx context.Context, realmId string) ([]*User, error) { var users []*User - err := keycloakClient.get(fmt.Sprintf("/realms/%s/users", realmId), &users, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/users", realmId), &users, nil) if err != nil { return nil, err } @@ -90,10 +91,10 @@ func (keycloakClient *KeycloakClient) GetUsers(realmId string) ([]*User, error) return users, nil } -func (keycloakClient *KeycloakClient) GetUser(realmId, id string) (*User, error) { +func (keycloakClient *KeycloakClient) GetUser(ctx context.Context, realmId, id string) (*User, error) { var user User - err := keycloakClient.get(fmt.Sprintf("/realms/%s/users/%s", realmId, id), &user, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/users/%s", realmId, id), &user, nil) if err != nil { return nil, err } @@ -103,24 +104,24 @@ func (keycloakClient *KeycloakClient) GetUser(realmId, id string) (*User, error) return &user, nil } -func (keycloakClient *KeycloakClient) UpdateUser(user *User) error { - err := keycloakClient.put(fmt.Sprintf("/realms/%s/users/%s", user.RealmId, user.Id), user) +func (keycloakClient *KeycloakClient) UpdateUser(ctx context.Context, user *User) error { + err := keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/users/%s", user.RealmId, user.Id), user) if err != nil { return err } var federatedIdentities []*FederatedIdentity - err = keycloakClient.get(fmt.Sprintf("/realms/%s/users/%s/federated-identity", user.RealmId, user.Id), &federatedIdentities, nil) + err = keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/users/%s/federated-identity", user.RealmId, user.Id), &federatedIdentities, nil) if err != nil { return err } for _, federatedIdentity := range federatedIdentities { - keycloakClient.delete(fmt.Sprintf("/realms/%s/users/%s/federated-identity/%s", user.RealmId, user.Id, federatedIdentity.IdentityProvider), nil) + keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/users/%s/federated-identity/%s", user.RealmId, user.Id, federatedIdentity.IdentityProvider), nil) } for _, federatedIdentity := range user.FederatedIdentities { - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/users/%s/federated-identity/%s", user.RealmId, user.Id, federatedIdentity.IdentityProvider), federatedIdentity) + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/users/%s/federated-identity/%s", user.RealmId, user.Id, federatedIdentity.IdentityProvider), federatedIdentity) if err != nil { return err } @@ -129,18 +130,18 @@ func (keycloakClient *KeycloakClient) UpdateUser(user *User) error { return nil } -func (keycloakClient *KeycloakClient) DeleteUser(realmId, id string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/users/%s", realmId, id), nil) +func (keycloakClient *KeycloakClient) DeleteUser(ctx context.Context, realmId, id string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/users/%s", realmId, id), nil) } -func (keycloakClient *KeycloakClient) GetUserByUsername(realmId, username string) (*User, error) { +func (keycloakClient *KeycloakClient) GetUserByUsername(ctx context.Context, realmId, username string) (*User, error) { var users []*User params := map[string]string{ "username": username, } - err := keycloakClient.get(fmt.Sprintf("/realms/%s/users", realmId), &users, params) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/users", realmId), &users, params) if err != nil { return nil, err } @@ -160,9 +161,9 @@ func (keycloakClient *KeycloakClient) GetUserByUsername(realmId, username string return nil, nil } -func (keycloakClient *KeycloakClient) GetUserGroups(realmId, userId string) ([]*Group, error) { +func (keycloakClient *KeycloakClient) GetUserGroups(ctx context.Context, realmId, userId string) ([]*Group, error) { var groups []*Group - err := keycloakClient.get(fmt.Sprintf("/realms/%s/users/%s/groups/", realmId, userId), &groups, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/users/%s/groups/", realmId, userId), &groups, nil) if err != nil { return nil, err @@ -171,13 +172,13 @@ func (keycloakClient *KeycloakClient) GetUserGroups(realmId, userId string) ([]* return groups, nil } -func (keycloakClient *KeycloakClient) addUserToGroup(user *User, groupId string) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/users/%s/groups/%s", user.RealmId, user.Id, groupId), nil) +func (keycloakClient *KeycloakClient) addUserToGroup(ctx context.Context, user *User, groupId string) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/users/%s/groups/%s", user.RealmId, user.Id, groupId), nil) } -func (keycloakClient *KeycloakClient) AddUsersToGroup(realmId, groupId string, users []interface{}) error { +func (keycloakClient *KeycloakClient) AddUsersToGroup(ctx context.Context, realmId, groupId string, users []interface{}) error { for _, username := range users { - user, err := keycloakClient.GetUserByUsername(realmId, username.(string)) // we need the user's id in order to add them to a group + user, err := keycloakClient.GetUserByUsername(ctx, realmId, username.(string)) // we need the user's id in order to add them to a group if err != nil { return err } @@ -185,7 +186,7 @@ func (keycloakClient *KeycloakClient) AddUsersToGroup(realmId, groupId string, u return fmt.Errorf("user with username %s does not exist", username.(string)) } - err = keycloakClient.addUserToGroup(user, groupId) + err = keycloakClient.addUserToGroup(ctx, user, groupId) if err != nil { return err } @@ -194,13 +195,13 @@ func (keycloakClient *KeycloakClient) AddUsersToGroup(realmId, groupId string, u return nil } -func (keycloakClient *KeycloakClient) RemoveUserFromGroup(user *User, groupId string) error { - return keycloakClient.delete(fmt.Sprintf("/realms/%s/users/%s/groups/%s", user.RealmId, user.Id, groupId), nil) +func (keycloakClient *KeycloakClient) RemoveUserFromGroup(ctx context.Context, user *User, groupId string) error { + return keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/users/%s/groups/%s", user.RealmId, user.Id, groupId), nil) } -func (keycloakClient *KeycloakClient) RemoveUsersFromGroup(realmId, groupId string, usernames []interface{}) error { +func (keycloakClient *KeycloakClient) RemoveUsersFromGroup(ctx context.Context, realmId, groupId string, usernames []interface{}) error { for _, username := range usernames { - user, err := keycloakClient.GetUserByUsername(realmId, username.(string)) // we need the user's id in order to remove them from a group + user, err := keycloakClient.GetUserByUsername(ctx, realmId, username.(string)) // we need the user's id in order to remove them from a group if err != nil { return err } @@ -208,7 +209,7 @@ func (keycloakClient *KeycloakClient) RemoveUsersFromGroup(realmId, groupId stri return fmt.Errorf("user with username %s does not exist", username.(string)) } - err = keycloakClient.RemoveUserFromGroup(user, groupId) + err = keycloakClient.RemoveUserFromGroup(ctx, user, groupId) if err != nil { return err } @@ -217,12 +218,12 @@ func (keycloakClient *KeycloakClient) RemoveUsersFromGroup(realmId, groupId stri return nil } -func (keycloakClient *KeycloakClient) AddUserToGroups(groupIds []string, userId string, realmId string) error { +func (keycloakClient *KeycloakClient) AddUserToGroups(ctx context.Context, groupIds []string, userId string, realmId string) error { for _, groupId := range groupIds { var user User user.Id = userId user.RealmId = realmId - err := keycloakClient.addUserToGroup(&user, groupId) + err := keycloakClient.addUserToGroup(ctx, &user, groupId) if err != nil { return err @@ -231,12 +232,12 @@ func (keycloakClient *KeycloakClient) AddUserToGroups(groupIds []string, userId return nil } -func (keycloakClient *KeycloakClient) RemoveUserFromGroups(groupIds []string, userId string, realmId string) error { +func (keycloakClient *KeycloakClient) RemoveUserFromGroups(ctx context.Context, groupIds []string, userId string, realmId string) error { for _, groupId := range groupIds { var user User user.Id = userId user.RealmId = realmId - err := keycloakClient.RemoveUserFromGroup(&user, groupId) + err := keycloakClient.RemoveUserFromGroup(ctx, &user, groupId) if err != nil { return err diff --git a/keycloak/user_role_mappings.go b/keycloak/user_role_mappings.go index ce1e8dd21..cab9043ac 100644 --- a/keycloak/user_role_mappings.go +++ b/keycloak/user_role_mappings.go @@ -1,10 +1,13 @@ package keycloak -import "fmt" +import ( + "context" + "fmt" +) -func (keycloakClient *KeycloakClient) GetUserRoleMappings(realmId string, userId string) (*RoleMapping, error) { +func (keycloakClient *KeycloakClient) GetUserRoleMappings(ctx context.Context, realmId string, userId string) (*RoleMapping, error) { var roleMapping *RoleMapping - err := keycloakClient.get(fmt.Sprintf("/realms/%s/users/%s/role-mappings", realmId, userId), &roleMapping, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings", realmId, userId), &roleMapping, nil) if err != nil { return nil, err } @@ -12,26 +15,26 @@ func (keycloakClient *KeycloakClient) GetUserRoleMappings(realmId string, userId return roleMapping, nil } -func (keycloakClient *KeycloakClient) AddRealmRolesToUser(realmId, userId string, roles []*Role) error { - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm", realmId, userId), roles) +func (keycloakClient *KeycloakClient) AddRealmRolesToUser(ctx context.Context, realmId, userId string, roles []*Role) error { + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm", realmId, userId), roles) return err } -func (keycloakClient *KeycloakClient) AddClientRolesToUser(realmId, userId, clientId string, roles []*Role) error { - _, _, err := keycloakClient.post(fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", realmId, userId, clientId), roles) +func (keycloakClient *KeycloakClient) AddClientRolesToUser(ctx context.Context, realmId, userId, clientId string, roles []*Role) error { + _, _, err := keycloakClient.post(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", realmId, userId, clientId), roles) return err } -func (keycloakClient *KeycloakClient) RemoveRealmRolesFromUser(realmId, userId string, roles []*Role) error { - err := keycloakClient.delete(fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm", realmId, userId), roles) +func (keycloakClient *KeycloakClient) RemoveRealmRolesFromUser(ctx context.Context, realmId, userId string, roles []*Role) error { + err := keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings/realm", realmId, userId), roles) return err } -func (keycloakClient *KeycloakClient) RemoveClientRolesFromUser(realmId, userId, clientId string, roles []*Role) error { - err := keycloakClient.delete(fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", realmId, userId, clientId), roles) +func (keycloakClient *KeycloakClient) RemoveClientRolesFromUser(ctx context.Context, realmId, userId, clientId string, roles []*Role) error { + err := keycloakClient.delete(ctx, fmt.Sprintf("/realms/%s/users/%s/role-mappings/clients/%s", realmId, userId, clientId), roles) return err } diff --git a/keycloak/users_permissions.go b/keycloak/users_permissions.go index eccf7e1d3..74a5ce1be 100644 --- a/keycloak/users_permissions.go +++ b/keycloak/users_permissions.go @@ -1,6 +1,7 @@ package keycloak import ( + "context" "fmt" ) @@ -15,18 +16,18 @@ type UsersPermissions struct { ScopePermissions map[string]string `json:"scopePermissions"` } -func (keycloakClient *KeycloakClient) EnableUsersPermissions(realmId string) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/users-management-permissions", realmId), UsersPermissionsInput{Enabled: true}) +func (keycloakClient *KeycloakClient) EnableUsersPermissions(ctx context.Context, realmId string) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/users-management-permissions", realmId), UsersPermissionsInput{Enabled: true}) } -func (keycloakClient *KeycloakClient) DisableUsersPermissions(realmId string) error { - return keycloakClient.put(fmt.Sprintf("/realms/%s/users-management-permissions", realmId), UsersPermissionsInput{Enabled: false}) +func (keycloakClient *KeycloakClient) DisableUsersPermissions(ctx context.Context, realmId string) error { + return keycloakClient.put(ctx, fmt.Sprintf("/realms/%s/users-management-permissions", realmId), UsersPermissionsInput{Enabled: false}) } -func (keycloakClient *KeycloakClient) GetUsersPermissions(realmId string) (*UsersPermissions, error) { +func (keycloakClient *KeycloakClient) GetUsersPermissions(ctx context.Context, realmId string) (*UsersPermissions, error) { var openidClientPermissions UsersPermissions - err := keycloakClient.get(fmt.Sprintf("/realms/%s/users-management-permissions", realmId), &openidClientPermissions, nil) + err := keycloakClient.get(ctx, fmt.Sprintf("/realms/%s/users-management-permissions", realmId), &openidClientPermissions, nil) if err != nil { return nil, err } diff --git a/keycloak/version.go b/keycloak/version.go index 6bcf86d00..9c9c62bf1 100644 --- a/keycloak/version.go +++ b/keycloak/version.go @@ -1,6 +1,9 @@ package keycloak -import "github.com/hashicorp/go-version" +import ( + "context" + "github.com/hashicorp/go-version" +) type Version string @@ -17,9 +20,9 @@ const ( Version_15 Version = "15.0.0" ) -func (keycloakClient *KeycloakClient) VersionIsGreaterThanOrEqualTo(versionString Version) (bool, error) { +func (keycloakClient *KeycloakClient) VersionIsGreaterThanOrEqualTo(ctx context.Context, versionString Version) (bool, error) { if keycloakClient.version == nil { - err := keycloakClient.login() + err := keycloakClient.login(ctx) if err != nil { return false, err } @@ -33,9 +36,9 @@ func (keycloakClient *KeycloakClient) VersionIsGreaterThanOrEqualTo(versionStrin return keycloakClient.version.GreaterThanOrEqual(v), nil } -func (keycloakClient *KeycloakClient) VersionIsLessThanOrEqualTo(versionString Version) (bool, error) { +func (keycloakClient *KeycloakClient) VersionIsLessThanOrEqualTo(ctx context.Context, versionString Version) (bool, error) { if keycloakClient.version == nil { - err := keycloakClient.login() + err := keycloakClient.login(ctx) if err != nil { return false, err } diff --git a/provider/data_source_keycloak_authentication_execution.go b/provider/data_source_keycloak_authentication_execution.go index a4cc1c337..b0db979cf 100644 --- a/provider/data_source_keycloak_authentication_execution.go +++ b/provider/data_source_keycloak_authentication_execution.go @@ -1,13 +1,15 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func dataSourceKeycloakAuthenticationExecution() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakAuthenticationExecutionRead, + ReadContext: dataSourceKeycloakAuthenticationExecutionRead, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -25,16 +27,16 @@ func dataSourceKeycloakAuthenticationExecution() *schema.Resource { } } -func dataSourceKeycloakAuthenticationExecutionRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakAuthenticationExecutionRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmID := data.Get("realm_id").(string) parentFlowAlias := data.Get("parent_flow_alias").(string) providerID := data.Get("provider_id").(string) - authenticationExecutionInfo, err := keycloakClient.GetAuthenticationExecutionInfoFromProviderId(realmID, parentFlowAlias, providerID) + authenticationExecutionInfo, err := keycloakClient.GetAuthenticationExecutionInfoFromProviderId(ctx, realmID, parentFlowAlias, providerID) if err != nil { - return err + return diag.FromErr(err) } mapFromAuthenticationExecutionInfoToData(data, authenticationExecutionInfo) diff --git a/provider/data_source_keycloak_authentication_execution_test.go b/provider/data_source_keycloak_authentication_execution_test.go index 6826dab5b..ad788631d 100644 --- a/provider/data_source_keycloak_authentication_execution_test.go +++ b/provider/data_source_keycloak_authentication_execution_test.go @@ -12,6 +12,7 @@ import ( func TestAccKeycloakDataSourceAuthenticationExecution_basic(t *testing.T) { t.Parallel() + parentFlowAlias := acctest.RandomWithPrefix("tf-acc") resource.Test(t, resource.TestCase{ @@ -80,7 +81,7 @@ func testAccCheckDataKeycloakAuthenticationExecution(resourceName string) resour parentFlowAlias := rs.Primary.Attributes["parent_flow_alias"] providerID := rs.Primary.Attributes["provider_id"] - authenticationExecutionInfo, err := keycloakClient.GetAuthenticationExecutionInfoFromProviderId(realmID, parentFlowAlias, providerID) + authenticationExecutionInfo, err := keycloakClient.GetAuthenticationExecutionInfoFromProviderId(testCtx, realmID, parentFlowAlias, providerID) if err != nil { return err } diff --git a/provider/data_source_keycloak_authentication_flow.go b/provider/data_source_keycloak_authentication_flow.go index d2236b42b..ea15b54dd 100644 --- a/provider/data_source_keycloak_authentication_flow.go +++ b/provider/data_source_keycloak_authentication_flow.go @@ -1,13 +1,15 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func dataSourceKeycloakAuthenticationFlow() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakAuthenticationFlowRead, + ReadContext: dataSourceKeycloakAuthenticationFlowRead, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -21,15 +23,15 @@ func dataSourceKeycloakAuthenticationFlow() *schema.Resource { } } -func dataSourceKeycloakAuthenticationFlowRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakAuthenticationFlowRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmID := data.Get("realm_id").(string) alias := data.Get("alias").(string) - authenticationFlowInfo, err := keycloakClient.GetAuthenticationFlowFromAlias(realmID, alias) + authenticationFlowInfo, err := keycloakClient.GetAuthenticationFlowFromAlias(ctx, realmID, alias) if err != nil { - return err + return diag.FromErr(err) } mapFromAuthenticationFlowInfoToData(data, authenticationFlowInfo) diff --git a/provider/data_source_keycloak_authentication_flow_test.go b/provider/data_source_keycloak_authentication_flow_test.go index 06cd11c4a..03f2fcf2c 100644 --- a/provider/data_source_keycloak_authentication_flow_test.go +++ b/provider/data_source_keycloak_authentication_flow_test.go @@ -12,6 +12,7 @@ import ( func TestAccKeycloakDataSourceAuthenticationFlow_basic(t *testing.T) { t.Parallel() + alias := acctest.RandomWithPrefix("tf-acc") resource.Test(t, resource.TestCase{ @@ -41,7 +42,7 @@ func testAccCheckDataKeycloakAuthenticationFlow(resourceName string) resource.Te id := rs.Primary.ID realmID := rs.Primary.Attributes["realm_id"] - authenticationFlow, err := keycloakClient.GetAuthenticationFlow(realmID, id) + authenticationFlow, err := keycloakClient.GetAuthenticationFlow(testCtx, realmID, id) if err != nil { return err } diff --git a/provider/data_source_keycloak_client_description_converter.go b/provider/data_source_keycloak_client_description_converter.go index 45e8a9c21..7c177f5f2 100644 --- a/provider/data_source_keycloak_client_description_converter.go +++ b/provider/data_source_keycloak_client_description_converter.go @@ -1,13 +1,15 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func dataSourceKeycloakClientDescriptionConverter() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakClientDescriptionConverterRead, + ReadContext: dataSourceKeycloakClientDescriptionConverterRead, Schema: map[string]*schema.Schema{ "realm_id": { @@ -231,16 +233,16 @@ func setClientDescriptionConverterData(data *schema.ResourceData, description *k data.Set("web_origins", description.WebOrigins) } -func dataSourceKeycloakClientDescriptionConverterRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakClientDescriptionConverterRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) body := data.Get("body").(string) - description, err := keycloakClient.NewGenericClientDescription(realmId, body) + description, err := keycloakClient.NewGenericClientDescription(ctx, realmId, body) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setClientDescriptionConverterData(data, description) diff --git a/provider/data_source_keycloak_group.go b/provider/data_source_keycloak_group.go index c528f07a8..86427d054 100644 --- a/provider/data_source_keycloak_group.go +++ b/provider/data_source_keycloak_group.go @@ -1,13 +1,15 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func dataSourceKeycloakGroup() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakGroupRead, + ReadContext: dataSourceKeycloakGroupRead, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -33,15 +35,15 @@ func dataSourceKeycloakGroup() *schema.Resource { } } -func dataSourceKeycloakGroupRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakGroupRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) groupName := data.Get("name").(string) - group, err := keycloakClient.GetGroupByName(realmId, groupName) + group, err := keycloakClient.GetGroupByName(ctx, realmId, groupName) if err != nil { - return err + return diag.FromErr(err) } mapFromGroupToData(data, group) diff --git a/provider/data_source_keycloak_group_test.go b/provider/data_source_keycloak_group_test.go index 89e15443e..c18f1434c 100644 --- a/provider/data_source_keycloak_group_test.go +++ b/provider/data_source_keycloak_group_test.go @@ -11,6 +11,7 @@ import ( func TestAccKeycloakDataSourceGroup_basic(t *testing.T) { t.Parallel() + group := acctest.RandomWithPrefix("tf-acc") resource.Test(t, resource.TestCase{ @@ -35,6 +36,7 @@ func TestAccKeycloakDataSourceGroup_basic(t *testing.T) { func TestAccKeycloakDataSourceGroup_nested(t *testing.T) { t.Parallel() + group := acctest.RandomWithPrefix("tf-acc") groupNested := acctest.RandomWithPrefix("tf-acc") @@ -74,7 +76,7 @@ func testAccCheckDataKeycloakGroup(resourceName string) resource.TestCheckFunc { realmId := rs.Primary.Attributes["realm_id"] name := rs.Primary.Attributes["name"] - group, err := keycloakClient.GetGroup(realmId, id) + group, err := keycloakClient.GetGroup(testCtx, realmId, id) if err != nil { return err } diff --git a/provider/data_source_keycloak_openid_client.go b/provider/data_source_keycloak_openid_client.go index a103dbe3d..755db4d1f 100644 --- a/provider/data_source_keycloak_openid_client.go +++ b/provider/data_source_keycloak_openid_client.go @@ -1,13 +1,15 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func dataSourceKeycloakOpenidClient() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakOpenidClientRead, + ReadContext: dataSourceKeycloakOpenidClientRead, Schema: map[string]*schema.Schema{ "client_id": { @@ -225,20 +227,20 @@ func dataSourceKeycloakOpenidClient() *schema.Resource { } } -func dataSourceKeycloakOpenidClientRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakOpenidClientRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) - client, err := keycloakClient.GetOpenidClientByClientId(realmId, clientId) + client, err := keycloakClient.GetOpenidClientByClientId(ctx, realmId, clientId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } - err = setOpenidClientData(keycloakClient, data, client) + err = setOpenidClientData(ctx, keycloakClient, data, client) if err != nil { - return err + return diag.FromErr(err) } return nil diff --git a/provider/data_source_keycloak_openid_client_authorization_policy.go b/provider/data_source_keycloak_openid_client_authorization_policy.go index 0a210d6b9..380cce9ef 100644 --- a/provider/data_source_keycloak_openid_client_authorization_policy.go +++ b/provider/data_source_keycloak_openid_client_authorization_policy.go @@ -1,13 +1,15 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func dataSourceKeycloakOpenidClientAuthorizationPolicy() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakOpenidClientAuthorizationPolicyRead, + ReadContext: dataSourceKeycloakOpenidClientAuthorizationPolicyRead, Schema: map[string]*schema.Schema{ "resource_server_id": { @@ -72,16 +74,16 @@ func setOpenidClientAuthorizationPolicyData(data *schema.ResourceData, policy *k data.Set("type", policy.Type) } -func dataSourceKeycloakOpenidClientAuthorizationPolicyRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakOpenidClientAuthorizationPolicyRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) name := data.Get("name").(string) - client, err := keycloakClient.GetClientAuthorizationPolicyByName(realmId, resourceServerId, name) + client, err := keycloakClient.GetClientAuthorizationPolicyByName(ctx, realmId, resourceServerId, name) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setOpenidClientAuthorizationPolicyData(data, client) diff --git a/provider/data_source_keycloak_openid_client_service_account_user.go b/provider/data_source_keycloak_openid_client_service_account_user.go index 8c644297d..a4ba204a1 100644 --- a/provider/data_source_keycloak_openid_client_service_account_user.go +++ b/provider/data_source_keycloak_openid_client_service_account_user.go @@ -1,13 +1,15 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func dataSourceKeycloakOpenidClientServiceAccountUser() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakOpenidClientServiceAccountUserRead, + ReadContext: dataSourceKeycloakOpenidClientServiceAccountUserRead, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -69,15 +71,15 @@ func dataSourceKeycloakOpenidClientServiceAccountUser() *schema.Resource { } } -func dataSourceKeycloakOpenidClientServiceAccountUserRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakOpenidClientServiceAccountUserRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) - user, err := keycloakClient.GetOpenidClientServiceAccountUserId(realmId, clientId) + user, err := keycloakClient.GetOpenidClientServiceAccountUserId(ctx, realmId, clientId) if err != nil { - return err + return diag.FromErr(err) } mapFromUserToData(data, user) diff --git a/provider/data_source_keycloak_realm.go b/provider/data_source_keycloak_realm.go index f578883c7..c5cdce02b 100644 --- a/provider/data_source_keycloak_realm.go +++ b/provider/data_source_keycloak_realm.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) @@ -88,7 +90,7 @@ func dataSourceKeycloakRealm() *schema.Resource { }, } return &schema.Resource{ - Read: dataSourceKeycloakRealmRead, + ReadContext: dataSourceKeycloakRealmRead, Schema: map[string]*schema.Schema{ "realm": { Type: schema.TypeString, @@ -516,14 +518,14 @@ func dataSourceKeycloakRealm() *schema.Resource { } } -func dataSourceKeycloakRealmRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakRealmRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmName := data.Get("realm").(string) - realm, err := keycloakClient.GetRealm(realmName) + realm, err := keycloakClient.GetRealm(ctx, realmName) if err != nil { - return err + return diag.FromErr(err) } setRealmData(data, realm) diff --git a/provider/data_source_keycloak_realm_keys.go b/provider/data_source_keycloak_realm_keys.go index afb943f66..46de28b54 100644 --- a/provider/data_source_keycloak_realm_keys.go +++ b/provider/data_source_keycloak_realm_keys.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -9,7 +11,7 @@ import ( func dataSourceKeycloakRealmKeys() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakRealmKeysRead, + ReadContext: dataSourceKeycloakRealmKeysRead, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -123,35 +125,36 @@ func setRealmKeysData(data *schema.ResourceData, keys *keycloak.Keys) error { return nil } -func dataSourceKeycloakRealmKeysRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakRealmKeysRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) - keys, err := keycloakClient.GetRealmKeys(realmId) + keys, err := keycloakClient.GetRealmKeys(ctx, realmId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } - if filterStatus, ok := data.GetOkExists("status"); ok { + if filterStatus, ok := data.GetOk("status"); ok { keys.Keys = filterKeys(keys.Keys, "status", filterStatus.(*schema.Set)) } - if filterAlgorithm, ok := data.GetOkExists("algorithms"); ok { + if filterAlgorithm, ok := data.GetOk("algorithms"); ok { keys.Keys = filterKeys(keys.Keys, "algorithms", filterAlgorithm.(*schema.Set)) } if len(keys.Keys) == 0 { - return fmt.Errorf("Your query returned no results. Please change your search criteria and try again.") + return diag.Diagnostics{{ + Summary: "Your query returned no results. Please change your search criteria and try again.", + Severity: diag.Error, + }} } - err = setRealmKeysData(data, keys) - - return err + return diag.FromErr(setRealmKeysData(data, keys)) } func filterKeys(allValues []keycloak.Key, filterAttribute string, allowedValues *schema.Set) []keycloak.Key { - result := []keycloak.Key{} + var result []keycloak.Key var keyValue string for _, key := range allValues { diff --git a/provider/data_source_keycloak_role.go b/provider/data_source_keycloak_role.go index 938924f37..d6e53084b 100644 --- a/provider/data_source_keycloak_role.go +++ b/provider/data_source_keycloak_role.go @@ -1,13 +1,15 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func dataSourceKeycloakRole() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakRoleRead, + ReadContext: dataSourceKeycloakRoleRead, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -39,16 +41,16 @@ func dataSourceKeycloakRole() *schema.Resource { } } -func dataSourceKeycloakRoleRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakRoleRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) roleName := data.Get("name").(string) - role, err := keycloakClient.GetRoleByName(realmId, clientId, roleName) + role, err := keycloakClient.GetRoleByName(ctx, realmId, clientId, roleName) if err != nil { - return err + return diag.FromErr(err) } mapFromRoleToData(data, role) diff --git a/provider/data_source_keycloak_role_test.go b/provider/data_source_keycloak_role_test.go index 4d445a167..e6fb2a312 100644 --- a/provider/data_source_keycloak_role_test.go +++ b/provider/data_source_keycloak_role_test.go @@ -10,6 +10,7 @@ import ( func TestAccKeycloakDataSourceRole_basic(t *testing.T) { t.Parallel() + client := acctest.RandomWithPrefix("tf-acc") realmRole := acctest.RandomWithPrefix("tf-acc") clientRole := acctest.RandomWithPrefix("tf-acc") @@ -58,7 +59,7 @@ func testAccCheckDataKeycloakRole(resourceName string) resource.TestCheckFunc { realmId := rs.Primary.Attributes["realm_id"] name := rs.Primary.Attributes["name"] - role, err := keycloakClient.GetRole(realmId, id) + role, err := keycloakClient.GetRole(testCtx, realmId, id) if err != nil { return err } diff --git a/provider/data_source_keycloak_saml_client.go b/provider/data_source_keycloak_saml_client.go index b04e92f43..eb6ce8502 100644 --- a/provider/data_source_keycloak_saml_client.go +++ b/provider/data_source_keycloak_saml_client.go @@ -1,13 +1,15 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func dataSourceKeycloakSamlClient() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakSamlClientRead, + ReadContext: dataSourceKeycloakSamlClientRead, Schema: map[string]*schema.Schema{ "client_id": { @@ -180,20 +182,20 @@ func dataSourceKeycloakSamlClient() *schema.Resource { } } -func dataSourceKeycloakSamlClientRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakSamlClientRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) - client, err := keycloakClient.GetSamlClientByClientId(realmId, clientId) + client, err := keycloakClient.GetSamlClientByClientId(ctx, realmId, clientId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } - err = mapToDataFromSamlClient(data, client) + err = mapToDataFromSamlClient(ctx, data, client) if err != nil { - return err + return diag.FromErr(err) } return nil diff --git a/provider/data_source_keycloak_saml_client_installation_provider.go b/provider/data_source_keycloak_saml_client_installation_provider.go index 01e7a36eb..53b47e9f6 100644 --- a/provider/data_source_keycloak_saml_client_installation_provider.go +++ b/provider/data_source_keycloak_saml_client_installation_provider.go @@ -1,15 +1,17 @@ package provider import ( + "context" "crypto/sha1" "encoding/base64" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func dataSourceKeycloakSamlClientInstallationProvider() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakSamlClientInstallationProviderRead, + ReadContext: dataSourceKeycloakSamlClientInstallationProviderRead, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -31,16 +33,16 @@ func dataSourceKeycloakSamlClientInstallationProvider() *schema.Resource { } } -func dataSourceKeycloakSamlClientInstallationProviderRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakSamlClientInstallationProviderRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) - cliendId := data.Get("client_id").(string) + clientId := data.Get("client_id").(string) providerId := data.Get("provider_id").(string) - value, err := keycloakClient.GetSamlClientInstallationProvider(realmId, cliendId, providerId) + value, err := keycloakClient.GetSamlClientInstallationProvider(ctx, realmId, clientId, providerId) if err != nil { - return err + return diag.FromErr(err) } h := sha1.New() @@ -49,7 +51,7 @@ func dataSourceKeycloakSamlClientInstallationProviderRead(data *schema.ResourceD data.SetId(id) data.Set("realm_id", realmId) - data.Set("client_id", cliendId) + data.Set("client_id", clientId) data.Set("provider_id", providerId) data.Set("value", string(value)) diff --git a/provider/data_source_keycloak_user.go b/provider/data_source_keycloak_user.go index 59804949d..8c081adba 100644 --- a/provider/data_source_keycloak_user.go +++ b/provider/data_source_keycloak_user.go @@ -1,14 +1,15 @@ package provider import ( - "fmt" + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func dataSourceKeycloakUser() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakUserRead, + ReadContext: dataSourceKeycloakUserRead, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -51,18 +52,18 @@ func dataSourceKeycloakUser() *schema.Resource { } } -func dataSourceKeycloakUserRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakUserRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmID := data.Get("realm_id").(string) username := data.Get("username").(string) - user, err := keycloakClient.GetUserByUsername(realmID, username) + user, err := keycloakClient.GetUserByUsername(ctx, realmID, username) if err != nil { - return err + return diag.FromErr(err) } if user == nil { - return fmt.Errorf("user with username %s not found", username) + return diag.Errorf("user with username %s not found", username) } mapFromUserToData(data, user) diff --git a/provider/data_source_keycloak_user_realm_roles.go b/provider/data_source_keycloak_user_realm_roles.go index 70453cabc..a3734fa7f 100644 --- a/provider/data_source_keycloak_user_realm_roles.go +++ b/provider/data_source_keycloak_user_realm_roles.go @@ -1,13 +1,15 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func dataSourceKeycloakUserRealmRoles() *schema.Resource { return &schema.Resource{ - Read: dataSourceKeycloakUserRealmRolesRead, + ReadContext: dataSourceKeycloakUserRealmRolesRead, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -27,15 +29,15 @@ func dataSourceKeycloakUserRealmRoles() *schema.Resource { } } -func dataSourceKeycloakUserRealmRolesRead(data *schema.ResourceData, meta interface{}) error { +func dataSourceKeycloakUserRealmRolesRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) userId := data.Get("user_id").(string) - roles, err := keycloakClient.GetUserRoleMappings(realmId, userId) + roles, err := keycloakClient.GetUserRoleMappings(ctx, realmId, userId) if err != nil { - return err + return diag.FromErr(err) } var roleNames []string diff --git a/provider/data_source_keycloak_user_test.go b/provider/data_source_keycloak_user_test.go index 179677d07..b4488c044 100644 --- a/provider/data_source_keycloak_user_test.go +++ b/provider/data_source_keycloak_user_test.go @@ -12,6 +12,7 @@ import ( func TestAccKeycloakDataSourceUser(t *testing.T) { t.Parallel() + username := acctest.RandomWithPrefix("tf-acc") email := acctest.RandomWithPrefix("tf-acc") + "@fakedomain.com" @@ -62,7 +63,7 @@ func testAccCheckDataKeycloakUser(resourceName string) resource.TestCheckFunc { realmID := rs.Primary.Attributes["realm_id"] username := rs.Primary.Attributes["username"] - user, err := keycloakClient.GetUser(realmID, id) + user, err := keycloakClient.GetUser(testCtx, realmID, id) if err != nil { return err } diff --git a/provider/generic_keycloak_identity_provider.go b/provider/generic_keycloak_identity_provider.go index 424c26212..bcc7b3862 100644 --- a/provider/generic_keycloak_identity_provider.go +++ b/provider/generic_keycloak_identity_provider.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -20,9 +22,9 @@ type identityProviderDataSetterFunc func(data *schema.ResourceData, identityProv func resourceKeycloakIdentityProvider() *schema.Resource { return &schema.Resource{ - Delete: resourceKeycloakIdentityProviderDelete, + DeleteContext: resourceKeycloakIdentityProviderDelete, Importer: &schema.ResourceImporter{ - State: resourceKeycloakIdentityProviderImport, + StateContext: resourceKeycloakIdentityProviderImport, }, Schema: map[string]*schema.Schema{ "alias": { @@ -166,16 +168,16 @@ func setIdentityProviderData(data *schema.ResourceData, identityProvider *keyclo setExtraConfigData(data, identityProvider.Config.ExtraConfig) } -func resourceKeycloakIdentityProviderDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakIdentityProviderDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realm := data.Get("realm").(string) alias := data.Get("alias").(string) - return keycloakClient.DeleteIdentityProvider(realm, alias) + return diag.FromErr(keycloakClient.DeleteIdentityProvider(ctx, realm, alias)) } -func resourceKeycloakIdentityProviderImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakIdentityProviderImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { @@ -189,51 +191,51 @@ func resourceKeycloakIdentityProviderImport(d *schema.ResourceData, _ interface{ return []*schema.ResourceData{d}, nil } -func resourceKeycloakIdentityProviderCreate(getIdentityProviderFromData identityProviderDataGetterFunc, setDataFromIdentityProvider identityProviderDataSetterFunc) func(data *schema.ResourceData, meta interface{}) error { - return func(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakIdentityProviderCreate(getIdentityProviderFromData identityProviderDataGetterFunc, setDataFromIdentityProvider identityProviderDataSetterFunc) func(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { + return func(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) identityProvider, err := getIdentityProviderFromData(data) if err != nil { - return err + return diag.FromErr(err) } - if err = keycloakClient.NewIdentityProvider(identityProvider); err != nil { - return err + if err = keycloakClient.NewIdentityProvider(ctx, identityProvider); err != nil { + return diag.FromErr(err) } if err = setDataFromIdentityProvider(data, identityProvider); err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakIdentityProviderRead(setDataFromIdentityProvider)(data, meta) + return resourceKeycloakIdentityProviderRead(setDataFromIdentityProvider)(ctx, data, meta) } } -func resourceKeycloakIdentityProviderRead(setDataFromIdentityProvider identityProviderDataSetterFunc) func(data *schema.ResourceData, meta interface{}) error { - return func(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakIdentityProviderRead(setDataFromIdentityProvider identityProviderDataSetterFunc) func(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { + return func(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realm := data.Get("realm").(string) alias := data.Get("alias").(string) - identityProvider, err := keycloakClient.GetIdentityProvider(realm, alias) + identityProvider, err := keycloakClient.GetIdentityProvider(ctx, realm, alias) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } - return setDataFromIdentityProvider(data, identityProvider) + return diag.FromErr(setDataFromIdentityProvider(data, identityProvider)) } } -func resourceKeycloakIdentityProviderUpdate(getIdentityProviderFromData identityProviderDataGetterFunc, setDataFromIdentityProvider identityProviderDataSetterFunc) func(data *schema.ResourceData, meta interface{}) error { - return func(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakIdentityProviderUpdate(getIdentityProviderFromData identityProviderDataGetterFunc, setDataFromIdentityProvider identityProviderDataSetterFunc) func(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { + return func(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) identityProvider, err := getIdentityProviderFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateIdentityProvider(identityProvider) + err = keycloakClient.UpdateIdentityProvider(ctx, identityProvider) if err != nil { - return err + return diag.FromErr(err) } - return setDataFromIdentityProvider(data, identityProvider) + return diag.FromErr(setDataFromIdentityProvider(data, identityProvider)) } } diff --git a/provider/generic_keycloak_identity_provider_mapper.go b/provider/generic_keycloak_identity_provider_mapper.go index 9aa1f345f..c5fb3310c 100644 --- a/provider/generic_keycloak_identity_provider_mapper.go +++ b/provider/generic_keycloak_identity_provider_mapper.go @@ -1,21 +1,23 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) -type identityProviderMapperDataGetterFunc func(data *schema.ResourceData, meta interface{}) (*keycloak.IdentityProviderMapper, error) +type identityProviderMapperDataGetterFunc func(ctx context.Context, data *schema.ResourceData, meta interface{}) (*keycloak.IdentityProviderMapper, error) type identityProviderMapperDataSetterFunc func(data *schema.ResourceData, identityProviderMapper *keycloak.IdentityProviderMapper) error func resourceKeycloakIdentityProviderMapper() *schema.Resource { return &schema.Resource{ - Delete: resourceKeycloakIdentityProviderMapperDelete, + DeleteContext: resourceKeycloakIdentityProviderMapperDelete, Importer: &schema.ResourceImporter{ - State: resourceKeycloakIdentityProviderMapperImport, + StateContext: resourceKeycloakIdentityProviderMapperImport, }, Schema: map[string]*schema.Schema{ "realm": { @@ -67,17 +69,17 @@ func setIdentityProviderMapperData(data *schema.ResourceData, identityProviderMa return nil } -func resourceKeycloakIdentityProviderMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakIdentityProviderMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realm := data.Get("realm").(string) alias := data.Get("identity_provider_alias").(string) id := data.Id() - return keycloakClient.DeleteIdentityProviderMapper(realm, alias, id) + return diag.FromErr(keycloakClient.DeleteIdentityProviderMapper(ctx, realm, alias, id)) } -func resourceKeycloakIdentityProviderMapperImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakIdentityProviderMapperImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 3 { @@ -91,53 +93,69 @@ func resourceKeycloakIdentityProviderMapperImport(d *schema.ResourceData, _ inte return []*schema.ResourceData{d}, nil } -func resourceKeycloakIdentityProviderMapperCreate(getIdentityProviderMapperFromData identityProviderMapperDataGetterFunc, setDataFromIdentityProviderMapper identityProviderMapperDataSetterFunc) func(data *schema.ResourceData, meta interface{}) error { - return func(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakIdentityProviderMapperCreate(getIdentityProviderMapperFromData identityProviderMapperDataGetterFunc, setDataFromIdentityProviderMapper identityProviderMapperDataSetterFunc) func(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { + return func(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - identityProvider, err := getIdentityProviderMapperFromData(data, meta) + + identityProvider, err := getIdentityProviderMapperFromData(ctx, data, meta) if err != nil { - return err + return handleNotFoundError(ctx, err, data) } + if identityProvider == nil { - return fmt.Errorf("identity provider with alias %s not found", data.Get("identity_provider_alias").(string)) + return diag.Errorf("identity provider with alias %s not found", data.Get("identity_provider_alias").(string)) } - if err = keycloakClient.NewIdentityProviderMapper(identityProvider); err != nil { - return err + + if err = keycloakClient.NewIdentityProviderMapper(ctx, identityProvider); err != nil { + return diag.FromErr(err) } + if err = setDataFromIdentityProviderMapper(data, identityProvider); err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakIdentityProviderMapperRead(setDataFromIdentityProviderMapper)(data, meta) + + return resourceKeycloakIdentityProviderMapperRead(setDataFromIdentityProviderMapper)(ctx, data, meta) } } -func resourceKeycloakIdentityProviderMapperRead(setDataFromIdentityProviderMapper identityProviderMapperDataSetterFunc) func(data *schema.ResourceData, meta interface{}) error { - return func(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakIdentityProviderMapperRead(setDataFromIdentityProviderMapper identityProviderMapperDataSetterFunc) func(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { + return func(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) + realm := data.Get("realm").(string) alias := data.Get("identity_provider_alias").(string) id := data.Id() - identityProvider, err := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + + identityProvider, err := keycloakClient.GetIdentityProviderMapper(ctx, realm, alias, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } + if err = setDataFromIdentityProviderMapper(data, identityProvider); err != nil { - return err + return diag.FromErr(err) } + return nil } } -func resourceKeycloakIdentityProviderMapperUpdate(getIdentityProviderMapperFromData identityProviderMapperDataGetterFunc, setDataFromIdentityProviderMapper identityProviderMapperDataSetterFunc) func(data *schema.ResourceData, meta interface{}) error { - return func(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakIdentityProviderMapperUpdate(getIdentityProviderMapperFromData identityProviderMapperDataGetterFunc, setDataFromIdentityProviderMapper identityProviderMapperDataSetterFunc) func(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { + return func(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - identityProvider, err := getIdentityProviderMapperFromData(data, meta) - if err = keycloakClient.UpdateIdentityProviderMapper(identityProvider); err != nil { - return err + + identityProvider, err := getIdentityProviderMapperFromData(ctx, data, meta) + if err != nil { + return handleNotFoundError(ctx, err, data) } + + if err = keycloakClient.UpdateIdentityProviderMapper(ctx, identityProvider); err != nil { + return diag.FromErr(err) + } + if err = setDataFromIdentityProviderMapper(data, identityProvider); err != nil { - return err + return diag.FromErr(err) } + return nil } } diff --git a/provider/generic_keystore_helpers.go b/provider/generic_keystore_helpers.go new file mode 100644 index 000000000..6243c950a --- /dev/null +++ b/provider/generic_keystore_helpers.go @@ -0,0 +1,21 @@ +package provider + +import ( + "context" + "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "strings" +) + +func resourceKeycloakRealmKeystoreGenericImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { + parts := strings.Split(d.Id(), "/") + + if len(parts) != 2 { + return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{keystoreId}}") + } + + d.Set("realm_id", parts[0]) + d.SetId(parts[1]) + + return []*schema.ResourceData{d}, nil +} diff --git a/provider/generic_keystore_helpers_test.go b/provider/generic_keystore_helpers_test.go new file mode 100644 index 000000000..3b23b93d8 --- /dev/null +++ b/provider/generic_keystore_helpers_test.go @@ -0,0 +1,21 @@ +package provider + +import ( + "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func getRealmKeystoreGenericImportId(resourceName string) resource.ImportStateIdFunc { + return func(s *terraform.State) (string, error) { + rs, ok := s.RootModule().Resources[resourceName] + if !ok { + return "", fmt.Errorf("resource not found: %s", resourceName) + } + + id := rs.Primary.ID + realmId := rs.Primary.Attributes["realm_id"] + + return fmt.Sprintf("%s/%s", realmId, id), nil + } +} diff --git a/provider/generic_protocol_mapper_helpers.go b/provider/generic_protocol_mapper_helpers.go index c28c9e2b8..44edcab30 100644 --- a/provider/generic_protocol_mapper_helpers.go +++ b/provider/generic_protocol_mapper_helpers.go @@ -1,12 +1,13 @@ package provider import ( + "context" "fmt" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "strings" ) -func genericProtocolMapperImport(data *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func genericProtocolMapperImport(_ context.Context, data *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(data.Id(), "/") if len(parts) != 4 { return nil, fmt.Errorf("invalid import. supported import formats: {{realmId}}/client/{{clientId}}/{{protocolMapperId}}, {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}}") diff --git a/provider/generic_resource_policy_import.go b/provider/generic_resource_policy_import.go index f8d27ec5b..527130d84 100644 --- a/provider/generic_resource_policy_import.go +++ b/provider/generic_resource_policy_import.go @@ -1,13 +1,14 @@ package provider import ( + "context" "fmt" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func genericResourcePolicyImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func genericResourcePolicyImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 3 { return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{resourceServerId}}/{{authorizationResourceId}}") diff --git a/provider/permissions.go b/provider/permissions.go index 188436053..cdbf379bb 100644 --- a/provider/permissions.go +++ b/provider/permissions.go @@ -1,12 +1,13 @@ package provider import ( + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) -func setOpenidClientScopePermissionPolicy(keycloakClient *keycloak.KeycloakClient, realmId, realmManagementClientId, authorizationPermissionId string, scopeDataSet *schema.Set) error { +func setOpenidClientScopePermissionPolicy(ctx context.Context, keycloakClient *keycloak.KeycloakClient, realmId string, realmManagementClientId string, authorizationPermissionId string, scopeDataSet *schema.Set) error { var policies []string scopePermission := scopeDataSet.List()[0].(map[string]interface{}) @@ -17,7 +18,7 @@ func setOpenidClientScopePermissionPolicy(keycloakClient *keycloak.KeycloakClien } } - permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(realmId, realmManagementClientId, authorizationPermissionId) + permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(ctx, realmId, realmManagementClientId, authorizationPermissionId) if err != nil { return err } @@ -32,11 +33,11 @@ func setOpenidClientScopePermissionPolicy(keycloakClient *keycloak.KeycloakClien permission.Policies = policies - return keycloakClient.UpdateOpenidClientAuthorizationPermission(permission) + return keycloakClient.UpdateOpenidClientAuthorizationPermission(ctx, permission) } -func getOpenidClientScopePermissionPolicy(keycloakClient *keycloak.KeycloakClient, realmId string, realmManagementClientId, permissionId string) (map[string]interface{}, error) { - permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(realmId, realmManagementClientId, permissionId) +func getOpenidClientScopePermissionPolicy(ctx context.Context, keycloakClient *keycloak.KeycloakClient, realmId, realmManagementClientId, permissionId string) (map[string]interface{}, error) { + permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(ctx, realmId, realmManagementClientId, permissionId) if err != nil { return nil, err } diff --git a/provider/provider.go b/provider/provider.go index 33dcb2da3..8e53462db 100644 --- a/provider/provider.go +++ b/provider/provider.go @@ -183,7 +183,7 @@ func KeycloakProvider(client *keycloak.KeycloakClient) *schema.Provider { }, } - provider.ConfigureContextFunc = func(_ context.Context, data *schema.ResourceData) (interface{}, diag.Diagnostics) { + provider.ConfigureContextFunc = func(ctx context.Context, data *schema.ResourceData) (interface{}, diag.Diagnostics) { if client != nil { return client, nil } @@ -208,7 +208,7 @@ func KeycloakProvider(client *keycloak.KeycloakClient) *schema.Provider { userAgent := fmt.Sprintf("HashiCorp Terraform/%s (+https://www.terraform.io) Terraform Plugin SDK/%s", provider.TerraformVersion, meta.SDKVersionString()) - keycloakClient, err := keycloak.NewKeycloakClient(url, basePath, clientId, clientSecret, realm, username, password, initialLogin, clientTimeout, rootCaCertificate, tlsInsecureSkipVerify, userAgent, additionalHeaders) + keycloakClient, err := keycloak.NewKeycloakClient(ctx, url, basePath, clientId, clientSecret, realm, username, password, initialLogin, clientTimeout, rootCaCertificate, tlsInsecureSkipVerify, userAgent, additionalHeaders) if err != nil { diags = append(diags, diag.Diagnostic{ Severity: diag.Error, diff --git a/provider/provider_test.go b/provider/provider_test.go index 3764e2c59..ef84055df 100644 --- a/provider/provider_test.go +++ b/provider/provider_test.go @@ -1,6 +1,7 @@ package provider import ( + "context" "fmt" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -16,6 +17,7 @@ var keycloakClient *keycloak.KeycloakClient var testAccRealm *keycloak.Realm var testAccRealmTwo *keycloak.Realm var testAccRealmUserFederation *keycloak.Realm +var testCtx context.Context var requiredEnvironmentVariables = []string{ "KEYCLOAK_CLIENT_ID", @@ -25,8 +27,9 @@ var requiredEnvironmentVariables = []string{ } func init() { + testCtx = context.Background() userAgent := fmt.Sprintf("HashiCorp Terraform/%s (+https://www.terraform.io) Terraform Plugin SDK/%s", schema.Provider{}.TerraformVersion, meta.SDKVersionString()) - keycloakClient, _ = keycloak.NewKeycloakClient(os.Getenv("KEYCLOAK_URL"), "/auth", os.Getenv("KEYCLOAK_CLIENT_ID"), os.Getenv("KEYCLOAK_CLIENT_SECRET"), os.Getenv("KEYCLOAK_REALM"), "", "", true, 5, "", false, userAgent, map[string]string{ + keycloakClient, _ = keycloak.NewKeycloakClient(testCtx, os.Getenv("KEYCLOAK_URL"), "/auth", os.Getenv("KEYCLOAK_CLIENT_ID"), os.Getenv("KEYCLOAK_CLIENT_SECRET"), os.Getenv("KEYCLOAK_REALM"), "", "", true, 5, "", false, userAgent, map[string]string{ "foo": "bar", }) testAccProvider = KeycloakProvider(keycloakClient) @@ -38,23 +41,23 @@ func init() { } func TestMain(m *testing.M) { - testAccRealm = createTestRealm() - testAccRealmTwo = createTestRealm() - testAccRealmUserFederation = createTestRealm() + testAccRealm = createTestRealm(testCtx) + testAccRealmTwo = createTestRealm(testCtx) + testAccRealmUserFederation = createTestRealm(testCtx) code := m.Run() - err := keycloakClient.DeleteRealm(testAccRealm.Realm) + err := keycloakClient.DeleteRealm(testCtx, testAccRealm.Realm) if err != nil { os.Exit(1) } - err = keycloakClient.DeleteRealm(testAccRealmTwo.Realm) + err = keycloakClient.DeleteRealm(testCtx, testAccRealmTwo.Realm) if err != nil { os.Exit(1) } - err = keycloakClient.DeleteRealm(testAccRealmUserFederation.Realm) + err = keycloakClient.DeleteRealm(testCtx, testAccRealmUserFederation.Realm) if err != nil { os.Exit(1) } @@ -62,7 +65,7 @@ func TestMain(m *testing.M) { os.Exit(code) } -func createTestRealm() *keycloak.Realm { +func createTestRealm(testCtx context.Context) *keycloak.Realm { name := acctest.RandomWithPrefix("tf-acc") r := &keycloak.Realm{ Id: name, @@ -70,7 +73,7 @@ func createTestRealm() *keycloak.Realm { Enabled: true, } - err := keycloakClient.NewRealm(r) + err := keycloakClient.NewRealm(testCtx, r) if err != nil { os.Exit(1) } diff --git a/provider/resource_keycloak_attribute_importer_identity_provider_mapper.go b/provider/resource_keycloak_attribute_importer_identity_provider_mapper.go index da221f8af..d2b4b9826 100644 --- a/provider/resource_keycloak_attribute_importer_identity_provider_mapper.go +++ b/provider/resource_keycloak_attribute_importer_identity_provider_mapper.go @@ -1,6 +1,7 @@ package provider import ( + "context" "fmt" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -34,19 +35,19 @@ func resourceKeycloakAttributeImporterIdentityProviderMapper() *schema.Resource } genericMapperResource := resourceKeycloakIdentityProviderMapper() genericMapperResource.Schema = mergeSchemas(genericMapperResource.Schema, mapperSchema) - genericMapperResource.Create = resourceKeycloakIdentityProviderMapperCreate(getAttributeImporterIdentityProviderMapperFromData, setAttributeImporterIdentityProviderMapperData) - genericMapperResource.Read = resourceKeycloakIdentityProviderMapperRead(setAttributeImporterIdentityProviderMapperData) - genericMapperResource.Update = resourceKeycloakIdentityProviderMapperUpdate(getAttributeImporterIdentityProviderMapperFromData, setAttributeImporterIdentityProviderMapperData) + genericMapperResource.CreateContext = resourceKeycloakIdentityProviderMapperCreate(getAttributeImporterIdentityProviderMapperFromData, setAttributeImporterIdentityProviderMapperData) + genericMapperResource.ReadContext = resourceKeycloakIdentityProviderMapperRead(setAttributeImporterIdentityProviderMapperData) + genericMapperResource.UpdateContext = resourceKeycloakIdentityProviderMapperUpdate(getAttributeImporterIdentityProviderMapperFromData, setAttributeImporterIdentityProviderMapperData) return genericMapperResource } -func getAttributeImporterIdentityProviderMapperFromData(data *schema.ResourceData, meta interface{}) (*keycloak.IdentityProviderMapper, error) { +func getAttributeImporterIdentityProviderMapperFromData(ctx context.Context, data *schema.ResourceData, meta interface{}) (*keycloak.IdentityProviderMapper, error) { keycloakClient := meta.(*keycloak.KeycloakClient) rec, _ := getIdentityProviderMapperFromData(data) - identityProvider, err := keycloakClient.GetIdentityProvider(rec.Realm, rec.IdentityProviderAlias) + identityProvider, err := keycloakClient.GetIdentityProvider(ctx, rec.Realm, rec.IdentityProviderAlias) if err != nil { - return nil, handleNotFoundError(err, data) + return nil, err } rec.IdentityProviderMapper = fmt.Sprintf("%s-user-attribute-idp-mapper", identityProvider.ProviderId) diff --git a/provider/resource_keycloak_attribute_importer_identity_provider_mapper_test.go b/provider/resource_keycloak_attribute_importer_identity_provider_mapper_test.go index 163e058e0..ab6467edb 100644 --- a/provider/resource_keycloak_attribute_importer_identity_provider_mapper_test.go +++ b/provider/resource_keycloak_attribute_importer_identity_provider_mapper_test.go @@ -71,7 +71,7 @@ func TestAccKeycloakAttributeImporterIdentityProviderMapper_createAfterManualDes }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProviderMapper(mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) + err := keycloakClient.DeleteIdentityProviderMapper(testCtx, mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) if err != nil { t.Fatal(err) } @@ -104,7 +104,7 @@ func TestAccKeycloakAttributeImporterIdentityProviderMapper_withExtraConfig_crea }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProviderMapper(mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) + err := keycloakClient.DeleteIdentityProviderMapper(testCtx, mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) if err != nil { t.Fatal(err) } @@ -194,7 +194,7 @@ func testAccCheckKeycloakAttributeImporterIdentityProviderMapperDestroy() resour alias := rs.Primary.Attributes["identity_provider_alias"] id := rs.Primary.ID - mapper, _ := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + mapper, _ := keycloakClient.GetIdentityProviderMapper(testCtx, realm, alias, id) if mapper != nil { return fmt.Errorf("oidc config with id %s still exists", id) } @@ -214,7 +214,7 @@ func getKeycloakAttributeImporterIdentityProviderMapperFromState(s *terraform.St alias := rs.Primary.Attributes["identity_provider_alias"] id := rs.Primary.ID - mapper, err := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + mapper, err := keycloakClient.GetIdentityProviderMapper(testCtx, realm, alias, id) if err != nil { return nil, fmt.Errorf("error getting identity provider mapper config with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_attribute_to_role_identity_provider_mapper.go b/provider/resource_keycloak_attribute_to_role_identity_provider_mapper.go index 82620b44b..9da79d4b8 100644 --- a/provider/resource_keycloak_attribute_to_role_identity_provider_mapper.go +++ b/provider/resource_keycloak_attribute_to_role_identity_provider_mapper.go @@ -1,6 +1,7 @@ package provider import ( + "context" "fmt" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -44,19 +45,19 @@ func resourceKeycloakAttributeToRoleIdentityProviderMapper() *schema.Resource { } genericMapperResource := resourceKeycloakIdentityProviderMapper() genericMapperResource.Schema = mergeSchemas(genericMapperResource.Schema, mapperSchema) - genericMapperResource.Create = resourceKeycloakIdentityProviderMapperCreate(getAttributeToRoleIdentityProviderMapperFromData, setAttributeToRoleIdentityProviderMapperData) - genericMapperResource.Read = resourceKeycloakIdentityProviderMapperRead(setAttributeToRoleIdentityProviderMapperData) - genericMapperResource.Update = resourceKeycloakIdentityProviderMapperUpdate(getAttributeToRoleIdentityProviderMapperFromData, setAttributeToRoleIdentityProviderMapperData) + genericMapperResource.CreateContext = resourceKeycloakIdentityProviderMapperCreate(getAttributeToRoleIdentityProviderMapperFromData, setAttributeToRoleIdentityProviderMapperData) + genericMapperResource.ReadContext = resourceKeycloakIdentityProviderMapperRead(setAttributeToRoleIdentityProviderMapperData) + genericMapperResource.UpdateContext = resourceKeycloakIdentityProviderMapperUpdate(getAttributeToRoleIdentityProviderMapperFromData, setAttributeToRoleIdentityProviderMapperData) return genericMapperResource } -func getAttributeToRoleIdentityProviderMapperFromData(data *schema.ResourceData, meta interface{}) (*keycloak.IdentityProviderMapper, error) { +func getAttributeToRoleIdentityProviderMapperFromData(ctx context.Context, data *schema.ResourceData, meta interface{}) (*keycloak.IdentityProviderMapper, error) { keycloakClient := meta.(*keycloak.KeycloakClient) rec, _ := getIdentityProviderMapperFromData(data) - identityProvider, err := keycloakClient.GetIdentityProvider(rec.Realm, rec.IdentityProviderAlias) + identityProvider, err := keycloakClient.GetIdentityProvider(ctx, rec.Realm, rec.IdentityProviderAlias) if err != nil { - return nil, handleNotFoundError(err, data) + return nil, err } rec.IdentityProviderMapper = fmt.Sprintf("%s-role-idp-mapper", identityProvider.ProviderId) diff --git a/provider/resource_keycloak_attribute_to_role_identity_provider_mapper_test.go b/provider/resource_keycloak_attribute_to_role_identity_provider_mapper_test.go index f7e7ef0b6..97dcaa41d 100644 --- a/provider/resource_keycloak_attribute_to_role_identity_provider_mapper_test.go +++ b/provider/resource_keycloak_attribute_to_role_identity_provider_mapper_test.go @@ -74,7 +74,7 @@ func TestAccKeycloakAttributeToRoleIdentityProviderMapper_createAfterManualDestr }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProviderMapper(mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) + err := keycloakClient.DeleteIdentityProviderMapper(testCtx, mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) if err != nil { t.Fatal(err) } @@ -108,7 +108,7 @@ func TestAccKeycloakAttributeToRoleIdentityProviderMapper_withExtraConfig_create }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProviderMapper(mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) + err := keycloakClient.DeleteIdentityProviderMapper(testCtx, mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) if err != nil { t.Fatal(err) } @@ -200,7 +200,7 @@ func testAccCheckKeycloakAttributeToRoleIdentityProviderMapperDestroy() resource alias := rs.Primary.Attributes["identity_provider_alias"] id := rs.Primary.ID - mapper, _ := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + mapper, _ := keycloakClient.GetIdentityProviderMapper(testCtx, realm, alias, id) if mapper != nil { return fmt.Errorf("oidc config with id %s still exists", id) } @@ -220,7 +220,7 @@ func getKeycloakAttributeToRoleIdentityProviderMapperFromState(s *terraform.Stat alias := rs.Primary.Attributes["identity_provider_alias"] id := rs.Primary.ID - mapper, err := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + mapper, err := keycloakClient.GetIdentityProviderMapper(testCtx, realm, alias, id) if err != nil { return nil, fmt.Errorf("error getting identity provider mapper config with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_authentication_execution.go b/provider/resource_keycloak_authentication_execution.go index e1f4857ad..43ef52177 100644 --- a/provider/resource_keycloak_authentication_execution.go +++ b/provider/resource_keycloak_authentication_execution.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -11,12 +13,12 @@ import ( func resourceKeycloakAuthenticationExecution() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakAuthenticationExecutionCreate, - Read: resourceKeycloakAuthenticationExecutionRead, - Delete: resourceKeycloakAuthenticationExecutionDelete, - Update: resourceKeycloakAuthenticationExecutionUpdate, + CreateContext: resourceKeycloakAuthenticationExecutionCreate, + ReadContext: resourceKeycloakAuthenticationExecutionRead, + DeleteContext: resourceKeycloakAuthenticationExecutionDelete, + UpdateContext: resourceKeycloakAuthenticationExecutionUpdate, Importer: &schema.ResourceImporter{ - State: resourceKeycloakAuthenticationExecutionImport, + StateContext: resourceKeycloakAuthenticationExecutionImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -72,31 +74,31 @@ func mapFromAuthenticationExecutionInfoToData(data *schema.ResourceData, authent data.Set("parent_flow_alias", authenticationExecutionInfo.ParentFlowAlias) } -func resourceKeycloakAuthenticationExecutionCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationExecutionCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) authenticationExecution := mapFromDataToAuthenticationExecution(data) - err := keycloakClient.NewAuthenticationExecution(authenticationExecution) + err := keycloakClient.NewAuthenticationExecution(ctx, authenticationExecution) if err != nil { - return err + return diag.FromErr(err) } mapFromAuthenticationExecutionToData(data, authenticationExecution) - return resourceKeycloakAuthenticationExecutionRead(data, meta) + return resourceKeycloakAuthenticationExecutionRead(ctx, data, meta) } -func resourceKeycloakAuthenticationExecutionRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationExecutionRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) parentFlowAlias := data.Get("parent_flow_alias").(string) id := data.Id() - authenticationExecution, err := keycloakClient.GetAuthenticationExecution(realmId, parentFlowAlias, id) + authenticationExecution, err := keycloakClient.GetAuthenticationExecution(ctx, realmId, parentFlowAlias, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromAuthenticationExecutionToData(data, authenticationExecution) @@ -104,14 +106,14 @@ func resourceKeycloakAuthenticationExecutionRead(data *schema.ResourceData, meta return nil } -func resourceKeycloakAuthenticationExecutionUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationExecutionUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) authenticationExecution := mapFromDataToAuthenticationExecution(data) - err := keycloakClient.UpdateAuthenticationExecution(authenticationExecution) + err := keycloakClient.UpdateAuthenticationExecution(ctx, authenticationExecution) if err != nil { - return err + return diag.FromErr(err) } mapFromAuthenticationExecutionToData(data, authenticationExecution) @@ -119,16 +121,16 @@ func resourceKeycloakAuthenticationExecutionUpdate(data *schema.ResourceData, me return nil } -func resourceKeycloakAuthenticationExecutionDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationExecutionDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteAuthenticationExecution(realmId, id) + return diag.FromErr(keycloakClient.DeleteAuthenticationExecution(ctx, realmId, id)) } -func resourceKeycloakAuthenticationExecutionImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakAuthenticationExecutionImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 3 { diff --git a/provider/resource_keycloak_authentication_execution_config.go b/provider/resource_keycloak_authentication_execution_config.go index 1d18db152..53b9484ff 100644 --- a/provider/resource_keycloak_authentication_execution_config.go +++ b/provider/resource_keycloak_authentication_execution_config.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -10,12 +12,12 @@ import ( func resourceKeycloakAuthenticationExecutionConfig() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakAuthenticationExecutionConfigCreate, - Read: resourceKeycloakAuthenticationExecutionConfigRead, - Delete: resourceKeycloakAuthenticationExecutionConfigDelete, - Update: resourceKeycloakAuthenticationExecutionConfigUpdate, + CreateContext: resourceKeycloakAuthenticationExecutionConfigCreate, + ReadContext: resourceKeycloakAuthenticationExecutionConfigRead, + DeleteContext: resourceKeycloakAuthenticationExecutionConfigDelete, + UpdateContext: resourceKeycloakAuthenticationExecutionConfigUpdate, Importer: &schema.ResourceImporter{ - State: resourceKeycloakAuthenticationExecutionConfigImport, + StateContext: resourceKeycloakAuthenticationExecutionConfigImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -64,22 +66,22 @@ func setAuthenticationExecutionConfigData(data *schema.ResourceData, config *key data.Set("config", config.Config) } -func resourceKeycloakAuthenticationExecutionConfigCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationExecutionConfigCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) config := getAuthenticationExecutionConfigFromData(data) - id, err := keycloakClient.NewAuthenticationExecutionConfig(config) + id, err := keycloakClient.NewAuthenticationExecutionConfig(ctx, config) if err != nil { - return err + return diag.FromErr(err) } data.SetId(id) - return resourceKeycloakAuthenticationExecutionConfigRead(data, meta) + return resourceKeycloakAuthenticationExecutionConfigRead(ctx, data, meta) } -func resourceKeycloakAuthenticationExecutionConfigRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationExecutionConfigRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) config := &keycloak.AuthenticationExecutionConfig{ @@ -88,9 +90,9 @@ func resourceKeycloakAuthenticationExecutionConfigRead(data *schema.ResourceData Id: data.Id(), } - err := keycloakClient.GetAuthenticationExecutionConfig(config) + err := keycloakClient.GetAuthenticationExecutionConfig(ctx, config) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setAuthenticationExecutionConfigData(data, config) @@ -98,20 +100,20 @@ func resourceKeycloakAuthenticationExecutionConfigRead(data *schema.ResourceData return nil } -func resourceKeycloakAuthenticationExecutionConfigUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationExecutionConfigUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) config := getAuthenticationExecutionConfigFromData(data) - err := keycloakClient.UpdateAuthenticationExecutionConfig(config) + err := keycloakClient.UpdateAuthenticationExecutionConfig(ctx, config) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakAuthenticationExecutionConfigRead(data, meta) + return resourceKeycloakAuthenticationExecutionConfigRead(ctx, data, meta) } -func resourceKeycloakAuthenticationExecutionConfigDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationExecutionConfigDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) config := &keycloak.AuthenticationExecutionConfig{ @@ -119,10 +121,10 @@ func resourceKeycloakAuthenticationExecutionConfigDelete(data *schema.ResourceDa Id: data.Id(), } - return keycloakClient.DeleteAuthenticationExecutionConfig(config) + return diag.FromErr(keycloakClient.DeleteAuthenticationExecutionConfig(ctx, config)) } -func resourceKeycloakAuthenticationExecutionConfigImport(data *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakAuthenticationExecutionConfigImport(_ context.Context, data *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(data.Id(), "/") if len(parts) != 3 || parts[0] == "" || parts[1] == "" || parts[2] == "" { diff --git a/provider/resource_keycloak_authentication_execution_config_test.go b/provider/resource_keycloak_authentication_execution_config_test.go index aa2da0d43..34d20d64c 100644 --- a/provider/resource_keycloak_authentication_execution_config_test.go +++ b/provider/resource_keycloak_authentication_execution_config_test.go @@ -141,7 +141,7 @@ func testAccCheckKeycloakAuthenticationExecutionConfigExists(resourceName string config.ExecutionId = rs.Primary.Attributes["execution_id"] config.Id = rs.Primary.ID - if err := keycloakClient.GetAuthenticationExecutionConfig(config); err != nil { + if err := keycloakClient.GetAuthenticationExecutionConfig(testCtx, config); err != nil { return fmt.Errorf("error fetching authentication execution config: %v", err) } @@ -159,7 +159,7 @@ func testAccCheckKeycloakAuthenticationExecutionConfigDestroy(s *terraform.State RealmId: rs.Primary.Attributes["realm_id"], Id: rs.Primary.ID, } - if err := keycloakClient.GetAuthenticationExecutionConfig(config); err == nil { + if err := keycloakClient.GetAuthenticationExecutionConfig(testCtx, config); err == nil { return fmt.Errorf("authentication execution config still exists") } else if !keycloak.ErrorIs404(err) { return fmt.Errorf("could not fetch authentication execution config: %v", err) diff --git a/provider/resource_keycloak_authentication_execution_test.go b/provider/resource_keycloak_authentication_execution_test.go index 9c6e5ed16..b4f3d4a41 100644 --- a/provider/resource_keycloak_authentication_execution_test.go +++ b/provider/resource_keycloak_authentication_execution_test.go @@ -53,7 +53,7 @@ func TestAccKeycloakAuthenticationExecution_createAfterManualDestroy(t *testing. }, { PreConfig: func() { - err := keycloakClient.DeleteAuthenticationExecution(authenticationExecution.RealmId, authenticationExecution.Id) + err := keycloakClient.DeleteAuthenticationExecution(testCtx, authenticationExecution.RealmId, authenticationExecution.Id) if err != nil { t.Fatal(err) } @@ -136,7 +136,7 @@ func testAccCheckKeycloakAuthenticationExecutionDestroy() resource.TestCheckFunc realm := rs.Primary.Attributes["realm_id"] parentFlowAlias := rs.Primary.Attributes["parent_flow_alias"] - authenticationExecution, _ := keycloakClient.GetAuthenticationExecution(realm, parentFlowAlias, id) + authenticationExecution, _ := keycloakClient.GetAuthenticationExecution(testCtx, realm, parentFlowAlias, id) if authenticationExecution != nil { return fmt.Errorf("authentication flow with id %s still exists", id) } @@ -156,7 +156,7 @@ func getAuthenticationExecutionFromState(s *terraform.State, resourceName string realm := rs.Primary.Attributes["realm_id"] parentFlowAlias := rs.Primary.Attributes["parent_flow_alias"] - authenticationExecution, err := keycloakClient.GetAuthenticationExecution(realm, parentFlowAlias, id) + authenticationExecution, err := keycloakClient.GetAuthenticationExecution(testCtx, realm, parentFlowAlias, id) if err != nil { return nil, fmt.Errorf("error getting authentication execution with id %s: %s", id, err) diff --git a/provider/resource_keycloak_authentication_flow.go b/provider/resource_keycloak_authentication_flow.go index 3958c02ad..27f1635a2 100644 --- a/provider/resource_keycloak_authentication_flow.go +++ b/provider/resource_keycloak_authentication_flow.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -10,12 +12,12 @@ import ( func resourceKeycloakAuthenticationFlow() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakAuthenticationFlowCreate, - Read: resourceKeycloakAuthenticationFlowRead, - Delete: resourceKeycloakAuthenticationFlowDelete, - Update: resourceKeycloakAuthenticationFlowUpdate, + CreateContext: resourceKeycloakAuthenticationFlowCreate, + ReadContext: resourceKeycloakAuthenticationFlowRead, + DeleteContext: resourceKeycloakAuthenticationFlowDelete, + UpdateContext: resourceKeycloakAuthenticationFlowUpdate, Importer: &schema.ResourceImporter{ - State: resourceKeycloakAuthenticationFlowImport, + StateContext: resourceKeycloakAuthenticationFlowImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -67,59 +69,60 @@ func mapFromAuthenticationFlowInfoToData(data *schema.ResourceData, authenticati data.Set("alias", authenticationFlow.Alias) } -func resourceKeycloakAuthenticationFlowCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationFlowCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) authenticationFlow := mapFromDataToAuthenticationFlow(data) - err := keycloakClient.NewAuthenticationFlow(authenticationFlow) + err := keycloakClient.NewAuthenticationFlow(ctx, authenticationFlow) if err != nil { - return err + return diag.FromErr(err) } mapFromAuthenticationFlowToData(data, authenticationFlow) - return resourceKeycloakAuthenticationFlowRead(data, meta) + + return resourceKeycloakAuthenticationFlowRead(ctx, data, meta) } -func resourceKeycloakAuthenticationFlowRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationFlowRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - authenticationFlow, err := keycloakClient.GetAuthenticationFlow(realmId, id) + authenticationFlow, err := keycloakClient.GetAuthenticationFlow(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromAuthenticationFlowToData(data, authenticationFlow) return nil } -func resourceKeycloakAuthenticationFlowUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationFlowUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) authenticationFlow := mapFromDataToAuthenticationFlow(data) - err := keycloakClient.UpdateAuthenticationFlow(authenticationFlow) + err := keycloakClient.UpdateAuthenticationFlow(ctx, authenticationFlow) if err != nil { - return err + return diag.FromErr(err) } mapFromAuthenticationFlowToData(data, authenticationFlow) return nil } -func resourceKeycloakAuthenticationFlowDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationFlowDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteAuthenticationFlow(realmId, id) + return diag.FromErr(keycloakClient.DeleteAuthenticationFlow(ctx, realmId, id)) } -func resourceKeycloakAuthenticationFlowImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakAuthenticationFlowImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { diff --git a/provider/resource_keycloak_authentication_flow_test.go b/provider/resource_keycloak_authentication_flow_test.go index 3907d5021..5b62c16ec 100644 --- a/provider/resource_keycloak_authentication_flow_test.go +++ b/provider/resource_keycloak_authentication_flow_test.go @@ -52,7 +52,7 @@ func TestAccKeycloakAuthenticationFlow_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteAuthenticationFlow(authenticationFlow.RealmId, authenticationFlow.Id) + err := keycloakClient.DeleteAuthenticationFlow(testCtx, authenticationFlow.RealmId, authenticationFlow.Id) if err != nil { t.Fatal(err) } @@ -171,7 +171,7 @@ func testAccCheckKeycloakAuthenticationFlowDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - authenticationFlow, _ := keycloakClient.GetAuthenticationFlow(realm, id) + authenticationFlow, _ := keycloakClient.GetAuthenticationFlow(testCtx, realm, id) if authenticationFlow != nil { return fmt.Errorf("authentication flow with id %s still exists", id) } @@ -190,7 +190,7 @@ func getAuthenticationFlowFromState(s *terraform.State, resourceName string) (*k id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - authenticationFlow, err := keycloakClient.GetAuthenticationFlow(realm, id) + authenticationFlow, err := keycloakClient.GetAuthenticationFlow(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting authentication flow with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_authentication_subflow.go b/provider/resource_keycloak_authentication_subflow.go index 36cb06731..7744b5f9a 100644 --- a/provider/resource_keycloak_authentication_subflow.go +++ b/provider/resource_keycloak_authentication_subflow.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -10,12 +12,12 @@ import ( func resourceKeycloakAuthenticationSubFlow() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakAuthenticationSubFlowCreate, - Read: resourceKeycloakAuthenticationSubFlowRead, - Delete: resourceKeycloakAuthenticationSubFlowDelete, - Update: resourceKeycloakAuthenticationSubFlowUpdate, + CreateContext: resourceKeycloakAuthenticationSubFlowCreate, + ReadContext: resourceKeycloakAuthenticationSubFlowRead, + DeleteContext: resourceKeycloakAuthenticationSubFlowDelete, + UpdateContext: resourceKeycloakAuthenticationSubFlowUpdate, Importer: &schema.ResourceImporter{ - State: resourceKeycloakAuthenticationSubFlowImport, + StateContext: resourceKeycloakAuthenticationSubFlowImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -86,58 +88,58 @@ func mapFromAuthenticationSubFlowToData(data *schema.ResourceData, authenticatio data.Set("requirement", authenticationSubFlow.Requirement) } -func resourceKeycloakAuthenticationSubFlowCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationSubFlowCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) authenticationFlow := mapFromDataToAuthenticationSubFlow(data) - err := keycloakClient.NewAuthenticationSubFlow(authenticationFlow) + err := keycloakClient.NewAuthenticationSubFlow(ctx, authenticationFlow) if err != nil { - return err + return diag.FromErr(err) } mapFromAuthenticationSubFlowToData(data, authenticationFlow) - return resourceKeycloakAuthenticationSubFlowRead(data, meta) + return resourceKeycloakAuthenticationSubFlowRead(ctx, data, meta) } -func resourceKeycloakAuthenticationSubFlowRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationSubFlowRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) parentFlowAlias := data.Get("parent_flow_alias").(string) id := data.Id() - authenticationFlow, err := keycloakClient.GetAuthenticationSubFlow(realmId, parentFlowAlias, id) + authenticationFlow, err := keycloakClient.GetAuthenticationSubFlow(ctx, realmId, parentFlowAlias, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromAuthenticationSubFlowToData(data, authenticationFlow) return nil } -func resourceKeycloakAuthenticationSubFlowUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationSubFlowUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) authenticationFlow := mapFromDataToAuthenticationSubFlow(data) - err := keycloakClient.UpdateAuthenticationSubFlow(authenticationFlow) + err := keycloakClient.UpdateAuthenticationSubFlow(ctx, authenticationFlow) if err != nil { - return err + return diag.FromErr(err) } mapFromAuthenticationSubFlowToData(data, authenticationFlow) return nil } -func resourceKeycloakAuthenticationSubFlowDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakAuthenticationSubFlowDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) parentFlowAlias := data.Get("parent_flow_alias").(string) id := data.Id() - return keycloakClient.DeleteAuthenticationSubFlow(realmId, parentFlowAlias, id) + return diag.FromErr(keycloakClient.DeleteAuthenticationSubFlow(ctx, realmId, parentFlowAlias, id)) } -func resourceKeycloakAuthenticationSubFlowImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakAuthenticationSubFlowImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 3 { diff --git a/provider/resource_keycloak_authentication_subflow_test.go b/provider/resource_keycloak_authentication_subflow_test.go index 4c23a5942..3b5438ced 100644 --- a/provider/resource_keycloak_authentication_subflow_test.go +++ b/provider/resource_keycloak_authentication_subflow_test.go @@ -56,7 +56,7 @@ func TestAccKeycloakAuthenticationSubFlow_createAfterManualDestroy(t *testing.T) }, { PreConfig: func() { - err := keycloakClient.DeleteAuthenticationSubFlow(authenticationSubFlow.RealmId, authenticationSubFlow.ParentFlowAlias, authenticationSubFlow.Id) + err := keycloakClient.DeleteAuthenticationSubFlow(testCtx, authenticationSubFlow.RealmId, authenticationSubFlow.ParentFlowAlias, authenticationSubFlow.Id) if err != nil { t.Fatal(err) } @@ -172,7 +172,7 @@ func testAccCheckKeycloakAuthenticationSubFlowDestroy() resource.TestCheckFunc { realm := rs.Primary.Attributes["realm_id"] parentFlowAlias := rs.Primary.Attributes["parent_flow_alias"] - authenticationSubFlow, _ := keycloakClient.GetAuthenticationSubFlow(realm, parentFlowAlias, id) + authenticationSubFlow, _ := keycloakClient.GetAuthenticationSubFlow(testCtx, realm, parentFlowAlias, id) if authenticationSubFlow != nil { return fmt.Errorf("authentication flow with id %s still exists", id) } @@ -192,7 +192,7 @@ func getAuthenticationSubFlowFromState(s *terraform.State, resourceName string) realm := rs.Primary.Attributes["realm_id"] parentFlowAlias := rs.Primary.Attributes["parent_flow_alias"] - authenticationSubFlow, err := keycloakClient.GetAuthenticationSubFlow(realm, parentFlowAlias, id) + authenticationSubFlow, err := keycloakClient.GetAuthenticationSubFlow(testCtx, realm, parentFlowAlias, id) if err != nil { return nil, fmt.Errorf("error getting authentication subflow with id %s: %s", id, err) diff --git a/provider/resource_keycloak_custom_identity_provider_mapper.go b/provider/resource_keycloak_custom_identity_provider_mapper.go index bf185606b..9161dcdee 100644 --- a/provider/resource_keycloak_custom_identity_provider_mapper.go +++ b/provider/resource_keycloak_custom_identity_provider_mapper.go @@ -1,19 +1,21 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakCustomIdentityProviderMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakCustomIdentityProviderMapperCreate, - Read: resourceKeycloakCustomIdentityProviderMapperRead, - Update: resourceKeycloakCustomIdentityProviderMapperUpdate, - Delete: resourceKeycloakCustomIdentityProviderMapperDelete, + CreateContext: resourceKeycloakCustomIdentityProviderMapperCreate, + ReadContext: resourceKeycloakCustomIdentityProviderMapperRead, + UpdateContext: resourceKeycloakCustomIdentityProviderMapperUpdate, + DeleteContext: resourceKeycloakCustomIdentityProviderMapperDelete, Importer: &schema.ResourceImporter{ // we can use the generic identity provider import func here - State: resourceKeycloakIdentityProviderMapperImport, + StateContext: resourceKeycloakIdentityProviderMapperImport, }, Schema: map[string]*schema.Schema{ "realm": { @@ -70,31 +72,31 @@ func setCustomIdentityProviderMapperData(data *schema.ResourceData, identityProv setExtraConfigData(data, identityProviderMapper.Config.ExtraConfig) } -func resourceKeycloakCustomIdentityProviderMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakCustomIdentityProviderMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) customIdentityProvider := getCustomIdentityProviderMapperFromData(data) - err := keycloakClient.NewCustomIdentityProviderMapper(customIdentityProvider) + err := keycloakClient.NewCustomIdentityProviderMapper(ctx, customIdentityProvider) if err != nil { - return err + return diag.FromErr(err) } setCustomIdentityProviderMapperData(data, customIdentityProvider) - return resourceKeycloakCustomIdentityProviderMapperRead(data, meta) + return resourceKeycloakCustomIdentityProviderMapperRead(ctx, data, meta) } -func resourceKeycloakCustomIdentityProviderMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakCustomIdentityProviderMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realm := data.Get("realm").(string) alias := data.Get("identity_provider_alias").(string) id := data.Id() - customIdentityProvider, err := keycloakClient.GetCustomIdentityProviderMapper(realm, alias, id) + customIdentityProvider, err := keycloakClient.GetCustomIdentityProviderMapper(ctx, realm, alias, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setCustomIdentityProviderMapperData(data, customIdentityProvider) @@ -102,14 +104,14 @@ func resourceKeycloakCustomIdentityProviderMapperRead(data *schema.ResourceData, return nil } -func resourceKeycloakCustomIdentityProviderMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakCustomIdentityProviderMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) customIdentityProvider := getCustomIdentityProviderMapperFromData(data) - err := keycloakClient.UpdateCustomIdentityProviderMapper(customIdentityProvider) + err := keycloakClient.UpdateCustomIdentityProviderMapper(ctx, customIdentityProvider) if err != nil { - return err + return diag.FromErr(err) } setCustomIdentityProviderMapperData(data, customIdentityProvider) @@ -117,12 +119,12 @@ func resourceKeycloakCustomIdentityProviderMapperUpdate(data *schema.ResourceDat return nil } -func resourceKeycloakCustomIdentityProviderMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakCustomIdentityProviderMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realm := data.Get("realm").(string) alias := data.Get("identity_provider_alias").(string) id := data.Id() - return keycloakClient.DeleteCustomIdentityProviderMapper(realm, alias, id) + return diag.FromErr(keycloakClient.DeleteCustomIdentityProviderMapper(ctx, realm, alias, id)) } diff --git a/provider/resource_keycloak_custom_identity_provider_mapper_test.go b/provider/resource_keycloak_custom_identity_provider_mapper_test.go index 1d04a7f51..95a966ad5 100644 --- a/provider/resource_keycloak_custom_identity_provider_mapper_test.go +++ b/provider/resource_keycloak_custom_identity_provider_mapper_test.go @@ -74,7 +74,7 @@ func TestAccKeycloakCustomIdentityProviderMapper_createAfterManualDestroy(t *tes }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProviderMapper(mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) + err := keycloakClient.DeleteIdentityProviderMapper(testCtx, mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) if err != nil { t.Fatal(err) } @@ -108,7 +108,7 @@ func TestAccKeycloakCustomIdentityProviderMapper_withExtraConfig_createAfterManu }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProviderMapper(mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) + err := keycloakClient.DeleteIdentityProviderMapper(testCtx, mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) if err != nil { t.Fatal(err) } @@ -201,7 +201,7 @@ func testAccCheckKeycloakCustomIdentityProviderMapperDestroy() resource.TestChec alias := rs.Primary.Attributes["identity_provider_alias"] id := rs.Primary.ID - mapper, _ := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + mapper, _ := keycloakClient.GetIdentityProviderMapper(testCtx, realm, alias, id) if mapper != nil { return fmt.Errorf("oidc config with id %s still exists", id) } @@ -221,7 +221,7 @@ func getKeycloakCustomIdentityProviderMapperFromState(s *terraform.State, resour alias := rs.Primary.Attributes["identity_provider_alias"] id := rs.Primary.ID - mapper, err := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + mapper, err := keycloakClient.GetIdentityProviderMapper(testCtx, realm, alias, id) if err != nil { return nil, fmt.Errorf("error getting identity provider mapper config with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_custom_user_federation.go b/provider/resource_keycloak_custom_user_federation.go index 1bf5c60f0..46e8d11b2 100644 --- a/provider/resource_keycloak_custom_user_federation.go +++ b/provider/resource_keycloak_custom_user_federation.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -11,13 +13,13 @@ import ( func resourceKeycloakCustomUserFederation() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakCustomUserFederationCreate, - Read: resourceKeycloakCustomUserFederationRead, - Update: resourceKeycloakCustomUserFederationUpdate, - Delete: resourceKeycloakCustomUserFederationDelete, + CreateContext: resourceKeycloakCustomUserFederationCreate, + ReadContext: resourceKeycloakCustomUserFederationRead, + UpdateContext: resourceKeycloakCustomUserFederationUpdate, + DeleteContext: resourceKeycloakCustomUserFederationDelete, // This resource can be imported using {{realm}}/{{provider_id}}. The Provider ID is displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakCustomUserFederationImport, + StateContext: resourceKeycloakCustomUserFederationImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -153,35 +155,35 @@ func setCustomUserFederationData(data *schema.ResourceData, custom *keycloak.Cus data.Set("config", config) } -func resourceKeycloakCustomUserFederationCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakCustomUserFederationCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) custom := getCustomUserFederationFromData(data) - err := keycloakClient.ValidateCustomUserFederation(custom) + err := keycloakClient.ValidateCustomUserFederation(ctx, custom) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewCustomUserFederation(custom) + err = keycloakClient.NewCustomUserFederation(ctx, custom) if err != nil { - return err + return diag.FromErr(err) } setCustomUserFederationData(data, custom) - return resourceKeycloakCustomUserFederationRead(data, meta) + return resourceKeycloakCustomUserFederationRead(ctx, data, meta) } -func resourceKeycloakCustomUserFederationRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakCustomUserFederationRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - custom, err := keycloakClient.GetCustomUserFederation(realmId, id) + custom, err := keycloakClient.GetCustomUserFederation(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setCustomUserFederationData(data, custom) @@ -189,19 +191,19 @@ func resourceKeycloakCustomUserFederationRead(data *schema.ResourceData, meta in return nil } -func resourceKeycloakCustomUserFederationUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakCustomUserFederationUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) custom := getCustomUserFederationFromData(data) - err := keycloakClient.ValidateCustomUserFederation(custom) + err := keycloakClient.ValidateCustomUserFederation(ctx, custom) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateCustomUserFederation(custom) + err = keycloakClient.UpdateCustomUserFederation(ctx, custom) if err != nil { - return err + return diag.FromErr(err) } setCustomUserFederationData(data, custom) @@ -209,16 +211,16 @@ func resourceKeycloakCustomUserFederationUpdate(data *schema.ResourceData, meta return nil } -func resourceKeycloakCustomUserFederationDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakCustomUserFederationDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteCustomUserFederation(realmId, id) + return diag.FromErr(keycloakClient.DeleteCustomUserFederation(ctx, realmId, id)) } -func resourceKeycloakCustomUserFederationImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakCustomUserFederationImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { diff --git a/provider/resource_keycloak_custom_user_federation_test.go b/provider/resource_keycloak_custom_user_federation_test.go index bb79aefa4..61f42113f 100644 --- a/provider/resource_keycloak_custom_user_federation_test.go +++ b/provider/resource_keycloak_custom_user_federation_test.go @@ -95,7 +95,7 @@ func TestAccKeycloakCustomUserFederation_createAfterManualDestroy(t *testing.T) }, { PreConfig: func() { - err := keycloakClient.DeleteCustomUserFederation(customFederation.RealmId, customFederation.Id) + err := keycloakClient.DeleteCustomUserFederation(testCtx, customFederation.RealmId, customFederation.Id) if err != nil { t.Fatal(err) } @@ -147,7 +147,7 @@ func TestAccKeycloakCustomUserFederation_ParentIdDifferentFromRealmName(t *testi ImportStateId: realmName, ImportState: true, PreConfig: func() { - err := keycloakClient.NewRealm(realm) + err := keycloakClient.NewRealm(testCtx, realm) if err != nil { t.Fatal(err) } @@ -209,7 +209,7 @@ func testAccCheckKeycloakCustomUserFederationDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - custom, _ := keycloakClient.GetCustomUserFederation(realm, id) + custom, _ := keycloakClient.GetCustomUserFederation(testCtx, realm, id) if custom != nil { return fmt.Errorf("custom user federation with id %s still exists", id) } @@ -228,7 +228,7 @@ func getCustomUserFederationFromState(s *terraform.State, resourceName string) ( id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - custom, err := keycloakClient.GetCustomUserFederation(realm, id) + custom, err := keycloakClient.GetCustomUserFederation(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting custom user federation with id %s: %s", id, err) } else if custom.FullSyncPeriod != 30 { diff --git a/provider/resource_keycloak_default_groups.go b/provider/resource_keycloak_default_groups.go index 5587070e0..a8287fe8f 100644 --- a/provider/resource_keycloak_default_groups.go +++ b/provider/resource_keycloak_default_groups.go @@ -1,18 +1,20 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakDefaultGroups() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakDefaultGroupsCreate, - Read: resourceKeycloakDefaultGroupsRead, - Update: resourceKeycloakDefaultGroupsUpdate, - Delete: resourceKeycloakDefaultGroupsDelete, + CreateContext: resourceKeycloakDefaultGroupsCreate, + ReadContext: resourceKeycloakDefaultGroupsRead, + UpdateContext: resourceKeycloakDefaultGroupsUpdate, + DeleteContext: resourceKeycloakDefaultGroupsDelete, Importer: &schema.ResourceImporter{ - State: resourceKeycloakDefaultGroupsImport, + StateContext: resourceKeycloakDefaultGroupsImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -34,16 +36,16 @@ func defaultGroupId(realmId string) string { return realmId + "/default-groups" } -func resourceKeycloakDefaultGroupsCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakDefaultGroupsCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) groupIds := interfaceSliceToStringSlice(data.Get("group_ids").(*schema.Set).List()) for _, groupId := range groupIds { - err := keycloakClient.PutDefaultGroup(realmId, groupId) + err := keycloakClient.PutDefaultGroup(ctx, realmId, groupId) if err != nil { - return err + return diag.FromErr(err) } } @@ -52,14 +54,14 @@ func resourceKeycloakDefaultGroupsCreate(data *schema.ResourceData, meta interfa return nil } -func resourceKeycloakDefaultGroupsRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakDefaultGroupsRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) - groups, err := keycloakClient.GetDefaultGroups(realmId) + groups, err := keycloakClient.GetDefaultGroups(ctx, realmId) if err != nil { - return err + return diag.FromErr(err) } var groupIds []string @@ -73,58 +75,58 @@ func resourceKeycloakDefaultGroupsRead(data *schema.ResourceData, meta interface return nil } -func resourceKeycloakDefaultGroupsUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakDefaultGroupsUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) newGroupIds := data.Get("group_ids").(*schema.Set) - originalGroups, err := keycloakClient.GetDefaultGroups(realmId) + originalGroups, err := keycloakClient.GetDefaultGroups(ctx, realmId) if err != nil { - return err + return diag.FromErr(err) } for _, originalGroup := range originalGroups { if newGroupIds.Contains(originalGroup.Id) { newGroupIds.Remove(originalGroup.Id) } else { - err := keycloakClient.DeleteDefaultGroup(realmId, originalGroup.Id) + err := keycloakClient.DeleteDefaultGroup(ctx, realmId, originalGroup.Id) if err != nil { - return err + return diag.FromErr(err) } } } // at this point newGroupIds should contain only users that need to be created for _, group := range interfaceSliceToStringSlice(newGroupIds.List()) { - err := keycloakClient.PutDefaultGroup(realmId, group) + err := keycloakClient.PutDefaultGroup(ctx, realmId, group) if err != nil { - return err + return diag.FromErr(err) } } data.SetId(defaultGroupId(realmId)) - return resourceKeycloakDefaultGroupsRead(data, meta) + return resourceKeycloakDefaultGroupsRead(ctx, data, meta) } -func resourceKeycloakDefaultGroupsDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakDefaultGroupsDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) groupIds := interfaceSliceToStringSlice(data.Get("group_ids").(*schema.Set).List()) for _, groupId := range groupIds { - err := keycloakClient.DeleteDefaultGroup(realmId, groupId) + err := keycloakClient.DeleteDefaultGroup(ctx, realmId, groupId) if err != nil { - return err + return diag.FromErr(err) } } return nil } -func resourceKeycloakDefaultGroupsImport(data *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakDefaultGroupsImport(_ context.Context, data *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { data.Set("realm_id", data.Id()) data.SetId(data.Id()) return []*schema.ResourceData{data}, nil diff --git a/provider/resource_keycloak_default_groups_test.go b/provider/resource_keycloak_default_groups_test.go index c35dd3f76..48ba862d1 100644 --- a/provider/resource_keycloak_default_groups_test.go +++ b/provider/resource_keycloak_default_groups_test.go @@ -26,7 +26,7 @@ func TestAccKeycloakDefaultGroups_basic(t *testing.T) { // we need a separate test for destroy instead of using CheckDestroy because this resource is implicitly // destroyed at the end of each test via destroying users or groups they're tied to Config: testKeycloakDefaultGroups_noDefaultGroups(realmName, groupName), - Check: testAccNoDefaultGroups("keycloak_group.group", []string{groupName}), + Check: testAccNoDefaultGroups("keycloak_group.group"), }, }, }) @@ -142,7 +142,7 @@ func testAccCheckGroupsArentDefault(resourceName string, groupNames []string) re } } -func testAccNoDefaultGroups(resourceName string, groupNames []string) resource.TestCheckFunc { +func testAccNoDefaultGroups(resourceName string) resource.TestCheckFunc { return func(s *terraform.State) error { stateGroups, err := testAccGetGroupsFromDefaultGroup(resourceName, s) if err != nil { @@ -165,7 +165,7 @@ func testAccGetGroupsFromDefaultGroup(resourceName string, s *terraform.State) ( realmId := rs.Primary.Attributes["realm_id"] - return keycloakClient.GetDefaultGroups(realmId) + return keycloakClient.GetDefaultGroups(testCtx, realmId) } func testKeycloakDefaultGroups_basic(realmName, groupName string) string { diff --git a/provider/resource_keycloak_default_roles.go b/provider/resource_keycloak_default_roles.go index c06a0f709..de7620469 100644 --- a/provider/resource_keycloak_default_roles.go +++ b/provider/resource_keycloak_default_roles.go @@ -1,8 +1,9 @@ package provider import ( - "errors" + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -11,12 +12,12 @@ import ( func resourceKeycloakDefaultRoles() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakDefaultRolesReconcile, - Read: resourceKeycloakDefaultRolesRead, - Delete: resourceKeycloakDefaultRolesDelete, - Update: resourceKeycloakDefaultRolesReconcile, + CreateContext: resourceKeycloakDefaultRolesReconcile, + ReadContext: resourceKeycloakDefaultRolesRead, + DeleteContext: resourceKeycloakDefaultRolesDelete, + UpdateContext: resourceKeycloakDefaultRolesReconcile, Importer: &schema.ResourceImporter{ - State: resourceKeycloakDefaultRolesImport, + StateContext: resourceKeycloakDefaultRolesImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -58,15 +59,15 @@ func mapFromDefaultRolesToData(data *schema.ResourceData, defaultRoles *keycloak data.Set("default_roles", defaultRoles.DefaultRoles) } -func resourceKeycloakDefaultRolesRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakDefaultRolesRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - composites, err := keycloakClient.GetDefaultRoles(realmId, id) + composites, err := keycloakClient.GetDefaultRoles(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } defaultRoleNamesList := getDefaultRoleNames(composites) @@ -82,33 +83,36 @@ func resourceKeycloakDefaultRolesRead(data *schema.ResourceData, meta interface{ return nil } -func resourceKeycloakDefaultRolesReconcile(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakDefaultRolesReconcile(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - if ok, err := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_13); !ok && err == nil { - return errors.New("this resource requires Keycloak v13 or higher") + if ok, err := keycloakClient.VersionIsGreaterThanOrEqualTo(ctx, keycloak.Version_13); !ok && err == nil { + return diag.Diagnostics{{ + Severity: diag.Error, + Summary: "this resource requires Keycloak v13 or higher", + }} } else if err != nil { - return err + return diag.FromErr(err) } defaultRoles := mapFromDataToDefaultRoles(data) - realm, err := keycloakClient.GetRealm(defaultRoles.RealmId) + realm, err := keycloakClient.GetRealm(ctx, defaultRoles.RealmId) if err != nil { - return err + return diag.FromErr(err) } data.SetId(realm.DefaultRole.Id) - composites, err := keycloakClient.GetDefaultRoles(defaultRoles.RealmId, realm.DefaultRole.Id) + composites, err := keycloakClient.GetDefaultRoles(ctx, defaultRoles.RealmId, realm.DefaultRole.Id) if err != nil { - return err + return diag.FromErr(err) } defaultRoleNamesList := getDefaultRoleNames(composites) - rolesList, err := keycloakClient.GetRealmRoles(defaultRoles.RealmId) + rolesList, err := keycloakClient.GetRealmRoles(ctx, defaultRoles.RealmId) if err != nil { - return err + return diag.FromErr(err) } // skip if actual default roles in keycloak same as we want @@ -121,7 +125,7 @@ func resourceKeycloakDefaultRolesReconcile(data *schema.ResourceData, meta inter if !roleListContains(defaultRoleNamesList, roleName) { defaultRoles, err := getRoleByNameFromList(rolesList, roleName) if err != nil { - return err + return diag.FromErr(err) } putList = append(putList, defaultRoles) } @@ -130,7 +134,7 @@ func resourceKeycloakDefaultRolesReconcile(data *schema.ResourceData, meta inter if !roleListContains(defaultRoles.DefaultRoles, roleName) { defaultRoles, err := getRoleByNameFromList(rolesList, roleName) if err != nil { - return err + return diag.FromErr(err) } deleteList = append(deleteList, defaultRoles) } @@ -142,9 +146,9 @@ func resourceKeycloakDefaultRolesReconcile(data *schema.ResourceData, meta inter RealmId: defaultRoles.RealmId, Id: realm.DefaultRole.Id, } - err := keycloakClient.AddCompositesToRole(role, putList) + err := keycloakClient.AddCompositesToRole(ctx, role, putList) if err != nil { - return err + return diag.FromErr(err) } } if len(deleteList) > 0 { @@ -152,28 +156,28 @@ func resourceKeycloakDefaultRolesReconcile(data *schema.ResourceData, meta inter RealmId: defaultRoles.RealmId, Id: realm.DefaultRole.Id, } - err := keycloakClient.RemoveCompositesFromRole(role, deleteList) + err := keycloakClient.RemoveCompositesFromRole(ctx, role, deleteList) if err != nil { - return err + return diag.FromErr(err) } } - return resourceKeycloakDefaultRolesRead(data, meta) + return resourceKeycloakDefaultRolesRead(ctx, data, meta) } // remove all roles from default -func resourceKeycloakDefaultRolesDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakDefaultRolesDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) - realm, err := keycloakClient.GetRealm(realmId) + realm, err := keycloakClient.GetRealm(ctx, realmId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } - defaultRoles, err := keycloakClient.GetDefaultRoles(realmId, realm.DefaultRole.Id) + defaultRoles, err := keycloakClient.GetDefaultRoles(ctx, realmId, realm.DefaultRole.Id) if err != nil { - return err + return diag.FromErr(err) } if len(defaultRoles) > 0 { @@ -181,16 +185,16 @@ func resourceKeycloakDefaultRolesDelete(data *schema.ResourceData, meta interfac RealmId: realmId, Id: realm.DefaultRole.Id, } - err := keycloakClient.RemoveCompositesFromRole(role, defaultRoles) + err := keycloakClient.RemoveCompositesFromRole(ctx, role, defaultRoles) if err != nil { - return err + return diag.FromErr(err) } } return nil } -func resourceKeycloakDefaultRolesImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakDefaultRolesImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { diff --git a/provider/resource_keycloak_default_roles_test.go b/provider/resource_keycloak_default_roles_test.go index 449a20718..56ad76aef 100644 --- a/provider/resource_keycloak_default_roles_test.go +++ b/provider/resource_keycloak_default_roles_test.go @@ -74,12 +74,12 @@ func testAccCheckDefaultRolesExists(resourceName string) resource.TestCheckFunc func testAccCheckKeycloakDefaultRolesDestroy(realmId string) resource.TestCheckFunc { return func(s *terraform.State) error { - realm, err := keycloakClient.GetRealm(realmId) + realm, err := keycloakClient.GetRealm(testCtx, realmId) if err != nil { return err } - composites, err := keycloakClient.GetDefaultRoles(realmId, realm.DefaultRole.Id) + composites, err := keycloakClient.GetDefaultRoles(testCtx, realmId, realm.DefaultRole.Id) if err != nil { return fmt.Errorf("error getting defaultRoles with id %s: %s", realm.DefaultRole.Id, err) } @@ -105,7 +105,7 @@ func getKeycloakDefaultRolesFromState(s *terraform.State, resourceName string) ( id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - composites, err := keycloakClient.GetDefaultRoles(realm, id) + composites, err := keycloakClient.GetDefaultRoles(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting defaultRoles with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_generic_client_protocol_mapper.go b/provider/resource_keycloak_generic_client_protocol_mapper.go index 8cf9a8359..d06922ad7 100644 --- a/provider/resource_keycloak_generic_client_protocol_mapper.go +++ b/provider/resource_keycloak_generic_client_protocol_mapper.go @@ -1,8 +1,8 @@ package provider import ( - "log" - + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" @@ -11,16 +11,16 @@ import ( func resourceKeycloakGenericClientProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakGenericClientProtocolMapperCreate, - Read: resourceKeycloakGenericClientProtocolMapperRead, - Delete: resourceKeycloakGenericClientProtocolMapperDelete, - Update: resourceKeycloakGenericClientProtocolMapperUpdate, + CreateContext: resourceKeycloakGenericClientProtocolMapperCreate, + ReadContext: resourceKeycloakGenericClientProtocolMapperRead, + DeleteContext: resourceKeycloakGenericClientProtocolMapperDelete, + UpdateContext: resourceKeycloakGenericClientProtocolMapperUpdate, // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} Importer: &schema.ResourceImporter{ - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -104,26 +104,26 @@ func mapFromGenericClientProtocolMapperToData(data *schema.ResourceData, mapper data.Set("realm_id", mapper.RealmId) } -func resourceKeycloakGenericClientProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGenericClientProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) genericClientProtocolMapper := mapFromDataToGenericClientProtocolMapper(data) - err := genericClientProtocolMapper.Validate(keycloakClient) + err := genericClientProtocolMapper.Validate(ctx, keycloakClient) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewGenericClientProtocolMapper(genericClientProtocolMapper) + err = keycloakClient.NewGenericClientProtocolMapper(ctx, genericClientProtocolMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromGenericClientProtocolMapperToData(data, genericClientProtocolMapper) - return resourceKeycloakGenericClientProtocolMapperRead(data, meta) + return resourceKeycloakGenericClientProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakGenericClientProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGenericClientProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -131,9 +131,9 @@ func resourceKeycloakGenericClientProtocolMapperRead(data *schema.ResourceData, clientScopeId := data.Get("client_scope_id").(string) id := data.Id() - resource, err := keycloakClient.GetGenericClientProtocolMapper(realmId, clientId, clientScopeId, id) + resource, err := keycloakClient.GetGenericClientProtocolMapper(ctx, realmId, clientId, clientScopeId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromGenericClientProtocolMapperToData(data, resource) @@ -141,15 +141,14 @@ func resourceKeycloakGenericClientProtocolMapperRead(data *schema.ResourceData, return nil } -func resourceKeycloakGenericClientProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { - log.Printf("[DEBUG] updating\n") +func resourceKeycloakGenericClientProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := mapFromDataToGenericClientProtocolMapper(data) - err := keycloakClient.UpdateGenericClientProtocolMapper(resource) + err := keycloakClient.UpdateGenericClientProtocolMapper(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } mapFromGenericClientProtocolMapperToData(data, resource) @@ -157,7 +156,7 @@ func resourceKeycloakGenericClientProtocolMapperUpdate(data *schema.ResourceData return nil } -func resourceKeycloakGenericClientProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGenericClientProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -165,5 +164,5 @@ func resourceKeycloakGenericClientProtocolMapperDelete(data *schema.ResourceData clientScopeId := data.Get("client_scope_id").(string) id := data.Id() - return keycloakClient.DeleteGenericClientProtocolMapper(realmId, clientId, clientScopeId, id) + return diag.FromErr(keycloakClient.DeleteGenericClientProtocolMapper(ctx, realmId, clientId, clientScopeId, id)) } diff --git a/provider/resource_keycloak_generic_client_protocol_mapper_test.go b/provider/resource_keycloak_generic_client_protocol_mapper_test.go index f6853cea8..8e4e7a772 100644 --- a/provider/resource_keycloak_generic_client_protocol_mapper_test.go +++ b/provider/resource_keycloak_generic_client_protocol_mapper_test.go @@ -142,7 +142,7 @@ func getGenericClientProtocolMapperUsingState(state *terraform.State, resourceNa clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetGenericClientProtocolMapper(realmId, clientId, clientScopeId, mapperId) + return keycloakClient.GetGenericClientProtocolMapper(testCtx, realmId, clientId, clientScopeId, mapperId) } func testKeycloakGenericClientProtocolMapper_basic_client(clientId string, mapperName string) string { diff --git a/provider/resource_keycloak_generic_client_role_mapper.go b/provider/resource_keycloak_generic_client_role_mapper.go index 013fd6ef6..2a5829801 100644 --- a/provider/resource_keycloak_generic_client_role_mapper.go +++ b/provider/resource_keycloak_generic_client_role_mapper.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -10,11 +12,11 @@ import ( func resourceKeycloakGenericClientRoleMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakGenericClientRoleMapperCreate, - Read: resourceKeycloakGenericClientRoleMapperRead, - Delete: resourceKeycloakGenericClientRoleMapperDelete, + CreateContext: resourceKeycloakGenericClientRoleMapperCreate, + ReadContext: resourceKeycloakGenericClientRoleMapperRead, + DeleteContext: resourceKeycloakGenericClientRoleMapperDelete, Importer: &schema.ResourceImporter{ - State: resourceKeycloakGenericClientRoleMapperImport, + StateContext: resourceKeycloakGenericClientRoleMapperImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -47,7 +49,7 @@ func resourceKeycloakGenericClientRoleMapper() *schema.Resource { } } -func resourceKeycloakGenericClientRoleMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGenericClientRoleMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -55,14 +57,14 @@ func resourceKeycloakGenericClientRoleMapperCreate(data *schema.ResourceData, me clientScopeId := data.Get("client_scope_id").(string) roleId := data.Get("role_id").(string) - role, err := keycloakClient.GetRole(realmId, roleId) + role, err := keycloakClient.GetRole(ctx, realmId, roleId) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.CreateRoleScopeMapping(realmId, clientId, clientScopeId, role) + err = keycloakClient.CreateRoleScopeMapping(ctx, realmId, clientId, clientScopeId, role) if err != nil { - return err + return diag.FromErr(err) } if clientId != "" { @@ -71,10 +73,10 @@ func resourceKeycloakGenericClientRoleMapperCreate(data *schema.ResourceData, me data.SetId(fmt.Sprintf("%s/client-scope/%s/scope-mappings/%s/%s", realmId, clientScopeId, role.ClientId, role.Id)) } - return resourceKeycloakGenericClientRoleMapperRead(data, meta) + return resourceKeycloakGenericClientRoleMapperRead(ctx, data, meta) } -func resourceKeycloakGenericClientRoleMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGenericClientRoleMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -82,12 +84,12 @@ func resourceKeycloakGenericClientRoleMapperRead(data *schema.ResourceData, meta clientScopeId := data.Get("client_scope_id").(string) roleId := data.Get("role_id").(string) - role, err := keycloakClient.GetRole(realmId, roleId) + role, err := keycloakClient.GetRole(ctx, realmId, roleId) if err != nil { - return err + return diag.FromErr(err) } - mappedRole, err := keycloakClient.GetRoleScopeMapping(realmId, clientId, clientScopeId, role) + mappedRole, err := keycloakClient.GetRoleScopeMapping(ctx, realmId, clientId, clientScopeId, role) if mappedRole == nil { data.SetId("") @@ -96,7 +98,7 @@ func resourceKeycloakGenericClientRoleMapperRead(data *schema.ResourceData, meta return nil } -func resourceKeycloakGenericClientRoleMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGenericClientRoleMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -104,15 +106,15 @@ func resourceKeycloakGenericClientRoleMapperDelete(data *schema.ResourceData, me clientScopeId := data.Get("client_scope_id").(string) roleId := data.Get("role_id").(string) - role, err := keycloakClient.GetRole(realmId, roleId) + role, err := keycloakClient.GetRole(ctx, realmId, roleId) if err != nil { - return err + return diag.FromErr(err) } - return keycloakClient.DeleteRoleScopeMapping(realmId, clientId, clientScopeId, role) + return diag.FromErr(keycloakClient.DeleteRoleScopeMapping(ctx, realmId, clientId, clientScopeId, role)) } -func resourceKeycloakGenericClientRoleMapperImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakGenericClientRoleMapperImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 6 { diff --git a/provider/resource_keycloak_generic_client_role_mapper_test.go b/provider/resource_keycloak_generic_client_role_mapper_test.go index 78787547c..8bd2965dd 100644 --- a/provider/resource_keycloak_generic_client_role_mapper_test.go +++ b/provider/resource_keycloak_generic_client_role_mapper_test.go @@ -53,7 +53,7 @@ func TestAccKeycloakGenericRoleMapper_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteRoleScopeMapping(childClient.RealmId, childClient.Id, "", role) + err := keycloakClient.DeleteRoleScopeMapping(testCtx, childClient.RealmId, childClient.Id, "", role) if err != nil { t.Fatal(err) } @@ -179,7 +179,7 @@ func TestAccKeycloakGenericRealmLevelRoleMapperClientScope_createAfterManualDest }, { PreConfig: func() { - err := keycloakClient.DeleteRoleScopeMapping(clientScope.RealmId, "", clientScope.Id, role) + err := keycloakClient.DeleteRoleScopeMapping(testCtx, clientScope.RealmId, "", clientScope.Id, role) if err != nil { t.Fatal(err) } @@ -215,7 +215,7 @@ func TestAccKeycloakGenericRoleMapperClientScope_createAfterManualDestroy(t *tes }, { PreConfig: func() { - err := keycloakClient.DeleteRoleScopeMapping(clientScope.RealmId, "", clientScope.Id, role) + err := keycloakClient.DeleteRoleScopeMapping(testCtx, clientScope.RealmId, "", clientScope.Id, role) if err != nil { t.Fatal(err) } @@ -276,7 +276,7 @@ func getGenericClientFromState(s *terraform.State, resourceName string) (*keyclo id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - client, err := keycloakClient.GetGenericClient(realm, id) + client, err := keycloakClient.GetGenericClient(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting generic client %s: %s", id, err) } @@ -293,7 +293,7 @@ func getOpenidClientScopeFromState(s *terraform.State, resourceName string) (*ke id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - client, err := keycloakClient.GetOpenidClientScope(realm, id) + client, err := keycloakClient.GetOpenidClientScope(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting client scope %s: %s", id, err) } diff --git a/provider/resource_keycloak_group.go b/provider/resource_keycloak_group.go index 8229ffd1d..f09a4e329 100644 --- a/provider/resource_keycloak_group.go +++ b/provider/resource_keycloak_group.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -10,13 +12,13 @@ import ( func resourceKeycloakGroup() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakGroupCreate, - Read: resourceKeycloakGroupRead, - Delete: resourceKeycloakGroupDelete, - Update: resourceKeycloakGroupUpdate, + CreateContext: resourceKeycloakGroupCreate, + ReadContext: resourceKeycloakGroupRead, + DeleteContext: resourceKeycloakGroupDelete, + UpdateContext: resourceKeycloakGroupUpdate, // This resource can be imported using {{realm}}/{{group_id}}. The Group ID is displayed in the URL when editing it from the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakGroupImport, + StateContext: resourceKeycloakGroupImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -79,30 +81,30 @@ func mapFromGroupToData(data *schema.ResourceData, group *keycloak.Group) { } } -func resourceKeycloakGroupCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) group := mapFromDataToGroup(data) - err := keycloakClient.NewGroup(group) + err := keycloakClient.NewGroup(ctx, group) if err != nil { - return err + return diag.FromErr(err) } mapFromGroupToData(data, group) - return resourceKeycloakGroupRead(data, meta) + return resourceKeycloakGroupRead(ctx, data, meta) } -func resourceKeycloakGroupRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - group, err := keycloakClient.GetGroup(realmId, id) + group, err := keycloakClient.GetGroup(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromGroupToData(data, group) @@ -110,14 +112,14 @@ func resourceKeycloakGroupRead(data *schema.ResourceData, meta interface{}) erro return nil } -func resourceKeycloakGroupUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) group := mapFromDataToGroup(data) - err := keycloakClient.UpdateGroup(group) + err := keycloakClient.UpdateGroup(ctx, group) if err != nil { - return err + return diag.FromErr(err) } mapFromGroupToData(data, group) @@ -125,16 +127,16 @@ func resourceKeycloakGroupUpdate(data *schema.ResourceData, meta interface{}) er return nil } -func resourceKeycloakGroupDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteGroup(realmId, id) + return diag.FromErr(keycloakClient.DeleteGroup(ctx, realmId, id)) } -func resourceKeycloakGroupImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakGroupImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { diff --git a/provider/resource_keycloak_group_memberships.go b/provider/resource_keycloak_group_memberships.go index 88e8b418a..ca27880a5 100644 --- a/provider/resource_keycloak_group_memberships.go +++ b/provider/resource_keycloak_group_memberships.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -9,10 +11,10 @@ import ( func resourceKeycloakGroupMemberships() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakGroupMembershipsCreate, - Read: resourceKeycloakGroupMembershipsRead, - Delete: resourceKeycloakGroupMembershipsDelete, - Update: resourceKeycloakGroupMembershipsUpdate, + CreateContext: resourceKeycloakGroupMembershipsCreate, + ReadContext: resourceKeycloakGroupMembershipsRead, + DeleteContext: resourceKeycloakGroupMembershipsDelete, + UpdateContext: resourceKeycloakGroupMembershipsUpdate, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -34,7 +36,7 @@ func resourceKeycloakGroupMemberships() *schema.Resource { } } -func resourceKeycloakGroupMembershipsCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupMembershipsCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) groupId := data.Get("group_id").(string) @@ -43,28 +45,28 @@ func resourceKeycloakGroupMembershipsCreate(data *schema.ResourceData, meta inte err := keycloakClient.ValidateGroupMembers(members) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.AddUsersToGroup(realmId, groupId, members) + err = keycloakClient.AddUsersToGroup(ctx, realmId, groupId, members) if err != nil { - return err + return diag.FromErr(err) } data.SetId(groupMembershipsId(realmId, groupId)) - return resourceKeycloakGroupMembershipsRead(data, meta) + return resourceKeycloakGroupMembershipsRead(ctx, data, meta) } -func resourceKeycloakGroupMembershipsRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupMembershipsRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) groupId := data.Get("group_id").(string) - usersInGroup, err := keycloakClient.GetGroupMembers(realmId, groupId) + usersInGroup, err := keycloakClient.GetGroupMembers(ctx, realmId, groupId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } var members []string @@ -78,7 +80,7 @@ func resourceKeycloakGroupMembershipsRead(data *schema.ResourceData, meta interf return nil } -func resourceKeycloakGroupMembershipsUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupMembershipsUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -87,12 +89,12 @@ func resourceKeycloakGroupMembershipsUpdate(data *schema.ResourceData, meta inte err := keycloakClient.ValidateGroupMembers(tfMembers.List()) if err != nil { - return err + return diag.FromErr(err) } - keycloakMembers, err := keycloakClient.GetGroupMembers(realmId, groupId) + keycloakMembers, err := keycloakClient.GetGroupMembers(ctx, realmId, groupId) if err != nil { - return err + return diag.FromErr(err) } for _, keycloakMember := range keycloakMembers { @@ -102,31 +104,31 @@ func resourceKeycloakGroupMembershipsUpdate(data *schema.ResourceData, meta inte tfMembers.Remove(keycloakMember.Username) } else { // if the user exists in keycloak and not in tf state, they need to be removed from the group - err = keycloakClient.RemoveUserFromGroup(keycloakMember, groupId) + err = keycloakClient.RemoveUserFromGroup(ctx, keycloakMember, groupId) if err != nil { - return err + return diag.FromErr(err) } } } // at this point, `tfMembers` should only contain users that exist in tf state but not keycloak. these users need to be added - err = keycloakClient.AddUsersToGroup(realmId, groupId, tfMembers.List()) + err = keycloakClient.AddUsersToGroup(ctx, realmId, groupId, tfMembers.List()) if err != nil { - return err + return diag.FromErr(err) } data.SetId(groupMembershipsId(realmId, groupId)) - return resourceKeycloakGroupMembershipsRead(data, meta) + return resourceKeycloakGroupMembershipsRead(ctx, data, meta) } -func resourceKeycloakGroupMembershipsDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupMembershipsDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) groupId := data.Get("group_id").(string) - return keycloakClient.RemoveUsersFromGroup(realmId, groupId, data.Get("members").(*schema.Set).List()) + return diag.FromErr(keycloakClient.RemoveUsersFromGroup(ctx, realmId, groupId, data.Get("members").(*schema.Set).List())) } func groupMembershipsId(realmId, groupId string) string { diff --git a/provider/resource_keycloak_group_memberships_test.go b/provider/resource_keycloak_group_memberships_test.go index 7230d2044..c07997997 100644 --- a/provider/resource_keycloak_group_memberships_test.go +++ b/provider/resource_keycloak_group_memberships_test.go @@ -161,14 +161,14 @@ func TestAccKeycloakGroupMemberships_authoritativeAdd(t *testing.T) { }, { PreConfig: func() { - groupsWithName, err := keycloakClient.ListGroupsWithName(testAccRealm.Realm, groupName) + groupsWithName, err := keycloakClient.ListGroupsWithName(testCtx, testAccRealm.Realm, groupName) if err != nil { t.Fatal(err) } userToManuallyRemove := usersInGroup[acctest.RandIntRange(0, len(usersInGroup)-1)] - err = keycloakClient.RemoveUsersFromGroup(testAccRealm.Realm, groupsWithName[0].Id, []interface{}{userToManuallyRemove}) + err = keycloakClient.RemoveUsersFromGroup(testCtx, testAccRealm.Realm, groupsWithName[0].Id, []interface{}{userToManuallyRemove}) if err != nil { t.Fatal(err) } @@ -212,12 +212,12 @@ func TestAccKeycloakGroupMemberships_authoritativeRemove(t *testing.T) { }, { PreConfig: func() { - groupsWithName, err := keycloakClient.ListGroupsWithName(testAccRealm.Realm, groupName) + groupsWithName, err := keycloakClient.ListGroupsWithName(testCtx, testAccRealm.Realm, groupName) if err != nil { t.Fatal(err) } - err = keycloakClient.AddUsersToGroup(testAccRealm.Realm, groupsWithName[0].Id, []interface{}{userToManuallyAdd}) + err = keycloakClient.AddUsersToGroup(testCtx, testAccRealm.Realm, groupsWithName[0].Id, []interface{}{userToManuallyAdd}) if err != nil { t.Fatal(err) } @@ -249,12 +249,12 @@ func TestAccKeycloakGroupMemberships_noImportNeeded(t *testing.T) { }, { PreConfig: func() { - groupsWithName, err := keycloakClient.ListGroupsWithName(testAccRealm.Realm, groupName) + groupsWithName, err := keycloakClient.ListGroupsWithName(testCtx, testAccRealm.Realm, groupName) if err != nil { t.Fatal(err) } - err = keycloakClient.AddUsersToGroup(testAccRealm.Realm, groupsWithName[0].Id, []interface{}{username}) + err = keycloakClient.AddUsersToGroup(testCtx, testAccRealm.Realm, groupsWithName[0].Id, []interface{}{username}) if err != nil { t.Fatal(err) } @@ -317,7 +317,7 @@ func TestAccKeycloakGroupMemberships_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteGroup(testAccRealm.Realm, *groupId) + err := keycloakClient.DeleteGroup(testCtx, testAccRealm.Realm, *groupId) if err != nil { t.Fatal(err) } @@ -344,7 +344,7 @@ func testAccGetUsersInGroupFromGroupMembershipsState(resourceName string, s *ter groupId = rs.Primary.ID } - return keycloakClient.GetGroupMembers(realmId, groupId) + return keycloakClient.GetGroupMembers(testCtx, realmId, groupId) } func testAccCheckUserBelongsToGroup(resourceName, user string) resource.TestCheckFunc { diff --git a/provider/resource_keycloak_group_permissions.go b/provider/resource_keycloak_group_permissions.go index ef0cb729e..28660b2bd 100644 --- a/provider/resource_keycloak_group_permissions.go +++ b/provider/resource_keycloak_group_permissions.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -10,12 +12,12 @@ import ( func resourceKeycloakGroupPermissions() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakGroupPermissionsCreate, - Read: resourceKeycloakGroupPermissionsRead, - Delete: resourceKeycloakGroupPermissionsDelete, - Update: resourceKeycloakGroupPermissionsUpdate, + CreateContext: resourceKeycloakGroupPermissionsCreate, + ReadContext: resourceKeycloakGroupPermissionsRead, + DeleteContext: resourceKeycloakGroupPermissionsDelete, + UpdateContext: resourceKeycloakGroupPermissionsUpdate, Importer: &schema.ResourceImporter{ - State: resourceKeycloakGroupPermissionsImport, + StateContext: resourceKeycloakGroupPermissionsImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -50,80 +52,80 @@ func groupPermissionsId(realmId, groupId string) string { return fmt.Sprintf("%s/%s", realmId, groupId) } -func resourceKeycloakGroupPermissionsCreate(data *schema.ResourceData, meta interface{}) error { - return resourceKeycloakGroupPermissionsUpdate(data, meta) +func resourceKeycloakGroupPermissionsCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { + return resourceKeycloakGroupPermissionsUpdate(ctx, data, meta) } -func resourceKeycloakGroupPermissionsUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupPermissionsUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) groupId := data.Get("group_id").(string) // the existence of this resource implies that it is enabled. - err := keycloakClient.EnableGroupPermissions(realmId, groupId) + err := keycloakClient.EnableGroupPermissions(ctx, realmId, groupId) if err != nil { - return err + return diag.FromErr(err) } // setting scope permissions requires us to fetch the users permissions details, as well as the realm management client - groupPermissions, err := keycloakClient.GetGroupPermissions(realmId, groupId) + groupPermissions, err := keycloakClient.GetGroupPermissions(ctx, realmId, groupId) if err != nil { - return err + return diag.FromErr(err) } - realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(realmId, "realm-management") + realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(ctx, realmId, "realm-management") if err != nil { - return err + return diag.FromErr(err) } if viewScope, ok := data.GetOk("view_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["view"].(string), viewScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["view"].(string), viewScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if manageScope, ok := data.GetOk("manage_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["manage"].(string), manageScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["manage"].(string), manageScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if viewMembersScope, ok := data.GetOk("view_members_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["view-members"].(string), viewMembersScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["view-members"].(string), viewMembersScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if manageMembersScope, ok := data.GetOk("manage_members_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["manage-members"].(string), manageMembersScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["manage-members"].(string), manageMembersScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if manageMembershipScope, ok := data.GetOk("manage_membership_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["manage-membership"].(string), manageMembershipScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["manage-membership"].(string), manageMembershipScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } - return resourceKeycloakGroupPermissionsRead(data, meta) + return resourceKeycloakGroupPermissionsRead(ctx, data, meta) } -func resourceKeycloakGroupPermissionsRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupPermissionsRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) groupId := data.Get("group_id").(string) - realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(realmId, "realm-management") + realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(ctx, realmId, "realm-management") if err != nil { - return err + return diag.FromErr(err) } - groupPermissions, err := keycloakClient.GetGroupPermissions(realmId, groupId) + groupPermissions, err := keycloakClient.GetGroupPermissions(ctx, realmId, groupId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } data.SetId(groupPermissionsId(groupPermissions.RealmId, groupPermissions.GroupId)) @@ -132,49 +134,49 @@ func resourceKeycloakGroupPermissionsRead(data *schema.ResourceData, meta interf data.Set("enabled", groupPermissions.Enabled) data.Set("authorization_resource_server_id", realmManagementClient.Id) - if viewScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["view"].(string)); err == nil && viewScope != nil { + if viewScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["view"].(string)); err == nil && viewScope != nil { data.Set("view_scope", []interface{}{viewScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if manageScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["manage"].(string)); err == nil && manageScope != nil { + if manageScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["manage"].(string)); err == nil && manageScope != nil { data.Set("manage_scope", []interface{}{manageScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if viewMembersScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["view-members"].(string)); err == nil && viewMembersScope != nil { + if viewMembersScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["view-members"].(string)); err == nil && viewMembersScope != nil { data.Set("view_members_scope", []interface{}{viewMembersScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if manageMembersScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["manage-members"].(string)); err == nil && manageMembersScope != nil { + if manageMembersScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["manage-members"].(string)); err == nil && manageMembersScope != nil { data.Set("manage_members_scope", []interface{}{manageMembersScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if manageMembershipScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["manage-membership"].(string)); err == nil && manageMembershipScope != nil { + if manageMembershipScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, groupPermissions.ScopePermissions["manage-membership"].(string)); err == nil && manageMembershipScope != nil { data.Set("manage_membership_scope", []interface{}{manageMembershipScope}) } else if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakGroupPermissionsDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupPermissionsDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) groupId := data.Get("group_id").(string) - return keycloakClient.DisableGroupPermissions(realmId, groupId) + return diag.FromErr(keycloakClient.DisableGroupPermissions(ctx, realmId, groupId)) } -func resourceKeycloakGroupPermissionsImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakGroupPermissionsImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{groupId}}") diff --git a/provider/resource_keycloak_group_permissions_test.go b/provider/resource_keycloak_group_permissions_test.go index 60e3e3ef6..0345c18f1 100644 --- a/provider/resource_keycloak_group_permissions_test.go +++ b/provider/resource_keycloak_group_permissions_test.go @@ -44,7 +44,7 @@ func testAccCheckKeycloakGroupPermissionExists(resourceName string) resource.Tes authorizationResourceServerId := rs.Primary.Attributes["authorization_resource_server_id"] var realmManagementId string - clients, _ := keycloakClient.GetOpenidClients(permissions.RealmId, false) + clients, _ := keycloakClient.GetOpenidClients(testCtx, permissions.RealmId, false) for _, client := range clients { if client.ClientId == "realm-management" { realmManagementId = client.Id @@ -60,7 +60,7 @@ func testAccCheckKeycloakGroupPermissionExists(resourceName string) resource.Tes manageMembersScopeDescription := rs.Primary.Attributes["manage_members_scope.0.description"] manageMembersScopeDecisionStrategy := rs.Primary.Attributes["manage_members_scope.0.decision_strategy"] - authzClientManageMembersScope, err := keycloakClient.GetOpenidClientAuthorizationPermission(permissions.RealmId, realmManagementId, permissions.ScopePermissions["manage-members"].(string)) + authzClientManageMembersScope, err := keycloakClient.GetOpenidClientAuthorizationPermission(testCtx, permissions.RealmId, realmManagementId, permissions.ScopePermissions["manage-members"].(string)) if err != nil { return err } @@ -99,7 +99,7 @@ func getGroupPermissionsFromState(s *terraform.State, resourceName string) (*key realmId := rs.Primary.Attributes["realm_id"] groupId := rs.Primary.Attributes["group_id"] - permissions, err := keycloakClient.GetGroupPermissions(realmId, groupId) + permissions, err := keycloakClient.GetGroupPermissions(testCtx, realmId, groupId) if err != nil { return nil, fmt.Errorf("error getting group permissions with realm id %s and group id %s : %s", realmId, groupId, err) } diff --git a/provider/resource_keycloak_group_roles.go b/provider/resource_keycloak_group_roles.go index 4f423ce96..1c5436332 100644 --- a/provider/resource_keycloak_group_roles.go +++ b/provider/resource_keycloak_group_roles.go @@ -1,7 +1,10 @@ package provider import ( + "context" + "errors" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" "strings" @@ -9,13 +12,13 @@ import ( func resourceKeycloakGroupRoles() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakGroupRolesReconcile, - Read: resourceKeycloakGroupRolesRead, - Update: resourceKeycloakGroupRolesReconcile, - Delete: resourceKeycloakGroupRolesDelete, + CreateContext: resourceKeycloakGroupRolesReconcile, + ReadContext: resourceKeycloakGroupRolesRead, + UpdateContext: resourceKeycloakGroupRolesReconcile, + DeleteContext: resourceKeycloakGroupRolesDelete, // This resource can be imported using {{realm}}/{{groupId}}. Importer: &schema.ResourceImporter{ - State: resourceKeycloakGroupRolesImport, + StateContext: resourceKeycloakGroupRolesImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -47,9 +50,9 @@ func groupRolesId(realmId, groupId string) string { return fmt.Sprintf("%s/%s", realmId, groupId) } -func addRolesToGroup(keycloakClient *keycloak.KeycloakClient, clientRolesToAdd map[string][]*keycloak.Role, realmRolesToAdd []*keycloak.Role, group *keycloak.Group) error { +func addRolesToGroup(ctx context.Context, keycloakClient *keycloak.KeycloakClient, clientRolesToAdd map[string][]*keycloak.Role, realmRolesToAdd []*keycloak.Role, group *keycloak.Group) error { if len(realmRolesToAdd) != 0 { - err := keycloakClient.AddRealmRolesToGroup(group.RealmId, group.Id, realmRolesToAdd) + err := keycloakClient.AddRealmRolesToGroup(ctx, group.RealmId, group.Id, realmRolesToAdd) if err != nil { return err } @@ -57,7 +60,7 @@ func addRolesToGroup(keycloakClient *keycloak.KeycloakClient, clientRolesToAdd m for k, roles := range clientRolesToAdd { if len(roles) != 0 { - err := keycloakClient.AddClientRolesToGroup(group.RealmId, group.Id, k, roles) + err := keycloakClient.AddClientRolesToGroup(ctx, group.RealmId, group.Id, k, roles) if err != nil { return err } @@ -67,9 +70,9 @@ func addRolesToGroup(keycloakClient *keycloak.KeycloakClient, clientRolesToAdd m return nil } -func removeRolesFromGroup(keycloakClient *keycloak.KeycloakClient, clientRolesToRemove map[string][]*keycloak.Role, realmRolesToRemove []*keycloak.Role, group *keycloak.Group) error { +func removeRolesFromGroup(ctx context.Context, keycloakClient *keycloak.KeycloakClient, clientRolesToRemove map[string][]*keycloak.Role, realmRolesToRemove []*keycloak.Role, group *keycloak.Group) error { if len(realmRolesToRemove) != 0 { - err := keycloakClient.RemoveRealmRolesFromGroup(group.RealmId, group.Id, realmRolesToRemove) + err := keycloakClient.RemoveRealmRolesFromGroup(ctx, group.RealmId, group.Id, realmRolesToRemove) if err != nil { return err } @@ -77,7 +80,7 @@ func removeRolesFromGroup(keycloakClient *keycloak.KeycloakClient, clientRolesTo for k, roles := range clientRolesToRemove { if len(roles) != 0 { - err := keycloakClient.RemoveClientRolesFromGroup(group.RealmId, group.Id, k, roles) + err := keycloakClient.RemoveClientRolesFromGroup(ctx, group.RealmId, group.Id, k, roles) if err != nil { return err } @@ -87,7 +90,7 @@ func removeRolesFromGroup(keycloakClient *keycloak.KeycloakClient, clientRolesTo return nil } -func resourceKeycloakGroupRolesReconcile(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupRolesReconcile(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -95,9 +98,9 @@ func resourceKeycloakGroupRolesReconcile(data *schema.ResourceData, meta interfa roleIds := interfaceSliceToStringSlice(data.Get("role_ids").(*schema.Set).List()) exhaustive := data.Get("exhaustive").(bool) - group, err := keycloakClient.GetGroup(realmId, groupId) + group, err := keycloakClient.GetGroup(ctx, realmId, groupId) if err != nil { - return err + return diag.FromErr(err) } if data.HasChange("role_ids") { @@ -106,46 +109,47 @@ func resourceKeycloakGroupRolesReconcile(data *schema.ResourceData, meta interfa ns := n.(*schema.Set) remove := interfaceSliceToStringSlice(os.Difference(ns).List()) - tfRolesToRemove, err := getExtendedRoleMapping(keycloakClient, realmId, remove) + tfRolesToRemove, err := getExtendedRoleMapping(ctx, keycloakClient, realmId, remove) if err != nil { - return err + return diag.FromErr(err) } - if err = removeRolesFromGroup(keycloakClient, tfRolesToRemove.clientRoles, tfRolesToRemove.realmRoles, group); err != nil { - return err + if err = removeRolesFromGroup(ctx, keycloakClient, tfRolesToRemove.clientRoles, tfRolesToRemove.realmRoles, group); err != nil { + return diag.FromErr(err) } } - tfRoles, err := getExtendedRoleMapping(keycloakClient, realmId, roleIds) + tfRoles, err := getExtendedRoleMapping(ctx, keycloakClient, realmId, roleIds) if err != nil { - return err + return diag.FromErr(err) } // get the list of currently assigned roles. Due to default realm and client roles - roleMappings, err := keycloakClient.GetGroupRoleMappings(realmId, groupId) + roleMappings, err := keycloakClient.GetGroupRoleMappings(ctx, realmId, groupId) // sort into roles we need to add and roles we need to remove updates := calculateRoleMappingUpdates(tfRoles, intoRoleMapping(roleMappings)) // add roles - err = addRolesToGroup(keycloakClient, updates.clientRolesToAdd, updates.realmRolesToAdd, group) + err = addRolesToGroup(ctx, keycloakClient, updates.clientRolesToAdd, updates.realmRolesToAdd, group) if err != nil { - return err + return diag.FromErr(err) } // remove roles if exhaustive (authoritative) if exhaustive { - err = removeRolesFromGroup(keycloakClient, updates.clientRolesToRemove, updates.realmRolesToRemove, group) + err = removeRolesFromGroup(ctx, keycloakClient, updates.clientRolesToRemove, updates.realmRolesToRemove, group) if err != nil { - return err + return diag.FromErr(err) } } data.SetId(groupRolesId(realmId, groupId)) - return resourceKeycloakGroupRolesRead(data, meta) + + return resourceKeycloakGroupRolesRead(ctx, data, meta) } -func resourceKeycloakGroupRolesRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupRolesRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -154,13 +158,13 @@ func resourceKeycloakGroupRolesRead(data *schema.ResourceData, meta interface{}) exhaustive := data.Get("exhaustive").(bool) // check if group exists, remove from state if not found - if _, err := keycloakClient.GetGroup(realmId, groupId); err != nil { - return handleNotFoundError(err, data) + if _, err := keycloakClient.GetGroup(ctx, realmId, groupId); err != nil { + return handleNotFoundError(ctx, err, data) } - roles, err := keycloakClient.GetGroupRoleMappings(realmId, groupId) + roles, err := keycloakClient.GetGroupRoleMappings(ctx, realmId, groupId) if err != nil { - return err + return diag.FromErr(err) } var roleIds []string @@ -185,29 +189,29 @@ func resourceKeycloakGroupRolesRead(data *schema.ResourceData, meta interface{}) return nil } -func resourceKeycloakGroupRolesDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakGroupRolesDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) groupId := data.Get("group_id").(string) - group, err := keycloakClient.GetGroup(realmId, groupId) + group, err := keycloakClient.GetGroup(ctx, realmId, groupId) roleIds := interfaceSliceToStringSlice(data.Get("role_ids").(*schema.Set).List()) - rolesToRemove, err := getExtendedRoleMapping(keycloakClient, realmId, roleIds) + rolesToRemove, err := getExtendedRoleMapping(ctx, keycloakClient, realmId, roleIds) if err != nil { - return err + return diag.FromErr(err) } - err = removeRolesFromGroup(keycloakClient, rolesToRemove.clientRoles, rolesToRemove.realmRoles, group) + err = removeRolesFromGroup(ctx, keycloakClient, rolesToRemove.clientRoles, rolesToRemove.realmRoles, group) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakGroupRolesImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakGroupRolesImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { @@ -221,5 +225,10 @@ func resourceKeycloakGroupRolesImport(d *schema.ResourceData, meta interface{}) d.Set("group_id", groupId) d.Set("exhaustive", true) - return []*schema.ResourceData{d}, resourceKeycloakGroupRolesRead(d, meta) + diagnostics := resourceKeycloakGroupRolesRead(ctx, d, meta) + if diagnostics.HasError() { + return nil, errors.New(diagnostics[0].Summary) + } + + return []*schema.ResourceData{d}, nil } diff --git a/provider/resource_keycloak_group_roles_test.go b/provider/resource_keycloak_group_roles_test.go index 6574163c4..794b5bf44 100644 --- a/provider/resource_keycloak_group_roles_test.go +++ b/provider/resource_keycloak_group_roles_test.go @@ -67,7 +67,7 @@ func TestAccKeycloakGroupRoles_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteGroup(group.RealmId, group.Id) + err := keycloakClient.DeleteGroup(testCtx, group.RealmId, group.Id) if err != nil { t.Fatal(err) } @@ -322,7 +322,7 @@ func testAccCheckKeycloakGroupHasRoles(resourceName string, exhaustive bool) res continue } - role, err := keycloakClient.GetRole(realm, v) + role, err := keycloakClient.GetRole(testCtx, realm, v) if err != nil { return err } @@ -330,12 +330,12 @@ func testAccCheckKeycloakGroupHasRoles(resourceName string, exhaustive bool) res roles = append(roles, role) } - group, err := keycloakClient.GetGroup(realm, groupId) + group, err := keycloakClient.GetGroup(testCtx, realm, groupId) if err != nil { return err } - groupRoleMappings, err := keycloakClient.GetGroupRoleMappings(realm, groupId) + groupRoleMappings, err := keycloakClient.GetGroupRoleMappings(testCtx, realm, groupId) if err != nil { return err } @@ -391,7 +391,7 @@ func testAccCheckKeycloakGroupHasNoRoles(resourceName string) resource.TestCheck realm := rs.Primary.Attributes["realm_id"] id := rs.Primary.ID - group, err := keycloakClient.GetGroup(realm, id) + group, err := keycloakClient.GetGroup(testCtx, realm, id) if err != nil { return err } diff --git a/provider/resource_keycloak_group_test.go b/provider/resource_keycloak_group_test.go index 215996000..549a0f461 100644 --- a/provider/resource_keycloak_group_test.go +++ b/provider/resource_keycloak_group_test.go @@ -74,7 +74,7 @@ func TestAccKeycloakGroup_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteGroup(group.RealmId, group.Id) + err := keycloakClient.DeleteGroup(testCtx, group.RealmId, group.Id) if err != nil { t.Fatal(err) } @@ -326,7 +326,7 @@ func testAccCheckKeycloakGroupDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - group, _ := keycloakClient.GetGroup(realm, id) + group, _ := keycloakClient.GetGroup(testCtx, realm, id) if group != nil { return fmt.Errorf("group with id %s still exists", id) } @@ -345,7 +345,7 @@ func getGroupFromState(s *terraform.State, resourceName string) (*keycloak.Group id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - group, err := keycloakClient.GetGroup(realm, id) + group, err := keycloakClient.GetGroup(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting group with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_hardcoded_attribute_identity_provider_mapper.go b/provider/resource_keycloak_hardcoded_attribute_identity_provider_mapper.go index 383e7ab7c..20f91c0cd 100644 --- a/provider/resource_keycloak_hardcoded_attribute_identity_provider_mapper.go +++ b/provider/resource_keycloak_hardcoded_attribute_identity_provider_mapper.go @@ -1,8 +1,8 @@ package provider import ( + "context" "fmt" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) @@ -28,13 +28,13 @@ func resourceKeycloakHardcodedAttributeIdentityProviderMapper() *schema.Resource } genericMapperResource := resourceKeycloakIdentityProviderMapper() genericMapperResource.Schema = mergeSchemas(genericMapperResource.Schema, mapperSchema) - genericMapperResource.Create = resourceKeycloakIdentityProviderMapperCreate(getHardcodedAttributeIdentityProviderMapperFromData, setHardcodedAttributeIdentityProviderMapperData) - genericMapperResource.Read = resourceKeycloakIdentityProviderMapperRead(setHardcodedAttributeIdentityProviderMapperData) - genericMapperResource.Update = resourceKeycloakIdentityProviderMapperUpdate(getHardcodedAttributeIdentityProviderMapperFromData, setHardcodedAttributeIdentityProviderMapperData) + genericMapperResource.CreateContext = resourceKeycloakIdentityProviderMapperCreate(getHardcodedAttributeIdentityProviderMapperFromData, setHardcodedAttributeIdentityProviderMapperData) + genericMapperResource.ReadContext = resourceKeycloakIdentityProviderMapperRead(setHardcodedAttributeIdentityProviderMapperData) + genericMapperResource.UpdateContext = resourceKeycloakIdentityProviderMapperUpdate(getHardcodedAttributeIdentityProviderMapperFromData, setHardcodedAttributeIdentityProviderMapperData) return genericMapperResource } -func getHardcodedAttributeIdentityProviderMapperFromData(data *schema.ResourceData, _ interface{}) (*keycloak.IdentityProviderMapper, error) { +func getHardcodedAttributeIdentityProviderMapperFromData(_ context.Context, data *schema.ResourceData, _ interface{}) (*keycloak.IdentityProviderMapper, error) { rec, _ := getIdentityProviderMapperFromData(data) rec.IdentityProviderMapper = getHardcodedAttributeIdentityProviderMapperType(data.Get("user_session").(bool)) diff --git a/provider/resource_keycloak_hardcoded_attribute_identity_provider_mapper_test.go b/provider/resource_keycloak_hardcoded_attribute_identity_provider_mapper_test.go index b7f5c5b1f..e60cf3cf6 100644 --- a/provider/resource_keycloak_hardcoded_attribute_identity_provider_mapper_test.go +++ b/provider/resource_keycloak_hardcoded_attribute_identity_provider_mapper_test.go @@ -74,7 +74,7 @@ func TestAccKeycloakHardcodedAttributeIdentityProviderMapper_createAfterManualDe }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProviderMapper(mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) + err := keycloakClient.DeleteIdentityProviderMapper(testCtx, mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) if err != nil { t.Fatal(err) } @@ -108,7 +108,7 @@ func TestAccKeycloakHardcodedAttributeIdentityProviderMapper_withExtraConfig_cre }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProviderMapper(mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) + err := keycloakClient.DeleteIdentityProviderMapper(testCtx, mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) if err != nil { t.Fatal(err) } @@ -201,7 +201,7 @@ func testAccCheckKeycloakHardcodedAttributeIdentityProviderMapperDestroy() resou alias := rs.Primary.Attributes["identity_provider_alias"] id := rs.Primary.ID - mapper, _ := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + mapper, _ := keycloakClient.GetIdentityProviderMapper(testCtx, realm, alias, id) if mapper != nil { return fmt.Errorf("oidc config with id %s still exists", id) } @@ -221,7 +221,7 @@ func getKeycloakHardcodedAttributeIdentityProviderMapperFromState(s *terraform.S alias := rs.Primary.Attributes["identity_provider_alias"] id := rs.Primary.ID - mapper, err := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + mapper, err := keycloakClient.GetIdentityProviderMapper(testCtx, realm, alias, id) if err != nil { return nil, fmt.Errorf("error getting identity provider mapper config with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_hardcoded_role_identity_provider_mapper.go b/provider/resource_keycloak_hardcoded_role_identity_provider_mapper.go index 4bdef9eaa..667b502a5 100644 --- a/provider/resource_keycloak_hardcoded_role_identity_provider_mapper.go +++ b/provider/resource_keycloak_hardcoded_role_identity_provider_mapper.go @@ -1,6 +1,7 @@ package provider import ( + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) @@ -15,13 +16,13 @@ func resourceKeycloakHardcodedRoleIdentityProviderMapper() *schema.Resource { } genericMapperResource := resourceKeycloakIdentityProviderMapper() genericMapperResource.Schema = mergeSchemas(genericMapperResource.Schema, mapperSchema) - genericMapperResource.Create = resourceKeycloakIdentityProviderMapperCreate(getHardcodedRoleIdentityProviderMapperFromData, setHardcodedRoleIdentityProviderMapperData) - genericMapperResource.Read = resourceKeycloakIdentityProviderMapperRead(setHardcodedRoleIdentityProviderMapperData) - genericMapperResource.Update = resourceKeycloakIdentityProviderMapperUpdate(getHardcodedRoleIdentityProviderMapperFromData, setHardcodedRoleIdentityProviderMapperData) + genericMapperResource.CreateContext = resourceKeycloakIdentityProviderMapperCreate(getHardcodedRoleIdentityProviderMapperFromData, setHardcodedRoleIdentityProviderMapperData) + genericMapperResource.ReadContext = resourceKeycloakIdentityProviderMapperRead(setHardcodedRoleIdentityProviderMapperData) + genericMapperResource.UpdateContext = resourceKeycloakIdentityProviderMapperUpdate(getHardcodedRoleIdentityProviderMapperFromData, setHardcodedRoleIdentityProviderMapperData) return genericMapperResource } -func getHardcodedRoleIdentityProviderMapperFromData(data *schema.ResourceData, _ interface{}) (*keycloak.IdentityProviderMapper, error) { +func getHardcodedRoleIdentityProviderMapperFromData(_ context.Context, data *schema.ResourceData, _ interface{}) (*keycloak.IdentityProviderMapper, error) { rec, _ := getIdentityProviderMapperFromData(data) rec.IdentityProviderMapper = "oidc-hardcoded-role-idp-mapper" diff --git a/provider/resource_keycloak_hardcoded_role_identity_provider_mapper_test.go b/provider/resource_keycloak_hardcoded_role_identity_provider_mapper_test.go index 81f37da56..087ab9f0b 100644 --- a/provider/resource_keycloak_hardcoded_role_identity_provider_mapper_test.go +++ b/provider/resource_keycloak_hardcoded_role_identity_provider_mapper_test.go @@ -71,7 +71,7 @@ func TestAccKeycloakHardcodedRoleIdentityProviderMapper_createAfterManualDestroy }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProviderMapper(mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) + err := keycloakClient.DeleteIdentityProviderMapper(testCtx, mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) if err != nil { t.Fatal(err) } @@ -104,7 +104,7 @@ func TestAccKeycloakHardcodedRoleIdentityProviderMapper_withExtraConfig_createAf }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProviderMapper(mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) + err := keycloakClient.DeleteIdentityProviderMapper(testCtx, mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) if err != nil { t.Fatal(err) } @@ -193,7 +193,7 @@ func testAccCheckKeycloakHardcodedRoleIdentityProviderMapperDestroy() resource.T alias := rs.Primary.Attributes["identity_provider_alias"] id := rs.Primary.ID - mapper, _ := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + mapper, _ := keycloakClient.GetIdentityProviderMapper(testCtx, realm, alias, id) if mapper != nil { return fmt.Errorf("oidc config with id %s still exists", id) } @@ -213,7 +213,7 @@ func getKeycloakHardcodedRoleIdentityProviderMapperFromState(s *terraform.State, alias := rs.Primary.Attributes["identity_provider_alias"] id := rs.Primary.ID - mapper, err := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + mapper, err := keycloakClient.GetIdentityProviderMapper(testCtx, realm, alias, id) if err != nil { return nil, fmt.Errorf("error getting identity provider mapper config with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_identity_provider_token_exchange_scope_permission.go b/provider/resource_keycloak_identity_provider_token_exchange_scope_permission.go index 4be443c67..671199df3 100644 --- a/provider/resource_keycloak_identity_provider_token_exchange_scope_permission.go +++ b/provider/resource_keycloak_identity_provider_token_exchange_scope_permission.go @@ -1,12 +1,14 @@ package provider import ( + "context" "encoding/hex" "fmt" + "github.com/hashicorp/terraform-plugin-log/tflog" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" - "log" "math/rand" "strings" ) @@ -17,13 +19,13 @@ var ( func resourceKeycloakIdentityProviderTokenExchangeScopePermission() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakIdentityProviderTokenExchangeScopePermissionCreate, - Read: resourceKeycloakIdentityProviderTokenExchangeScopePermissionRead, - Delete: resourceKeycloakIdentityProviderTokenExchangeScopePermissionDelete, - Update: resourceKeycloakIdentityProviderTokenExchangeScopePermissionUpdate, + CreateContext: resourceKeycloakIdentityProviderTokenExchangeScopePermissionCreate, + ReadContext: resourceKeycloakIdentityProviderTokenExchangeScopePermissionRead, + DeleteContext: resourceKeycloakIdentityProviderTokenExchangeScopePermissionDelete, + UpdateContext: resourceKeycloakIdentityProviderTokenExchangeScopePermissionUpdate, // This resource can be imported using {{realmId}}/{{providerAlias}}. The provider alias is displayed in the URL when editing it from the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakIdentityProviderTokenExchangeScopePermissionImport, + StateContext: resourceKeycloakIdentityProviderTokenExchangeScopePermissionImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -73,13 +75,13 @@ func resourceKeycloakIdentityProviderTokenExchangeScopePermission() *schema.Reso } } -func setIdentityProviderTokenExchangeScopePermissionClientPolicy(keycloakClient *keycloak.KeycloakClient, realmId, providerAlias string, clients []string) error { - identityProviderPermissions, err := keycloakClient.GetIdentityProviderPermissions(realmId, providerAlias) +func setIdentityProviderTokenExchangeScopePermissionClientPolicy(ctx context.Context, keycloakClient *keycloak.KeycloakClient, realmId, providerAlias string, clients []string) error { + identityProviderPermissions, err := keycloakClient.GetIdentityProviderPermissions(ctx, realmId, providerAlias) if err != nil { return err } - realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(realmId, "realm-management") + realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(ctx, realmId, "realm-management") if err != nil { return err } @@ -89,33 +91,33 @@ func setIdentityProviderTokenExchangeScopePermissionClientPolicy(keycloakClient return err } - permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(realmId, realmManagementClient.Id, tokenExchangeScopedPermissionId) + permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(ctx, realmId, realmManagementClient.Id, tokenExchangeScopedPermissionId) if err != nil { return err } if len(permission.Policies) == 0 { - policyId, err := createClientPolicy(keycloakClient, realmId, realmManagementClient.Id, providerAlias, clients) + policyId, err := createClientPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, providerAlias, clients) if err != nil { return err } permission.Policies = []string{policyId} - return keycloakClient.UpdateOpenidClientAuthorizationPermission(permission) + return keycloakClient.UpdateOpenidClientAuthorizationPermission(ctx, permission) } else if len(permission.Policies) == 1 { - openidClientAuthorizationClientPolicy, err := keycloakClient.GetOpenidClientAuthorizationClientPolicy(realmId, realmManagementClient.Id, permission.Policies[0]) + openidClientAuthorizationClientPolicy, err := keycloakClient.GetOpenidClientAuthorizationClientPolicy(ctx, realmId, realmManagementClient.Id, permission.Policies[0]) if err != nil { return err } openidClientAuthorizationClientPolicy.Clients = clients - return keycloakClient.UpdateOpenidClientAuthorizationClientPolicy(openidClientAuthorizationClientPolicy) + return keycloakClient.UpdateOpenidClientAuthorizationClientPolicy(ctx, openidClientAuthorizationClientPolicy) } else { return fmt.Errorf("only one client policy is supported, but %d were found", len(permission.Policies)) } } -func createClientPolicy(keycloakClient *keycloak.KeycloakClient, realmId, realmManagementClientId, providerAlias string, clients []string) (string, error) { +func createClientPolicy(ctx context.Context, keycloakClient *keycloak.KeycloakClient, realmId, realmManagementClientId, providerAlias string, clients []string) (string, error) { openidClientAuthorizationClientPolicy := &keycloak.OpenidClientAuthorizationClientPolicy{ RealmId: realmId, ResourceServerId: realmManagementClientId, @@ -125,14 +127,14 @@ func createClientPolicy(keycloakClient *keycloak.KeycloakClient, realmId, realmM Type: "client", Clients: clients, } - err := keycloakClient.NewOpenidClientAuthorizationClientPolicy(openidClientAuthorizationClientPolicy) + err := keycloakClient.NewOpenidClientAuthorizationClientPolicy(ctx, openidClientAuthorizationClientPolicy) if err != nil { if keycloak.ErrorIs409(err) { b := make([]byte, 4) rand.Read(b) suffix := hex.EncodeToString(b) openidClientAuthorizationClientPolicy.Name = providerAlias + "_" + suffix + "_idp_client_policy" - err = keycloakClient.NewOpenidClientAuthorizationClientPolicy(openidClientAuthorizationClientPolicy) + err = keycloakClient.NewOpenidClientAuthorizationClientPolicy(ctx, openidClientAuthorizationClientPolicy) } } if err != nil { @@ -141,13 +143,13 @@ func createClientPolicy(keycloakClient *keycloak.KeycloakClient, realmId, realmM return openidClientAuthorizationClientPolicy.Id, nil } -func unsetIdentityProviderTokenExchangeScopePermissionPolicy(keycloakClient *keycloak.KeycloakClient, realmId, providerAlias, policyId string) error { - identityProviderPermissions, err := keycloakClient.GetIdentityProviderPermissions(realmId, providerAlias) +func unsetIdentityProviderTokenExchangeScopePermissionPolicy(ctx context.Context, keycloakClient *keycloak.KeycloakClient, realmId, providerAlias, policyId string) error { + identityProviderPermissions, err := keycloakClient.GetIdentityProviderPermissions(ctx, realmId, providerAlias) if err != nil { return err } - realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(realmId, "realm-management") + realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(ctx, realmId, "realm-management") if err != nil { return err } @@ -157,32 +159,32 @@ func unsetIdentityProviderTokenExchangeScopePermissionPolicy(keycloakClient *key return err } - permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(realmId, realmManagementClient.Id, tokenExchangeScopedPermissionId) + permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(ctx, realmId, realmManagementClient.Id, tokenExchangeScopedPermissionId) if err != nil { return err } permission.Policies = []string{} - err = keycloakClient.UpdateOpenidClientAuthorizationPermission(permission) + err = keycloakClient.UpdateOpenidClientAuthorizationPermission(ctx, permission) if err != nil { return err } - err = keycloakClient.DisableIdentityProviderPermissions(realmId, providerAlias) + err = keycloakClient.DisableIdentityProviderPermissions(ctx, realmId, providerAlias) if err != nil { return err } - _ = keycloakClient.DeleteOpenidClientAuthorizationClientPolicy(realmId, realmManagementClient.Id, policyId) + _ = keycloakClient.DeleteOpenidClientAuthorizationClientPolicy(ctx, realmId, realmManagementClient.Id, policyId) return nil } -func resourceKeycloakIdentityProviderTokenExchangeScopePermissionCreate(data *schema.ResourceData, meta interface{}) error { - return resourceKeycloakIdentityProviderTokenExchangeScopePermissionUpdate(data, meta) +func resourceKeycloakIdentityProviderTokenExchangeScopePermissionCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { + return resourceKeycloakIdentityProviderTokenExchangeScopePermissionUpdate(ctx, data, meta) } -func resourceKeycloakIdentityProviderTokenExchangeScopePermissionUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakIdentityProviderTokenExchangeScopePermissionUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) providerAlias := data.Get("provider_alias").(string) @@ -195,32 +197,34 @@ func resourceKeycloakIdentityProviderTokenExchangeScopePermissionUpdate(data *sc } } - err := keycloakClient.EnableIdentityProviderPermissions(realmId, providerAlias) + err := keycloakClient.EnableIdentityProviderPermissions(ctx, realmId, providerAlias) if err != nil { - return err + return diag.FromErr(err) } if policyType == "client" { - err = setIdentityProviderTokenExchangeScopePermissionClientPolicy(keycloakClient, realmId, providerAlias, clients) + err = setIdentityProviderTokenExchangeScopePermissionClientPolicy(ctx, keycloakClient, realmId, providerAlias, clients) if err != nil { - return err + return diag.FromErr(err) } } else { - return fmt.Errorf("invalid policy type, supported types are ['client']") + return diag.Errorf("invalid policy type, supported types are ['client']") } - return resourceKeycloakIdentityProviderTokenExchangeScopePermissionRead(data, meta) + return resourceKeycloakIdentityProviderTokenExchangeScopePermissionRead(ctx, data, meta) } -func resourceKeycloakIdentityProviderTokenExchangeScopePermissionRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakIdentityProviderTokenExchangeScopePermissionRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) providerAlias := data.Get("provider_alias").(string) - identityProviderPermissions, err := keycloakClient.GetIdentityProviderPermissions(realmId, providerAlias) + identityProviderPermissions, err := keycloakClient.GetIdentityProviderPermissions(ctx, realmId, providerAlias) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } if !identityProviderPermissions.Enabled { - log.Printf("[WARN] Removing resource with id %s from state as it no longer enabled", data.Id()) + tflog.Warn(ctx, "Removing resource from state as it is no longer enabled", map[string]interface{}{ + "id": data.Id(), + }) data.SetId("") return nil } @@ -229,33 +233,33 @@ func resourceKeycloakIdentityProviderTokenExchangeScopePermissionRead(data *sche data.Set("realm_id", identityProviderPermissions.RealmId) data.Set("provider_alias", identityProviderPermissions.ProviderAlias) - realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(realmId, "realm-management") + realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(ctx, realmId, "realm-management") if err != nil { - return err + return diag.FromErr(err) } tokenExchangeScopedPermissionId, err := identityProviderPermissions.GetTokenExchangeScopedPermissionId() if err != nil { - return err + return diag.FromErr(err) } - permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(realmId, realmManagementClient.Id, tokenExchangeScopedPermissionId) + permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(ctx, realmId, realmManagementClient.Id, tokenExchangeScopedPermissionId) if err != nil { - return err + return diag.FromErr(err) } var openidClientAuthorizationClientPolicyId string if len(permission.Policies) >= 1 { openidClientAuthorizationClientPolicyId = permission.Policies[0] } else { - openidClientAuthorizationClientPolicyId, err = createClientPolicy(keycloakClient, realmId, realmManagementClient.Id, providerAlias, data.Get("clients").([]string)) + openidClientAuthorizationClientPolicyId, err = createClientPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, providerAlias, data.Get("clients").([]string)) if err != nil { - return err + return diag.FromErr(err) } } - openidClientAuthorizationClientPolicy, err := keycloakClient.GetOpenidClientAuthorizationClientPolicy(realmId, realmManagementClient.Id, openidClientAuthorizationClientPolicyId) + openidClientAuthorizationClientPolicy, err := keycloakClient.GetOpenidClientAuthorizationClientPolicy(ctx, realmId, realmManagementClient.Id, openidClientAuthorizationClientPolicyId) if err != nil { - return err + return diag.FromErr(err) } data.Set("policy_id", openidClientAuthorizationClientPolicy.Id) @@ -270,21 +274,21 @@ func resourceKeycloakIdentityProviderTokenExchangeScopePermissionRead(data *sche return nil } -func resourceKeycloakIdentityProviderTokenExchangeScopePermissionDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakIdentityProviderTokenExchangeScopePermissionDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) providerAlias := data.Get("provider_alias").(string) policyId := data.Get("policy_id").(string) - identityProviderPermissions, err := keycloakClient.GetIdentityProviderPermissions(realmId, providerAlias) + identityProviderPermissions, err := keycloakClient.GetIdentityProviderPermissions(ctx, realmId, providerAlias) if err == nil && identityProviderPermissions.Enabled { - _ = unsetIdentityProviderTokenExchangeScopePermissionPolicy(keycloakClient, realmId, providerAlias, policyId) + _ = unsetIdentityProviderTokenExchangeScopePermissionPolicy(ctx, keycloakClient, realmId, providerAlias, policyId) } - return keycloakClient.DisableIdentityProviderPermissions(realmId, providerAlias) + return diag.FromErr(keycloakClient.DisableIdentityProviderPermissions(ctx, realmId, providerAlias)) } -func resourceKeycloakIdentityProviderTokenExchangeScopePermissionImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakIdentityProviderTokenExchangeScopePermissionImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { diff --git a/provider/resource_keycloak_identity_provider_token_exchange_scope_permission_test.go b/provider/resource_keycloak_identity_provider_token_exchange_scope_permission_test.go index 90ed5027b..e77cb4d12 100644 --- a/provider/resource_keycloak_identity_provider_token_exchange_scope_permission_test.go +++ b/provider/resource_keycloak_identity_provider_token_exchange_scope_permission_test.go @@ -53,7 +53,7 @@ func TestAccKeycloakIdpTokenExchangeScopePermission_createAfterManualDestroy(t * }, { PreConfig: func() { - err := keycloakClient.DisableIdentityProviderPermissions(idpPermissions.RealmId, idpPermissions.ProviderAlias) + err := keycloakClient.DisableIdentityProviderPermissions(testCtx, idpPermissions.RealmId, idpPermissions.ProviderAlias) if err != nil { t.Fatal(err) } @@ -157,22 +157,22 @@ func testAccCheckKeycloakIdpTokenExchangeScopePermissionDestroy() resource.TestC authorizationIdpResourceId := rs.Primary.Attributes["authorization_idp_resource_id"] authorizationTokenExchangeScopePermissionId := rs.Primary.Attributes["authorization_token_exchange_scope_permission_id"] - permissions, _ := keycloakClient.GetIdentityProviderPermissions(realmId, providerAlias) + permissions, _ := keycloakClient.GetIdentityProviderPermissions(testCtx, realmId, providerAlias) if permissions != nil { return fmt.Errorf("idp permissions for realm id %s and provider alias %s still exists", realmId, providerAlias) } - tokenExchangePermission, _ := keycloakClient.GetOpenidClientAuthorizationPermission(realmId, authorizationResourceServerId, authorizationTokenExchangeScopePermissionId) + tokenExchangePermission, _ := keycloakClient.GetOpenidClientAuthorizationPermission(testCtx, realmId, authorizationResourceServerId, authorizationTokenExchangeScopePermissionId) if tokenExchangePermission != nil { return fmt.Errorf("tokenExchangePermission for realm id %s, resource server id %s and permission id %s still exists", realmId, authorizationResourceServerId, authorizationTokenExchangeScopePermissionId) } - idpResource, _ := keycloakClient.GetOpenidClientAuthorizationResource(realmId, authorizationResourceServerId, authorizationIdpResourceId) + idpResource, _ := keycloakClient.GetOpenidClientAuthorizationResource(testCtx, realmId, authorizationResourceServerId, authorizationIdpResourceId) if idpResource != nil { return fmt.Errorf("idp resource for realm id%s, resource server id %s and resource id %s still exists", realmId, authorizationResourceServerId, authorizationIdpResourceId) } - policy, _ := keycloakClient.GetOpenidClientAuthorizationClientPolicy(realmId, authorizationResourceServerId, policyId) + policy, _ := keycloakClient.GetOpenidClientAuthorizationClientPolicy(testCtx, realmId, authorizationResourceServerId, policyId) if policy != nil { return fmt.Errorf("client policy for realm id %s, resource server id %s and policy id %s still exists", realmId, authorizationResourceServerId, policyId) } @@ -199,7 +199,7 @@ func testAccCheckKeycloakIdpTokenExchangeScopePermissionExists(resourceName stri authorizationTokenExchangeScopePermissionId := rs.Primary.Attributes["authorization_token_exchange_scope_permission_id"] var realmManagementId string - clients, _ := keycloakClient.GetOpenidClients(permissions.RealmId, false) + clients, _ := keycloakClient.GetOpenidClients(testCtx, permissions.RealmId, false) for _, client := range clients { if client.ClientId == "realm-management" { realmManagementId = client.Id @@ -220,7 +220,7 @@ func testAccCheckKeycloakIdpTokenExchangeScopePermissionExists(resourceName stri return fmt.Errorf("computed authorizationTokenExchangeScopePermissionId %s was not equal to %s scope permission id set on the idp permission", authorizationTokenExchangeScopePermissionId, tokenExchangeScopedPermissionId) } - tokenExchangeScopedPermission, err := keycloakClient.GetOpenidClientAuthorizationPermission(permissions.RealmId, realmManagementId, tokenExchangeScopedPermissionId) + tokenExchangeScopedPermission, err := keycloakClient.GetOpenidClientAuthorizationPermission(testCtx, permissions.RealmId, realmManagementId, tokenExchangeScopedPermissionId) if err != nil { return err } @@ -233,7 +233,7 @@ func testAccCheckKeycloakIdpTokenExchangeScopePermissionExists(resourceName stri return fmt.Errorf("token exchange scope permission has not exact 1 policy, it has %d", len(tokenExchangeScopedPermission.Policies)) } - policy, err := keycloakClient.GetOpenidClientAuthorizationClientPolicy(permissions.RealmId, realmManagementId, tokenExchangeScopedPermission.Policies[0]) + policy, err := keycloakClient.GetOpenidClientAuthorizationClientPolicy(testCtx, permissions.RealmId, realmManagementId, tokenExchangeScopedPermission.Policies[0]) if err != nil { return err } @@ -242,7 +242,7 @@ func testAccCheckKeycloakIdpTokenExchangeScopePermissionExists(resourceName stri return fmt.Errorf("computed policyId %s was not equal to %s policyId found on the token exchange scope based permission", policyId, policy.Id) } - idpResource, err := keycloakClient.GetOpenidClientAuthorizationResource(permissions.RealmId, realmManagementId, permissions.Resource) + idpResource, err := keycloakClient.GetOpenidClientAuthorizationResource(testCtx, permissions.RealmId, realmManagementId, permissions.Resource) if err != nil { return err } @@ -269,12 +269,12 @@ func testAccCheckKeycloakIdpTokenExchangeScopePermissionClientPolicyHasClient(re authorizationResourceServerId := rs.Primary.Attributes["authorization_resource_server_id"] policyId := rs.Primary.Attributes["policy_id"] - policy, err := keycloakClient.GetOpenidClientAuthorizationClientPolicy(realmId, authorizationResourceServerId, policyId) + policy, err := keycloakClient.GetOpenidClientAuthorizationClientPolicy(testCtx, realmId, authorizationResourceServerId, policyId) if err != nil { return err } - client, err := keycloakClient.GetOpenidClientByClientId(realmId, clientId) + client, err := keycloakClient.GetOpenidClientByClientId(testCtx, realmId, clientId) if err != nil { return err } @@ -320,7 +320,7 @@ func getIdpPermissionsFromState(s *terraform.State, resourceName string) (*keycl realmId := rs.Primary.Attributes["realm_id"] providerAlias := rs.Primary.Attributes["provider_alias"] - permissions, err := keycloakClient.GetIdentityProviderPermissions(realmId, providerAlias) + permissions, err := keycloakClient.GetIdentityProviderPermissions(testCtx, realmId, providerAlias) if err != nil { return nil, fmt.Errorf("error getting idp permissions with realm id %s and provider alias %s: %s", realmId, providerAlias, err) diff --git a/provider/resource_keycloak_ldap_full_name_mapper.go b/provider/resource_keycloak_ldap_full_name_mapper.go index 755edc9c8..4715a465f 100644 --- a/provider/resource_keycloak_ldap_full_name_mapper.go +++ b/provider/resource_keycloak_ldap_full_name_mapper.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" "strings" @@ -9,13 +11,13 @@ import ( func resourceKeycloakLdapFullNameMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakLdapFullNameMapperCreate, - Read: resourceKeycloakLdapFullNameMapperRead, - Update: resourceKeycloakLdapFullNameMapperUpdate, - Delete: resourceKeycloakLdapFullNameMapperDelete, + CreateContext: resourceKeycloakLdapFullNameMapperCreate, + ReadContext: resourceKeycloakLdapFullNameMapperRead, + UpdateContext: resourceKeycloakLdapFullNameMapperUpdate, + DeleteContext: resourceKeycloakLdapFullNameMapperDelete, // This resource can be imported using {{realm}}/{{provider_id}}/{{mapper_id}}. The Provider and Mapper IDs are displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakLdapGenericMapperImport, + StateContext: resourceKeycloakLdapGenericMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -78,35 +80,35 @@ func setLdapFullNameMapperData(data *schema.ResourceData, ldapFullNameMapper *ke data.Set("write_only", ldapFullNameMapper.WriteOnly) } -func resourceKeycloakLdapFullNameMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapFullNameMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapFullNameMapper := getLdapFullNameMapperFromData(data) - err := keycloakClient.ValidateLdapFullNameMapper(ldapFullNameMapper) + err := keycloakClient.ValidateLdapFullNameMapper(ctx, ldapFullNameMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewLdapFullNameMapper(ldapFullNameMapper) + err = keycloakClient.NewLdapFullNameMapper(ctx, ldapFullNameMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapFullNameMapperData(data, ldapFullNameMapper) - return resourceKeycloakLdapFullNameMapperRead(data, meta) + return resourceKeycloakLdapFullNameMapperRead(ctx, data, meta) } -func resourceKeycloakLdapFullNameMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapFullNameMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - ldapFullNameMapper, err := keycloakClient.GetLdapFullNameMapper(realmId, id) + ldapFullNameMapper, err := keycloakClient.GetLdapFullNameMapper(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setLdapFullNameMapperData(data, ldapFullNameMapper) @@ -114,19 +116,19 @@ func resourceKeycloakLdapFullNameMapperRead(data *schema.ResourceData, meta inte return nil } -func resourceKeycloakLdapFullNameMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapFullNameMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapFullNameMapper := getLdapFullNameMapperFromData(data) - err := keycloakClient.ValidateLdapFullNameMapper(ldapFullNameMapper) + err := keycloakClient.ValidateLdapFullNameMapper(ctx, ldapFullNameMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateLdapFullNameMapper(ldapFullNameMapper) + err = keycloakClient.UpdateLdapFullNameMapper(ctx, ldapFullNameMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapFullNameMapperData(data, ldapFullNameMapper) @@ -134,16 +136,16 @@ func resourceKeycloakLdapFullNameMapperUpdate(data *schema.ResourceData, meta in return nil } -func resourceKeycloakLdapFullNameMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapFullNameMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteLdapFullNameMapper(realmId, id) + return diag.FromErr(keycloakClient.DeleteLdapFullNameMapper(ctx, realmId, id)) } -func resourceKeycloakLdapGenericMapperImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakLdapGenericMapperImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 3 { diff --git a/provider/resource_keycloak_ldap_full_name_mapper_test.go b/provider/resource_keycloak_ldap_full_name_mapper_test.go index 329e1b959..d82037973 100644 --- a/provider/resource_keycloak_ldap_full_name_mapper_test.go +++ b/provider/resource_keycloak_ldap_full_name_mapper_test.go @@ -52,7 +52,7 @@ func TestAccKeycloakLdapFullNameMapper_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteLdapFullNameMapper(mapper.RealmId, mapper.Id) + err := keycloakClient.DeleteLdapFullNameMapper(testCtx, mapper.RealmId, mapper.Id) if err != nil { t.Fatal(err) } @@ -166,7 +166,7 @@ func testAccCheckKeycloakLdapFullNameMapperDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapFullNameMapper, _ := keycloakClient.GetLdapFullNameMapper(realm, id) + ldapFullNameMapper, _ := keycloakClient.GetLdapFullNameMapper(testCtx, realm, id) if ldapFullNameMapper != nil { return fmt.Errorf("ldap full name mapper with id %s still exists", id) } @@ -185,7 +185,7 @@ func getLdapFullNameMapperFromState(s *terraform.State, resourceName string) (*k id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapFullNameMapper, err := keycloakClient.GetLdapFullNameMapper(realm, id) + ldapFullNameMapper, err := keycloakClient.GetLdapFullNameMapper(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting ldap full name mapper with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_ldap_group_mapper.go b/provider/resource_keycloak_ldap_group_mapper.go index c812b1f62..1cb35ae7b 100644 --- a/provider/resource_keycloak_ldap_group_mapper.go +++ b/provider/resource_keycloak_ldap_group_mapper.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -15,13 +17,13 @@ var ( func resourceKeycloakLdapGroupMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakLdapGroupMapperCreate, - Read: resourceKeycloakLdapGroupMapperRead, - Update: resourceKeycloakLdapGroupMapperUpdate, - Delete: resourceKeycloakLdapGroupMapperDelete, + CreateContext: resourceKeycloakLdapGroupMapperCreate, + ReadContext: resourceKeycloakLdapGroupMapperRead, + UpdateContext: resourceKeycloakLdapGroupMapperUpdate, + DeleteContext: resourceKeycloakLdapGroupMapperDelete, // This resource can be imported using {{realm}}/{{provider_id}}/{{mapper_id}}. The Provider and Mapper IDs are displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakLdapGenericMapperImport, + StateContext: resourceKeycloakLdapGenericMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -120,7 +122,7 @@ func resourceKeycloakLdapGroupMapper() *schema.Resource { } } -func getLdapGroupMapperFromData(keycloakClient *keycloak.KeycloakClient, data *schema.ResourceData) (*keycloak.LdapGroupMapper, error) { +func getLdapGroupMapperFromData(ctx context.Context, keycloakClient *keycloak.KeycloakClient, data *schema.ResourceData) (*keycloak.LdapGroupMapper, error) { var groupObjectClasses []string for _, groupObjectClass := range data.Get("group_object_classes").([]interface{}) { @@ -154,7 +156,7 @@ func getLdapGroupMapperFromData(keycloakClient *keycloak.KeycloakClient, data *s MappedGroupAttributes: mappedGroupAttributes, DropNonExistingGroupsDuringSync: data.Get("drop_non_existing_groups_during_sync").(bool), } - versionOk, err := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_11) + versionOk, err := keycloakClient.VersionIsGreaterThanOrEqualTo(ctx, keycloak.Version_11) if err != nil { return nil, err } @@ -166,7 +168,7 @@ func getLdapGroupMapperFromData(keycloakClient *keycloak.KeycloakClient, data *s return mapper, nil } -func setLdapGroupMapperData(keycloakClient *keycloak.KeycloakClient, data *schema.ResourceData, ldapGroupMapper *keycloak.LdapGroupMapper) error { +func setLdapGroupMapperData(ctx context.Context, keycloakClient *keycloak.KeycloakClient, data *schema.ResourceData, ldapGroupMapper *keycloak.LdapGroupMapper) error { data.SetId(ldapGroupMapper.Id) data.Set("name", ldapGroupMapper.Name) @@ -188,7 +190,7 @@ func setLdapGroupMapperData(keycloakClient *keycloak.KeycloakClient, data *schem data.Set("mapped_group_attributes", ldapGroupMapper.MappedGroupAttributes) data.Set("drop_non_existing_groups_during_sync", ldapGroupMapper.DropNonExistingGroupsDuringSync) - versionOk, err := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_11) + versionOk, err := keycloakClient.VersionIsGreaterThanOrEqualTo(ctx, keycloak.Version_11) if err != nil { return err } @@ -200,82 +202,82 @@ func setLdapGroupMapperData(keycloakClient *keycloak.KeycloakClient, data *schem return nil } -func resourceKeycloakLdapGroupMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapGroupMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - ldapGroupMapper, err := getLdapGroupMapperFromData(keycloakClient, data) + ldapGroupMapper, err := getLdapGroupMapperFromData(ctx, keycloakClient, data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.ValidateLdapGroupMapper(ldapGroupMapper) + err = keycloakClient.ValidateLdapGroupMapper(ctx, ldapGroupMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewLdapGroupMapper(ldapGroupMapper) + err = keycloakClient.NewLdapGroupMapper(ctx, ldapGroupMapper) if err != nil { - return err + return diag.FromErr(err) } - err = setLdapGroupMapperData(keycloakClient, data, ldapGroupMapper) + err = setLdapGroupMapperData(ctx, keycloakClient, data, ldapGroupMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakLdapGroupMapperRead(data, meta) + return resourceKeycloakLdapGroupMapperRead(ctx, data, meta) } -func resourceKeycloakLdapGroupMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapGroupMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - ldapGroupMapper, err := keycloakClient.GetLdapGroupMapper(realmId, id) + ldapGroupMapper, err := keycloakClient.GetLdapGroupMapper(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } - err = setLdapGroupMapperData(keycloakClient, data, ldapGroupMapper) + err = setLdapGroupMapperData(ctx, keycloakClient, data, ldapGroupMapper) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakLdapGroupMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapGroupMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - ldapGroupMapper, err := getLdapGroupMapperFromData(keycloakClient, data) + ldapGroupMapper, err := getLdapGroupMapperFromData(ctx, keycloakClient, data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.ValidateLdapGroupMapper(ldapGroupMapper) + err = keycloakClient.ValidateLdapGroupMapper(ctx, ldapGroupMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateLdapGroupMapper(ldapGroupMapper) + err = keycloakClient.UpdateLdapGroupMapper(ctx, ldapGroupMapper) if err != nil { - return err + return diag.FromErr(err) } - err = setLdapGroupMapperData(keycloakClient, data, ldapGroupMapper) + err = setLdapGroupMapperData(ctx, keycloakClient, data, ldapGroupMapper) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakLdapGroupMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapGroupMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteLdapGroupMapper(realmId, id) + return diag.FromErr(keycloakClient.DeleteLdapGroupMapper(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_ldap_group_mapper_test.go b/provider/resource_keycloak_ldap_group_mapper_test.go index a1abb9fc4..c3a6eb4f3 100644 --- a/provider/resource_keycloak_ldap_group_mapper_test.go +++ b/provider/resource_keycloak_ldap_group_mapper_test.go @@ -53,7 +53,7 @@ func TestAccKeycloakLdapGroupMapper_createAfterManualDestroy(t *testing.T) { { PreConfig: func() { - err := keycloakClient.DeleteLdapGroupMapper(mapper.RealmId, mapper.Id) + err := keycloakClient.DeleteLdapGroupMapper(testCtx, mapper.RealmId, mapper.Id) if err != nil { t.Fatal(err) } @@ -262,7 +262,7 @@ func TestAccKeycloakLdapGroupMapper_updateLdapUserFederationInPlace(t *testing.T func TestAccKeycloakLdapGroupMapper_groupsPath(t *testing.T) { t.Parallel() - if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_11); !ok { + if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_11); !ok { t.Skip() } @@ -317,7 +317,7 @@ func testAccCheckKeycloakLdapGroupMapperDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapGroupMapper, _ := keycloakClient.GetLdapGroupMapper(realm, id) + ldapGroupMapper, _ := keycloakClient.GetLdapGroupMapper(testCtx, realm, id) if ldapGroupMapper != nil { return fmt.Errorf("ldap group mapper with id %s still exists", id) } @@ -336,7 +336,7 @@ func getLdapGroupMapperFromState(s *terraform.State, resourceName string) (*keyc id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapGroupMapper, err := keycloakClient.GetLdapGroupMapper(realm, id) + ldapGroupMapper, err := keycloakClient.GetLdapGroupMapper(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting ldap group mapper with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_ldap_hardcoded_group_mapper.go b/provider/resource_keycloak_ldap_hardcoded_group_mapper.go index edb70d5b1..7464c3046 100644 --- a/provider/resource_keycloak_ldap_hardcoded_group_mapper.go +++ b/provider/resource_keycloak_ldap_hardcoded_group_mapper.go @@ -1,19 +1,21 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakLdapHardcodedGroupMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakLdapHardcodedGroupMapperCreate, - Read: resourceKeycloakLdapHardcodedGroupMapperRead, - Update: resourceKeycloakLdapHardcodedGroupMapperUpdate, - Delete: resourceKeycloakLdapHardcodedGroupMapperDelete, + CreateContext: resourceKeycloakLdapHardcodedGroupMapperCreate, + ReadContext: resourceKeycloakLdapHardcodedGroupMapperRead, + UpdateContext: resourceKeycloakLdapHardcodedGroupMapperUpdate, + DeleteContext: resourceKeycloakLdapHardcodedGroupMapperDelete, // This resource can be imported using {{realm}}/{{provider_id}}/{{mapper_id}}. The Provider and Mapper IDs are displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakLdapGenericMapperImport, + StateContext: resourceKeycloakLdapGenericMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -61,35 +63,35 @@ func setLdapHardcodedGroupMapperData(data *schema.ResourceData, ldapMapper *keyc data.Set("group", ldapMapper.Group) } -func resourceKeycloakLdapHardcodedGroupMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapHardcodedGroupMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapMapper := getLdapHardcodedGroupMapperFromData(data) - err := keycloakClient.ValidateLdapHardcodedGroupMapper(ldapMapper) + err := keycloakClient.ValidateLdapHardcodedGroupMapper(ctx, ldapMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewLdapHardcodedGroupMapper(ldapMapper) + err = keycloakClient.NewLdapHardcodedGroupMapper(ctx, ldapMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapHardcodedGroupMapperData(data, ldapMapper) - return resourceKeycloakLdapHardcodedGroupMapperRead(data, meta) + return resourceKeycloakLdapHardcodedGroupMapperRead(ctx, data, meta) } -func resourceKeycloakLdapHardcodedGroupMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapHardcodedGroupMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - ldapMapper, err := keycloakClient.GetLdapHardcodedGroupMapper(realmId, id) + ldapMapper, err := keycloakClient.GetLdapHardcodedGroupMapper(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setLdapHardcodedGroupMapperData(data, ldapMapper) @@ -97,19 +99,19 @@ func resourceKeycloakLdapHardcodedGroupMapperRead(data *schema.ResourceData, met return nil } -func resourceKeycloakLdapHardcodedGroupMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapHardcodedGroupMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapMapper := getLdapHardcodedGroupMapperFromData(data) - err := keycloakClient.ValidateLdapHardcodedGroupMapper(ldapMapper) + err := keycloakClient.ValidateLdapHardcodedGroupMapper(ctx, ldapMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateLdapHardcodedGroupMapper(ldapMapper) + err = keycloakClient.UpdateLdapHardcodedGroupMapper(ctx, ldapMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapHardcodedGroupMapperData(data, ldapMapper) @@ -117,11 +119,11 @@ func resourceKeycloakLdapHardcodedGroupMapperUpdate(data *schema.ResourceData, m return nil } -func resourceKeycloakLdapHardcodedGroupMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapHardcodedGroupMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteLdapHardcodedGroupMapper(realmId, id) + return diag.FromErr(keycloakClient.DeleteLdapHardcodedGroupMapper(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_ldap_hardcoded_group_mapper_test.go b/provider/resource_keycloak_ldap_hardcoded_group_mapper_test.go index d47273c3b..f6cdd93aa 100644 --- a/provider/resource_keycloak_ldap_hardcoded_group_mapper_test.go +++ b/provider/resource_keycloak_ldap_hardcoded_group_mapper_test.go @@ -52,7 +52,7 @@ func TestAccKeycloakLdapHardcodedGroupMapper_createAfterManualDestroy(t *testing }, { PreConfig: func() { - err := keycloakClient.DeleteLdapHardcodedGroupMapper(mapper.RealmId, mapper.Id) + err := keycloakClient.DeleteLdapHardcodedGroupMapper(testCtx, mapper.RealmId, mapper.Id) if err != nil { t.Fatal(err) } @@ -99,7 +99,7 @@ func testAccCheckKeycloakLdapHardcodedGroupMapperDestroy() resource.TestCheckFun id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapMapper, _ := keycloakClient.GetLdapHardcodedGroupMapper(realm, id) + ldapMapper, _ := keycloakClient.GetLdapHardcodedGroupMapper(testCtx, realm, id) if ldapMapper != nil { return fmt.Errorf("ldap hardcoded group mapper with id %s still exists", id) } @@ -118,7 +118,7 @@ func getLdapHardcodedGroupMapperFromState(s *terraform.State, resourceName strin id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapMapper, err := keycloakClient.GetLdapHardcodedGroupMapper(realm, id) + ldapMapper, err := keycloakClient.GetLdapHardcodedGroupMapper(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting ldap group mapper with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_ldap_hardcoded_role_mapper.go b/provider/resource_keycloak_ldap_hardcoded_role_mapper.go index 7f75a312a..627a77118 100644 --- a/provider/resource_keycloak_ldap_hardcoded_role_mapper.go +++ b/provider/resource_keycloak_ldap_hardcoded_role_mapper.go @@ -1,19 +1,21 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakLdapHardcodedRoleMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakLdapHardcodedRoleMapperCreate, - Read: resourceKeycloakLdapHardcodedRoleMapperRead, - Update: resourceKeycloakLdapHardcodedRoleMapperUpdate, - Delete: resourceKeycloakLdapHardcodedRoleMapperDelete, + CreateContext: resourceKeycloakLdapHardcodedRoleMapperCreate, + ReadContext: resourceKeycloakLdapHardcodedRoleMapperRead, + UpdateContext: resourceKeycloakLdapHardcodedRoleMapperUpdate, + DeleteContext: resourceKeycloakLdapHardcodedRoleMapperDelete, // This resource can be imported using {{realm}}/{{provider_id}}/{{mapper_id}}. The Provider and Mapper IDs are displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakLdapGenericMapperImport, + StateContext: resourceKeycloakLdapGenericMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -61,35 +63,35 @@ func setLdapHardcodedRoleMapperData(data *schema.ResourceData, ldapMapper *keycl data.Set("role", ldapMapper.Role) } -func resourceKeycloakLdapHardcodedRoleMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapHardcodedRoleMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapMapper := getLdapHardcodedRoleMapperFromData(data) - err := keycloakClient.ValidateLdapHardcodedRoleMapper(ldapMapper) + err := keycloakClient.ValidateLdapHardcodedRoleMapper(ctx, ldapMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewLdapHardcodedRoleMapper(ldapMapper) + err = keycloakClient.NewLdapHardcodedRoleMapper(ctx, ldapMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapHardcodedRoleMapperData(data, ldapMapper) - return resourceKeycloakLdapHardcodedRoleMapperRead(data, meta) + return resourceKeycloakLdapHardcodedRoleMapperRead(ctx, data, meta) } -func resourceKeycloakLdapHardcodedRoleMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapHardcodedRoleMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - ldapMapper, err := keycloakClient.GetLdapHardcodedRoleMapper(realmId, id) + ldapMapper, err := keycloakClient.GetLdapHardcodedRoleMapper(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setLdapHardcodedRoleMapperData(data, ldapMapper) @@ -97,19 +99,19 @@ func resourceKeycloakLdapHardcodedRoleMapperRead(data *schema.ResourceData, meta return nil } -func resourceKeycloakLdapHardcodedRoleMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapHardcodedRoleMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapMapper := getLdapHardcodedRoleMapperFromData(data) - err := keycloakClient.ValidateLdapHardcodedRoleMapper(ldapMapper) + err := keycloakClient.ValidateLdapHardcodedRoleMapper(ctx, ldapMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateLdapHardcodedRoleMapper(ldapMapper) + err = keycloakClient.UpdateLdapHardcodedRoleMapper(ctx, ldapMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapHardcodedRoleMapperData(data, ldapMapper) @@ -117,11 +119,11 @@ func resourceKeycloakLdapHardcodedRoleMapperUpdate(data *schema.ResourceData, me return nil } -func resourceKeycloakLdapHardcodedRoleMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapHardcodedRoleMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteLdapHardcodedRoleMapper(realmId, id) + return diag.FromErr(keycloakClient.DeleteLdapHardcodedRoleMapper(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_ldap_hardcoded_role_mapper_test.go b/provider/resource_keycloak_ldap_hardcoded_role_mapper_test.go index 4d9e51808..9601197e2 100644 --- a/provider/resource_keycloak_ldap_hardcoded_role_mapper_test.go +++ b/provider/resource_keycloak_ldap_hardcoded_role_mapper_test.go @@ -52,7 +52,7 @@ func TestAccKeycloakLdapHardcodedRoleMapper_createAfterManualDestroy(t *testing. }, { PreConfig: func() { - err := keycloakClient.DeleteLdapHardcodedRoleMapper(mapper.RealmId, mapper.Id) + err := keycloakClient.DeleteLdapHardcodedRoleMapper(testCtx, mapper.RealmId, mapper.Id) if err != nil { t.Fatal(err) } @@ -99,7 +99,7 @@ func testAccCheckKeycloakLdapHardcodedRoleMapperDestroy() resource.TestCheckFunc id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapMapper, _ := keycloakClient.GetLdapHardcodedRoleMapper(realm, id) + ldapMapper, _ := keycloakClient.GetLdapHardcodedRoleMapper(testCtx, realm, id) if ldapMapper != nil { return fmt.Errorf("ldap hardcoded role mapper with id %s still exists", id) } @@ -118,7 +118,7 @@ func getLdapHardcodedRoleMapperFromState(s *terraform.State, resourceName string id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapMapper, err := keycloakClient.GetLdapHardcodedRoleMapper(realm, id) + ldapMapper, err := keycloakClient.GetLdapHardcodedRoleMapper(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting ldap group mapper with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_ldap_msad_lds_user_account_control_mapper.go b/provider/resource_keycloak_ldap_msad_lds_user_account_control_mapper.go index a160b7765..f8dc5febc 100644 --- a/provider/resource_keycloak_ldap_msad_lds_user_account_control_mapper.go +++ b/provider/resource_keycloak_ldap_msad_lds_user_account_control_mapper.go @@ -1,19 +1,21 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakLdapMsadLdsUserAccountControlMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakLdapMsadLdsUserAccountControlMapperCreate, - Read: resourceKeycloakLdapMsadLdsUserAccountControlMapperRead, - Update: resourceKeycloakLdapMsadLdsUserAccountControlMapperUpdate, - Delete: resourceKeycloakLdapMsadLdsUserAccountControlMapperDelete, + CreateContext: resourceKeycloakLdapMsadLdsUserAccountControlMapperCreate, + ReadContext: resourceKeycloakLdapMsadLdsUserAccountControlMapperRead, + UpdateContext: resourceKeycloakLdapMsadLdsUserAccountControlMapperUpdate, + DeleteContext: resourceKeycloakLdapMsadLdsUserAccountControlMapperDelete, // This resource can be imported using {{realm}}/{{provider_id}}/{{mapper_id}}. The Provider and Mapper IDs are displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakLdapGenericMapperImport, + StateContext: resourceKeycloakLdapGenericMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -54,30 +56,30 @@ func setLdapMsadLdsUserAccountControlMapperData(data *schema.ResourceData, ldapM data.Set("ldap_user_federation_id", ldapMsadLdsUserAccountControlMapper.LdapUserFederationId) } -func resourceKeycloakLdapMsadLdsUserAccountControlMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapMsadLdsUserAccountControlMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapMsadLdsUserAccountControlMapper := getLdapMsadLdsUserAccountControlMapperFromData(data) - err := keycloakClient.NewLdapMsadLdsUserAccountControlMapper(ldapMsadLdsUserAccountControlMapper) + err := keycloakClient.NewLdapMsadLdsUserAccountControlMapper(ctx, ldapMsadLdsUserAccountControlMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapMsadLdsUserAccountControlMapperData(data, ldapMsadLdsUserAccountControlMapper) - return resourceKeycloakLdapMsadLdsUserAccountControlMapperRead(data, meta) + return resourceKeycloakLdapMsadLdsUserAccountControlMapperRead(ctx, data, meta) } -func resourceKeycloakLdapMsadLdsUserAccountControlMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapMsadLdsUserAccountControlMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - ldapMsadLdsUserAccountControlMapper, err := keycloakClient.GetLdapMsadLdsUserAccountControlMapper(realmId, id) + ldapMsadLdsUserAccountControlMapper, err := keycloakClient.GetLdapMsadLdsUserAccountControlMapper(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setLdapMsadLdsUserAccountControlMapperData(data, ldapMsadLdsUserAccountControlMapper) @@ -85,14 +87,14 @@ func resourceKeycloakLdapMsadLdsUserAccountControlMapperRead(data *schema.Resour return nil } -func resourceKeycloakLdapMsadLdsUserAccountControlMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapMsadLdsUserAccountControlMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapMsadLdsUserAccountControlMapper := getLdapMsadLdsUserAccountControlMapperFromData(data) - err := keycloakClient.UpdateLdapMsadLdsUserAccountControlMapper(ldapMsadLdsUserAccountControlMapper) + err := keycloakClient.UpdateLdapMsadLdsUserAccountControlMapper(ctx, ldapMsadLdsUserAccountControlMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapMsadLdsUserAccountControlMapperData(data, ldapMsadLdsUserAccountControlMapper) @@ -100,11 +102,11 @@ func resourceKeycloakLdapMsadLdsUserAccountControlMapperUpdate(data *schema.Reso return nil } -func resourceKeycloakLdapMsadLdsUserAccountControlMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapMsadLdsUserAccountControlMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteLdapMsadLdsUserAccountControlMapper(realmId, id) + return diag.FromErr(keycloakClient.DeleteLdapMsadLdsUserAccountControlMapper(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_ldap_msad_lds_user_account_control_mapper_test.go b/provider/resource_keycloak_ldap_msad_lds_user_account_control_mapper_test.go index 567bae9d2..efe7d1f85 100644 --- a/provider/resource_keycloak_ldap_msad_lds_user_account_control_mapper_test.go +++ b/provider/resource_keycloak_ldap_msad_lds_user_account_control_mapper_test.go @@ -51,7 +51,7 @@ func TestAccKeycloakLdapMsadLdsUserAccountControlMapper_createAfterManualDestroy }, { PreConfig: func() { - err := keycloakClient.DeleteLdapMsadLdsUserAccountControlMapper(mapper.RealmId, mapper.Id) + err := keycloakClient.DeleteLdapMsadLdsUserAccountControlMapper(testCtx, mapper.RealmId, mapper.Id) if err != nil { t.Fatal(err) } @@ -120,7 +120,7 @@ func testAccCheckKeycloakLdapMsadLdsUserAccountControlMapperDestroy() resource.T id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapMsadLdsUserAccountControlMapper, _ := keycloakClient.GetLdapMsadLdsUserAccountControlMapper(realm, id) + ldapMsadLdsUserAccountControlMapper, _ := keycloakClient.GetLdapMsadLdsUserAccountControlMapper(testCtx, realm, id) if ldapMsadLdsUserAccountControlMapper != nil { return fmt.Errorf("ldap msad-lds uac mapper with id %s still exists", id) } @@ -139,7 +139,7 @@ func getLdapMsadLdsUserAccountControlMapperFromState(s *terraform.State, resourc id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapMsadLdsUserAccountControlMapper, err := keycloakClient.GetLdapMsadLdsUserAccountControlMapper(realm, id) + ldapMsadLdsUserAccountControlMapper, err := keycloakClient.GetLdapMsadLdsUserAccountControlMapper(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting ldap msad-lds uac mapper with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_ldap_msad_user_account_control_mapper.go b/provider/resource_keycloak_ldap_msad_user_account_control_mapper.go index dbbc89b20..ec85023d4 100644 --- a/provider/resource_keycloak_ldap_msad_user_account_control_mapper.go +++ b/provider/resource_keycloak_ldap_msad_user_account_control_mapper.go @@ -1,19 +1,21 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakLdapMsadUserAccountControlMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakLdapMsadUserAccountControlMapperCreate, - Read: resourceKeycloakLdapMsadUserAccountControlMapperRead, - Update: resourceKeycloakLdapMsadUserAccountControlMapperUpdate, - Delete: resourceKeycloakLdapMsadUserAccountControlMapperDelete, + CreateContext: resourceKeycloakLdapMsadUserAccountControlMapperCreate, + ReadContext: resourceKeycloakLdapMsadUserAccountControlMapperRead, + UpdateContext: resourceKeycloakLdapMsadUserAccountControlMapperUpdate, + DeleteContext: resourceKeycloakLdapMsadUserAccountControlMapperDelete, // This resource can be imported using {{realm}}/{{provider_id}}/{{mapper_id}}. The Provider and Mapper IDs are displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakLdapGenericMapperImport, + StateContext: resourceKeycloakLdapGenericMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -63,30 +65,30 @@ func setLdapMsadUserAccountControlMapperData(data *schema.ResourceData, ldapMsad data.Set("ldap_password_policy_hints_enabled", ldapMsadUserAccountControlMapper.LdapPasswordPolicyHintsEnabled) } -func resourceKeycloakLdapMsadUserAccountControlMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapMsadUserAccountControlMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapMsadUserAccountControlMapper := getLdapMsadUserAccountControlMapperFromData(data) - err := keycloakClient.NewLdapMsadUserAccountControlMapper(ldapMsadUserAccountControlMapper) + err := keycloakClient.NewLdapMsadUserAccountControlMapper(ctx, ldapMsadUserAccountControlMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapMsadUserAccountControlMapperData(data, ldapMsadUserAccountControlMapper) - return resourceKeycloakLdapMsadUserAccountControlMapperRead(data, meta) + return resourceKeycloakLdapMsadUserAccountControlMapperRead(ctx, data, meta) } -func resourceKeycloakLdapMsadUserAccountControlMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapMsadUserAccountControlMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - ldapMsadUserAccountControlMapper, err := keycloakClient.GetLdapMsadUserAccountControlMapper(realmId, id) + ldapMsadUserAccountControlMapper, err := keycloakClient.GetLdapMsadUserAccountControlMapper(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setLdapMsadUserAccountControlMapperData(data, ldapMsadUserAccountControlMapper) @@ -94,14 +96,14 @@ func resourceKeycloakLdapMsadUserAccountControlMapperRead(data *schema.ResourceD return nil } -func resourceKeycloakLdapMsadUserAccountControlMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapMsadUserAccountControlMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapMsadUserAccountControlMapper := getLdapMsadUserAccountControlMapperFromData(data) - err := keycloakClient.UpdateLdapMsadUserAccountControlMapper(ldapMsadUserAccountControlMapper) + err := keycloakClient.UpdateLdapMsadUserAccountControlMapper(ctx, ldapMsadUserAccountControlMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapMsadUserAccountControlMapperData(data, ldapMsadUserAccountControlMapper) @@ -109,11 +111,11 @@ func resourceKeycloakLdapMsadUserAccountControlMapperUpdate(data *schema.Resourc return nil } -func resourceKeycloakLdapMsadUserAccountControlMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapMsadUserAccountControlMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteLdapMsadUserAccountControlMapper(realmId, id) + return diag.FromErr(keycloakClient.DeleteLdapMsadUserAccountControlMapper(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_ldap_msad_user_account_control_mapper_test.go b/provider/resource_keycloak_ldap_msad_user_account_control_mapper_test.go index 59a2a5b8a..4b27b65d2 100644 --- a/provider/resource_keycloak_ldap_msad_user_account_control_mapper_test.go +++ b/provider/resource_keycloak_ldap_msad_user_account_control_mapper_test.go @@ -51,7 +51,7 @@ func TestAccKeycloakLdapMsadUserAccountControlMapper_createAfterManualDestroy(t }, { PreConfig: func() { - err := keycloakClient.DeleteLdapMsadUserAccountControlMapper(mapper.RealmId, mapper.Id) + err := keycloakClient.DeleteLdapMsadUserAccountControlMapper(testCtx, mapper.RealmId, mapper.Id) if err != nil { t.Fatal(err) } @@ -142,7 +142,7 @@ func testAccCheckKeycloakLdapMsadUserAccountControlMapperDestroy() resource.Test id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapMsadUserAccountControlMapper, _ := keycloakClient.GetLdapMsadUserAccountControlMapper(realm, id) + ldapMsadUserAccountControlMapper, _ := keycloakClient.GetLdapMsadUserAccountControlMapper(testCtx, realm, id) if ldapMsadUserAccountControlMapper != nil { return fmt.Errorf("ldap msad uac mapper with id %s still exists", id) } @@ -161,7 +161,7 @@ func getLdapMsadUserAccountControlMapperFromState(s *terraform.State, resourceNa id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapMsadUserAccountControlMapper, err := keycloakClient.GetLdapMsadUserAccountControlMapper(realm, id) + ldapMsadUserAccountControlMapper, err := keycloakClient.GetLdapMsadUserAccountControlMapper(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting ldap msad uac mapper with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_ldap_role_mapper.go b/provider/resource_keycloak_ldap_role_mapper.go index 4a2761ec9..c3be538bc 100644 --- a/provider/resource_keycloak_ldap_role_mapper.go +++ b/provider/resource_keycloak_ldap_role_mapper.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -15,13 +17,13 @@ var ( func resourceKeycloakLdapRoleMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakLdapRoleMapperCreate, - Read: resourceKeycloakLdapRoleMapperRead, - Update: resourceKeycloakLdapRoleMapperUpdate, - Delete: resourceKeycloakLdapRoleMapperDelete, + CreateContext: resourceKeycloakLdapRoleMapperCreate, + ReadContext: resourceKeycloakLdapRoleMapperRead, + UpdateContext: resourceKeycloakLdapRoleMapperUpdate, + DeleteContext: resourceKeycloakLdapRoleMapperDelete, // This resource can be imported using {{realm}}/{{provider_id}}/{{mapper_id}}. The Provider and Mapper IDs are displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakLdapGenericMapperImport, + StateContext: resourceKeycloakLdapGenericMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -153,35 +155,30 @@ func setLdapRoleMapperData(data *schema.ResourceData, ldapRoleMapper *keycloak.L data.Set("client_id", ldapRoleMapper.ClientId) } -func resourceKeycloakLdapRoleMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapRoleMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapRoleMapper := getLdapRoleMapperFromData(data) - err := keycloakClient.ValidateLdapRoleMapper(ldapRoleMapper) + err := keycloakClient.NewLdapRoleMapper(ctx, ldapRoleMapper) if err != nil { - return err - } - - err = keycloakClient.NewLdapRoleMapper(ldapRoleMapper) - if err != nil { - return err + return diag.FromErr(err) } setLdapRoleMapperData(data, ldapRoleMapper) - return resourceKeycloakLdapRoleMapperRead(data, meta) + return resourceKeycloakLdapRoleMapperRead(ctx, data, meta) } -func resourceKeycloakLdapRoleMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapRoleMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - ldapRoleMapper, err := keycloakClient.GetLdapRoleMapper(realmId, id) + ldapRoleMapper, err := keycloakClient.GetLdapRoleMapper(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setLdapRoleMapperData(data, ldapRoleMapper) @@ -189,19 +186,14 @@ func resourceKeycloakLdapRoleMapperRead(data *schema.ResourceData, meta interfac return nil } -func resourceKeycloakLdapRoleMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapRoleMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapRoleMapper := getLdapRoleMapperFromData(data) - err := keycloakClient.ValidateLdapRoleMapper(ldapRoleMapper) - if err != nil { - return err - } - - err = keycloakClient.UpdateLdapRoleMapper(ldapRoleMapper) + err := keycloakClient.UpdateLdapRoleMapper(ctx, ldapRoleMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapRoleMapperData(data, ldapRoleMapper) @@ -209,11 +201,11 @@ func resourceKeycloakLdapRoleMapperUpdate(data *schema.ResourceData, meta interf return nil } -func resourceKeycloakLdapRoleMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapRoleMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteLdapRoleMapper(realmId, id) + return diag.FromErr(keycloakClient.DeleteLdapRoleMapper(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_ldap_role_mapper_test.go b/provider/resource_keycloak_ldap_role_mapper_test.go index d0e00d973..938717f50 100644 --- a/provider/resource_keycloak_ldap_role_mapper_test.go +++ b/provider/resource_keycloak_ldap_role_mapper_test.go @@ -52,7 +52,7 @@ func TestAccKeycloakLdapRoleMapper_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteLdapRoleMapper(mapper.RealmId, mapper.Id) + err := keycloakClient.DeleteLdapRoleMapper(testCtx, mapper.RealmId, mapper.Id) if err != nil { t.Fatal(err) } @@ -270,7 +270,7 @@ func testAccCheckKeycloakLdapRoleMapperDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapRoleMapper, _ := keycloakClient.GetLdapRoleMapper(realm, id) + ldapRoleMapper, _ := keycloakClient.GetLdapRoleMapper(testCtx, realm, id) if ldapRoleMapper != nil { return fmt.Errorf("ldap role mapper with id %s still exists", id) } @@ -289,7 +289,7 @@ func getLdapRoleMapperFromState(s *terraform.State, resourceName string) (*keycl id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapRoleMapper, err := keycloakClient.GetLdapRoleMapper(realm, id) + ldapRoleMapper, err := keycloakClient.GetLdapRoleMapper(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting ldap role mapper with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_ldap_user_attribute_mapper.go b/provider/resource_keycloak_ldap_user_attribute_mapper.go index 5de4c0224..49625ca7a 100644 --- a/provider/resource_keycloak_ldap_user_attribute_mapper.go +++ b/provider/resource_keycloak_ldap_user_attribute_mapper.go @@ -1,19 +1,21 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakLdapUserAttributeMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakLdapUserAttributeMapperCreate, - Read: resourceKeycloakLdapUserAttributeMapperRead, - Update: resourceKeycloakLdapUserAttributeMapperUpdate, - Delete: resourceKeycloakLdapUserAttributeMapperDelete, + CreateContext: resourceKeycloakLdapUserAttributeMapperCreate, + ReadContext: resourceKeycloakLdapUserAttributeMapperRead, + UpdateContext: resourceKeycloakLdapUserAttributeMapperUpdate, + DeleteContext: resourceKeycloakLdapUserAttributeMapperDelete, // This resource can be imported using {{realm}}/{{provider_id}}/{{mapper_id}}. The Provider and Mapper IDs are displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakLdapGenericMapperImport, + StateContext: resourceKeycloakLdapGenericMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -96,30 +98,30 @@ func setLdapUserAttributeMapperData(data *schema.ResourceData, ldapUserAttribute data.Set("is_mandatory_in_ldap", ldapUserAttributeMapper.IsMandatoryInLdap) } -func resourceKeycloakLdapUserAttributeMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapUserAttributeMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapUserAttributeMapper := getLdapUserAttributeMapperFromData(data) - err := keycloakClient.NewLdapUserAttributeMapper(ldapUserAttributeMapper) + err := keycloakClient.NewLdapUserAttributeMapper(ctx, ldapUserAttributeMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapUserAttributeMapperData(data, ldapUserAttributeMapper) - return resourceKeycloakLdapUserAttributeMapperRead(data, meta) + return resourceKeycloakLdapUserAttributeMapperRead(ctx, data, meta) } -func resourceKeycloakLdapUserAttributeMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapUserAttributeMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - ldapUserAttributeMapper, err := keycloakClient.GetLdapUserAttributeMapper(realmId, id) + ldapUserAttributeMapper, err := keycloakClient.GetLdapUserAttributeMapper(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setLdapUserAttributeMapperData(data, ldapUserAttributeMapper) @@ -127,14 +129,14 @@ func resourceKeycloakLdapUserAttributeMapperRead(data *schema.ResourceData, meta return nil } -func resourceKeycloakLdapUserAttributeMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapUserAttributeMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldapUserAttributeMapper := getLdapUserAttributeMapperFromData(data) - err := keycloakClient.UpdateLdapUserAttributeMapper(ldapUserAttributeMapper) + err := keycloakClient.UpdateLdapUserAttributeMapper(ctx, ldapUserAttributeMapper) if err != nil { - return err + return diag.FromErr(err) } setLdapUserAttributeMapperData(data, ldapUserAttributeMapper) @@ -142,11 +144,11 @@ func resourceKeycloakLdapUserAttributeMapperUpdate(data *schema.ResourceData, me return nil } -func resourceKeycloakLdapUserAttributeMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapUserAttributeMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteLdapUserAttributeMapper(realmId, id) + return diag.FromErr(keycloakClient.DeleteLdapUserAttributeMapper(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_ldap_user_attribute_mapper_test.go b/provider/resource_keycloak_ldap_user_attribute_mapper_test.go index 9d35aa127..f87b0cfae 100644 --- a/provider/resource_keycloak_ldap_user_attribute_mapper_test.go +++ b/provider/resource_keycloak_ldap_user_attribute_mapper_test.go @@ -51,7 +51,7 @@ func TestAccKeycloakLdapUserAttributeMapper_createAfterManualDestroy(t *testing. }, { PreConfig: func() { - err := keycloakClient.DeleteLdapUserAttributeMapper(mapper.RealmId, mapper.Id) + err := keycloakClient.DeleteLdapUserAttributeMapper(testCtx, mapper.RealmId, mapper.Id) if err != nil { t.Fatal(err) } @@ -157,7 +157,7 @@ func testAccCheckKeycloakLdapUserAttributeMapperDestroy() resource.TestCheckFunc id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapUserAttributeMapper, _ := keycloakClient.GetLdapUserAttributeMapper(realm, id) + ldapUserAttributeMapper, _ := keycloakClient.GetLdapUserAttributeMapper(testCtx, realm, id) if ldapUserAttributeMapper != nil { return fmt.Errorf("ldap user attribute mapper with id %s still exists", id) } @@ -176,7 +176,7 @@ func getLdapUserAttributeMapperFromState(s *terraform.State, resourceName string id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapUserAttributeMapper, err := keycloakClient.GetLdapUserAttributeMapper(realm, id) + ldapUserAttributeMapper, err := keycloakClient.GetLdapUserAttributeMapper(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting ldap user attribute mapper with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_ldap_user_federation.go b/provider/resource_keycloak_ldap_user_federation.go index 500d288cc..7a5751162 100644 --- a/provider/resource_keycloak_ldap_user_federation.go +++ b/provider/resource_keycloak_ldap_user_federation.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -19,15 +21,15 @@ var ( func resourceKeycloakLdapUserFederation() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakLdapUserFederationCreate, - Read: resourceKeycloakLdapUserFederationRead, - Update: resourceKeycloakLdapUserFederationUpdate, - Delete: resourceKeycloakLdapUserFederationDelete, + CreateContext: resourceKeycloakLdapUserFederationCreate, + ReadContext: resourceKeycloakLdapUserFederationRead, + UpdateContext: resourceKeycloakLdapUserFederationUpdate, + DeleteContext: resourceKeycloakLdapUserFederationDelete, // If this resource uses authentication, then this resource must be imported using the syntax {{realm_id}}/{{provider_id}}/{{bind_credential}} // Otherwise, this resource can be imported using {{realm}}/{{provider_id}}. // The Provider ID is displayed in the GUI when editing this provider Importer: &schema.ResourceImporter{ - State: resourceKeycloakLdapUserFederationImport, + StateContext: resourceKeycloakLdapUserFederationImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -450,35 +452,35 @@ func setLdapUserFederationData(data *schema.ResourceData, ldap *keycloak.LdapUse } } -func resourceKeycloakLdapUserFederationCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapUserFederationCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldap := getLdapUserFederationFromData(data) - err := keycloakClient.ValidateLdapUserFederation(ldap) + err := keycloakClient.ValidateLdapUserFederation(ctx, ldap) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewLdapUserFederation(ldap) + err = keycloakClient.NewLdapUserFederation(ctx, ldap) if err != nil { - return err + return diag.FromErr(err) } setLdapUserFederationData(data, ldap) - return resourceKeycloakLdapUserFederationRead(data, meta) + return resourceKeycloakLdapUserFederationRead(ctx, data, meta) } -func resourceKeycloakLdapUserFederationRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapUserFederationRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - ldap, err := keycloakClient.GetLdapUserFederation(realmId, id) + ldap, err := keycloakClient.GetLdapUserFederation(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } ldap.BindCredential = data.Get("bind_credential").(string) // we can't trust the API to set this field correctly since it just responds with "**********" @@ -487,19 +489,19 @@ func resourceKeycloakLdapUserFederationRead(data *schema.ResourceData, meta inte return nil } -func resourceKeycloakLdapUserFederationUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapUserFederationUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) ldap := getLdapUserFederationFromData(data) - err := keycloakClient.ValidateLdapUserFederation(ldap) + err := keycloakClient.ValidateLdapUserFederation(ctx, ldap) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateLdapUserFederation(ldap) + err = keycloakClient.UpdateLdapUserFederation(ctx, ldap) if err != nil { - return err + return diag.FromErr(err) } setLdapUserFederationData(data, ldap) @@ -507,16 +509,16 @@ func resourceKeycloakLdapUserFederationUpdate(data *schema.ResourceData, meta in return nil } -func resourceKeycloakLdapUserFederationDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakLdapUserFederationDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteLdapUserFederation(realmId, id) + return diag.FromErr(keycloakClient.DeleteLdapUserFederation(ctx, realmId, id)) } -func resourceKeycloakLdapUserFederationImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakLdapUserFederationImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") var realmId, id string diff --git a/provider/resource_keycloak_ldap_user_federation_test.go b/provider/resource_keycloak_ldap_user_federation_test.go index 628fd28d9..0f8c5b41a 100644 --- a/provider/resource_keycloak_ldap_user_federation_test.go +++ b/provider/resource_keycloak_ldap_user_federation_test.go @@ -81,7 +81,7 @@ func TestAccKeycloakLdapUserFederation_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteLdapUserFederation(ldap.RealmId, ldap.Id) + err := keycloakClient.DeleteLdapUserFederation(testCtx, ldap.RealmId, ldap.Id) if err != nil { t.Fatal(err) } @@ -166,14 +166,14 @@ func generateRandomLdapKerberos(enabled bool) *keycloak.LdapUserFederation { func checkMatchingNestedKey(resourcePath string, blockName string, fieldInBlock string, value string) resource.TestCheckFunc { return func(s *terraform.State) error { - resource, ok := s.RootModule().Resources[resourcePath] + r, ok := s.RootModule().Resources[resourcePath] if !ok { return fmt.Errorf("Could not find resource %s", resourcePath) } matchExpression := fmt.Sprintf(`%s\.\d\.mappings\.\d+\.%s`, blockName, fieldInBlock) - for k, v := range resource.Primary.Attributes { + for k, v := range r.Primary.Attributes { if isMatch, _ := regexp.Match(matchExpression, []byte(k)); isMatch { if v == value { return nil @@ -562,7 +562,7 @@ func testAccCheckKeycloakLdapUserFederationDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldap, _ := keycloakClient.GetLdapUserFederation(realm, id) + ldap, _ := keycloakClient.GetLdapUserFederation(testCtx, realm, id) if ldap != nil { return fmt.Errorf("ldap config with id %s still exists", id) } @@ -581,7 +581,7 @@ func getLdapUserFederationFromState(s *terraform.State, resourceName string) (*k id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldap, err := keycloakClient.GetLdapUserFederation(realm, id) + ldap, err := keycloakClient.GetLdapUserFederation(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting ldap config with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_oidc_google_identity_provider.go b/provider/resource_keycloak_oidc_google_identity_provider.go index c78387ad1..541ba4fa5 100644 --- a/provider/resource_keycloak_oidc_google_identity_provider.go +++ b/provider/resource_keycloak_oidc_google_identity_provider.go @@ -79,9 +79,9 @@ func resourceKeycloakOidcGoogleIdentityProvider() *schema.Resource { } oidcResource := resourceKeycloakIdentityProvider() oidcResource.Schema = mergeSchemas(oidcResource.Schema, oidcGoogleSchema) - oidcResource.Create = resourceKeycloakIdentityProviderCreate(getOidcGoogleIdentityProviderFromData, setOidcGoogleIdentityProviderData) - oidcResource.Read = resourceKeycloakIdentityProviderRead(setOidcGoogleIdentityProviderData) - oidcResource.Update = resourceKeycloakIdentityProviderUpdate(getOidcGoogleIdentityProviderFromData, setOidcGoogleIdentityProviderData) + oidcResource.CreateContext = resourceKeycloakIdentityProviderCreate(getOidcGoogleIdentityProviderFromData, setOidcGoogleIdentityProviderData) + oidcResource.ReadContext = resourceKeycloakIdentityProviderRead(setOidcGoogleIdentityProviderData) + oidcResource.UpdateContext = resourceKeycloakIdentityProviderUpdate(getOidcGoogleIdentityProviderFromData, setOidcGoogleIdentityProviderData) return oidcResource } diff --git a/provider/resource_keycloak_oidc_google_identity_provider_test.go b/provider/resource_keycloak_oidc_google_identity_provider_test.go index 8cb3b13af..63c55f9fd 100644 --- a/provider/resource_keycloak_oidc_google_identity_provider_test.go +++ b/provider/resource_keycloak_oidc_google_identity_provider_test.go @@ -80,7 +80,7 @@ func TestAccKeycloakOidcGoogleIdentityProvider_createAfterManualDestroy(t *testi }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProvider(idp.Realm, idp.Alias) + err := keycloakClient.DeleteIdentityProvider(testCtx, idp.Realm, idp.Alias) if err != nil { t.Fatal(err) } @@ -188,7 +188,7 @@ func testAccCheckKeycloakOidcGoogleIdentityProviderDestroy() resource.TestCheckF id := rs.Primary.ID realm := rs.Primary.Attributes["realm"] - idp, _ := keycloakClient.GetIdentityProvider(realm, id) + idp, _ := keycloakClient.GetIdentityProvider(testCtx, realm, id) if idp != nil { return fmt.Errorf("oidc config with id %s still exists", id) } @@ -207,7 +207,7 @@ func getKeycloakOidcGoogleIdentityProviderFromState(s *terraform.State, resource realm := rs.Primary.Attributes["realm"] alias := rs.Primary.Attributes["alias"] - idp, err := keycloakClient.GetIdentityProvider(realm, alias) + idp, err := keycloakClient.GetIdentityProvider(testCtx, realm, alias) if err != nil { return nil, fmt.Errorf("error getting oidc identity provider config with alias %s: %s", alias, err) } diff --git a/provider/resource_keycloak_oidc_identity_provider.go b/provider/resource_keycloak_oidc_identity_provider.go index ff900cf9a..9027dc82c 100644 --- a/provider/resource_keycloak_oidc_identity_provider.go +++ b/provider/resource_keycloak_oidc_identity_provider.go @@ -100,9 +100,9 @@ func resourceKeycloakOidcIdentityProvider() *schema.Resource { } oidcResource := resourceKeycloakIdentityProvider() oidcResource.Schema = mergeSchemas(oidcResource.Schema, oidcSchema) - oidcResource.Create = resourceKeycloakIdentityProviderCreate(getOidcIdentityProviderFromData, setOidcIdentityProviderData) - oidcResource.Read = resourceKeycloakIdentityProviderRead(setOidcIdentityProviderData) - oidcResource.Update = resourceKeycloakIdentityProviderUpdate(getOidcIdentityProviderFromData, setOidcIdentityProviderData) + oidcResource.CreateContext = resourceKeycloakIdentityProviderCreate(getOidcIdentityProviderFromData, setOidcIdentityProviderData) + oidcResource.ReadContext = resourceKeycloakIdentityProviderRead(setOidcIdentityProviderData) + oidcResource.UpdateContext = resourceKeycloakIdentityProviderUpdate(getOidcIdentityProviderFromData, setOidcIdentityProviderData) return oidcResource } diff --git a/provider/resource_keycloak_oidc_identity_provider_test.go b/provider/resource_keycloak_oidc_identity_provider_test.go index 0f0e4889f..41667e2ca 100644 --- a/provider/resource_keycloak_oidc_identity_provider_test.go +++ b/provider/resource_keycloak_oidc_identity_provider_test.go @@ -109,7 +109,7 @@ func TestAccKeycloakOidcIdentityProvider_createAfterManualDestroy(t *testing.T) }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProvider(oidc.Realm, oidc.Alias) + err := keycloakClient.DeleteIdentityProvider(testCtx, oidc.Realm, oidc.Alias) if err != nil { t.Fatal(err) } @@ -236,7 +236,7 @@ func testAccCheckKeycloakOidcIdentityProviderDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm"] - oidc, _ := keycloakClient.GetIdentityProvider(realm, id) + oidc, _ := keycloakClient.GetIdentityProvider(testCtx, realm, id) if oidc != nil { return fmt.Errorf("oidc config with id %s still exists", id) } @@ -255,7 +255,7 @@ func getKeycloakOidcIdentityProviderFromState(s *terraform.State, resourceName s realm := rs.Primary.Attributes["realm"] alias := rs.Primary.Attributes["alias"] - oidc, err := keycloakClient.GetIdentityProvider(realm, alias) + oidc, err := keycloakClient.GetIdentityProvider(testCtx, realm, alias) if err != nil { return nil, fmt.Errorf("error getting oidc identity provider config with alias %s: %s", alias, err) } diff --git a/provider/resource_keycloak_openid_audience_protocol_mapper.go b/provider/resource_keycloak_openid_audience_protocol_mapper.go index 1dd49d9c7..6e7d96a78 100644 --- a/provider/resource_keycloak_openid_audience_protocol_mapper.go +++ b/provider/resource_keycloak_openid_audience_protocol_mapper.go @@ -1,22 +1,24 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakOpenIdAudienceProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenIdAudienceProtocolMapperCreate, - Read: resourceKeycloakOpenIdAudienceProtocolMapperRead, - Update: resourceKeycloakOpenIdAudienceProtocolMapperUpdate, - Delete: resourceKeycloakOpenIdAudienceProtocolMapperDelete, + CreateContext: resourceKeycloakOpenIdAudienceProtocolMapperCreate, + ReadContext: resourceKeycloakOpenIdAudienceProtocolMapperRead, + UpdateContext: resourceKeycloakOpenIdAudienceProtocolMapperUpdate, + DeleteContext: resourceKeycloakOpenIdAudienceProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -109,36 +111,36 @@ func mapFromOpenIdAudienceMapperToData(mapper *keycloak.OpenIdAudienceProtocolMa data.Set("add_to_access_token", mapper.AddToAccessToken) } -func resourceKeycloakOpenIdAudienceProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdAudienceProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdAudienceMapper := mapFromDataToOpenIdAudienceProtocolMapper(data) - err := keycloakClient.ValidateOpenIdAudienceProtocolMapper(openIdAudienceMapper) + err := keycloakClient.ValidateOpenIdAudienceProtocolMapper(ctx, openIdAudienceMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenIdAudienceProtocolMapper(openIdAudienceMapper) + err = keycloakClient.NewOpenIdAudienceProtocolMapper(ctx, openIdAudienceMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromOpenIdAudienceMapperToData(openIdAudienceMapper, data) - return resourceKeycloakOpenIdAudienceProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdAudienceProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdAudienceProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdAudienceProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - openIdAudienceMapper, err := keycloakClient.GetOpenIdAudienceProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + openIdAudienceMapper, err := keycloakClient.GetOpenIdAudienceProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromOpenIdAudienceMapperToData(openIdAudienceMapper, data) @@ -146,30 +148,30 @@ func resourceKeycloakOpenIdAudienceProtocolMapperRead(data *schema.ResourceData, return nil } -func resourceKeycloakOpenIdAudienceProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdAudienceProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdAudienceMapper := mapFromDataToOpenIdAudienceProtocolMapper(data) - err := keycloakClient.ValidateOpenIdAudienceProtocolMapper(openIdAudienceMapper) + err := keycloakClient.ValidateOpenIdAudienceProtocolMapper(ctx, openIdAudienceMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateOpenIdAudienceProtocolMapper(openIdAudienceMapper) + err = keycloakClient.UpdateOpenIdAudienceProtocolMapper(ctx, openIdAudienceMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenIdAudienceProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdAudienceProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdAudienceProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdAudienceProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteOpenIdAudienceProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteOpenIdAudienceProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_openid_audience_protocol_mapper_test.go b/provider/resource_keycloak_openid_audience_protocol_mapper_test.go index 058345d92..c663a3cb9 100644 --- a/provider/resource_keycloak_openid_audience_protocol_mapper_test.go +++ b/provider/resource_keycloak_openid_audience_protocol_mapper_test.go @@ -134,7 +134,7 @@ func TestAccKeycloakOpenIdAudienceProtocolMapper_createAfterManualDestroy(t *tes }, { PreConfig: func() { - err := keycloakClient.DeleteOpenIdAudienceProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteOpenIdAudienceProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -295,7 +295,7 @@ func getAudienceMapperUsingState(state *terraform.State, resourceName string) (* clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetOpenIdAudienceProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetOpenIdAudienceProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakOpenIdAudienceProtocolMapper_basic_client(clientId, mapperName string) string { diff --git a/provider/resource_keycloak_openid_audience_resolve_protocol_mapper.go b/provider/resource_keycloak_openid_audience_resolve_protocol_mapper.go index 19cb0a8bc..bdff85784 100644 --- a/provider/resource_keycloak_openid_audience_resolve_protocol_mapper.go +++ b/provider/resource_keycloak_openid_audience_resolve_protocol_mapper.go @@ -1,22 +1,24 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakOpenIdAudienceResolveProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenIdAudienceResolveProtocolMapperCreate, - Read: resourceKeycloakOpenIdAudienceResolveProtocolMapperRead, - //Update: resourceKeycloakOpenIdAudienceResolveProtocolMapperUpdate, - Delete: resourceKeycloakOpenIdAudienceResolveProtocolMapperDelete, + CreateContext: resourceKeycloakOpenIdAudienceResolveProtocolMapperCreate, + ReadContext: resourceKeycloakOpenIdAudienceResolveProtocolMapperRead, + //UpdateContext: resourceKeycloakOpenIdAudienceResolveProtocolMapperUpdate, + DeleteContext: resourceKeycloakOpenIdAudienceResolveProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -72,36 +74,36 @@ func mapFromOpenIdAudienceResolveMapperToData(mapper *keycloak.OpenIdAudienceRes } } -func resourceKeycloakOpenIdAudienceResolveProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdAudienceResolveProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdAudienceResolveMapper := mapFromDataToOpenIdAudienceResolveProtocolMapper(data) - err := keycloakClient.ValidateOpenIdAudienceResolveProtocolMapper(openIdAudienceResolveMapper) + err := keycloakClient.ValidateOpenIdAudienceResolveProtocolMapper(ctx, openIdAudienceResolveMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenIdAudienceResolveProtocolMapper(openIdAudienceResolveMapper) + err = keycloakClient.NewOpenIdAudienceResolveProtocolMapper(ctx, openIdAudienceResolveMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromOpenIdAudienceResolveMapperToData(openIdAudienceResolveMapper, data) - return resourceKeycloakOpenIdAudienceResolveProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdAudienceResolveProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdAudienceResolveProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdAudienceResolveProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - openIdAudienceResolveMapper, err := keycloakClient.GetOpenIdAudienceResolveProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + openIdAudienceResolveMapper, err := keycloakClient.GetOpenIdAudienceResolveProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromOpenIdAudienceResolveMapperToData(openIdAudienceResolveMapper, data) @@ -109,12 +111,12 @@ func resourceKeycloakOpenIdAudienceResolveProtocolMapperRead(data *schema.Resour return nil } -func resourceKeycloakOpenIdAudienceResolveProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdAudienceResolveProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteOpenIdAudienceResolveProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteOpenIdAudienceResolveProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_openid_audience_resolve_protocol_mapper_test.go b/provider/resource_keycloak_openid_audience_resolve_protocol_mapper_test.go index 3dddf64ed..a0295bbfb 100644 --- a/provider/resource_keycloak_openid_audience_resolve_protocol_mapper_test.go +++ b/provider/resource_keycloak_openid_audience_resolve_protocol_mapper_test.go @@ -103,7 +103,7 @@ func TestAccKeycloakOpenIdAudienceResolveProtocolMapper_createAfterManualDestroy }, { PreConfig: func() { - err := keycloakClient.DeleteOpenIdAudienceResolveProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteOpenIdAudienceResolveProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -195,7 +195,7 @@ func getAudienceResolveMapperUsingState(state *terraform.State, resourceName str clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetOpenIdAudienceResolveProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetOpenIdAudienceResolveProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakOpenIdAudienceResolveProtocolMapper_basic_client(clientId string) string { diff --git a/provider/resource_keycloak_openid_client.go b/provider/resource_keycloak_openid_client.go index 0bd269827..52da8bfba 100644 --- a/provider/resource_keycloak_openid_client.go +++ b/provider/resource_keycloak_openid_client.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "reflect" "strings" @@ -23,13 +24,13 @@ var ( func resourceKeycloakOpenidClient() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientCreate, - Read: resourceKeycloakOpenidClientRead, - Delete: resourceKeycloakOpenidClientDelete, - Update: resourceKeycloakOpenidClientUpdate, + CreateContext: resourceKeycloakOpenidClientCreate, + ReadContext: resourceKeycloakOpenidClientRead, + DeleteContext: resourceKeycloakOpenidClientDelete, + UpdateContext: resourceKeycloakOpenidClientUpdate, // This resource can be imported using {{realm}}/{{client_id}}. The Client ID is displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakOpenidClientImport, + StateContext: resourceKeycloakOpenidClientImport, }, Schema: map[string]*schema.Schema{ "client_id": { @@ -402,10 +403,10 @@ func getOpenidClientFromData(data *schema.ResourceData) (*keycloak.OpenidClient, return openidClient, nil } -func setOpenidClientData(keycloakClient *keycloak.KeycloakClient, data *schema.ResourceData, client *keycloak.OpenidClient) error { +func setOpenidClientData(ctx context.Context, keycloakClient *keycloak.KeycloakClient, data *schema.ResourceData, client *keycloak.OpenidClient) error { var serviceAccountUserId string if client.ServiceAccountsEnabled { - serviceAccountUser, err := keycloakClient.GetOpenidClientServiceAccountUserId(client.RealmId, client.Id) + serviceAccountUser, err := keycloakClient.GetOpenidClientServiceAccountUserId(ctx, client.RealmId, client.Id) if err != nil { return err } @@ -481,87 +482,87 @@ func setOpenidClientData(keycloakClient *keycloak.KeycloakClient, data *schema.R return nil } -func resourceKeycloakOpenidClientCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) client, err := getOpenidClientFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.ValidateOpenidClient(client) + err = keycloakClient.ValidateOpenidClient(ctx, client) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenidClient(client) + err = keycloakClient.NewOpenidClient(ctx, client) if err != nil { - return err + return diag.FromErr(err) } - err = setOpenidClientData(keycloakClient, data, client) + err = setOpenidClientData(ctx, keycloakClient, data, client) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenidClientRead(data, meta) + return resourceKeycloakOpenidClientRead(ctx, data, meta) } -func resourceKeycloakOpenidClientRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - client, err := keycloakClient.GetOpenidClient(realmId, id) + client, err := keycloakClient.GetOpenidClient(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } - err = setOpenidClientData(keycloakClient, data, client) + err = setOpenidClientData(ctx, keycloakClient, data, client) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakOpenidClientUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) client, err := getOpenidClientFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.ValidateOpenidClient(client) + err = keycloakClient.ValidateOpenidClient(ctx, client) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateOpenidClient(client) + err = keycloakClient.UpdateOpenidClient(ctx, client) if err != nil { - return err + return diag.FromErr(err) } - err = setOpenidClientData(keycloakClient, data, client) + err = setOpenidClientData(ctx, keycloakClient, data, client) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakOpenidClientDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteOpenidClient(realmId, id) + return diag.FromErr(keycloakClient.DeleteOpenidClient(ctx, realmId, id)) } -func resourceKeycloakOpenidClientImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakOpenidClientImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{openidClientId}}") @@ -569,5 +570,10 @@ func resourceKeycloakOpenidClientImport(d *schema.ResourceData, meta interface{} d.Set("realm_id", parts[0]) d.SetId(parts[1]) - return []*schema.ResourceData{d}, resourceKeycloakOpenidClientRead(d, meta) + diagnostics := resourceKeycloakOpenidClientRead(ctx, d, meta) + if diagnostics.HasError() { + return nil, errors.New(diagnostics[0].Summary) + } + + return []*schema.ResourceData{d}, nil } diff --git a/provider/resource_keycloak_openid_client_authorization_aggregate_policy.go b/provider/resource_keycloak_openid_client_authorization_aggregate_policy.go index ba8361def..21e52ac1f 100644 --- a/provider/resource_keycloak_openid_client_authorization_aggregate_policy.go +++ b/provider/resource_keycloak_openid_client_authorization_aggregate_policy.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,12 +10,12 @@ import ( func resourceKeycloakOpenidClientAuthorizationAggregatePolicy() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientAuthorizationAggregatePolicyCreate, - Read: resourceKeycloakOpenidClientAuthorizationAggregatePolicyRead, - Delete: resourceKeycloakOpenidClientAuthorizationAggregatePolicyDelete, - Update: resourceKeycloakOpenidClientAuthorizationAggregatePolicyUpdate, + CreateContext: resourceKeycloakOpenidClientAuthorizationAggregatePolicyCreate, + ReadContext: resourceKeycloakOpenidClientAuthorizationAggregatePolicyRead, + DeleteContext: resourceKeycloakOpenidClientAuthorizationAggregatePolicyDelete, + UpdateContext: resourceKeycloakOpenidClientAuthorizationAggregatePolicyUpdate, Importer: &schema.ResourceImporter{ - State: genericResourcePolicyImport, + StateContext: genericResourcePolicyImport, }, Schema: map[string]*schema.Schema{ "resource_server_id": { @@ -85,30 +87,30 @@ func setOpenidClientAuthorizationAggregatePolicyResourceData(data *schema.Resour data.Set("description", policy.Description) } -func resourceKeycloakOpenidClientAuthorizationAggregatePolicyCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationAggregatePolicyCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationAggregatePolicyResourceFromData(data) - err := keycloakClient.NewOpenidClientAuthorizationAggregatePolicy(resource) + err := keycloakClient.NewOpenidClientAuthorizationAggregatePolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationAggregatePolicyResourceData(data, resource) - return resourceKeycloakOpenidClientAuthorizationAggregatePolicyRead(data, meta) + return resourceKeycloakOpenidClientAuthorizationAggregatePolicyRead(ctx, data, meta) } -func resourceKeycloakOpenidClientAuthorizationAggregatePolicyRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationAggregatePolicyRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - resource, err := keycloakClient.GetOpenidClientAuthorizationAggregatePolicy(realmId, resourceServerId, id) + resource, err := keycloakClient.GetOpenidClientAuthorizationAggregatePolicy(ctx, realmId, resourceServerId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setOpenidClientAuthorizationAggregatePolicyResourceData(data, resource) @@ -116,13 +118,13 @@ func resourceKeycloakOpenidClientAuthorizationAggregatePolicyRead(data *schema.R return nil } -func resourceKeycloakOpenidClientAuthorizationAggregatePolicyUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationAggregatePolicyUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationAggregatePolicyResourceFromData(data) - err := keycloakClient.UpdateOpenidClientAuthorizationAggregatePolicy(resource) + err := keycloakClient.UpdateOpenidClientAuthorizationAggregatePolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationAggregatePolicyResourceData(data, resource) @@ -130,12 +132,12 @@ func resourceKeycloakOpenidClientAuthorizationAggregatePolicyUpdate(data *schema return nil } -func resourceKeycloakOpenidClientAuthorizationAggregatePolicyDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationAggregatePolicyDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - return keycloakClient.DeleteOpenidClientAuthorizationAggregatePolicy(realmId, resourceServerId, id) + return diag.FromErr(keycloakClient.DeleteOpenidClientAuthorizationAggregatePolicy(ctx, realmId, resourceServerId, id)) } diff --git a/provider/resource_keycloak_openid_client_authorization_aggregate_policy_test.go b/provider/resource_keycloak_openid_client_authorization_aggregate_policy_test.go index 621b0c922..295680dc9 100644 --- a/provider/resource_keycloak_openid_client_authorization_aggregate_policy_test.go +++ b/provider/resource_keycloak_openid_client_authorization_aggregate_policy_test.go @@ -37,7 +37,7 @@ func getResourceKeycloakOpenidClientAuthorizationAggregatePolicyFromState(s *ter resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, err := keycloakClient.GetOpenidClientAuthorizationAggregatePolicy(realm, resourceServerId, policyId) + policy, err := keycloakClient.GetOpenidClientAuthorizationAggregatePolicy(testCtx, realm, resourceServerId, policyId) if err != nil { return nil, fmt.Errorf("error getting openid client auth aggregate policy config with alias %s: %s", resourceServerId, err) } @@ -56,7 +56,7 @@ func testResourceKeycloakOpenidClientAuthorizationAggregatePolicyDestroy() resou resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, _ := keycloakClient.GetOpenidClientAuthorizationAggregatePolicy(realm, resourceServerId, policyId) + policy, _ := keycloakClient.GetOpenidClientAuthorizationAggregatePolicy(testCtx, realm, resourceServerId, policyId) if policy != nil { return fmt.Errorf("policy config with id %s still exists", policyId) } diff --git a/provider/resource_keycloak_openid_client_authorization_client_policy.go b/provider/resource_keycloak_openid_client_authorization_client_policy.go index aeca85891..a0b6a2b5e 100644 --- a/provider/resource_keycloak_openid_client_authorization_client_policy.go +++ b/provider/resource_keycloak_openid_client_authorization_client_policy.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,12 +10,12 @@ import ( func resourceKeycloakOpenidClientAuthorizationClientPolicy() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientAuthorizationClientPolicyCreate, - Read: resourceKeycloakOpenidClientAuthorizationClientPolicyRead, - Delete: resourceKeycloakOpenidClientAuthorizationClientPolicyDelete, - Update: resourceKeycloakOpenidClientAuthorizationClientPolicyUpdate, + CreateContext: resourceKeycloakOpenidClientAuthorizationClientPolicyCreate, + ReadContext: resourceKeycloakOpenidClientAuthorizationClientPolicyRead, + DeleteContext: resourceKeycloakOpenidClientAuthorizationClientPolicyDelete, + UpdateContext: resourceKeycloakOpenidClientAuthorizationClientPolicyUpdate, Importer: &schema.ResourceImporter{ - State: genericResourcePolicyImport, + StateContext: genericResourcePolicyImport, }, Schema: map[string]*schema.Schema{ "resource_server_id": { @@ -85,31 +87,31 @@ func setOpenidClientAuthorizationClientAuthorizationClientPolicyResourceData(dat data.Set("clients", policy.Clients) } -func resourceKeycloakOpenidClientAuthorizationClientPolicyCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationClientPolicyCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationClientAuthorizationClientPolicyResourceFromData(data) - err := keycloakClient.NewOpenidClientAuthorizationClientPolicy(resource) + err := keycloakClient.NewOpenidClientAuthorizationClientPolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationClientAuthorizationClientPolicyResourceData(data, resource) - return resourceKeycloakOpenidClientAuthorizationClientPolicyRead(data, meta) + return resourceKeycloakOpenidClientAuthorizationClientPolicyRead(ctx, data, meta) } -func resourceKeycloakOpenidClientAuthorizationClientPolicyRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationClientPolicyRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - resource, err := keycloakClient.GetOpenidClientAuthorizationClientPolicy(realmId, resourceServerId, id) + resource, err := keycloakClient.GetOpenidClientAuthorizationClientPolicy(ctx, realmId, resourceServerId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setOpenidClientAuthorizationClientAuthorizationClientPolicyResourceData(data, resource) @@ -117,14 +119,14 @@ func resourceKeycloakOpenidClientAuthorizationClientPolicyRead(data *schema.Reso return nil } -func resourceKeycloakOpenidClientAuthorizationClientPolicyUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationClientPolicyUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationClientAuthorizationClientPolicyResourceFromData(data) - err := keycloakClient.UpdateOpenidClientAuthorizationClientPolicy(resource) + err := keycloakClient.UpdateOpenidClientAuthorizationClientPolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationClientAuthorizationClientPolicyResourceData(data, resource) @@ -132,12 +134,12 @@ func resourceKeycloakOpenidClientAuthorizationClientPolicyUpdate(data *schema.Re return nil } -func resourceKeycloakOpenidClientAuthorizationClientPolicyDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationClientPolicyDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - return keycloakClient.DeleteOpenidClientAuthorizationClientPolicy(realmId, resourceServerId, id) + return diag.FromErr(keycloakClient.DeleteOpenidClientAuthorizationClientPolicy(ctx, realmId, resourceServerId, id)) } diff --git a/provider/resource_keycloak_openid_client_authorization_client_policy_test.go b/provider/resource_keycloak_openid_client_authorization_client_policy_test.go index f87c4145a..6ddcfa3d2 100644 --- a/provider/resource_keycloak_openid_client_authorization_client_policy_test.go +++ b/provider/resource_keycloak_openid_client_authorization_client_policy_test.go @@ -37,7 +37,7 @@ func getResourceKeycloakOpenidClientAuthorizationClientPolicyFromState(s *terraf resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, err := keycloakClient.GetOpenidClientAuthorizationClientPolicy(realm, resourceServerId, policyId) + policy, err := keycloakClient.GetOpenidClientAuthorizationClientPolicy(testCtx, realm, resourceServerId, policyId) if err != nil { return nil, fmt.Errorf("error getting openid client auth role policy config with alias %s: %s", resourceServerId, err) } @@ -56,7 +56,7 @@ func testResourceKeycloakOpenidClientAuthorizationClientPolicyDestroy() resource resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, _ := keycloakClient.GetOpenidClientAuthorizationClientPolicy(realm, resourceServerId, policyId) + policy, _ := keycloakClient.GetOpenidClientAuthorizationClientPolicy(testCtx, realm, resourceServerId, policyId) if policy != nil { return fmt.Errorf("policy config with id %s still exists", policyId) } diff --git a/provider/resource_keycloak_openid_client_authorization_group_policy.go b/provider/resource_keycloak_openid_client_authorization_group_policy.go index 1c85365ce..5d2bb543e 100644 --- a/provider/resource_keycloak_openid_client_authorization_group_policy.go +++ b/provider/resource_keycloak_openid_client_authorization_group_policy.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,12 +10,12 @@ import ( func resourceKeycloakOpenidClientAuthorizationGroupPolicy() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientAuthorizationGroupPolicyCreate, - Read: resourceKeycloakOpenidClientAuthorizationGroupPolicyRead, - Delete: resourceKeycloakOpenidClientAuthorizationGroupPolicyDelete, - Update: resourceKeycloakOpenidClientAuthorizationGroupPolicyUpdate, + CreateContext: resourceKeycloakOpenidClientAuthorizationGroupPolicyCreate, + ReadContext: resourceKeycloakOpenidClientAuthorizationGroupPolicyRead, + DeleteContext: resourceKeycloakOpenidClientAuthorizationGroupPolicyDelete, + UpdateContext: resourceKeycloakOpenidClientAuthorizationGroupPolicyUpdate, Importer: &schema.ResourceImporter{ - State: genericResourcePolicyImport, + StateContext: genericResourcePolicyImport, }, Schema: map[string]*schema.Schema{ "resource_server_id": { @@ -100,7 +102,7 @@ func getOpenidClientAuthorizationGroupPolicyResourceFromData(data *schema.Resour return &resource } -func setOpenidClientAuthorizationGroupPolicyResourceData(keycloakClient *keycloak.KeycloakClient, policy *keycloak.OpenidClientAuthorizationGroupPolicy, data *schema.ResourceData) error { +func setOpenidClientAuthorizationGroupPolicyResourceData(ctx context.Context, keycloakClient *keycloak.KeycloakClient, policy *keycloak.OpenidClientAuthorizationGroupPolicy, data *schema.ResourceData) error { data.SetId(policy.Id) data.Set("resource_server_id", policy.ResourceServerId) @@ -114,7 +116,7 @@ func setOpenidClientAuthorizationGroupPolicyResourceData(keycloakClient *keycloa var groups []interface{} for _, g := range policy.Groups { // the "path" attribute is omitted by Keycloak, so we have to look this group up ourselves to get the path - group, err := keycloakClient.GetGroup(policy.RealmId, g.Id) + group, err := keycloakClient.GetGroup(ctx, policy.RealmId, g.Id) if err != nil { return err } @@ -131,68 +133,68 @@ func setOpenidClientAuthorizationGroupPolicyResourceData(keycloakClient *keycloa return nil } -func resourceKeycloakOpenidClientAuthorizationGroupPolicyCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationGroupPolicyCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationGroupPolicyResourceFromData(data) - err := keycloakClient.NewOpenidClientAuthorizationGroupPolicy(resource) + err := keycloakClient.NewOpenidClientAuthorizationGroupPolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } - err = setOpenidClientAuthorizationGroupPolicyResourceData(keycloakClient, resource, data) + err = setOpenidClientAuthorizationGroupPolicyResourceData(ctx, keycloakClient, resource, data) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenidClientAuthorizationGroupPolicyRead(data, meta) + return resourceKeycloakOpenidClientAuthorizationGroupPolicyRead(ctx, data, meta) } -func resourceKeycloakOpenidClientAuthorizationGroupPolicyRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationGroupPolicyRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - resource, err := keycloakClient.GetOpenidClientAuthorizationGroupPolicy(realmId, resourceServerId, id) + resource, err := keycloakClient.GetOpenidClientAuthorizationGroupPolicy(ctx, realmId, resourceServerId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } - err = setOpenidClientAuthorizationGroupPolicyResourceData(keycloakClient, resource, data) + err = setOpenidClientAuthorizationGroupPolicyResourceData(ctx, keycloakClient, resource, data) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakOpenidClientAuthorizationGroupPolicyUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationGroupPolicyUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationGroupPolicyResourceFromData(data) - err := keycloakClient.UpdateOpenidClientAuthorizationGroupPolicy(resource) + err := keycloakClient.UpdateOpenidClientAuthorizationGroupPolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } - err = setOpenidClientAuthorizationGroupPolicyResourceData(keycloakClient, resource, data) + err = setOpenidClientAuthorizationGroupPolicyResourceData(ctx, keycloakClient, resource, data) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakOpenidClientAuthorizationGroupPolicyDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationGroupPolicyDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - return keycloakClient.DeleteOpenidClientAuthorizationGroupPolicy(realmId, resourceServerId, id) + return diag.FromErr(keycloakClient.DeleteOpenidClientAuthorizationGroupPolicy(ctx, realmId, resourceServerId, id)) } diff --git a/provider/resource_keycloak_openid_client_authorization_group_policy_test.go b/provider/resource_keycloak_openid_client_authorization_group_policy_test.go index c6dffb713..9536fc110 100644 --- a/provider/resource_keycloak_openid_client_authorization_group_policy_test.go +++ b/provider/resource_keycloak_openid_client_authorization_group_policy_test.go @@ -44,7 +44,7 @@ func getResourceKeycloakOpenidClientAuthorizationGroupPolicyFromState(s *terrafo resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, err := keycloakClient.GetOpenidClientAuthorizationGroupPolicy(realm, resourceServerId, policyId) + policy, err := keycloakClient.GetOpenidClientAuthorizationGroupPolicy(testCtx, realm, resourceServerId, policyId) if err != nil { return nil, fmt.Errorf("error getting openid client auth role policy config with alias %s: %s", resourceServerId, err) } @@ -62,7 +62,7 @@ func testResourceKeycloakOpenidClientHasNoAuthorizationGroupPolicy(resourceName realm := rs.Primary.Attributes["realm_id"] resourceServerId := rs.Primary.Attributes["resource_server_id"] - _, err := keycloakClient.GetOpenidClientAuthorizationGroupPolicy(realm, resourceServerId, policyId) + _, err := keycloakClient.GetOpenidClientAuthorizationGroupPolicy(testCtx, realm, resourceServerId, policyId) if err == nil { return fmt.Errorf("policy with id %s still exists", policyId) } diff --git a/provider/resource_keycloak_openid_client_authorization_js_policy.go b/provider/resource_keycloak_openid_client_authorization_js_policy.go index 1d3fbb330..69547528b 100644 --- a/provider/resource_keycloak_openid_client_authorization_js_policy.go +++ b/provider/resource_keycloak_openid_client_authorization_js_policy.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,12 +10,12 @@ import ( func resourceKeycloakOpenidClientAuthorizationJSPolicy() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientAuthorizationJSPolicyCreate, - Read: resourceKeycloakOpenidClientAuthorizationJSPolicyRead, - Delete: resourceKeycloakOpenidClientAuthorizationJSPolicyDelete, - Update: resourceKeycloakOpenidClientAuthorizationJSPolicyUpdate, + CreateContext: resourceKeycloakOpenidClientAuthorizationJSPolicyCreate, + ReadContext: resourceKeycloakOpenidClientAuthorizationJSPolicyRead, + DeleteContext: resourceKeycloakOpenidClientAuthorizationJSPolicyDelete, + UpdateContext: resourceKeycloakOpenidClientAuthorizationJSPolicyUpdate, Importer: &schema.ResourceImporter{ - State: genericResourcePolicyImport, + StateContext: genericResourcePolicyImport, }, Schema: map[string]*schema.Schema{ "resource_server_id": { @@ -81,31 +83,31 @@ func setOpenidClientAuthorizationJSPolicyResourceData(data *schema.ResourceData, data.Set("code", policy.Code) } -func resourceKeycloakOpenidClientAuthorizationJSPolicyCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationJSPolicyCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationJSPolicyResourceFromData(data) - err := keycloakClient.NewOpenidClientAuthorizationJSPolicy(resource) + err := keycloakClient.NewOpenidClientAuthorizationJSPolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationJSPolicyResourceData(data, resource) - return resourceKeycloakOpenidClientAuthorizationJSPolicyRead(data, meta) + return resourceKeycloakOpenidClientAuthorizationJSPolicyRead(ctx, data, meta) } -func resourceKeycloakOpenidClientAuthorizationJSPolicyRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationJSPolicyRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - resource, err := keycloakClient.GetOpenidClientAuthorizationJSPolicy(realmId, resourceServerId, id) + resource, err := keycloakClient.GetOpenidClientAuthorizationJSPolicy(ctx, realmId, resourceServerId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setOpenidClientAuthorizationJSPolicyResourceData(data, resource) @@ -113,14 +115,14 @@ func resourceKeycloakOpenidClientAuthorizationJSPolicyRead(data *schema.Resource return nil } -func resourceKeycloakOpenidClientAuthorizationJSPolicyUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationJSPolicyUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationJSPolicyResourceFromData(data) - err := keycloakClient.UpdateOpenidClientAuthorizationJSPolicy(resource) + err := keycloakClient.UpdateOpenidClientAuthorizationJSPolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationJSPolicyResourceData(data, resource) @@ -128,12 +130,12 @@ func resourceKeycloakOpenidClientAuthorizationJSPolicyUpdate(data *schema.Resour return nil } -func resourceKeycloakOpenidClientAuthorizationJSPolicyDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationJSPolicyDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - return keycloakClient.DeleteOpenidClientAuthorizationJSPolicy(realmId, resourceServerId, id) + return diag.FromErr(keycloakClient.DeleteOpenidClientAuthorizationJSPolicy(ctx, realmId, resourceServerId, id)) } diff --git a/provider/resource_keycloak_openid_client_authorization_js_policy_test.go b/provider/resource_keycloak_openid_client_authorization_js_policy_test.go index a8cea3218..c96277bb5 100644 --- a/provider/resource_keycloak_openid_client_authorization_js_policy_test.go +++ b/provider/resource_keycloak_openid_client_authorization_js_policy_test.go @@ -37,7 +37,7 @@ func getResourceKeycloakOpenidClientAuthorizationJSPolicyFromState(s *terraform. resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, err := keycloakClient.GetOpenidClientAuthorizationJSPolicy(realm, resourceServerId, policyId) + policy, err := keycloakClient.GetOpenidClientAuthorizationJSPolicy(testCtx, realm, resourceServerId, policyId) if err != nil { return nil, fmt.Errorf("error getting openid client auth role policy config with alias %s: %s", resourceServerId, err) } @@ -56,7 +56,7 @@ func testResourceKeycloakOpenidClientAuthorizationJSPolicyDestroy() resource.Tes resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, _ := keycloakClient.GetOpenidClientAuthorizationJSPolicy(realm, resourceServerId, policyId) + policy, _ := keycloakClient.GetOpenidClientAuthorizationJSPolicy(testCtx, realm, resourceServerId, policyId) if policy != nil { return fmt.Errorf("policy config with id %s still exists", policyId) } diff --git a/provider/resource_keycloak_openid_client_authorization_permission.go b/provider/resource_keycloak_openid_client_authorization_permission.go index dda7415e3..34f5a2f35 100644 --- a/provider/resource_keycloak_openid_client_authorization_permission.go +++ b/provider/resource_keycloak_openid_client_authorization_permission.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -15,12 +17,12 @@ var ( func resourceKeycloakOpenidClientAuthorizationPermission() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientAuthorizationPermissionCreate, - Read: resourceKeycloakOpenidClientAuthorizationPermissionRead, - Delete: resourceKeycloakOpenidClientAuthorizationPermissionDelete, - Update: resourceKeycloakOpenidClientAuthorizationPermissionUpdate, + CreateContext: resourceKeycloakOpenidClientAuthorizationPermissionCreate, + ReadContext: resourceKeycloakOpenidClientAuthorizationPermissionRead, + DeleteContext: resourceKeycloakOpenidClientAuthorizationPermissionDelete, + UpdateContext: resourceKeycloakOpenidClientAuthorizationPermissionUpdate, Importer: &schema.ResourceImporter{ - State: resourceKeycloakOpenidClientAuthorizationPermissionImport, + StateContext: resourceKeycloakOpenidClientAuthorizationPermissionImport, }, Schema: map[string]*schema.Schema{ "resource_server_id": { @@ -120,31 +122,31 @@ func setOpenidClientAuthorizationPermissionData(data *schema.ResourceData, permi data.Set("resources", permission.Resources) } -func resourceKeycloakOpenidClientAuthorizationPermissionCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationPermissionCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) permission := getOpenidClientAuthorizationPermissionFromData(data) - err := keycloakClient.NewOpenidClientAuthorizationPermission(permission) + err := keycloakClient.NewOpenidClientAuthorizationPermission(ctx, permission) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationPermissionData(data, permission) - return resourceKeycloakOpenidClientAuthorizationPermissionRead(data, meta) + return resourceKeycloakOpenidClientAuthorizationPermissionRead(ctx, data, meta) } -func resourceKeycloakOpenidClientAuthorizationPermissionRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationPermissionRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(realmId, resourceServerId, id) + permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(ctx, realmId, resourceServerId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setOpenidClientAuthorizationPermissionData(data, permission) @@ -152,14 +154,14 @@ func resourceKeycloakOpenidClientAuthorizationPermissionRead(data *schema.Resour return nil } -func resourceKeycloakOpenidClientAuthorizationPermissionUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationPermissionUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) permission := getOpenidClientAuthorizationPermissionFromData(data) - err := keycloakClient.UpdateOpenidClientAuthorizationPermission(permission) + err := keycloakClient.UpdateOpenidClientAuthorizationPermission(ctx, permission) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationPermissionData(data, permission) @@ -167,17 +169,17 @@ func resourceKeycloakOpenidClientAuthorizationPermissionUpdate(data *schema.Reso return nil } -func resourceKeycloakOpenidClientAuthorizationPermissionDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationPermissionDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - return keycloakClient.DeleteOpenidClientAuthorizationPermission(realmId, resourceServerId, id) + return diag.FromErr(keycloakClient.DeleteOpenidClientAuthorizationPermission(ctx, realmId, resourceServerId, id)) } -func resourceKeycloakOpenidClientAuthorizationPermissionImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakOpenidClientAuthorizationPermissionImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 3 { return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{resourceServerId}}/{{permissionId}}") diff --git a/provider/resource_keycloak_openid_client_authorization_permission_test.go b/provider/resource_keycloak_openid_client_authorization_permission_test.go index cf2bd1121..b78d6dbbe 100644 --- a/provider/resource_keycloak_openid_client_authorization_permission_test.go +++ b/provider/resource_keycloak_openid_client_authorization_permission_test.go @@ -50,7 +50,7 @@ func TestAccKeycloakOpenidClientAuthorizationPermission_createAfterManualDestroy }, { PreConfig: func() { - err := keycloakClient.DeleteOpenidClientAuthorizationPermission(authorizationPermission.RealmId, authorizationPermission.ResourceServerId, authorizationPermission.Id) + err := keycloakClient.DeleteOpenidClientAuthorizationPermission(testCtx, authorizationPermission.RealmId, authorizationPermission.ResourceServerId, authorizationPermission.Id) if err != nil { t.Fatal(err) } @@ -67,13 +67,13 @@ func TestAccKeycloakOpenidClientAuthorizationPermission_basicUpdateAll(t *testin clientId := acctest.RandomWithPrefix("tf-acc") scopeName := acctest.RandomWithPrefix("tf-acc") - firstAuthrorizationPermission := &keycloak.OpenidClientAuthorizationPermission{ + firstAuthorizationPermission := &keycloak.OpenidClientAuthorizationPermission{ RealmId: testAccRealm.Realm, Name: acctest.RandString(10), Description: acctest.RandString(10), } - secondAuthrorizationPermission := &keycloak.OpenidClientAuthorizationPermission{ + secondAuthorizationPermission := &keycloak.OpenidClientAuthorizationPermission{ RealmId: testAccRealm.Realm, Name: acctest.RandString(10), Description: acctest.RandString(10), @@ -85,11 +85,11 @@ func TestAccKeycloakOpenidClientAuthorizationPermission_basicUpdateAll(t *testin CheckDestroy: testAccCheckKeycloakOpenidClientAuthorizationPermissionDestroy(), Steps: []resource.TestStep{ { - Config: testKeycloakOpenidClientAuthorizationPermission_basicFromInterface(clientId, firstAuthrorizationPermission, acctest.RandString(10), scopeName), + Config: testKeycloakOpenidClientAuthorizationPermission_basicFromInterface(clientId, firstAuthorizationPermission, acctest.RandString(10), scopeName), Check: testAccCheckKeycloakOpenidClientAuthorizationPermissionExists("keycloak_openid_client_authorization_permission.test"), }, { - Config: testKeycloakOpenidClientAuthorizationPermission_basicFromInterface(clientId, secondAuthrorizationPermission, acctest.RandString(10), scopeName), + Config: testKeycloakOpenidClientAuthorizationPermission_basicFromInterface(clientId, secondAuthorizationPermission, acctest.RandString(10), scopeName), Check: testAccCheckKeycloakOpenidClientAuthorizationPermissionExists("keycloak_openid_client_authorization_permission.test"), }, }, @@ -133,7 +133,7 @@ func testAccCheckKeycloakOpenidClientAuthorizationPermissionDestroy() resource.T resourceServerId := rs.Primary.Attributes["resource_server_id"] id := rs.Primary.ID - authorizationPermission, _ := keycloakClient.GetOpenidClientAuthorizationPermission(realm, resourceServerId, id) + authorizationPermission, _ := keycloakClient.GetOpenidClientAuthorizationPermission(testCtx, realm, resourceServerId, id) if authorizationPermission != nil { return fmt.Errorf("test config with id %s still exists", id) } @@ -153,7 +153,7 @@ func getKeycloakOpenidClientAuthorizationPermissionFromState(s *terraform.State, resourceServerId := rs.Primary.Attributes["resource_server_id"] id := rs.Primary.ID - authorizationPermission, err := keycloakClient.GetOpenidClientAuthorizationPermission(realm, resourceServerId, id) + authorizationPermission, err := keycloakClient.GetOpenidClientAuthorizationPermission(testCtx, realm, resourceServerId, id) if err != nil { return nil, fmt.Errorf("error getting authorization permission config with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_openid_client_authorization_resource.go b/provider/resource_keycloak_openid_client_authorization_resource.go index df4e6a336..b4c617338 100644 --- a/provider/resource_keycloak_openid_client_authorization_resource.go +++ b/provider/resource_keycloak_openid_client_authorization_resource.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" "strings" @@ -9,12 +11,12 @@ import ( func resourceKeycloakOpenidClientAuthorizationResource() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientAuthorizationResourceCreate, - Read: resourceKeycloakOpenidClientAuthorizationResourceRead, - Delete: resourceKeycloakOpenidClientAuthorizationResourceDelete, - Update: resourceKeycloakOpenidClientAuthorizationResourceUpdate, + CreateContext: resourceKeycloakOpenidClientAuthorizationResourceCreate, + ReadContext: resourceKeycloakOpenidClientAuthorizationResourceRead, + DeleteContext: resourceKeycloakOpenidClientAuthorizationResourceDelete, + UpdateContext: resourceKeycloakOpenidClientAuthorizationResourceUpdate, Importer: &schema.ResourceImporter{ - State: resourceKeycloakOpenidClientAuthorizationResourceImport, + StateContext: resourceKeycloakOpenidClientAuthorizationResourceImport, }, Schema: map[string]*schema.Schema{ "resource_server_id": { @@ -104,7 +106,7 @@ func getOpenidClientAuthorizationResourceFromData(data *schema.ResourceData) *ke } func setOpenidClientAuthorizationResourceData(data *schema.ResourceData, resource *keycloak.OpenidClientAuthorizationResource) { - scopes := []string{} + var scopes []string for _, scope := range resource.Scopes { scopes = append(scopes, scope.Name) } @@ -121,31 +123,31 @@ func setOpenidClientAuthorizationResourceData(data *schema.ResourceData, resourc data.Set("scopes", scopes) } -func resourceKeycloakOpenidClientAuthorizationResourceCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationResourceCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationResourceFromData(data) - err := keycloakClient.NewOpenidClientAuthorizationResource(resource) + err := keycloakClient.NewOpenidClientAuthorizationResource(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationResourceData(data, resource) - return resourceKeycloakOpenidClientAuthorizationResourceRead(data, meta) + return resourceKeycloakOpenidClientAuthorizationResourceRead(ctx, data, meta) } -func resourceKeycloakOpenidClientAuthorizationResourceRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationResourceRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - resource, err := keycloakClient.GetOpenidClientAuthorizationResource(realmId, resourceServerId, id) + resource, err := keycloakClient.GetOpenidClientAuthorizationResource(ctx, realmId, resourceServerId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setOpenidClientAuthorizationResourceData(data, resource) @@ -153,14 +155,14 @@ func resourceKeycloakOpenidClientAuthorizationResourceRead(data *schema.Resource return nil } -func resourceKeycloakOpenidClientAuthorizationResourceUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationResourceUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationResourceFromData(data) - err := keycloakClient.UpdateOpenidClientAuthorizationResource(resource) + err := keycloakClient.UpdateOpenidClientAuthorizationResource(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationResourceData(data, resource) @@ -168,17 +170,17 @@ func resourceKeycloakOpenidClientAuthorizationResourceUpdate(data *schema.Resour return nil } -func resourceKeycloakOpenidClientAuthorizationResourceDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationResourceDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - return keycloakClient.DeleteOpenidClientAuthorizationResource(realmId, resourceServerId, id) + return diag.FromErr(keycloakClient.DeleteOpenidClientAuthorizationResource(ctx, realmId, resourceServerId, id)) } -func resourceKeycloakOpenidClientAuthorizationResourceImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakOpenidClientAuthorizationResourceImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 3 { return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{resourceServerId}}/{{authorizationResourceId}}") diff --git a/provider/resource_keycloak_openid_client_authorization_resource_test.go b/provider/resource_keycloak_openid_client_authorization_resource_test.go index b9f3db0e4..f34221253 100644 --- a/provider/resource_keycloak_openid_client_authorization_resource_test.go +++ b/provider/resource_keycloak_openid_client_authorization_resource_test.go @@ -45,7 +45,7 @@ func TestAccKeycloakOpenidClientAuthorizationResource_createAfterManualDestroy(t }, { PreConfig: func() { - err := keycloakClient.DeleteOpenidClientAuthorizationResource(authorizationResource.RealmId, authorizationResource.ResourceServerId, authorizationResource.Id) + err := keycloakClient.DeleteOpenidClientAuthorizationResource(testCtx, authorizationResource.RealmId, authorizationResource.ResourceServerId, authorizationResource.Id) if err != nil { t.Fatal(err) } @@ -62,7 +62,7 @@ func TestAccKeycloakOpenidClientAuthorizationResource_basicUpdateAll(t *testing. clientId := acctest.RandomWithPrefix("tf-acc") ownerManagedAccess := randomBool() - firstAuthrorizationResource := &keycloak.OpenidClientAuthorizationResource{ + firstAuthorizationResource := &keycloak.OpenidClientAuthorizationResource{ RealmId: testAccRealm.Realm, Name: acctest.RandString(10), DisplayName: acctest.RandString(10), @@ -71,7 +71,7 @@ func TestAccKeycloakOpenidClientAuthorizationResource_basicUpdateAll(t *testing. OwnerManagedAccess: ownerManagedAccess, } - secondAuthrorizationResource := &keycloak.OpenidClientAuthorizationResource{ + secondAuthorizationResource := &keycloak.OpenidClientAuthorizationResource{ RealmId: testAccRealm.Realm, Name: acctest.RandString(10), DisplayName: acctest.RandString(10), @@ -86,11 +86,11 @@ func TestAccKeycloakOpenidClientAuthorizationResource_basicUpdateAll(t *testing. CheckDestroy: testAccCheckKeycloakOpenidClientAuthorizationResourceDestroy(), Steps: []resource.TestStep{ { - Config: testKeycloakOpenidClientAuthorizationResource_basicFromInterface(clientId, firstAuthrorizationResource), + Config: testKeycloakOpenidClientAuthorizationResource_basicFromInterface(clientId, firstAuthorizationResource), Check: testAccCheckKeycloakOpenidClientAuthorizationResourceExists("keycloak_openid_client_authorization_resource.test"), }, { - Config: testKeycloakOpenidClientAuthorizationResource_basicFromInterface(clientId, secondAuthrorizationResource), + Config: testKeycloakOpenidClientAuthorizationResource_basicFromInterface(clientId, secondAuthorizationResource), Check: testAccCheckKeycloakOpenidClientAuthorizationResourceExists("keycloak_openid_client_authorization_resource.test"), }, }, @@ -134,7 +134,7 @@ func testAccCheckKeycloakOpenidClientAuthorizationResourceDestroy() resource.Tes resourceServerId := rs.Primary.Attributes["resource_server_id"] id := rs.Primary.ID - authorizationResource, _ := keycloakClient.GetOpenidClientAuthorizationResource(realm, resourceServerId, id) + authorizationResource, _ := keycloakClient.GetOpenidClientAuthorizationResource(testCtx, realm, resourceServerId, id) if authorizationResource != nil { return fmt.Errorf("test config with id %s still exists", id) } @@ -154,7 +154,7 @@ func getKeycloakOpenidClientAuthorizationResourceFromState(s *terraform.State, r resourceServerId := rs.Primary.Attributes["resource_server_id"] id := rs.Primary.ID - authorizationResource, err := keycloakClient.GetOpenidClientAuthorizationResource(realm, resourceServerId, id) + authorizationResource, err := keycloakClient.GetOpenidClientAuthorizationResource(testCtx, realm, resourceServerId, id) if err != nil { return nil, fmt.Errorf("error getting authorization resource config with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_openid_client_authorization_role_policy.go b/provider/resource_keycloak_openid_client_authorization_role_policy.go index 8d4385955..064b5ca0b 100644 --- a/provider/resource_keycloak_openid_client_authorization_role_policy.go +++ b/provider/resource_keycloak_openid_client_authorization_role_policy.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,12 +10,12 @@ import ( func resourceKeycloakOpenidClientAuthorizationRolePolicy() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientAuthorizationRolePolicyCreate, - Read: resourceKeycloakOpenidClientAuthorizationRolePolicyRead, - Delete: resourceKeycloakOpenidClientAuthorizationRolePolicyDelete, - Update: resourceKeycloakOpenidClientAuthorizationRolePolicyUpdate, + CreateContext: resourceKeycloakOpenidClientAuthorizationRolePolicyCreate, + ReadContext: resourceKeycloakOpenidClientAuthorizationRolePolicyRead, + DeleteContext: resourceKeycloakOpenidClientAuthorizationRolePolicyDelete, + UpdateContext: resourceKeycloakOpenidClientAuthorizationRolePolicyUpdate, Importer: &schema.ResourceImporter{ - State: genericResourcePolicyImport, + StateContext: genericResourcePolicyImport, }, Schema: map[string]*schema.Schema{ "resource_server_id": { @@ -118,31 +120,31 @@ func setOpenidClientAuthorizationRolePolicyResourceData(data *schema.ResourceDat data.Set("role", roles) } -func resourceKeycloakOpenidClientAuthorizationRolePolicyCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationRolePolicyCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationRolePolicyResourceFromData(data) - err := keycloakClient.NewOpenidClientAuthorizationRolePolicy(resource) + err := keycloakClient.NewOpenidClientAuthorizationRolePolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationRolePolicyResourceData(data, resource) - return resourceKeycloakOpenidClientAuthorizationRolePolicyRead(data, meta) + return resourceKeycloakOpenidClientAuthorizationRolePolicyRead(ctx, data, meta) } -func resourceKeycloakOpenidClientAuthorizationRolePolicyRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationRolePolicyRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - resource, err := keycloakClient.GetOpenidClientAuthorizationRolePolicy(realmId, resourceServerId, id) + resource, err := keycloakClient.GetOpenidClientAuthorizationRolePolicy(ctx, realmId, resourceServerId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setOpenidClientAuthorizationRolePolicyResourceData(data, resource) @@ -150,14 +152,14 @@ func resourceKeycloakOpenidClientAuthorizationRolePolicyRead(data *schema.Resour return nil } -func resourceKeycloakOpenidClientAuthorizationRolePolicyUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationRolePolicyUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationRolePolicyResourceFromData(data) - err := keycloakClient.UpdateOpenidClientAuthorizationRolePolicy(resource) + err := keycloakClient.UpdateOpenidClientAuthorizationRolePolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationRolePolicyResourceData(data, resource) @@ -165,12 +167,12 @@ func resourceKeycloakOpenidClientAuthorizationRolePolicyUpdate(data *schema.Reso return nil } -func resourceKeycloakOpenidClientAuthorizationRolePolicyDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationRolePolicyDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - return keycloakClient.DeleteOpenidClientAuthorizationRolePolicy(realmId, resourceServerId, id) + return diag.FromErr(keycloakClient.DeleteOpenidClientAuthorizationRolePolicy(ctx, realmId, resourceServerId, id)) } diff --git a/provider/resource_keycloak_openid_client_authorization_role_policy_test.go b/provider/resource_keycloak_openid_client_authorization_role_policy_test.go index f15e6f95a..9ca1e33f4 100644 --- a/provider/resource_keycloak_openid_client_authorization_role_policy_test.go +++ b/provider/resource_keycloak_openid_client_authorization_role_policy_test.go @@ -62,7 +62,7 @@ func getResourceKeycloakOpenidClientAuthorizationRolePolicyFromState(s *terrafor resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, err := keycloakClient.GetOpenidClientAuthorizationRolePolicy(realm, resourceServerId, policyId) + policy, err := keycloakClient.GetOpenidClientAuthorizationRolePolicy(testCtx, realm, resourceServerId, policyId) if err != nil { return nil, fmt.Errorf("error getting openid client auth role policy config with alias %s: %s", resourceServerId, err) } @@ -81,7 +81,7 @@ func testResourceKeycloakOpenidClientAuthorizationRolePolicyDestroy() resource.T resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, _ := keycloakClient.GetOpenidClientAuthorizationRolePolicy(realm, resourceServerId, policyId) + policy, _ := keycloakClient.GetOpenidClientAuthorizationRolePolicy(testCtx, realm, resourceServerId, policyId) if policy != nil { return fmt.Errorf("policy config with id %s still exists", policyId) } diff --git a/provider/resource_keycloak_openid_client_authorization_scope.go b/provider/resource_keycloak_openid_client_authorization_scope.go index 3e3f7cee4..1214ba42f 100644 --- a/provider/resource_keycloak_openid_client_authorization_scope.go +++ b/provider/resource_keycloak_openid_client_authorization_scope.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" "strings" @@ -9,12 +11,12 @@ import ( func resourceKeycloakOpenidClientAuthorizationScope() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientAuthorizationScopeCreate, - Read: resourceKeycloakOpenidClientAuthorizationScopeRead, - Delete: resourceKeycloakOpenidClientAuthorizationScopeDelete, - Update: resourceKeycloakOpenidClientAuthorizationScopeUpdate, + CreateContext: resourceKeycloakOpenidClientAuthorizationScopeCreate, + ReadContext: resourceKeycloakOpenidClientAuthorizationScopeRead, + DeleteContext: resourceKeycloakOpenidClientAuthorizationScopeDelete, + UpdateContext: resourceKeycloakOpenidClientAuthorizationScopeUpdate, Importer: &schema.ResourceImporter{ - State: resourceKeycloakOpenidClientAuthorizationScopeImport, + StateContext: resourceKeycloakOpenidClientAuthorizationScopeImport, }, Schema: map[string]*schema.Schema{ "resource_server_id": { @@ -64,31 +66,31 @@ func setOpenidClientAuthorizationScopeData(data *schema.ResourceData, scope *key data.Set("icon_uri", scope.IconUri) } -func resourceKeycloakOpenidClientAuthorizationScopeCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationScopeCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) scope := getOpenidClientAuthorizationScopeFromData(data) - err := keycloakClient.NewOpenidClientAuthorizationScope(scope) + err := keycloakClient.NewOpenidClientAuthorizationScope(ctx, scope) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationScopeData(data, scope) - return resourceKeycloakOpenidClientAuthorizationScopeRead(data, meta) + return resourceKeycloakOpenidClientAuthorizationScopeRead(ctx, data, meta) } -func resourceKeycloakOpenidClientAuthorizationScopeRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationScopeRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - scope, err := keycloakClient.GetOpenidClientAuthorizationScope(realmId, resourceServerId, id) + scope, err := keycloakClient.GetOpenidClientAuthorizationScope(ctx, realmId, resourceServerId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setOpenidClientAuthorizationScopeData(data, scope) @@ -96,14 +98,14 @@ func resourceKeycloakOpenidClientAuthorizationScopeRead(data *schema.ResourceDat return nil } -func resourceKeycloakOpenidClientAuthorizationScopeUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationScopeUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) scope := getOpenidClientAuthorizationScopeFromData(data) - err := keycloakClient.UpdateOpenidClientAuthorizationScope(scope) + err := keycloakClient.UpdateOpenidClientAuthorizationScope(ctx, scope) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationScopeData(data, scope) @@ -111,17 +113,17 @@ func resourceKeycloakOpenidClientAuthorizationScopeUpdate(data *schema.ResourceD return nil } -func resourceKeycloakOpenidClientAuthorizationScopeDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationScopeDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - return keycloakClient.DeleteOpenidClientAuthorizationScope(realmId, resourceServerId, id) + return diag.FromErr(keycloakClient.DeleteOpenidClientAuthorizationScope(ctx, realmId, resourceServerId, id)) } -func resourceKeycloakOpenidClientAuthorizationScopeImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakOpenidClientAuthorizationScopeImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 3 { return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{resourceServerId}}/{{authorizationScopeId}}") diff --git a/provider/resource_keycloak_openid_client_authorization_scope_test.go b/provider/resource_keycloak_openid_client_authorization_scope_test.go index cc2ae2581..d089d771e 100644 --- a/provider/resource_keycloak_openid_client_authorization_scope_test.go +++ b/provider/resource_keycloak_openid_client_authorization_scope_test.go @@ -45,7 +45,7 @@ func TestAccKeycloakOpenidClientAuthorizationScope_createAfterManualDestroy(t *t }, { PreConfig: func() { - err := keycloakClient.DeleteOpenidClientAuthorizationScope(authorizationScope.RealmId, authorizationScope.ResourceServerId, authorizationScope.Id) + err := keycloakClient.DeleteOpenidClientAuthorizationScope(testCtx, authorizationScope.RealmId, authorizationScope.ResourceServerId, authorizationScope.Id) if err != nil { t.Fatal(err) } @@ -61,14 +61,14 @@ func TestAccKeycloakOpenidClientAuthorizationScope_basicUpdateAll(t *testing.T) t.Parallel() clientId := acctest.RandomWithPrefix("tf-acc") - firstAuthrorizationScope := &keycloak.OpenidClientAuthorizationScope{ + firstAuthorizationScope := &keycloak.OpenidClientAuthorizationScope{ RealmId: testAccRealm.Realm, Name: acctest.RandString(10), DisplayName: acctest.RandString(10), IconUri: acctest.RandString(10), } - secondAuthrorizationScope := &keycloak.OpenidClientAuthorizationScope{ + secondAuthorizationScope := &keycloak.OpenidClientAuthorizationScope{ RealmId: testAccRealm.Realm, Name: acctest.RandString(10), DisplayName: acctest.RandString(10), @@ -81,11 +81,11 @@ func TestAccKeycloakOpenidClientAuthorizationScope_basicUpdateAll(t *testing.T) CheckDestroy: testAccCheckKeycloakOpenidClientAuthorizationScopeDestroy(), Steps: []resource.TestStep{ { - Config: testKeycloakOpenidClientAuthorizationScope_basicFromInterface(clientId, firstAuthrorizationScope), + Config: testKeycloakOpenidClientAuthorizationScope_basicFromInterface(clientId, firstAuthorizationScope), Check: testAccCheckKeycloakOpenidClientAuthorizationScopeExists("keycloak_openid_client_authorization_scope.test"), }, { - Config: testKeycloakOpenidClientAuthorizationScope_basicFromInterface(clientId, secondAuthrorizationScope), + Config: testKeycloakOpenidClientAuthorizationScope_basicFromInterface(clientId, secondAuthorizationScope), Check: testAccCheckKeycloakOpenidClientAuthorizationScopeExists("keycloak_openid_client_authorization_scope.test"), }, }, @@ -129,7 +129,7 @@ func testAccCheckKeycloakOpenidClientAuthorizationScopeDestroy() resource.TestCh resourceServerId := rs.Primary.Attributes["resource_server_id"] id := rs.Primary.ID - authorizationScope, _ := keycloakClient.GetOpenidClientAuthorizationScope(realm, resourceServerId, id) + authorizationScope, _ := keycloakClient.GetOpenidClientAuthorizationScope(testCtx, realm, resourceServerId, id) if authorizationScope != nil { return fmt.Errorf("test config with id %s still exists", id) } @@ -149,7 +149,7 @@ func getKeycloakOpenidClientAuthorizationScopeFromState(s *terraform.State, scop resourceServerId := rs.Primary.Attributes["resource_server_id"] id := rs.Primary.ID - authorizationScope, err := keycloakClient.GetOpenidClientAuthorizationScope(realm, resourceServerId, id) + authorizationScope, err := keycloakClient.GetOpenidClientAuthorizationScope(testCtx, realm, resourceServerId, id) if err != nil { return nil, fmt.Errorf("error getting authorization scope config with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_openid_client_authorization_time_policy.go b/provider/resource_keycloak_openid_client_authorization_time_policy.go index 023a86d23..51e69e174 100644 --- a/provider/resource_keycloak_openid_client_authorization_time_policy.go +++ b/provider/resource_keycloak_openid_client_authorization_time_policy.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,12 +10,12 @@ import ( func resourceKeycloakOpenidClientAuthorizationTimePolicy() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientAuthorizationTimePolicyCreate, - Read: resourceKeycloakOpenidClientAuthorizationTimePolicyRead, - Delete: resourceKeycloakOpenidClientAuthorizationTimePolicyDelete, - Update: resourceKeycloakOpenidClientAuthorizationTimePolicyUpdate, + CreateContext: resourceKeycloakOpenidClientAuthorizationTimePolicyCreate, + ReadContext: resourceKeycloakOpenidClientAuthorizationTimePolicyRead, + DeleteContext: resourceKeycloakOpenidClientAuthorizationTimePolicyDelete, + UpdateContext: resourceKeycloakOpenidClientAuthorizationTimePolicyUpdate, Importer: &schema.ResourceImporter{ - State: genericResourcePolicyImport, + StateContext: genericResourcePolicyImport, }, Schema: map[string]*schema.Schema{ "resource_server_id": { @@ -143,31 +145,31 @@ func setOpenidClientAuthorizationTimePolicyResourceData(data *schema.ResourceDat data.Set("minute_end", policy.MinuteEnd) } -func resourceKeycloakOpenidClientAuthorizationTimePolicyCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationTimePolicyCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationTimePolicyResourceFromData(data) - err := keycloakClient.NewOpenidClientAuthorizationTimePolicy(resource) + err := keycloakClient.NewOpenidClientAuthorizationTimePolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationTimePolicyResourceData(data, resource) - return resourceKeycloakOpenidClientAuthorizationTimePolicyRead(data, meta) + return resourceKeycloakOpenidClientAuthorizationTimePolicyRead(ctx, data, meta) } -func resourceKeycloakOpenidClientAuthorizationTimePolicyRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationTimePolicyRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - resource, err := keycloakClient.GetOpenidClientAuthorizationTimePolicy(realmId, resourceServerId, id) + resource, err := keycloakClient.GetOpenidClientAuthorizationTimePolicy(ctx, realmId, resourceServerId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setOpenidClientAuthorizationTimePolicyResourceData(data, resource) @@ -175,14 +177,14 @@ func resourceKeycloakOpenidClientAuthorizationTimePolicyRead(data *schema.Resour return nil } -func resourceKeycloakOpenidClientAuthorizationTimePolicyUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationTimePolicyUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationTimePolicyResourceFromData(data) - err := keycloakClient.UpdateOpenidClientAuthorizationTimePolicy(resource) + err := keycloakClient.UpdateOpenidClientAuthorizationTimePolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationTimePolicyResourceData(data, resource) @@ -190,12 +192,12 @@ func resourceKeycloakOpenidClientAuthorizationTimePolicyUpdate(data *schema.Reso return nil } -func resourceKeycloakOpenidClientAuthorizationTimePolicyDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationTimePolicyDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - return keycloakClient.DeleteOpenidClientAuthorizationTimePolicy(realmId, resourceServerId, id) + return diag.FromErr(keycloakClient.DeleteOpenidClientAuthorizationTimePolicy(ctx, realmId, resourceServerId, id)) } diff --git a/provider/resource_keycloak_openid_client_authorization_time_policy_test.go b/provider/resource_keycloak_openid_client_authorization_time_policy_test.go index e30f2fb5d..e63648359 100644 --- a/provider/resource_keycloak_openid_client_authorization_time_policy_test.go +++ b/provider/resource_keycloak_openid_client_authorization_time_policy_test.go @@ -38,7 +38,7 @@ func getResourceKeycloakOpenidClientAuthorizationTimePolicyFromState(s *terrafor resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, err := keycloakClient.GetOpenidClientAuthorizationTimePolicy(realm, resourceServerId, policyId) + policy, err := keycloakClient.GetOpenidClientAuthorizationTimePolicy(testCtx, realm, resourceServerId, policyId) if err != nil { return nil, fmt.Errorf("error getting openid client auth role policy config with alias %s: %s", resourceServerId, err) } @@ -57,7 +57,7 @@ func testResourceKeycloakOpenidClientAuthorizationTimePolicyDestroy() resource.T resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, _ := keycloakClient.GetOpenidClientAuthorizationTimePolicy(realm, resourceServerId, policyId) + policy, _ := keycloakClient.GetOpenidClientAuthorizationTimePolicy(testCtx, realm, resourceServerId, policyId) if policy != nil { return fmt.Errorf("policy config with id %s still exists", policyId) } diff --git a/provider/resource_keycloak_openid_client_authorization_user_policy.go b/provider/resource_keycloak_openid_client_authorization_user_policy.go index 4ac85fad6..64cc0b129 100644 --- a/provider/resource_keycloak_openid_client_authorization_user_policy.go +++ b/provider/resource_keycloak_openid_client_authorization_user_policy.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,12 +10,12 @@ import ( func resourceKeycloakOpenidClientAuthorizationUserPolicy() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientAuthorizationUserPolicyCreate, - Read: resourceKeycloakOpenidClientAuthorizationUserPolicyRead, - Delete: resourceKeycloakOpenidClientAuthorizationUserPolicyDelete, - Update: resourceKeycloakOpenidClientAuthorizationUserPolicyUpdate, + CreateContext: resourceKeycloakOpenidClientAuthorizationUserPolicyCreate, + ReadContext: resourceKeycloakOpenidClientAuthorizationUserPolicyRead, + DeleteContext: resourceKeycloakOpenidClientAuthorizationUserPolicyDelete, + UpdateContext: resourceKeycloakOpenidClientAuthorizationUserPolicyUpdate, Importer: &schema.ResourceImporter{ - State: genericResourcePolicyImport, + StateContext: genericResourcePolicyImport, }, Schema: map[string]*schema.Schema{ "resource_server_id": { @@ -84,31 +86,31 @@ func setOpenidClientAuthorizationUserPolicyResourceData(data *schema.ResourceDat data.Set("users", policy.Users) } -func resourceKeycloakOpenidClientAuthorizationUserPolicyCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationUserPolicyCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationUserPolicyResourceFromData(data) - err := keycloakClient.NewOpenidClientAuthorizationUserPolicy(resource) + err := keycloakClient.NewOpenidClientAuthorizationUserPolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationUserPolicyResourceData(data, resource) - return resourceKeycloakOpenidClientAuthorizationUserPolicyRead(data, meta) + return resourceKeycloakOpenidClientAuthorizationUserPolicyRead(ctx, data, meta) } -func resourceKeycloakOpenidClientAuthorizationUserPolicyRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationUserPolicyRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - resource, err := keycloakClient.GetOpenidClientAuthorizationUserPolicy(realmId, resourceServerId, id) + resource, err := keycloakClient.GetOpenidClientAuthorizationUserPolicy(ctx, realmId, resourceServerId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setOpenidClientAuthorizationUserPolicyResourceData(data, resource) @@ -116,14 +118,14 @@ func resourceKeycloakOpenidClientAuthorizationUserPolicyRead(data *schema.Resour return nil } -func resourceKeycloakOpenidClientAuthorizationUserPolicyUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationUserPolicyUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) resource := getOpenidClientAuthorizationUserPolicyResourceFromData(data) - err := keycloakClient.UpdateOpenidClientAuthorizationUserPolicy(resource) + err := keycloakClient.UpdateOpenidClientAuthorizationUserPolicy(ctx, resource) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientAuthorizationUserPolicyResourceData(data, resource) @@ -131,12 +133,12 @@ func resourceKeycloakOpenidClientAuthorizationUserPolicyUpdate(data *schema.Reso return nil } -func resourceKeycloakOpenidClientAuthorizationUserPolicyDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientAuthorizationUserPolicyDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) resourceServerId := data.Get("resource_server_id").(string) id := data.Id() - return keycloakClient.DeleteOpenidClientAuthorizationUserPolicy(realmId, resourceServerId, id) + return diag.FromErr(keycloakClient.DeleteOpenidClientAuthorizationUserPolicy(ctx, realmId, resourceServerId, id)) } diff --git a/provider/resource_keycloak_openid_client_authorization_user_policy_test.go b/provider/resource_keycloak_openid_client_authorization_user_policy_test.go index 8394c83bf..6c7be7bd6 100644 --- a/provider/resource_keycloak_openid_client_authorization_user_policy_test.go +++ b/provider/resource_keycloak_openid_client_authorization_user_policy_test.go @@ -39,7 +39,7 @@ func getResourceKeycloakOpenidClientAuthorizationUserPolicyFromState(s *terrafor resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, err := keycloakClient.GetOpenidClientAuthorizationUserPolicy(realm, resourceServerId, policyId) + policy, err := keycloakClient.GetOpenidClientAuthorizationUserPolicy(testCtx, realm, resourceServerId, policyId) if err != nil { return nil, fmt.Errorf("error getting openid client auth role policy config with alias %s: %s", resourceServerId, err) } @@ -58,7 +58,7 @@ func testResourceKeycloakOpenidClientAuthorizationUserPolicyDestroy() resource.T resourceServerId := rs.Primary.Attributes["resource_server_id"] policyId := rs.Primary.ID - policy, _ := keycloakClient.GetOpenidClientAuthorizationUserPolicy(realm, resourceServerId, policyId) + policy, _ := keycloakClient.GetOpenidClientAuthorizationUserPolicy(testCtx, realm, resourceServerId, policyId) if policy != nil { return fmt.Errorf("policy config with id %s still exists", policyId) } diff --git a/provider/resource_keycloak_openid_client_default_scopes.go b/provider/resource_keycloak_openid_client_default_scopes.go index 97fba61ea..d2e73d4ba 100644 --- a/provider/resource_keycloak_openid_client_default_scopes.go +++ b/provider/resource_keycloak_openid_client_default_scopes.go @@ -1,17 +1,19 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakOpenidClientDefaultScopes() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientDefaultScopesReconcile, - Read: resourceKeycloakOpenidClientDefaultScopesRead, - Delete: resourceKeycloakOpenidClientDefaultScopesDelete, - Update: resourceKeycloakOpenidClientDefaultScopesReconcile, + CreateContext: resourceKeycloakOpenidClientDefaultScopesReconcile, + ReadContext: resourceKeycloakOpenidClientDefaultScopesRead, + DeleteContext: resourceKeycloakOpenidClientDefaultScopesDelete, + UpdateContext: resourceKeycloakOpenidClientDefaultScopesReconcile, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -37,15 +39,15 @@ func openidClientDefaultScopesId(realmId string, clientId string) string { return fmt.Sprintf("%s/%s", realmId, clientId) } -func resourceKeycloakOpenidClientDefaultScopesRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientDefaultScopesRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) - clientScopes, err := keycloakClient.GetOpenidClientDefaultScopes(realmId, clientId) + clientScopes, err := keycloakClient.GetOpenidClientDefaultScopes(ctx, realmId, clientId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } var defaultScopes []string @@ -59,16 +61,16 @@ func resourceKeycloakOpenidClientDefaultScopesRead(data *schema.ResourceData, me return nil } -func resourceKeycloakOpenidClientDefaultScopesReconcile(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientDefaultScopesReconcile(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) tfOpenidClientDefaultScopes := data.Get("default_scopes").(*schema.Set) - keycloakOpenidClientDefaultScopes, err := keycloakClient.GetOpenidClientDefaultScopes(realmId, clientId) + keycloakOpenidClientDefaultScopes, err := keycloakClient.GetOpenidClientDefaultScopes(ctx, realmId, clientId) if err != nil { - return err + return diag.FromErr(err) } var openidClientDefaultScopesToDetach []string @@ -84,28 +86,28 @@ func resourceKeycloakOpenidClientDefaultScopesReconcile(data *schema.ResourceDat } // detach scopes that aren't in tf state - err = keycloakClient.DetachOpenidClientDefaultScopes(realmId, clientId, openidClientDefaultScopesToDetach) + err = keycloakClient.DetachOpenidClientDefaultScopes(ctx, realmId, clientId, openidClientDefaultScopesToDetach) if err != nil { - return err + return diag.FromErr(err) } // attach scopes that exist in tf state but not in keycloak - err = keycloakClient.AttachOpenidClientDefaultScopes(realmId, clientId, interfaceSliceToStringSlice(tfOpenidClientDefaultScopes.List())) + err = keycloakClient.AttachOpenidClientDefaultScopes(ctx, realmId, clientId, interfaceSliceToStringSlice(tfOpenidClientDefaultScopes.List())) if err != nil { - return err + return diag.FromErr(err) } data.SetId(openidClientDefaultScopesId(realmId, clientId)) - return resourceKeycloakOpenidClientDefaultScopesRead(data, meta) + return resourceKeycloakOpenidClientDefaultScopesRead(ctx, data, meta) } -func resourceKeycloakOpenidClientDefaultScopesDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientDefaultScopesDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) defaultScopes := data.Get("default_scopes").(*schema.Set) - return keycloakClient.DetachOpenidClientDefaultScopes(realmId, clientId, interfaceSliceToStringSlice(defaultScopes.List())) + return diag.FromErr(keycloakClient.DetachOpenidClientDefaultScopes(ctx, realmId, clientId, interfaceSliceToStringSlice(defaultScopes.List()))) } diff --git a/provider/resource_keycloak_openid_client_default_scopes_test.go b/provider/resource_keycloak_openid_client_default_scopes_test.go index 23263ea64..c7b121e21 100644 --- a/provider/resource_keycloak_openid_client_default_scopes_test.go +++ b/provider/resource_keycloak_openid_client_default_scopes_test.go @@ -155,13 +155,13 @@ func TestAccKeycloakOpenidClientDefaultScopes_authoritativeAdd(t *testing.T) { }, { PreConfig: func() { - client, err := keycloakClient.GetOpenidClientByClientId(testAccRealm.Realm, client) + client, err := keycloakClient.GetOpenidClientByClientId(testCtx, testAccRealm.Realm, client) if err != nil { t.Fatal(err) } clientToManuallyDetach := clientScopes[acctest.RandIntRange(0, len(clientScopes)-1)] - err = keycloakClient.DetachOpenidClientDefaultScopes(testAccRealm.Realm, client.Id, []string{clientToManuallyDetach}) + err = keycloakClient.DetachOpenidClientDefaultScopes(testCtx, testAccRealm.Realm, client.Id, []string{clientToManuallyDetach}) if err != nil { t.Fatal(err) } @@ -203,12 +203,12 @@ func TestAccKeycloakOpenidClientDefaultScopes_authoritativeRemove(t *testing.T) }, { PreConfig: func() { - client, err := keycloakClient.GetOpenidClientByClientId(testAccRealm.Realm, client) + client, err := keycloakClient.GetOpenidClientByClientId(testCtx, testAccRealm.Realm, client) if err != nil { t.Fatal(err) } - err = keycloakClient.AttachOpenidClientDefaultScopes(testAccRealm.Realm, client.Id, []string{clientToManuallyAttach}) + err = keycloakClient.AttachOpenidClientDefaultScopes(testCtx, testAccRealm.Realm, client.Id, []string{clientToManuallyAttach}) if err != nil { t.Fatal(err) } @@ -241,12 +241,12 @@ func TestAccKeycloakOpenidClientDefaultScopes_noImportNeeded(t *testing.T) { }, { PreConfig: func() { - openidClient, err := keycloakClient.GetOpenidClientByClientId(testAccRealm.Realm, client) + openidClient, err := keycloakClient.GetOpenidClientByClientId(testCtx, testAccRealm.Realm, client) if err != nil { t.Fatal(err) } - err = keycloakClient.AttachOpenidClientDefaultScopes(testAccRealm.Realm, openidClient.Id, clientScopes) + err = keycloakClient.AttachOpenidClientDefaultScopes(testCtx, testAccRealm.Realm, openidClient.Id, clientScopes) if err != nil { t.Fatal(err) } @@ -299,7 +299,7 @@ func getDefaultClientScopesFromState(resourceName string, s *terraform.State) ([ client = rs.Primary.ID } - keycloakDefaultClientScopes, err := keycloakClient.GetOpenidClientDefaultScopes(realm, client) + keycloakDefaultClientScopes, err := keycloakClient.GetOpenidClientDefaultScopes(testCtx, realm, client) if err != nil { return nil, err } diff --git a/provider/resource_keycloak_openid_client_optional_scopes.go b/provider/resource_keycloak_openid_client_optional_scopes.go index 13ddd0807..85dfa7a59 100644 --- a/provider/resource_keycloak_openid_client_optional_scopes.go +++ b/provider/resource_keycloak_openid_client_optional_scopes.go @@ -1,17 +1,19 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakOpenidClientOptionalScopes() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientOptionalScopesReconcile, - Read: resourceKeycloakOpenidClientOptionalScopesRead, - Delete: resourceKeycloakOpenidClientOptionalScopesDelete, - Update: resourceKeycloakOpenidClientOptionalScopesReconcile, + CreateContext: resourceKeycloakOpenidClientOptionalScopesReconcile, + ReadContext: resourceKeycloakOpenidClientOptionalScopesRead, + DeleteContext: resourceKeycloakOpenidClientOptionalScopesDelete, + UpdateContext: resourceKeycloakOpenidClientOptionalScopesReconcile, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -37,15 +39,15 @@ func openidClientOptionalScopesId(realmId string, clientId string) string { return fmt.Sprintf("%s/%s", realmId, clientId) } -func resourceKeycloakOpenidClientOptionalScopesRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientOptionalScopesRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) - clientScopes, err := keycloakClient.GetOpenidClientOptionalScopes(realmId, clientId) + clientScopes, err := keycloakClient.GetOpenidClientOptionalScopes(ctx, realmId, clientId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } var optionalScopes []string @@ -59,16 +61,16 @@ func resourceKeycloakOpenidClientOptionalScopesRead(data *schema.ResourceData, m return nil } -func resourceKeycloakOpenidClientOptionalScopesReconcile(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientOptionalScopesReconcile(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) tfOpenidClientOptionalScopes := data.Get("optional_scopes").(*schema.Set) - keycloakOpenidClientOptionalScopes, err := keycloakClient.GetOpenidClientOptionalScopes(realmId, clientId) + keycloakOpenidClientOptionalScopes, err := keycloakClient.GetOpenidClientOptionalScopes(ctx, realmId, clientId) if err != nil { - return err + return diag.FromErr(err) } var openidClientOptionalScopesToDetach []string @@ -84,28 +86,28 @@ func resourceKeycloakOpenidClientOptionalScopesReconcile(data *schema.ResourceDa } // detach scopes that aren't in tf state - err = keycloakClient.DetachOpenidClientOptionalScopes(realmId, clientId, openidClientOptionalScopesToDetach) + err = keycloakClient.DetachOpenidClientOptionalScopes(ctx, realmId, clientId, openidClientOptionalScopesToDetach) if err != nil { - return err + return diag.FromErr(err) } // attach scopes that exist in tf state but not in keycloak - err = keycloakClient.AttachOpenidClientOptionalScopes(realmId, clientId, interfaceSliceToStringSlice(tfOpenidClientOptionalScopes.List())) + err = keycloakClient.AttachOpenidClientOptionalScopes(ctx, realmId, clientId, interfaceSliceToStringSlice(tfOpenidClientOptionalScopes.List())) if err != nil { - return err + return diag.FromErr(err) } data.SetId(openidClientOptionalScopesId(realmId, clientId)) - return resourceKeycloakOpenidClientOptionalScopesRead(data, meta) + return resourceKeycloakOpenidClientOptionalScopesRead(ctx, data, meta) } -func resourceKeycloakOpenidClientOptionalScopesDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientOptionalScopesDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) optionalScopes := data.Get("optional_scopes").(*schema.Set) - return keycloakClient.DetachOpenidClientOptionalScopes(realmId, clientId, interfaceSliceToStringSlice(optionalScopes.List())) + return diag.FromErr(keycloakClient.DetachOpenidClientOptionalScopes(ctx, realmId, clientId, interfaceSliceToStringSlice(optionalScopes.List()))) } diff --git a/provider/resource_keycloak_openid_client_optional_scopes_test.go b/provider/resource_keycloak_openid_client_optional_scopes_test.go index 77d052336..5ed09f045 100644 --- a/provider/resource_keycloak_openid_client_optional_scopes_test.go +++ b/provider/resource_keycloak_openid_client_optional_scopes_test.go @@ -13,7 +13,7 @@ import ( // All openid clients in Keycloak will automatically have these scopes listed as "optional client scopes". func getPreAssignedOptionalClientScopes() []string { - if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_6); ok { + if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_6); ok { return []string{"address", "phone", "offline_access", "microprofile-jwt"} } else { return []string{"address", "phone", "offline_access"} @@ -161,13 +161,13 @@ func TestAccKeycloakOpenidClientOptionalScopes_authoritativeAdd(t *testing.T) { }, { PreConfig: func() { - client, err := keycloakClient.GetOpenidClientByClientId(testAccRealm.Realm, client) + client, err := keycloakClient.GetOpenidClientByClientId(testCtx, testAccRealm.Realm, client) if err != nil { t.Fatal(err) } clientToManuallyDetach := clientScopes[acctest.RandIntRange(0, len(clientScopes)-1)] - err = keycloakClient.DetachOpenidClientOptionalScopes(testAccRealm.Realm, client.Id, []string{clientToManuallyDetach}) + err = keycloakClient.DetachOpenidClientOptionalScopes(testCtx, testAccRealm.Realm, client.Id, []string{clientToManuallyDetach}) if err != nil { t.Fatal(err) } @@ -209,12 +209,12 @@ func TestAccKeycloakOpenidClientOptionalScopes_authoritativeRemove(t *testing.T) }, { PreConfig: func() { - client, err := keycloakClient.GetOpenidClientByClientId(testAccRealm.Realm, client) + client, err := keycloakClient.GetOpenidClientByClientId(testCtx, testAccRealm.Realm, client) if err != nil { t.Fatal(err) } - err = keycloakClient.AttachOpenidClientOptionalScopes(testAccRealm.Realm, client.Id, []string{clientToManuallyAttach}) + err = keycloakClient.AttachOpenidClientOptionalScopes(testCtx, testAccRealm.Realm, client.Id, []string{clientToManuallyAttach}) if err != nil { t.Fatal(err) } @@ -247,12 +247,12 @@ func TestAccKeycloakOpenidClientOptionalScopes_noImportNeeded(t *testing.T) { }, { PreConfig: func() { - openidClient, err := keycloakClient.GetOpenidClientByClientId(testAccRealm.Realm, client) + openidClient, err := keycloakClient.GetOpenidClientByClientId(testCtx, testAccRealm.Realm, client) if err != nil { t.Fatal(err) } - err = keycloakClient.AttachOpenidClientOptionalScopes(testAccRealm.Realm, openidClient.Id, clientScopes) + err = keycloakClient.AttachOpenidClientOptionalScopes(testCtx, testAccRealm.Realm, openidClient.Id, clientScopes) if err != nil { t.Fatal(err) } @@ -305,7 +305,7 @@ func getOptionalClientScopesFromState(resourceName string, s *terraform.State) ( client = rs.Primary.ID } - keycloakOptionalClientScopes, err := keycloakClient.GetOpenidClientOptionalScopes(realm, client) + keycloakOptionalClientScopes, err := keycloakClient.GetOpenidClientOptionalScopes(testCtx, realm, client) if err != nil { return nil, err } @@ -373,7 +373,7 @@ func testAccCheckKeycloakOpenidClientOptionalScopeIsNotAttached(resourceName, cl } func testKeycloakOpenidClientOptionalScopes_basic(client, clientScope string) string { - if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_6); ok { + if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_6); ok { return fmt.Sprintf(` data "keycloak_realm" "realm" { realm = "%s" @@ -488,7 +488,7 @@ resource "keycloak_openid_client_optional_scopes" "optional_scopes" { } func testKeycloakOpenidClientOptionalScopes_validationNoClient(client, clientScope string) string { - if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_6); ok { + if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_6); ok { return fmt.Sprintf(` data "keycloak_realm" "realm" { realm = "%s" @@ -541,7 +541,7 @@ resource "keycloak_openid_client_optional_scopes" "optional_scopes" { } func testKeycloakOpenidClientOptionalScopes_validationBearerOnlyClient(client, clientScope string) string { - if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_6); ok { + if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_6); ok { return fmt.Sprintf(` data "keycloak_realm" "realm" { realm = "%s" @@ -649,7 +649,7 @@ resource "keycloak_openid_client_optional_scopes" "optional_scopes" { } func testKeycloakOpenidClientOptionalScopes_duplicateScopeAssignment(client, clientScope string) string { - if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_6); ok { + if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_6); ok { return fmt.Sprintf(` %s diff --git a/provider/resource_keycloak_openid_client_permissions.go b/provider/resource_keycloak_openid_client_permissions.go index cd263011c..d34832c0a 100644 --- a/provider/resource_keycloak_openid_client_permissions.go +++ b/provider/resource_keycloak_openid_client_permissions.go @@ -1,8 +1,10 @@ package provider import ( + "context" "fmt" - "log" + "github.com/hashicorp/terraform-plugin-log/tflog" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -11,13 +13,13 @@ import ( func resourceKeycloakOpenidClientPermissions() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientPermissionsCreate, - Read: resourceKeycloakOpenidClientPermissionsRead, - Delete: resourceKeycloakOpenidClientPermissionsDelete, - Update: resourceKeycloakOpenidClientPermissionsUpdate, + CreateContext: resourceKeycloakOpenidClientPermissionsReconcile, + ReadContext: resourceKeycloakOpenidClientPermissionsRead, + DeleteContext: resourceKeycloakOpenidClientPermissionsDelete, + UpdateContext: resourceKeycloakOpenidClientPermissionsReconcile, // This resource can be imported using {{realm}}/{{client_id}}. The Client ID is displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakOpenidClientPermissionsImport, + StateContext: resourceKeycloakOpenidClientPermissionsImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -54,123 +56,95 @@ func clientPermissionsId(realmId, clientId string) string { return fmt.Sprintf("%s/%s", realmId, clientId) } -// TODO: is this needed? -//func unsetOpenidClientScopePermissionPolicy(keycloakClient *keycloak.KeycloakClient, realmId, clientId, scopeName string) error { -// openidClientPermissions, err := keycloakClient.GetOpenidClientPermissions(realmId, clientId) -// if err != nil { -// return err -// } -// -// realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(realmId, "realm-management") -// if err != nil { -// return err -// } -// -// permission, err := keycloakClient.GetOpenidClientAuthorizationPermission(realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions[scopeName].(string)) -// if err != nil { -// return err -// } -// -// permission.Policies = []string{} -// err = keycloakClient.UpdateOpenidClientAuthorizationPermission(permission) -// if err != nil { -// return err -// } -// -// return nil -//} - -func resourceKeycloakOpenidClientPermissionsCreate(data *schema.ResourceData, meta interface{}) error { - return resourceKeycloakOpenidClientPermissionsUpdate(data, meta) -} - -func resourceKeycloakOpenidClientPermissionsUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientPermissionsReconcile(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) // the existence of this resource implies that permissions are enabled for this client. - err := keycloakClient.EnableOpenidClientPermissions(realmId, clientId) + err := keycloakClient.EnableOpenidClientPermissions(ctx, realmId, clientId) if err != nil { - return err + return diag.FromErr(err) } - openidClientPermissions, err := keycloakClient.GetOpenidClientPermissions(realmId, clientId) + openidClientPermissions, err := keycloakClient.GetOpenidClientPermissions(ctx, realmId, clientId) if err != nil { - return err + return diag.FromErr(err) } - realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(realmId, "realm-management") + realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(ctx, realmId, "realm-management") if err != nil { - return err + return diag.FromErr(err) } if viewScope, ok := data.GetOk("view_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["view"], viewScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["view"], viewScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if manageScope, ok := data.GetOk("manage_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["manage"], manageScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["manage"], manageScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if configureScope, ok := data.GetOk("configure_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["configure"], configureScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["configure"], configureScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if mapRolesScope, ok := data.GetOk("map_roles_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["map-roles"], mapRolesScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["map-roles"], mapRolesScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if mapRolesClientsScope, ok := data.GetOk("map_roles_client_scope_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["map-roles-client-scope"], mapRolesClientsScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["map-roles-client-scope"], mapRolesClientsScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if mapRolesCompositeScope, ok := data.GetOk("map_roles_composite_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["map-roles-composite"], mapRolesCompositeScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["map-roles-composite"], mapRolesCompositeScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if tokenExchangeScope, ok := data.GetOk("token_exchange_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["token-exchange"], tokenExchangeScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["token-exchange"], tokenExchangeScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } - return resourceKeycloakOpenidClientPermissionsRead(data, meta) + return resourceKeycloakOpenidClientPermissionsRead(ctx, data, meta) } -func resourceKeycloakOpenidClientPermissionsRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientPermissionsRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) - openidClientPermissions, err := keycloakClient.GetOpenidClientPermissions(realmId, clientId) + openidClientPermissions, err := keycloakClient.GetOpenidClientPermissions(ctx, realmId, clientId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } if !openidClientPermissions.Enabled { - log.Printf("[WARN] Removing resource with id %s from state as it no longer enabled", data.Id()) + tflog.Warn(ctx, "Removing resource from state as it is no longer enabled", map[string]interface{}{ + "id": data.Id(), + }) data.SetId("") return nil } - realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(realmId, "realm-management") + realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(ctx, realmId, "realm-management") if err != nil { - return err + return diag.FromErr(err) } data.SetId(clientPermissionsId(openidClientPermissions.RealmId, openidClientPermissions.ClientId)) @@ -179,61 +153,61 @@ func resourceKeycloakOpenidClientPermissionsRead(data *schema.ResourceData, meta data.Set("enabled", openidClientPermissions.Enabled) data.Set("authorization_resource_server_id", realmManagementClient.Id) - if viewScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["view"]); err == nil && viewScope != nil { + if viewScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["view"]); err == nil && viewScope != nil { data.Set("view_scope", []interface{}{viewScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if manageScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["manage"]); err == nil && manageScope != nil { + if manageScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["manage"]); err == nil && manageScope != nil { data.Set("manage_scope", []interface{}{manageScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if mapRolesScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["configure"]); err == nil && mapRolesScope != nil { + if mapRolesScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["configure"]); err == nil && mapRolesScope != nil { data.Set("configure_scope", []interface{}{mapRolesScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if manageGroupMembershipScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["map-roles"]); err == nil && manageGroupMembershipScope != nil { + if manageGroupMembershipScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["map-roles"]); err == nil && manageGroupMembershipScope != nil { data.Set("map_roles_scope", []interface{}{manageGroupMembershipScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if impersonateScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["map-roles-client-scope"]); err == nil && impersonateScope != nil { + if impersonateScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["map-roles-client-scope"]); err == nil && impersonateScope != nil { data.Set("map_roles_client_scope_scope", []interface{}{impersonateScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if userImpersonatedScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["map-roles-composite"]); err == nil && userImpersonatedScope != nil { + if userImpersonatedScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["map-roles-composite"]); err == nil && userImpersonatedScope != nil { data.Set("map_roles_composite_scope", []interface{}{userImpersonatedScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if tokenExchangeScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["token-exchange"]); err == nil && tokenExchangeScope != nil { + if tokenExchangeScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, openidClientPermissions.ScopePermissions["token-exchange"]); err == nil && tokenExchangeScope != nil { data.Set("token_exchange_scope", []interface{}{tokenExchangeScope}) } else if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakOpenidClientPermissionsDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientPermissionsDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) - return keycloakClient.DisableOpenidClientPermissions(realmId, clientId) + return diag.FromErr(keycloakClient.DisableOpenidClientPermissions(ctx, realmId, clientId)) } -func resourceKeycloakOpenidClientPermissionsImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakOpenidClientPermissionsImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{openidClientId}}") diff --git a/provider/resource_keycloak_openid_client_permissions_test.go b/provider/resource_keycloak_openid_client_permissions_test.go index 8c2e340aa..77de326a7 100644 --- a/provider/resource_keycloak_openid_client_permissions_test.go +++ b/provider/resource_keycloak_openid_client_permissions_test.go @@ -49,7 +49,7 @@ func testAccCheckKeycloakOpenidClientPermissionExists(resourceName string) resou viewScopeDecisionStrategy := rs.Primary.Attributes["view_scope.0.decision_strategy"] var realmManagementId string - clients, _ := keycloakClient.GetOpenidClients(permissions.RealmId, false) + clients, _ := keycloakClient.GetOpenidClients(testCtx, permissions.RealmId, false) for _, client := range clients { if client.ClientId == "realm-management" { realmManagementId = client.Id @@ -61,7 +61,7 @@ func testAccCheckKeycloakOpenidClientPermissionExists(resourceName string) resou return fmt.Errorf("computed authorizationResourceServerId %s was not equal to %s (the id of the realm-management client)", authorizationResourceServerId, realmManagementId) } - authzClientView, err := keycloakClient.GetOpenidClientAuthorizationPermission(permissions.RealmId, realmManagementId, permissions.ScopePermissions["view"]) + authzClientView, err := keycloakClient.GetOpenidClientAuthorizationPermission(testCtx, permissions.RealmId, realmManagementId, permissions.ScopePermissions["view"]) if err != nil { return err } @@ -82,12 +82,12 @@ func testAccCheckKeycloakOpenidClientPermissionExists(resourceName string) resou func testAccCheckKeycloakOpenidClientPermissionsAreDisabled(clientId string) resource.TestCheckFunc { return func(s *terraform.State) error { - client, err := keycloakClient.GetOpenidClientByClientId(testAccRealm.Realm, clientId) + client, err := keycloakClient.GetOpenidClientByClientId(testCtx, testAccRealm.Realm, clientId) if err != nil { return err } - permissions, err := keycloakClient.GetOpenidClientPermissions(testAccRealm.Realm, client.Id) + permissions, err := keycloakClient.GetOpenidClientPermissions(testCtx, testAccRealm.Realm, client.Id) if err != nil { return fmt.Errorf("error getting openid_client permissions with realm id %s and client id %s: %s", testAccRealm.Realm, clientId, err) } @@ -109,7 +109,7 @@ func getOpenidClientPermissionsFromState(s *terraform.State, resourceName string realmId := rs.Primary.Attributes["realm_id"] clientId := rs.Primary.Attributes["client_id"] - permissions, err := keycloakClient.GetOpenidClientPermissions(testAccRealm.Realm, clientId) + permissions, err := keycloakClient.GetOpenidClientPermissions(testCtx, testAccRealm.Realm, clientId) if err != nil { return nil, fmt.Errorf("error getting openid_client permissions with realm id %s and client id %s: %s", realmId, clientId, err) } diff --git a/provider/resource_keycloak_openid_client_scope.go b/provider/resource_keycloak_openid_client_scope.go index b44d48575..82a47040c 100644 --- a/provider/resource_keycloak_openid_client_scope.go +++ b/provider/resource_keycloak_openid_client_scope.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strconv" "strings" @@ -11,13 +13,13 @@ import ( func resourceKeycloakOpenidClientScope() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientScopeCreate, - Read: resourceKeycloakOpenidClientScopeRead, - Delete: resourceKeycloakOpenidClientScopeDelete, - Update: resourceKeycloakOpenidClientScopeUpdate, + CreateContext: resourceKeycloakOpenidClientScopeCreate, + ReadContext: resourceKeycloakOpenidClientScopeRead, + DeleteContext: resourceKeycloakOpenidClientScopeDelete, + UpdateContext: resourceKeycloakOpenidClientScopeUpdate, // This resource can be imported using {{realm}}/{{client_scope_id}}. The Client Scope ID is displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakOpenidClientScopeImport, + StateContext: resourceKeycloakOpenidClientScopeImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -92,30 +94,30 @@ func setClientScopeData(data *schema.ResourceData, clientScope *keycloak.OpenidC } } -func resourceKeycloakOpenidClientScopeCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientScopeCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) clientScope := getClientScopeFromData(data) - err := keycloakClient.NewOpenidClientScope(clientScope) + err := keycloakClient.NewOpenidClientScope(ctx, clientScope) if err != nil { - return err + return diag.FromErr(err) } setClientScopeData(data, clientScope) - return resourceKeycloakOpenidClientScopeRead(data, meta) + return resourceKeycloakOpenidClientScopeRead(ctx, data, meta) } -func resourceKeycloakOpenidClientScopeRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientScopeRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - clientScope, err := keycloakClient.GetOpenidClientScope(realmId, id) + clientScope, err := keycloakClient.GetOpenidClientScope(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setClientScopeData(data, clientScope) @@ -123,14 +125,14 @@ func resourceKeycloakOpenidClientScopeRead(data *schema.ResourceData, meta inter return nil } -func resourceKeycloakOpenidClientScopeUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientScopeUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) clientScope := getClientScopeFromData(data) - err := keycloakClient.UpdateOpenidClientScope(clientScope) + err := keycloakClient.UpdateOpenidClientScope(ctx, clientScope) if err != nil { - return err + return diag.FromErr(err) } setClientScopeData(data, clientScope) @@ -138,16 +140,16 @@ func resourceKeycloakOpenidClientScopeUpdate(data *schema.ResourceData, meta int return nil } -func resourceKeycloakOpenidClientScopeDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientScopeDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteOpenidClientScope(realmId, id) + return diag.FromErr(keycloakClient.DeleteOpenidClientScope(ctx, realmId, id)) } -func resourceKeycloakOpenidClientScopeImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakOpenidClientScopeImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{openidClientScopeId}}") diff --git a/provider/resource_keycloak_openid_client_scope_test.go b/provider/resource_keycloak_openid_client_scope_test.go index 331d63bb0..0e5b70b45 100644 --- a/provider/resource_keycloak_openid_client_scope_test.go +++ b/provider/resource_keycloak_openid_client_scope_test.go @@ -54,7 +54,7 @@ func TestAccKeycloakClientScope_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteOpenidClientScope(clientScope.RealmId, clientScope.Id) + err := keycloakClient.DeleteOpenidClientScope(testCtx, clientScope.RealmId, clientScope.Id) if err != nil { t.Fatal(err) } @@ -260,7 +260,7 @@ func testAccCheckKeycloakClientScopeDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - clientScope, _ := keycloakClient.GetOpenidClientScope(realm, id) + clientScope, _ := keycloakClient.GetOpenidClientScope(testCtx, realm, id) if clientScope != nil { return fmt.Errorf("openid client scope %s still exists", id) } @@ -281,7 +281,7 @@ func getClientScopeFromState(s *terraform.State, resourceName string) (*keycloak id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - clientScope, err := keycloakClientScope.GetOpenidClientScope(realm, id) + clientScope, err := keycloakClientScope.GetOpenidClientScope(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting openid client scope %s: %s", id, err) } diff --git a/provider/resource_keycloak_openid_client_service_account_realm_role.go b/provider/resource_keycloak_openid_client_service_account_realm_role.go index 7f8a16e7a..d19ca8a88 100644 --- a/provider/resource_keycloak_openid_client_service_account_realm_role.go +++ b/provider/resource_keycloak_openid_client_service_account_realm_role.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" "strings" @@ -9,11 +11,11 @@ import ( func resourceKeycloakOpenidClientServiceAccountRealmRole() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientServiceAccountRealmRoleCreate, - Read: resourceKeycloakOpenidClientServiceAccountRealmRoleRead, - Delete: resourceKeycloakOpenidClientServiceAccountRealmRoleDelete, + CreateContext: resourceKeycloakOpenidClientServiceAccountRealmRoleCreate, + ReadContext: resourceKeycloakOpenidClientServiceAccountRealmRoleRead, + DeleteContext: resourceKeycloakOpenidClientServiceAccountRealmRoleDelete, Importer: &schema.ResourceImporter{ - State: resourceKeycloakOpenidClientServiceAccountRealmRoleImport, + StateContext: resourceKeycloakOpenidClientServiceAccountRealmRoleImport, }, Schema: map[string]*schema.Schema{ "service_account_user_id": { @@ -35,12 +37,12 @@ func resourceKeycloakOpenidClientServiceAccountRealmRole() *schema.Resource { } } -func getOpenidClientServiceAccountRealmRoleFromData(data *schema.ResourceData, keycloakClient *keycloak.KeycloakClient) (*keycloak.OpenidClientServiceAccountRealmRole, error) { +func getOpenidClientServiceAccountRealmRoleFromData(ctx context.Context, data *schema.ResourceData, keycloakClient *keycloak.KeycloakClient) (*keycloak.OpenidClientServiceAccountRealmRole, error) { roleName := data.Get("role").(string) realmId := data.Get("realm_id").(string) serviceAccountRoleId := data.Get("service_account_user_id").(string) - role, err := keycloakClient.GetRoleByName(realmId, "", roleName) + role, err := keycloakClient.GetRoleByName(ctx, realmId, "", roleName) if err != nil { if keycloak.ErrorIs404(err) { role = &keycloak.Role{Id: ""} @@ -64,32 +66,32 @@ func setOpenidClientServiceAccountRealmRoleData(data *schema.ResourceData, servi data.Set("role", serviceAccountRole.Name) } -func resourceKeycloakOpenidClientServiceAccountRealmRoleCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientServiceAccountRealmRoleCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - serviceAccountRole, err := getOpenidClientServiceAccountRealmRoleFromData(data, keycloakClient) + serviceAccountRole, err := getOpenidClientServiceAccountRealmRoleFromData(ctx, data, keycloakClient) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenidClientServiceAccountRealmRole(serviceAccountRole) + err = keycloakClient.NewOpenidClientServiceAccountRealmRole(ctx, serviceAccountRole) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientServiceAccountRealmRoleData(data, serviceAccountRole) - return resourceKeycloakOpenidClientServiceAccountRealmRoleRead(data, meta) + return resourceKeycloakOpenidClientServiceAccountRealmRoleRead(ctx, data, meta) } -func resourceKeycloakOpenidClientServiceAccountRealmRoleRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientServiceAccountRealmRoleRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - serviceAccountRole, err := getOpenidClientServiceAccountRealmRoleFromData(data, keycloakClient) + serviceAccountRole, err := getOpenidClientServiceAccountRealmRoleFromData(ctx, data, keycloakClient) if err != nil { - return err + return diag.FromErr(err) } - serviceAccountRole, err = keycloakClient.GetOpenidClientServiceAccountRealmRole(serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.Id) + serviceAccountRole, err = keycloakClient.GetOpenidClientServiceAccountRealmRole(ctx, serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.Id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setOpenidClientServiceAccountRealmRoleData(data, serviceAccountRole) @@ -97,22 +99,22 @@ func resourceKeycloakOpenidClientServiceAccountRealmRoleRead(data *schema.Resour return nil } -func resourceKeycloakOpenidClientServiceAccountRealmRoleDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientServiceAccountRealmRoleDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - serviceAccountRole, err := getOpenidClientServiceAccountRealmRoleFromData(data, keycloakClient) + serviceAccountRole, err := getOpenidClientServiceAccountRealmRoleFromData(ctx, data, keycloakClient) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.DeleteOpenidClientServiceAccountRealmRole(serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.Id) + err = keycloakClient.DeleteOpenidClientServiceAccountRealmRole(ctx, serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.Id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } return nil } -func resourceKeycloakOpenidClientServiceAccountRealmRoleImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakOpenidClientServiceAccountRealmRoleImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { keycloakClient := meta.(*keycloak.KeycloakClient) parts := strings.Split(d.Id(), "/") @@ -124,7 +126,7 @@ func resourceKeycloakOpenidClientServiceAccountRealmRoleImport(d *schema.Resourc serviceAccountUserId := parts[1] roleId := parts[2] - role, err := keycloakClient.GetRole(realmId, roleId) + role, err := keycloakClient.GetRole(ctx, realmId, roleId) if err != nil { return nil, err } diff --git a/provider/resource_keycloak_openid_client_service_account_realm_role_test.go b/provider/resource_keycloak_openid_client_service_account_realm_role_test.go index 5d1fbd113..6d2f73d3a 100644 --- a/provider/resource_keycloak_openid_client_service_account_realm_role_test.go +++ b/provider/resource_keycloak_openid_client_service_account_realm_role_test.go @@ -51,7 +51,7 @@ func TestAccKeycloakOpenidClientServiceAccountRealmRole_createAfterManualDestroy }, { PreConfig: func() { - err := keycloakClient.DeleteOpenidClientServiceAccountRealmRole(serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.Id) + err := keycloakClient.DeleteOpenidClientServiceAccountRealmRole(testCtx, serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.Id) if err != nil { t.Fatal(err) } @@ -100,7 +100,7 @@ func testAccCheckKeycloakOpenidClientServiceAccountRealmRoleDestroy() resource.T serviceAccountUserId := rs.Primary.Attributes["service_account_user_id"] id := strings.Split(rs.Primary.ID, "/")[1] - serviceAccountRole, _ := keycloakClient.GetOpenidClientServiceAccountRealmRole(realm, serviceAccountUserId, id) + serviceAccountRole, _ := keycloakClient.GetOpenidClientServiceAccountRealmRole(testCtx, realm, serviceAccountUserId, id) if serviceAccountRole != nil { return fmt.Errorf("service account role exists") } @@ -120,7 +120,7 @@ func getKeycloakOpenidClientServiceAccountRealmRoleFromState(s *terraform.State, serviceAccountUserId := rs.Primary.Attributes["service_account_user_id"] id := strings.Split(rs.Primary.ID, "/")[1] - serviceAccountRole, err := keycloakClient.GetOpenidClientServiceAccountRealmRole(realm, serviceAccountUserId, id) + serviceAccountRole, err := keycloakClient.GetOpenidClientServiceAccountRealmRole(testCtx, realm, serviceAccountUserId, id) if err != nil { return nil, fmt.Errorf("error getting service account role mapping: %s", err) } diff --git a/provider/resource_keycloak_openid_client_service_account_role.go b/provider/resource_keycloak_openid_client_service_account_role.go index 56477b6ec..36ef9df76 100644 --- a/provider/resource_keycloak_openid_client_service_account_role.go +++ b/provider/resource_keycloak_openid_client_service_account_role.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" "strings" @@ -9,11 +11,11 @@ import ( func resourceKeycloakOpenidClientServiceAccountRole() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenidClientServiceAccountRoleCreate, - Read: resourceKeycloakOpenidClientServiceAccountRoleRead, - Delete: resourceKeycloakOpenidClientServiceAccountRoleDelete, + CreateContext: resourceKeycloakOpenidClientServiceAccountRoleCreate, + ReadContext: resourceKeycloakOpenidClientServiceAccountRoleRead, + DeleteContext: resourceKeycloakOpenidClientServiceAccountRoleDelete, Importer: &schema.ResourceImporter{ - State: resourceKeycloakOpenidClientServiceAccountRoleImport, + StateContext: resourceKeycloakOpenidClientServiceAccountRoleImport, }, Schema: map[string]*schema.Schema{ "service_account_user_id": { @@ -40,13 +42,13 @@ func resourceKeycloakOpenidClientServiceAccountRole() *schema.Resource { } } -func getOpenidClientServiceAccountRoleFromData(data *schema.ResourceData, keycloakClient *keycloak.KeycloakClient) (*keycloak.OpenidClientServiceAccountRole, error) { +func getOpenidClientServiceAccountRoleFromData(ctx context.Context, data *schema.ResourceData, keycloakClient *keycloak.KeycloakClient) (*keycloak.OpenidClientServiceAccountRole, error) { containerId := data.Get("client_id").(string) roleName := data.Get("role").(string) realmId := data.Get("realm_id").(string) serviceAccountRoleId := data.Get("service_account_user_id").(string) - role, err := keycloakClient.GetRoleByName(realmId, containerId, roleName) + role, err := keycloakClient.GetRoleByName(ctx, realmId, containerId, roleName) if err != nil { if keycloak.ErrorIs404(err) { role = &keycloak.Role{Id: ""} @@ -72,32 +74,32 @@ func setOpenidClientServiceAccountRoleData(data *schema.ResourceData, serviceAcc data.Set("role", serviceAccountRole.Name) } -func resourceKeycloakOpenidClientServiceAccountRoleCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientServiceAccountRoleCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - serviceAccountRole, err := getOpenidClientServiceAccountRoleFromData(data, keycloakClient) + serviceAccountRole, err := getOpenidClientServiceAccountRoleFromData(ctx, data, keycloakClient) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenidClientServiceAccountRole(serviceAccountRole) + err = keycloakClient.NewOpenidClientServiceAccountRole(ctx, serviceAccountRole) if err != nil { - return err + return diag.FromErr(err) } setOpenidClientServiceAccountRoleData(data, serviceAccountRole) - return resourceKeycloakOpenidClientServiceAccountRoleRead(data, meta) + return resourceKeycloakOpenidClientServiceAccountRoleRead(ctx, data, meta) } -func resourceKeycloakOpenidClientServiceAccountRoleRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientServiceAccountRoleRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - serviceAccountRole, err := getOpenidClientServiceAccountRoleFromData(data, keycloakClient) + serviceAccountRole, err := getOpenidClientServiceAccountRoleFromData(ctx, data, keycloakClient) if err != nil { - return err + return diag.FromErr(err) } - serviceAccountRole, err = keycloakClient.GetOpenidClientServiceAccountRole(serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.ContainerId, serviceAccountRole.Id) + serviceAccountRole, err = keycloakClient.GetOpenidClientServiceAccountRole(ctx, serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.ContainerId, serviceAccountRole.Id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setOpenidClientServiceAccountRoleData(data, serviceAccountRole) @@ -105,22 +107,22 @@ func resourceKeycloakOpenidClientServiceAccountRoleRead(data *schema.ResourceDat return nil } -func resourceKeycloakOpenidClientServiceAccountRoleDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenidClientServiceAccountRoleDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - serviceAccountRole, err := getOpenidClientServiceAccountRoleFromData(data, keycloakClient) + serviceAccountRole, err := getOpenidClientServiceAccountRoleFromData(ctx, data, keycloakClient) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.DeleteOpenidClientServiceAccountRole(serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.ContainerId, serviceAccountRole.Id) + err = keycloakClient.DeleteOpenidClientServiceAccountRole(ctx, serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.ContainerId, serviceAccountRole.Id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } return nil } -func resourceKeycloakOpenidClientServiceAccountRoleImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakOpenidClientServiceAccountRoleImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { keycloakClient := meta.(*keycloak.KeycloakClient) parts := strings.Split(d.Id(), "/") @@ -134,7 +136,7 @@ func resourceKeycloakOpenidClientServiceAccountRoleImport(d *schema.ResourceData roleId := parts[3] // fetch role to get role name - role, err := keycloakClient.GetRole(realmId, roleId) + role, err := keycloakClient.GetRole(ctx, realmId, roleId) if err != nil { return nil, err } diff --git a/provider/resource_keycloak_openid_client_service_account_role_test.go b/provider/resource_keycloak_openid_client_service_account_role_test.go index 158e5a685..dccea2fb5 100644 --- a/provider/resource_keycloak_openid_client_service_account_role_test.go +++ b/provider/resource_keycloak_openid_client_service_account_role_test.go @@ -51,7 +51,7 @@ func TestAccKeycloakOpenidClientServiceAccountRole_createAfterManualDestroy(t *t }, { PreConfig: func() { - err := keycloakClient.DeleteOpenidClientServiceAccountRole(serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.ContainerId, serviceAccountRole.Id) + err := keycloakClient.DeleteOpenidClientServiceAccountRole(testCtx, serviceAccountRole.RealmId, serviceAccountRole.ServiceAccountUserId, serviceAccountRole.ContainerId, serviceAccountRole.Id) if err != nil { t.Fatal(err) } @@ -125,7 +125,7 @@ func testAccCheckKeycloakOpenidClientServiceAccountRoleDestroy() resource.TestCh clientId := rs.Primary.Attributes["client_id"] id := strings.Split(rs.Primary.ID, "/")[1] - serviceAccountRole, _ := keycloakClient.GetOpenidClientServiceAccountRole(realm, serviceAccountUserId, clientId, id) + serviceAccountRole, _ := keycloakClient.GetOpenidClientServiceAccountRole(testCtx, realm, serviceAccountUserId, clientId, id) if serviceAccountRole != nil { return fmt.Errorf("service account role exists") } @@ -146,7 +146,7 @@ func getKeycloakOpenidClientServiceAccountRoleFromState(s *terraform.State, reso clientId := rs.Primary.Attributes["client_id"] id := strings.Split(rs.Primary.ID, "/")[1] - serviceAccountRole, err := keycloakClient.GetOpenidClientServiceAccountRole(realm, serviceAccountUserId, clientId, id) + serviceAccountRole, err := keycloakClient.GetOpenidClientServiceAccountRole(testCtx, realm, serviceAccountUserId, clientId, id) if err != nil { return nil, fmt.Errorf("error getting service account role mapping: %s", err) } diff --git a/provider/resource_keycloak_openid_client_test.go b/provider/resource_keycloak_openid_client_test.go index f4d062829..06f989546 100644 --- a/provider/resource_keycloak_openid_client_test.go +++ b/provider/resource_keycloak_openid_client_test.go @@ -80,7 +80,7 @@ func TestAccKeycloakOpenidClient_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteOpenidClient(client.RealmId, client.Id) + err := keycloakClient.DeleteOpenidClient(testCtx, client.RealmId, client.Id) if err != nil { t.Fatal(err) } @@ -367,7 +367,7 @@ func TestAccKeycloakOpenidClient_ClientTimeouts_basic(t *testing.T) { } func TestAccKeycloakOpenidClient_Device_basic(t *testing.T) { - if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_13); !ok { + if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_13); !ok { t.Skip() } @@ -708,7 +708,7 @@ func TestAccKeycloakOpenidClient_extraConfigInvalid(t *testing.T) { } func TestAccKeycloakOpenidClient_oauth2DeviceAuthorizationGrantEnabled(t *testing.T) { - if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_13); !ok { + if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_13); !ok { t.Skip() } @@ -803,8 +803,8 @@ func testAccCheckKeycloakOpenidClientHasFrontchannelSettings(resourceName, front return fmt.Errorf("expected openid client to have frontchannel logout url %s, got %s", frontChannelLogoutUrl, client.Attributes.FrontchannelLogoutUrl) } - if bool(client.FrontChannelLogoutEnabled) != frontChannelLogoutEnabled { - return fmt.Errorf("expected openid client to have frontchannel enabled bool %t, got %t", frontChannelLogoutEnabled, bool(client.FrontChannelLogoutEnabled)) + if client.FrontChannelLogoutEnabled != frontChannelLogoutEnabled { + return fmt.Errorf("expected openid client to have frontchannel enabled bool %t, got %t", frontChannelLogoutEnabled, client.FrontChannelLogoutEnabled) } return nil @@ -982,7 +982,7 @@ func testAccCheckKeycloakOpenidClientDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - client, _ := keycloakClient.GetOpenidClient(realm, id) + client, _ := keycloakClient.GetOpenidClient(testCtx, realm, id) if client != nil { return fmt.Errorf("openid client %s still exists", id) } @@ -1127,7 +1127,7 @@ func testAccCheckKeycloakOpenidClientExtraConfigMissing(resourceName string, key if val, ok := client.Attributes.ExtraConfig[key]; ok { // keycloak 13+ will remove attributes if set to empty string. on older versions, we'll just check if this value is empty - if versionOk, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_13); !versionOk { + if versionOk, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_13); !versionOk { if val != "" { return fmt.Errorf("expected openid client to have empty attribute %v", key) } @@ -1151,7 +1151,7 @@ func getOpenidClientFromState(s *terraform.State, resourceName string) (*keycloa id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - client, err := keycloakClient.GetOpenidClient(realm, id) + client, err := keycloakClient.GetOpenidClient(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting openid client %s: %s", id, err) } diff --git a/provider/resource_keycloak_openid_full_name_protocol_mapper.go b/provider/resource_keycloak_openid_full_name_protocol_mapper.go index b1196d269..448ff6286 100644 --- a/provider/resource_keycloak_openid_full_name_protocol_mapper.go +++ b/provider/resource_keycloak_openid_full_name_protocol_mapper.go @@ -1,22 +1,24 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakOpenIdFullNameProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenIdFullNameProtocolMapperCreate, - Read: resourceKeycloakOpenIdFullNameProtocolMapperRead, - Update: resourceKeycloakOpenIdFullNameProtocolMapperUpdate, - Delete: resourceKeycloakOpenIdFullNameProtocolMapperDelete, + CreateContext: resourceKeycloakOpenIdFullNameProtocolMapperCreate, + ReadContext: resourceKeycloakOpenIdFullNameProtocolMapperRead, + UpdateContext: resourceKeycloakOpenIdFullNameProtocolMapperUpdate, + DeleteContext: resourceKeycloakOpenIdFullNameProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -94,36 +96,36 @@ func mapFromOpenIdFullNameMapperToData(mapper *keycloak.OpenIdFullNameProtocolMa data.Set("add_to_userinfo", mapper.AddToUserInfo) } -func resourceKeycloakOpenIdFullNameProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdFullNameProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdFullNameMapper := mapFromDataToOpenIdFullNameProtocolMapper(data) - err := keycloakClient.ValidateOpenIdFullNameProtocolMapper(openIdFullNameMapper) + err := keycloakClient.ValidateOpenIdFullNameProtocolMapper(ctx, openIdFullNameMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenIdFullNameProtocolMapper(openIdFullNameMapper) + err = keycloakClient.NewOpenIdFullNameProtocolMapper(ctx, openIdFullNameMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromOpenIdFullNameMapperToData(openIdFullNameMapper, data) - return resourceKeycloakOpenIdFullNameProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdFullNameProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdFullNameProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdFullNameProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - openIdFullNameMapper, err := keycloakClient.GetOpenIdFullNameProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + openIdFullNameMapper, err := keycloakClient.GetOpenIdFullNameProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromOpenIdFullNameMapperToData(openIdFullNameMapper, data) @@ -131,30 +133,30 @@ func resourceKeycloakOpenIdFullNameProtocolMapperRead(data *schema.ResourceData, return nil } -func resourceKeycloakOpenIdFullNameProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdFullNameProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdFullNameMapper := mapFromDataToOpenIdFullNameProtocolMapper(data) - err := keycloakClient.ValidateOpenIdFullNameProtocolMapper(openIdFullNameMapper) + err := keycloakClient.ValidateOpenIdFullNameProtocolMapper(ctx, openIdFullNameMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateOpenIdFullNameProtocolMapper(openIdFullNameMapper) + err = keycloakClient.UpdateOpenIdFullNameProtocolMapper(ctx, openIdFullNameMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenIdFullNameProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdFullNameProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdFullNameProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdFullNameProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteOpenIdFullNameProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteOpenIdFullNameProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_openid_full_name_protocol_mapper_test.go b/provider/resource_keycloak_openid_full_name_protocol_mapper_test.go index 1ecd986d3..f31fb561d 100644 --- a/provider/resource_keycloak_openid_full_name_protocol_mapper_test.go +++ b/provider/resource_keycloak_openid_full_name_protocol_mapper_test.go @@ -143,7 +143,7 @@ func TestAccKeycloakOpenIdFullNameProtocolMapper_createAfterManualDestroy(t *tes }, { PreConfig: func() { - err := keycloakClient.DeleteOpenIdUserAttributeProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteOpenIdUserAttributeProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -285,7 +285,7 @@ func getFullNameMapperUsingState(state *terraform.State, resourceName string) (* clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetOpenIdFullNameProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetOpenIdFullNameProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func getGenericProtocolMapperIdForClient(resourceName string) resource.ImportStateIdFunc { diff --git a/provider/resource_keycloak_openid_group_membership_protocol_mapper.go b/provider/resource_keycloak_openid_group_membership_protocol_mapper.go index c25c9718f..79d126abd 100644 --- a/provider/resource_keycloak_openid_group_membership_protocol_mapper.go +++ b/provider/resource_keycloak_openid_group_membership_protocol_mapper.go @@ -1,22 +1,24 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakOpenIdGroupMembershipProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenIdGroupMembershipProtocolMapperCreate, - Read: resourceKeycloakOpenIdGroupMembershipProtocolMapperRead, - Update: resourceKeycloakOpenIdGroupMembershipProtocolMapperUpdate, - Delete: resourceKeycloakOpenIdGroupMembershipProtocolMapperDelete, + CreateContext: resourceKeycloakOpenIdGroupMembershipProtocolMapperCreate, + ReadContext: resourceKeycloakOpenIdGroupMembershipProtocolMapperRead, + UpdateContext: resourceKeycloakOpenIdGroupMembershipProtocolMapperUpdate, + DeleteContext: resourceKeycloakOpenIdGroupMembershipProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -107,36 +109,36 @@ func mapFromOpenIdGroupMembershipMapperToData(mapper *keycloak.OpenIdGroupMember data.Set("add_to_userinfo", mapper.AddToUserinfo) } -func resourceKeycloakOpenIdGroupMembershipProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdGroupMembershipProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdGroupMembershipMapper := mapFromDataToOpenIdGroupMembershipProtocolMapper(data) - err := keycloakClient.ValidateOpenIdGroupMembershipProtocolMapper(openIdGroupMembershipMapper) + err := keycloakClient.ValidateOpenIdGroupMembershipProtocolMapper(ctx, openIdGroupMembershipMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenIdGroupMembershipProtocolMapper(openIdGroupMembershipMapper) + err = keycloakClient.NewOpenIdGroupMembershipProtocolMapper(ctx, openIdGroupMembershipMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromOpenIdGroupMembershipMapperToData(openIdGroupMembershipMapper, data) - return resourceKeycloakOpenIdGroupMembershipProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdGroupMembershipProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdGroupMembershipProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdGroupMembershipProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - openIdGroupMembershipMapper, err := keycloakClient.GetOpenIdGroupMembershipProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + openIdGroupMembershipMapper, err := keycloakClient.GetOpenIdGroupMembershipProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromOpenIdGroupMembershipMapperToData(openIdGroupMembershipMapper, data) @@ -144,30 +146,30 @@ func resourceKeycloakOpenIdGroupMembershipProtocolMapperRead(data *schema.Resour return nil } -func resourceKeycloakOpenIdGroupMembershipProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdGroupMembershipProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdGroupMembershipMapper := mapFromDataToOpenIdGroupMembershipProtocolMapper(data) - err := keycloakClient.ValidateOpenIdGroupMembershipProtocolMapper(openIdGroupMembershipMapper) + err := keycloakClient.ValidateOpenIdGroupMembershipProtocolMapper(ctx, openIdGroupMembershipMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateOpenIdGroupMembershipProtocolMapper(openIdGroupMembershipMapper) + err = keycloakClient.UpdateOpenIdGroupMembershipProtocolMapper(ctx, openIdGroupMembershipMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenIdGroupMembershipProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdGroupMembershipProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdGroupMembershipProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdGroupMembershipProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteOpenIdGroupMembershipProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteOpenIdGroupMembershipProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_openid_group_membership_protocol_mapper_test.go b/provider/resource_keycloak_openid_group_membership_protocol_mapper_test.go index bad2e2486..73e728ec3 100644 --- a/provider/resource_keycloak_openid_group_membership_protocol_mapper_test.go +++ b/provider/resource_keycloak_openid_group_membership_protocol_mapper_test.go @@ -147,7 +147,7 @@ func TestAccKeycloakOpenIdGroupMembershipProtocolMapper_createAfterManualDestroy }, { PreConfig: func() { - err := keycloakClient.DeleteOpenIdUserAttributeProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteOpenIdUserAttributeProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -289,7 +289,7 @@ func getGroupMembershipMapperUsingState(state *terraform.State, resourceName str clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetOpenIdGroupMembershipProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetOpenIdGroupMembershipProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakOpenIdGroupMembershipProtocolMapper_basic_client(clientId, mapperName string) string { diff --git a/provider/resource_keycloak_openid_hardcoded_claim_protocol_mapper.go b/provider/resource_keycloak_openid_hardcoded_claim_protocol_mapper.go index 3cc2f1077..e05e99ada 100644 --- a/provider/resource_keycloak_openid_hardcoded_claim_protocol_mapper.go +++ b/provider/resource_keycloak_openid_hardcoded_claim_protocol_mapper.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,16 +10,16 @@ import ( func resourceKeycloakOpenIdHardcodedClaimProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenIdHardcodedClaimProtocolMapperCreate, - Read: resourceKeycloakOpenIdHardcodedClaimProtocolMapperRead, - Update: resourceKeycloakOpenIdHardcodedClaimProtocolMapperUpdate, - Delete: resourceKeycloakOpenIdHardcodedClaimProtocolMapperDelete, + CreateContext: resourceKeycloakOpenIdHardcodedClaimProtocolMapperCreate, + ReadContext: resourceKeycloakOpenIdHardcodedClaimProtocolMapperRead, + UpdateContext: resourceKeycloakOpenIdHardcodedClaimProtocolMapperUpdate, + DeleteContext: resourceKeycloakOpenIdHardcodedClaimProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -118,35 +120,35 @@ func mapFromOpenIdHardcodedClaimMapperToData(mapper *keycloak.OpenIdHardcodedCla data.Set("claim_value_type", mapper.ClaimValueType) } -func resourceKeycloakOpenIdHardcodedClaimProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdHardcodedClaimProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdHardcodedClaimMapper := mapFromDataToOpenIdHardcodedClaimProtocolMapper(data) - err := keycloakClient.ValidateOpenIdHardcodedClaimProtocolMapper(openIdHardcodedClaimMapper) + err := keycloakClient.ValidateOpenIdHardcodedClaimProtocolMapper(ctx, openIdHardcodedClaimMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenIdHardcodedClaimProtocolMapper(openIdHardcodedClaimMapper) + err = keycloakClient.NewOpenIdHardcodedClaimProtocolMapper(ctx, openIdHardcodedClaimMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromOpenIdHardcodedClaimMapperToData(openIdHardcodedClaimMapper, data) - return resourceKeycloakOpenIdHardcodedClaimProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdHardcodedClaimProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdHardcodedClaimProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdHardcodedClaimProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - openIdHardcodedClaimMapper, err := keycloakClient.GetOpenIdHardcodedClaimProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + openIdHardcodedClaimMapper, err := keycloakClient.GetOpenIdHardcodedClaimProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromOpenIdHardcodedClaimMapperToData(openIdHardcodedClaimMapper, data) @@ -154,30 +156,30 @@ func resourceKeycloakOpenIdHardcodedClaimProtocolMapperRead(data *schema.Resourc return nil } -func resourceKeycloakOpenIdHardcodedClaimProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdHardcodedClaimProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdHardcodedClaimMapper := mapFromDataToOpenIdHardcodedClaimProtocolMapper(data) - err := keycloakClient.ValidateOpenIdHardcodedClaimProtocolMapper(openIdHardcodedClaimMapper) + err := keycloakClient.ValidateOpenIdHardcodedClaimProtocolMapper(ctx, openIdHardcodedClaimMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateOpenIdHardcodedClaimProtocolMapper(openIdHardcodedClaimMapper) + err = keycloakClient.UpdateOpenIdHardcodedClaimProtocolMapper(ctx, openIdHardcodedClaimMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenIdHardcodedClaimProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdHardcodedClaimProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdHardcodedClaimProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdHardcodedClaimProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteOpenIdHardcodedClaimProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteOpenIdHardcodedClaimProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_openid_hardcoded_claim_protocol_mapper_test.go b/provider/resource_keycloak_openid_hardcoded_claim_protocol_mapper_test.go index 163ad457f..0d573f07a 100644 --- a/provider/resource_keycloak_openid_hardcoded_claim_protocol_mapper_test.go +++ b/provider/resource_keycloak_openid_hardcoded_claim_protocol_mapper_test.go @@ -136,7 +136,7 @@ func TestAccKeycloakOpenIdHardcodedClaimProtocolMapper_createAfterManualDestroy( }, { PreConfig: func() { - err := keycloakClient.DeleteOpenIdHardcodedClaimProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteOpenIdHardcodedClaimProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -299,7 +299,7 @@ func getHardcodedClaimMapperUsingState(state *terraform.State, resourceName stri clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetOpenIdHardcodedClaimProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetOpenIdHardcodedClaimProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakOpenIdHardcodedClaimProtocolMapper_basic_client(clientId, mapperName string) string { diff --git a/provider/resource_keycloak_openid_hardcoded_role_protocol_mapper.go b/provider/resource_keycloak_openid_hardcoded_role_protocol_mapper.go index 2458d6c92..af00ee1fe 100644 --- a/provider/resource_keycloak_openid_hardcoded_role_protocol_mapper.go +++ b/provider/resource_keycloak_openid_hardcoded_role_protocol_mapper.go @@ -1,22 +1,24 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakOpenIdHardcodedRoleProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenIdHardcodedRoleProtocolMapperCreate, - Read: resourceKeycloakOpenIdHardcodedRoleProtocolMapperRead, - Update: resourceKeycloakOpenIdHardcodedRoleProtocolMapperUpdate, - Delete: resourceKeycloakOpenIdHardcodedRoleProtocolMapperDelete, + CreateContext: resourceKeycloakOpenIdHardcodedRoleProtocolMapperCreate, + ReadContext: resourceKeycloakOpenIdHardcodedRoleProtocolMapperRead, + UpdateContext: resourceKeycloakOpenIdHardcodedRoleProtocolMapperUpdate, + DeleteContext: resourceKeycloakOpenIdHardcodedRoleProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -79,36 +81,36 @@ func mapFromOpenIdHardcodedRoleMapperToData(mapper *keycloak.OpenIdHardcodedRole data.Set("role_id", mapper.RoleId) } -func resourceKeycloakOpenIdHardcodedRoleProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdHardcodedRoleProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdHardcodedRoleMapper := mapFromDataToOpenIdHardcodedRoleProtocolMapper(data) - err := keycloakClient.ValidateOpenIdHardcodedRoleProtocolMapper(openIdHardcodedRoleMapper) + err := keycloakClient.ValidateOpenIdHardcodedRoleProtocolMapper(ctx, openIdHardcodedRoleMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenIdHardcodedRoleProtocolMapper(openIdHardcodedRoleMapper) + err = keycloakClient.NewOpenIdHardcodedRoleProtocolMapper(ctx, openIdHardcodedRoleMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromOpenIdHardcodedRoleMapperToData(openIdHardcodedRoleMapper, data) - return resourceKeycloakOpenIdHardcodedRoleProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdHardcodedRoleProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdHardcodedRoleProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdHardcodedRoleProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - openIdHardcodedRoleMapper, err := keycloakClient.GetOpenIdHardcodedRoleProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + openIdHardcodedRoleMapper, err := keycloakClient.GetOpenIdHardcodedRoleProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromOpenIdHardcodedRoleMapperToData(openIdHardcodedRoleMapper, data) @@ -116,30 +118,30 @@ func resourceKeycloakOpenIdHardcodedRoleProtocolMapperRead(data *schema.Resource return nil } -func resourceKeycloakOpenIdHardcodedRoleProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdHardcodedRoleProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdHardcodedRoleMapper := mapFromDataToOpenIdHardcodedRoleProtocolMapper(data) - err := keycloakClient.ValidateOpenIdHardcodedRoleProtocolMapper(openIdHardcodedRoleMapper) + err := keycloakClient.ValidateOpenIdHardcodedRoleProtocolMapper(ctx, openIdHardcodedRoleMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateOpenIdHardcodedRoleProtocolMapper(openIdHardcodedRoleMapper) + err = keycloakClient.UpdateOpenIdHardcodedRoleProtocolMapper(ctx, openIdHardcodedRoleMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenIdHardcodedRoleProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdHardcodedRoleProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdHardcodedRoleProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdHardcodedRoleProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteOpenIdHardcodedRoleProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteOpenIdHardcodedRoleProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_openid_hardcoded_role_protocol_mapper_test.go b/provider/resource_keycloak_openid_hardcoded_role_protocol_mapper_test.go index 7e7034bee..ade4eb48e 100644 --- a/provider/resource_keycloak_openid_hardcoded_role_protocol_mapper_test.go +++ b/provider/resource_keycloak_openid_hardcoded_role_protocol_mapper_test.go @@ -158,7 +158,7 @@ func TestAccKeycloakOpenIdHardcodedRoleProtocolMapper_createAfterManualDestroy(t }, { PreConfig: func() { - err := keycloakClient.DeleteOpenIdHardcodedRoleProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteOpenIdHardcodedRoleProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -226,7 +226,7 @@ func getHardcodedRoleMapperUsingState(state *terraform.State, resourceName strin clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetOpenIdHardcodedRoleProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetOpenIdHardcodedRoleProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakOpenIdHardcodedRoleProtocolMapper_basicRealmRole_client(role, clientId, mapperName string) string { diff --git a/provider/resource_keycloak_openid_script_protocol_mapper.go b/provider/resource_keycloak_openid_script_protocol_mapper.go index 5d37501e7..af99f79b4 100644 --- a/provider/resource_keycloak_openid_script_protocol_mapper.go +++ b/provider/resource_keycloak_openid_script_protocol_mapper.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,16 +10,16 @@ import ( func resourceKeycloakOpenIdScriptProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenIdScriptProtocolMapperCreate, - Read: resourceKeycloakOpenIdScriptProtocolMapperRead, - Update: resourceKeycloakOpenIdScriptProtocolMapperUpdate, - Delete: resourceKeycloakOpenIdScriptProtocolMapperDelete, + CreateContext: resourceKeycloakOpenIdScriptProtocolMapperCreate, + ReadContext: resourceKeycloakOpenIdScriptProtocolMapperRead, + UpdateContext: resourceKeycloakOpenIdScriptProtocolMapperUpdate, + DeleteContext: resourceKeycloakOpenIdScriptProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -127,36 +129,36 @@ func mapFromOpenIdScriptMapperToData(mapper *keycloak.OpenIdScriptProtocolMapper data.Set("multivalued", mapper.Multivalued) } -func resourceKeycloakOpenIdScriptProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdScriptProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdScriptMapper := mapFromDataToOpenIdScriptProtocolMapper(data) - err := keycloakClient.ValidateOpenIdScriptProtocolMapper(openIdScriptMapper) + err := keycloakClient.ValidateOpenIdScriptProtocolMapper(ctx, openIdScriptMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenIdScriptProtocolMapper(openIdScriptMapper) + err = keycloakClient.NewOpenIdScriptProtocolMapper(ctx, openIdScriptMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromOpenIdScriptMapperToData(openIdScriptMapper, data) - return resourceKeycloakOpenIdScriptProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdScriptProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdScriptProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdScriptProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - openIdScriptMapper, err := keycloakClient.GetOpenIdScriptProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + openIdScriptMapper, err := keycloakClient.GetOpenIdScriptProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromOpenIdScriptMapperToData(openIdScriptMapper, data) @@ -164,30 +166,30 @@ func resourceKeycloakOpenIdScriptProtocolMapperRead(data *schema.ResourceData, m return nil } -func resourceKeycloakOpenIdScriptProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdScriptProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdScriptMapper := mapFromDataToOpenIdScriptProtocolMapper(data) - err := keycloakClient.ValidateOpenIdScriptProtocolMapper(openIdScriptMapper) + err := keycloakClient.ValidateOpenIdScriptProtocolMapper(ctx, openIdScriptMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateOpenIdScriptProtocolMapper(openIdScriptMapper) + err = keycloakClient.UpdateOpenIdScriptProtocolMapper(ctx, openIdScriptMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenIdScriptProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdScriptProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdScriptProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdScriptProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteOpenIdScriptProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteOpenIdScriptProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_openid_script_protocol_mapper_test.go b/provider/resource_keycloak_openid_script_protocol_mapper_test.go index 2f4aa9e0a..a7b8712dd 100644 --- a/provider/resource_keycloak_openid_script_protocol_mapper_test.go +++ b/provider/resource_keycloak_openid_script_protocol_mapper_test.go @@ -140,7 +140,7 @@ func TestAccKeycloakOpenIdScriptProtocolMapper_createAfterManualDestroy(t *testi PreConfig: func() { keycloakClient := testAccProvider.Meta().(*keycloak.KeycloakClient) - err := keycloakClient.DeleteOpenIdScriptProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteOpenIdScriptProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -281,7 +281,7 @@ func getScriptMapperUsingState(state *terraform.State, resourceName string) (*ke keycloakClient := testAccProvider.Meta().(*keycloak.KeycloakClient) - return keycloakClient.GetOpenIdScriptProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetOpenIdScriptProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakOpenIdScriptProtocolMapper_basic_client(clientId, mapperName string) string { diff --git a/provider/resource_keycloak_openid_user_attribute_protocol_mapper.go b/provider/resource_keycloak_openid_user_attribute_protocol_mapper.go index e0a14ceca..6878c63b6 100644 --- a/provider/resource_keycloak_openid_user_attribute_protocol_mapper.go +++ b/provider/resource_keycloak_openid_user_attribute_protocol_mapper.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,16 +10,16 @@ import ( func resourceKeycloakOpenIdUserAttributeProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenIdUserAttributeProtocolMapperCreate, - Read: resourceKeycloakOpenIdUserAttributeProtocolMapperRead, - Update: resourceKeycloakOpenIdUserAttributeProtocolMapperUpdate, - Delete: resourceKeycloakOpenIdUserAttributeProtocolMapperDelete, + CreateContext: resourceKeycloakOpenIdUserAttributeProtocolMapperCreate, + ReadContext: resourceKeycloakOpenIdUserAttributeProtocolMapperRead, + UpdateContext: resourceKeycloakOpenIdUserAttributeProtocolMapperUpdate, + DeleteContext: resourceKeycloakOpenIdUserAttributeProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -134,36 +136,36 @@ func mapFromOpenIdUserAttributeMapperToData(mapper *keycloak.OpenIdUserAttribute data.Set("aggregate_attributes", mapper.AggregateAttributeValues) } -func resourceKeycloakOpenIdUserAttributeProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserAttributeProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdUserAttributeMapper := mapFromDataToOpenIdUserAttributeProtocolMapper(data) - err := keycloakClient.ValidateOpenIdUserAttributeProtocolMapper(openIdUserAttributeMapper) + err := keycloakClient.ValidateOpenIdUserAttributeProtocolMapper(ctx, openIdUserAttributeMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenIdUserAttributeProtocolMapper(openIdUserAttributeMapper) + err = keycloakClient.NewOpenIdUserAttributeProtocolMapper(ctx, openIdUserAttributeMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromOpenIdUserAttributeMapperToData(openIdUserAttributeMapper, data) - return resourceKeycloakOpenIdUserAttributeProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdUserAttributeProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdUserAttributeProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserAttributeProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - openIdUserAttributeMapper, err := keycloakClient.GetOpenIdUserAttributeProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + openIdUserAttributeMapper, err := keycloakClient.GetOpenIdUserAttributeProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromOpenIdUserAttributeMapperToData(openIdUserAttributeMapper, data) @@ -171,30 +173,30 @@ func resourceKeycloakOpenIdUserAttributeProtocolMapperRead(data *schema.Resource return nil } -func resourceKeycloakOpenIdUserAttributeProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserAttributeProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdUserAttributeMapper := mapFromDataToOpenIdUserAttributeProtocolMapper(data) - err := keycloakClient.ValidateOpenIdUserAttributeProtocolMapper(openIdUserAttributeMapper) + err := keycloakClient.ValidateOpenIdUserAttributeProtocolMapper(ctx, openIdUserAttributeMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateOpenIdUserAttributeProtocolMapper(openIdUserAttributeMapper) + err = keycloakClient.UpdateOpenIdUserAttributeProtocolMapper(ctx, openIdUserAttributeMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenIdUserAttributeProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdUserAttributeProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdUserAttributeProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserAttributeProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteOpenIdUserAttributeProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteOpenIdUserAttributeProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_openid_user_attribute_protocol_mapper_test.go b/provider/resource_keycloak_openid_user_attribute_protocol_mapper_test.go index 364b2b821..49c06e059 100644 --- a/provider/resource_keycloak_openid_user_attribute_protocol_mapper_test.go +++ b/provider/resource_keycloak_openid_user_attribute_protocol_mapper_test.go @@ -133,7 +133,7 @@ func TestAccKeycloakOpenIdUserAttributeProtocolMapper_createAfterManualDestroy(t }, { PreConfig: func() { - err := keycloakClient.DeleteOpenIdUserAttributeProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteOpenIdUserAttributeProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -269,7 +269,7 @@ func getUserAttributeMapperUsingState(state *terraform.State, resourceName strin clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetOpenIdUserAttributeProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetOpenIdUserAttributeProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakOpenIdUserAttributeProtocolMapper_basic_client(clientId, mapperName string) string { diff --git a/provider/resource_keycloak_openid_user_client_role_protocol_mapper.go b/provider/resource_keycloak_openid_user_client_role_protocol_mapper.go index 2fd8ba6b0..294912182 100644 --- a/provider/resource_keycloak_openid_user_client_role_protocol_mapper.go +++ b/provider/resource_keycloak_openid_user_client_role_protocol_mapper.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,16 +10,16 @@ import ( func resourceKeycloakOpenIdUserClientRoleProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenIdUserClientRoleProtocolMapperCreate, - Read: resourceKeycloakOpenIdUserClientRoleProtocolMapperRead, - Update: resourceKeycloakOpenIdUserClientRoleProtocolMapperUpdate, - Delete: resourceKeycloakOpenIdUserClientRoleProtocolMapperDelete, + CreateContext: resourceKeycloakOpenIdUserClientRoleProtocolMapperCreate, + ReadContext: resourceKeycloakOpenIdUserClientRoleProtocolMapperRead, + UpdateContext: resourceKeycloakOpenIdUserClientRoleProtocolMapperUpdate, + DeleteContext: resourceKeycloakOpenIdUserClientRoleProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -134,35 +136,35 @@ func mapFromOpenIdUserClientRoleMapperToData(mapper *keycloak.OpenIdUserClientRo data.Set("client_role_prefix", mapper.ClientRolePrefix) } -func resourceKeycloakOpenIdUserClientRoleProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserClientRoleProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdUserClientRoleMapper := mapFromDataToOpenIdUserClientRoleProtocolMapper(data) - err := keycloakClient.ValidateOpenIdUserClientRoleProtocolMapper(openIdUserClientRoleMapper) + err := keycloakClient.ValidateOpenIdUserClientRoleProtocolMapper(ctx, openIdUserClientRoleMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenIdUserClientRoleProtocolMapper(openIdUserClientRoleMapper) + err = keycloakClient.NewOpenIdUserClientRoleProtocolMapper(ctx, openIdUserClientRoleMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromOpenIdUserClientRoleMapperToData(openIdUserClientRoleMapper, data) - return resourceKeycloakOpenIdUserClientRoleProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdUserClientRoleProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdUserClientRoleProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserClientRoleProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - openIdUserClientRoleMapper, err := keycloakClient.GetOpenIdUserClientRoleProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + openIdUserClientRoleMapper, err := keycloakClient.GetOpenIdUserClientRoleProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromOpenIdUserClientRoleMapperToData(openIdUserClientRoleMapper, data) @@ -170,30 +172,30 @@ func resourceKeycloakOpenIdUserClientRoleProtocolMapperRead(data *schema.Resourc return nil } -func resourceKeycloakOpenIdUserClientRoleProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserClientRoleProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdUserClientRoleMapper := mapFromDataToOpenIdUserClientRoleProtocolMapper(data) - err := keycloakClient.ValidateOpenIdUserClientRoleProtocolMapper(openIdUserClientRoleMapper) + err := keycloakClient.ValidateOpenIdUserClientRoleProtocolMapper(ctx, openIdUserClientRoleMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateOpenIdUserClientRoleProtocolMapper(openIdUserClientRoleMapper) + err = keycloakClient.UpdateOpenIdUserClientRoleProtocolMapper(ctx, openIdUserClientRoleMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenIdUserClientRoleProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdUserClientRoleProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdUserClientRoleProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserClientRoleProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteOpenIdUserClientRoleProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteOpenIdUserClientRoleProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_openid_user_client_role_protocol_mapper_test.go b/provider/resource_keycloak_openid_user_client_role_protocol_mapper_test.go index 001de58b5..e93a6a4f5 100644 --- a/provider/resource_keycloak_openid_user_client_role_protocol_mapper_test.go +++ b/provider/resource_keycloak_openid_user_client_role_protocol_mapper_test.go @@ -135,7 +135,7 @@ func TestAccKeycloakOpenIdUserClientRoleProtocolMapper_createAfterManualDestroy( }, { PreConfig: func() { - err := keycloakClient.DeleteOpenIdUserClientRoleProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteOpenIdUserClientRoleProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -345,7 +345,7 @@ func getUserClientRoleMapperUsingState(state *terraform.State, resourceName stri clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetOpenIdUserClientRoleProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetOpenIdUserClientRoleProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakOpenIdUserClientRoleProtocolMapper_basic_client(clientId, mapperName string) string { diff --git a/provider/resource_keycloak_openid_user_property_protocol_mapper.go b/provider/resource_keycloak_openid_user_property_protocol_mapper.go index 9ed8dd998..4fd68a36b 100644 --- a/provider/resource_keycloak_openid_user_property_protocol_mapper.go +++ b/provider/resource_keycloak_openid_user_property_protocol_mapper.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,16 +10,16 @@ import ( func resourceKeycloakOpenIdUserPropertyProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenIdUserPropertyProtocolMapperCreate, - Read: resourceKeycloakOpenIdUserPropertyProtocolMapperRead, - Update: resourceKeycloakOpenIdUserPropertyProtocolMapperUpdate, - Delete: resourceKeycloakOpenIdUserPropertyProtocolMapperDelete, + CreateContext: resourceKeycloakOpenIdUserPropertyProtocolMapperCreate, + ReadContext: resourceKeycloakOpenIdUserPropertyProtocolMapperRead, + UpdateContext: resourceKeycloakOpenIdUserPropertyProtocolMapperUpdate, + DeleteContext: resourceKeycloakOpenIdUserPropertyProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -118,36 +120,36 @@ func mapFromOpenIdUserPropertyMapperToData(mapper *keycloak.OpenIdUserPropertyPr data.Set("claim_value_type", mapper.ClaimValueType) } -func resourceKeycloakOpenIdUserPropertyProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserPropertyProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdUserPropertyMapper := mapFromDataToOpenIdUserPropertyProtocolMapper(data) - err := openIdUserPropertyMapper.Validate(keycloakClient) + err := openIdUserPropertyMapper.Validate(ctx, keycloakClient) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenIdUserPropertyProtocolMapper(openIdUserPropertyMapper) + err = keycloakClient.NewOpenIdUserPropertyProtocolMapper(ctx, openIdUserPropertyMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromOpenIdUserPropertyMapperToData(openIdUserPropertyMapper, data) - return resourceKeycloakOpenIdUserPropertyProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdUserPropertyProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdUserPropertyProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserPropertyProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - openIdUserPropertyMapper, err := keycloakClient.GetOpenIdUserPropertyProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + openIdUserPropertyMapper, err := keycloakClient.GetOpenIdUserPropertyProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromOpenIdUserPropertyMapperToData(openIdUserPropertyMapper, data) @@ -155,24 +157,24 @@ func resourceKeycloakOpenIdUserPropertyProtocolMapperRead(data *schema.ResourceD return nil } -func resourceKeycloakOpenIdUserPropertyProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserPropertyProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdUserPropertyMapper := mapFromDataToOpenIdUserPropertyProtocolMapper(data) - err := keycloakClient.UpdateOpenIdUserPropertyProtocolMapper(openIdUserPropertyMapper) + err := keycloakClient.UpdateOpenIdUserPropertyProtocolMapper(ctx, openIdUserPropertyMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenIdUserPropertyProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdUserPropertyProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdUserPropertyProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserPropertyProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteOpenIdUserPropertyProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteOpenIdUserPropertyProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_openid_user_property_protocol_mapper_test.go b/provider/resource_keycloak_openid_user_property_protocol_mapper_test.go index a8b72cfc6..8be1fb423 100644 --- a/provider/resource_keycloak_openid_user_property_protocol_mapper_test.go +++ b/provider/resource_keycloak_openid_user_property_protocol_mapper_test.go @@ -133,7 +133,7 @@ func TestAccKeycloakOpenIdUserPropertyProtocolMapper_createAfterManualDestroy(t }, { PreConfig: func() { - err := keycloakClient.DeleteOpenIdUserPropertyProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteOpenIdUserPropertyProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -294,7 +294,7 @@ func getUserPropertyMapperUsingState(state *terraform.State, resourceName string clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetOpenIdUserPropertyProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetOpenIdUserPropertyProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakOpenIdUserPropertyProtocolMapper_basic_client(clientId, mapperName string) string { diff --git a/provider/resource_keycloak_openid_user_realm_role_protocol_mapper.go b/provider/resource_keycloak_openid_user_realm_role_protocol_mapper.go index c05ff5e5a..f5457dff0 100644 --- a/provider/resource_keycloak_openid_user_realm_role_protocol_mapper.go +++ b/provider/resource_keycloak_openid_user_realm_role_protocol_mapper.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,16 +10,16 @@ import ( func resourceKeycloakOpenIdUserRealmRoleProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenIdUserRealmRoleProtocolMapperCreate, - Read: resourceKeycloakOpenIdUserRealmRoleProtocolMapperRead, - Update: resourceKeycloakOpenIdUserRealmRoleProtocolMapperUpdate, - Delete: resourceKeycloakOpenIdUserRealmRoleProtocolMapperDelete, + CreateContext: resourceKeycloakOpenIdUserRealmRoleProtocolMapperCreate, + ReadContext: resourceKeycloakOpenIdUserRealmRoleProtocolMapperRead, + UpdateContext: resourceKeycloakOpenIdUserRealmRoleProtocolMapperUpdate, + DeleteContext: resourceKeycloakOpenIdUserRealmRoleProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -127,35 +129,35 @@ func mapFromOpenIdUserRealmRoleMapperToData(mapper *keycloak.OpenIdUserRealmRole data.Set("multivalued", mapper.Multivalued) } -func resourceKeycloakOpenIdUserRealmRoleProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserRealmRoleProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdUserRealmRoleMapper := mapFromDataToOpenIdUserRealmRoleProtocolMapper(data) - err := keycloakClient.ValidateOpenIdUserRealmRoleProtocolMapper(openIdUserRealmRoleMapper) + err := keycloakClient.ValidateOpenIdUserRealmRoleProtocolMapper(ctx, openIdUserRealmRoleMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenIdUserRealmRoleProtocolMapper(openIdUserRealmRoleMapper) + err = keycloakClient.NewOpenIdUserRealmRoleProtocolMapper(ctx, openIdUserRealmRoleMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromOpenIdUserRealmRoleMapperToData(openIdUserRealmRoleMapper, data) - return resourceKeycloakOpenIdUserRealmRoleProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdUserRealmRoleProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdUserRealmRoleProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserRealmRoleProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - openIdUserRealmRoleMapper, err := keycloakClient.GetOpenIdUserRealmRoleProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + openIdUserRealmRoleMapper, err := keycloakClient.GetOpenIdUserRealmRoleProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromOpenIdUserRealmRoleMapperToData(openIdUserRealmRoleMapper, data) @@ -163,30 +165,30 @@ func resourceKeycloakOpenIdUserRealmRoleProtocolMapperRead(data *schema.Resource return nil } -func resourceKeycloakOpenIdUserRealmRoleProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserRealmRoleProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdUserRealmRoleMapper := mapFromDataToOpenIdUserRealmRoleProtocolMapper(data) - err := keycloakClient.ValidateOpenIdUserRealmRoleProtocolMapper(openIdUserRealmRoleMapper) + err := keycloakClient.ValidateOpenIdUserRealmRoleProtocolMapper(ctx, openIdUserRealmRoleMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateOpenIdUserRealmRoleProtocolMapper(openIdUserRealmRoleMapper) + err = keycloakClient.UpdateOpenIdUserRealmRoleProtocolMapper(ctx, openIdUserRealmRoleMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenIdUserRealmRoleProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdUserRealmRoleProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdUserRealmRoleProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserRealmRoleProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteOpenIdUserRealmRoleProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteOpenIdUserRealmRoleProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_openid_user_realm_role_protocol_mapper_test.go b/provider/resource_keycloak_openid_user_realm_role_protocol_mapper_test.go index 8595cf2d4..0a49f0091 100644 --- a/provider/resource_keycloak_openid_user_realm_role_protocol_mapper_test.go +++ b/provider/resource_keycloak_openid_user_realm_role_protocol_mapper_test.go @@ -135,7 +135,7 @@ func TestAccKeycloakOpenIdUserRealmRoleProtocolMapper_createAfterManualDestroy(t }, { PreConfig: func() { - err := keycloakClient.DeleteOpenIdUserRealmRoleProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteOpenIdUserRealmRoleProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -296,7 +296,7 @@ func getUserRealmRoleMapperUsingState(state *terraform.State, resourceName strin clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetOpenIdUserRealmRoleProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetOpenIdUserRealmRoleProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakOpenIdUserRealmRoleProtocolMapper_basic_client(clientId, mapperName string) string { diff --git a/provider/resource_keycloak_openid_user_session_note_protocol_mapper.go b/provider/resource_keycloak_openid_user_session_note_protocol_mapper.go index b83a0fa27..7af3c42c7 100644 --- a/provider/resource_keycloak_openid_user_session_note_protocol_mapper.go +++ b/provider/resource_keycloak_openid_user_session_note_protocol_mapper.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,16 +10,16 @@ import ( func resourceKeycloakOpenIdUserSessionNoteProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakOpenIdUserSessionNoteProtocolMapperCreate, - Read: resourceKeycloakOpenIdUserSessionNoteProtocolMapperRead, - Update: resourceKeycloakOpenIdUserSessionNoteProtocolMapperUpdate, - Delete: resourceKeycloakOpenIdUserSessionNoteProtocolMapperDelete, + CreateContext: resourceKeycloakOpenIdUserSessionNoteProtocolMapperCreate, + ReadContext: resourceKeycloakOpenIdUserSessionNoteProtocolMapperRead, + UpdateContext: resourceKeycloakOpenIdUserSessionNoteProtocolMapperUpdate, + DeleteContext: resourceKeycloakOpenIdUserSessionNoteProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -111,35 +113,35 @@ func mapFromOpenIdUserSessionNoteMapperToData(mapper *keycloak.OpenIdUserSession data.Set("session_note", mapper.UserSessionNote) } -func resourceKeycloakOpenIdUserSessionNoteProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserSessionNoteProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdUserSessionNoteMapper := mapFromDataToOpenIdUserSessionNoteProtocolMapper(data) - err := keycloakClient.ValidateOpenIdUserSessionNoteProtocolMapper(openIdUserSessionNoteMapper) + err := keycloakClient.ValidateOpenIdUserSessionNoteProtocolMapper(ctx, openIdUserSessionNoteMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewOpenIdUserSessionNoteProtocolMapper(openIdUserSessionNoteMapper) + err = keycloakClient.NewOpenIdUserSessionNoteProtocolMapper(ctx, openIdUserSessionNoteMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromOpenIdUserSessionNoteMapperToData(openIdUserSessionNoteMapper, data) - return resourceKeycloakOpenIdUserSessionNoteProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdUserSessionNoteProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdUserSessionNoteProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserSessionNoteProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - openIdUserSessionNoteMapper, err := keycloakClient.GetOpenIdUserSessionNoteProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + openIdUserSessionNoteMapper, err := keycloakClient.GetOpenIdUserSessionNoteProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromOpenIdUserSessionNoteMapperToData(openIdUserSessionNoteMapper, data) @@ -147,30 +149,30 @@ func resourceKeycloakOpenIdUserSessionNoteProtocolMapperRead(data *schema.Resour return nil } -func resourceKeycloakOpenIdUserSessionNoteProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserSessionNoteProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) openIdUserSessionNoteMapper := mapFromDataToOpenIdUserSessionNoteProtocolMapper(data) - err := keycloakClient.ValidateOpenIdUserSessionNoteProtocolMapper(openIdUserSessionNoteMapper) + err := keycloakClient.ValidateOpenIdUserSessionNoteProtocolMapper(ctx, openIdUserSessionNoteMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateOpenIdUserSessionNoteProtocolMapper(openIdUserSessionNoteMapper) + err = keycloakClient.UpdateOpenIdUserSessionNoteProtocolMapper(ctx, openIdUserSessionNoteMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakOpenIdUserSessionNoteProtocolMapperRead(data, meta) + return resourceKeycloakOpenIdUserSessionNoteProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakOpenIdUserSessionNoteProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakOpenIdUserSessionNoteProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteOpenIdUserSessionNoteProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteOpenIdUserSessionNoteProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_openid_user_session_note_protocol_mapper_test.go b/provider/resource_keycloak_openid_user_session_note_protocol_mapper_test.go index 23d94aa3a..f1bd03362 100644 --- a/provider/resource_keycloak_openid_user_session_note_protocol_mapper_test.go +++ b/provider/resource_keycloak_openid_user_session_note_protocol_mapper_test.go @@ -162,7 +162,7 @@ func TestAccKeycloakOpenIdUserSessionNoteProtocolMapper_createAfterManualDestroy }, { PreConfig: func() { - err := keycloakClient.DeleteOpenIdUserSessionNoteProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteOpenIdUserSessionNoteProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -323,7 +323,7 @@ func getUserSessionNoteMapperUsingState(state *terraform.State, resourceName str clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetOpenIdUserSessionNoteProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetOpenIdUserSessionNoteProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakOpenIdUserSessionNoteProtocolMapper_basic_client(clientId, mapperName string) string { diff --git a/provider/resource_keycloak_realm.go b/provider/resource_keycloak_realm.go index dc1d8f8f2..9f5808187 100644 --- a/provider/resource_keycloak_realm.go +++ b/provider/resource_keycloak_realm.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -139,12 +141,12 @@ func resourceKeycloakRealm() *schema.Resource { }, } return &schema.Resource{ - Create: resourceKeycloakRealmCreate, - Read: resourceKeycloakRealmRead, - Delete: resourceKeycloakRealmDelete, - Update: resourceKeycloakRealmUpdate, + CreateContext: resourceKeycloakRealmCreate, + ReadContext: resourceKeycloakRealmRead, + DeleteContext: resourceKeycloakRealmDelete, + UpdateContext: resourceKeycloakRealmUpdate, Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, + StateContext: schema.ImportStatePassthroughContext, }, Schema: map[string]*schema.Schema{ "realm": { @@ -1308,35 +1310,35 @@ func getHeaderSettings(realm *keycloak.Realm) map[string]interface{} { return headersSettings } -func resourceKeycloakRealmCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realm, err := getRealmFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.ValidateRealm(realm) + err = keycloakClient.ValidateRealm(ctx, realm) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewRealm(realm) + err = keycloakClient.NewRealm(ctx, realm) if err != nil { - return err + return diag.FromErr(err) } setRealmData(data, realm) - return resourceKeycloakRealmRead(data, meta) + return resourceKeycloakRealmRead(ctx, data, meta) } -func resourceKeycloakRealmRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - realm, err := keycloakClient.GetRealm(data.Id()) + realm, err := keycloakClient.GetRealm(ctx, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } // we can't trust the API to set this field correctly since it just responds with "**********" this implies a 'password only' change will not detected @@ -1349,22 +1351,22 @@ func resourceKeycloakRealmRead(data *schema.ResourceData, meta interface{}) erro return nil } -func resourceKeycloakRealmUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realm, err := getRealmFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.ValidateRealm(realm) + err = keycloakClient.ValidateRealm(ctx, realm) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateRealm(realm) + err = keycloakClient.UpdateRealm(ctx, realm) if err != nil { - return err + return diag.FromErr(err) } setRealmData(data, realm) @@ -1372,8 +1374,8 @@ func resourceKeycloakRealmUpdate(data *schema.ResourceData, meta interface{}) er return nil } -func resourceKeycloakRealmDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - return keycloakClient.DeleteRealm(data.Id()) + return diag.FromErr(keycloakClient.DeleteRealm(ctx, data.Id())) } diff --git a/provider/resource_keycloak_realm_events.go b/provider/resource_keycloak_realm_events.go index cc10e154a..602e3de1b 100644 --- a/provider/resource_keycloak_realm_events.go +++ b/provider/resource_keycloak_realm_events.go @@ -1,16 +1,18 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakRealmEvents() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakRealmEventsCreate, - Read: resourceKeycloakRealmEventsRead, - Delete: resourceKeycloakRealmEventsDelete, - Update: resourceKeycloakRealmEventsUpdate, + CreateContext: resourceKeycloakRealmEventsCreate, + ReadContext: resourceKeycloakRealmEventsRead, + DeleteContext: resourceKeycloakRealmEventsDelete, + UpdateContext: resourceKeycloakRealmEventsUpdate, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -93,26 +95,26 @@ func setRealmEventsConfigData(data *schema.ResourceData, realmEventsConfig *keyc } } -func resourceKeycloakRealmEventsCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmEventsCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { realmId := data.Get("realm_id").(string) data.SetId(realmId) - err := resourceKeycloakRealmEventsUpdate(data, meta) - if err != nil { - return err + diagnostics := resourceKeycloakRealmEventsUpdate(ctx, data, meta) + if diagnostics.HasError() { + return diagnostics } - return resourceKeycloakRealmEventsRead(data, meta) + return resourceKeycloakRealmEventsRead(ctx, data, meta) } -func resourceKeycloakRealmEventsRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmEventsRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) - realmEventsConfig, err := keycloakClient.GetRealmEventsConfig(realmId) + realmEventsConfig, err := keycloakClient.GetRealmEventsConfig(ctx, realmId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setRealmEventsConfigData(data, realmEventsConfig) @@ -120,30 +122,30 @@ func resourceKeycloakRealmEventsRead(data *schema.ResourceData, meta interface{} return nil } -func resourceKeycloakRealmEventsDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmEventsDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) // The realm events config cannot be deleted, so instead we set it back to its "zero" values. realmEventsConfig := &keycloak.RealmEventsConfig{} - err := keycloakClient.UpdateRealmEventsConfig(realmId, realmEventsConfig) + err := keycloakClient.UpdateRealmEventsConfig(ctx, realmId, realmEventsConfig) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmEventsUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmEventsUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) realmEventsConfig := getRealmEventsConfigFromData(data) - err := keycloakClient.UpdateRealmEventsConfig(realmId, realmEventsConfig) + err := keycloakClient.UpdateRealmEventsConfig(ctx, realmId, realmEventsConfig) if err != nil { - return err + return diag.FromErr(err) } setRealmEventsConfigData(data, realmEventsConfig) diff --git a/provider/resource_keycloak_realm_events_test.go b/provider/resource_keycloak_realm_events_test.go index 281425baa..7d1f7a182 100644 --- a/provider/resource_keycloak_realm_events_test.go +++ b/provider/resource_keycloak_realm_events_test.go @@ -38,7 +38,7 @@ func TestAccKeycloakRealmEvents_destroy(t *testing.T) { { Config: testKeycloakRealmEvents_realmOnly(realmName), Check: func(state *terraform.State) error { - realmEventsConfig, err := keycloakClient.GetRealmEventsConfig(realmName) + realmEventsConfig, err := keycloakClient.GetRealmEventsConfig(testCtx, realmName) if err != nil { return err } @@ -165,19 +165,19 @@ func TestAccKeycloakRealmEvents_unsetEnabledEventTypes(t *testing.T) { } //keycloak versions < 7.0.0 have 63 events, versions >=7.0.0 have 67 events, versions >=12.0.0 have 69 events - if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_14); ok { + if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_14); ok { if len(realmEventsConfig.EnabledEventTypes) != 79 { return fmt.Errorf("exptected to enabled_event_types to contain all(79) event types, but it contains %d", len(realmEventsConfig.EnabledEventTypes)) } - } else if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_13); ok { + } else if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_13); ok { if len(realmEventsConfig.EnabledEventTypes) != 77 { return fmt.Errorf("exptected to enabled_event_types to contain all(77) event types, but it contains %d", len(realmEventsConfig.EnabledEventTypes)) } - } else if ok, _ = keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_12); ok { + } else if ok, _ = keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_12); ok { if len(realmEventsConfig.EnabledEventTypes) != 69 { return fmt.Errorf("exptected to enabled_event_types to contain all(69) event types, but it contains %d", len(realmEventsConfig.EnabledEventTypes)) } - } else if ok, _ = keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_7); ok { + } else if ok, _ = keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_7); ok { if len(realmEventsConfig.EnabledEventTypes) != 67 { return fmt.Errorf("exptected to enabled_event_types to contain all(67) event types, but it contains %d", len(realmEventsConfig.EnabledEventTypes)) } @@ -203,7 +203,7 @@ func getRealmEventsFromState(s *terraform.State, resourceName string) (*keycloak realm := rs.Primary.Attributes["realm_id"] - realmEventsConfig, err := keycloakClient.GetRealmEventsConfig(realm) + realmEventsConfig, err := keycloakClient.GetRealmEventsConfig(testCtx, realm) if err != nil { return nil, fmt.Errorf("error getting realm events config: %s", err) } diff --git a/provider/resource_keycloak_realm_keystore_aes_generated.go b/provider/resource_keycloak_realm_keystore_aes_generated.go index 107bab3c0..2adc6b5cf 100644 --- a/provider/resource_keycloak_realm_keystore_aes_generated.go +++ b/provider/resource_keycloak_realm_keystore_aes_generated.go @@ -1,11 +1,11 @@ package provider import ( - "fmt" + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" - "strings" ) var ( @@ -14,12 +14,12 @@ var ( func resourceKeycloakRealmKeystoreAesGenerated() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakRealmKeystoreAesGeneratedCreate, - Read: resourceKeycloakRealmKeystoreAesGeneratedRead, - Update: resourceKeycloakRealmKeystoreAesGeneratedUpdate, - Delete: resourceKeycloakRealmKeystoreAesGeneratedDelete, + CreateContext: resourceKeycloakRealmKeystoreAesGeneratedCreate, + ReadContext: resourceKeycloakRealmKeystoreAesGeneratedRead, + UpdateContext: resourceKeycloakRealmKeystoreAesGeneratedUpdate, + DeleteContext: resourceKeycloakRealmKeystoreAesGeneratedDelete, Importer: &schema.ResourceImporter{ - State: resourceKeycloakRealmKeystoreAesGeneratedImport, + StateContext: resourceKeycloakRealmKeystoreGenericImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -90,85 +90,72 @@ func setRealmKeystoreAesGeneratedData(data *schema.ResourceData, realmKey *keycl return nil } -func resourceKeycloakRealmKeystoreAesGeneratedCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreAesGeneratedCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmKey, err := getRealmKeystoreAesGeneratedFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewRealmKeystoreAesGenerated(realmKey) + err = keycloakClient.NewRealmKeystoreAesGenerated(ctx, realmKey) if err != nil { - return err + return diag.FromErr(err) } err = setRealmKeystoreAesGeneratedData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakRealmKeystoreAesGeneratedRead(data, meta) + return resourceKeycloakRealmKeystoreAesGeneratedRead(ctx, data, meta) } -func resourceKeycloakRealmKeystoreAesGeneratedRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreAesGeneratedRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - realmKey, err := keycloakClient.GetRealmKeystoreAesGenerated(realmId, id) + realmKey, err := keycloakClient.GetRealmKeystoreAesGenerated(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } err = setRealmKeystoreAesGeneratedData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmKeystoreAesGeneratedUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreAesGeneratedUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmKey, err := getRealmKeystoreAesGeneratedFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateRealmKeystoreAesGenerated(realmKey) + err = keycloakClient.UpdateRealmKeystoreAesGenerated(ctx, realmKey) if err != nil { - return err + return diag.FromErr(err) } err = setRealmKeystoreAesGeneratedData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmKeystoreAesGeneratedDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreAesGeneratedDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteRealmKeystoreAesGenerated(realmId, id) -} - -func resourceKeycloakRealmKeystoreAesGeneratedImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { - parts := strings.Split(d.Id(), "/") - - if len(parts) != 2 { - return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{keystoreId}}") - } - - d.Set("realm_id", parts[0]) - d.SetId(parts[1]) - - return []*schema.ResourceData{d}, nil + return diag.FromErr(keycloakClient.DeleteRealmKeystoreAesGenerated(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_realm_keystore_aes_generated_test.go b/provider/resource_keycloak_realm_keystore_aes_generated_test.go index 384d46f8d..2ae7c1815 100644 --- a/provider/resource_keycloak_realm_keystore_aes_generated_test.go +++ b/provider/resource_keycloak_realm_keystore_aes_generated_test.go @@ -25,6 +25,12 @@ func TestAccKeycloakRealmKeystoreAesGenerated_basic(t *testing.T) { Config: testKeycloakRealmKeystoreAesGenerated_basic(aesName), Check: testAccCheckRealmKeystoreAesGeneratedExists("keycloak_realm_keystore_aes_generated.realm_aes"), }, + { + ResourceName: "keycloak_realm_keystore_aes_generated.realm_aes", + ImportState: true, + ImportStateVerify: true, + ImportStateIdFunc: getRealmKeystoreGenericImportId("keycloak_realm_keystore_aes_generated.realm_aes"), + }, }, }) } @@ -47,7 +53,7 @@ func TestAccKeycloakRealmKeystoreAesGenerated_createAfterManualDestroy(t *testin }, { PreConfig: func() { - err := keycloakClient.DeleteRealmKeystoreAesGenerated(aes.RealmId, aes.Id) + err := keycloakClient.DeleteRealmKeystoreAesGenerated(testCtx, aes.RealmId, aes.Id) if err != nil { t.Fatal(err) } @@ -158,7 +164,7 @@ func testAccCheckRealmKeystoreAesGeneratedDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapGroupKeystore, _ := keycloakClient.GetRealmKeystoreAesGenerated(realm, id) + ldapGroupKeystore, _ := keycloakClient.GetRealmKeystoreAesGenerated(testCtx, realm, id) if ldapGroupKeystore != nil { return fmt.Errorf("aes keystore with id %s still exists", id) } @@ -179,7 +185,7 @@ func getKeycloakRealmKeystoreAesGeneratedFromState(s *terraform.State, id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - realmKeystore, err := keycloakClient.GetRealmKeystoreAesGenerated(realm, id) + realmKeystore, err := keycloakClient.GetRealmKeystoreAesGenerated(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting aes keystore with id %s: %s", id, err) } @@ -187,21 +193,6 @@ func getKeycloakRealmKeystoreAesGeneratedFromState(s *terraform.State, return realmKeystore, nil } -func getRealmKeystoreAesGeneratedImportId(resourceName string) resource.ImportStateIdFunc { - return func(s *terraform.State) (string, error) { - rs, ok := s.RootModule().Resources[resourceName] - if !ok { - return "", fmt.Errorf("resource not found: %s", resourceName) - } - - id := rs.Primary.ID - realmId := rs.Primary.Attributes["realm_id"] - providerId := "aes-generated" - - return fmt.Sprintf("%s/%s/%s", realmId, providerId, id), nil - } -} - func testKeycloakRealmKeystoreAesGenerated_basic(aesName string) string { return fmt.Sprintf(` data "keycloak_realm" "realm" { diff --git a/provider/resource_keycloak_realm_keystore_ecdsa_generated.go b/provider/resource_keycloak_realm_keystore_ecdsa_generated.go index f62e0fa79..1ee3022a1 100644 --- a/provider/resource_keycloak_realm_keystore_ecdsa_generated.go +++ b/provider/resource_keycloak_realm_keystore_ecdsa_generated.go @@ -1,11 +1,11 @@ package provider import ( - "fmt" + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" - "strings" ) var ( @@ -14,12 +14,12 @@ var ( func resourceKeycloakRealmKeystoreEcdsaGenerated() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakRealmKeystoreEcdsaGeneratedCreate, - Read: resourceKeycloakRealmKeystoreEcdsaGeneratedRead, - Update: resourceKeycloakRealmKeystoreEcdsaGeneratedUpdate, - Delete: resourceKeycloakRealmKeystoreEcdsaGeneratedDelete, + CreateContext: resourceKeycloakRealmKeystoreEcdsaGeneratedCreate, + ReadContext: resourceKeycloakRealmKeystoreEcdsaGeneratedRead, + UpdateContext: resourceKeycloakRealmKeystoreEcdsaGeneratedUpdate, + DeleteContext: resourceKeycloakRealmKeystoreEcdsaGeneratedDelete, Importer: &schema.ResourceImporter{ - State: resourceKeycloakRealmKeystoreEcdsaGeneratedImport, + StateContext: resourceKeycloakRealmKeystoreGenericImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -90,85 +90,72 @@ func setRealmKeystoreEcdsaGeneratedData(data *schema.ResourceData, realmKey *key return nil } -func resourceKeycloakRealmKeystoreEcdsaGeneratedCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreEcdsaGeneratedCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmKey, err := getRealmKeystoreEcdsaGeneratedFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewRealmKeystoreEcdsaGenerated(realmKey) + err = keycloakClient.NewRealmKeystoreEcdsaGenerated(ctx, realmKey) if err != nil { - return err + return diag.FromErr(err) } err = setRealmKeystoreEcdsaGeneratedData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakRealmKeystoreEcdsaGeneratedRead(data, meta) + return resourceKeycloakRealmKeystoreEcdsaGeneratedRead(ctx, data, meta) } -func resourceKeycloakRealmKeystoreEcdsaGeneratedRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreEcdsaGeneratedRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - realmKey, err := keycloakClient.GetRealmKeystoreEcdsaGenerated(realmId, id) + realmKey, err := keycloakClient.GetRealmKeystoreEcdsaGenerated(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } err = setRealmKeystoreEcdsaGeneratedData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmKeystoreEcdsaGeneratedUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreEcdsaGeneratedUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmKey, err := getRealmKeystoreEcdsaGeneratedFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateRealmKeystoreEcdsaGenerated(realmKey) + err = keycloakClient.UpdateRealmKeystoreEcdsaGenerated(ctx, realmKey) if err != nil { - return err + return diag.FromErr(err) } err = setRealmKeystoreEcdsaGeneratedData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmKeystoreEcdsaGeneratedDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreEcdsaGeneratedDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteRealmKeystoreEcdsaGenerated(realmId, id) -} - -func resourceKeycloakRealmKeystoreEcdsaGeneratedImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { - parts := strings.Split(d.Id(), "/") - - if len(parts) != 2 { - return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{keystoreId}}") - } - - d.Set("realm_id", parts[0]) - d.SetId(parts[1]) - - return []*schema.ResourceData{d}, nil + return diag.FromErr(keycloakClient.DeleteRealmKeystoreEcdsaGenerated(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_realm_keystore_ecdsa_generated_test.go b/provider/resource_keycloak_realm_keystore_ecdsa_generated_test.go index 3691d9034..9acf7ec59 100644 --- a/provider/resource_keycloak_realm_keystore_ecdsa_generated_test.go +++ b/provider/resource_keycloak_realm_keystore_ecdsa_generated_test.go @@ -25,6 +25,12 @@ func TestAccKeycloakRealmKeystoreEcdsaGenerated_basic(t *testing.T) { Config: testKeycloakRealmKeystoreEcdsaGenerated_basic(ecdsaName), Check: testAccCheckRealmKeystoreEcdsaGeneratedExists("keycloak_realm_keystore_ecdsa_generated.realm_ecdsa"), }, + { + ResourceName: "keycloak_realm_keystore_ecdsa_generated.realm_ecdsa", + ImportState: true, + ImportStateVerify: true, + ImportStateIdFunc: getRealmKeystoreGenericImportId("keycloak_realm_keystore_ecdsa_generated.realm_ecdsa"), + }, }, }) } @@ -47,7 +53,7 @@ func TestAccKeycloakRealmKeystoreEcdsaGenerated_createAfterManualDestroy(t *test }, { PreConfig: func() { - err := keycloakClient.DeleteRealmKeystoreEcdsaGenerated(ecdsa.RealmId, ecdsa.Id) + err := keycloakClient.DeleteRealmKeystoreEcdsaGenerated(testCtx, ecdsa.RealmId, ecdsa.Id) if err != nil { t.Fatal(err) } @@ -158,7 +164,7 @@ func testAccCheckRealmKeystoreEcdsaGeneratedDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ecdsa, _ := keycloakClient.GetRealmKeystoreEcdsaGenerated(realm, id) + ecdsa, _ := keycloakClient.GetRealmKeystoreEcdsaGenerated(testCtx, realm, id) if ecdsa != nil { return fmt.Errorf("ecdsa keystore with id %s still exists", id) } @@ -179,7 +185,7 @@ func getKeycloakRealmKeystoreEcdsaGeneratedFromState(s *terraform.State, id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - realmKeystore, err := keycloakClient.GetRealmKeystoreEcdsaGenerated(realm, id) + realmKeystore, err := keycloakClient.GetRealmKeystoreEcdsaGenerated(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting ecdsa keystore with id %s: %s", id, err) } @@ -187,21 +193,6 @@ func getKeycloakRealmKeystoreEcdsaGeneratedFromState(s *terraform.State, return realmKeystore, nil } -func getRealmKeystoreEcdsaGeneratedImportId(resourceName string) resource.ImportStateIdFunc { - return func(s *terraform.State) (string, error) { - rs, ok := s.RootModule().Resources[resourceName] - if !ok { - return "", fmt.Errorf("resource not found: %s", resourceName) - } - - id := rs.Primary.ID - realmId := rs.Primary.Attributes["realm_id"] - providerId := "ecdsa-generated" - - return fmt.Sprintf("%s/%s/%s", realmId, providerId, id), nil - } -} - func testKeycloakRealmKeystoreEcdsaGenerated_basic(ecdsaName string) string { return fmt.Sprintf(` data "keycloak_realm" "realm" { diff --git a/provider/resource_keycloak_realm_keystore_hmac_generated.go b/provider/resource_keycloak_realm_keystore_hmac_generated.go index a7cdabe26..607095b67 100644 --- a/provider/resource_keycloak_realm_keystore_hmac_generated.go +++ b/provider/resource_keycloak_realm_keystore_hmac_generated.go @@ -1,11 +1,11 @@ package provider import ( - "fmt" + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" - "strings" ) var ( @@ -15,12 +15,12 @@ var ( func resourceKeycloakRealmKeystoreHmacGenerated() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakRealmKeystoreHmacGeneratedCreate, - Read: resourceKeycloakRealmKeystoreHmacGeneratedRead, - Update: resourceKeycloakRealmKeystoreHmacGeneratedUpdate, - Delete: resourceKeycloakRealmKeystoreHmacGeneratedDelete, + CreateContext: resourceKeycloakRealmKeystoreHmacGeneratedCreate, + ReadContext: resourceKeycloakRealmKeystoreHmacGeneratedRead, + UpdateContext: resourceKeycloakRealmKeystoreHmacGeneratedUpdate, + DeleteContext: resourceKeycloakRealmKeystoreHmacGeneratedDelete, Importer: &schema.ResourceImporter{ - State: resourceKeycloakRealmKeystoreHmacGeneratedImport, + StateContext: resourceKeycloakRealmKeystoreGenericImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -100,85 +100,72 @@ func setRealmKeystoreHmacGeneratedData(data *schema.ResourceData, realmKey *keyc return nil } -func resourceKeycloakRealmKeystoreHmacGeneratedCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreHmacGeneratedCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmKey, err := getRealmKeystoreHmacGeneratedFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewRealmKeystoreHmacGenerated(realmKey) + err = keycloakClient.NewRealmKeystoreHmacGenerated(ctx, realmKey) if err != nil { - return err + return diag.FromErr(err) } err = setRealmKeystoreHmacGeneratedData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakRealmKeystoreHmacGeneratedRead(data, meta) + return resourceKeycloakRealmKeystoreHmacGeneratedRead(ctx, data, meta) } -func resourceKeycloakRealmKeystoreHmacGeneratedRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreHmacGeneratedRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - realmKey, err := keycloakClient.GetRealmKeystoreHmacGenerated(realmId, id) + realmKey, err := keycloakClient.GetRealmKeystoreHmacGenerated(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } err = setRealmKeystoreHmacGeneratedData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmKeystoreHmacGeneratedUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreHmacGeneratedUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmKey, err := getRealmKeystoreHmacGeneratedFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateRealmKeystoreHmacGenerated(realmKey) + err = keycloakClient.UpdateRealmKeystoreHmacGenerated(ctx, realmKey) if err != nil { - return err + return diag.FromErr(err) } err = setRealmKeystoreHmacGeneratedData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmKeystoreHmacGeneratedDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreHmacGeneratedDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteRealmKeystoreHmacGenerated(realmId, id) -} - -func resourceKeycloakRealmKeystoreHmacGeneratedImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { - parts := strings.Split(d.Id(), "/") - - if len(parts) != 2 { - return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{keystoreId}}") - } - - d.Set("realm_id", parts[0]) - d.SetId(parts[1]) - - return []*schema.ResourceData{d}, nil + return diag.FromErr(keycloakClient.DeleteRealmKeystoreHmacGenerated(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_realm_keystore_hmac_generated_test.go b/provider/resource_keycloak_realm_keystore_hmac_generated_test.go index 96df07482..f14e6d1a8 100644 --- a/provider/resource_keycloak_realm_keystore_hmac_generated_test.go +++ b/provider/resource_keycloak_realm_keystore_hmac_generated_test.go @@ -25,6 +25,12 @@ func TestAccKeycloakRealmKeystoreHmacGenerated_basic(t *testing.T) { Config: testKeycloakRealmKeystoreHmacGenerated_basic(hmacName), Check: testAccCheckRealmKeystoreHmacGeneratedExists("keycloak_realm_keystore_hmac_generated.realm_hmac"), }, + { + ResourceName: "keycloak_realm_keystore_hmac_generated.realm_hmac", + ImportState: true, + ImportStateVerify: true, + ImportStateIdFunc: getRealmKeystoreGenericImportId("keycloak_realm_keystore_hmac_generated.realm_hmac"), + }, }, }) } @@ -47,7 +53,7 @@ func TestAccKeycloakRealmKeystoreHmacGenerated_createAfterManualDestroy(t *testi }, { PreConfig: func() { - err := keycloakClient.DeleteRealmKeystoreHmacGenerated(hmac.RealmId, hmac.Id) + err := keycloakClient.DeleteRealmKeystoreHmacGenerated(testCtx, hmac.RealmId, hmac.Id) if err != nil { t.Fatal(err) } @@ -162,7 +168,7 @@ func testAccCheckRealmKeystoreHmacGeneratedDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapGroupKeystore, _ := keycloakClient.GetRealmKeystoreHmacGenerated(realm, id) + ldapGroupKeystore, _ := keycloakClient.GetRealmKeystoreHmacGenerated(testCtx, realm, id) if ldapGroupKeystore != nil { return fmt.Errorf("hmac keystore with id %s still exists", id) } @@ -183,7 +189,7 @@ func getKeycloakRealmKeystoreHmacGeneratedFromState(s *terraform.State, id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - realmKeystore, err := keycloakClient.GetRealmKeystoreHmacGenerated(realm, id) + realmKeystore, err := keycloakClient.GetRealmKeystoreHmacGenerated(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting hmac keystore with id %s: %s", id, err) } @@ -191,21 +197,6 @@ func getKeycloakRealmKeystoreHmacGeneratedFromState(s *terraform.State, return realmKeystore, nil } -func getRealmKeystoreHmacGeneratedImportId(resourceName string) resource.ImportStateIdFunc { - return func(s *terraform.State) (string, error) { - rs, ok := s.RootModule().Resources[resourceName] - if !ok { - return "", fmt.Errorf("resource not found: %s", resourceName) - } - - id := rs.Primary.ID - realmId := rs.Primary.Attributes["realm_id"] - providerId := "hmac-generated" - - return fmt.Sprintf("%s/%s/%s", realmId, providerId, id), nil - } -} - func testKeycloakRealmKeystoreHmacGenerated_basic(hmacName string) string { return fmt.Sprintf(` data "keycloak_realm" "realm" { diff --git a/provider/resource_keycloak_realm_keystore_java_keystore.go b/provider/resource_keycloak_realm_keystore_java_keystore.go index 909d7fe1f..9fb37b882 100644 --- a/provider/resource_keycloak_realm_keystore_java_keystore.go +++ b/provider/resource_keycloak_realm_keystore_java_keystore.go @@ -1,11 +1,11 @@ package provider import ( - "fmt" + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" - "strings" ) var ( @@ -14,12 +14,12 @@ var ( func resourceKeycloakRealmKeystoreJavaKeystore() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakRealmKeystoreJavaKeystoreCreate, - Read: resourceKeycloakRealmKeystoreJavaKeystoreRead, - Update: resourceKeycloakRealmKeystoreJavaKeystoreUpdate, - Delete: resourceKeycloakRealmKeystoreJavaKeystoreDelete, + CreateContext: resourceKeycloakRealmKeystoreJavaKeystoreCreate, + ReadContext: resourceKeycloakRealmKeystoreJavaKeystoreRead, + UpdateContext: resourceKeycloakRealmKeystoreJavaKeystoreUpdate, + DeleteContext: resourceKeycloakRealmKeystoreJavaKeystoreDelete, Importer: &schema.ResourceImporter{ - State: resourceKeycloakRealmKeystoreJavaKeystoreImport, + StateContext: resourceKeycloakRealmKeystoreGenericImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -119,85 +119,72 @@ func setRealmKeystoreJavaKeystoreData(data *schema.ResourceData, realmKey *keycl return nil } -func resourceKeycloakRealmKeystoreJavaKeystoreCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreJavaKeystoreCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmKey, err := getRealmKeystoreJavaKeystoreFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewRealmKeystoreJavaKeystore(realmKey) + err = keycloakClient.NewRealmKeystoreJavaKeystore(ctx, realmKey) if err != nil { - return err + return diag.FromErr(err) } err = setRealmKeystoreJavaKeystoreData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakRealmKeystoreJavaKeystoreRead(data, meta) + return resourceKeycloakRealmKeystoreJavaKeystoreRead(ctx, data, meta) } -func resourceKeycloakRealmKeystoreJavaKeystoreRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreJavaKeystoreRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - realmKey, err := keycloakClient.GetRealmKeystoreJavaKeystore(realmId, id) + realmKey, err := keycloakClient.GetRealmKeystoreJavaKeystore(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } err = setRealmKeystoreJavaKeystoreData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmKeystoreJavaKeystoreUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreJavaKeystoreUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmKey, err := getRealmKeystoreJavaKeystoreFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateRealmKeystoreJavaKeystore(realmKey) + err = keycloakClient.UpdateRealmKeystoreJavaKeystore(ctx, realmKey) if err != nil { - return err + return diag.FromErr(err) } err = setRealmKeystoreJavaKeystoreData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmKeystoreJavaKeystoreDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreJavaKeystoreDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteRealmKeystoreJavaKeystore(realmId, id) -} - -func resourceKeycloakRealmKeystoreJavaKeystoreImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { - parts := strings.Split(d.Id(), "/") - - if len(parts) != 2 { - return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{keystoreId}}") - } - - d.Set("realm_id", parts[0]) - d.SetId(parts[1]) - - return []*schema.ResourceData{d}, nil + return diag.FromErr(keycloakClient.DeleteRealmKeystoreJavaKeystore(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_realm_keystore_java_kyestore_test.go b/provider/resource_keycloak_realm_keystore_java_kyestore_test.go index e8de83a14..dd3d5d5cb 100644 --- a/provider/resource_keycloak_realm_keystore_java_kyestore_test.go +++ b/provider/resource_keycloak_realm_keystore_java_kyestore_test.go @@ -27,6 +27,12 @@ func TestAccKeycloakRealmKeystoreJava_basic(t *testing.T) { Config: testKeycloakRealmKeystoreJava_basic(javaKeystoreName), Check: testAccCheckRealmKeystoreJavaExists("keycloak_realm_keystore_java_keystore.realm_java_keystore"), }, + { + ResourceName: "keycloak_realm_keystore_java_keystore.realm_java_keystore", + ImportState: true, + ImportStateVerify: true, + ImportStateIdFunc: getRealmKeystoreGenericImportId("keycloak_realm_keystore_java_keystore.realm_java_keystore"), + }, }, }) } @@ -51,7 +57,7 @@ func TestAccKeycloakRealmKeystoreJava_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteRealmKeystoreJavaKeystore(javaKeystore.RealmId, javaKeystore.Id) + err := keycloakClient.DeleteRealmKeystoreJavaKeystore(testCtx, javaKeystore.RealmId, javaKeystore.Id) if err != nil { t.Fatal(err) } @@ -167,7 +173,7 @@ func testAccCheckRealmKeystoreJavaDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapGroupKeystore, _ := keycloakClient.GetRealmKeystoreJavaKeystore(realm, id) + ldapGroupKeystore, _ := keycloakClient.GetRealmKeystoreJavaKeystore(testCtx, realm, id) if ldapGroupKeystore != nil { return fmt.Errorf("rsa keystore with id %s still exists", id) } @@ -188,7 +194,7 @@ func getKeycloakRealmKeystoreJavaFromState(s *terraform.State, id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - realmKeystore, err := keycloakClient.GetRealmKeystoreJavaKeystore(realm, id) + realmKeystore, err := keycloakClient.GetRealmKeystoreJavaKeystore(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting rsa keystore with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_realm_keystore_rsa.go b/provider/resource_keycloak_realm_keystore_rsa.go index 3bf83f0ed..9cc82a39f 100644 --- a/provider/resource_keycloak_realm_keystore_rsa.go +++ b/provider/resource_keycloak_realm_keystore_rsa.go @@ -1,11 +1,11 @@ package provider import ( - "fmt" + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" - "strings" ) var ( @@ -14,12 +14,12 @@ var ( func resourceKeycloakRealmKeystoreRsa() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakRealmKeystoreRsaCreate, - Read: resourceKeycloakRealmKeystoreRsaRead, - Update: resourceKeycloakRealmKeystoreRsaUpdate, - Delete: resourceKeycloakRealmKeystoreRsaDelete, + CreateContext: resourceKeycloakRealmKeystoreRsaCreate, + ReadContext: resourceKeycloakRealmKeystoreRsaRead, + UpdateContext: resourceKeycloakRealmKeystoreRsaUpdate, + DeleteContext: resourceKeycloakRealmKeystoreRsaDelete, Importer: &schema.ResourceImporter{ - State: resourceKeycloakRealmKeystoreRsaImport, + StateContext: resourceKeycloakRealmKeystoreGenericImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -71,7 +71,7 @@ func resourceKeycloakRealmKeystoreRsa() *schema.Resource { } } -func getRealmKeystoreRsaFromData(keycloakClient *keycloak.KeycloakClient, data *schema.ResourceData) (*keycloak.RealmKeystoreRsa, error) { +func getRealmKeystoreRsaFromData(data *schema.ResourceData) *keycloak.RealmKeystoreRsa { mapper := &keycloak.RealmKeystoreRsa{ Id: data.Id(), Name: data.Get("name").(string), @@ -84,16 +84,11 @@ func getRealmKeystoreRsaFromData(keycloakClient *keycloak.KeycloakClient, data * PrivateKey: data.Get("private_key").(string), Certificate: data.Get("certificate").(string), } - _, err := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_11) - if err != nil { - return nil, err - } - return mapper, nil + return mapper } -func setRealmKeystoreRsaData(keycloakClient *keycloak.KeycloakClient, data *schema.ResourceData, - realmKey *keycloak.RealmKeystoreRsa, readFunc bool) error { +func setRealmKeystoreRsaData(data *schema.ResourceData, realmKey *keycloak.RealmKeystoreRsa) { data.SetId(realmKey.Id) data.Set("name", realmKey.Name) @@ -107,94 +102,68 @@ func setRealmKeystoreRsaData(keycloakClient *keycloak.KeycloakClient, data *sche data.Set("private_key", realmKey.PrivateKey) data.Set("certificate", realmKey.Certificate) } - - _, err := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_11) - if err != nil { - return err - } - - return nil } -func resourceKeycloakRealmKeystoreRsaCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreRsaCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - realmKey, err := getRealmKeystoreRsaFromData(keycloakClient, data) - if err != nil { - return err - } + realmKey := getRealmKeystoreRsaFromData(data) - err = keycloakClient.NewRealmKeystoreRsa(realmKey) + err := keycloakClient.NewRealmKeystoreRsa(ctx, realmKey) if err != nil { - return err + return diag.FromErr(err) } - err = setRealmKeystoreRsaData(keycloakClient, data, realmKey, false) + setRealmKeystoreRsaData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakRealmKeystoreRsaRead(data, meta) + return resourceKeycloakRealmKeystoreRsaRead(ctx, data, meta) } -func resourceKeycloakRealmKeystoreRsaRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreRsaRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - realmKey, err := keycloakClient.GetRealmKeystoreRsa(realmId, id) + realmKey, err := keycloakClient.GetRealmKeystoreRsa(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } - err = setRealmKeystoreRsaData(keycloakClient, data, realmKey, true) + setRealmKeystoreRsaData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmKeystoreRsaUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreRsaUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - realmKey, err := getRealmKeystoreRsaFromData(keycloakClient, data) - if err != nil { - return err - } + realmKey := getRealmKeystoreRsaFromData(data) - err = keycloakClient.UpdateRealmKeystoreRsa(realmKey) + err := keycloakClient.UpdateRealmKeystoreRsa(ctx, realmKey) if err != nil { - return err + return diag.FromErr(err) } - err = setRealmKeystoreRsaData(keycloakClient, data, realmKey, false) + setRealmKeystoreRsaData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmKeystoreRsaDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreRsaDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteRealmKeystoreRsa(realmId, id) -} - -func resourceKeycloakRealmKeystoreRsaImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { - parts := strings.Split(d.Id(), "/") - - if len(parts) != 2 { - return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{keystoreId}}") - } - - d.Set("realm_id", parts[0]) - d.SetId(parts[1]) - - return []*schema.ResourceData{d}, nil + return diag.FromErr(keycloakClient.DeleteRealmKeystoreRsa(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_realm_keystore_rsa_generated.go b/provider/resource_keycloak_realm_keystore_rsa_generated.go index 847bea387..0b230d4ea 100644 --- a/provider/resource_keycloak_realm_keystore_rsa_generated.go +++ b/provider/resource_keycloak_realm_keystore_rsa_generated.go @@ -1,11 +1,11 @@ package provider import ( - "fmt" + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" - "strings" ) var ( @@ -15,12 +15,12 @@ var ( func resourceKeycloakRealmKeystoreRsaGenerated() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakRealmKeystoreRsaGeneratedCreate, - Read: resourceKeycloakRealmKeystoreRsaGeneratedRead, - Update: resourceKeycloakRealmKeystoreRsaGeneratedUpdate, - Delete: resourceKeycloakRealmKeystoreRsaGeneratedDelete, + CreateContext: resourceKeycloakRealmKeystoreRsaGeneratedCreate, + ReadContext: resourceKeycloakRealmKeystoreRsaGeneratedRead, + UpdateContext: resourceKeycloakRealmKeystoreRsaGeneratedUpdate, + DeleteContext: resourceKeycloakRealmKeystoreRsaGeneratedDelete, Importer: &schema.ResourceImporter{ - State: resourceKeycloakRealmKeystoreRsaGeneratedImport, + StateContext: resourceKeycloakRealmKeystoreGenericImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -100,85 +100,72 @@ func setRealmKeystoreRsaGeneratedData(data *schema.ResourceData, realmKey *keycl return nil } -func resourceKeycloakRealmKeystoreRsaGeneratedCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreRsaGeneratedCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmKey, err := getRealmKeystoreRsaGeneratedFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewRealmKeystoreRsaGenerated(realmKey) + err = keycloakClient.NewRealmKeystoreRsaGenerated(ctx, realmKey) if err != nil { - return err + return diag.FromErr(err) } err = setRealmKeystoreRsaGeneratedData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakRealmKeystoreRsaGeneratedRead(data, meta) + return resourceKeycloakRealmKeystoreRsaGeneratedRead(ctx, data, meta) } -func resourceKeycloakRealmKeystoreRsaGeneratedRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreRsaGeneratedRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - realmKey, err := keycloakClient.GetRealmKeystoreRsaGenerated(realmId, id) + realmKey, err := keycloakClient.GetRealmKeystoreRsaGenerated(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } err = setRealmKeystoreRsaGeneratedData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmKeystoreRsaGeneratedUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreRsaGeneratedUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmKey, err := getRealmKeystoreRsaGeneratedFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateRealmKeystoreRsaGenerated(realmKey) + err = keycloakClient.UpdateRealmKeystoreRsaGenerated(ctx, realmKey) if err != nil { - return err + return diag.FromErr(err) } err = setRealmKeystoreRsaGeneratedData(data, realmKey) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmKeystoreRsaGeneratedDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmKeystoreRsaGeneratedDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteRealmKeystoreRsaGenerated(realmId, id) -} - -func resourceKeycloakRealmKeystoreRsaGeneratedImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { - parts := strings.Split(d.Id(), "/") - - if len(parts) != 2 { - return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{keystoreId}}") - } - - d.Set("realm_id", parts[0]) - d.SetId(parts[1]) - - return []*schema.ResourceData{d}, nil + return diag.FromErr(keycloakClient.DeleteRealmKeystoreRsaGenerated(ctx, realmId, id)) } diff --git a/provider/resource_keycloak_realm_keystore_rsa_generated_test.go b/provider/resource_keycloak_realm_keystore_rsa_generated_test.go index 10dfddf34..ed9e3f959 100644 --- a/provider/resource_keycloak_realm_keystore_rsa_generated_test.go +++ b/provider/resource_keycloak_realm_keystore_rsa_generated_test.go @@ -25,6 +25,12 @@ func TestAccKeycloakRealmKeystoreRsaGenerated_basic(t *testing.T) { Config: testKeycloakRealmKeystoreRsaGenerated_basic(rsaName), Check: testAccCheckRealmKeystoreRsaGeneratedExists("keycloak_realm_keystore_rsa_generated.realm_rsa"), }, + { + ResourceName: "keycloak_realm_keystore_rsa_generated.realm_rsa", + ImportState: true, + ImportStateVerify: true, + ImportStateIdFunc: getRealmKeystoreGenericImportId("keycloak_realm_keystore_rsa_generated.realm_rsa"), + }, }, }) } @@ -47,7 +53,7 @@ func TestAccKeycloakRealmKeystoreRsaGenerated_createAfterManualDestroy(t *testin }, { PreConfig: func() { - err := keycloakClient.DeleteRealmKeystoreRsaGenerated(rsa.RealmId, rsa.Id) + err := keycloakClient.DeleteRealmKeystoreRsaGenerated(testCtx, rsa.RealmId, rsa.Id) if err != nil { t.Fatal(err) } @@ -183,7 +189,7 @@ func testAccCheckRealmKeystoreRsaGeneratedDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - ldapGroupKeystore, _ := keycloakClient.GetRealmKeystoreRsaGenerated(realm, id) + ldapGroupKeystore, _ := keycloakClient.GetRealmKeystoreRsaGenerated(testCtx, realm, id) if ldapGroupKeystore != nil { return fmt.Errorf("rsa keystore with id %s still exists", id) } @@ -204,7 +210,7 @@ func getKeycloakRealmKeystoreRsaGeneratedFromState(s *terraform.State, id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - realmKeystore, err := keycloakClient.GetRealmKeystoreRsaGenerated(realm, id) + realmKeystore, err := keycloakClient.GetRealmKeystoreRsaGenerated(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting rsa keystore with id %s: %s", id, err) } @@ -212,21 +218,6 @@ func getKeycloakRealmKeystoreRsaGeneratedFromState(s *terraform.State, return realmKeystore, nil } -func getRealmKeystoreRsaGeneratedImportId(resourceName string) resource.ImportStateIdFunc { - return func(s *terraform.State) (string, error) { - rs, ok := s.RootModule().Resources[resourceName] - if !ok { - return "", fmt.Errorf("resource not found: %s", resourceName) - } - - id := rs.Primary.ID - realmId := rs.Primary.Attributes["realm_id"] - providerId := "rsa-generated" - - return fmt.Sprintf("%s/%s/%s", realmId, providerId, id), nil - } -} - func testKeycloakRealmKeystoreRsaGenerated_basic(rsaName string) string { return fmt.Sprintf(` data "keycloak_realm" "realm" { diff --git a/provider/resource_keycloak_realm_keystore_rsa_test.go b/provider/resource_keycloak_realm_keystore_rsa_test.go index 0775726e8..a17519d86 100644 --- a/provider/resource_keycloak_realm_keystore_rsa_test.go +++ b/provider/resource_keycloak_realm_keystore_rsa_test.go @@ -14,7 +14,6 @@ import ( "log" "math/big" "regexp" - "strconv" "strings" "testing" "time" @@ -35,6 +34,12 @@ func TestAccKeycloakRealmKeystoreRsa_basic(t *testing.T) { Config: testKeycloakRealmKeystoreRsa_basic(rsaName, privateKey, certificate), Check: testAccCheckRealmKeystoreRsaExists("keycloak_realm_keystore_rsa.realm_rsa"), }, + // we can't verify this import test because there's no way to get the private key / cert from the Keycloak API + { + ResourceName: "keycloak_realm_keystore_rsa.realm_rsa", + ImportState: true, + ImportStateIdFunc: getRealmKeystoreGenericImportId("keycloak_realm_keystore_rsa.realm_rsa"), + }, }, }) } @@ -58,7 +63,7 @@ func TestAccKeycloakRealmKeystoreRsa_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteRealmKeystoreRsa(keystoreRsa.RealmId, keystoreRsa.Id) + err := keycloakClient.DeleteRealmKeystoreRsa(testCtx, keystoreRsa.RealmId, keystoreRsa.Id) if err != nil { t.Fatal(err) } @@ -129,7 +134,7 @@ func testAccCheckRealmKeystoreRsaDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - keystoreRsa, _ := keycloakClient.GetRealmKeystoreRsa(realm, id) + keystoreRsa, _ := keycloakClient.GetRealmKeystoreRsa(testCtx, realm, id) if keystoreRsa != nil { return fmt.Errorf("rsa keystore with id %s still exists", id) } @@ -150,7 +155,7 @@ func getKeycloakRealmKeystoreRsaFromState(s *terraform.State, id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - realmKeystore, err := keycloakClient.GetRealmKeystoreRsa(realm, id) + realmKeystore, err := keycloakClient.GetRealmKeystoreRsa(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting rsa keystore with id %s: %s", id, err) } @@ -158,21 +163,6 @@ func getKeycloakRealmKeystoreRsaFromState(s *terraform.State, return realmKeystore, nil } -func getRealmKeystoreRsaImportId(resourceName string) resource.ImportStateIdFunc { - return func(s *terraform.State) (string, error) { - rs, ok := s.RootModule().Resources[resourceName] - if !ok { - return "", fmt.Errorf("resource not found: %s", resourceName) - } - - id := rs.Primary.ID - realmId := rs.Primary.Attributes["realm_id"] - providerId := "rsa-generated" - - return fmt.Sprintf("%s/%s/%s", realmId, providerId, id), nil - } -} - func generateKeyAndCert(bits int) (string, string) { key, err := rsa.GenerateKey(rand.Reader, bits) if err != nil { @@ -256,22 +246,3 @@ resource "keycloak_realm_keystore_rsa" "realm_rsa" { } `, testAccRealmUserFederation.Realm, rsaName, attr, val, privateKey, certificate) } - -func testKeycloakRealmKeystoreRsa_basicFromInterface(keystore *keycloak.RealmKeystoreRsa) string { - return fmt.Sprintf(` -data "keycloak_realm" "realm" { - realm = "%s" -} - -resource "keycloak_realm_keystore_rsa" "realm_rsa" { - name = "%s" - realm_id = data.keycloak_realm.realm.id - - priority = %s - algorithm = "%s" - - private_key = "%s" - certificate = "%s" -} - `, testAccRealmUserFederation.Realm, keystore.Name, strconv.Itoa(keystore.Priority), keystore.Algorithm, keystore.PrivateKey, keystore.Certificate) -} diff --git a/provider/resource_keycloak_realm_test.go b/provider/resource_keycloak_realm_test.go index 730029fc3..1c80e7ab6 100644 --- a/provider/resource_keycloak_realm_test.go +++ b/provider/resource_keycloak_realm_test.go @@ -56,7 +56,7 @@ func TestAccKeycloakRealm_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteRealm(realmName) + err := keycloakClient.DeleteRealm(testCtx, realmName) if err != nil { t.Fatal(err) } @@ -393,7 +393,7 @@ func TestAccKeycloakRealm_tokenSettings(t *testing.T) { } func TestAccKeycloakRealm_tokenSettingsOauth2Device(t *testing.T) { - if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_13); !ok { + if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_13); !ok { t.Skip() } @@ -471,7 +471,7 @@ func TestAccKeycloakRealm_computedTokenSettings(t *testing.T) { } func TestAccKeycloakRealm_oauth2DeviceSettings(t *testing.T) { - if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_13); !ok { + if ok, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_13); !ok { t.Skip() } @@ -766,7 +766,7 @@ func TestAccKeycloakRealm_internalId(t *testing.T) { ImportState: true, Config: testKeycloakRealm_basic(realmName, "foo", "foo"), PreConfig: func() { - err := keycloakClient.NewRealm(realm) + err := keycloakClient.NewRealm(testCtx, realm) if err != nil { t.Fatal(err) } @@ -798,7 +798,7 @@ func TestAccKeycloakRealm_default_client_scopes(t *testing.T) { ImportState: true, Config: testKeycloakRealm_default_client_scopes(realmName, defaultDefaultClientScope, defaultOptionalClientScope), PreConfig: func() { - err := keycloakClient.NewRealm(realm) + err := keycloakClient.NewRealm(testCtx, realm) if err != nil { t.Fatal(err) } @@ -810,8 +810,8 @@ func TestAccKeycloakRealm_default_client_scopes(t *testing.T) { // test empty default client scope configuration realmName2 := acctest.RandomWithPrefix("tf-acc") - defaultDefaultClientScope2 := []string{} // deliberately empty - defaultOptionalClientScope2 := []string{} // deliberately empty + var defaultDefaultClientScope2 []string // deliberately empty + var defaultOptionalClientScope2 []string // deliberately empty realm2 := &keycloak.Realm{ Realm: realmName2, @@ -827,7 +827,7 @@ func TestAccKeycloakRealm_default_client_scopes(t *testing.T) { ImportState: true, Config: testKeycloakRealm_default_client_scopes(realmName2, defaultDefaultClientScope2, defaultOptionalClientScope2), PreConfig: func() { - err := keycloakClient.NewRealm(realm2) + err := keycloakClient.NewRealm(testCtx, realm2) if err != nil { t.Fatal(err) } @@ -1142,7 +1142,7 @@ func testAccCheckKeycloakRealmDestroy() resource.TestCheckFunc { } realmName := rs.Primary.ID - realm, _ := keycloakClient.GetRealm(realmName) + realm, _ := keycloakClient.GetRealm(testCtx, realmName) if realm != nil { return fmt.Errorf("realm %s still exists", realmName) } @@ -1160,7 +1160,7 @@ func getRealmFromState(s *terraform.State, resourceName string) (*keycloak.Realm realmName := rs.Primary.Attributes["realm"] - realm, err := keycloakClient.GetRealm(realmName) + realm, err := keycloakClient.GetRealm(testCtx, realmName) if err != nil { return nil, fmt.Errorf("error getting realm %s: %s", realmName, err) } diff --git a/provider/resource_keycloak_realm_user_profile.go b/provider/resource_keycloak_realm_user_profile.go index d057feb28..9d1dc1a13 100644 --- a/provider/resource_keycloak_realm_user_profile.go +++ b/provider/resource_keycloak_realm_user_profile.go @@ -1,16 +1,18 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" ) func resourceKeycloakRealmUserProfile() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakRealmUserProfileCreate, - Read: resourceKeycloakRealmUserProfileRead, - Delete: resourceKeycloakRealmUserProfileDelete, - Update: resourceKeycloakRealmUserProfileUpdate, + CreateContext: resourceKeycloakRealmUserProfileCreate, + ReadContext: resourceKeycloakRealmUserProfileRead, + DeleteContext: resourceKeycloakRealmUserProfileDelete, + UpdateContext: resourceKeycloakRealmUserProfileUpdate, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -339,29 +341,29 @@ func setRealmUserProfileData(data *schema.ResourceData, realmUserProfile *keyclo data.Set("group", groups) } -func resourceKeycloakRealmUserProfileCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmUserProfileCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) data.SetId(realmId) realmUserProfile := getRealmUserProfileFromData(data) - err := keycloakClient.UpdateRealmUserProfile(realmId, realmUserProfile) + err := keycloakClient.UpdateRealmUserProfile(ctx, realmId, realmUserProfile) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakRealmUserProfileRead(data, meta) + return resourceKeycloakRealmUserProfileRead(ctx, data, meta) } -func resourceKeycloakRealmUserProfileRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmUserProfileRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) - realmUserProfile, err := keycloakClient.GetRealmUserProfile(realmId) + realmUserProfile, err := keycloakClient.GetRealmUserProfile(ctx, realmId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setRealmUserProfileData(data, realmUserProfile) @@ -369,7 +371,7 @@ func resourceKeycloakRealmUserProfileRead(data *schema.ResourceData, meta interf return nil } -func resourceKeycloakRealmUserProfileDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmUserProfileDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -379,23 +381,23 @@ func resourceKeycloakRealmUserProfileDelete(data *schema.ResourceData, meta inte Groups: []*keycloak.RealmUserProfileGroup{}, } - err := keycloakClient.UpdateRealmUserProfile(realmId, realmUserProfile) + err := keycloakClient.UpdateRealmUserProfile(ctx, realmId, realmUserProfile) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakRealmUserProfileUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRealmUserProfileUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) realmUserProfile := getRealmUserProfileFromData(data) - err := keycloakClient.UpdateRealmUserProfile(realmId, realmUserProfile) + err := keycloakClient.UpdateRealmUserProfile(ctx, realmId, realmUserProfile) if err != nil { - return err + return diag.FromErr(err) } setRealmUserProfileData(data, realmUserProfile) diff --git a/provider/resource_keycloak_realm_user_profile_test.go b/provider/resource_keycloak_realm_user_profile_test.go index e0fca7f3d..3ba652e01 100644 --- a/provider/resource_keycloak_realm_user_profile_test.go +++ b/provider/resource_keycloak_realm_user_profile_test.go @@ -33,7 +33,7 @@ func TestAccKeycloakRealmUserProfile_featureDisabled(t *testing.T) { } func TestAccKeycloakRealmUserProfile_basicEmpty(t *testing.T) { - skipIfVersionIsLessThanOrEqualTo(t, keycloakClient, keycloak.Version_14) + skipIfVersionIsLessThanOrEqualTo(testCtx, t, keycloakClient, keycloak.Version_14) realmName := acctest.RandomWithPrefix("tf-acc") @@ -53,7 +53,7 @@ func TestAccKeycloakRealmUserProfile_basicEmpty(t *testing.T) { } func TestAccKeycloakRealmUserProfile_basicFull(t *testing.T) { - skipIfVersionIsLessThanOrEqualTo(t, keycloakClient, keycloak.Version_14) + skipIfVersionIsLessThanOrEqualTo(testCtx, t, keycloakClient, keycloak.Version_14) realmName := acctest.RandomWithPrefix("tf-acc") @@ -101,7 +101,7 @@ func TestAccKeycloakRealmUserProfile_basicFull(t *testing.T) { } func TestAccKeycloakRealmUserProfile_group(t *testing.T) { - skipIfVersionIsLessThanOrEqualTo(t, keycloakClient, keycloak.Version_14) + skipIfVersionIsLessThanOrEqualTo(testCtx, t, keycloakClient, keycloak.Version_14) realmName := acctest.RandomWithPrefix("tf-acc") @@ -148,7 +148,7 @@ func TestAccKeycloakRealmUserProfile_group(t *testing.T) { } func TestAccKeycloakRealmUserProfile_attributeValidator(t *testing.T) { - skipIfVersionIsLessThanOrEqualTo(t, keycloakClient, keycloak.Version_14) + skipIfVersionIsLessThanOrEqualTo(testCtx, t, keycloakClient, keycloak.Version_14) realmName := acctest.RandomWithPrefix("tf-acc") @@ -240,7 +240,7 @@ func TestAccKeycloakRealmUserProfile_attributeValidator(t *testing.T) { } func TestAccKeycloakRealmUserProfile_attributePermissions(t *testing.T) { - skipIfVersionIsLessThanOrEqualTo(t, keycloakClient, keycloak.Version_14) + skipIfVersionIsLessThanOrEqualTo(testCtx, t, keycloakClient, keycloak.Version_14) realmName := acctest.RandomWithPrefix("tf-acc") @@ -498,7 +498,7 @@ func testAccCheckKeycloakRealmUserProfileDestroy() resource.TestCheckFunc { realm := rs.Primary.Attributes["realm_id"] - realmUserProfile, _ := keycloakClient.GetRealmUserProfile(realm) + realmUserProfile, _ := keycloakClient.GetRealmUserProfile(testCtx, realm) if realmUserProfile != nil { return fmt.Errorf("user profile for realm %s", realm) } @@ -516,7 +516,7 @@ func getRealmUserProfileFromState(s *terraform.State, resourceName string) (*key realm := rs.Primary.Attributes["realm_id"] - realmUserProfile, err := keycloakClient.GetRealmUserProfile(realm) + realmUserProfile, err := keycloakClient.GetRealmUserProfile(testCtx, realm) if err != nil { return nil, fmt.Errorf("error getting realm user profile: %s", err) } diff --git a/provider/resource_keycloak_required_action.go b/provider/resource_keycloak_required_action.go index cd11e4ff7..218ef1df7 100644 --- a/provider/resource_keycloak_required_action.go +++ b/provider/resource_keycloak_required_action.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" "strings" @@ -10,13 +12,13 @@ import ( func resourceKeycloakRequiredAction() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakRequiredActionsCreate, - Read: resourceKeycloakRequiredActionsRead, - Delete: resourceKeycloakRequiredActionsDelete, - Update: resourceKeycloakRequiredActionsUpdate, + CreateContext: resourceKeycloakRequiredActionsCreate, + ReadContext: resourceKeycloakRequiredActionsRead, + DeleteContext: resourceKeycloakRequiredActionsDelete, + UpdateContext: resourceKeycloakRequiredActionsUpdate, Importer: &schema.ResourceImporter{ // This resource can be imported using {{realm}}/{{alias}}. The required action aliases are displayed in the server info or GET realms/{{realm}}/authentication/required-actions - State: resourceKeycloakRequiredActionsImport, + StateContext: resourceKeycloakRequiredActionsImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -73,43 +75,43 @@ func setRequiredActionData(data *schema.ResourceData, action *keycloak.RequiredA data.Set("priority", action.Priority) } -func resourceKeycloakRequiredActionsCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRequiredActionsCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) action, err := getRequiredActionFromData(data) if err != nil { - return err + return diag.FromErr(err) } - unregisteredRequiredActions, err := keycloakClient.GetUnregisteredRequiredActions(action.RealmId) + unregisteredRequiredActions, err := keycloakClient.GetUnregisteredRequiredActions(ctx, action.RealmId) if err != nil { - return err + return diag.FromErr(err) } for _, unregisteredRequiredAction := range unregisteredRequiredActions { if unregisteredRequiredAction.ProviderId == action.Alias { - if err := keycloakClient.RegisterRequiredAction(unregisteredRequiredAction); err != nil { - return err + if err := keycloakClient.RegisterRequiredAction(ctx, unregisteredRequiredAction); err != nil { + return diag.FromErr(err) } break } } - err = keycloakClient.CreateRequiredAction(action) + err = keycloakClient.CreateRequiredAction(ctx, action) if err != nil { - return err + return diag.FromErr(err) } setRequiredActionData(data, action) - return resourceKeycloakRequiredActionsRead(data, meta) + return resourceKeycloakRequiredActionsRead(ctx, data, meta) } -func resourceKeycloakRequiredActionsRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRequiredActionsRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) - action, err := keycloakClient.GetRequiredAction(data.Get("realm_id").(string), data.Get("alias").(string)) + action, err := keycloakClient.GetRequiredAction(ctx, data.Get("realm_id").(string), data.Get("alias").(string)) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setRequiredActionData(data, action) @@ -117,17 +119,17 @@ func resourceKeycloakRequiredActionsRead(data *schema.ResourceData, meta interfa return nil } -func resourceKeycloakRequiredActionsUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRequiredActionsUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) action, err := getRequiredActionFromData(data) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateRequiredAction(action) + err = keycloakClient.UpdateRequiredAction(ctx, action) if err != nil { - return err + return diag.FromErr(err) } setRequiredActionData(data, action) @@ -135,16 +137,16 @@ func resourceKeycloakRequiredActionsUpdate(data *schema.ResourceData, meta inter return nil } -func resourceKeycloakRequiredActionsDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRequiredActionsDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmName := data.Get("realm_id").(string) alias := data.Get("alias").(string) - return keycloakClient.DeleteRequiredAction(realmName, alias) + return diag.FromErr(keycloakClient.DeleteRequiredAction(ctx, realmName, alias)) } -func resourceKeycloakRequiredActionsImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakRequiredActionsImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { return nil, fmt.Errorf("invalid import. Supported import formats: {{realmId}}/{{alias}}") diff --git a/provider/resource_keycloak_required_action_test.go b/provider/resource_keycloak_required_action_test.go index 0ef9431fe..4a3fb89a2 100644 --- a/provider/resource_keycloak_required_action_test.go +++ b/provider/resource_keycloak_required_action_test.go @@ -181,7 +181,7 @@ resource "keycloak_required_action" "required_action2" { func testAccCheckKeycloakRequiresActionExistsWithCorrectPriority(realm, requiredActionAlias string, priority int) resource.TestCheckFunc { return func(s *terraform.State) error { - action, err := keycloakClient.GetRequiredAction(realm, requiredActionAlias) + action, err := keycloakClient.GetRequiredAction(testCtx, realm, requiredActionAlias) if err != nil { return fmt.Errorf("required action not found: %s", requiredActionAlias) } @@ -196,7 +196,7 @@ func testAccCheckKeycloakRequiresActionExistsWithCorrectPriority(realm, required func testAccCheckKeycloakRequiresActionExists(realm, requiredActionAlias string) resource.TestCheckFunc { return func(s *terraform.State) error { - _, err := keycloakClient.GetRequiredAction(realm, requiredActionAlias) + _, err := keycloakClient.GetRequiredAction(testCtx, realm, requiredActionAlias) if err != nil { return fmt.Errorf("required action not found: %s", requiredActionAlias) } diff --git a/provider/resource_keycloak_role.go b/provider/resource_keycloak_role.go index 52e463e41..d52c4eaa2 100644 --- a/provider/resource_keycloak_role.go +++ b/provider/resource_keycloak_role.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -10,13 +12,13 @@ import ( func resourceKeycloakRole() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakRoleCreate, - Read: resourceKeycloakRoleRead, - Delete: resourceKeycloakRoleDelete, - Update: resourceKeycloakRoleUpdate, + CreateContext: resourceKeycloakRoleCreate, + ReadContext: resourceKeycloakRoleRead, + DeleteContext: resourceKeycloakRoleDelete, + UpdateContext: resourceKeycloakRoleUpdate, // This resource can be imported using {{realm}}/{{roleId}}. The role's ID (a GUID) can be found in the URL when viewing the role Importer: &schema.ResourceImporter{ - State: resourceKeycloakRoleImport, + StateContext: resourceKeycloakRoleImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -87,7 +89,7 @@ func mapFromRoleToData(data *schema.ResourceData, role *keycloak.Role) { data.Set("attributes", attributes) } -func resourceKeycloakRoleCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRoleCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) role := mapFromDataToRole(data) @@ -97,9 +99,9 @@ func resourceKeycloakRoleCreate(data *schema.ResourceData, meta interface{}) err compositeRolesTf := v.(*schema.Set).List() for _, compositeRoleId := range compositeRolesTf { - compositeRoleToAdd, err := keycloakClient.GetRole(role.RealmId, compositeRoleId.(string)) + compositeRoleToAdd, err := keycloakClient.GetRole(ctx, role.RealmId, compositeRoleId.(string)) if err != nil { - return err + return diag.FromErr(err) } compositeRoles = append(compositeRoles, compositeRoleToAdd) @@ -110,40 +112,40 @@ func resourceKeycloakRoleCreate(data *schema.ResourceData, meta interface{}) err } } - err := keycloakClient.CreateRole(role) + err := keycloakClient.CreateRole(ctx, role) if err != nil { - return err + return diag.FromErr(err) } if role.Composite { - err = keycloakClient.AddCompositesToRole(role, compositeRoles) + err = keycloakClient.AddCompositesToRole(ctx, role, compositeRoles) if err != nil { - return err + return diag.FromErr(err) } } mapFromRoleToData(data, role) - return resourceKeycloakRoleRead(data, meta) + return resourceKeycloakRoleRead(ctx, data, meta) } -func resourceKeycloakRoleRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRoleRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - role, err := keycloakClient.GetRole(realmId, id) + role, err := keycloakClient.GetRole(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromRoleToData(data, role) if role.Composite { - composites, err := keycloakClient.GetRoleComposites(role) + composites, err := keycloakClient.GetRoleComposites(ctx, role) if err != nil { - return err + return diag.FromErr(err) } var compositeRoleIds []string @@ -158,19 +160,19 @@ func resourceKeycloakRoleRead(data *schema.ResourceData, meta interface{}) error return nil } -func resourceKeycloakRoleUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRoleUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) role := mapFromDataToRole(data) - err := keycloakClient.UpdateRole(role) + err := keycloakClient.UpdateRole(ctx, role) if err != nil { - return err + return diag.FromErr(err) } - keycloakComposites, err := keycloakClient.GetRoleComposites(role) + keycloakComposites, err := keycloakClient.GetRoleComposites(ctx, role) if err != nil { - return err + return diag.FromErr(err) } if v, ok := data.GetOk("composite_roles"); ok { @@ -193,51 +195,51 @@ func resourceKeycloakRoleUpdate(data *schema.ResourceData, meta interface{}) err // `tfCompositeIds` should be added to the role's list of composites. all of the roles that exist on both sides have already been removed if len(keycloakCompositesToRemove) != 0 { - err = keycloakClient.RemoveCompositesFromRole(role, keycloakCompositesToRemove) + err = keycloakClient.RemoveCompositesFromRole(ctx, role, keycloakCompositesToRemove) if err != nil { - return err + return diag.FromErr(err) } } if tfCompositeIds.Len() != 0 { var compositesToAdd []*keycloak.Role for _, tfCompositeId := range tfCompositeIds.List() { - compositeToAdd, err := keycloakClient.GetRole(role.RealmId, tfCompositeId.(string)) + compositeToAdd, err := keycloakClient.GetRole(ctx, role.RealmId, tfCompositeId.(string)) if err != nil { - return err + return diag.FromErr(err) } compositesToAdd = append(compositesToAdd, compositeToAdd) } - err = keycloakClient.AddCompositesToRole(role, compositesToAdd) + err = keycloakClient.AddCompositesToRole(ctx, role, compositesToAdd) if err != nil { - return err + return diag.FromErr(err) } } } else { // the user wants this role to have zero composites. if there are composites attached, remove them if len(keycloakComposites) != 0 { - err = keycloakClient.RemoveCompositesFromRole(role, keycloakComposites) + err = keycloakClient.RemoveCompositesFromRole(ctx, role, keycloakComposites) if err != nil { - return err + return diag.FromErr(err) } } } - return resourceKeycloakRoleRead(data, meta) + return resourceKeycloakRoleRead(ctx, data, meta) } -func resourceKeycloakRoleDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakRoleDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteRole(realmId, id) + return diag.FromErr(keycloakClient.DeleteRole(ctx, realmId, id)) } -func resourceKeycloakRoleImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakRoleImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { diff --git a/provider/resource_keycloak_role_test.go b/provider/resource_keycloak_role_test.go index 5b6abd99a..942474465 100644 --- a/provider/resource_keycloak_role_test.go +++ b/provider/resource_keycloak_role_test.go @@ -179,7 +179,7 @@ func TestAccKeycloakRole_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteRole(role.RealmId, role.Id) + err := keycloakClient.DeleteRole(testCtx, role.RealmId, role.Id) if err != nil { t.Fatal(err) } @@ -313,7 +313,7 @@ func testAccCheckKeycloakRoleDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - role, _ := keycloakClient.GetRole(realm, id) + role, _ := keycloakClient.GetRole(testCtx, realm, id) if role != nil { return fmt.Errorf("%s with id %s still exists", name, id) } @@ -369,7 +369,7 @@ func testAccCheckKeycloakRoleHasComposites(resourceName string, compositeRoleNam return fmt.Errorf("expected role %s to have no composites, but has some", role.Name) } - composites, err := keycloakClient.GetRoleComposites(role) + composites, err := keycloakClient.GetRoleComposites(testCtx, role) if err != nil { return err } @@ -415,7 +415,7 @@ func getRoleFromState(s *terraform.State, resourceName string) (*keycloak.Role, id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - role, err := keycloakClient.GetRole(realm, id) + role, err := keycloakClient.GetRole(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting role with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_saml_client.go b/provider/resource_keycloak_saml_client.go index 760b47acd..21287e1f8 100644 --- a/provider/resource_keycloak_saml_client.go +++ b/provider/resource_keycloak_saml_client.go @@ -1,11 +1,13 @@ package provider import ( + "context" "crypto/sha1" "encoding/base64" "encoding/hex" "fmt" - "log" + "github.com/hashicorp/terraform-plugin-log/tflog" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "reflect" "strings" @@ -28,13 +30,13 @@ var ( func resourceKeycloakSamlClient() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakSamlClientCreate, - Read: resourceKeycloakSamlClientRead, - Delete: resourceKeycloakSamlClientDelete, - Update: resourceKeycloakSamlClientUpdate, + CreateContext: resourceKeycloakSamlClientCreate, + ReadContext: resourceKeycloakSamlClientRead, + DeleteContext: resourceKeycloakSamlClientDelete, + UpdateContext: resourceKeycloakSamlClientUpdate, // This resource can be imported using {{realm}}/{{client_id}}. The Client ID is displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakSamlClientImport, + StateContext: resourceKeycloakSamlClientImport, }, Schema: map[string]*schema.Schema{ "client_id": { @@ -326,7 +328,7 @@ func mapToSamlClientFromData(data *schema.ResourceData) *keycloak.SamlClient { return samlClient } -func mapToDataFromSamlClient(data *schema.ResourceData, client *keycloak.SamlClient) error { +func mapToDataFromSamlClient(ctx context.Context, data *schema.ResourceData, client *keycloak.SamlClient) error { data.SetId(client.Id) data.Set("include_authn_statement", client.Attributes.IncludeAuthnStatement) @@ -377,18 +379,21 @@ func mapToDataFromSamlClient(data *schema.ResourceData, client *keycloak.SamlCli data.Set("encryption_certificate", client.Attributes.EncryptionCertificate) data.Set("signing_certificate", client.Attributes.SigningCertificate) data.Set("signing_private_key", client.Attributes.SigningPrivateKey) - resourceKeycloakSamlClientSetSha1(data, "encryption_certificate_sha1", client.Attributes.EncryptionCertificate) - resourceKeycloakSamlClientSetSha1(data, "signing_certificate_sha1", client.Attributes.SigningCertificate) - resourceKeycloakSamlClientSetSha1(data, "signing_private_key_sha1", client.Attributes.SigningPrivateKey) + resourceKeycloakSamlClientSetSha1(ctx, data, "encryption_certificate_sha1", client.Attributes.EncryptionCertificate) + resourceKeycloakSamlClientSetSha1(ctx, data, "signing_certificate_sha1", client.Attributes.SigningCertificate) + resourceKeycloakSamlClientSetSha1(ctx, data, "signing_private_key_sha1", client.Attributes.SigningPrivateKey) return nil } -func resourceKeycloakSamlClientSetSha1(data *schema.ResourceData, attribute, value string) { +func resourceKeycloakSamlClientSetSha1(ctx context.Context, data *schema.ResourceData, attribute, value string) { if value != "" { bytes, err := base64.StdEncoding.DecodeString(value) if err != nil { - log.Printf("[WARN] Cannot compute sha1sum for attribute %s: %v", attribute, err) + tflog.Warn(ctx, "Cannot compute sha1sum", map[string]interface{}{ + "error": err.Error(), + "attribute": attribute, + }) data.Set(attribute, "") return @@ -403,68 +408,68 @@ func resourceKeycloakSamlClientSetSha1(data *schema.ResourceData, attribute, val } } -func resourceKeycloakSamlClientCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlClientCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) client := mapToSamlClientFromData(data) - err := keycloakClient.NewSamlClient(client) + err := keycloakClient.NewSamlClient(ctx, client) if err != nil { - return err + return diag.FromErr(err) } data.SetId(client.Id) - return resourceKeycloakSamlClientRead(data, meta) + return resourceKeycloakSamlClientRead(ctx, data, meta) } -func resourceKeycloakSamlClientRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlClientRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - client, err := keycloakClient.GetSamlClient(realmId, id) + client, err := keycloakClient.GetSamlClient(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } - err = mapToDataFromSamlClient(data, client) + err = mapToDataFromSamlClient(ctx, data, client) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakSamlClientUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlClientUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) client := mapToSamlClientFromData(data) - err := keycloakClient.UpdateSamlClient(client) + err := keycloakClient.UpdateSamlClient(ctx, client) if err != nil { - return err + return diag.FromErr(err) } - err = mapToDataFromSamlClient(data, client) + err = mapToDataFromSamlClient(ctx, data, client) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakSamlClientDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlClientDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteSamlClient(realmId, id) + return diag.FromErr(keycloakClient.DeleteSamlClient(ctx, realmId, id)) } -func resourceKeycloakSamlClientImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakSamlClientImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { diff --git a/provider/resource_keycloak_saml_client_default_scopes.go b/provider/resource_keycloak_saml_client_default_scopes.go index 1c9d1b740..f589b1bd9 100644 --- a/provider/resource_keycloak_saml_client_default_scopes.go +++ b/provider/resource_keycloak_saml_client_default_scopes.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -9,10 +11,10 @@ import ( func resourceKeycloakSamlClientDefaultScopes() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakSamlClientDefaultScopesCreate, - Read: resourceKeycloakSamlClientDefaultScopesRead, - Delete: resourceKeycloakSamlClientDefaultScopesDelete, - Update: resourceKeycloakSamlClientDefaultScopesUpdate, + CreateContext: resourceKeycloakSamlClientDefaultScopesCreate, + ReadContext: resourceKeycloakSamlClientDefaultScopesRead, + DeleteContext: resourceKeycloakSamlClientDefaultScopesDelete, + UpdateContext: resourceKeycloakSamlClientDefaultScopesUpdate, Schema: map[string]*schema.Schema{ "realm_id": { Type: schema.TypeString, @@ -34,35 +36,35 @@ func resourceKeycloakSamlClientDefaultScopes() *schema.Resource { } } -func resourceKeycloakSamlClientDefaultScopesCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlClientDefaultScopesCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) defaultScopes := data.Get("default_scopes").(*schema.Set) - err := keycloakClient.AttachSamlClientDefaultScopes(realmId, clientId, interfaceSliceToStringSlice(defaultScopes.List())) + err := keycloakClient.AttachSamlClientDefaultScopes(ctx, realmId, clientId, interfaceSliceToStringSlice(defaultScopes.List())) if err != nil { - return err + return diag.FromErr(err) } data.SetId(samlClientDefaultScopesId(realmId, clientId)) - return resourceKeycloakSamlClientDefaultScopesRead(data, meta) + return resourceKeycloakSamlClientDefaultScopesRead(ctx, data, meta) } func samlClientDefaultScopesId(realmId string, clientId string) string { return fmt.Sprintf("%s/%s", realmId, clientId) } -func resourceKeycloakSamlClientDefaultScopesRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlClientDefaultScopesRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) - clientScopes, err := keycloakClient.GetSamlClientDefaultScopes(realmId, clientId) + clientScopes, err := keycloakClient.GetSamlClientDefaultScopes(ctx, realmId, clientId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } var defaultScopes []string @@ -76,16 +78,16 @@ func resourceKeycloakSamlClientDefaultScopesRead(data *schema.ResourceData, meta return nil } -func resourceKeycloakSamlClientDefaultScopesUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlClientDefaultScopesUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) tfSamlClientDefaultScopes := data.Get("default_scopes").(*schema.Set) - keycloakSamlClientDefaultScopes, err := keycloakClient.GetSamlClientDefaultScopes(realmId, clientId) + keycloakSamlClientDefaultScopes, err := keycloakClient.GetSamlClientDefaultScopes(ctx, realmId, clientId) if err != nil { - return err + return diag.FromErr(err) } var samlClientDefaultScopesToDetach []string @@ -101,28 +103,28 @@ func resourceKeycloakSamlClientDefaultScopesUpdate(data *schema.ResourceData, me } // detach scopes that aren't in tf state - err = keycloakClient.DetachSamlClientDefaultScopes(realmId, clientId, samlClientDefaultScopesToDetach) + err = keycloakClient.DetachSamlClientDefaultScopes(ctx, realmId, clientId, samlClientDefaultScopesToDetach) if err != nil { - return err + return diag.FromErr(err) } // attach scopes that exist in tf state but not in keycloak - err = keycloakClient.AttachSamlClientDefaultScopes(realmId, clientId, interfaceSliceToStringSlice(tfSamlClientDefaultScopes.List())) + err = keycloakClient.AttachSamlClientDefaultScopes(ctx, realmId, clientId, interfaceSliceToStringSlice(tfSamlClientDefaultScopes.List())) if err != nil { - return err + return diag.FromErr(err) } data.SetId(samlClientDefaultScopesId(realmId, clientId)) - return resourceKeycloakSamlClientDefaultScopesRead(data, meta) + return resourceKeycloakSamlClientDefaultScopesRead(ctx, data, meta) } -func resourceKeycloakSamlClientDefaultScopesDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlClientDefaultScopesDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) defaultScopes := data.Get("default_scopes").(*schema.Set) - return keycloakClient.DetachSamlClientDefaultScopes(realmId, clientId, interfaceSliceToStringSlice(defaultScopes.List())) + return diag.FromErr(keycloakClient.DetachSamlClientDefaultScopes(ctx, realmId, clientId, interfaceSliceToStringSlice(defaultScopes.List()))) } diff --git a/provider/resource_keycloak_saml_client_default_scopes_test.go b/provider/resource_keycloak_saml_client_default_scopes_test.go index e9ed70f03..043f612f1 100644 --- a/provider/resource_keycloak_saml_client_default_scopes_test.go +++ b/provider/resource_keycloak_saml_client_default_scopes_test.go @@ -139,13 +139,13 @@ func TestAccKeycloakSamlClientDefaultScopes_authoritativeAdd(t *testing.T) { }, { PreConfig: func() { - client, err := keycloakClient.GetSamlClientByClientId(testAccRealm.Realm, client) + client, err := keycloakClient.GetSamlClientByClientId(testCtx, testAccRealm.Realm, client) if err != nil { t.Fatal(err) } clientToManuallyDetach := clientScopes[acctest.RandIntRange(0, len(clientScopes)-1)] - err = keycloakClient.DetachSamlClientDefaultScopes(testAccRealm.Realm, client.Id, []string{clientToManuallyDetach}) + err = keycloakClient.DetachSamlClientDefaultScopes(testCtx, testAccRealm.Realm, client.Id, []string{clientToManuallyDetach}) if err != nil { t.Fatal(err) } @@ -187,12 +187,12 @@ func TestAccKeycloakSamlClientDefaultScopes_authoritativeRemove(t *testing.T) { }, { PreConfig: func() { - client, err := keycloakClient.GetSamlClientByClientId(testAccRealm.Realm, client) + client, err := keycloakClient.GetSamlClientByClientId(testCtx, testAccRealm.Realm, client) if err != nil { t.Fatal(err) } - err = keycloakClient.AttachSamlClientDefaultScopes(testAccRealm.Realm, client.Id, []string{clientToManuallyAttach}) + err = keycloakClient.AttachSamlClientDefaultScopes(testCtx, testAccRealm.Realm, client.Id, []string{clientToManuallyAttach}) if err != nil { t.Fatal(err) } @@ -225,12 +225,12 @@ func TestAccKeycloakSamlClientDefaultScopes_noImportNeeded(t *testing.T) { }, { PreConfig: func() { - samlClient, err := keycloakClient.GetSamlClientByClientId(testAccRealm.Realm, client) + samlClient, err := keycloakClient.GetSamlClientByClientId(testCtx, testAccRealm.Realm, client) if err != nil { t.Fatal(err) } - err = keycloakClient.AttachSamlClientDefaultScopes(testAccRealm.Realm, samlClient.Id, clientScopes) + err = keycloakClient.AttachSamlClientDefaultScopes(testCtx, testAccRealm.Realm, samlClient.Id, clientScopes) if err != nil { t.Fatal(err) } @@ -278,7 +278,7 @@ func getDefaultSamlClientScopesFromState(resourceName string, s *terraform.State client = rs.Primary.ID } - keycloakDefaultSamlClientScopes, err := keycloakClient.GetSamlClientDefaultScopes(testAccRealm.Realm, client) + keycloakDefaultSamlClientScopes, err := keycloakClient.GetSamlClientDefaultScopes(testCtx, testAccRealm.Realm, client) if err != nil { return nil, err } diff --git a/provider/resource_keycloak_saml_client_scope.go b/provider/resource_keycloak_saml_client_scope.go index a26c0b7fd..864596bd1 100644 --- a/provider/resource_keycloak_saml_client_scope.go +++ b/provider/resource_keycloak_saml_client_scope.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "strconv" "strings" @@ -11,13 +13,13 @@ import ( func resourceKeycloakSamlClientScope() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakSamlClientScopeCreate, - Read: resourceKeycloakSamlClientScopeRead, - Delete: resourceKeycloakSamlClientScopeDelete, - Update: resourceKeycloakSamlClientScopeUpdate, + CreateContext: resourceKeycloakSamlClientScopeCreate, + ReadContext: resourceKeycloakSamlClientScopeRead, + DeleteContext: resourceKeycloakSamlClientScopeDelete, + UpdateContext: resourceKeycloakSamlClientScopeUpdate, // This resource can be imported using {{realm}}/{{client_scope_id}}. The Client Scope ID is displayed in the GUI Importer: &schema.ResourceImporter{ - State: resourceKeycloakSamlClientScopeImport, + StateContext: resourceKeycloakSamlClientScopeImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -84,30 +86,30 @@ func setSamlClientScopeData(data *schema.ResourceData, clientScope *keycloak.Sam } } -func resourceKeycloakSamlClientScopeCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlClientScopeCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) clientScope := getSamlClientScopeFromData(data) - err := keycloakClient.NewSamlClientScope(clientScope) + err := keycloakClient.NewSamlClientScope(ctx, clientScope) if err != nil { - return err + return diag.FromErr(err) } setSamlClientScopeData(data, clientScope) - return resourceKeycloakSamlClientScopeRead(data, meta) + return resourceKeycloakSamlClientScopeRead(ctx, data, meta) } -func resourceKeycloakSamlClientScopeRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlClientScopeRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - clientScope, err := keycloakClient.GetSamlClientScope(realmId, id) + clientScope, err := keycloakClient.GetSamlClientScope(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } setSamlClientScopeData(data, clientScope) @@ -115,14 +117,14 @@ func resourceKeycloakSamlClientScopeRead(data *schema.ResourceData, meta interfa return nil } -func resourceKeycloakSamlClientScopeUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlClientScopeUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) clientScope := getSamlClientScopeFromData(data) - err := keycloakClient.UpdateSamlClientScope(clientScope) + err := keycloakClient.UpdateSamlClientScope(ctx, clientScope) if err != nil { - return err + return diag.FromErr(err) } setSamlClientScopeData(data, clientScope) @@ -130,16 +132,16 @@ func resourceKeycloakSamlClientScopeUpdate(data *schema.ResourceData, meta inter return nil } -func resourceKeycloakSamlClientScopeDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlClientScopeDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteSamlClientScope(realmId, id) + return diag.FromErr(keycloakClient.DeleteSamlClientScope(ctx, realmId, id)) } -func resourceKeycloakSamlClientScopeImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakSamlClientScopeImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{samlClientScopeId}}") diff --git a/provider/resource_keycloak_saml_client_scope_test.go b/provider/resource_keycloak_saml_client_scope_test.go index 2c02fb6f5..13b8ca548 100644 --- a/provider/resource_keycloak_saml_client_scope_test.go +++ b/provider/resource_keycloak_saml_client_scope_test.go @@ -54,7 +54,7 @@ func TestAccKeycloakSamlClientScope_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteSamlClientScope(clientScope.RealmId, clientScope.Id) + err := keycloakClient.DeleteSamlClientScope(testCtx, clientScope.RealmId, clientScope.Id) if err != nil { t.Fatal(err) } @@ -216,7 +216,7 @@ func testAccCheckKeycloakSamlClientScopeDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - clientScope, _ := keycloakClient.GetSamlClientScope(realm, id) + clientScope, _ := keycloakClient.GetSamlClientScope(testCtx, realm, id) if clientScope != nil { return fmt.Errorf("saml client scope %s still exists", id) } @@ -237,7 +237,7 @@ func getSamlClientScopeFromState(s *terraform.State, resourceName string) (*keyc id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - clientScope, err := keycloakClientScope.GetSamlClientScope(realm, id) + clientScope, err := keycloakClientScope.GetSamlClientScope(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting saml client scope %s: %s", id, err) } diff --git a/provider/resource_keycloak_saml_client_test.go b/provider/resource_keycloak_saml_client_test.go index 9cb6ad9c8..2321f70df 100644 --- a/provider/resource_keycloak_saml_client_test.go +++ b/provider/resource_keycloak_saml_client_test.go @@ -78,7 +78,7 @@ func TestAccKeycloakSamlClient_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteSamlClient(client.RealmId, client.Id) + err := keycloakClient.DeleteSamlClient(testCtx, client.RealmId, client.Id) if err != nil { t.Fatal(err) } @@ -457,7 +457,7 @@ func testAccCheckKeycloakSamlClientDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - client, _ := keycloakClient.GetSamlClient(realm, id) + client, _ := keycloakClient.GetSamlClient(testCtx, realm, id) if client != nil { return fmt.Errorf("saml client %s still exists", id) } @@ -476,7 +476,7 @@ func getSamlClientFromState(s *terraform.State, resourceName string) (*keycloak. id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - client, err := keycloakClient.GetSamlClient(realm, id) + client, err := keycloakClient.GetSamlClient(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting saml client %s: %s", id, err) } @@ -544,7 +544,7 @@ func testAccCheckKeycloakSamlClientExtraConfigMissing(resourceName string, key s if val, ok := client.Attributes.ExtraConfig[key]; ok { // keycloak 13+ will remove attributes if set to empty string. on older versions, we'll just check if this value is empty - if versionOk, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(keycloak.Version_13); !versionOk { + if versionOk, _ := keycloakClient.VersionIsGreaterThanOrEqualTo(testCtx, keycloak.Version_13); !versionOk { if val != "" { return fmt.Errorf("expected saml client to have empty attribute %v", key) } diff --git a/provider/resource_keycloak_saml_identity_provider.go b/provider/resource_keycloak_saml_identity_provider.go index 09fab31f8..6fac31bef 100644 --- a/provider/resource_keycloak_saml_identity_provider.go +++ b/provider/resource_keycloak_saml_identity_provider.go @@ -149,9 +149,9 @@ func resourceKeycloakSamlIdentityProvider() *schema.Resource { } samlResource := resourceKeycloakIdentityProvider() samlResource.Schema = mergeSchemas(samlResource.Schema, samlSchema) - samlResource.Create = resourceKeycloakIdentityProviderCreate(getSamlIdentityProviderFromData, setSamlIdentityProviderData) - samlResource.Read = resourceKeycloakIdentityProviderRead(setSamlIdentityProviderData) - samlResource.Update = resourceKeycloakIdentityProviderUpdate(getSamlIdentityProviderFromData, setSamlIdentityProviderData) + samlResource.CreateContext = resourceKeycloakIdentityProviderCreate(getSamlIdentityProviderFromData, setSamlIdentityProviderData) + samlResource.ReadContext = resourceKeycloakIdentityProviderRead(setSamlIdentityProviderData) + samlResource.UpdateContext = resourceKeycloakIdentityProviderUpdate(getSamlIdentityProviderFromData, setSamlIdentityProviderData) return samlResource } diff --git a/provider/resource_keycloak_saml_identity_provider_test.go b/provider/resource_keycloak_saml_identity_provider_test.go index 130e901bb..7f228ca12 100644 --- a/provider/resource_keycloak_saml_identity_provider_test.go +++ b/provider/resource_keycloak_saml_identity_provider_test.go @@ -125,7 +125,7 @@ func TestAccKeycloakSamlIdentityProvider_createAfterManualDestroy(t *testing.T) }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProvider(saml.Realm, saml.Alias) + err := keycloakClient.DeleteIdentityProvider(testCtx, saml.Realm, saml.Alias) if err != nil { t.Fatal(err) } @@ -283,7 +283,7 @@ func testAccCheckKeycloakSamlIdentityProviderDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm"] - saml, _ := keycloakClient.GetIdentityProvider(realm, id) + saml, _ := keycloakClient.GetIdentityProvider(testCtx, realm, id) if saml != nil { return fmt.Errorf("saml config with id %s still exists", id) } @@ -302,7 +302,7 @@ func getKeycloakSamlIdentityProviderFromState(s *terraform.State, resourceName s realm := rs.Primary.Attributes["realm"] alias := rs.Primary.Attributes["alias"] - saml, err := keycloakClient.GetIdentityProvider(realm, alias) + saml, err := keycloakClient.GetIdentityProvider(testCtx, realm, alias) if err != nil { return nil, fmt.Errorf("error getting saml identity provider config with alias %s: %s", alias, err) } diff --git a/provider/resource_keycloak_saml_script_protocol_mapper.go b/provider/resource_keycloak_saml_script_protocol_mapper.go index 2e6340777..cac881ab2 100644 --- a/provider/resource_keycloak_saml_script_protocol_mapper.go +++ b/provider/resource_keycloak_saml_script_protocol_mapper.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,16 +10,16 @@ import ( func resourceKeycloakSamlScriptProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakSamlScriptProtocolMapperCreate, - Read: resourceKeycloakSamlScriptProtocolMapperRead, - Update: resourceKeycloakSamlScriptProtocolMapperUpdate, - Delete: resourceKeycloakSamlScriptProtocolMapperDelete, + CreateContext: resourceKeycloakSamlScriptProtocolMapperCreate, + ReadContext: resourceKeycloakSamlScriptProtocolMapperRead, + UpdateContext: resourceKeycloakSamlScriptProtocolMapperUpdate, + DeleteContext: resourceKeycloakSamlScriptProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -102,36 +104,36 @@ func mapFromSamlScriptMapperToData(mapper *keycloak.SamlScriptProtocolMapper, da data.Set("saml_attribute_name_format", mapper.SamlAttributeNameFormat) } -func resourceKeycloakSamlScriptProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlScriptProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) samlScriptMapper := mapFromDataToSamlScriptProtocolMapper(data) - err := keycloakClient.ValidateSamlScriptProtocolMapper(samlScriptMapper) + err := keycloakClient.ValidateSamlScriptProtocolMapper(ctx, samlScriptMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewSamlScriptProtocolMapper(samlScriptMapper) + err = keycloakClient.NewSamlScriptProtocolMapper(ctx, samlScriptMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromSamlScriptMapperToData(samlScriptMapper, data) - return resourceKeycloakSamlScriptProtocolMapperRead(data, meta) + return resourceKeycloakSamlScriptProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakSamlScriptProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlScriptProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - samlScriptMapper, err := keycloakClient.GetSamlScriptProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + samlScriptMapper, err := keycloakClient.GetSamlScriptProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromSamlScriptMapperToData(samlScriptMapper, data) @@ -139,30 +141,30 @@ func resourceKeycloakSamlScriptProtocolMapperRead(data *schema.ResourceData, met return nil } -func resourceKeycloakSamlScriptProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlScriptProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) samlScriptMapper := mapFromDataToSamlScriptProtocolMapper(data) - err := keycloakClient.ValidateSamlScriptProtocolMapper(samlScriptMapper) + err := keycloakClient.ValidateSamlScriptProtocolMapper(ctx, samlScriptMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateSamlScriptProtocolMapper(samlScriptMapper) + err = keycloakClient.UpdateSamlScriptProtocolMapper(ctx, samlScriptMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakSamlScriptProtocolMapperRead(data, meta) + return resourceKeycloakSamlScriptProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakSamlScriptProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlScriptProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteSamlScriptProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteSamlScriptProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_saml_script_protocol_mapper_test.go b/provider/resource_keycloak_saml_script_protocol_mapper_test.go index 649c79455..bfba366ef 100644 --- a/provider/resource_keycloak_saml_script_protocol_mapper_test.go +++ b/provider/resource_keycloak_saml_script_protocol_mapper_test.go @@ -139,7 +139,7 @@ func TestAccKeycloakSamlScriptProtocolMapper_createAfterManualDestroy(t *testing PreConfig: func() { keycloakClient := testAccProvider.Meta().(*keycloak.KeycloakClient) - err := keycloakClient.DeleteSamlScriptProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteSamlScriptProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -261,7 +261,7 @@ func getSamlScriptMapperUsingState(state *terraform.State, resourceName string) keycloakClient := testAccProvider.Meta().(*keycloak.KeycloakClient) - return keycloakClient.GetSamlScriptProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetSamlScriptProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakSamlScriptProtocolMapper_basic_client(clientId, mapperName string) string { diff --git a/provider/resource_keycloak_saml_user_attribute_protocol_mapper.go b/provider/resource_keycloak_saml_user_attribute_protocol_mapper.go index 40162fd97..b2e26dbeb 100644 --- a/provider/resource_keycloak_saml_user_attribute_protocol_mapper.go +++ b/provider/resource_keycloak_saml_user_attribute_protocol_mapper.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -10,16 +12,16 @@ var keycloakSamlUserAttributeProtocolMapperNameFormats = []string{"Basic", "URI func resourceKeycloakSamlUserAttributeProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakSamlUserAttributeProtocolMapperCreate, - Read: resourceKeycloakSamlUserAttributeProtocolMapperRead, - Update: resourceKeycloakSamlUserAttributeProtocolMapperUpdate, - Delete: resourceKeycloakSamlUserAttributeProtocolMapperDelete, + CreateContext: resourceKeycloakSamlUserAttributeProtocolMapperCreate, + ReadContext: resourceKeycloakSamlUserAttributeProtocolMapperRead, + UpdateContext: resourceKeycloakSamlUserAttributeProtocolMapperUpdate, + DeleteContext: resourceKeycloakSamlUserAttributeProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -96,36 +98,36 @@ func mapFromSamlUserAttributeMapperToData(mapper *keycloak.SamlUserAttributeProt data.Set("saml_attribute_name_format", mapper.SamlAttributeNameFormat) } -func resourceKeycloakSamlUserAttributeProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlUserAttributeProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) samlUserAttributeMapper := mapFromDataToSamlUserAttributeProtocolMapper(data) - err := keycloakClient.ValidateSamlUserAttributeProtocolMapper(samlUserAttributeMapper) + err := keycloakClient.ValidateSamlUserAttributeProtocolMapper(ctx, samlUserAttributeMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewSamlUserAttributeProtocolMapper(samlUserAttributeMapper) + err = keycloakClient.NewSamlUserAttributeProtocolMapper(ctx, samlUserAttributeMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromSamlUserAttributeMapperToData(samlUserAttributeMapper, data) - return resourceKeycloakSamlUserAttributeProtocolMapperRead(data, meta) + return resourceKeycloakSamlUserAttributeProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakSamlUserAttributeProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlUserAttributeProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - samlUserAttributeMapper, err := keycloakClient.GetSamlUserAttributeProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + samlUserAttributeMapper, err := keycloakClient.GetSamlUserAttributeProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromSamlUserAttributeMapperToData(samlUserAttributeMapper, data) @@ -133,30 +135,30 @@ func resourceKeycloakSamlUserAttributeProtocolMapperRead(data *schema.ResourceDa return nil } -func resourceKeycloakSamlUserAttributeProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlUserAttributeProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) samlUserAttributeMapper := mapFromDataToSamlUserAttributeProtocolMapper(data) - err := keycloakClient.ValidateSamlUserAttributeProtocolMapper(samlUserAttributeMapper) + err := keycloakClient.ValidateSamlUserAttributeProtocolMapper(ctx, samlUserAttributeMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateSamlUserAttributeProtocolMapper(samlUserAttributeMapper) + err = keycloakClient.UpdateSamlUserAttributeProtocolMapper(ctx, samlUserAttributeMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakSamlUserAttributeProtocolMapperRead(data, meta) + return resourceKeycloakSamlUserAttributeProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakSamlUserAttributeProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlUserAttributeProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteSamlUserAttributeProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteSamlUserAttributeProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_saml_user_attribute_protocol_mapper_test.go b/provider/resource_keycloak_saml_user_attribute_protocol_mapper_test.go index 67fc5ffbb..a0e759a7f 100644 --- a/provider/resource_keycloak_saml_user_attribute_protocol_mapper_test.go +++ b/provider/resource_keycloak_saml_user_attribute_protocol_mapper_test.go @@ -105,7 +105,7 @@ func TestAccKeycloakSamlUserAttributeProtocolMapper_createAfterManualDestroy(t * }, { PreConfig: func() { - err := keycloakClient.DeleteSamlUserAttributeProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteSamlUserAttributeProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -218,7 +218,7 @@ func getSamlUserAttributeMapperUsingState(state *terraform.State, resourceName s clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetSamlUserAttributeProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetSamlUserAttributeProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakSamlUserAttributeProtocolMapper_basic_client(clientId, mapperName string) string { diff --git a/provider/resource_keycloak_saml_user_property_protocol_mapper.go b/provider/resource_keycloak_saml_user_property_protocol_mapper.go index dacee9e34..7fec08cf1 100644 --- a/provider/resource_keycloak_saml_user_property_protocol_mapper.go +++ b/provider/resource_keycloak_saml_user_property_protocol_mapper.go @@ -1,6 +1,8 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/mrparkers/terraform-provider-keycloak/keycloak" @@ -8,16 +10,16 @@ import ( func resourceKeycloakSamlUserPropertyProtocolMapper() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakSamlUserPropertyProtocolMapperCreate, - Read: resourceKeycloakSamlUserPropertyProtocolMapperRead, - Update: resourceKeycloakSamlUserPropertyProtocolMapperUpdate, - Delete: resourceKeycloakSamlUserPropertyProtocolMapperDelete, + CreateContext: resourceKeycloakSamlUserPropertyProtocolMapperCreate, + ReadContext: resourceKeycloakSamlUserPropertyProtocolMapperRead, + UpdateContext: resourceKeycloakSamlUserPropertyProtocolMapperUpdate, + DeleteContext: resourceKeycloakSamlUserPropertyProtocolMapperDelete, Importer: &schema.ResourceImporter{ // import a mapper tied to a client: // {{realmId}}/client/{{clientId}}/{{protocolMapperId}} // or a client scope: // {{realmId}}/client-scope/{{clientScopeId}}/{{protocolMapperId}} - State: genericProtocolMapperImport, + StateContext: genericProtocolMapperImport, }, Schema: map[string]*schema.Schema{ "name": { @@ -94,36 +96,36 @@ func mapFromSamlUserPropertyProtocolMapperToData(mapper *keycloak.SamlUserProper data.Set("saml_attribute_name_format", mapper.SamlAttributeNameFormat) } -func resourceKeycloakSamlUserPropertyProtocolMapperCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlUserPropertyProtocolMapperCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) samlUserPropertyMapper := mapFromDataToSamlUserPropertyProtocolMapper(data) - err := keycloakClient.ValidateSamlUserPropertyProtocolMapper(samlUserPropertyMapper) + err := keycloakClient.ValidateSamlUserPropertyProtocolMapper(ctx, samlUserPropertyMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.NewSamlUserPropertyProtocolMapper(samlUserPropertyMapper) + err = keycloakClient.NewSamlUserPropertyProtocolMapper(ctx, samlUserPropertyMapper) if err != nil { - return err + return diag.FromErr(err) } mapFromSamlUserPropertyProtocolMapperToData(samlUserPropertyMapper, data) - return resourceKeycloakSamlUserPropertyProtocolMapperRead(data, meta) + return resourceKeycloakSamlUserPropertyProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakSamlUserPropertyProtocolMapperRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlUserPropertyProtocolMapperRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - samlUserPropertyMapper, err := keycloakClient.GetSamlUserPropertyProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + samlUserPropertyMapper, err := keycloakClient.GetSamlUserPropertyProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id()) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromSamlUserPropertyProtocolMapperToData(samlUserPropertyMapper, data) @@ -131,30 +133,30 @@ func resourceKeycloakSamlUserPropertyProtocolMapperRead(data *schema.ResourceDat return nil } -func resourceKeycloakSamlUserPropertyProtocolMapperUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlUserPropertyProtocolMapperUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) samlUserPropertyMapper := mapFromDataToSamlUserPropertyProtocolMapper(data) - err := keycloakClient.ValidateSamlUserPropertyProtocolMapper(samlUserPropertyMapper) + err := keycloakClient.ValidateSamlUserPropertyProtocolMapper(ctx, samlUserPropertyMapper) if err != nil { - return err + return diag.FromErr(err) } - err = keycloakClient.UpdateSamlUserPropertyProtocolMapper(samlUserPropertyMapper) + err = keycloakClient.UpdateSamlUserPropertyProtocolMapper(ctx, samlUserPropertyMapper) if err != nil { - return err + return diag.FromErr(err) } - return resourceKeycloakSamlUserPropertyProtocolMapperRead(data, meta) + return resourceKeycloakSamlUserPropertyProtocolMapperRead(ctx, data, meta) } -func resourceKeycloakSamlUserPropertyProtocolMapperDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakSamlUserPropertyProtocolMapperDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) clientId := data.Get("client_id").(string) clientScopeId := data.Get("client_scope_id").(string) - return keycloakClient.DeleteSamlUserPropertyProtocolMapper(realmId, clientId, clientScopeId, data.Id()) + return diag.FromErr(keycloakClient.DeleteSamlUserPropertyProtocolMapper(ctx, realmId, clientId, clientScopeId, data.Id())) } diff --git a/provider/resource_keycloak_saml_user_property_protocol_mapper_test.go b/provider/resource_keycloak_saml_user_property_protocol_mapper_test.go index 30ea0527b..1e935ddbb 100644 --- a/provider/resource_keycloak_saml_user_property_protocol_mapper_test.go +++ b/provider/resource_keycloak_saml_user_property_protocol_mapper_test.go @@ -105,7 +105,7 @@ func TestAccKeycloakSamlUserPropertyProtocolMapper_createAfterManualDestroy(t *t }, { PreConfig: func() { - err := keycloakClient.DeleteSamlUserPropertyProtocolMapper(mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) + err := keycloakClient.DeleteSamlUserPropertyProtocolMapper(testCtx, mapper.RealmId, mapper.ClientId, mapper.ClientScopeId, mapper.Id) if err != nil { t.Error(err) } @@ -218,7 +218,7 @@ func getSamlUserPropertyMapperUsingState(state *terraform.State, resourceName st clientId := rs.Primary.Attributes["client_id"] clientScopeId := rs.Primary.Attributes["client_scope_id"] - return keycloakClient.GetSamlUserPropertyProtocolMapper(realm, clientId, clientScopeId, id) + return keycloakClient.GetSamlUserPropertyProtocolMapper(testCtx, realm, clientId, clientScopeId, id) } func testKeycloakSamlUserPropertyProtocolMapper_basic_client(clientId, mapperName string) string { diff --git a/provider/resource_keycloak_user.go b/provider/resource_keycloak_user.go index 9f49f9c2a..328a1abe8 100644 --- a/provider/resource_keycloak_user.go +++ b/provider/resource_keycloak_user.go @@ -1,7 +1,9 @@ package provider import ( + "context" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" "strings" @@ -11,13 +13,13 @@ const MULTIVALUE_ATTRIBUTE_SEPARATOR = "##" func resourceKeycloakUser() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakUserCreate, - Read: resourceKeycloakUserRead, - Delete: resourceKeycloakUserDelete, - Update: resourceKeycloakUserUpdate, + CreateContext: resourceKeycloakUserCreate, + ReadContext: resourceKeycloakUserRead, + DeleteContext: resourceKeycloakUserDelete, + UpdateContext: resourceKeycloakUserUpdate, // This resource can be imported using {{realm}}/{{user_id}}. The User's ID is displayed in the GUI when editing Importer: &schema.ResourceImporter{ - State: resourceKeycloakUserImport, + StateContext: resourceKeycloakUserImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -156,7 +158,7 @@ func getUserFederatedIdentitiesFromData(data []interface{}) *keycloak.FederatedI } func mapFromUserToData(data *schema.ResourceData, user *keycloak.User) { - federatedIdentities := []interface{}{} + var federatedIdentities []interface{} for _, federatedIdentity := range user.FederatedIdentities { identity := map[string]interface{}{ "identity_provider": federatedIdentity.IdentityProvider, @@ -181,14 +183,14 @@ func mapFromUserToData(data *schema.ResourceData, user *keycloak.User) { data.Set("federated_identity", federatedIdentities) } -func resourceKeycloakUserCreate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUserCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) user := mapFromDataToUser(data) - err := keycloakClient.NewUser(user) + err := keycloakClient.NewUser(ctx, user) if err != nil { - return err + return diag.FromErr(err) } v, isInitialPasswordSet := data.GetOk("initial_password") @@ -196,26 +198,26 @@ func resourceKeycloakUserCreate(data *schema.ResourceData, meta interface{}) err passwordBlock := v.([]interface{})[0].(map[string]interface{}) passwordValue := passwordBlock["value"].(string) isPasswordTemporary := passwordBlock["temporary"].(bool) - err := keycloakClient.ResetUserPassword(user.RealmId, user.Id, passwordValue, isPasswordTemporary) + err := keycloakClient.ResetUserPassword(ctx, user.RealmId, user.Id, passwordValue, isPasswordTemporary) if err != nil { - return err + return diag.FromErr(err) } } mapFromUserToData(data, user) - return resourceKeycloakUserRead(data, meta) + return resourceKeycloakUserRead(ctx, data, meta) } -func resourceKeycloakUserRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUserRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - user, err := keycloakClient.GetUser(realmId, id) + user, err := keycloakClient.GetUser(ctx, realmId, id) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } mapFromUserToData(data, user) @@ -223,14 +225,14 @@ func resourceKeycloakUserRead(data *schema.ResourceData, meta interface{}) error return nil } -func resourceKeycloakUserUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUserUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) user := mapFromDataToUser(data) - err := keycloakClient.UpdateUser(user) + err := keycloakClient.UpdateUser(ctx, user) if err != nil { - return err + return diag.FromErr(err) } mapFromUserToData(data, user) @@ -238,16 +240,16 @@ func resourceKeycloakUserUpdate(data *schema.ResourceData, meta interface{}) err return nil } -func resourceKeycloakUserDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUserDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) id := data.Id() - return keycloakClient.DeleteUser(realmId, id) + return diag.FromErr(keycloakClient.DeleteUser(ctx, realmId, id)) } -func resourceKeycloakUserImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakUserImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { return nil, fmt.Errorf("Invalid import. Supported import formats: {{realmId}}/{{userId}}") diff --git a/provider/resource_keycloak_user_groups.go b/provider/resource_keycloak_user_groups.go index 33c85fff1..f15d26990 100644 --- a/provider/resource_keycloak_user_groups.go +++ b/provider/resource_keycloak_user_groups.go @@ -1,7 +1,10 @@ package provider import ( + "context" + "errors" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" "strings" @@ -9,13 +12,13 @@ import ( func resourceKeycloakUserGroups() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakUserGroupsReconcile, - Read: resourceKeycloakUserGroupsRead, - Delete: resourceKeycloakUserGroupsDelete, - Update: resourceKeycloakUserGroupsReconcile, + CreateContext: resourceKeycloakUserGroupsReconcile, + ReadContext: resourceKeycloakUserGroupsRead, + DeleteContext: resourceKeycloakUserGroupsDelete, + UpdateContext: resourceKeycloakUserGroupsReconcile, // This resource can be imported using {{realm}}/{{userId}}. Importer: &schema.ResourceImporter{ - State: resourceKeycloakUserGroupsImport, + StateContext: resourceKeycloakUserGroupsImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -43,7 +46,7 @@ func resourceKeycloakUserGroups() *schema.Resource { } } -func resourceKeycloakUserGroupsRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUserGroupsRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -51,9 +54,9 @@ func resourceKeycloakUserGroupsRead(data *schema.ResourceData, meta interface{}) groupIds := data.Get("group_ids").(*schema.Set) exhaustive := data.Get("exhaustive").(bool) - userGroups, err := keycloakClient.GetUserGroups(realmId, userId) + userGroups, err := keycloakClient.GetUserGroups(ctx, realmId, userId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } var groups []string @@ -70,7 +73,7 @@ func resourceKeycloakUserGroupsRead(data *schema.ResourceData, meta interface{}) return nil } -func resourceKeycloakUserGroupsReconcile(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUserGroupsReconcile(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -84,14 +87,14 @@ func resourceKeycloakUserGroupsReconcile(data *schema.ResourceData, meta interfa ns := n.(*schema.Set) remove := interfaceSliceToStringSlice(os.Difference(ns).List()) - if err := keycloakClient.RemoveUserFromGroups(remove, userId, realmId); err != nil { - return err + if err := keycloakClient.RemoveUserFromGroups(ctx, remove, userId, realmId); err != nil { + return diag.FromErr(err) } } - userGroups, err := keycloakClient.GetUserGroups(realmId, userId) + userGroups, err := keycloakClient.GetUserGroups(ctx, realmId, userId) if err != nil { - return err + return diag.FromErr(err) } var userGroupsIds []string @@ -102,31 +105,31 @@ func resourceKeycloakUserGroupsReconcile(data *schema.ResourceData, meta interfa remove := stringArrayDifference(userGroupsIds, groupIds) add := stringArrayDifference(groupIds, userGroupsIds) - if err := keycloakClient.AddUserToGroups(add, userId, realmId); err != nil { - return err + if err := keycloakClient.AddUserToGroups(ctx, add, userId, realmId); err != nil { + return diag.FromErr(err) } if exhaustive { - if err := keycloakClient.RemoveUserFromGroups(remove, userId, realmId); err != nil { - return err + if err := keycloakClient.RemoveUserFromGroups(ctx, remove, userId, realmId); err != nil { + return diag.FromErr(err) } } data.SetId(userGroupsId(realmId, userId)) - return resourceKeycloakUserGroupsRead(data, meta) + return resourceKeycloakUserGroupsRead(ctx, data, meta) } -func resourceKeycloakUserGroupsDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUserGroupsDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) userId := data.Get("user_id").(string) groupIds := interfaceSliceToStringSlice(data.Get("group_ids").(*schema.Set).List()) - return keycloakClient.RemoveUserFromGroups(groupIds, userId, realmId) + return diag.FromErr(keycloakClient.RemoveUserFromGroups(ctx, groupIds, userId, realmId)) } -func resourceKeycloakUserGroupsImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakUserGroupsImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { @@ -140,7 +143,12 @@ func resourceKeycloakUserGroupsImport(d *schema.ResourceData, meta interface{}) d.Set("user_id", userId) d.Set("exhaustive", true) - return []*schema.ResourceData{d}, resourceKeycloakUserGroupsRead(d, meta) + diagnostics := resourceKeycloakUserGroupsRead(ctx, d, meta) + if diagnostics.HasError() { + return nil, errors.New(diagnostics[0].Summary) + } + + return []*schema.ResourceData{d}, nil } func userGroupsId(realmId, userId string) string { diff --git a/provider/resource_keycloak_user_groups_test.go b/provider/resource_keycloak_user_groups_test.go index 483fbe4f9..ce2413be2 100644 --- a/provider/resource_keycloak_user_groups_test.go +++ b/provider/resource_keycloak_user_groups_test.go @@ -242,7 +242,7 @@ func testAccCheckKeycloakUserHasGroups(resourceName string) resource.TestCheckFu continue } - group, err := keycloakClient.GetGroup(realm, v) + group, err := keycloakClient.GetGroup(testCtx, realm, v) if err != nil { return err } @@ -250,7 +250,7 @@ func testAccCheckKeycloakUserHasGroups(resourceName string) resource.TestCheckFu expectedGroups = append(expectedGroups, group) } - userGroups, err := keycloakClient.GetUserGroups(realm, userId) + userGroups, err := keycloakClient.GetUserGroups(testCtx, realm, userId) if err != nil { return err } @@ -295,7 +295,7 @@ func testAccCheckKeycloakUserHasNonExhaustiveGroups(resourceName string) resourc continue } - group, err := keycloakClient.GetGroup(realm, v) + group, err := keycloakClient.GetGroup(testCtx, realm, v) if err != nil { return err } @@ -303,7 +303,7 @@ func testAccCheckKeycloakUserHasNonExhaustiveGroups(resourceName string) resourc expectedGroups = append(expectedGroups, group) } - userGroups, err := keycloakClient.GetUserGroups(realm, userId) + userGroups, err := keycloakClient.GetUserGroups(testCtx, realm, userId) if err != nil { return err } @@ -342,7 +342,7 @@ func testAccCheckKeycloakUserHasNoGroups(resourceName string) resource.TestCheck realm := rs.Primary.Attributes["realm_id"] id := rs.Primary.ID - userGroups, err := keycloakClient.GetUserGroups(realm, id) + userGroups, err := keycloakClient.GetUserGroups(testCtx, realm, id) if err != nil { return err } diff --git a/provider/resource_keycloak_user_roles.go b/provider/resource_keycloak_user_roles.go index 6bba61c3a..0ab43248f 100644 --- a/provider/resource_keycloak_user_roles.go +++ b/provider/resource_keycloak_user_roles.go @@ -1,7 +1,10 @@ package provider import ( + "context" + "errors" "fmt" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" "strings" @@ -9,13 +12,13 @@ import ( func resourceKeycloakUserRoles() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakUserRolesReconcile, - Read: resourceKeycloakUserRolesRead, - Update: resourceKeycloakUserRolesReconcile, - Delete: resourceKeycloakUserRolesDelete, + CreateContext: resourceKeycloakUserRolesReconcile, + ReadContext: resourceKeycloakUserRolesRead, + UpdateContext: resourceKeycloakUserRolesReconcile, + DeleteContext: resourceKeycloakUserRolesDelete, // This resource can be imported using {{realm}}/{{userId}}. Importer: &schema.ResourceImporter{ - State: resourceKeycloakUserRolesImport, + StateContext: resourceKeycloakUserRolesImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -47,9 +50,9 @@ func userRolesId(realmId, userId string) string { return fmt.Sprintf("%s/%s", realmId, userId) } -func addRolesToUser(keycloakClient *keycloak.KeycloakClient, clientRolesToAdd map[string][]*keycloak.Role, realmRolesToAdd []*keycloak.Role, user *keycloak.User) error { +func addRolesToUser(ctx context.Context, keycloakClient *keycloak.KeycloakClient, clientRolesToAdd map[string][]*keycloak.Role, realmRolesToAdd []*keycloak.Role, user *keycloak.User) error { if len(realmRolesToAdd) != 0 { - err := keycloakClient.AddRealmRolesToUser(user.RealmId, user.Id, realmRolesToAdd) + err := keycloakClient.AddRealmRolesToUser(ctx, user.RealmId, user.Id, realmRolesToAdd) if err != nil { return err } @@ -57,7 +60,7 @@ func addRolesToUser(keycloakClient *keycloak.KeycloakClient, clientRolesToAdd ma for k, roles := range clientRolesToAdd { if len(roles) != 0 { - err := keycloakClient.AddClientRolesToUser(user.RealmId, user.Id, k, roles) + err := keycloakClient.AddClientRolesToUser(ctx, user.RealmId, user.Id, k, roles) if err != nil { return err } @@ -67,9 +70,9 @@ func addRolesToUser(keycloakClient *keycloak.KeycloakClient, clientRolesToAdd ma return nil } -func removeRolesFromUser(keycloakClient *keycloak.KeycloakClient, clientRolesToRemove map[string][]*keycloak.Role, realmRolesToRemove []*keycloak.Role, user *keycloak.User) error { +func removeRolesFromUser(ctx context.Context, keycloakClient *keycloak.KeycloakClient, clientRolesToRemove map[string][]*keycloak.Role, realmRolesToRemove []*keycloak.Role, user *keycloak.User) error { if len(realmRolesToRemove) != 0 { - err := keycloakClient.RemoveRealmRolesFromUser(user.RealmId, user.Id, realmRolesToRemove) + err := keycloakClient.RemoveRealmRolesFromUser(ctx, user.RealmId, user.Id, realmRolesToRemove) if err != nil { return err } @@ -77,7 +80,7 @@ func removeRolesFromUser(keycloakClient *keycloak.KeycloakClient, clientRolesToR for k, roles := range clientRolesToRemove { if len(roles) != 0 { - err := keycloakClient.RemoveClientRolesFromUser(user.RealmId, user.Id, k, roles) + err := keycloakClient.RemoveClientRolesFromUser(ctx, user.RealmId, user.Id, k, roles) if err != nil { return err } @@ -87,7 +90,7 @@ func removeRolesFromUser(keycloakClient *keycloak.KeycloakClient, clientRolesToR return nil } -func resourceKeycloakUserRolesReconcile(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUserRolesReconcile(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -95,9 +98,9 @@ func resourceKeycloakUserRolesReconcile(data *schema.ResourceData, meta interfac roleIds := interfaceSliceToStringSlice(data.Get("role_ids").(*schema.Set).List()) exhaustive := data.Get("exhaustive").(bool) - user, err := keycloakClient.GetUser(realmId, userId) + user, err := keycloakClient.GetUser(ctx, realmId, userId) if err != nil { - return err + return diag.FromErr(err) } if data.HasChange("role_ids") && !data.IsNewResource() { @@ -106,47 +109,47 @@ func resourceKeycloakUserRolesReconcile(data *schema.ResourceData, meta interfac ns := n.(*schema.Set) remove := interfaceSliceToStringSlice(os.Difference(ns).List()) - tfRolesToRemove, err := getExtendedRoleMapping(keycloakClient, realmId, remove) + tfRolesToRemove, err := getExtendedRoleMapping(ctx, keycloakClient, realmId, remove) if err != nil { - return err + return diag.FromErr(err) } - if err = removeRolesFromUser(keycloakClient, tfRolesToRemove.clientRoles, tfRolesToRemove.realmRoles, user); err != nil { - return err + if err = removeRolesFromUser(ctx, keycloakClient, tfRolesToRemove.clientRoles, tfRolesToRemove.realmRoles, user); err != nil { + return diag.FromErr(err) } } - tfRoles, err := getExtendedRoleMapping(keycloakClient, realmId, roleIds) + tfRoles, err := getExtendedRoleMapping(ctx, keycloakClient, realmId, roleIds) if err != nil { - return err + return diag.FromErr(err) } // get the list of currently assigned roles. Due to default realm and client roles // (e.g. roles of the account client) this is probably not empty upon resource creation - roleMappings, err := keycloakClient.GetUserRoleMappings(realmId, userId) + roleMappings, err := keycloakClient.GetUserRoleMappings(ctx, realmId, userId) // sort into roles we need to add and roles we need to remove updates := calculateRoleMappingUpdates(tfRoles, intoRoleMapping(roleMappings)) // add roles - err = addRolesToUser(keycloakClient, updates.clientRolesToAdd, updates.realmRolesToAdd, user) + err = addRolesToUser(ctx, keycloakClient, updates.clientRolesToAdd, updates.realmRolesToAdd, user) if err != nil { - return err + return diag.FromErr(err) } // remove roles if exhaustive (authoritative) if exhaustive { - err = removeRolesFromUser(keycloakClient, updates.clientRolesToRemove, updates.realmRolesToRemove, user) + err = removeRolesFromUser(ctx, keycloakClient, updates.clientRolesToRemove, updates.realmRolesToRemove, user) if err != nil { - return err + return diag.FromErr(err) } } data.SetId(userRolesId(realmId, userId)) - return resourceKeycloakUserRolesRead(data, meta) + return resourceKeycloakUserRolesRead(ctx, data, meta) } -func resourceKeycloakUserRolesRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUserRolesRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) @@ -155,13 +158,13 @@ func resourceKeycloakUserRolesRead(data *schema.ResourceData, meta interface{}) exhaustive := data.Get("exhaustive").(bool) // check if user exists, remove from state if not found - if _, err := keycloakClient.GetUser(realmId, userId); err != nil { - return handleNotFoundError(err, data) + if _, err := keycloakClient.GetUser(ctx, realmId, userId); err != nil { + return handleNotFoundError(ctx, err, data) } - roles, err := keycloakClient.GetUserRoleMappings(realmId, userId) + roles, err := keycloakClient.GetUserRoleMappings(ctx, realmId, userId) if err != nil { - return err + return diag.FromErr(err) } var roleIds []string @@ -186,29 +189,29 @@ func resourceKeycloakUserRolesRead(data *schema.ResourceData, meta interface{}) return nil } -func resourceKeycloakUserRolesDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUserRolesDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) userId := data.Get("user_id").(string) - user, err := keycloakClient.GetUser(realmId, userId) + user, err := keycloakClient.GetUser(ctx, realmId, userId) roleIds := interfaceSliceToStringSlice(data.Get("role_ids").(*schema.Set).List()) - rolesToRemove, err := getExtendedRoleMapping(keycloakClient, realmId, roleIds) + rolesToRemove, err := getExtendedRoleMapping(ctx, keycloakClient, realmId, roleIds) if err != nil { - return err + return diag.FromErr(err) } - err = removeRolesFromUser(keycloakClient, rolesToRemove.clientRoles, rolesToRemove.realmRoles, user) + err = removeRolesFromUser(ctx, keycloakClient, rolesToRemove.clientRoles, rolesToRemove.realmRoles, user) if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakUserRolesImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakUserRolesImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") if len(parts) != 2 { @@ -224,5 +227,10 @@ func resourceKeycloakUserRolesImport(d *schema.ResourceData, meta interface{}) ( d.SetId(userRolesId(realmId, userId)) - return []*schema.ResourceData{d}, resourceKeycloakUserRolesRead(d, meta) + diagnostics := resourceKeycloakUserRolesRead(ctx, d, meta) + if diagnostics.HasError() { + return nil, errors.New(diagnostics[0].Summary) + } + + return []*schema.ResourceData{d}, nil } diff --git a/provider/resource_keycloak_user_roles_test.go b/provider/resource_keycloak_user_roles_test.go index e2f955d5f..bec6e194b 100644 --- a/provider/resource_keycloak_user_roles_test.go +++ b/provider/resource_keycloak_user_roles_test.go @@ -246,7 +246,7 @@ func testAccCheckKeycloakUserHasRoles(resourceName string, exhaustive bool) reso continue } - role, err := keycloakClient.GetRole(realm, v) + role, err := keycloakClient.GetRole(testCtx, realm, v) if err != nil { return err } @@ -254,12 +254,12 @@ func testAccCheckKeycloakUserHasRoles(resourceName string, exhaustive bool) reso roles = append(roles, role) } - user, err := keycloakClient.GetUser(realm, userId) + user, err := keycloakClient.GetUser(testCtx, realm, userId) if err != nil { return err } - userRoleMappings, err := keycloakClient.GetUserRoleMappings(realm, userId) + userRoleMappings, err := keycloakClient.GetUserRoleMappings(testCtx, realm, userId) if err != nil { return err } @@ -315,12 +315,12 @@ func testAccCheckKeycloakUserHasNoRoles(resourceName string) resource.TestCheckF realm := rs.Primary.Attributes["realm_id"] id := rs.Primary.ID - user, err := keycloakClient.GetUser(realm, id) + user, err := keycloakClient.GetUser(testCtx, realm, id) if err != nil { return err } - userRoleMapping, err := keycloakClient.GetUserRoleMappings(realm, id) + userRoleMapping, err := keycloakClient.GetUserRoleMappings(testCtx, realm, id) if err != nil { return err } diff --git a/provider/resource_keycloak_user_template_importer_identity_provider_mapper.go b/provider/resource_keycloak_user_template_importer_identity_provider_mapper.go index 48a5309ba..fce246a9a 100644 --- a/provider/resource_keycloak_user_template_importer_identity_provider_mapper.go +++ b/provider/resource_keycloak_user_template_importer_identity_provider_mapper.go @@ -1,6 +1,7 @@ package provider import ( + "context" "fmt" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -17,19 +18,19 @@ func resourceKeycloakUserTemplateImporterIdentityProviderMapper() *schema.Resour } genericMapperResource := resourceKeycloakIdentityProviderMapper() genericMapperResource.Schema = mergeSchemas(genericMapperResource.Schema, mapperSchema) - genericMapperResource.Create = resourceKeycloakIdentityProviderMapperCreate(getUserTemplateImporterIdentityProviderMapperFromData, setUserTemplateImporterIdentityProviderMapperData) - genericMapperResource.Read = resourceKeycloakIdentityProviderMapperRead(setUserTemplateImporterIdentityProviderMapperData) - genericMapperResource.Update = resourceKeycloakIdentityProviderMapperUpdate(getUserTemplateImporterIdentityProviderMapperFromData, setUserTemplateImporterIdentityProviderMapperData) + genericMapperResource.CreateContext = resourceKeycloakIdentityProviderMapperCreate(getUserTemplateImporterIdentityProviderMapperFromData, setUserTemplateImporterIdentityProviderMapperData) + genericMapperResource.ReadContext = resourceKeycloakIdentityProviderMapperRead(setUserTemplateImporterIdentityProviderMapperData) + genericMapperResource.UpdateContext = resourceKeycloakIdentityProviderMapperUpdate(getUserTemplateImporterIdentityProviderMapperFromData, setUserTemplateImporterIdentityProviderMapperData) return genericMapperResource } -func getUserTemplateImporterIdentityProviderMapperFromData(data *schema.ResourceData, meta interface{}) (*keycloak.IdentityProviderMapper, error) { +func getUserTemplateImporterIdentityProviderMapperFromData(ctx context.Context, data *schema.ResourceData, meta interface{}) (*keycloak.IdentityProviderMapper, error) { keycloakClient := meta.(*keycloak.KeycloakClient) rec, _ := getIdentityProviderMapperFromData(data) - identityProvider, err := keycloakClient.GetIdentityProvider(rec.Realm, rec.IdentityProviderAlias) + identityProvider, err := keycloakClient.GetIdentityProvider(ctx, rec.Realm, rec.IdentityProviderAlias) if err != nil { - return nil, handleNotFoundError(err, data) + return nil, err } if identityProvider.ProviderId == "facebook" || identityProvider.ProviderId == "google" { diff --git a/provider/resource_keycloak_user_template_importer_identity_provider_mapper_test.go b/provider/resource_keycloak_user_template_importer_identity_provider_mapper_test.go index 7589bfd8e..48102cde3 100644 --- a/provider/resource_keycloak_user_template_importer_identity_provider_mapper_test.go +++ b/provider/resource_keycloak_user_template_importer_identity_provider_mapper_test.go @@ -68,7 +68,7 @@ func TestAccKeycloakUserTemplateIdentityProviderMapper_createAfterManualDestroy( }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProviderMapper(mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) + err := keycloakClient.DeleteIdentityProviderMapper(testCtx, mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) if err != nil { t.Fatal(err) } @@ -100,7 +100,7 @@ func TestAccKeycloakUserTemplateIdentityProviderMapper_withExtraConfig_createAft }, { PreConfig: func() { - err := keycloakClient.DeleteIdentityProviderMapper(mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) + err := keycloakClient.DeleteIdentityProviderMapper(testCtx, mapper.Realm, mapper.IdentityProviderAlias, mapper.Id) if err != nil { t.Fatal(err) } @@ -188,7 +188,7 @@ func testAccCheckKeycloakUserTemplateIdentityProviderMapperDestroy() resource.Te alias := rs.Primary.Attributes["identity_provider_alias"] id := rs.Primary.ID - mapper, _ := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + mapper, _ := keycloakClient.GetIdentityProviderMapper(testCtx, realm, alias, id) if mapper != nil { return fmt.Errorf("oidc config with id %s still exists", id) } @@ -208,7 +208,7 @@ func getKeycloakUserTemplateIdentityProviderMapperFromState(s *terraform.State, alias := rs.Primary.Attributes["identity_provider_alias"] id := rs.Primary.ID - mapper, err := keycloakClient.GetIdentityProviderMapper(realm, alias, id) + mapper, err := keycloakClient.GetIdentityProviderMapper(testCtx, realm, alias, id) if err != nil { return nil, fmt.Errorf("error getting identity provider mapper config with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_user_test.go b/provider/resource_keycloak_user_test.go index 7c26e3c88..5043de848 100644 --- a/provider/resource_keycloak_user_test.go +++ b/provider/resource_keycloak_user_test.go @@ -89,7 +89,7 @@ func TestAccKeycloakUser_createAfterManualDestroy(t *testing.T) { }, { PreConfig: func() { - err := keycloakClient.DeleteUser(user.RealmId, user.Id) + err := keycloakClient.DeleteUser(testCtx, user.RealmId, user.Id) if err != nil { t.Fatal(err) } @@ -294,7 +294,7 @@ func testAccCheckKeycloakUserHasFederationLinkWithSourceUserName(resourceName, s return err } - var found bool = false + var found = false for _, federatedIdentity := range fetchedUser.FederatedIdentities { if federatedIdentity.UserName == sourceUserName { found = true @@ -380,7 +380,7 @@ func testAccCheckKeycloakUserDestroy() resource.TestCheckFunc { id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - user, _ := keycloakClient.GetUser(realm, id) + user, _ := keycloakClient.GetUser(testCtx, realm, id) if user != nil { return fmt.Errorf("user with id %s still exists", id) } @@ -399,7 +399,7 @@ func getUserFromState(s *terraform.State, resourceName string) (*keycloak.User, id := rs.Primary.ID realm := rs.Primary.Attributes["realm_id"] - user, err := keycloakClient.GetUser(realm, id) + user, err := keycloakClient.GetUser(testCtx, realm, id) if err != nil { return nil, fmt.Errorf("error getting user with id %s: %s", id, err) } diff --git a/provider/resource_keycloak_users_permissions.go b/provider/resource_keycloak_users_permissions.go index fe464df4c..8d9f09e90 100644 --- a/provider/resource_keycloak_users_permissions.go +++ b/provider/resource_keycloak_users_permissions.go @@ -1,19 +1,21 @@ package provider import ( + "context" + "github.com/hashicorp/terraform-plugin-log/tflog" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mrparkers/terraform-provider-keycloak/keycloak" - "log" ) func resourceKeycloakUsersPermissions() *schema.Resource { return &schema.Resource{ - Create: resourceKeycloakUsersPermissionsCreate, - Read: resourceKeycloakUsersPermissionsRead, - Delete: resourceKeycloakUsersPermissionsDelete, - Update: resourceKeycloakUsersPermissionsUpdate, + CreateContext: resourceKeycloakUsersPermissionsReconcile, + ReadContext: resourceKeycloakUsersPermissionsRead, + DeleteContext: resourceKeycloakUsersPermissionsDelete, + UpdateContext: resourceKeycloakUsersPermissionsReconcile, Importer: &schema.ResourceImporter{ - State: resourceKeycloakUsersPermissionsImport, + StateContext: resourceKeycloakUsersPermissionsImport, }, Schema: map[string]*schema.Schema{ "realm_id": { @@ -40,88 +42,86 @@ func resourceKeycloakUsersPermissions() *schema.Resource { } } -func resourceKeycloakUsersPermissionsCreate(data *schema.ResourceData, meta interface{}) error { - return resourceKeycloakUsersPermissionsUpdate(data, meta) -} - -func resourceKeycloakUsersPermissionsUpdate(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUsersPermissionsReconcile(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) // the existence of this resource implies that it is enabled. - err := keycloakClient.EnableUsersPermissions(realmId) + err := keycloakClient.EnableUsersPermissions(ctx, realmId) if err != nil { - return err + return diag.FromErr(err) } // setting scope permissions requires us to fetch the users permissions details, as well as the realm management client - usersPermissions, err := keycloakClient.GetUsersPermissions(realmId) + usersPermissions, err := keycloakClient.GetUsersPermissions(ctx, realmId) if err != nil { - return err + return diag.FromErr(err) } - realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(realmId, "realm-management") + realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(ctx, realmId, "realm-management") if err != nil { - return err + return diag.FromErr(err) } if viewScope, ok := data.GetOk("view_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["view"], viewScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["view"], viewScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if manageScope, ok := data.GetOk("manage_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["manage"], manageScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["manage"], manageScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if mapRolesScope, ok := data.GetOk("map_roles_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["map-roles"], mapRolesScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["map-roles"], mapRolesScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if manageGroupMembershipScope, ok := data.GetOk("manage_group_membership_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["manage-group-membership"], manageGroupMembershipScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["manage-group-membership"], manageGroupMembershipScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if impersonateScope, ok := data.GetOk("impersonate_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["impersonate"], impersonateScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["impersonate"], impersonateScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } if userImpersonatedScope, ok := data.GetOk("user_impersonated_scope"); ok { - err := setOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["user-impersonated"], userImpersonatedScope.(*schema.Set)) + err := setOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["user-impersonated"], userImpersonatedScope.(*schema.Set)) if err != nil { - return err + return diag.FromErr(err) } } - return resourceKeycloakUsersPermissionsRead(data, meta) + return resourceKeycloakUsersPermissionsRead(ctx, data, meta) } -func resourceKeycloakUsersPermissionsRead(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUsersPermissionsRead(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) - realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(realmId, "realm-management") + realmManagementClient, err := keycloakClient.GetOpenidClientByClientId(ctx, realmId, "realm-management") if err != nil { - return err + return diag.FromErr(err) } - usersPermissions, err := keycloakClient.GetUsersPermissions(realmId) + usersPermissions, err := keycloakClient.GetUsersPermissions(ctx, realmId) if err != nil { - return handleNotFoundError(err, data) + return handleNotFoundError(ctx, err, data) } if !usersPermissions.Enabled { - log.Printf("[WARN] Removing resource with id %s from state as it no longer enabled", data.Id()) + tflog.Warn(ctx, "Removing resource with id from state as it is no longer enabled", map[string]interface{}{ + "id": data.Id(), + }) data.SetId("") return nil } @@ -131,54 +131,54 @@ func resourceKeycloakUsersPermissionsRead(data *schema.ResourceData, meta interf data.Set("enabled", usersPermissions.Enabled) data.Set("authorization_resource_server_id", realmManagementClient.Id) - if viewScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["view"]); err == nil && viewScope != nil { + if viewScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["view"]); err == nil && viewScope != nil { data.Set("view_scope", []interface{}{viewScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if manageScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["manage"]); err == nil && manageScope != nil { + if manageScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["manage"]); err == nil && manageScope != nil { data.Set("manage_scope", []interface{}{manageScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if mapRolesScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["map-roles"]); err == nil && mapRolesScope != nil { + if mapRolesScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["map-roles"]); err == nil && mapRolesScope != nil { data.Set("map_roles_scope", []interface{}{mapRolesScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if manageGroupMembershipScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["manage-group-membership"]); err == nil && manageGroupMembershipScope != nil { + if manageGroupMembershipScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["manage-group-membership"]); err == nil && manageGroupMembershipScope != nil { data.Set("manage_group_membership_scope", []interface{}{manageGroupMembershipScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if impersonateScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["impersonate"]); err == nil && impersonateScope != nil { + if impersonateScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["impersonate"]); err == nil && impersonateScope != nil { data.Set("impersonate_scope", []interface{}{impersonateScope}) } else if err != nil { - return err + return diag.FromErr(err) } - if userImpersonatedScope, err := getOpenidClientScopePermissionPolicy(keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["user-impersonated"]); err == nil && userImpersonatedScope != nil { + if userImpersonatedScope, err := getOpenidClientScopePermissionPolicy(ctx, keycloakClient, realmId, realmManagementClient.Id, usersPermissions.ScopePermissions["user-impersonated"]); err == nil && userImpersonatedScope != nil { data.Set("user_impersonated_scope", []interface{}{userImpersonatedScope}) } else if err != nil { - return err + return diag.FromErr(err) } return nil } -func resourceKeycloakUsersPermissionsDelete(data *schema.ResourceData, meta interface{}) error { +func resourceKeycloakUsersPermissionsDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics { keycloakClient := meta.(*keycloak.KeycloakClient) realmId := data.Get("realm_id").(string) - return keycloakClient.DisableUsersPermissions(realmId) + return diag.FromErr(keycloakClient.DisableUsersPermissions(ctx, realmId)) } -func resourceKeycloakUsersPermissionsImport(d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { +func resourceKeycloakUsersPermissionsImport(_ context.Context, d *schema.ResourceData, _ interface{}) ([]*schema.ResourceData, error) { d.Set("realm_id", d.Id()) d.SetId(d.Id()) diff --git a/provider/resource_keycloak_users_permissions_test.go b/provider/resource_keycloak_users_permissions_test.go index 1b2307917..df174c463 100644 --- a/provider/resource_keycloak_users_permissions_test.go +++ b/provider/resource_keycloak_users_permissions_test.go @@ -52,7 +52,7 @@ func testAccCheckKeycloakUsersPermissionExists(resourceName string) resource.Tes authorizationResourceServerId := rs.Primary.Attributes["authorization_resource_server_id"] var realmManagementId string - clients, _ := keycloakClient.GetOpenidClients(permissions.RealmId, false) + clients, _ := keycloakClient.GetOpenidClients(testCtx, permissions.RealmId, false) for _, client := range clients { if client.ClientId == "realm-management" { realmManagementId = client.Id @@ -68,7 +68,7 @@ func testAccCheckKeycloakUsersPermissionExists(resourceName string) resource.Tes viewScopeDescription := rs.Primary.Attributes["view_scope.0.description"] viewScopeDecisionStrategy := rs.Primary.Attributes["view_scope.0.decision_strategy"] - authzClientView, err := keycloakClient.GetOpenidClientAuthorizationPermission(permissions.RealmId, realmManagementId, permissions.ScopePermissions["view"]) + authzClientView, err := keycloakClient.GetOpenidClientAuthorizationPermission(testCtx, permissions.RealmId, realmManagementId, permissions.ScopePermissions["view"]) if err != nil { return err } @@ -86,7 +86,7 @@ func testAccCheckKeycloakUsersPermissionExists(resourceName string) resource.Tes return fmt.Errorf("decision strategy %s was not equal to %s", authzClientView.DecisionStrategy, viewScopeDecisionStrategy) } - authzClientManage, err := keycloakClient.GetOpenidClientAuthorizationPermission(permissions.RealmId, realmManagementId, permissions.ScopePermissions["manage"]) + authzClientManage, err := keycloakClient.GetOpenidClientAuthorizationPermission(testCtx, permissions.RealmId, realmManagementId, permissions.ScopePermissions["manage"]) if err != nil { return err } @@ -116,7 +116,7 @@ func testAccCheckKeycloakUsersPermissionExists(resourceName string) resource.Tes func testAccCheckKeycloakUsersPermissionsAreDisabled(realmId string) resource.TestCheckFunc { return func(s *terraform.State) error { - permissions, err := keycloakClient.GetUsersPermissions(realmId) + permissions, err := keycloakClient.GetUsersPermissions(testCtx, realmId) if err != nil { return fmt.Errorf("error getting users permissions with realm id %s: %s", realmId, err) } @@ -137,7 +137,7 @@ func getUsersPermissionsFromState(s *terraform.State, resourceName string) (*key realmId := rs.Primary.Attributes["realm_id"] - permissions, err := keycloakClient.GetUsersPermissions(realmId) + permissions, err := keycloakClient.GetUsersPermissions(testCtx, realmId) if err != nil { return nil, fmt.Errorf("error getting users permissions with realm id %s: %s", realmId, err) diff --git a/provider/role_mapping_helpers.go b/provider/role_mapping_helpers.go index 6bb53441f..b29bbe1ce 100644 --- a/provider/role_mapping_helpers.go +++ b/provider/role_mapping_helpers.go @@ -1,6 +1,9 @@ package provider -import "github.com/mrparkers/terraform-provider-keycloak/keycloak" +import ( + "context" + "github.com/mrparkers/terraform-provider-keycloak/keycloak" +) // a struct that represents the "desired" state configured via terraform // the key for 'clientRoles' is keycloak's client-id (the uuid, not to be confused with the OAuth Client Id) @@ -27,12 +30,12 @@ func intoRoleMapping(keycloakRoleMapping *keycloak.RoleMapping) *roleMapping { // given a list of roleIds, query keycloak for role details to find out if a role is a client role or a // realm role (which is required to POST the role assignment to the correct API endpoint) -func getExtendedRoleMapping(keycloakClient *keycloak.KeycloakClient, realmId string, roleIds []string) (*roleMapping, error) { +func getExtendedRoleMapping(ctx context.Context, keycloakClient *keycloak.KeycloakClient, realmId string, roleIds []string) (*roleMapping, error) { clientRoles := make(map[string][]*keycloak.Role) var realmRoles []*keycloak.Role for _, roleId := range roleIds { - role, err := keycloakClient.GetRole(realmId, roleId) + role, err := keycloakClient.GetRole(ctx, realmId, roleId) if err != nil { // if the role doesn't exist anymore, skip it if keycloak.ErrorIs404(err) { diff --git a/provider/test_utils.go b/provider/test_utils.go index e69c0879d..d4c540c26 100644 --- a/provider/test_utils.go +++ b/provider/test_utils.go @@ -1,6 +1,7 @@ package provider import ( + "context" "fmt" "math/rand" "os" @@ -66,8 +67,9 @@ func skipIfEnvNotSet(t *testing.T, envs ...string) { } } -func skipIfVersionIsLessThanOrEqualTo(t *testing.T, keycloakClient *keycloak.KeycloakClient, version keycloak.Version) { - ok, err := keycloakClient.VersionIsLessThanOrEqualTo(version) +// Skips the test if the keycloak server matches a specific major version +func skipIfVersionIsLessThanOrEqualTo(ctx context.Context, t *testing.T, keycloakClient *keycloak.KeycloakClient, version keycloak.Version) { + ok, err := keycloakClient.VersionIsLessThanOrEqualTo(ctx, version) if err != nil { t.Errorf("error checking keycloak version: %v", err) } diff --git a/provider/utils.go b/provider/utils.go index 50fcc295f..dc4c8d153 100644 --- a/provider/utils.go +++ b/provider/utils.go @@ -1,7 +1,9 @@ package provider import ( - "log" + "context" + "github.com/hashicorp/terraform-plugin-log/tflog" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "time" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -9,7 +11,7 @@ import ( ) func keys(data map[string]string) []string { - var result = []string{} + var result []string for k := range data { result = append(result, k) } @@ -64,15 +66,17 @@ func suppressDurationStringDiff(_, old, new string, _ *schema.ResourceData) bool return oldDuration.Seconds() == newDuration.Seconds() } -func handleNotFoundError(err error, data *schema.ResourceData) error { +func handleNotFoundError(ctx context.Context, err error, data *schema.ResourceData) diag.Diagnostics { if keycloak.ErrorIs404(err) { - log.Printf("[WARN] Removing resource with id %s from state as it no longer exists", data.Id()) + tflog.Warn(ctx, "Removing resource from state as it no longer exists", map[string]interface{}{ + "id": data.Id(), + }) data.SetId("") return nil } - return err + return diag.FromErr(err) } func interfaceSliceToStringSlice(iv []interface{}) []string {