diff --git a/realm-export.json b/.docker/keycloak/config/realm-export.localhost.json
similarity index 92%
rename from realm-export.json
rename to .docker/keycloak/config/realm-export.localhost.json
index d29119128..0cb23baa3 100644
--- a/realm-export.json
+++ b/.docker/keycloak/config/realm-export.localhost.json
@@ -1,6 +1,6 @@
{
- "id": "master",
- "realm": "master",
+ "id": "elefan",
+ "realm": "elefan",
"displayName": "Keycloak",
"displayNameHtml": "
Keycloak
",
"notBefore": 0,
@@ -646,17 +646,17 @@
"secret": "secret",
"description": "membres.yourcoop.local",
"rootUrl": "",
- "adminUrl": "http://membres.yourcoop.local:8000/",
- "baseUrl": "http://membres.yourcoop.local:8000/",
+ "adminUrl": "http://localhost:8000/",
+ "baseUrl": "http://localhost:8000/",
"surrogateAuthRequired": false,
"enabled": true,
"alwaysDisplayInConsole": false,
"clientAuthenticatorType": "client-secret",
"redirectUris": [
- "http://membres.yourcoop.local:8000/*"
+ "http://localhost:8000/*"
],
"webOrigins": [
- "http://membres.yourcoop.local:8000/"
+ "http://localhost:8000/"
],
"notBefore": 0,
"bearerOnly": false,
@@ -678,7 +678,7 @@
"use.refresh.tokens": "true",
"oidc.ciba.grant.enabled": "false",
"backchannel.logout.session.required": "true",
- "backchannel.logout.url": "http://membres.yourcoop.local:8000/logout",
+ "backchannel.logout.url": "http://localhost:8000/logout",
"client_credentials.use_refresh_token": "false",
"require.pushed.authorization.requests": "false",
"saml.client.signature": "false",
@@ -693,23 +693,23 @@
"tls.client.certificate.bound.access.tokens": "false",
"saml.authnstatement": "false",
"display.on.consent.screen": "true",
- "saml.onetimeuse.condition": "false",
+ "saml.onetimeuse.condition": "false"
},
"authenticationFlowBindingOverrides": {},
"fullScopeAllowed": true,
"nodeReRegistrationTimeout": -1,
"protocolMappers": [
{
- "name": "adresse.ville",
+ "name": "address_city",
"protocol": "openid-connect",
"protocolMapper": "oidc-usermodel-attribute-mapper",
"consentRequired": false,
"config": {
"userinfo.token.claim": "true",
- "user.attribute": "adresse.ville",
+ "user.attribute": "address.city",
"id.token.claim": "true",
"access.token.claim": "true",
- "claim.name": "adresse.ville",
+ "claim.name": "address_city",
"jsonType.label": "String"
}
},
@@ -757,16 +757,16 @@
}
},
{
- "name": "adresse.adresse",
+ "name": "address_street1",
"protocol": "openid-connect",
"protocolMapper": "oidc-usermodel-attribute-mapper",
"consentRequired": false,
"config": {
"userinfo.token.claim": "true",
- "user.attribute": "adresse.adresse",
+ "user.attribute": "address.street1",
"id.token.claim": "true",
"access.token.claim": "true",
- "claim.name": "adresse.adresse",
+ "claim.name": "address_street1",
"jsonType.label": "String"
}
},
@@ -777,7 +777,7 @@
"consentRequired": false,
"config": {
"userinfo.token.claim": "true",
- "user.attribute": "conjoint",
+ "user.attribute": "co_member_number",
"id.token.claim": "true",
"access.token.claim": "true",
"claim.name": "co_member_number",
@@ -799,16 +799,16 @@
}
},
{
- "name": "adresse.complement",
+ "name": "address_street2",
"protocol": "openid-connect",
"protocolMapper": "oidc-usermodel-attribute-mapper",
"consentRequired": false,
"config": {
"userinfo.token.claim": "true",
- "user.attribute": "adresse.complement",
+ "user.attribute": "address.street2",
"id.token.claim": "true",
"access.token.claim": "true",
- "claim.name": "adresse.complement",
+ "claim.name": "address_street2",
"jsonType.label": "String"
}
},
@@ -832,7 +832,7 @@
"consentRequired": false,
"config": {
"userinfo.token.claim": "true",
- "user.attribute": "telephone",
+ "user.attribute": "phone",
"id.token.claim": "true",
"access.token.claim": "true",
"claim.name": "phone",
@@ -840,16 +840,16 @@
}
},
{
- "name": "adresse.code_postal",
+ "name": "address_zipcode",
"protocol": "openid-connect",
"protocolMapper": "oidc-usermodel-attribute-mapper",
"consentRequired": false,
"config": {
"userinfo.token.claim": "true",
- "user.attribute": "adresse.code_postal",
+ "user.attribute": "address.zipcode",
"id.token.claim": "true",
"access.token.claim": "true",
- "claim.name": "adresse.code_postal",
+ "claim.name": "address_zipcode",
"jsonType.label": "String"
}
},
@@ -860,7 +860,7 @@
"consentRequired": false,
"config": {
"userinfo.token.claim": "true",
- "user.attribute": "id",
+ "user.attribute": "member_number",
"id.token.claim": "false",
"access.token.claim": "false",
"claim.name": "member_number",
@@ -2349,13 +2349,73 @@
"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@example.com",
+ "email": "admin2@email.com",
"credentials": [
{
"type": "password",
@@ -2365,9 +2425,126 @@
"algorithm": "pbkdf2-sha256"
}
],
- "clientRoles": {
- "elefan": ["admin"]
+ "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"],
@@ -2380,9 +2557,10 @@
},
"groups": [
"/coopérateur",
- "/infrastructure/informatique/elefan/admin"
+ "/infrastructure/informatique/elefan/super_admin"
]
}
+
],
"groups": [
{
diff --git a/.env.dist b/.env.dist
index 23d6a35fa..d159f647a 100644
--- a/.env.dist
+++ b/.env.dist
@@ -181,9 +181,9 @@ LOGGING_MATTERMOST_CHANNEL=elefan
# Open ID Client
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 l\'administrateur.'
-OIDC_ISSUER=http://host.docker.internal:8081/auth
+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
diff --git a/.env.oidc.test b/.env.oidc.test
new file mode 100644
index 000000000..eca6fa359
--- /dev/null
+++ b/.env.oidc.test
@@ -0,0 +1,228 @@
+# This is used with the github ci
+
+
+SYMFONY_ENV='test'
+APP_SECRET='$ecretf0rt3st'
+PHP_USER='www-data'
+PHP_IDE_CONFIG='serverName=localhost'
+PHP_MEMORY_LIMIT=512M
+PHP_SERVICE_NAME='php7.4-fpm'
+###> symfony/framework-bundle ###
+SYMFONY_DEPRECATIONS_HELPER=999999
+APP_ENV=test
+#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@127.0.0.1:3306/symfony?serverVersion=5.7&charset=utf8"
+###< 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=localhost
+ROUTER_REQUEST_CONTEXT_SCHEME=http
+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://localhost: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.test b/.env.test
index d0592fa68..431f1d18d 100644
--- a/.env.test
+++ b/.env.test
@@ -1,20 +1,21 @@
-SYMFONY_ENV='dev'
+# This is used with the github ci
+
+
+APP_ENV=test
+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 ###
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
+DATABASE_URL="mysql://root:secret@127.0.0.1:3306/symfony?serverVersion=5.7&charset=utf8"
###< doctrine/doctrine-bundle ###
###> symfony/swiftmailer-bundle ###
@@ -58,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
@@ -183,8 +184,9 @@ LOGGING_MATTERMOST_CHANNEL=elefan
# Open ID Client
OIDC_ENABLE=false
-OIDC_PROFILE_CUSTOM_MESSAGE='vos informations personnelles sont éditables ici '
-OIDC_ISSUER=http://host.docker.internal:8081/auth
+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://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 0b17fad87..8aab710f4 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -2,26 +2,135 @@ name: Integration and Functional tests
on:
pull_request:
- branches: [ master ]
+ branches:
+ - master
+ - staging
+ - dev
jobs:
- symfony:
- name: main
- # https://hub.docker.com/_/ubuntu/
- runs-on: ubuntu-20.04
+ setup:
+ runs-on: ubuntu-22.04
strategy:
fail-fast: true
matrix:
php-versions: ['7.4']
steps:
-# # clean ( for local debug )
-# - name: Remove all mysql containers
-# run: docker rm -f $(docker ps -a -q --filter ancestor=mariadb:10.4.10)
+# REMOVE RESIDUAL CONTAINERS ( for local debug with act only )
+ - name: Remove all mysql containers when working with act
+ if: ${{ env.ACT }}
+ run: |
+ CONTAINERS=$(docker ps -a -q --filter ancestor=mariadb:10.4.10)
+ if [ ! -z "$CONTAINERS" ]; then
+ docker rm -f $CONTAINERS
+ else
+ echo "No containers to remove."
+ fi
- name: Checkout code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
+
+# INSTALL DEPENDENCIES ----------------
+ - name: Setup PHP, extensions and composer with shivammathur/setup-php
+ uses: shivammathur/setup-php@verbose
+ with:
+ php-version: ${{ matrix.php-versions }}
+ tools: composer:2.2
+ extensions: mbstring, xml, ctype, iconv, intl, pdo_mysql, dom, filter, gd, iconv, json
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '20.11.0'
+
+ - name: Get composer cache directory
+ id: composer-cache
+ run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_ENV
+
+ - name: Cache composer dependencies
+ uses: actions/cache@v4
+ with:
+ path: |
+ ${{ env.dir }}
+ ./vendor
+ key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
+ restore-keys: ${{ runner.os }}-composer-
+
+# INSTALL PACKAGES ----------------
+ - name: Clean node_modules
+ run: rm -rf node_modules
+
+ - name: Install NPM packages
+ run: npm ci
+
+ - name: Install Composer dependencies
+ run: composer install --no-progress --prefer-dist --optimize-autoloader
- # Start database service
+
+# UPLOAD CACHED DIRECTORIES ----------------
+ - name: Upload Vendor Directory as Artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: vendor-dir
+ path: vendor/
+
+ phpStan:
+ needs: setup
+ runs-on: ubuntu-22.04
+ steps:
+ - uses: actions/checkout@v4
+
+# GET CACHED DIRECTORIES ----------------
+ - name: Download Vendor Directory
+ uses: actions/download-artifact@v4
+ with:
+ name: vendor-dir
+ path: vendor/
+
+# INSTALL DEPENDENCIES ----------------
+ - name: Setup PHP, extensions and composer with shivammathur/setup-php
+ uses: shivammathur/setup-php@verbose
+ with:
+ php-version: ${{ matrix.php-versions }}
+ tools: composer:2.2
+ extensions: mbstring, xml, ctype, iconv, intl, pdo_mysql, dom, filter, gd, iconv, json
+
+ - name: Set executable permissions for PHPStan
+ run: chmod +x ./vendor/bin/phpstan
+
+# RUN PHPSTAN ----------------
+ - name: Run PHPStan
+ run: ./vendor/bin/phpstan analyse src
+
+
+ symfony-tests:
+ needs: setup
+ runs-on: ubuntu-22.04
+ steps:
+ - uses: actions/checkout@v4
+
+# GET CACHED DIRECTORIES ----------------
+ - name: Download Vendor Directory
+ uses: actions/download-artifact@v4
+ with:
+ name: vendor-dir
+ path: vendor/
+
+# INSTALL DEPENDENCIES ----------------
+ - name: Install MySQL Client
+ run: sudo apt-get update && sudo apt-get install -y mysql-client
+
+ - name: Setup PHP, extensions and composer with shivammathur/setup-php
+ uses: shivammathur/setup-php@verbose
+ with:
+ php-version: ${{ matrix.php-versions }}
+ tools: composer:2.2
+ extensions: mbstring, xml, ctype, iconv, intl, pdo_mysql, dom, filter, gd, iconv, json
+
+# SET ENVIRONMENT VARIABLES ----------------
+ - name: Set up test environment variables
+ run: cp .env.test .env
+
+# START SERVICES ----------------
- name: Set up MySQL
uses: getong/mariadb-action@v1.1
with:
@@ -35,10 +144,43 @@ jobs:
mysql user: 'user' # Required if "mysql root password" is empty, default is empty. The superuser for the specified database. Can use secrets, too
mysql password: 'password' # Required if "mysql user" exists. The password for the "mysql user"
+ - name: Wait for MySQL to become available
+ run: |
+ until mysql -h 127.0.0.1 -u root -psecret -e "SELECT 1"; do
+ echo 'Waiting for MySQL...'
+ sleep 1
+ done
+
+# RUN MIGRATIONS ----------------
+ - name: Run migrations
+ run: php bin/console doctrine:migrations:migrate --no-interaction
+
+# RUN TESTS ----------------
+ - name: Run unit and functional tests
+ run: |
+ php ./vendor/bin/phpunit --configuration phpunit.xml.dist
+
+
+ cypress-tests:
+ needs: setup
+ runs-on: ubuntu-22.04
+ steps:
+ - uses: actions/checkout@v4
+
+# GET CACHED DIRECTORIES ----------------
+ - name: Download Vendor Directory
+ uses: actions/download-artifact@v4
+ with:
+ name: vendor-dir
+ path: vendor/
+
+# INSTALL DEPENDENCIES ----------------
- name: Install MySQL Client
run: sudo apt-get update && sudo apt-get install -y mysql-client
- # https://github.com/shivammathur/setup-php (community)
+ - name: Install Cypress dependencies
+ run: sudo apt-get install -y xvfb libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth
+
- name: Setup PHP, extensions and composer with shivammathur/setup-php
uses: shivammathur/setup-php@verbose
with:
@@ -46,33 +188,94 @@ jobs:
tools: composer:2.2
extensions: mbstring, xml, ctype, iconv, intl, pdo_mysql, dom, filter, gd, iconv, json
- # Composer
- - name: Get composer cache directory
- id: composer-cache
- run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_ENV
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '20.11.0'
- - name: Cache composer dependencies
- uses: actions/cache@v3
+ - name: Install Symfony CLI globally
+ run: |
+ curl -sS https://get.symfony.com/cli/installer | bash
+ sudo mv /home/runner/.symfony5/bin/symfony /usr/local/bin/symfony
+
+# SET ENVIRONMENT VARIABLES ----------------
+ - name: Set up test environment variables
+ run: cp .env.test .env
+
+# START SERVICES ----------------
+ - name: Set up MySQL
+ uses: getong/mariadb-action@v1.1
with:
- path: |
- ${{ env.dir }}
- ./vendor
- key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
- restore-keys: ${{ runner.os }}-composer-
+ host port: 3306 # Optional, default value is 3306. The port of host
+ container port: 3306 # Optional, default value is 3306. The port of container
+ character set server: 'utf8mb4' # Optional, default value is 'utf8mb4'. The '--character-set-server' option for mysqld
+ collation server: 'utf8mb4_general_ci' # Optional, default value is 'utf8mb4_general_ci'. The '--collation-server' option for mysqld
+ mariadb version: '10.4.10' # Optional, default value is "latest". The version of the MySQL
+ mysql database: 'symfony' # Optional, default value is "test". The specified database which will be created
+ mysql root password: 'secret' # Required if "mysql user" is empty, default is empty. The root superuser password
+ mysql user: 'user' # Required if "mysql root password" is empty, default is empty. The superuser for the specified database. Can use secrets, too
+ mysql password: 'password' # Required if "mysql user" exists. The password for the "mysql user"
- - name: Install Composer dependencies
- run: composer install --no-progress --prefer-dist --optimize-autoloader
+ - name: Wait for MySQL to become available
+ run: |
+ until mysql -h 127.0.0.1 -u root -psecret -e "SELECT 1"; do
+ echo 'Waiting for MySQL...'
+ sleep 1
+ done
- # PHPStan finds bugs in your code without writing tests
- # https://github.com/phpstan/phpstan
- - name: Run PHPStan code scan
- run: vendor/bin/phpstan analyse src
+ - name: Start Symfony server
+ run: symfony server:start --no-tls -d --port=8000
- # Create database
+# RUN MIGRATIONS ----------------
- name: Run migrations
- run: php bin/console doctrine:migrations:migrate --no-interaction --env=test
+ run: php bin/console doctrine:migrations:migrate --no-interaction
- # Tests
- - name: Run unit and functional tests
+# FILL DATABASE ----------------
+ - name: Run fixture
+ run: php bin/console doctrine:fixtures:load --no-interaction
+
+# BUILD FRONT ----------------
+ - name : install packages
+ run: npm install
+
+ - name: Enable verbose npm logging
+ run: npm config set loglevel verbose
+
+ - name: Build front-end assets
+ run: ./node_modules/.bin/encore production --progress
+
+# RUN CYPRESS TESTS ----------------
+ - name: Run Cypress tests
+ 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: |
- php ./vendor/bin/phpunit --configuration phpunit.xml.dist
+ 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 tests
+ run: CYPRESS_BASE_URL=http://localhost:8000 CYPRESS_KEYCLOAK_URL=http://localhost:8080 npm run cy:test:oidc
+
diff --git a/config/packages/test/doctrine.yaml b/config/packages/test/doctrine.yaml
deleted file mode 100644
index 6dbee844d..000000000
--- a/config/packages/test/doctrine.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-doctrine:
- dbal:
- host: '%env(DATABASE_TEST_HOST)%'
\ No newline at end of file
diff --git a/config/packages/test/framework.yaml b/config/packages/test/framework.yaml
index 2ee7eb4a7..5094c6d28 100644
--- a/config/packages/test/framework.yaml
+++ b/config/packages/test/framework.yaml
@@ -1,2 +1,4 @@
framework:
test: true
+ session:
+ cookie_domain: "localhost"
diff --git a/config/packages/test/monolog.yaml b/config/packages/test/monolog.yaml
index 82548da1e..71cd1ed26 100644
--- a/config/packages/test/monolog.yaml
+++ b/config/packages/test/monolog.yaml
@@ -5,16 +5,16 @@ monolog:
path: '%kernel.logs_dir%/%kernel.environment%.log'
level: debug
channels: ['!event']
- mattermost:
- type: slackwebhook
- webhook_url: "%logging.mattermost.url%"
- channel: '%logging.mattermost.channel%'
- bot_name: 'Monolog'
- use_attachment: true,
- icon_emoji: ''
- use_short_attachment: true
- include_extra: true
- level: '%logging.mattermost.level%'
+# mattermost:
+# type: slackwebhook
+# webhook_url: "%logging.mattermost.url%"
+# channel: '%logging.mattermost.channel%'
+# bot_name: 'Monolog'
+# use_attachment: true,
+# icon_emoji: ''
+# use_short_attachment: true
+# include_extra: true
+# level: '%logging.mattermost.level%'
console:
type: console
process_psr_3_messages: false
diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml
index 016089136..e9eec2dd9 100644
--- a/config/packages/twig.yaml
+++ b/config/packages/twig.yaml
@@ -104,9 +104,10 @@ twig:
oidc_enable: '%env(bool:OIDC_ENABLE)%'
oidc_issuer: '%env(OIDC_ISSUER)%'
oidc_client_id: "%env(OIDC_CLIENT_ID)%"
- oidc_roles_claim: "%env(OIDC_ROLES_CLAIM)%"
+ oidc_roles_claim: "%oidc_roles_claim%"
oidc_roles_map: "%oidc_roles_map%"
- oidc_formations_claim: "%env(OIDC_FORMATIONS_CLAIM)%"
+ oidc_user_attributes_map: "%oidc_user_attributes_map%"
+ oidc_formations_claim: "%oidc_formations_claim%"
oidc_formations_map: "%env(OIDC_FORMATIONS_MAP)%"
oidc_commissions_claim: "%env(OIDC_COMMISSIONS_CLAIM)%"
oidc_commissions_map: "%env(OIDC_COMMISSIONS_MAP)%"
diff --git a/config/services.yaml b/config/services.yaml
index 215dcad77..29403f200 100644
--- a/config/services.yaml
+++ b/config/services.yaml
@@ -92,17 +92,34 @@ parameters:
opening_hour_open_closed_header_closed_message: '%env(OPENING_HOUR_OPEN_CLOSED_HEADER_CLOSED_MESSAGE)%'
opening_hour_open_closed_header_open_message: '%env(OPENING_HOUR_OPEN_CLOSED_HEADER_OPEN_MESSAGE)%'
oidc_enable: '%env(bool:OIDC_ENABLE)%'
+ oidc_user_attributes_map:
+ firstname: "%env(OIDC_USER_ATTRIBUTE_FIRSTNAME)%"
+ lastname: "%env(OIDC_USER_ATTRIBUTE_LASTNAME)%"
+ member_number: "%env(OIDC_USER_ATTRIBUTE_MEMBER_NUMBER)%"
+ email: "%env(OIDC_USER_ATTRIBUTE_EMAIL)%"
+ phone: "%env(OIDC_USER_ATTRIBUTE_PHONE)%"
+ flying: "%env(OIDC_USER_ATTRIBUTE_FLYING)%"
+ address_street1: "%env(OIDC_USER_ATTRIBUTE_ADDRESS_STREET1)%"
+ address_street2: "%env(OIDC_USER_ATTRIBUTE_ADDRESS_STREET2)%"
+ address_zipcode: "%env(OIDC_USER_ATTRIBUTE_ADDRESS_ZIPCODE)%"
+ address_city: "%env(OIDC_USER_ATTRIBUTE_ADDRESS_CITY)%"
+ co_member_number: "%env(OIDC_USER_ATTRIBUTE_CO_MEMBER_NUMBER)%"
oidc_roles_map:
- ROLE_USER: '%env(OIDC_ROLE_USER)%'
- ROLE_ADMIN_PANEL: '%env(OIDC_ROLE_ADMIN_PANEL)%'
- ROLE_FINANCE_MANAGER: '%env(OIDC_ROLE_FINANCE_MANAGER)%'
- ROLE_SHIFT_MANAGER: '%env(OIDC_ROLE_SHIFT_MANAGER)%'
- ROLE_PROCESS_MANAGER: '%env(OIDC_ROLE_PROCESS_MANAGER)%'
- ROLE_USER_MANAGER: '%env(OIDC_ROLE_USER_MANAGER)%'
- ROLE_USER_VIEWER: '%env(OIDC_ROLE_USER_VIEWER)%'
- ROLE_ADMIN: '%env(OIDC_ROLE_ADMIN)%'
- ROLE_SUPER_ADMIN: '%env(OIDC_ROLE_SUPER_ADMIN)%'
- ROLE_OAUTH_LOGIN: '%env(OIDC_ROLE_OAUTH_LOGIN)%'
+ USER: '%env(OIDC_ROLE_USER)%'
+ ADMIN_PANEL: '%env(OIDC_ROLE_ADMIN_PANEL)%'
+ FINANCE_MANAGER: '%env(OIDC_ROLE_FINANCE_MANAGER)%'
+ SHIFT_MANAGER: '%env(OIDC_ROLE_SHIFT_MANAGER)%'
+ PROCESS_MANAGER: '%env(OIDC_ROLE_PROCESS_MANAGER)%'
+ USER_MANAGER: '%env(OIDC_ROLE_USER_MANAGER)%'
+ USER_VIEWER: '%env(OIDC_ROLE_USER_VIEWER)%'
+ ADMIN: '%env(OIDC_ROLE_ADMIN)%'
+ SUPER_ADMIN: '%env(OIDC_ROLE_SUPER_ADMIN)%'
+ OAUTH_LOGIN: '%env(OIDC_ROLE_OAUTH_LOGIN)%'
+ oidc_roles_claim: '%env(OIDC_ROLES_CLAIM)%'
+ oidc_formations_claim: '%env(OIDC_FORMATIONS_CLAIM)%'
+ oidc_formations_map: '%env(OIDC_FORMATIONS_MAP)%'
+ oidc_commissions_claim: '%env(OIDC_COMMISSIONS_CLAIM)%'
+ oidc_commissions_map: '%env(OIDC_COMMISSIONS_MAP)%'
place_local_ip_address: '%env(PLACE_LOCAL_IP_ADDRESS)%'
profile_display_period_position_free_log: '%env(bool:PROFILE_DISPLAY_PERIOD_POSITION_FREE_LOG)%'
profile_display_shift_free_log: '%env(bool:PROFILE_DISPLAY_SHIFT_FREE_LOG)%'
diff --git a/cypress.config.js b/cypress.config.js
new file mode 100644
index 000000000..6f00d1a6e
--- /dev/null
+++ b/cypress.config.js
@@ -0,0 +1,12 @@
+const { defineConfig } = require("cypress");
+
+module.exports = defineConfig({
+ e2e: {
+ baseUrl: 'http://membres.yourcoop.local:8000',
+ viewportWidth: 1920,
+ viewportHeight: 1080,
+ },
+ env: {
+ KEYCLOAK_URL: 'http://keycloak:8080',
+ },
+});
diff --git a/cypress/e2e/keycloak/admin/admin1_can_login.cy.js b/cypress/e2e/keycloak/admin/admin1_can_login.cy.js
new file mode 100644
index 000000000..e0bc509e7
--- /dev/null
+++ b/cypress/e2e/keycloak/admin/admin1_can_login.cy.js
@@ -0,0 +1,31 @@
+// NO PERMANENT CHANGE TO DATABASE
+
+import {login} from "../keycloak_reusables.cytools";
+
+let keycloakUrl = Cypress.env('KEYCLOAK_URL')
+
+
+// temporarily disable uncaught exception handling
+Cypress.on('uncaught:exception', (err, runnable) => {
+ return false
+})
+
+describe('admin1 can login', function () {
+ it('admin story', function () {
+
+ login(keycloakUrl, 'admin1', 'password');
+
+ cy.log('home page banner contains "admin"')
+ cy.get('[data-cy=home_welcome_message]').contains('admin')
+
+ cy.log('go to settings page')
+ cy.get('[data-cy=settings_link]').click()
+
+ cy.log('display informations')
+ cy.get('[data-cy=open_my_informations]').click()
+
+ cy.log('check if role_admin in the page')
+ cy.get('[data-cy=user_roles_container]').contains('ROLE_ADMIN', {timeout: 2000})
+
+ })
+})
diff --git a/cypress/e2e/keycloak/keycloak_reusables.cytools.js b/cypress/e2e/keycloak/keycloak_reusables.cytools.js
new file mode 100644
index 000000000..90186d914
--- /dev/null
+++ b/cypress/e2e/keycloak/keycloak_reusables.cytools.js
@@ -0,0 +1,25 @@
+
+export function login(keycloakUrl, username, password) {
+
+ cy.visit("/")
+ cy.get('#login').click()
+
+ cy.origin(keycloakUrl, { args : { username, password, keycloakUrl }}, ({ username, password, keycloakUrl }) => {
+ cy.log("fill in the login form")
+ cy.get('#username').type(username, {force: true})
+ cy.get('#password').type(password, {force: true})
+
+ // submit
+ cy.get('#kc-login').click()
+
+ cy.location().then((location) => {
+ if (location !== null && location.origin === keycloakUrl) {
+ cy.get('#kc-login').click()
+ } else {
+ cy.log("not asked for access to user data")
+ }
+ })
+ })
+}
+
+
diff --git a/cypress/e2e/login/login_reusables.cytools.js b/cypress/e2e/login/login_reusables.cytools.js
new file mode 100644
index 000000000..dfbf3daa3
--- /dev/null
+++ b/cypress/e2e/login/login_reusables.cytools.js
@@ -0,0 +1,11 @@
+export function login(username, password) {
+ cy.visit('')
+ cy.get('[data-cy=login]').click()
+
+ cy.log("fill in the login form")
+ cy.get('[data-cy=username]').type(username, {force: true})
+ cy.get('[data-cy=password]').type(password, {force: true})
+ cy.get('button[type=submit]').click()
+}
+
+
diff --git a/cypress/e2e/login/super_admin/super_admin_can_freeze_unfreeze_user.cy.js b/cypress/e2e/login/super_admin/super_admin_can_freeze_unfreeze_user.cy.js
new file mode 100644
index 000000000..736bc9772
--- /dev/null
+++ b/cypress/e2e/login/super_admin/super_admin_can_freeze_unfreeze_user.cy.js
@@ -0,0 +1,49 @@
+// NO PERMANENT CHANGE TO DATABASE
+
+import {login} from "../login_reusables.cytools";
+
+const base_url = Cypress.config('baseUrl')
+
+// temporarily disable uncaught exception handling
+Cypress.on('uncaught:exception', (err, runnable) => {
+ return false
+})
+
+describe('super admin can freeze and unfreeze user', function () {
+ it('super admin path', function () {
+
+ login("admin", "password")
+
+ // navigate to admin page
+ cy.get('[data-cy=admin_link]').click()
+
+ // navigate to users page
+ cy.get('[data-cy=users_link]').click()
+
+ cy.get('[data-cy=member_9]').click()
+
+ // open on freeze options
+ cy.get('[data-cy=freeze]').click()
+ cy.log('click on freeze immediately option')
+ cy.get('[data-cy=open_freeze_member_confirmation_modal]').click()
+
+ cy.log('click on modal confirmation button')
+ cy.get('[data-cy=freeze_member_confirmation_modal_confirm]').click()
+
+ cy.log('search for "gelé" text')
+ cy.contains('gelé')
+
+ cy.log('open on freeze options')
+ cy.get('[data-cy=freeze]').click()
+
+ cy.log('click on unfreeze button')
+ cy.get('[data-cy=open_unfreeze_member_confirmation_modal]').click()
+
+ cy.log('click on modal confirmation button')
+ cy.get('[data-cy=unfreeze_member_confirmation_modal_confirm]').click()
+
+ cy.log('the text "gelé" should not be on the page')
+ cy.contains(/(? {
+ return false
+})
+
+describe('super admin can login', function () {
+ it('super admin path', function () {
+
+ login("admin", "password")
+
+ cy.log('go to settings page')
+ cy.get('[data-cy=settings_link]').click()
+
+ cy.log('display informations')
+ cy.get('[data-cy=open_my_informations]').click()
+
+ cy.log('check if role_admin in the page')
+ cy.get('[data-cy=user_roles_container]').contains('ROLE_SUPER_ADMIN', {timeout: 2000})
+
+ })
+
+})
diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json
new file mode 100644
index 000000000..02e425437
--- /dev/null
+++ b/cypress/fixtures/example.json
@@ -0,0 +1,5 @@
+{
+ "name": "Using fixtures to represent data",
+ "email": "hello@cypress.io",
+ "body": "Fixtures are a great way to mock data for responses to routes"
+}
diff --git a/cypress/screenshots/.gitignore b/cypress/screenshots/.gitignore
new file mode 100644
index 000000000..72e8ffc0d
--- /dev/null
+++ b/cypress/screenshots/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cypress/support/commands.js b/cypress/support/commands.js
new file mode 100644
index 000000000..66ea16ef0
--- /dev/null
+++ b/cypress/support/commands.js
@@ -0,0 +1,25 @@
+// ***********************************************
+// This example commands.js shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+//
+//
+// -- This is a parent command --
+// Cypress.Commands.add('login', (email, password) => { ... })
+//
+//
+// -- This is a child command --
+// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This will overwrite an existing command --
+// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
\ No newline at end of file
diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js
new file mode 100644
index 000000000..0e7290a13
--- /dev/null
+++ b/cypress/support/e2e.js
@@ -0,0 +1,20 @@
+// ***********************************************************
+// This example support/e2e.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands'
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
\ No newline at end of file
diff --git a/docker-compose.symfony_server.yml.dist b/docker-compose.symfony_server.yml.dist
index 5e09b05af..6ecba843f 100644
--- a/docker-compose.symfony_server.yml.dist
+++ b/docker-compose.symfony_server.yml.dist
@@ -63,8 +63,8 @@ services:
- .docker/keycloak/data:/opt/jboss/keycloak/standalone/data/
- .docker/keycloak/config/realm-export.json:/config/realm-export.json
environment:
- - KEYCLOAK_USER=admin
- - KEYCLOAK_PASSWORD=admin
+ - KEYCLOAK_USER=keycloak_admin
+ - KEYCLOAK_PASSWORD=password
- DB_VENDOR=h2
- KEYCLOAK_IMPORT=/config/realm-export.json
user: root
diff --git a/package-lock.json b/package-lock.json
index 8277d9ce5..9b8c817fa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -21,6 +21,8 @@
"@symfony/stimulus-bridge": "^3.0.0",
"@symfony/webpack-encore": "^1.7.0",
"core-js": "^3.0.0",
+ "cypress": "^13.6.4",
+ "cypress-dotenv": "^2.0.0",
"file-loader": "^6.2.0",
"less": "^4.2.0",
"less-loader": "^11.1.3",
@@ -1868,6 +1870,79 @@
"w3c-keyname": "^2.2.4"
}
},
+ "node_modules/@colors/colors": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
+ "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/@cypress/request": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz",
+ "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==",
+ "dev": true,
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "http-signature": "~1.3.6",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "performance-now": "^2.1.0",
+ "qs": "6.10.4",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "^4.1.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@cypress/request/node_modules/qs": {
+ "version": "6.10.4",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz",
+ "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==",
+ "dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/@cypress/xvfb": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
+ "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.1.0",
+ "lodash.once": "^4.1.1"
+ }
+ },
+ "node_modules/@cypress/xvfb/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
@@ -2360,6 +2435,18 @@
"@types/node": "*"
}
},
+ "node_modules/@types/sinonjs__fake-timers": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz",
+ "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==",
+ "dev": true
+ },
+ "node_modules/@types/sizzle": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz",
+ "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==",
+ "dev": true
+ },
"node_modules/@types/sockjs": {
"version": "0.3.36",
"resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz",
@@ -2439,6 +2526,16 @@
"@types/node": "*"
}
},
+ "node_modules/@types/yauzl": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
+ "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@webassemblyjs/ast": {
"version": "1.11.6",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
@@ -2680,6 +2777,19 @@
"node": ">=8.9"
}
},
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -2744,6 +2854,30 @@
"ajv": "^6.9.1"
}
},
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/ansi-html-community": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
@@ -2790,6 +2924,26 @@
"node": ">= 8"
}
},
+ "node_modules/arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
"node_modules/arity-n": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz",
@@ -2823,6 +2977,54 @@
"node": ">=0.10.0"
}
},
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
+ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
+ "dev": true
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true
+ },
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
"node_modules/atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -2835,6 +3037,21 @@
"node": ">= 4.5.0"
}
},
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
+ "dev": true
+ },
"node_modules/babel-loader": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz",
@@ -2926,12 +3143,41 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
"node_modules/batch": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
"integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
"dev": true
},
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "dev": true,
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
"node_modules/big.js": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@@ -2950,6 +3196,18 @@
"node": ">=8"
}
},
+ "node_modules/blob-util": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
+ "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
+ "dev": true
+ },
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
"node_modules/body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
@@ -3070,6 +3328,39 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -3085,6 +3376,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/cachedir": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz",
+ "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/call-bind": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
@@ -3148,6 +3448,12 @@
"resolved": "https://registry.npmjs.org/canvas-gauges/-/canvas-gauges-2.1.7.tgz",
"integrity": "sha512-z9cXBVTZdaUIOh32g21NU8gwxEeaxpEMvkZr9t8Y0QDbZiCDq05SJ17aIt+DM12oTJAlWGluN21D+bQ0NCv5GA=="
},
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "dev": true
+ },
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -3218,6 +3524,15 @@
"node": ">=8"
}
},
+ "node_modules/check-more-types": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
+ "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
@@ -3254,6 +3569,30 @@
"node": ">=6.0"
}
},
+ "node_modules/ci-info": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/clean-webpack-plugin": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz",
@@ -3270,6 +3609,49 @@
"webpack": "*"
}
},
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-table3": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
+ "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": "10.* || >= 12.*"
+ },
+ "optionalDependencies": {
+ "@colors/colors": "1.5.0"
+ }
+ },
+ "node_modules/cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "dev": true,
+ "dependencies": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/clone-deep": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
@@ -3333,6 +3715,18 @@
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"dev": true
},
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/commander": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
@@ -3342,6 +3736,15 @@
"node": ">= 10"
}
},
+ "node_modules/common-tags": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
@@ -3728,26 +4131,199 @@
"node": ">=8.0.0"
}
},
- "node_modules/d": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
- "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "node_modules/cypress": {
+ "version": "13.6.4",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.6.4.tgz",
+ "integrity": "sha512-pYJjCfDYB+hoOoZuhysbbYhEmNW7DEDsqn+ToCLwuVowxUXppIWRr7qk4TVRIU471ksfzyZcH+mkoF0CQUKnpw==",
"dev": true,
+ "hasInstallScript": true,
"dependencies": {
- "es5-ext": "^0.10.50",
- "type": "^1.0.1"
+ "@cypress/request": "^3.0.0",
+ "@cypress/xvfb": "^1.2.4",
+ "@types/sinonjs__fake-timers": "8.1.1",
+ "@types/sizzle": "^2.3.2",
+ "arch": "^2.2.0",
+ "blob-util": "^2.0.2",
+ "bluebird": "^3.7.2",
+ "buffer": "^5.6.0",
+ "cachedir": "^2.3.0",
+ "chalk": "^4.1.0",
+ "check-more-types": "^2.24.0",
+ "cli-cursor": "^3.1.0",
+ "cli-table3": "~0.6.1",
+ "commander": "^6.2.1",
+ "common-tags": "^1.8.0",
+ "dayjs": "^1.10.4",
+ "debug": "^4.3.4",
+ "enquirer": "^2.3.6",
+ "eventemitter2": "6.4.7",
+ "execa": "4.1.0",
+ "executable": "^4.1.1",
+ "extract-zip": "2.0.1",
+ "figures": "^3.2.0",
+ "fs-extra": "^9.1.0",
+ "getos": "^3.2.1",
+ "is-ci": "^3.0.0",
+ "is-installed-globally": "~0.4.0",
+ "lazy-ass": "^1.6.0",
+ "listr2": "^3.8.3",
+ "lodash": "^4.17.21",
+ "log-symbols": "^4.0.0",
+ "minimist": "^1.2.8",
+ "ospath": "^1.2.2",
+ "pretty-bytes": "^5.6.0",
+ "process": "^0.11.10",
+ "proxy-from-env": "1.0.0",
+ "request-progress": "^3.0.0",
+ "semver": "^7.5.3",
+ "supports-color": "^8.1.1",
+ "tmp": "~0.2.1",
+ "untildify": "^4.0.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "cypress": "bin/cypress"
+ },
+ "engines": {
+ "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
}
},
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "node_modules/cypress-dotenv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cypress-dotenv/-/cypress-dotenv-2.0.0.tgz",
+ "integrity": "sha512-MHCkWuTU51n/Q6LT2FgjNVZx/OmnrP3Jve7TUGZvSbjgGOpBOVZTbm3tomjvn+2S6HhloRXSAOmT5fY9pvWkpQ==",
"dev": true,
"dependencies": {
- "ms": "2.1.2"
+ "camelcase": "^6.2.0",
+ "dotenv-parse-variables": "^2.0.0",
+ "lodash.clonedeep": "^4.5.0"
},
"engines": {
- "node": ">=6.0"
+ "node": ">=10.x"
+ },
+ "peerDependencies": {
+ "cypress": ">= 8.x",
+ "dotenv": ">= 10.x"
+ }
+ },
+ "node_modules/cypress/node_modules/commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/cypress/node_modules/execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/cypress/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cypress/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cypress/node_modules/human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.12.0"
+ }
+ },
+ "node_modules/cypress/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/d": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "dev": true,
+ "dependencies": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.10",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
+ "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==",
+ "dev": true
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
@@ -3817,6 +4393,15 @@
"node": ">=6"
}
},
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -3924,6 +4509,42 @@
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
+ "node_modules/dotenv": {
+ "version": "16.4.3",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.3.tgz",
+ "integrity": "sha512-II98GFrje5psQTSve0E7bnwMFybNLqT8Vu8JIFWRjsE3khyNUm/loZupuy5DVzG2IXf/ysxvrixYOQnM6mjD3A==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
+ "node_modules/dotenv-parse-variables": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dotenv-parse-variables/-/dotenv-parse-variables-2.0.0.tgz",
+ "integrity": "sha512-/Tezlx6xpDqR6zKg1V4vLCeQtHWiELhWoBz5A/E0+A1lXN9iIkNbbfc4THSymS0LQUo8F1PMiIwVG8ai/HrnSA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.1",
+ "is-string-and-not-blank": "^0.0.2"
+ },
+ "engines": {
+ "node": ">= 8.3.0"
+ }
+ },
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "dev": true,
+ "dependencies": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -3960,6 +4581,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
"node_modules/enhanced-resolve": {
"version": "5.15.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
@@ -3973,6 +4603,19 @@
"node": ">=10.13.0"
}
},
+ "node_modules/enquirer": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
+ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^4.1.1",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
"node_modules/entities": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
@@ -4143,6 +4786,12 @@
"node": ">= 0.6"
}
},
+ "node_modules/eventemitter2": {
+ "version": "6.4.7",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz",
+ "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==",
+ "dev": true
+ },
"node_modules/eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
@@ -4181,6 +4830,27 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
+ "node_modules/executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/executable/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/express": {
"version": "4.18.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
@@ -4259,6 +4929,56 @@
"integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
"dev": true
},
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
+ }
+ },
+ "node_modules/extract-zip/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ]
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -4301,6 +5021,30 @@
"node": ">=0.8.0"
}
},
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dev": true,
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/file-loader": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
@@ -4425,6 +5169,29 @@
}
}
},
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
"node_modules/forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -4443,6 +5210,21 @@
"node": ">= 0.6"
}
},
+ "node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/fs-monkey": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz",
@@ -4509,6 +5291,24 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/getos": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
+ "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==",
+ "dev": true,
+ "dependencies": {
+ "async": "^3.2.0"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -4547,6 +5347,21 @@
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
"dev": true
},
+ "node_modules/global-dirs": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
+ "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
+ "dev": true,
+ "dependencies": {
+ "ini": "2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -4802,6 +5617,20 @@
}
}
},
+ "node_modules/http-signature": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz",
+ "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^2.0.2",
+ "sshpk": "^1.14.1"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@@ -4835,6 +5664,26 @@
"postcss": "^8.1.0"
}
},
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
"node_modules/image-size": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
@@ -4867,6 +5716,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -4883,6 +5741,15 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "node_modules/ini": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
+ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/interpret": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
@@ -4913,6 +5780,18 @@
"node": ">=8"
}
},
+ "node_modules/is-ci": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
+ "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==",
+ "dev": true,
+ "dependencies": {
+ "ci-info": "^3.2.0"
+ },
+ "bin": {
+ "is-ci": "bin.js"
+ }
+ },
"node_modules/is-core-module": {
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
@@ -4970,6 +5849,31 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-installed-globally": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
+ "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
+ "dev": true,
+ "dependencies": {
+ "global-dirs": "^3.0.0",
+ "is-path-inside": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-installed-globally/node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -5048,6 +5952,42 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-string-and-not-blank": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/is-string-and-not-blank/-/is-string-and-not-blank-0.0.2.tgz",
+ "integrity": "sha512-FyPGAbNVyZpTeDCTXnzuwbu9/WpNXbCfbHXLpCRpN4GANhS00eEIP5Ef+k5HYSNIzIhdN9zRDoBj6unscECvtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-string-blank": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=6.4.0"
+ }
+ },
+ "node_modules/is-string-blank": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-string-blank/-/is-string-blank-1.0.1.tgz",
+ "integrity": "sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==",
+ "dev": true
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "dev": true
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-what": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
@@ -5087,6 +6027,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
+ "dev": true
+ },
"node_modules/jest-worker": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
@@ -5133,6 +6079,12 @@
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "dev": true
+ },
"node_modules/jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -5151,12 +6103,24 @@
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true
},
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "dev": true
+ },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "dev": true
+ },
"node_modules/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@@ -5169,6 +6133,33 @@
"node": ">=6"
}
},
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsprim": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
+ "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -5188,6 +6179,15 @@
"shell-quote": "^1.8.1"
}
},
+ "node_modules/lazy-ass": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
+ "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==",
+ "dev": true,
+ "engines": {
+ "node": "> 0.8"
+ }
+ },
"node_modules/less": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz",
@@ -5264,6 +6264,48 @@
"node": ">=10"
}
},
+ "node_modules/listr2": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
+ "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
+ "dev": true,
+ "dependencies": {
+ "cli-truncate": "^2.1.0",
+ "colorette": "^2.0.16",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rfdc": "^1.3.0",
+ "rxjs": "^7.5.1",
+ "through": "^2.3.8",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "enquirer": ">= 2.3.0 < 3"
+ },
+ "peerDependenciesMeta": {
+ "enquirer": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/listr2/node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/loader-runner": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
@@ -5273,56 +6315,166 @@
"node": ">=6.11.5"
}
},
- "node_modules/loader-utils": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+ "node_modules/loader-utils": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
+ "dev": true
+ },
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+ "dev": true
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+ "dev": true
+ },
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+ "dev": true
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "dev": true
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/log-update/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/log-update/node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
"dev": true,
"dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
},
"engines": {
- "node": ">=8.9.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
- "node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "node_modules/log-update/node_modules/wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"dev": true,
"dependencies": {
- "p-locate": "^4.1.0"
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "node_modules/lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
- "dev": true
- },
- "node_modules/lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
- "dev": true
- },
- "node_modules/lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
- "dev": true
- },
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -5776,6 +6928,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/ospath": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
+ "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==",
+ "dev": true
+ },
"node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -5897,6 +7055,18 @@
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
"dev": true
},
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "dev": true
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
+ "dev": true
+ },
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -6526,6 +7696,18 @@
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
"dev": true
},
+ "node_modules/pretty-bytes": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
+ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/pretty-error": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-3.0.4.tgz",
@@ -6536,6 +7718,15 @@
"renderkid": "^2.0.6"
}
},
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -6564,6 +7755,12 @@
"node": ">= 0.10"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+ "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==",
+ "dev": true
+ },
"node_modules/prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
@@ -6571,6 +7768,22 @@
"dev": true,
"optional": true
},
+ "node_modules/psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+ "dev": true
+ },
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -6595,6 +7808,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "dev": true
+ },
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -6786,6 +8005,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/request-progress": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
+ "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==",
+ "dev": true,
+ "dependencies": {
+ "throttleit": "^1.0.0"
+ }
+ },
"node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
@@ -6973,6 +8201,19 @@
"node": ">=6"
}
},
+ "node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/retry": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
@@ -7004,6 +8245,12 @@
"integrity": "sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg==",
"dev": true
},
+ "node_modules/rfdc": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz",
+ "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==",
+ "dev": true
+ },
"node_modules/rimraf": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
@@ -7016,6 +8263,15 @@
"rimraf": "bin.js"
}
},
+ "node_modules/rxjs": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -7365,6 +8621,53 @@
"marked": "*"
}
},
+ "node_modules/slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
"node_modules/sockjs": {
"version": "0.3.24",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
@@ -7461,6 +8764,31 @@
"wbuf": "^1.7.3"
}
},
+ "node_modules/sshpk": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
+ "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
+ "dev": true,
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/stable": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
@@ -7733,6 +9061,21 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true
},
+ "node_modules/throttleit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz",
+ "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
+ },
"node_modules/thunky": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
@@ -7796,18 +9139,72 @@
"node": ">=0.6"
}
},
+ "node_modules/tough-cookie": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+ "dev": true,
+ "dependencies": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tough-cookie/node_modules/universalify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
"node_modules/tslib": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
"dev": true
},
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
+ "dev": true
+ },
"node_modules/type": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
"integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
"dev": true
},
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -7872,6 +9269,15 @@
"node": ">=4"
}
},
+ "node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -7881,6 +9287,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/update-browserslist-db": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
@@ -7927,6 +9342,16 @@
"deprecated": "Please see https://github.com/lydell/urix#deprecated",
"dev": true
},
+ "node_modules/url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "dev": true,
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -7966,6 +9391,26 @@
"node": ">= 0.8"
}
},
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/verror/node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
+ "dev": true
+ },
"node_modules/w3c-keyname": {
"version": "2.2.8",
"resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
@@ -8385,6 +9830,56 @@
"integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
"dev": true
},
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -8436,6 +9931,16 @@
"node": ">=10"
}
},
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "dev": true,
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index a4e02870f..2323e047b 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,8 @@
"@symfony/stimulus-bridge": "^3.0.0",
"@symfony/webpack-encore": "^1.7.0",
"core-js": "^3.0.0",
+ "cypress": "^13.6.4",
+ "cypress-dotenv": "^2.0.0",
"file-loader": "^6.2.0",
"less": "^4.2.0",
"less-loader": "^11.1.3",
@@ -30,7 +32,10 @@
"dev-server": "encore dev-server --disable-host-check",
"dev": "encore dev",
"watch": "encore dev --watch",
- "build": "encore production --progress"
+ "build": "npx encore production --progress",
+ "cy:open": "cypress open",
+ "cy:test:oidc": "cypress run --spec 'cypress/e2e/keycloak/**/*'",
+ "cy:test:main": "cypress run --spec 'cypress/e2e/login/**/*'"
},
"repository": {
"type": "git",
diff --git a/src/Security/KeycloakAuthenticator.php b/src/Security/KeycloakAuthenticator.php
index 035d28a98..22d3524c5 100644
--- a/src/Security/KeycloakAuthenticator.php
+++ b/src/Security/KeycloakAuthenticator.php
@@ -346,7 +346,7 @@ private function updateBeneficiary(KeycloakResourceOwner $keycloakUser, Benefici
// formations
$formations_claim = $this->container->getParameter('oidc_formations_claim');
$formations_from_keycloak = (isset($keycloakUser->toArray()[$formations_claim])) ? $keycloakUser->toArray()[$formations_claim] : [];
- $formations_map = $this->container->getParameter('oidc_formations_map');
+ $formations_map = json_decode($this->container->getParameter('oidc_formations_map'));
foreach ($beneficiary->getFormations() as $formation){
$beneficiary->removeFormation($formation);
}
@@ -368,7 +368,7 @@ private function updateBeneficiary(KeycloakResourceOwner $keycloakUser, Benefici
// commissions
$commissions_claim = $this->container->getParameter('oidc_commissions_claim');
$commissions_from_keycloak = (isset($keycloakUser->toArray()[$commissions_claim])) ? $keycloakUser->toArray()[$commissions_claim] : [];
- $commissions_map = $this->container->getParameter('oidc_commissions_map');
+ $commissions_map = json_decode($this->container->getParameter('oidc_commissions_map'));
foreach ($beneficiary->getCommissions() as $commission){
$beneficiary->removeCommission($commission);
}
diff --git a/src/Service/SearchUserFormHelper.php b/src/Service/SearchUserFormHelper.php
index 9e9457cf1..6ad0b4a4e 100644
--- a/src/Service/SearchUserFormHelper.php
+++ b/src/Service/SearchUserFormHelper.php
@@ -2,8 +2,8 @@
//DependencyInjection/SearchUserFormHelper.php
namespace App\Service;
-use AppBundle\Repository\CommissionRepository;
-use AppBundle\Repository\FormationRepository;
+use App\Repository\CommissionRepository;
+use App\Repository\FormationRepository;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\QueryBuilder;
diff --git a/templates/Profile/show_content.html.twig b/templates/Profile/show_content.html.twig
index 730290ad7..9f4f62a6e 100644
--- a/templates/Profile/show_content.html.twig
+++ b/templates/Profile/show_content.html.twig
@@ -12,7 +12,7 @@