ldap-scim-bridge 0.1 → 0.2
raw patch · 6 files changed
+514/−18 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGELOG.md +0/−15
- examples/wire-server/conf1.yaml +21/−0
- examples/wire-server/conf2.yaml +27/−0
- examples/wire-server/run.sh +121/−0
- examples/wire-server/runlog +338/−0
- ldap-scim-bridge.cabal +7/−3
− CHANGELOG.md
@@ -1,15 +0,0 @@-# Changelog--`ldap-scim-bridge` uses [PVP Versioning][1].-The changelog is available [on GitHub][2].--## 0.1--* Working for one non-trivial use-case. See `./examples/wire-server/`--## 0.0.0.0--* Initially created.--[1]: https://pvp.haskell.org-[2]: https://github.com/fisx/ldap-scim-bridge/releases
+ examples/wire-server/conf1.yaml view
@@ -0,0 +1,21 @@+logLevel: "Debug" # one of Trace,Debug,Info,Warn,Error,Fatal; `Fatal` is least noisy, `Trace` most.+ldapSource:+ tls: false+ host: "localhost"+ port: 389+ dn: "cn=admin,dc=nodomain"+ password: "geheim"+ search:+ base: "ou=People,dc=nodomain"+ objectClass: "account"+ codec: "utf8"+scimTarget:+ tls: false+ host: "localhost"+ port: 8088+ path: "/scim/v2"+ token: "Bearer cznOVEqojRi/bKc6v1iyQ2eGPjp62pPBraOx4eUSsls="+mapping:+ userName: "uidNumber"+ externalId: "email"+ email: "email"
+ examples/wire-server/conf2.yaml view
@@ -0,0 +1,27 @@+logLevel: "Debug" # one of Trace,Debug,Info,Warn,Error,Fatal; `Fatal` is least noisy, `Trace` most.+ldapSource:+ tls: false+ host: "localhost"+ port: 389+ dn: "cn=admin,dc=nodomain"+ password: "geheim"+ search:+ base: "ou=NoPeople,dc=nodomain"+ objectClass: "account"+ codec: "utf8"+ deleteOnAttribute: # optional, related to `delete-from-directory`.+ key: "deleted"+ value: "true"+ deleteFromDirectory: # optional; ok to use together with `delete-on-attribute` if you use both.+ base: "ou=DeletedPeople,dc=nodomain"+ objectClass: "account"+scimTarget:+ tls: false+ host: "localhost"+ port: 8088+ path: "/scim/v2"+ token: "Bearer RRhtCL/VF9IYcmb3E9zaDo3rP6w3mZ3Ww3da7d2RDR8="+mapping:+ userName: "uidNumber"+ externalId: "email"+ email: "email"
+ examples/wire-server/run.sh view
@@ -0,0 +1,121 @@+#!/bin/bash++# put this to work with https://github.com/wireapp/wire-server+#+# if you are not familiar with / interested in the wire app, but want+# to bridge ldap and scim in some other context, this file should+# still serve you as a proof of concept, just ignore the parts where+# we're talking to wire.+#+# if you have managed to mutate this file into something that works+# for a different use case, or even if you run out of steam trying,+# we'd appreciate a PR or at least an issue with a code dump.+#+# WARNING: this test is hard to run, and it does not worry about+# polluting your system state. are cleaner, but more involved+# approach can be found in+# https://github.com/wireapp/wire-server/pull/1709.++set -x+set -o pipefail+set -o errexit+cd "$( dirname "${BASH_SOURCE[0]}" )"/../../++export BRIDGE_CONF1=./examples/wire-server/conf1.yaml+export BRIDGE_CONF2=./examples/wire-server/conf2.yaml+export WIRE_USERID+export WIRE_TEAMID+export SCIM_TOKEN+export SCIM_TOKEN_ID+export SCIM_TOKEN_FULL+export WIRE_SERVER_PATH=~/src/wire-server+export SPAR_URL=http://localhost:8088+export BRIG_URL=http://localhost:8088+export GALLEY_URL=http://localhost:8085++function install() {+ sudo apt-get install ldapscripts ldap-utils slapd+}++function clear() {+ # TODO: this both fails independently; I have not investigated.+ sudo ldapdelete -D "cn=admin,dc=nodomain" -w geheim -H ldapi:/// DN "ou=People,dc=nodomain"+ sudo ldapdelete -D "cn=admin,dc=nodomain" -w geheim -H ldapi:/// DN "cn=john,ou=People,dc=nodomain"+}++function scaffolding1() {+ sudo ldapadd -D "cn=admin,dc=nodomain" -w geheim -H ldapi:/// -f ./ldif/dirs.ldif+ sudo ldapadd -D "cn=admin,dc=nodomain" -w geheim -H ldapi:/// -f ./ldif/new_users.ldif+}++function scaffolding2() {+ sudo ldapadd -D "cn=admin,dc=nodomain" -w geheim -H ldapi:/// -f ./ldif/deleted_users.ldif+}++function scaffolding_spar() {+ if ( curl -s $BRIG_URL/i/status ); then+ WIRE_USER=$(${WIRE_SERVER_PATH}/deploy/services-demo/create_test_team_admins.sh -c)+ WIRE_USERID=$(echo $WIRE_USER | sed 's/^\([^,]\+\),\([^,]\+\),\([^,]\+\)$/\1/')+ WIRE_PASSWD=$(echo $WIRE_USER | sed 's/^\([^,]\+\),\([^,]\+\),\([^,]\+\)$/\3/')+ WIRE_TEAMID=$(curl -s -H'content-type: application/json' -H'Z-User: '"${WIRE_USERID}" http://localhost:8082/self | jq .team | xargs echo)++ # create a saml idp (if we don't, users will not be created, but invitated, which would make the following more awkward to write down).+ curl -s -X PUT \+ --header "Z-User: $WIRE_USERID" \+ --header 'Content-Type: application/json;charset=utf-8' \+ -d '{"status": "enabled"}' \+ ${GALLEY_URL}/i/teams/$WIRE_TEAMID/features/sso >/dev/null+ export WIRE_SAMLIDP=$(curl -X POST \+ --header "Z-User: $WIRE_USERID" \+ --header 'Content-Type: application/xml;charset=utf-8' \+ -d "<EntityDescriptor xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" xmlns:samla=\"urn:oasis:names:tc:SAML:2.0:assertion\" xmlns:samlm=\"urn:oasis:names:tc:SAML:2.0:metadata\" xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\" ID=\"_0c29ba62-a541-11e8-8042-873ef87bdcba\" entityID=\"https://issuer.net/_"`uuid`"\" xmlns=\"urn:oasis:names:tc:SAML:2.0:metadata\"><IDPSSODescriptor protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"><KeyDescriptor use=\"signing\"><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIBOTCBxKADAgECAg4TIFmNatMeqaAE8BWQBTANBgkqhkiG9w0BAQsFADAAMB4XDTIxMDkwMzEzMjUyMVoXDTQxMDgyOTEzMjUyMVowADB6MA0GCSqGSIb3DQEBAQUAA2kAMGYCYQDPAqTk/nq2B/J0WH2FtiRh6nB8BvOc6M7d4K2KV0kXrePjeRPh+cDDf9mYrpntnjBa2LGAc0S4gjUXdvnt1Fxg2YYXYJ+N7+jxV36jUng7cGz1tEOB5RIj28Mv8/eXnjUCAREwDQYJKoZIhvcNAQELBQADYQBaIWDz832gg5jZPIy5z0CV1rWbUQALy6SUodWMezbzVF86hycUvZqAzd5Pir8084Mk/6FQK2Hbbml2LaHS8JnZpYxlgNIRNNonzScAUFclDi4NNmcxPuB6ycu9kK/0l+A=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></KeyDescriptor><SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"https://requri.net/fb9e3c14-25eb-482a-8df3-c71e3e83110b\"/></IDPSSODescriptor></EntityDescriptor>" \+ ${SPAR_URL}/identity-providers | jq .)+ if [ "$(echo $WIRE_SAMLIDP | jq .id)" == "null" ]; then+ echo "could not create idp: $WIRE_SAMLIDP"+ false+ fi++ # create a scim token+ SCIM_TOKEN_FULL=$(curl -X POST \+ --header "Z-User: $WIRE_USERID" \+ --header 'Content-Type: application/json;charset=utf-8' \+ -d '{ "description": "test '"`date`"'", "password": "'"$WIRE_PASSWD"'" }' \+ ${SPAR_URL}/scim/auth-tokens)+ SCIM_TOKEN_ID=$(echo $SCIM_TOKEN_FULL | jq -r .info.id)+ SCIM_TOKEN=$(echo $SCIM_TOKEN_FULL | jq -r .token)+ ESCAPED_SCIM_TOKEN=$(echo $SCIM_TOKEN | sed 's/\+/\\\+/g;s_/_\\/_g;s/\=/\\=/g')+ sed -i 's/^ token: \"Bearer .*$/ token: \"Bearer '"${ESCAPED_SCIM_TOKEN}"'"/' $BRIDGE_CONF1+ sed -i 's/^ token: \"Bearer .*$/ token: \"Bearer '"${ESCAPED_SCIM_TOKEN}"'"/' $BRIDGE_CONF2+ else+ # no wire-server running?+ echo "${WIRE_SERVER_PATH}/deploy/dockerephemeral/run.sh"+ echo "${WIRE_SERVER_PATH}/services/start-services-only.sh"+ false+ fi+}++function assert_num_members() {+ sleep 2 # mitigate race conditions (increase the time if this function fails)+ if [ "$(curl -s -H'content-type: application/json' -H'Z-User: '"${WIRE_USERID}" http://localhost:8085/teams/${WIRE_TEAMID}/members | jq '.members|length')" != "$1" ]; then+ echo "$2"+ false+ fi+}++# ----------------------------------------------------------------------+# main++scaffolding_spar+echo WIRE_USERID: $WIRE_USERID+echo WIRE_TEAMID: $WIRE_TEAMID+echo SCIM_TOKEN: $SCIM_TOKEN++scaffolding1+sudo slapcat+cabal run ldap-scim-bridge $BRIDGE_CONF1+assert_num_members 2 "user could not be created!"++scaffolding2+sudo slapcat+cabal run ldap-scim-bridge $BRIDGE_CONF2+assert_num_members 1 "user could not be deleted!"
+ examples/wire-server/runlog view
@@ -0,0 +1,338 @@+$ ./wire-server.sh++ set -o pipefail++ set -o errexit+++ dirname ./wire-server.sh++ cd ./..++ export BRIDGE_CONF1=./examples/wire-server-conf1.yaml++ BRIDGE_CONF1=./examples/wire-server-conf1.yaml++ export BRIDGE_CONF2=./examples/wire-server-conf2.yaml++ BRIDGE_CONF2=./examples/wire-server-conf2.yaml++ export WIRE_USERID++ export WIRE_TEAMID++ export SCIM_TOKEN++ export SCIM_TOKEN_ID++ export SCIM_TOKEN_FULL++ export WIRE_SERVER_PATH=/home/mf/src/wire-server++ WIRE_SERVER_PATH=/home/mf/src/wire-server++ export SPAR_URL=http://localhost:8088++ SPAR_URL=http://localhost:8088++ export BRIG_URL=http://localhost:8088++ BRIG_URL=http://localhost:8088++ export GALLEY_URL=http://localhost:8085++ GALLEY_URL=http://localhost:8085++ scaffolding_spar++ curl -s http://localhost:8088/i/status+++ /home/mf/src/wire-server/deploy/services-demo/create_test_team_admins.sh -c++ WIRE_USER=4644b44a-ddc5-4dc9-849e-b32a6decbf88,j0KYQCqU@example.com,9gXZle96+++ echo 4644b44a-ddc5-4dc9-849e-b32a6decbf88,j0KYQCqU@example.com,9gXZle96+++ sed 's/^\([^,]\+\),\([^,]\+\),\([^,]\+\)$/\1/'++ WIRE_USERID=4644b44a-ddc5-4dc9-849e-b32a6decbf88+++ echo 4644b44a-ddc5-4dc9-849e-b32a6decbf88,j0KYQCqU@example.com,9gXZle96+++ sed 's/^\([^,]\+\),\([^,]\+\),\([^,]\+\)$/\3/'++ WIRE_PASSWD=9gXZle96+++ curl -s '-Hcontent-type: application/json' '-HZ-User: 4644b44a-ddc5-4dc9-849e-b32a6decbf88' http://localhost:8082/self+++ jq .team+++ xargs echo++ WIRE_TEAMID=82377b9d-095e-443b-9243-bc439ba4aab8++ curl -s -X PUT --header 'Z-User: 4644b44a-ddc5-4dc9-849e-b32a6decbf88' --header 'Content-Type: application/json;charset=utf-8' -d '{"status": "enabled"}' http://localhost:8085/i/teams/82377b9d-095e-443b-9243-bc439ba4aab8/features/sso+++ jq .++++ uuid+++ curl -X POST --header 'Z-User: 4644b44a-ddc5-4dc9-849e-b32a6decbf88' --header 'Content-Type: application/xml;charset=utf-8' -d '<EntityDescriptor xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:samla="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:samlm="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" ID="_0c29ba62-a541-11e8-8042-873ef87bdcba" entityID="https://issuer.net/_531fd614-0cc6-11ec-93ad-836df4a3ea22" xmlns="urn:oasis:names:tc:SAML:2.0:metadata"><IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"><KeyDescriptor use="signing"><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIIBOTCBxKADAgECAg4TIFmNatMeqaAE8BWQBTANBgkqhkiG9w0BAQsFADAAMB4XDTIxMDkwMzEzMjUyMVoXDTQxMDgyOTEzMjUyMVowADB6MA0GCSqGSIb3DQEBAQUAA2kAMGYCYQDPAqTk/nq2B/J0WH2FtiRh6nB8BvOc6M7d4K2KV0kXrePjeRPh+cDDf9mYrpntnjBa2LGAc0S4gjUXdvnt1Fxg2YYXYJ+N7+jxV36jUng7cGz1tEOB5RIj28Mv8/eXnjUCAREwDQYJKoZIhvcNAQELBQADYQBaIWDz832gg5jZPIy5z0CV1rWbUQALy6SUodWMezbzVF86hycUvZqAzd5Pir8084Mk/6FQK2Hbbml2LaHS8JnZpYxlgNIRNNonzScAUFclDi4NNmcxPuB6ycu9kK/0l+A=</ds:X509Certificate></ds:X509Data></ds:KeyInfo></KeyDescriptor><SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://requri.net/fb9e3c14-25eb-482a-8df3-c71e3e83110b"/></IDPSSODescriptor></EntityDescriptor>' http://localhost:8088/identity-providers+ % Total % Received % Xferd Average Speed Time Time Time Current+ Dload Upload Total Spent Left Speed+100 2085 0 881 100 1204 20022 27363 --:--:-- --:--:-- --:--:-- 47386++ export 'WIRE_SAMLIDP={+ "id": "13bdaa43-9fa2-4199-b033-127439aa42da",+ "metadata": {+ "issuer": "https://issuer.net/_531fd614-0cc6-11ec-93ad-836df4a3ea22",+ "requestURI": "https://requri.net/fb9e3c14-25eb-482a-8df3-c71e3e83110b",+ "certAuthnResponse": [+ "<ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:X509Data><ds:X509Certificate>MIIBOTCBxKADAgECAg4TIFmNatMeqaAE8BWQBTANBgkqhkiG9w0BAQsFADAAMB4XDTIxMDkwMzEzMjUyMVoXDTQxMDgyOTEzMjUyMVowADB6MA0GCSqGSIb3DQEBAQUAA2kAMGYCYQDPAqTk/nq2B/J0WH2FtiRh6nB8BvOc6M7d4K2KV0kXrePjeRPh+cDDf9mYrpntnjBa2LGAc0S4gjUXdvnt1Fxg2YYXYJ+N7+jxV36jUng7cGz1tEOB5RIj28Mv8/eXnjUCAREwDQYJKoZIhvcNAQELBQADYQBaIWDz832gg5jZPIy5z0CV1rWbUQALy6SUodWMezbzVF86hycUvZqAzd5Pir8084Mk/6FQK2Hbbml2LaHS8JnZpYxlgNIRNNonzScAUFclDi4NNmcxPuB6ycu9kK/0l+A=</ds:X509Certificate></ds:X509Data></ds:KeyInfo>"+ ]+ },+ "extraInfo": {+ "team": "82377b9d-095e-443b-9243-bc439ba4aab8",+ "oldIssuers": [],+ "replacedBy": null+ }+}'++ WIRE_SAMLIDP='{+ "id": "13bdaa43-9fa2-4199-b033-127439aa42da",+ "metadata": {+ "issuer": "https://issuer.net/_531fd614-0cc6-11ec-93ad-836df4a3ea22",+ "requestURI": "https://requri.net/fb9e3c14-25eb-482a-8df3-c71e3e83110b",+ "certAuthnResponse": [+ "<ds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:X509Data><ds:X509Certificate>MIIBOTCBxKADAgECAg4TIFmNatMeqaAE8BWQBTANBgkqhkiG9w0BAQsFADAAMB4XDTIxMDkwMzEzMjUyMVoXDTQxMDgyOTEzMjUyMVowADB6MA0GCSqGSIb3DQEBAQUAA2kAMGYCYQDPAqTk/nq2B/J0WH2FtiRh6nB8BvOc6M7d4K2KV0kXrePjeRPh+cDDf9mYrpntnjBa2LGAc0S4gjUXdvnt1Fxg2YYXYJ+N7+jxV36jUng7cGz1tEOB5RIj28Mv8/eXnjUCAREwDQYJKoZIhvcNAQELBQADYQBaIWDz832gg5jZPIy5z0CV1rWbUQALy6SUodWMezbzVF86hycUvZqAzd5Pir8084Mk/6FQK2Hbbml2LaHS8JnZpYxlgNIRNNonzScAUFclDi4NNmcxPuB6ycu9kK/0l+A=</ds:X509Certificate></ds:X509Data></ds:KeyInfo>"+ ]+ },+ "extraInfo": {+ "team": "82377b9d-095e-443b-9243-bc439ba4aab8",+ "oldIssuers": [],+ "replacedBy": null+ }+}'+++ echo '{' '"id":' '"13bdaa43-9fa2-4199-b033-127439aa42da",' '"metadata":' '{' '"issuer":' '"https://issuer.net/_531fd614-0cc6-11ec-93ad-836df4a3ea22",' '"requestURI":' '"https://requri.net/fb9e3c14-25eb-482a-8df3-c71e3e83110b",' '"certAuthnResponse":' '[' '"<ds:KeyInfo' 'xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"><ds:X509Data><ds:X509Certificate>MIIBOTCBxKADAgECAg4TIFmNatMeqaAE8BWQBTANBgkqhkiG9w0BAQsFADAAMB4XDTIxMDkwMzEzMjUyMVoXDTQxMDgyOTEzMjUyMVowADB6MA0GCSqGSIb3DQEBAQUAA2kAMGYCYQDPAqTk/nq2B/J0WH2FtiRh6nB8BvOc6M7d4K2KV0kXrePjeRPh+cDDf9mYrpntnjBa2LGAc0S4gjUXdvnt1Fxg2YYXYJ+N7+jxV36jUng7cGz1tEOB5RIj28Mv8/eXnjUCAREwDQYJKoZIhvcNAQELBQADYQBaIWDz832gg5jZPIy5z0CV1rWbUQALy6SUodWMezbzVF86hycUvZqAzd5Pir8084Mk/6FQK2Hbbml2LaHS8JnZpYxlgNIRNNonzScAUFclDi4NNmcxPuB6ycu9kK/0l+A=</ds:X509Certificate></ds:X509Data></ds:KeyInfo>"' ']' '},' '"extraInfo":' '{' '"team":' '"82377b9d-095e-443b-9243-bc439ba4aab8",' '"oldIssuers":' '[],' '"replacedBy":' null '}' '}'+++ jq .id++ '[' '"13bdaa43-9fa2-4199-b033-127439aa42da"' == null ']'++++ date+++ curl -X POST --header 'Z-User: 4644b44a-ddc5-4dc9-849e-b32a6decbf88' --header 'Content-Type: application/json;charset=utf-8' -d '{ "description": "test Fri 03 Sep 2021 04:50:48 PM CEST", "password": "9gXZle96" }' http://localhost:8088/scim/auth-tokens+ % Total % Received % Xferd Average Speed Time Time Time Current+ Dload Upload Total Spent Left Speed+100 382 0 300 100 82 6666 1822 --:--:-- --:--:-- --:--:-- 8488++ SCIM_TOKEN_FULL='{"token":"OerHNeMYllaaCbJFN4m6A8Mnz7MYhsXuEtyLuqs/oVk=","info":{"idp":"13bdaa43-9fa2-4199-b033-127439aa42da","created_at":"2021-09-03T14:50:48.080871211Z","team":"82377b9d-095e-443b-9243-bc439ba4aab8","id":"0590aedf-fbe6-4629-afc7-7fc6a974b856","description":"test Fri 03 Sep 2021 04:50:48 PM CEST"}}'+++ echo '{"token":"OerHNeMYllaaCbJFN4m6A8Mnz7MYhsXuEtyLuqs/oVk=","info":{"idp":"13bdaa43-9fa2-4199-b033-127439aa42da","created_at":"2021-09-03T14:50:48.080871211Z","team":"82377b9d-095e-443b-9243-bc439ba4aab8","id":"0590aedf-fbe6-4629-afc7-7fc6a974b856","description":"test' Fri 03 Sep 2021 04:50:48 PM 'CEST"}}'+++ jq -r .info.id++ SCIM_TOKEN_ID=0590aedf-fbe6-4629-afc7-7fc6a974b856+++ echo '{"token":"OerHNeMYllaaCbJFN4m6A8Mnz7MYhsXuEtyLuqs/oVk=","info":{"idp":"13bdaa43-9fa2-4199-b033-127439aa42da","created_at":"2021-09-03T14:50:48.080871211Z","team":"82377b9d-095e-443b-9243-bc439ba4aab8","id":"0590aedf-fbe6-4629-afc7-7fc6a974b856","description":"test' Fri 03 Sep 2021 04:50:48 PM 'CEST"}}'+++ jq -r .token++ SCIM_TOKEN=OerHNeMYllaaCbJFN4m6A8Mnz7MYhsXuEtyLuqs/oVk=+++ echo OerHNeMYllaaCbJFN4m6A8Mnz7MYhsXuEtyLuqs/oVk=+++ sed 's/\+/\\\+/g;s_/_\\/_g;s/\=/\\=/g'++ ESCAPED_SCIM_TOKEN='OerHNeMYllaaCbJFN4m6A8Mnz7MYhsXuEtyLuqs\/oVk\='++ sed -i 's/^ token: \"Bearer .*$/ token: \"Bearer OerHNeMYllaaCbJFN4m6A8Mnz7MYhsXuEtyLuqs\/oVk\="/' ./examples/wire-server-conf1.yaml++ sed -i 's/^ token: \"Bearer .*$/ token: \"Bearer OerHNeMYllaaCbJFN4m6A8Mnz7MYhsXuEtyLuqs\/oVk\="/' ./examples/wire-server-conf2.yaml++ echo WIRE_USERID: 4644b44a-ddc5-4dc9-849e-b32a6decbf88+WIRE_USERID: 4644b44a-ddc5-4dc9-849e-b32a6decbf88++ echo WIRE_TEAMID: 82377b9d-095e-443b-9243-bc439ba4aab8+WIRE_TEAMID: 82377b9d-095e-443b-9243-bc439ba4aab8++ echo SCIM_TOKEN: OerHNeMYllaaCbJFN4m6A8Mnz7MYhsXuEtyLuqs/oVk=+SCIM_TOKEN: OerHNeMYllaaCbJFN4m6A8Mnz7MYhsXuEtyLuqs/oVk=++ scaffolding1++ sudo ldapadd -D cn=admin,dc=nodomain -w geheim -H ldapi:/// -f ./ldif/dirs.ldif+adding new entry "ou=People,dc=nodomain"++adding new entry "ou=DeletedPeople,dc=nodomain"++adding new entry "ou=NoPeople,dc=nodomain"+++ sudo ldapadd -D cn=admin,dc=nodomain -w geheim -H ldapi:/// -f ./ldif/new_users.ldif+adding new entry "cn=uses123email,ou=People,dc=nodomain"+++ sudo slapcat+dn: dc=nodomain+objectClass: top+objectClass: dcObject+objectClass: organization+o: nodomain+dc: nodomain+structuralObjectClass: organization+entryUUID: 0efff8b4-a112-103b-8a2d-25ddfe49ef4d+creatorsName: cn=admin,dc=nodomain+createTimestamp: 20210903145043Z+entryCSN: 20210903145043.406797Z#000000#000#000000+modifiersName: cn=admin,dc=nodomain+modifyTimestamp: 20210903145043Z++dn: ou=People,dc=nodomain+objectClass: organizationalUnit+ou: People+structuralObjectClass: organizationalUnit+entryUUID: 11d8a9d2-a112-103b-9369-f51857108368+creatorsName: cn=admin,dc=nodomain+createTimestamp: 20210903145048Z+entryCSN: 20210903145048.182362Z#000000#000#000000+modifiersName: cn=admin,dc=nodomain+modifyTimestamp: 20210903145048Z++dn: ou=DeletedPeople,dc=nodomain+objectClass: organizationalUnit+ou: People+ou: DeletedPeople+structuralObjectClass: organizationalUnit+entryUUID: 11d96fca-a112-103b-936a-f51857108368+creatorsName: cn=admin,dc=nodomain+createTimestamp: 20210903145048Z+entryCSN: 20210903145048.187453Z#000000#000#000000+modifiersName: cn=admin,dc=nodomain+modifyTimestamp: 20210903145048Z++dn: ou=NoPeople,dc=nodomain+objectClass: organizationalUnit+ou: People+ou: NoPeople+structuralObjectClass: organizationalUnit+entryUUID: 11da32ca-a112-103b-936b-f51857108368+creatorsName: cn=admin,dc=nodomain+createTimestamp: 20210903145048Z+entryCSN: 20210903145048.192445Z#000000#000#000000+modifiersName: cn=admin,dc=nodomain+modifyTimestamp: 20210903145048Z++dn: cn=uses123email,ou=People,dc=nodomain+objectClass: top+objectClass: account+objectClass: posixAccount+objectClass: shadowAccount+objectClass: extensibleObject+cn: uses123email+uid: uses123email+uidNumber: 10004+gidNumber: 10004+email: uses123@example.com+homeDirectory: /home/me+userPassword:: bm90Z29ubmF0ZWxsZWl0aGVy+loginShell: /bin/bash+structuralObjectClass: account+entryUUID: 11dc6b58-a112-103b-936c-f51857108368+creatorsName: cn=admin,dc=nodomain+createTimestamp: 20210903145048Z+entryCSN: 20210903145048.206998Z#000000#000#000000+modifiersName: cn=admin,dc=nodomain+modifyTimestamp: 20210903145048Z+++ cabal run ldap-scim-bridge ./examples/wire-server-conf1.yaml+Up to date+2021-09-03T14:50:48Z, D, "Mapping {fromMapping = fromList [(\"email\",[\"emails\",\"externalId\"]),(\"uidNumber\",[\"userName\"])]}"+2021-09-03T14:50:48Z, I, "[post/put: started]"+2021-09-03T14:50:48Z, D, "Pulled the following ldap users for post/put:\n[SearchEntry (Dn \"cn=uses123email,ou=People,dc=nodomain\") [(Attr \"objectClass\",[\"top\",\"account\",\"posixAccount\",\"shadowAccount\",\"extensibleObject\"]),(Attr \"cn\",[\"uses123email\"]),(Attr \"uid\",[\"uses123email\"]),(Attr \"uidNumber\",[\"10004\"]),(Attr \"gidNumber\",[\"10004\"]),(Attr \"email\",[\"uses123@example.com\"]),(Attr \"homeDirectory\",[\"/home/me\"]),(Attr \"userPassword\",[\"notgonnatelleither\"]),(Attr \"loginShell\",[\"/bin/bash\"])]]"+2021-09-03T14:50:48Z, D, "Translated to scim:\n[\n {\n \"emails\": [\n {\n \"value\": \"uses123@example.com\"\n }\n ],\n \"userName\": \"10004\",\n \"externalId\": \"uses123@example.com\",\n \"schemas\": [\n \"urn:ietf:params:scim:schemas:core:2.0:User\"\n ]\n }\n]"+2021-09-03T14:50:48Z, I, "new user: \"uses123@example.com\""+2021-09-03T14:50:48Z, D, "UserId: \"97d307eb-3512-4b80-b14f-44d9cbfa1787\""+2021-09-03T14:50:48Z, I, "[post/put: done]"+2021-09-03T14:50:48Z, I, "[delete: started]"+2021-09-03T14:50:48Z, D, "Pulled the following ldap users for delete:\n[]"+2021-09-03T14:50:48Z, D, "Translated to scim:\n[]"+2021-09-03T14:50:48Z, I, "[delete: done]"++ assert_num_members 2 'user could not be created!'++ sleep .3+++ curl -s '-Hcontent-type: application/json' '-HZ-User: 4644b44a-ddc5-4dc9-849e-b32a6decbf88' http://localhost:8085/teams/82377b9d-095e-443b-9243-bc439ba4aab8/members+++ jq '.members|length'++ '[' 2 '!=' 2 ']'++ scaffolding2++ sudo ldapadd -D cn=admin,dc=nodomain -w geheim -H ldapi:/// -f ./ldif/deleted_users.ldif+adding new entry "cn=uses123email,ou=DeletedPeople,dc=nodomain"++adding new entry "cn=notcreated,ou=DeletedPeople,dc=nodomain"+++ sudo slapcat+dn: dc=nodomain+objectClass: top+objectClass: dcObject+objectClass: organization+o: nodomain+dc: nodomain+structuralObjectClass: organization+entryUUID: 0efff8b4-a112-103b-8a2d-25ddfe49ef4d+creatorsName: cn=admin,dc=nodomain+createTimestamp: 20210903145043Z+entryCSN: 20210903145043.406797Z#000000#000#000000+modifiersName: cn=admin,dc=nodomain+modifyTimestamp: 20210903145043Z++dn: ou=People,dc=nodomain+objectClass: organizationalUnit+ou: People+structuralObjectClass: organizationalUnit+entryUUID: 11d8a9d2-a112-103b-9369-f51857108368+creatorsName: cn=admin,dc=nodomain+createTimestamp: 20210903145048Z+entryCSN: 20210903145048.182362Z#000000#000#000000+modifiersName: cn=admin,dc=nodomain+modifyTimestamp: 20210903145048Z++dn: ou=DeletedPeople,dc=nodomain+objectClass: organizationalUnit+ou: People+ou: DeletedPeople+structuralObjectClass: organizationalUnit+entryUUID: 11d96fca-a112-103b-936a-f51857108368+creatorsName: cn=admin,dc=nodomain+createTimestamp: 20210903145048Z+entryCSN: 20210903145048.187453Z#000000#000#000000+modifiersName: cn=admin,dc=nodomain+modifyTimestamp: 20210903145048Z++dn: ou=NoPeople,dc=nodomain+objectClass: organizationalUnit+ou: People+ou: NoPeople+structuralObjectClass: organizationalUnit+entryUUID: 11da32ca-a112-103b-936b-f51857108368+creatorsName: cn=admin,dc=nodomain+createTimestamp: 20210903145048Z+entryCSN: 20210903145048.192445Z#000000#000#000000+modifiersName: cn=admin,dc=nodomain+modifyTimestamp: 20210903145048Z++dn: cn=uses123email,ou=People,dc=nodomain+objectClass: top+objectClass: account+objectClass: posixAccount+objectClass: shadowAccount+objectClass: extensibleObject+cn: uses123email+uid: uses123email+uidNumber: 10004+gidNumber: 10004+email: uses123@example.com+homeDirectory: /home/me+userPassword:: bm90Z29ubmF0ZWxsZWl0aGVy+loginShell: /bin/bash+structuralObjectClass: account+entryUUID: 11dc6b58-a112-103b-936c-f51857108368+creatorsName: cn=admin,dc=nodomain+createTimestamp: 20210903145048Z+entryCSN: 20210903145048.206998Z#000000#000#000000+modifiersName: cn=admin,dc=nodomain+modifyTimestamp: 20210903145048Z++dn: cn=uses123email,ou=DeletedPeople,dc=nodomain+objectClass: top+objectClass: account+objectClass: posixAccount+objectClass: shadowAccount+objectClass: extensibleObject+cn: uses123email+uid: uses123email+uidNumber: 10004+gidNumber: 10004+email: uses123@example.com+homeDirectory: /home/me+userPassword:: bm90Z29ubmF0ZWxsZWl0aGVy+loginShell: /bin/bash+structuralObjectClass: account+entryUUID: 125ab85a-a112-103b-936d-f51857108368+creatorsName: cn=admin,dc=nodomain+createTimestamp: 20210903145049Z+entryCSN: 20210903145049.034725Z#000000#000#000000+modifiersName: cn=admin,dc=nodomain+modifyTimestamp: 20210903145049Z++dn: cn=notcreated,ou=DeletedPeople,dc=nodomain+objectClass: top+objectClass: account+objectClass: posixAccount+objectClass: shadowAccount+objectClass: extensibleObject+cn: notcreated+uid: notcreated+uidNumber: 10004+gidNumber: 10004+email: notcreated@example.com+homeDirectory: /home/me2+userPassword:: bm90Z29ubmF0ZWxsZWl0aGVy+loginShell: /bin/bash+structuralObjectClass: account+entryUUID: 125b7bc8-a112-103b-936e-f51857108368+creatorsName: cn=admin,dc=nodomain+createTimestamp: 20210903145049Z+entryCSN: 20210903145049.039729Z#000000#000#000000+modifiersName: cn=admin,dc=nodomain+modifyTimestamp: 20210903145049Z+++ cabal run ldap-scim-bridge ./examples/wire-server-conf2.yaml+Up to date+2021-09-03T14:50:49Z, D, "Mapping {fromMapping = fromList [(\"email\",[\"emails\",\"externalId\"]),(\"uidNumber\",[\"userName\"])]}"+2021-09-03T14:50:49Z, I, "[post/put: started]"+2021-09-03T14:50:49Z, D, "Pulled the following ldap users for post/put:\n[]"+2021-09-03T14:50:49Z, D, "Translated to scim:\n[]"+2021-09-03T14:50:49Z, I, "[post/put: done]"+2021-09-03T14:50:49Z, I, "[delete: started]"+2021-09-03T14:50:49Z, D, "Pulled the following ldap users for delete:\n[SearchEntry (Dn \"cn=notcreated,ou=DeletedPeople,dc=nodomain\") [(Attr \"objectClass\",[\"top\",\"account\",\"posixAccount\",\"shadowAccount\",\"extensibleObject\"]),(Attr \"cn\",[\"notcreated\"]),(Attr \"uid\",[\"notcreated\"]),(Attr \"uidNumber\",[\"10004\"]),(Attr \"gidNumber\",[\"10004\"]),(Attr \"email\",[\"notcreated@example.com\"]),(Attr \"homeDirectory\",[\"/home/me2\"]),(Attr \"userPassword\",[\"notgonnatelleither\"]),(Attr \"loginShell\",[\"/bin/bash\"])],SearchEntry (Dn \"cn=uses123email,ou=DeletedPeople,dc=nodomain\") [(Attr \"objectClass\",[\"top\",\"account\",\"posixAccount\",\"shadowAccount\",\"extensibleObject\"]),(Attr \"cn\",[\"uses123email\"]),(Attr \"uid\",[\"uses123email\"]),(Attr \"uidNumber\",[\"10004\"]),(Attr \"gidNumber\",[\"10004\"]),(Attr \"email\",[\"uses123@example.com\"]),(Attr \"homeDirectory\",[\"/home/me\"]),(Attr \"userPassword\",[\"notgonnatelleither\"]),(Attr \"loginShell\",[\"/bin/bash\"])]]"+2021-09-03T14:50:49Z, D, "Translated to scim:\n[\n {\n \"emails\": [\n {\n \"value\": \"notcreated@example.com\"\n }\n ],\n \"userName\": \"10004\",\n \"externalId\": \"notcreated@example.com\",\n \"schemas\": [\n \"urn:ietf:params:scim:schemas:core:2.0:User\"\n ]\n },\n {\n \"emails\": [\n {\n \"value\": \"uses123@example.com\"\n }\n ],\n \"userName\": \"10004\",\n \"externalId\": \"uses123@example.com\",\n \"schemas\": [\n \"urn:ietf:params:scim:schemas:core:2.0:User\"\n ]\n }\n]"+2021-09-03T14:50:49Z, I, "[delete: done]"++ assert_num_members 1 'user could not be deleted!'++ sleep .3+++ curl -s '-Hcontent-type: application/json' '-HZ-User: 4644b44a-ddc5-4dc9-849e-b32a6decbf88' http://localhost:8085/teams/82377b9d-095e-443b-9243-bc439ba4aab8/members+++ jq '.members|length'++ '[' 1 '!=' 1 ']'
ldap-scim-bridge.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: ldap-scim-bridge-version: 0.1+version: 0.2 synopsis: See README for synopsis description: See README for description homepage: https://github.com/fisx/ldap-scim-bridge@@ -12,8 +12,12 @@ copyright: (c) 2021 wire.com category: System build-type: Simple-extra-doc-files: README.md- CHANGELOG.md+extra-doc-files: examples/wire-server/run.sh+ examples/wire-server/conf1.yaml+ examples/wire-server/conf2.yaml+ examples/wire-server/runlog+extra-source-files: README.md+ tested-with: GHC == 8.8.3 source-repository head