1
0
mirror of https://github.com/zokradonh/kopano-docker synced 2025-06-06 15:36:40 +00:00

fix external authority support (#367)

* comment currently broken tests (because of read-only container)
* move initial creation out of guest or authority configuration
* instead of copying merge files into destination with slurp
* failsafe authority registration
This commit is contained in:
Felix Bartels 2020-03-19 15:41:23 +00:00 committed by GitHub
parent c8a7958083
commit 3f4a56a562
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 22 deletions

View File

@ -30,11 +30,11 @@ tests:
stdout:
contains:
- '"description": "Access Kopano Meet"'
identifier registration in /etc/kopano:
command: /commander/test-helper.sh && wrapper.sh && yq . $identifier_registration_conf
config:
env:
identifier_registration_conf: /etc/kopano/konnectd-identifier-registration.yaml
#identifier registration in /etc/kopano:
# command: /commander/test-helper.sh && wrapper.sh && yq . $identifier_registration_conf
# config:
# env:
# identifier_registration_conf: /etc/kopano/konnectd-identifier-registration.yaml
no write permissions for certificates:
command: /commander/test-helper.sh && wrapper.sh
exit-code: 1
@ -46,17 +46,17 @@ tests:
env:
signing_private_key: /root/sign.key
DOCKERIZE_TIMEOUT: 1s
certificate creation in container:
command: /commander/test-helper.sh && wrapper.sh
stderr:
contains:
- "setup: creating new RSA private key at"
not-contains:
- "Timeout after 360s waiting on dependencies to become available:"
config:
env:
signing_private_key: /tmp/sign.key
encryption_secret_key: /tmp/secret.key
#certificate creation in container: # currently does not work because of read-only container
# command: /commander/test-helper.sh && wrapper.sh
# stderr:
# contains:
# - "setup: creating new RSA private key at"
# not-contains:
# - "Timeout after 360s waiting on dependencies to become available:"
# config:
# env:
# signing_private_key: /tmp/sign.key
# encryption_secret_key: /tmp/secret.key
config:
env:
PATH: ${PATH}

View File

@ -46,9 +46,13 @@ if [ -f "${encryption_secret_key}" ] && [ ! -s "${encryption_secret_key}" ]; the
RANDFILE=/tmp/.rnd openssl rand -out "${encryption_secret_key}" 32
fi
# Create working copy by merging packaged example in /etc/kopano with passed registration conf
CONFIG_JSON=/tmp/konnectd-identifier-registration.yaml
yq -s '.[0] + .[1]' /etc/kopano/konnectd-identifier-registration.yaml "${identifier_registration_conf:?}" | sponge "$CONFIG_JSON"
if [ "${allow_client_guests:-}" = "yes" ]; then
# only modify identifier registration if it does not already contain the right settings
if ! grep -q "konnect/guestok" "${identifier_registration_conf:?}"; then
if ! grep -q "konnect/guestok" "$CONFIG_JSON"; then
# TODO this could be simplified so that ecparam and eckey are only required if there is no jwk-meet.json yet
ecparam=${ecparam:-/etc/kopano/ecparam.pem}
@ -80,8 +84,6 @@ if [ "${allow_client_guests:-}" = "yes" ]; then
echo "Patching identifier registration for use of the Meet guest mode"
/usr/local/bin/konnectd utils jwk-from-pem --use sig "$eckey" > /tmp/jwk-meet.json
cp /etc/kopano/konnectd-identifier-registration.yaml /tmp/konnectd-identifier-registration.yaml
CONFIG_JSON=/tmp/konnectd-identifier-registration.yaml
#yq -y ".clients += [{\"id\": \"grapi-explorer.js\", \"name\": \"Grapi Explorer\", \"application_type\": \"web\", \"trusted\": true, \"insecure\": true, \"redirect_uris\": [\"http://$FQDNCLEANED:3000/\"]}]" $CONFIG_JSON | sponge $CONFIG_JSON
yq -y ".clients += [{\"id\": \"kpop-https://${FQDN%/*}/meet/\", \"name\": \"Kopano Meet\", \"application_type\": \"web\", \"trusted\": true, \"redirect_uris\": [\"https://${FQDN%/*}/meet/\"], \"trusted_scopes\": [\"konnect/guestok\", \"kopano/kwm\"], \"jwks\": {\"keys\": [{\"kty\": $(jq .kty /tmp/jwk-meet.json), \"use\": $(jq .use /tmp/jwk-meet.json), \"crv\": $(jq .crv /tmp/jwk-meet.json), \"d\": $(jq .d /tmp/jwk-meet.json), \"kid\": $(jq .kid /tmp/jwk-meet.json), \"x\": $(jq .x /tmp/jwk-meet.json), \"y\": $(jq .y /tmp/jwk-meet.json)}]},\"request_object_signing_alg\": \"ES256\"}]" $CONFIG_JSON | sponge $CONFIG_JSON
# TODO this last bit can likely go (but then we must default to a registry stored below /etc/kopano)
@ -93,9 +95,8 @@ fi
if [ "${external_oidc_provider:-}" = "yes" ]; then
echo "Patching identifier registration for external OIDC provider"
CONFIG_JSON=/etc/kopano/konnectd-identifier-registration.yaml
echo "authorities: [{name: ${external_oidc_name:-}, default: yes, iss: ${external_oidc_url:-}, client_id: kopano-meet, client_secret: ${external_oidc_clientsecret:-}, authority_type: oidc, response_type: id_token, scopes: [openid, profile, email]}]" >> $CONFIG_JSON
yq -y . $CONFIG_JSON | sponge "$identifier_registration_conf"
echo "authorities: [{name: ${external_oidc_name:-}, default: yes, iss: ${external_oidc_url:-}, client_id: kopano-meet, client_secret: ${external_oidc_clientsecret:-}, authority_type: oidc, response_type: id_token, scopes: [openid, profile, email]}]" >> /tmp/authority.json
yq -s '.[0] + .[1]' $CONFIG_JSON /tmp/authority.json | sponge "$identifier_registration_conf"
fi
# source additional configuration from Konnect cfg (potentially overwrites env vars)