diff --git a/.docker/keycloak/config/realm-export.localhost.json b/.docker/keycloak/config/realm-export.localhost.json new file mode 100644 index 000000000..0cb23baa3 --- /dev/null +++ b/.docker/keycloak/config/realm-export.localhost.json @@ -0,0 +1,2610 @@ +{ + "id": "elefan", + "realm": "elefan", + "displayName": "Keycloak", + "displayNameHtml": "
Keycloak
", + "notBefore": 0, + "defaultSignatureAlgorithm": "RS256", + "revokeRefreshToken": false, + "refreshTokenMaxReuse": 0, + "accessTokenLifespan": 60, + "accessTokenLifespanForImplicitFlow": 900, + "ssoSessionIdleTimeout": 1800, + "ssoSessionMaxLifespan": 36000, + "ssoSessionIdleTimeoutRememberMe": 0, + "ssoSessionMaxLifespanRememberMe": 0, + "offlineSessionIdleTimeout": 2592000, + "offlineSessionMaxLifespanEnabled": false, + "offlineSessionMaxLifespan": 5184000, + "clientSessionIdleTimeout": 0, + "clientSessionMaxLifespan": 0, + "clientOfflineSessionIdleTimeout": 0, + "clientOfflineSessionMaxLifespan": 0, + "accessCodeLifespan": 60, + "accessCodeLifespanUserAction": 300, + "accessCodeLifespanLogin": 1800, + "actionTokenGeneratedByAdminLifespan": 43200, + "actionTokenGeneratedByUserLifespan": 300, + "oauth2DeviceCodeLifespan": 600, + "oauth2DevicePollingInterval": 600, + "enabled": true, + "sslRequired": "external", + "registrationAllowed": false, + "registrationEmailAsUsername": false, + "rememberMe": false, + "verifyEmail": false, + "loginWithEmailAllowed": true, + "duplicateEmailsAllowed": false, + "resetPasswordAllowed": false, + "editUsernameAllowed": false, + "bruteForceProtected": false, + "permanentLockout": false, + "maxFailureWaitSeconds": 900, + "minimumQuickLoginWaitSeconds": 60, + "waitIncrementSeconds": 60, + "quickLoginCheckMilliSeconds": 1000, + "maxDeltaTimeSeconds": 43200, + "failureFactor": 30, + "roles": { + "realm": [ + { + "id": "7941610d-25c2-49fb-8e20-486785db4b93", + "name": "uma_authorization", + "description": "${role_uma_authorization}", + "composite": false, + "clientRole": false, + "containerId": "master", + "attributes": {} + }, + { + "id": "87098cab-8164-44e6-8094-6fb37f827929", + "name": "default-roles-master", + "description": "${role_default-roles}", + "composite": true, + "composites": { + "realm": [ + "offline_access", + "uma_authorization" + ], + "client": { + "account": [ + "manage-account", + "view-profile" + ] + } + }, + "clientRole": false, + "containerId": "master", + "attributes": {} + }, + { + "id": "77c165b0-0343-4b67-ad26-c874381973cf", + "name": "admin", + "description": "${role_admin}", + "composite": true, + "composites": { + "realm": [ + "create-realm" + ], + "client": { + "master-realm": [ + "view-realm", + "query-users", + "manage-events", + "create-client", + "manage-authorization", + "view-authorization", + "view-identity-providers", + "view-clients", + "manage-realm", + "query-clients", + "view-events", + "query-groups", + "query-realms", + "manage-clients", + "view-users", + "manage-identity-providers", + "impersonation", + "manage-users" + ] + } + }, + "clientRole": false, + "containerId": "master", + "attributes": {} + }, + { + "id": "eb44483b-0a72-473d-9bd1-267a50f41867", + "name": "create-realm", + "description": "${role_create-realm}", + "composite": false, + "clientRole": false, + "containerId": "master", + "attributes": {} + }, + { + "id": "6814f985-45b1-46e8-8bfb-89ac33c804af", + "name": "offline_access", + "description": "${role_offline-access}", + "composite": false, + "clientRole": false, + "containerId": "master", + "attributes": {} + } + ], + "client": { + "security-admin-console": [], + "admin-cli": [], + "account-console": [], + "broker": [ + { + "id": "5acb761f-b76f-4612-8bd4-f557d2859805", + "name": "read-token", + "description": "${role_read-token}", + "composite": false, + "clientRole": true, + "containerId": "5f0f1b3e-fd08-4508-8e72-7e6f0e1016e5", + "attributes": {} + } + ], + "master-realm": [ + { + "id": "0fd2c359-8ffe-4e3e-a952-a58df7d75f39", + "name": "view-realm", + "description": "${role_view-realm}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "09d3e063-0393-4adf-bea8-b1491d457c11", + "name": "query-users", + "description": "${role_query-users}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "fe78105a-2c1b-4597-b45e-1d05032a78c6", + "name": "manage-events", + "description": "${role_manage-events}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "1a8f121a-52b4-4a13-95f6-b17b3725d148", + "name": "create-client", + "description": "${role_create-client}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "55b29443-d838-4371-8186-958a7915feea", + "name": "manage-authorization", + "description": "${role_manage-authorization}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "84c5bb90-5a1b-42b1-be76-baf1a1b897d9", + "name": "view-authorization", + "description": "${role_view-authorization}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "4895a90a-1732-4eb0-a7d1-c9df062d88a7", + "name": "view-clients", + "description": "${role_view-clients}", + "composite": true, + "composites": { + "client": { + "master-realm": [ + "query-clients" + ] + } + }, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "31aa071e-8048-4160-b24a-a2555f5f0316", + "name": "view-identity-providers", + "description": "${role_view-identity-providers}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "4c38f8e3-1945-4578-8979-ba034018682d", + "name": "manage-realm", + "description": "${role_manage-realm}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "ac26d491-af04-484a-a9b8-7a2633d9f55f", + "name": "query-clients", + "description": "${role_query-clients}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "95db5be0-e8e7-46d8-9764-eac24ccab670", + "name": "query-groups", + "description": "${role_query-groups}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "50fbc31a-5854-46e6-a562-70deb80b836f", + "name": "view-events", + "description": "${role_view-events}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "2c3409f0-99a0-47ff-aec1-51959ba259d6", + "name": "query-realms", + "description": "${role_query-realms}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "6a7a60a5-a5f7-437b-991d-283c1e63317b", + "name": "manage-clients", + "description": "${role_manage-clients}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "9a6276bc-9291-4b55-a1ad-3c2dd8436428", + "name": "view-users", + "description": "${role_view-users}", + "composite": true, + "composites": { + "client": { + "master-realm": [ + "query-groups", + "query-users" + ] + } + }, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "4ad38cc2-847f-457f-8940-782e9545d3fa", + "name": "manage-identity-providers", + "description": "${role_manage-identity-providers}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "01bdc0c6-c4d7-48a7-b076-2ba7815ba3a8", + "name": "impersonation", + "description": "${role_impersonation}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + }, + { + "id": "4d34c1f6-732d-416b-bdf0-b9d20d4b46ac", + "name": "manage-users", + "description": "${role_manage-users}", + "composite": false, + "clientRole": true, + "containerId": "4730ccdf-efe7-4173-b495-ac95da51a474", + "attributes": {} + } + ], + "account": [ + { + "id": "87d670ff-4058-496c-afae-7bf3e98f121a", + "name": "manage-consent", + "description": "${role_manage-consent}", + "composite": true, + "composites": { + "client": { + "account": [ + "view-consent" + ] + } + }, + "clientRole": true, + "containerId": "a61bd6c8-faaa-4fbd-8752-09f14115d521", + "attributes": {} + }, + { + "id": "1a76fcf3-f713-43f5-95bb-8899e2b3a727", + "name": "view-consent", + "description": "${role_view-consent}", + "composite": false, + "clientRole": true, + "containerId": "a61bd6c8-faaa-4fbd-8752-09f14115d521", + "attributes": {} + }, + { + "id": "3e2f441a-d466-4348-83ef-8acb8d6f116d", + "name": "delete-account", + "description": "${role_delete-account}", + "composite": false, + "clientRole": true, + "containerId": "a61bd6c8-faaa-4fbd-8752-09f14115d521", + "attributes": {} + }, + { + "id": "402bb844-10be-458a-9e58-0b5a41295e7e", + "name": "manage-account-links", + "description": "${role_manage-account-links}", + "composite": false, + "clientRole": true, + "containerId": "a61bd6c8-faaa-4fbd-8752-09f14115d521", + "attributes": {} + }, + { + "id": "3ade3216-f686-4f72-b6d7-96d4eb59117b", + "name": "view-applications", + "description": "${role_view-applications}", + "composite": false, + "clientRole": true, + "containerId": "a61bd6c8-faaa-4fbd-8752-09f14115d521", + "attributes": {} + }, + { + "id": "fabd291e-7074-486e-ad25-98dd8b5e3449", + "name": "manage-account", + "description": "${role_manage-account}", + "composite": true, + "composites": { + "client": { + "account": [ + "manage-account-links" + ] + } + }, + "clientRole": true, + "containerId": "a61bd6c8-faaa-4fbd-8752-09f14115d521", + "attributes": {} + }, + { + "id": "83d0b65c-66c4-4b70-aaef-4324e36a863a", + "name": "view-profile", + "description": "${role_view-profile}", + "composite": false, + "clientRole": true, + "containerId": "a61bd6c8-faaa-4fbd-8752-09f14115d521", + "attributes": {} + } + ], + "elefan": [] + } + }, + "defaultRole": { + "id": "87098cab-8164-44e6-8094-6fb37f827929", + "name": "default-roles-master", + "description": "${role_default-roles}", + "composite": true, + "clientRole": false, + "containerId": "master" + }, + "requiredCredentials": [ + "password" + ], + "otpPolicyType": "totp", + "otpPolicyAlgorithm": "HmacSHA1", + "otpPolicyInitialCounter": 0, + "otpPolicyDigits": 6, + "otpPolicyLookAheadWindow": 1, + "otpPolicyPeriod": 30, + "otpSupportedApplications": [ + "FreeOTP", + "Google Authenticator" + ], + "webAuthnPolicyRpEntityName": "keycloak", + "webAuthnPolicySignatureAlgorithms": [ + "ES256" + ], + "webAuthnPolicyRpId": "", + "webAuthnPolicyAttestationConveyancePreference": "not specified", + "webAuthnPolicyAuthenticatorAttachment": "not specified", + "webAuthnPolicyRequireResidentKey": "not specified", + "webAuthnPolicyUserVerificationRequirement": "not specified", + "webAuthnPolicyCreateTimeout": 0, + "webAuthnPolicyAvoidSameAuthenticatorRegister": false, + "webAuthnPolicyAcceptableAaguids": [], + "webAuthnPolicyPasswordlessRpEntityName": "keycloak", + "webAuthnPolicyPasswordlessSignatureAlgorithms": [ + "ES256" + ], + "webAuthnPolicyPasswordlessRpId": "", + "webAuthnPolicyPasswordlessAttestationConveyancePreference": "not specified", + "webAuthnPolicyPasswordlessAuthenticatorAttachment": "not specified", + "webAuthnPolicyPasswordlessRequireResidentKey": "not specified", + "webAuthnPolicyPasswordlessUserVerificationRequirement": "not specified", + "webAuthnPolicyPasswordlessCreateTimeout": 0, + "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister": false, + "webAuthnPolicyPasswordlessAcceptableAaguids": [], + "scopeMappings": [ + { + "clientScope": "offline_access", + "roles": [ + "offline_access" + ] + } + ], + "clientScopeMappings": { + "account": [ + { + "client": "account-console", + "roles": [ + "manage-account" + ] + } + ] + }, + "clients": [ + { + "id": "a61bd6c8-faaa-4fbd-8752-09f14115d521", + "clientId": "account", + "name": "${client_account}", + "rootUrl": "${authBaseUrl}", + "baseUrl": "/realms/master/account/", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": [ + "/realms/master/account/*" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": [ + "web-origins", + "profile", + "roles", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "af2c05db-5d5d-4b62-8f25-d276fc718d81", + "clientId": "account-console", + "name": "${client_account-console}", + "rootUrl": "${authBaseUrl}", + "baseUrl": "/realms/master/account/", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": [ + "/realms/master/account/*" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "pkce.code.challenge.method": "S256" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "ddfb2545-8d24-40b4-acf5-a2fd55a296a1", + "name": "audience resolve", + "protocol": "openid-connect", + "protocolMapper": "oidc-audience-resolve-mapper", + "consentRequired": false, + "config": {} + } + ], + "defaultClientScopes": [ + "web-origins", + "profile", + "roles", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "dcfbb83b-428a-4f78-a155-afc940754033", + "clientId": "admin-cli", + "name": "${client_admin-cli}", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": false, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": [ + "web-origins", + "profile", + "roles", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "5f0f1b3e-fd08-4508-8e72-7e6f0e1016e5", + "clientId": "broker", + "name": "${client_broker}", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": true, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": [ + "web-origins", + "profile", + "roles", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "clientId": "elefan", + "name": "membres.yourcoop.local", + "secret": "secret", + "description": "membres.yourcoop.local", + "rootUrl": "", + "adminUrl": "http://localhost:8000/", + "baseUrl": "http://localhost:8000/", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": [ + "http://localhost:8000/*" + ], + "webOrigins": [ + "http://localhost:8000/" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": true, + "standardFlowEnabled": true, + "implicitFlowEnabled": true, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "access.token.lifespan": "300", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "oauth2.device.authorization.grant.enabled": "false", + "backchannel.logout.revoke.offline.tokens": "true", + "saml.server.signature.keyinfo.ext": "false", + "use.refresh.tokens": "true", + "oidc.ciba.grant.enabled": "false", + "backchannel.logout.session.required": "true", + "backchannel.logout.url": "http://localhost:8000/logout", + "client_credentials.use_refresh_token": "false", + "require.pushed.authorization.requests": "false", + "saml.client.signature": "false", + "id.token.as.detached.signature": "false", + "saml.assertion.signature": "false", + "saml.encrypt": "false", + "login_theme": "keycloak", + "saml.server.signature": "false", + "exclude.session.state.from.auth.response": "false", + "saml.artifact.binding": "false", + "saml_force_name_id_format": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "true", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "name": "address_city", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "address.city", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "address_city", + "jsonType.label": "String" + } + }, + { + "name": "flying", + "protocol": "openid-connect", + "protocolMapper": "oidc-hardcoded-claim-mapper", + "consentRequired": false, + "config": { + "claim.value": "false", + "userinfo.token.claim": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "flying", + "jsonType.label": "boolean", + "access.tokenResponse.claim": "false" + } + }, + { + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "name": "lastName", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "lastName", + "jsonType.label": "String" + } + }, + { + "name": "address_street1", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "address.street1", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "address_street1", + "jsonType.label": "String" + } + }, + { + "name": "co_member_number", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "co_member_number", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "co_member_number", + "jsonType.label": "String" + } + }, + { + "name": "firstName", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "firstName", + "jsonType.label": "String" + } + }, + { + "name": "address_street2", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "address.street2", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "address_street2", + "jsonType.label": "String" + } + }, + { + "name": "groups", + "protocol": "openid-connect", + "protocolMapper": "oidc-group-membership-mapper", + "consentRequired": false, + "config": { + "full.path": "true", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "groups", + "userinfo.token.claim": "true" + } + }, + { + "name": "phone", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "phone", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "phone", + "jsonType.label": "String" + } + }, + { + "name": "address_zipcode", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "address.zipcode", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "address_zipcode", + "jsonType.label": "String" + } + }, + { + "name": "member_number", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "member_number", + "id.token.claim": "false", + "access.token.claim": "false", + "claim.name": "member_number", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "profile", + "roles", + "groups", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ], + "access": { + "view": true, + "configure": true, + "manage": true + } + }, + { + "id": "4730ccdf-efe7-4173-b495-ac95da51a474", + "clientId": "master-realm", + "name": "master Realm", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": true, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": [ + "web-origins", + "profile", + "roles", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + }, + { + "id": "f26b120b-dcfb-4d49-ad84-c4944398ab2e", + "clientId": "security-admin-console", + "name": "${client_security-admin-console}", + "rootUrl": "${authAdminUrl}", + "baseUrl": "/admin/master/console/", + "surrogateAuthRequired": false, + "enabled": true, + "alwaysDisplayInConsole": false, + "clientAuthenticatorType": "client-secret", + "redirectUris": [ + "/admin/master/console/*" + ], + "webOrigins": [ + "+" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "pkce.code.challenge.method": "S256" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "e62f462c-3199-4bb1-b1a2-7230c7341118", + "name": "locale", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "locale", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "locale", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": [ + "web-origins", + "profile", + "roles", + "email" + ], + "optionalClientScopes": [ + "address", + "phone", + "offline_access", + "microprofile-jwt" + ] + } + ], + "clientScopes": [ + { + "id": "d1d587be-4f3c-4818-b851-8b300e7c20bc", + "name": "web-origins", + "description": "OpenID Connect scope for add allowed web origins to the access token", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "false", + "display.on.consent.screen": "false", + "consent.screen.text": "" + }, + "protocolMappers": [ + { + "id": "d52198b9-3700-48d0-b4ec-a67eb8530a51", + "name": "allowed web origins", + "protocol": "openid-connect", + "protocolMapper": "oidc-allowed-origins-mapper", + "consentRequired": false, + "config": {} + } + ] + }, + { + "id": "bd698edc-7366-4c39-9218-181f2a03473d", + "name": "email", + "description": "OpenID Connect built-in scope: email", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${emailScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "4dc063b3-b42a-4033-9911-f9aeb070d53b", + "name": "email verified", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "emailVerified", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email_verified", + "jsonType.label": "boolean" + } + }, + { + "id": "4fe784e3-5b2d-48d4-860b-2041adcc5029", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + } + ] + }, + { + "id": "f34509c6-1b30-4bce-bdcc-9e51330889aa", + "name": "profile", + "description": "OpenID Connect built-in scope: profile", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${profileScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "f38ecc21-5776-43f4-af5d-1896425a17a8", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "b8a7a437-15f2-44dd-a3b1-433727ff3705", + "name": "gender", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "gender", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "gender", + "jsonType.label": "String" + } + }, + { + "id": "ac1fea4e-52a1-4888-95e8-efbe59f093c1", + "name": "birthdate", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "birthdate", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "birthdate", + "jsonType.label": "String" + } + }, + { + "id": "e6258de1-bdb0-4422-9202-a571f23e409a", + "name": "picture", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "picture", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "picture", + "jsonType.label": "String" + } + }, + { + "id": "538bb3d9-9602-4d8d-b243-2f0e1f2402fc", + "name": "middle name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "middleName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "middle_name", + "jsonType.label": "String" + } + }, + { + "id": "2a982137-e525-46e6-abca-659186bb87fb", + "name": "locale", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "locale", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "locale", + "jsonType.label": "String" + } + }, + { + "id": "d536c945-ca64-422f-aa93-0c26f2b727d1", + "name": "website", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "website", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "website", + "jsonType.label": "String" + } + }, + { + "id": "14b1b459-1bd7-493b-a80b-e426c36a6b78", + "name": "updated at", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "updatedAt", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "updated_at", + "jsonType.label": "String" + } + }, + { + "id": "9a941be0-2a3f-4aa0-b962-6c63fc0b2ff8", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "edfb6c4d-722c-4c52-8d24-12a47c60e9bd", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "efc86270-a3ae-4a64-9425-38f7a2e43ad0", + "name": "nickname", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "nickname", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "nickname", + "jsonType.label": "String" + } + }, + { + "id": "9b7d13f9-5d2f-428d-b334-eb4e0a54b0e1", + "name": "profile", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "profile", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "profile", + "jsonType.label": "String" + } + }, + { + "id": "f6b9a7e1-cad5-4fcb-84c9-0ffb5eb5bd1b", + "name": "zoneinfo", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "zoneinfo", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "zoneinfo", + "jsonType.label": "String" + } + }, + { + "id": "d607cc9a-5029-46f5-b0e7-f58ed6126532", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + } + ] + }, + { + "id": "bc1a75cc-bc76-4c5d-99d2-b231ea5d0f5f", + "name": "address", + "description": "OpenID Connect built-in scope: address", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${addressScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "26a2831c-d0e0-4a0f-96b2-d2d336eaaef5", + "name": "address", + "protocol": "openid-connect", + "protocolMapper": "oidc-address-mapper", + "consentRequired": false, + "config": { + "user.attribute.formatted": "formatted", + "user.attribute.country": "country", + "user.attribute.postal_code": "postal_code", + "userinfo.token.claim": "true", + "user.attribute.street": "street", + "id.token.claim": "true", + "user.attribute.region": "region", + "access.token.claim": "true", + "user.attribute.locality": "locality" + } + } + ] + }, + { + "id": "5d7d24e3-8a14-4a3a-a44e-78edb78e861f", + "name": "microprofile-jwt", + "description": "Microprofile - JWT built-in scope", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + }, + "protocolMappers": [ + { + "id": "f31c28ac-a88a-490d-885e-7d9c0fd7b022", + "name": "upn", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "upn", + "jsonType.label": "String" + } + }, + { + "id": "323e0230-0924-4113-89e9-3838cd74c75a", + "name": "groups", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-realm-role-mapper", + "consentRequired": false, + "config": { + "multivalued": "true", + "user.attribute": "foo", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "groups", + "jsonType.label": "String" + } + } + ] + }, + { + "id": "f28b9300-e4e5-45df-ba34-e41d22133786", + "name": "offline_access", + "description": "OpenID Connect built-in scope: offline_access", + "protocol": "openid-connect", + "attributes": { + "consent.screen.text": "${offlineAccessScopeConsentText}", + "display.on.consent.screen": "true" + } + }, + { + "id": "dc682314-0ba1-40a2-8349-5fdee9356fc3", + "name": "phone", + "description": "OpenID Connect built-in scope: phone", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${phoneScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "db6e6be6-cb06-4f3b-89ee-d322e86885e9", + "name": "phone number", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "phoneNumber", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "phone_number", + "jsonType.label": "String" + } + }, + { + "id": "d2b2879b-4db1-47d9-a5be-1ee9580e7ad5", + "name": "phone number verified", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "phoneNumberVerified", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "phone_number_verified", + "jsonType.label": "boolean" + } + } + ] + }, + { + "id": "85069ac7-9bd7-400c-9041-0b0ef30d33f1", + "name": "roles", + "description": "OpenID Connect scope for add user roles to the access token", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "false", + "display.on.consent.screen": "true", + "consent.screen.text": "${rolesScopeConsentText}" + }, + "protocolMappers": [ + { + "id": "65914269-6d64-4644-acd7-e71caab56f5d", + "name": "audience resolve", + "protocol": "openid-connect", + "protocolMapper": "oidc-audience-resolve-mapper", + "consentRequired": false, + "config": {} + }, + { + "id": "01dac415-fcef-4816-8af7-227dc23b36ce", + "name": "realm roles", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-realm-role-mapper", + "consentRequired": false, + "config": { + "user.attribute": "foo", + "access.token.claim": "true", + "claim.name": "realm_access.roles", + "jsonType.label": "String", + "multivalued": "true" + } + }, + { + "id": "e37babb7-6a34-4230-ab7f-07f108bace5a", + "name": "client roles", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-client-role-mapper", + "consentRequired": false, + "config": { + "user.attribute": "foo", + "access.token.claim": "true", + "claim.name": "resource_access.${client_id}.roles", + "jsonType.label": "String", + "multivalued": "true" + } + } + ] + }, + { + "id": "96347b38-f073-4cdc-be4a-eb90c8b03554", + "name": "role_list", + "description": "SAML role list", + "protocol": "saml", + "attributes": { + "consent.screen.text": "${samlRoleListScopeConsentText}", + "display.on.consent.screen": "true" + }, + "protocolMappers": [ + { + "id": "6bca928a-4514-48e1-8a03-c69d88347fbf", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + } + ] + } + ], + "defaultDefaultClientScopes": [ + "role_list", + "profile", + "email", + "roles", + "web-origins" + ], + "defaultOptionalClientScopes": [ + "offline_access", + "address", + "phone", + "microprofile-jwt" + ], + "browserSecurityHeaders": { + "contentSecurityPolicyReportOnly": "", + "xContentTypeOptions": "nosniff", + "xRobotsTag": "none", + "xFrameOptions": "SAMEORIGIN", + "xXSSProtection": "1; mode=block", + "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", + "strictTransportSecurity": "max-age=31536000; includeSubDomains" + }, + "smtpServer": {}, + "eventsEnabled": false, + "eventsListeners": [ + "jboss-logging" + ], + "enabledEventTypes": [], + "adminEventsEnabled": false, + "adminEventsDetailsEnabled": false, + "identityProviders": [], + "identityProviderMappers": [], + "components": { + "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [ + { + "id": "49b0604e-498a-4018-bece-101bfe682873", + "name": "Allowed Client Scopes", + "providerId": "allowed-client-templates", + "subType": "anonymous", + "subComponents": {}, + "config": { + "allow-default-scopes": [ + "true" + ] + } + }, + { + "id": "929f2e40-6989-4e32-8a3f-689fc7af7fd6", + "name": "Consent Required", + "providerId": "consent-required", + "subType": "anonymous", + "subComponents": {}, + "config": {} + }, + { + "id": "b2f7f88a-cf56-4bcd-8555-3e7737faddc9", + "name": "Max Clients Limit", + "providerId": "max-clients", + "subType": "anonymous", + "subComponents": {}, + "config": { + "max-clients": [ + "200" + ] + } + }, + { + "id": "6655930a-0cf4-4b60-bc14-40ba36d1139b", + "name": "Allowed Protocol Mapper Types", + "providerId": "allowed-protocol-mappers", + "subType": "anonymous", + "subComponents": {}, + "config": { + "allowed-protocol-mapper-types": [ + "oidc-usermodel-property-mapper", + "oidc-full-name-mapper", + "saml-user-property-mapper", + "oidc-usermodel-attribute-mapper", + "saml-user-attribute-mapper", + "saml-role-list-mapper", + "oidc-address-mapper", + "oidc-sha256-pairwise-sub-mapper" + ] + } + }, + { + "id": "cbb366f3-0574-43fa-919a-1624a8e0b552", + "name": "Allowed Protocol Mapper Types", + "providerId": "allowed-protocol-mappers", + "subType": "authenticated", + "subComponents": {}, + "config": { + "allowed-protocol-mapper-types": [ + "oidc-address-mapper", + "oidc-sha256-pairwise-sub-mapper", + "saml-user-attribute-mapper", + "saml-user-property-mapper", + "oidc-usermodel-property-mapper", + "saml-role-list-mapper", + "oidc-usermodel-attribute-mapper", + "oidc-full-name-mapper" + ] + } + }, + { + "id": "f03cd9e7-a460-4dad-8dc3-358ed47d79b5", + "name": "Trusted Hosts", + "providerId": "trusted-hosts", + "subType": "anonymous", + "subComponents": {}, + "config": { + "host-sending-registration-request-must-match": [ + "true" + ], + "client-uris-must-match": [ + "true" + ] + } + }, + { + "id": "477593a1-0dd5-44bf-b876-045c034d0703", + "name": "Allowed Client Scopes", + "providerId": "allowed-client-templates", + "subType": "authenticated", + "subComponents": {}, + "config": { + "allow-default-scopes": [ + "true" + ] + } + }, + { + "id": "bcd8a353-a195-4e7b-ab4d-1a015bbfacc9", + "name": "Full Scope Disabled", + "providerId": "scope", + "subType": "anonymous", + "subComponents": {}, + "config": {} + } + ], + "org.keycloak.keys.KeyProvider": [ + { + "id": "056c01fc-8886-45e5-91e9-b338ed7c2838", + "name": "rsa-generated", + "providerId": "rsa-generated", + "subComponents": {}, + "config": { + "priority": [ + "100" + ] + } + }, + { + "id": "61a7d918-1c29-42cb-9f76-9120f7c9c2cc", + "name": "aes-generated", + "providerId": "aes-generated", + "subComponents": {}, + "config": { + "priority": [ + "100" + ] + } + }, + { + "id": "54a306bf-5214-44c4-96df-73e8d54dee72", + "name": "rsa-enc-generated", + "providerId": "rsa-enc-generated", + "subComponents": {}, + "config": { + "priority": [ + "100" + ], + "algorithm": [ + "RSA-OAEP" + ] + } + }, + { + "id": "4c76c80b-7fb2-4379-bbe6-2d6758d0d6cc", + "name": "hmac-generated", + "providerId": "hmac-generated", + "subComponents": {}, + "config": { + "priority": [ + "100" + ], + "algorithm": [ + "HS256" + ] + } + } + ] + }, + "internationalizationEnabled": false, + "supportedLocales": [], + "authenticationFlows": [ + { + "id": "5764d6a6-9ab9-49c0-b0d1-4a3b6bf91a79", + "alias": "Account verification options", + "description": "Method with which to verity the existing account", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-email-verification", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "ALTERNATIVE", + "priority": 20, + "flowAlias": "Verify Existing Account by Re-authentication", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "d237385d-de20-4d56-9138-1081fbf6920b", + "alias": "Authentication Options", + "description": "Authentication options.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "basic-auth", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "basic-auth-otp", + "authenticatorFlow": false, + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-spnego", + "authenticatorFlow": false, + "requirement": "DISABLED", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "1209281d-d4bf-4b96-acb6-7283c952c86d", + "alias": "Browser - Conditional OTP", + "description": "Flow to determine if the OTP is required for the authentication", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "conditional-user-configured", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "609780f8-c50f-4a96-9827-ef5704aa0f81", + "alias": "Direct Grant - Conditional OTP", + "description": "Flow to determine if the OTP is required for the authentication", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "conditional-user-configured", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-otp", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "c570b8b9-e693-432c-96c9-34203e00e601", + "alias": "First broker login - Conditional OTP", + "description": "Flow to determine if the OTP is required for the authentication", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "conditional-user-configured", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "ea66ade5-1db4-43db-a88a-7533a4da29ce", + "alias": "Handle Existing Account", + "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-confirm-link", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "REQUIRED", + "priority": 20, + "flowAlias": "Account verification options", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "8b88580a-a02e-4367-9a60-0bbf705c9619", + "alias": "Reset - Conditional OTP", + "description": "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "conditional-user-configured", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-otp", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "54d7249d-c82b-4c2e-9908-f6abd3601237", + "alias": "User creation or linking", + "description": "Flow for the existing/non-existing user alternatives", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticatorConfig": "create unique user config", + "authenticator": "idp-create-user-if-unique", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "ALTERNATIVE", + "priority": 20, + "flowAlias": "Handle Existing Account", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "9ae359e9-8575-4ff9-b8db-84f085cea1b3", + "alias": "Verify Existing Account by Re-authentication", + "description": "Reauthentication of existing account", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-username-password-form", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "CONDITIONAL", + "priority": 20, + "flowAlias": "First broker login - Conditional OTP", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "9e8f6123-18af-435f-93be-a137e2bf9774", + "alias": "browser", + "description": "browser based authentication", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "auth-cookie", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-spnego", + "authenticatorFlow": false, + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "identity-provider-redirector", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 25, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "forms", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "806d760e-dd1d-478d-bbc3-f2d9d84801d0", + "alias": "clients", + "description": "Base authentication for clients", + "providerId": "client-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "client-secret", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-jwt", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-secret-jwt", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-x509", + "authenticatorFlow": false, + "requirement": "ALTERNATIVE", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "cdc6d76f-632b-49e8-898d-16856d50a848", + "alias": "direct grant", + "description": "OpenID Connect Resource Owner Grant", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "direct-grant-validate-username", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-password", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "CONDITIONAL", + "priority": 30, + "flowAlias": "Direct Grant - Conditional OTP", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "738ede8d-0a07-433c-958d-a102c42e7363", + "alias": "docker auth", + "description": "Used by Docker clients to authenticate against the IDP", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "docker-http-basic-authenticator", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "2ac00703-fade-42bd-9e83-fea39906f062", + "alias": "first broker login", + "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticatorConfig": "review profile config", + "authenticator": "idp-review-profile", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "REQUIRED", + "priority": 20, + "flowAlias": "User creation or linking", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "36e2bca3-cbd1-4b56-a51b-69887538ee0a", + "alias": "forms", + "description": "Username, password, otp and other auth forms.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "auth-username-password-form", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "CONDITIONAL", + "priority": 20, + "flowAlias": "Browser - Conditional OTP", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "ba2ac86e-154d-4742-b9d8-2fbe5ab2bc16", + "alias": "http challenge", + "description": "An authentication flow based on challenge-response HTTP Authentication Schemes", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "no-cookie-redirect", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "REQUIRED", + "priority": 20, + "flowAlias": "Authentication Options", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "e25de487-442b-4c96-a9a8-cd5a6a44d1fc", + "alias": "registration", + "description": "registration flow", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "registration-page-form", + "authenticatorFlow": true, + "requirement": "REQUIRED", + "priority": 10, + "flowAlias": "registration form", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "f4334b65-3337-48bd-bbf4-ae56f84314e8", + "alias": "registration form", + "description": "registration form", + "providerId": "form-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "registration-user-creation", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-profile-action", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-password-action", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 50, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-recaptcha-action", + "authenticatorFlow": false, + "requirement": "DISABLED", + "priority": 60, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "366052fb-7e33-48a1-a721-46567df5f11e", + "alias": "reset credentials", + "description": "Reset credentials for a user if they forgot their password or something", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "reset-credentials-choose-user", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-credential-email", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-password", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorFlow": true, + "requirement": "CONDITIONAL", + "priority": 40, + "flowAlias": "Reset - Conditional OTP", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "3955dfa6-2e46-4fbc-96b7-88999e82a9c1", + "alias": "saml ecp", + "description": "SAML ECP Profile Authentication Flow", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "http-basic-authenticator", + "authenticatorFlow": false, + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + } + ], + "authenticatorConfig": [ + { + "id": "9cd88a5a-351f-431e-a550-5c9846e0addd", + "alias": "create unique user config", + "config": { + "require.password.update.after.registration": "false" + } + }, + { + "id": "4e54c84b-2ff7-481d-b5f5-76aab72140c8", + "alias": "review profile config", + "config": { + "update.profile.on.first.login": "missing" + } + } + ], + "requiredActions": [ + { + "alias": "CONFIGURE_TOTP", + "name": "Configure OTP", + "providerId": "CONFIGURE_TOTP", + "enabled": true, + "defaultAction": false, + "priority": 10, + "config": {} + }, + { + "alias": "terms_and_conditions", + "name": "Terms and Conditions", + "providerId": "terms_and_conditions", + "enabled": false, + "defaultAction": false, + "priority": 20, + "config": {} + }, + { + "alias": "UPDATE_PASSWORD", + "name": "Update Password", + "providerId": "UPDATE_PASSWORD", + "enabled": true, + "defaultAction": false, + "priority": 30, + "config": {} + }, + { + "alias": "UPDATE_PROFILE", + "name": "Update Profile", + "providerId": "UPDATE_PROFILE", + "enabled": true, + "defaultAction": false, + "priority": 40, + "config": {} + }, + { + "alias": "VERIFY_EMAIL", + "name": "Verify Email", + "providerId": "VERIFY_EMAIL", + "enabled": true, + "defaultAction": false, + "priority": 50, + "config": {} + }, + { + "alias": "delete_account", + "name": "Delete Account", + "providerId": "delete_account", + "enabled": false, + "defaultAction": false, + "priority": 60, + "config": {} + }, + { + "alias": "update_user_locale", + "name": "Update User Locale", + "providerId": "update_user_locale", + "enabled": true, + "defaultAction": false, + "priority": 1000, + "config": {} + } + ], + "browserFlow": "browser", + "registrationFlow": "registration", + "directGrantFlow": "direct grant", + "resetCredentialsFlow": "reset credentials", + "clientAuthenticationFlow": "clients", + "dockerAuthenticationFlow": "docker auth", + "attributes": { + "cibaBackchannelTokenDeliveryMode": "poll", + "cibaExpiresIn": "120", + "cibaAuthRequestedUserHint": "login_hint", + "parRequestUriLifespan": "60", + "cibaInterval": "5" + }, + "keycloakVersion": "16.1.1", + "userManagedAccessAllowed": false, + "clientProfiles": { + "profiles": [] + }, + "clientPolicies": { + "policies": [] + }, + "users": [ + { + "username": "newfromkeycloak", + "enabled": true, + "emailVerified": true, + "firstName": "Jimmy (new keycloak)", + "lastName": "flake", + "email": "newfromkeycloak@mail.com", + "credentials": [ + { + "type": "password", + "hashedSaltedValue": "xjNR06W/ur5nBS8KFTrDgE81vLjb/t4A5LG2ubs/rII=", + "salt": "dyyLTNS/D+Ukspy5xgIa4w==", + "hashIterations": 27500, + "algorithm": "pbkdf2-sha256" + } + ], + "attributes": { + "member_number": ["11111"], + "phone": ["0612345651"], + "flying": [true], + "address.street1": ["123 Main St"], + "address.street2": ["Apt 4"], + "address.zipcode": ["12345"], + "address.city": ["Anytown"], + "co_member_number": ["11111"] + }, + "groups": [ + "/coopérateur" + ] + }, + { + "username": "admin1", + "enabled": true, + "emailVerified": true, + "firstName": "Samuel (admin)", + "lastName": "Smith", + "email": "admin1@email.com", + "credentials": [ + { + "type": "password", + "hashedSaltedValue": "xjNR06W/ur5nBS8KFTrDgE81vLjb/t4A5LG2ubs/rII=", + "salt": "dyyLTNS/D+Ukspy5xgIa4w==", + "hashIterations": 27500, + "algorithm": "pbkdf2-sha256" + } + ], + "attributes": { + "member_number": ["11111"], + "phone": ["0612345651"], + "flying": [true], + "address.street1": ["123 Main St"], + "address.street2": ["Apt 4"], + "address.zipcode": ["12345"], + "address.city": ["Anytown"] + }, + "groups": [ + "/coopérateur", + "/infrastructure/informatique/elefan/admin" + ] + }, + { + "username": "admin2", + "enabled": true, + "emailVerified": true, + "firstName": "Sebastian (admin)", + "lastName": "Johnson", + "email": "admin2@email.com", + "credentials": [ + { + "type": "password", + "hashedSaltedValue": "xjNR06W/ur5nBS8KFTrDgE81vLjb/t4A5LG2ubs/rII=", + "salt": "dyyLTNS/D+Ukspy5xgIa4w==", + "hashIterations": 27500, + "algorithm": "pbkdf2-sha256" + } + ], + "attributes": { + "member_number": ["11112"], + "phone": ["0612345652"], + "flying": [true], + "address.street1": ["123 Main St"], + "address.street2": ["Apt 4"], + "address.zipcode": ["12345"], + "address.city": ["Anytown"] + }, + "groups": [ + "/coopérateur", + "/infrastructure/informatique/elefan/admin" + ] + }, + { + "username": "admin3", + "enabled": true, + "emailVerified": true, + "firstName": "David (admin)", + "lastName": "Williams", + "email": "admin3@email.com", + "credentials": [ + { + "type": "password", + "hashedSaltedValue": "xjNR06W/ur5nBS8KFTrDgE81vLjb/t4A5LG2ubs/rII=", + "salt": "dyyLTNS/D+Ukspy5xgIa4w==", + "hashIterations": 27500, + "algorithm": "pbkdf2-sha256" + } + ], + "attributes": { + "member_number": ["12345"], + "phone": ["0612345653"], + "flying": [true], + "address.street1": ["123 Main St"], + "address.street2": ["Apt 4"], + "address.zipcode": ["11113"], + "address.city": ["Anytown"] + }, + "groups": [ + "/coopérateur", + "/infrastructure/informatique/elefan/admin" + ] + }, + { + "username": "admin4", + "enabled": true, + "emailVerified": true, + "firstName": "Carter (admin)", + "lastName": "Brown", + "email": "admin4@email.com", + "credentials": [ + { + "type": "password", + "hashedSaltedValue": "xjNR06W/ur5nBS8KFTrDgE81vLjb/t4A5LG2ubs/rII=", + "salt": "dyyLTNS/D+Ukspy5xgIa4w==", + "hashIterations": 27500, + "algorithm": "pbkdf2-sha256" + } + ], + "attributes": { + "member_number": ["12345"], + "phone": ["0612345654"], + "flying": [true], + "address.street1": ["123 Main St"], + "address.street2": ["Apt 4"], + "address.zipcode": ["11114"], + "address.city": ["Anytown"] + }, + "groups": [ + "/coopérateur", + "/infrastructure/informatique/elefan/admin" + ] + }, + { + "username": "admin5", + "enabled": true, + "emailVerified": true, + "firstName": "Wyatt (admin)", + "lastName": "Jones", + "email": "admin5@email.com", + "credentials": [ + { + "type": "password", + "hashedSaltedValue": "xjNR06W/ur5nBS8KFTrDgE81vLjb/t4A5LG2ubs/rII=", + "salt": "dyyLTNS/D+Ukspy5xgIa4w==", + "hashIterations": 27500, + "algorithm": "pbkdf2-sha256" + } + ], + "attributes": { + "member_number": ["11115"], + "phone": ["0612345655"], + "flying": [true], + "address.street1": ["123 Main St"], + "address.street2": ["Apt 4"], + "address.zipcode": ["12345"], + "address.city": ["Anytown"] + }, + "groups": [ + "/coopérateur", + "/infrastructure/informatique/elefan/admin" + ] + }, + { + "username": "admin", + "enabled": true, + "emailVerified": true, + "firstName": "Jayden (super admin)", + "lastName": "Garcia", + "email": "superadmin@email.com", + "credentials": [ + { + "type": "password", + "hashedSaltedValue": "xjNR06W/ur5nBS8KFTrDgE81vLjb/t4A5LG2ubs/rII=", + "salt": "dyyLTNS/D+Ukspy5xgIa4w==", + "hashIterations": 27500, + "algorithm": "pbkdf2-sha256" + } + ], + "attributes": { + "member_number": ["12345"], + "phone": ["0685428468"], + "flying": [true], + "address.street1": ["123 Main St"], + "address.street2": ["Apt 4"], + "address.zipcode": ["12345"], + "address.city": ["Anytown"], + "co_member_number": ["67890"] + }, + "groups": [ + "/coopérateur", + "/infrastructure/informatique/elefan/super_admin" + ] + } + + ], + "groups": [ + { + "name": "coopérateur", + "path": "/coopérateur" + }, + { + "name": "infrastructure", + "path": "/infrastructure", + "subGroups": [ + { + "name": "informatique", + "path": "/infrastructure/informatique", + "subGroups": [ + { + "name": "elefan", + "subGroups": [ + { + "name": "admin", + "path": "/infrastructure/informatique/elefan/admin" + }, + { + "name": "super_admin", + "path": "/infrastructure/informatique/elefan/super_admin" + }, + { + "name": "formations", + "path": "/infrastructure/informatique/elefan/formations", + "subGroups": [ + { + "name": "Accueil magasin", + "path": "/infrastructure/informatique/elefan/formations/accueil_magasin" + }, + { + "name": "Caisse", + "path": "/infrastructure/informatique/elefan/formations/caisse" + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/.env.oidc b/.env.oidc deleted file mode 100644 index 1c9a94cc6..000000000 --- a/.env.oidc +++ /dev/null @@ -1,227 +0,0 @@ -SYMFONY_ENV='dev' -APP_SECRET='$ecretf0rt3st' -PHP_USER='www-data' -PHP_IDE_CONFIG='serverName=membres.yourcoop.local' -PHP_MEMORY_LIMIT=512M -PHP_SERVICE_NAME='php7.4-fpm' -###> symfony/framework-bundle ### -SYMFONY_DEPRECATIONS_HELPER=999999 -APP_ENV=dev -APP_SECRET=ThisTokenIsNotSoSecretChangeIt -#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 -#TRUSTED_HOSTS='^(localhost|example\.com)$' -###< symfony/framework-bundle ### - -###> doctrine/doctrine-bundle ### -DATABASE_URL="mysql://root:secret@database:3306/symfony?serverVersion=5.7&charset=utf8" -DATABASE_TEST_HOST=127.0.0.1 -###< doctrine/doctrine-bundle ### - -###> symfony/swiftmailer-bundle ### -# For Gmail as a transport, use: "gmail://username:password@localhost" -# For a generic SMTP server, use: "smtp://localhost:25?encryption=&auth_mode=" -# Delivery is disabled by default via "null://localhost" -MAILER_URL=null://localhost -###< symfony/swiftmailer-bundle ### - -# SUPER_ADMIN User -SUPER_ADMIN_USERNAME=admin -SUPER_ADMIN_INITIAL_PASSWORD=password - -# Mailer Configuration -MAILER_TRANSPORT=smtp -MAILER_HOST=mailcatcher -MAILER_PORT=1025 -MAILER_USER=null -MAILER_PASSWORD=null -MAILER_ENCRYPTION=null - -# Transactional Mailer User -TRANSACTIONAL_MAILER_USER=contact@yourcoop.local -TRANSACTIONAL_MAILER_USER_NAME='espace membre' - -# Base Domain for Emails -EMAILS_BASE_DOMAIN=yourcoop.local - -# Email Addresses -EMAILS_CONTACT_NAME='Contact Localcoop' -EMAILS_CONTACT_ADDRESS=contact@yourcoop.local -EMAILS_MEMBER_NAME='Membres Localcoop' -EMAILS_MEMBER_ADDRESS=membres@yourcoop.local -EMAILS_SHIFT_NAME='Créneaux Localcoop' -EMAILS_SHIFT_ADDRESS=creneaux@yourcoop.local -EMAILS_FORMATION_NAME='Formation Localcoop' -EMAILS_FORMATION_ADDRESS=formations@yourcoop.local -EMAILS_ADMIN_NAME='Admin Localcoop' -EMAILS_ADMIN_ADDRESS=admin@yourcoop.local -EMAILS_NOREPLY_NAME='Ne pas répondre' -EMAILS_NOREPLY_ADDRESS=noreply@yourcoop.local - -# Router Configuration -ROUTER_REQUEST_CONTEXT_HOST=membres.yourcoop.local -ROUTER_REQUEST_CONTEXT_SCHEME=https -ROUTER_REQUEST_CONTEXT_BASE_URL= - -# Security: IP check -ENABLE_PLACE_LOCAL_IP_ADDRESS_CHECK=true -PLACE_LOCAL_IP_ADDRESS='127.0.0.1,192.168.0.x' - -# Branding -SITE_NAME="Espace membre @ MyLocalCoop" -PROJECT_NAME="My Local Coop" -PROJECT_URL=https://yourcoop.local/ -PROJECT_URL_DISPLAY=yourcoop.local -MAIN_COLOR=#51CAE9 -LOCAL_CURRENCY_NAME="monnaie locale" - -# Registration -REGISTRATION_DURATION='1 year' -REGISTRATION_EVERY_CIVIL_YEAR=false -REGISTRATION_MANUAL_ENABLED=true -HELLOASSO_REGISTRATION_CAMPAIGN_URL=https://www.helloasso.com/associations/my-local-coop/adhesions/re-adhesion -HELLOASSO_API_KEY= -HELLOASSO_API_PASSWORD= -HELLOASSO_API_BASE_URL=https://api.helloasso.com/v3/ - -# Shifting Configuration -DUE_DURATION_BY_CYCLE=180 -MIN_SHIFT_DURATION=90 -CYCLE_DURATION='28 days' -CYCLE_TYPE=abcd -NEW_USERS_START_AS_BEGINNER=true -ALLOW_EXTRA_SHIFTS=true -MAX_TIME_IN_ADVANCE_TO_BOOK_EXTRA_SHIFTS='3 days' -TIME_AFTER_WHICH_MEMBERS_ARE_LATE_WITH_SHIFTS=-9 -RESERVE_NEW_SHIFT_TO_PRIOR_SHIFTER=true -RESERVE_NEW_SHIFT_TO_PRIOR_SHIFTER_DELAY=7 -FORBID_SHIFT_OVERLAP_TIME=30 -MAX_TIME_AT_END_OF_SHIFT=0 -DISPLAY_NAME_SHIFTERS=false - -# shift fly and fixed -USE_FLY_AND_FIXED=false -FLY_AND_FIXED_ENTITY_FLYING=Beneficiary -FLY_AND_FIXED_ALLOW_FIXED_SHIFT_FREE=false - -# Swipe card -USE_CARD_READER_TO_VALIDATE_SHIFTS=false -SWIPE_CARD_LOGGING=true -SWIPE_CARD_LOGGING_ANONYMOUS=true -DISPLAY_SWIPE_CARDS_SETTINGS=true - -# Shifting: time log saving -USE_TIME_LOG_SAVING=false -TIME_LOG_SAVING_SHIFT_FREE_MIN_TIME_IN_ADVANCE_DAYS=null -TIME_LOG_SAVING_SHIFT_FREE_ALLOW_ONLY_IF_ENOUGH_SAVING=false - -# Profile Configuration -DISPLAY_GAUGE=true -PROFILE_DISPLAY_TASK_LIST=true -PROFILE_DISPLAY_TIME_LOG=true -PROFILE_DISPLAY_SHIFT_FREE_LOG=true -PROFILE_DISPLAY_PERIOD_POSITION_FREE_LOG=true -DISPLAY_FREEZE_ACCOUNT=true -DISPLAY_FREEZE_ACCOUNT_FALSE_MESSAGE="Le gel de compte n'est pas autorisé." -MAX_NB_OF_PAST_CYCLES_TO_DISPLAY=3 - -# User Configuration -USER_ACCOUNT_NOT_ENABLED_MATERIAL_ICON=phonelink_off -USER_ACCOUNT_ENABLED_ICON=☑ -USER_ACCOUNT_ENABLED_MATERIAL_ICON=devices - -# Member Configuration -MAXIMUM_NB_OF_BENEFICIARIES_IN_MEMBERSHIP=2 -MEMBER_WITHDRAWN_ICON=∅ -MEMBER_WITHDRAWN_MATERIAL_ICON=block -MEMBER_WITHDRAWN_BACKGROUND_COLOR='rgba(255, 50, 0, 0.2)' -MEMBER_FROZEN_ICON=❄️ -MEMBER_FROZEN_MATERIAL_ICON=ac_unit -MEMBER_FROZEN_BACKGROUND_COLOR='rgba(0, 138, 255, 0.1)' -MEMBER_EXEMPTED_ICON=☂ -MEMBER_EXEMPTED_MATERIAL_ICON=beach_access -MEMBER_EXEMPTED_BACKGROUND_COLOR='rgb(0, 150, 136, 0.1)' -MEMBER_FLYING_ICON=✈ -MEMBER_FLYING_MATERIAL_ICON=flightsmode -MEMBER_REGISTRATION_MISSING_ICON=$ -MEMBER_REGISTRATION_MISSING_MATERIAL_ICON=attach_money -MEMBER_REGISTRATION_MISSING_BACKGROUND_COLOR='rgb(0, 150, 136, 0.1)' - -# Beneficiary Configuration -BENEFICIARY_MAIN_ICON=⚐ -BENEFICIARY_NEW_ICON=★ -BENEFICIARY_FLYING_ICON=✈ - -# Admin: Member -ADMIN_MEMBER_DISPLAY_SHIFT_FREE_LOG=true -ADMIN_MEMBER_DISPLAY_PERIOD_POSITION_FREE_LOG=true -FORBID_OWN_SHIFT_BOOK_ADMIN=false -FORBID_OWN_SHIFT_FREE_ADMIN=false -FORBID_OWN_SHIFT_VALIDATE_ADMIN=false -FORBID_OWN_TIMELOG_NEW_ADMIN=false - -# Events -MAX_EVENT_PROXY_PER_MEMBER=1 - -# Opening Hours -DISPLAY_OPENING_HOUR_OPEN_CLOSED_HEADER=true -OPENING_HOUR_OPEN_CLOSED_HEADER_OPEN_MESSAGE="Ouvert" -OPENING_HOUR_OPEN_CLOSED_HEADER_CLOSED_MESSAGE="Fermé" - -# Code Generation -CODE_GENERATION_ENABLED=true -DISPLAY_KEYS_SHOP=true -WIKI_KEYS_URL= - -# Logging -LOGGING_MATTERMOST_ENABLED=false -LOGGING_MATTERMOST_LEVEL=critical -LOGGING_MATTERMOST_URL=http://mattermost.yourcoop.local -LOGGING_SWIFTMAILER_ENABLED=false -LOGGING_SWIFTMAILER_LEVEL=critical -LOGGING_SWIFTMAILER_RECIPIENT=email@example.com -LOGGING_MATTERMOST_CHANNEL=elefan - -# Open ID Client -OIDC_ENABLE=true -OIDC_PROFILE_CUSTOM_MESSAGE='vos informations personnelles sont éditables ici ' -OIDC_NO_ACCOUNT_MESSAGE="Vous n\'avez pas de compte. Veuillez contacter le support." -OIDC_ISSUER=http://keycloak:8080/auth -OIDC_REALM=elefan -OIDC_CLIENT_ID=elefan -OIDC_CLIENT_SECRET=secret -OIDC_ROLES_CLAIM=groups - -# OIDC User Attributes Map -OIDC_USER_ATTRIBUTE_FIRSTNAME=firstName -OIDC_USER_ATTRIBUTE_LASTNAME=lastName -OIDC_USER_ATTRIBUTE_MEMBER_NUMBER=member_number -OIDC_USER_ATTRIBUTE_EMAIL=email -OIDC_USER_ATTRIBUTE_PHONE=phone -OIDC_USER_ATTRIBUTE_FLYING=flying -OIDC_USER_ATTRIBUTE_ADDRESS_STREET1=address.street1 -OIDC_USER_ATTRIBUTE_ADDRESS_STREET2=address.street2 -OIDC_USER_ATTRIBUTE_ADDRESS_ZIPCODE=address.zipcode -OIDC_USER_ATTRIBUTE_ADDRESS_CITY=address.city -OIDC_USER_ATTRIBUTE_CO_MEMBER_NUMBER=co_member_number - -# OIDC Roles Map -OIDC_ROLE_USER=/cooperate -OIDC_ROLE_ADMIN_PANEL=/infrastructure/informatique/elefan/admin -OIDC_ROLE_USER_VIEWER=/infrastructure/informatique/elefan/admin -OIDC_ROLE_USER_MANAGER=/infrastructure/informatique/elefan/admin -OIDC_ROLE_SHIFT_MANAGER=/infrastructure/informatique/elefan/admin -OIDC_ROLE_FINANCE_MANAGER=/infrastructure/informatique/elefan/admin -OIDC_ROLE_PROCESS_MANAGER=/infrastructure/informatique/elefan/admin -OIDC_ROLE_ADMIN=/infrastructure/informatique/elefan/admin -OIDC_ROLE_SUPER_ADMIN=/infrastructure/informatique/elefan/super_admin -OIDC_ROLE_OAUTH_LOGIN= - -OIDC_FORMATIONS_CLAIM=groups - -# OIDC Formations Map in JSON -OIDC_FORMATIONS_MAP='{"Accueil magasin": "/infrastructure/informatique/elefan/formations/accueil_magasin", "Caisse": "/infrastructure/informatique/elefan/formations/caisse"}' - -OIDC_COMMISSIONS_CLAIM=groups - -# OIDC Commissions Map in JSON -OIDC_COMMISSIONS_MAP='{"foo": "/grouvernance/foo", "bar": "/grouvernance/bar"}' diff --git a/.env.oidc.test b/.env.oidc.test index f9cf7238d..eca6fa359 100644 --- a/.env.oidc.test +++ b/.env.oidc.test @@ -4,7 +4,7 @@ SYMFONY_ENV='test' APP_SECRET='$ecretf0rt3st' PHP_USER='www-data' -PHP_IDE_CONFIG='serverName=membres.yourcoop.local' +PHP_IDE_CONFIG='serverName=localhost' PHP_MEMORY_LIMIT=512M PHP_SERVICE_NAME='php7.4-fpm' ###> symfony/framework-bundle ### @@ -59,8 +59,8 @@ EMAILS_NOREPLY_NAME='Ne pas répondre' EMAILS_NOREPLY_ADDRESS=noreply@yourcoop.local # Router Configuration -ROUTER_REQUEST_CONTEXT_HOST=membres.yourcoop.local -ROUTER_REQUEST_CONTEXT_SCHEME=https +ROUTER_REQUEST_CONTEXT_HOST=localhost +ROUTER_REQUEST_CONTEXT_SCHEME=http ROUTER_REQUEST_CONTEXT_BASE_URL= # Security: IP check @@ -184,9 +184,9 @@ LOGGING_MATTERMOST_CHANNEL=elefan # Open ID Client OIDC_ENABLE=true -OIDC_PROFILE_CUSTOM_MESSAGE='vos informations personnelles sont éditables ici ' +OIDC_PROFILE_CUSTOM_MESSAGE='vos informations personnelles sont éditables ici ' OIDC_NO_ACCOUNT_MESSAGE="Vous n\'avez pas de compte. Veuillez contacter le support." -OIDC_ISSUER=http://keycloak:8080/auth +OIDC_ISSUER=http://localhost:8080/auth OIDC_REALM=elefan OIDC_CLIENT_ID=elefan OIDC_CLIENT_SECRET=secret diff --git a/.env.test b/.env.test index d70e2d911..431f1d18d 100644 --- a/.env.test +++ b/.env.test @@ -186,7 +186,7 @@ LOGGING_MATTERMOST_CHANNEL=elefan OIDC_ENABLE=false OIDC_PROFILE_CUSTOM_MESSAGE='vos informations personnelles sont éditables ici ' OIDC_NO_ACCOUNT_MESSAGE="Vous n\'avez pas de compte. Veuillez contacter le support." -OIDC_ISSUER=http://keycloak:8080/auth +OIDC_ISSUER=http://localhost:8080/auth OIDC_REALM=elefan OIDC_CLIENT_ID=elefan OIDC_CLIENT_SECRET=secret diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3307a81db..397a4c79b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -246,4 +246,42 @@ jobs: # RUN CYPRESS TESTS ---------------- - name: Run Cypress tests - run: npm run cy:test:main \ No newline at end of file + run: CYPRESS_BASE_URL=http://localhost:8000 npm run cy:test:main + + +# CHANGE ENV VARIABLES ---------------- + - name: Set up test environment variables + run: cp .env.oidc.test .env.test + +# START KEYCLOAK ---------------- + - name: Start Keycloak + run: | + docker run -d \ + --name keycloak \ + -e KEYCLOAK_USER=admin \ + -e KEYCLOAK_PASSWORD=admin \ + -e DB_VENDOR=h2 \ + -e KEYCLOAK_IMPORT=/config/realm-export.json \ + -v ${{ github.workspace }}/.docker/keycloak/config/realm-export.localhost.json:/config/realm-export.json \ + -p 8080:8080 \ + --user root \ + jboss/keycloak:16.1.1 + +# Wait for Keycloak to start + - name: Wait for Keycloak to be ready + run: | + until $(curl --output /dev/null --silent --head --fail http://localhost:8080/auth); do + printf '.' + sleep 5 + done + +# RUN CYPRESS TESTS ---------------- + - name: Run Cypress keycloak tests + uses: cypress-io/github-action@v6 + with: + start: npm run cy:test:oidc + env: + CYPRESS_BASE_URL: http://localhost:8000 + CYPRESS_KEYCLOAK_URL: http://localhost:8080 + + diff --git a/cypress.config.js b/cypress.config.js index 6d143e41f..45f9f0a90 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -6,4 +6,7 @@ module.exports = defineConfig({ viewportWidth: 1920, viewportHeight: 1080, }, + env: { + keycloakUrl: 'http://localhost:8080', + }, }); diff --git a/cypress/e2e/keycloak/admin/admin1_can_login.cy.js b/cypress/e2e/keycloak/admin/admin1_can_login.cy.js index a7a5ab867..7a1f62385 100644 --- a/cypress/e2e/keycloak/admin/admin1_can_login.cy.js +++ b/cypress/e2e/keycloak/admin/admin1_can_login.cy.js @@ -2,7 +2,9 @@ // temporarily disable uncaught exception handling -import {login} from "../keycloak_reusables"; +import {login} from "../keycloak_reusables.cytools"; + +const keycloakUrl = Cypress.env('keycloakUrl') || 'http://localhost:8080' Cypress.on('uncaught:exception', (err, runnable) => { return false @@ -11,7 +13,7 @@ Cypress.on('uncaught:exception', (err, runnable) => { describe('admin1 can login', function () { it('admin story', function () { - login("admin1", "password") + login(keycloakUrl, "admin1", "password") cy.log('home page banner contains "admin"') cy.get('[data-cy=home_welcome_message]').contains('admin') diff --git a/cypress/e2e/keycloak/keycloak_reusables.cytools.js b/cypress/e2e/keycloak/keycloak_reusables.cytools.js index 41a1702b7..210d5b7b5 100644 --- a/cypress/e2e/keycloak/keycloak_reusables.cytools.js +++ b/cypress/e2e/keycloak/keycloak_reusables.cytools.js @@ -1,9 +1,11 @@ -export function login(username, password) { + +export function login(keycloakUrl, username, password) { cy.visit("/") cy.get('#login').click() - - cy.origin('http://keycloak:8080', { args : { username, password }}, ({ username, password }) => { + console.log(Cypress.config()); + console.log(Cypress.env()); + cy.origin(keycloakUrl, { args : { username, password }}, ({ username, password }) => { cy.log("fill in the login form") cy.get('#username').type(username, {force: true}) cy.get('#password').type(password, {force: true}) @@ -12,7 +14,7 @@ export function login(username, password) { cy.get('#kc-login').click() cy.location().then((location) => { - if (location !== null && location.origin === 'http://keycloak:8080') { + if (location !== null && location.origin === keycloakUrl) { cy.get('#kc-login').click() } else { cy.log("not asked for access to user data") diff --git a/package.json b/package.json index 3e4d840c4..2323e047b 100644 --- a/package.json +++ b/package.json @@ -34,8 +34,8 @@ "watch": "encore dev --watch", "build": "npx encore production --progress", "cy:open": "cypress open", - "cy:test:oidc": "CYPRESS_BASE_URL=http://127.0.0.1:8000 cypress run --spec 'cypress/e2e/oidc/*'", - "cy:test:main": "CYPRESS_BASE_URL=http://localhost:8000 cypress run --spec 'cypress/e2e/login/**/*'" + "cy:test:oidc": "cypress run --spec 'cypress/e2e/keycloak/**/*'", + "cy:test:main": "cypress run --spec 'cypress/e2e/login/**/*'" }, "repository": { "type": "git",