From 3e0731f06e7a46ebf48efc05c0c8e297968c3ed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 6 Nov 2024 22:05:23 +0100 Subject: [PATCH] Create an symfony app's skeleton to ease the development [WIP] first import of automated recipes [WIP] fix configuration file to be able to compile kernel and serve route [WIP] first build of assets [WIP] Continue working on configuration to load a page [WIP] Reset the bin directory [WIP] remove default migrations files [WIP] fix configuration for running tests [WIP] Installation instructions Fix the default firewall in test login [WIP] fix cs [WIP] update gitlab-ci [WIP] update gitlab-ci [WIP] update gitlab ci [WIP] fix config for running tests [WIP] fix gitlab ci [WIP] try tests/bootstrap php file from symfony bridge instead of phpunit recipe remove kernel.php file fix loading of entrypoint.json in test [wip] increase memory limit for phpstan in test/ci [WIP]: set the correct timezone directly within the phpunit.xml.dist file [WIP]: fix security configuration WIP: fix config for testing --- .env | 89 +- .env.test | 16 +- .gitignore | 22 +- .gitlab-ci.yml | 46 +- .nvmrc | 1 + .symfony.local.yaml | 2 + README.md | 105 +- {tests => bin}/console | 4 + compose.override.yaml | 26 + compose.yaml | 25 + composer.json | 15 +- {tests/app/config => config}/bundles.php | 48 +- .../app/config => config}/packages/cache.yaml | 14 - config/packages/cache_chill.yaml | 14 + config/packages/chill.yaml | 121 + config/packages/chill_budget.yaml | 85 + config/packages/chill_calendar.yaml | 3 + config/packages/chill_doc_generator.yaml | 5 + .../packages/chill_doc_store.yaml | 0 config/packages/debug.yaml | 5 + config/packages/doctrine.yaml | 38 + config/packages/doctrine_migrations.yaml | 2 + .../packages/doctrine_migrations_chill.yaml | 13 +- .../config => config}/packages/framework.yaml | 16 - .../packages/framework_chill.yaml | 5 + config/packages/knpu_oauth2_client.yaml | 3 + config/packages/lexik_jwt_authentication.yaml | 4 + .../lexik_jwt_authentication_chill.yaml | 9 + .../packages/loophp_psr17.yaml | 0 config/packages/mailer.yaml | 3 + config/packages/mailer_chill.yaml | 4 + config/packages/messenger.yaml | 75 + config/packages/misd_phone_number.yaml | 13 + config/packages/monolog.yaml | 62 + config/packages/nelmio_alice.yaml | 12 + .../packages/nyholm_psr7.yaml | 10 - .../packages/ramsey_uuid_doctrine.yaml | 0 .../config => config}/packages/routing.yaml | 5 + config/packages/routing_chill.yaml | 8 + .../config => config}/packages/security.yaml | 61 +- config/packages/security_chill.yaml | 9 + .../packages/sensio_framework_extra.yaml | 0 config/packages/translation.yaml | 7 + config/packages/translation_chill.yaml | 4 + config/packages/twig.yaml | 6 + .../packages/twig_chill.yaml | 11 +- .../config => config}/packages/validator.yaml | 5 + .../packages/webpack_encore.yaml | 26 +- config/packages/wopi.yaml | 2 + .../config => config}/packages/workflow.yaml | 0 config/preload.php | 5 + {tests/app/config => config}/routes.yaml | 4 +- config/routes/annotations.yaml | 3 + config/routes/framework.yaml | 4 + {tests/app/config => config}/services.yaml | 4 +- phpstan.neon.dist => phpstan.dist.neon | 0 phpunit.xml.dist | 13 +- public/index.php | 9 + .../Tests/Controller/LoginControllerTest.php | 6 +- src/app/Kernel.php | 20 + symfony.lock | 399 + tests/Kernel.php | 2 +- tests/app/config/bootstrap.php | 32 - tests/app/config/packages/chill.yaml | 23 - tests/app/config/packages/chill_budget.yaml | 14 - tests/app/config/packages/dev/debug.yaml | 4 - tests/app/config/packages/dev/messenger.yaml | 7 - tests/app/config/packages/dev/monolog.yaml | 21 - tests/app/config/packages/doctrine.yaml | 18 - .../packages/lexik_jwt_authentication.yaml | 12 - tests/app/config/packages/messenger.yaml | 32 - .../config/packages/prod/deprecations.yaml | 8 - tests/app/config/packages/prod/doctrine.yaml | 20 - tests/app/config/packages/prod/monolog.yaml | 14 - tests/app/config/packages/prod/routing.yaml | 3 - .../config/packages/prod/webpack_encore.yaml | 4 - tests/app/config/packages/test/chill.yaml | 5 - tests/app/config/packages/test/mailer.yaml | 5 - tests/app/config/packages/test/monolog.yaml | 12 - tests/app/config/packages/test/security.yaml | 5 - tests/app/config/packages/test/twig.yaml | 2 - tests/app/config/packages/test/validator.yaml | 3 - .../config/packages/test/webpack_encore.yaml | 2 - tests/app/config/packages/translation.yaml | 7 - tests/app/config/preload.php | 18 - tests/app/config/routes/annotations.yaml | 3 - tests/app/config/routes/dev/framework.yaml | 3 - tests/bootstrap.php | 8 +- tsconfig.json | 56 +- webpack.config.js | 125 + yarn.lock | 9328 +++++++++++++++++ 91 files changed, 10783 insertions(+), 539 deletions(-) create mode 100644 .nvmrc create mode 100644 .symfony.local.yaml rename {tests => bin}/console (78%) create mode 100644 compose.override.yaml create mode 100644 compose.yaml rename {tests/app/config => config}/bundles.php (81%) rename {tests/app/config => config}/packages/cache.yaml (61%) create mode 100644 config/packages/cache_chill.yaml create mode 100644 config/packages/chill.yaml create mode 100644 config/packages/chill_budget.yaml create mode 100644 config/packages/chill_calendar.yaml create mode 100644 config/packages/chill_doc_generator.yaml rename {tests/app/config => config}/packages/chill_doc_store.yaml (100%) create mode 100644 config/packages/debug.yaml create mode 100644 config/packages/doctrine.yaml create mode 100644 config/packages/doctrine_migrations.yaml rename tests/app/config/packages/doctrine_migrations.yaml => config/packages/doctrine_migrations_chill.yaml (80%) rename {tests/app/config => config}/packages/framework.yaml (65%) rename tests/app/config/packages/assets.yaml => config/packages/framework_chill.yaml (55%) create mode 100644 config/packages/knpu_oauth2_client.yaml create mode 100644 config/packages/lexik_jwt_authentication.yaml create mode 100644 config/packages/lexik_jwt_authentication_chill.yaml rename {tests/app/config => config}/packages/loophp_psr17.yaml (100%) create mode 100644 config/packages/mailer.yaml create mode 100644 config/packages/mailer_chill.yaml create mode 100644 config/packages/messenger.yaml create mode 100644 config/packages/misd_phone_number.yaml create mode 100644 config/packages/monolog.yaml create mode 100644 config/packages/nelmio_alice.yaml rename {tests/app/config => config}/packages/nyholm_psr7.yaml (56%) rename {tests/app/config => config}/packages/ramsey_uuid_doctrine.yaml (100%) rename {tests/app/config => config}/packages/routing.yaml (75%) create mode 100644 config/packages/routing_chill.yaml rename {tests/app/config => config}/packages/security.yaml (65%) create mode 100644 config/packages/security_chill.yaml rename {tests/app/config => config}/packages/sensio_framework_extra.yaml (100%) create mode 100644 config/packages/translation.yaml create mode 100644 config/packages/translation_chill.yaml create mode 100644 config/packages/twig.yaml rename tests/app/config/packages/twig.yaml => config/packages/twig_chill.yaml (72%) rename {tests/app/config => config}/packages/validator.yaml (74%) rename {tests/app/config => config}/packages/webpack_encore.yaml (63%) create mode 100644 config/packages/wopi.yaml rename {tests/app/config => config}/packages/workflow.yaml (100%) create mode 100644 config/preload.php rename {tests/app/config => config}/routes.yaml (76%) create mode 100644 config/routes/annotations.yaml create mode 100644 config/routes/framework.yaml rename {tests/app/config => config}/services.yaml (67%) rename phpstan.neon.dist => phpstan.dist.neon (100%) create mode 100644 public/index.php create mode 100644 src/app/Kernel.php create mode 100644 symfony.lock delete mode 100644 tests/app/config/bootstrap.php delete mode 100644 tests/app/config/packages/chill.yaml delete mode 100644 tests/app/config/packages/chill_budget.yaml delete mode 100644 tests/app/config/packages/dev/debug.yaml delete mode 100644 tests/app/config/packages/dev/messenger.yaml delete mode 100644 tests/app/config/packages/dev/monolog.yaml delete mode 100644 tests/app/config/packages/doctrine.yaml delete mode 100644 tests/app/config/packages/lexik_jwt_authentication.yaml delete mode 100644 tests/app/config/packages/messenger.yaml delete mode 100644 tests/app/config/packages/prod/deprecations.yaml delete mode 100644 tests/app/config/packages/prod/doctrine.yaml delete mode 100644 tests/app/config/packages/prod/monolog.yaml delete mode 100644 tests/app/config/packages/prod/routing.yaml delete mode 100644 tests/app/config/packages/prod/webpack_encore.yaml delete mode 100644 tests/app/config/packages/test/chill.yaml delete mode 100644 tests/app/config/packages/test/mailer.yaml delete mode 100644 tests/app/config/packages/test/monolog.yaml delete mode 100644 tests/app/config/packages/test/security.yaml delete mode 100644 tests/app/config/packages/test/twig.yaml delete mode 100644 tests/app/config/packages/test/validator.yaml delete mode 100644 tests/app/config/packages/test/webpack_encore.yaml delete mode 100644 tests/app/config/packages/translation.yaml delete mode 100644 tests/app/config/preload.php delete mode 100644 tests/app/config/routes/annotations.yaml delete mode 100644 tests/app/config/routes/dev/framework.yaml create mode 100644 webpack.config.js create mode 100644 yarn.lock diff --git a/.env b/.env index b2eecb78f..f64a99032 100644 --- a/.env +++ b/.env @@ -11,15 +11,9 @@ # Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). # https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration -## Locale -LOCALE=fr - ###> symfony/framework-bundle ### -# this should be set in docker-compose.yml file APP_ENV=prod -APP_SECRET=ChangeItf2b58287ef7f9976409d3f6c72529e99ChangeIt -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|nginx)$' +APP_SECRET=!ChangeMeInAppEnv! ###< symfony/framework-bundle ### ## Wopi server for editing documents online @@ -32,51 +26,12 @@ EDITOR_SERVER=http://collabora:9980 # MAILER_DSN=null://null ###< symfony/mailer ### -## Notifications -NOTIFICATION_HOST=localhost:8001 -NOTIFICATION_FROM_EMAIL=admin@chill.social -NOTIFICATION_FROM_NAME="Chill " - -## Pgadmin credential -PGADMIN_DEFAULT_EMAIL= -PGADMIN_DEFAULT_PASSWORD= - -## OVH OpenStack Storage Container -ASYNC_UPLOAD_TEMP_URL_KEY= -ASYNC_UPLOAD_TEMP_URL_BASE_PATH= -ASYNC_UPLOAD_TEMP_URL_CONTAINER= - -## Redis Cache -REDIS_HOST=redis -REDIS_PORT=6379 -REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT} - -## Twilio -TWILIO_SID=~ -TWILIO_SECRET=~ -DEFAULT_CARRIER_CODE=BE - -ADD_ADDRESS_DEFAULT_COUNTRY=BE - -ADD_ADDRESS_MAP_CENTER_X=50.8443 -ADD_ADDRESS_MAP_CENTER_Y=4.3523 -ADD_ADDRESS_MAP_CENTER_Z=15 - -SHORT_MESSAGE_DSN=null://null - -## DOCKER IMAGES REGISTRY -#IMAGE_PHP= -#IMAGE_NGINX= - -## DOCKER IMAGES TAG -#VERSION=test -#VERSION=prod ###> symfony/messenger ### # Choose one of the transports below # MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages # MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages -MESSENGER_TRANSPORT_DSN=sync:// +# MESSENGER_TRANSPORT_DSN=sync:// MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 ###< symfony/messenger ### @@ -92,3 +47,43 @@ JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem JWT_PASSPHRASE=2a30f6ba26521a2613821da35f28386e ###< lexik/jwt-authentication-bundle ### + +###> chill-project/chill-bundles ### +# Generate a password using `symfony console security:hash-password --empty-salt 'Symfony\Component\Security\Core\User\User'` and paste it into .env.local file +# ADMIN_PASSWORD= +# Add a configuration for sending SMS (before calendar appointments, aka "Rendez-vous"). See https://symfony.com/doc/current/notifier.html#sms-channel +# Configuration for using ovh custom notifier +# SHORT_MESSAGE_DSN="ovh://user:password@ovh-eu?consumer_key=123456&sender=%2B32475123456&service_name=sms-xx123456-1" +SHORT_MESSAGE_DSN=null://null +# Default locale for the project +LOCALE=fr +# Those keys are required to configure the access to store documents +ASYNC_UPLOAD_TEMP_URL_KEY= +ASYNC_UPLOAD_TEMP_URL_BASE_PATH= +ASYNC_UPLOAD_TEMP_URL_CONTAINER= +# Twilio configuration, to check for the existence of phonenumber in a directory (may be deprecated in a near future) +TWILIO_SID= +TWILIO_SECRET= +# Default carrier code will replace all leading zero by an international code. Set here the country as two letters +DEFAULT_CARRIER_CODE=FR +# Configuration for the notification emails +NOTIFICATION_FROM_EMAIL=chill@instance.com +NOTIFICATION_FROM_NAME=Chill +# Will set the default host when sending email from command or services (see https://symfony.com/doc/5.x/routing.html#generating-urls-in-commands) +NOTIFICATION_HOST=my.chill.social +# Variables for relatorio host, which generates documents +RELATORIO_HOST= +RELATORIO_PORT= +# Address for your collabora server +#EDITOR_SERVER=https://code.example.com +EDITOR_SERVER=https://collabora.champs-libres.be +# center address widget when empty +ADD_ADDRESS_DEFAULT_COUNTRY=BE +ADD_ADDRESS_MAP_CENTER_X=50.8443 +ADD_ADDRESS_MAP_CENTER_Y=4.3523 +ADD_ADDRESS_MAP_CENTER_Z=15 +## Redis Cache & redis database +REDIS_HOST=redis +REDIS_PORT=6379 +REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT} +###< chill-project/chill-bundles ### diff --git a/.env.test b/.env.test index c78a1bc63..9cd2ae81b 100644 --- a/.env.test +++ b/.env.test @@ -4,15 +4,8 @@ KERNEL_CLASS='App\Kernel' APP_SECRET='$ecretf0rt3st' -TRUSTED_HOSTS= - ADMIN_PASSWORD=password -LOCALE=fr -REDIS_URL=redis -REDIS_PORT=6379 -REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT} - JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem JWT_PASSPHRASE=2a30f6ba26521a2613821da35f28386e @@ -22,24 +15,25 @@ TWILIO_SECRET=~ DEFAULT_CARRIER_CODE=BE ADD_ADDRESS_DEFAULT_COUNTRY=BE - ADD_ADDRESS_MAP_CENTER_X=50.8443 ADD_ADDRESS_MAP_CENTER_Y=4.3523 ADD_ADDRESS_MAP_CENTER_Z=15 SHORT_MESSAGE_DSN=null://null MESSENGER_TRANSPORT_DSN=sync:// -###< symfony/messenger ### ###> doctrine/doctrine-bundle ### # Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url # IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml # -DATABASE_URL="postgresql://postgres:postgres@db:5432/test?serverVersion=14&charset=utf8" +DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5454/test?serverVersion=14&charset=utf8" ###< doctrine/doctrine-bundle ### ASYNC_UPLOAD_TEMP_URL_KEY= ASYNC_UPLOAD_TEMP_URL_BASE_PATH= ASYNC_UPLOAD_TEMP_URL_CONTAINER= -EDITOR_SERVER=https://localhost:9980 +MAILER_DSN=null://null + +REDIS_HOST=127.0.0.1 +REDIS_PORT=6363 diff --git a/.gitignore b/.gitignore index 26802dca0..472dba8fa 100644 --- a/.gitignore +++ b/.gitignore @@ -3,10 +3,11 @@ composer composer.phar composer.lock docs/build/ -node_modules/* .php_cs.cache .cache/* +docker/db/data + ###> symfony/framework-bundle ### /.env.local /.env.local.php @@ -15,7 +16,6 @@ node_modules/* /public/bundles/ /var/ /vendor/ -/bin/ ###< symfony/framework-bundle ### ###> phpunit/phpunit ### @@ -27,4 +27,20 @@ node_modules/* /.idea/ /.psalm/ -node_modules/* +###> phpstan/phpstan ### +phpstan.neon +###< phpstan/phpstan ### + +###> lexik/jwt-authentication-bundle ### +/config/jwt/*.pem +###< lexik/jwt-authentication-bundle ### + +###> symfony/phpunit-bridge ### +###< symfony/phpunit-bridge ### + +###> symfony/webpack-encore-bundle ### +/node_modules/ +/public/build/ +npm-debug.log +yarn-error.log +###< symfony/webpack-encore-bundle ### diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c1fdebf43..8628a521f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,7 +9,7 @@ cache: # Bring in any services we need http://docs.gitlab.com/ee/ci/docker/using_docker_images.html#what-is-a-service # See http://docs.gitlab.com/ee/ci/services/README.html for examples. services: - - name: postgis/postgis:14-3.3-alpine + - name: postgis/postgis:17-3.5-alpine alias: db command: - postgres @@ -26,7 +26,7 @@ variables: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres # configure database access - DATABASE_URL: postgresql://postgres:postgres@db:5432/postgres?serverVersion=14&charset=utf8 + DATABASE_URL: postgresql://postgres:postgres@db:5432/postgres?serverVersion=17&charset=utf8 # fetch the chill-app using git submodules # GIT_SUBMODULE_STRATEGY: recursive REDIS_HOST: redis @@ -56,7 +56,6 @@ build: artifacts: expire_in: 1 day paths: - - bin - vendor/ code_style: @@ -70,63 +69,56 @@ code_style: artifacts: expire_in: 1 day paths: - - bin - vendor/ phpstan_tests: stage: Tests image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82 + variables: + COMPOSER_MEMORY_LIMIT: 3G + before_script: + - bin/console cache:clear --env=dev script: - - bin/phpstan analyze --memory-limit=2G + - composer exec phpstan -- analyze --memory-limit=3G cache: paths: - .cache/ artifacts: expire_in: 1 day paths: - - bin - vendor/ rector_tests: stage: Tests image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82 + before_script: + - bin/console cache:clear --env=dev script: - - tests/console cache:clear - - bin/rector process --dry-run + - composer exec rector -- process --dry-run cache: paths: - .cache/ artifacts: expire_in: 1 day paths: - - bin - vendor/ -# psalm_tests: -# stage: Tests -# image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82 -# script: -# - bin/psalm -# allow_failure: true -# artifacts: -# expire_in: 30 min -# paths: -# - bin -# - tests/app/vendor/ - unit_tests: stage: Tests image: gitea.champs-libres.be/chill-project/chill-skeleton-basic/base-image:php82 + variables: + COMPOSER_MEMORY_LIMIT: 3G + before_script: + - php bin/console doctrine:database:create -n --env=test + - php bin/console doctrine:migrations:migrate -n --env=test + - php bin/console chill:db:sync-views --env=test + - php bin/console cache:clear --env=test + - php bin/console doctrine:fixtures:load -n --env=test script: - - php tests/console doctrine:migrations:migrate -n --env=test - - php tests/console chill:db:sync-views --env=test - - php -d memory_limit=2G tests/console cache:clear --env=test - - php -d memory_limit=3G tests/console doctrine:fixtures:load -n --env=test - - php -d memory_limit=4G bin/phpunit --colors=never --exclude-group dbIntensive,openstack-integration,collabora-integration + - composer exec phpunit -- --colors=never --exclude-group dbIntensive,openstack-integration artifacts: expire_in: 1 day paths: - - bin - vendor/ release: diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..2edeafb09 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20 \ No newline at end of file diff --git a/.symfony.local.yaml b/.symfony.local.yaml new file mode 100644 index 000000000..fad7fc396 --- /dev/null +++ b/.symfony.local.yaml @@ -0,0 +1,2 @@ +workers: + docker_compose: ~ diff --git a/README.md b/README.md index bf3e28f41..b63ba94f3 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,106 @@ -# Chill framework +# Main Chill Bundles and Chill framework -Documentation of the Chill software. +Chill is a software for social workers. It allows them to keep track of the social work they do. -The online documentation can be found at http://docs.chill.social +See our website for more information https://www.chill.social -See the [`docs`][1] directory for more. +## Installation + +Chill-bundles is a set of bundles that should be used within a Symfony application. + +A symfony application will help you to customize all the configuration options, change the behaviour of some parts of the usual-way that chill works, … without to have to fork this repository ! + +### For a usage in production + +You will create a symfony app, which will then download this bundle as a dependency. + +See the documentation at https://docs.chill.social. + +### For development or testing purpose only + +⚠️ Use this method for development only. ⚠️ + +You will need: + +- [Composer](https://getcomposer.org); +- [Symfony-cli tool](https://symfony.com/download); +- [docker](https://docs.docker.com/engine/install/) and [docker-compose](https://docs.docker.com/compose/) +- node > 20 and yarn 1.22 + +#### First initialization + +1. clone this repository and move to the cloned directory: + + ```bash + git clone https://gitlab.com/Chill-Projet/chill-bundles.git + cd chill-bundles + ``` +2. install depencies using composer + + ```bash + composer install + ``` +3. Install and compile assets: + + ```bash + yarn install + yarn run encore production + ``` + + **note** double check that you have the node version > 20 using the `node --version` command. + +4. configure your project: create a `.env.local` file at the root, and add the admin password: + ```dotenv + # for this installation mode, the environment should always be "dev" + APP_ENV=dev + ADMIN_PASSWORD=\$2y\$13\$iyvJLuT4YEa6iWXyQV4/N.hNHpNG8kXlYDkkt5MkYy4FXcSwYAwmm + # note: if you copy-paste the line above, the password will be "admin". + ``` +5. start the stack using `docker compose up -d`, check the status of the start with `docker compose ps` + +6. configure all the needed third-party tools + + ```bash + # the first start, it may last some seconds, you can check with docker compose ps + # run migrations + symfony console doctrine:migrations:migrate + # setup messenger + symfony console messenger:setup-transports + # prepare some views + symfony console chill:db:sync-views + # generate jwt token, required for some api features (webdav access, ...) + symfony console lexik:jwt:generate-keypair + ``` +7. add some fixtures + + This will truncate all the existing data of the database. But remember, we are in dev mode ! + + ```bash + symfony console doctrine:fixtures:load + ``` + +8. launch symfony dev-server + ```bash + symfony server:start -d + ``` + + And visit the web page it suggest. You can login with user `center a_social` and password `password`, or login `admin` with the password you set. + +#### Stopping the server + +```bash +symfony server:stop +``` + +#### Restart the webserver for subsequent start + +```bash +symfony server:start -d +# this will automatically starts the full docker compose services +``` + +## Documentation + +The online documentation can be read at https://docs.chill.social, or the [`docs`][1] directory. [1]: docs/README.md diff --git a/tests/console b/bin/console similarity index 78% rename from tests/console rename to bin/console index c933dc535..d8d530e2c 100755 --- a/tests/console +++ b/bin/console @@ -4,6 +4,10 @@ use App\Kernel; use Symfony\Bundle\FrameworkBundle\Console\Application; +if (!is_dir(dirname(__DIR__).'/vendor')) { + throw new LogicException('Dependencies are missing. Try running "composer install".'); +} + if (!is_file(dirname(__DIR__).'/vendor/autoload_runtime.php')) { throw new LogicException('Symfony Runtime is missing. Try running "composer require symfony/runtime".'); } diff --git a/compose.override.yaml b/compose.override.yaml new file mode 100644 index 000000000..afceef71b --- /dev/null +++ b/compose.override.yaml @@ -0,0 +1,26 @@ +services: + ###> doctrine/doctrine-bundle ### + database: + ports: + - "127.0.0.1:5454:5432" + ###< doctrine/doctrine-bundle ### + + ###> symfony/mailer ### + mailer: + image: axllent/mailpit + ports: + - "1025" + - "8025" + environment: + MP_SMTP_AUTH_ACCEPT_ANY: 1 + MP_SMTP_AUTH_ALLOW_INSECURE: 1 + ###< symfony/mailer ### + + + redis: + ports: + - 127.0.0.1:6363:6379 + relatorio: + ports: + - 8888 + diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 000000000..23daaa0aa --- /dev/null +++ b/compose.yaml @@ -0,0 +1,25 @@ +services: + ###> doctrine/doctrine-bundle ### + database: + image: postgis/postgis:${POSTGRES_VERSION:-16}-3.4-alpine + environment: + POSTGRES_DB: ${POSTGRES_DB:-app} + # You should definitely change the password in production + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!} + POSTGRES_USER: ${POSTGRES_USER:-app} + volumes: + # - database_data:/var/lib/postgresql/data:rw + # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data! + - ./docker/db/data:/var/lib/postgresql/data:rw + ###< doctrine/doctrine-bundle ### + + redis: + image: redis + relatorio: + image: registry.gitlab.com/champs-libres/public/relatorio-tornado/app:latest + + +volumes: + ###> doctrine/doctrine-bundle ### + database_data: +###< doctrine/doctrine-bundle ### diff --git a/composer.json b/composer.json index b33314789..d21df006a 100644 --- a/composer.json +++ b/composer.json @@ -97,6 +97,7 @@ "rector/rector": "^1.1.0", "symfony/debug-bundle": "^5.4", "symfony/dotenv": "^5.4", + "symfony/flex": "^2.4", "symfony/maker-bundle": "^1.20", "symfony/phpunit-bridge": "^7.1", "symfony/runtime": "^5.4", @@ -129,7 +130,7 @@ }, "autoload-dev": { "psr-4": { - "App\\": "tests/", + "App\\": "src/app", "Chill\\DocGeneratorBundle\\Tests\\": "src/Bundle/ChillDocGeneratorBundle/tests", "Chill\\WopiBundle\\Tests\\": "src/Bundle/ChillDocGeneratorBundle/tests", "Chill\\Utils\\Rector\\Tests\\": "utils/rector/tests" @@ -143,16 +144,22 @@ "phpro/grumphp": true, "phpstan/extension-installer": true, "roave/you-are-using-it-wrong": true, - "symfony/runtime": true + "symfony/runtime": true, + "symfony/flex": true }, - "bin-dir": "bin", "optimize-autoloader": true, "sort-packages": true }, "scripts": { "auto-scripts": { - "cache:clear": "symfony-cmd" + "cache:clear": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd" }, "php-cs-fixer": "php-cs-fixer fix --config=./.php-cs-fixer.dist.php --show-progress=none" + }, + "extra": { + "symfony": { + "docker": true + } } } diff --git a/tests/app/config/bundles.php b/config/bundles.php similarity index 81% rename from tests/app/config/bundles.php rename to config/bundles.php index 39549e2f0..3a84fc297 100644 --- a/tests/app/config/bundles.php +++ b/config/bundles.php @@ -1,15 +1,26 @@ ['all' => true], + loophp\PsrHttpMessageBridgeBundle\PsrHttpMessageBridgeBundle::class => ['all' => true], + ChampsLibres\WopiBundle\WopiBundle::class => ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], + Knp\Bundle\MenuBundle\KnpMenuBundle::class => ['all' => true], + Knp\Bundle\TimeBundle\KnpTimeBundle::class => ['all' => true], + KnpU\OAuth2ClientBundle\KnpUOAuth2ClientBundle::class => ['all' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true], + Nelmio\Alice\Bridge\Symfony\NelmioAliceBundle::class => ['dev' => true, 'test' => true], + Misd\PhoneNumberBundle\MisdPhoneNumberBundle::class => ['all' => true], + Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], + Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], + Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], Chill\ActivityBundle\ChillActivityBundle::class => ['all' => true], Chill\AsideActivityBundle\ChillAsideActivityBundle::class => ['all' => true], Chill\CalendarBundle\ChillCalendarBundle::class => ['all' => true], @@ -23,24 +34,5 @@ return [ Chill\TaskBundle\ChillTaskBundle::class => ['all' => true], Chill\ThirdPartyBundle\ChillThirdPartyBundle::class => ['all' => true], Chill\BudgetBundle\ChillBudgetBundle::class => ['all' => true], - Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], - Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], - Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], - Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], - Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], - Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], - Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], - Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], - Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], - Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], - //Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], - Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], - Knp\Bundle\MenuBundle\KnpMenuBundle::class => ['all' => true], - Knp\Bundle\TimeBundle\KnpTimeBundle::class => ['all' => true], - Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], - loophp\PsrHttpMessageBridgeBundle\PsrHttpMessageBridgeBundle::class => ['all' => true], - \Misd\PhoneNumberBundle\MisdPhoneNumberBundle::class => ['all' => true], - ChampsLibres\WopiBundle\WopiBundle::class => ['all' => true], Chill\WopiBundle\ChillWopiBundle::class => ['all' => true], - \Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true], ]; diff --git a/tests/app/config/packages/cache.yaml b/config/packages/cache.yaml similarity index 61% rename from tests/app/config/packages/cache.yaml rename to config/packages/cache.yaml index c7a5f169d..6899b7200 100644 --- a/tests/app/config/packages/cache.yaml +++ b/config/packages/cache.yaml @@ -17,17 +17,3 @@ framework: # Namespaced pools use the above "app" backend by default #pools: #my.dedicated.cache: null - - default_redis_provider: '%env(resolve:REDIS_URL)%' - - pools: - cache.user_data: - adapter: cache.adapter.redis - public: true - default_lifetime: 300 # 5 minutes - - # will be used in chill_main.tag_aware_cache service - cache.tags: - adapter: cache.adapter.redis - public: false - default_lifetime: 300 diff --git a/config/packages/cache_chill.yaml b/config/packages/cache_chill.yaml new file mode 100644 index 000000000..71877b6dd --- /dev/null +++ b/config/packages/cache_chill.yaml @@ -0,0 +1,14 @@ +framework: + cache: + default_redis_provider: '%env(resolve:REDIS_URL)%' + pools: + cache.user_data: + adapter: cache.adapter.redis + public: true + default_lifetime: 300 # 5 minutes + + # will be used in chill_main.tag_aware_cache service + cache.tags: + adapter: cache.adapter.redis + public: false + default_lifetime: 300 diff --git a/config/packages/chill.yaml b/config/packages/chill.yaml new file mode 100644 index 000000000..76578a2c7 --- /dev/null +++ b/config/packages/chill.yaml @@ -0,0 +1,121 @@ +chill_main: + available_languages: [ '%env(resolve:LOCALE)%', 'en' ] + available_countries: ['BE', 'FR'] + notifications: + from_email: '%env(resolve:NOTIFICATION_FROM_EMAIL)%' + from_name: '%env(resolve:NOTIFICATION_FROM_NAME)%' + host: '%env(resolve:NOTIFICATION_HOST)%' + redis: + host: '%env(resolve:REDIS_HOST)%' + port: '%env(resolve:REDIS_PORT)%' + phone_helper: + twilio_sid: '%env(resolve:TWILIO_SID)%' + twilio_secret: '%env(resolve:TWILIO_SECRET)%' + default_carrier_code: '%env(resolve:DEFAULT_CARRIER_CODE)%' + short_messages: + dsn: '%env(string:SHORT_MESSAGE_DSN)%' + acl: + form_show_scopes: true + form_show_centers: true + access_global_history: false + access_user_change_password: true + access_permissions_group_list: true + add_address: + default_country: '%env(string:ADD_ADDRESS_DEFAULT_COUNTRY)%' + map_center: + x: '%env(float:ADD_ADDRESS_MAP_CENTER_X)%' + y: '%env(float:ADD_ADDRESS_MAP_CENTER_Y)%' + z: '%env(float:ADD_ADDRESS_MAP_CENTER_Z)%' + +when@test: + chill_main: + available_languages: + - 'fr' + - 'en' + +chill_custom_fields: + show_empty_values_in_views: false + +chill_person: + create_person_allowed: false + create_parcours_allowed: false + allow_multiple_simultaneous_accompanying_periods: true + accompanying_periods_fields: + user: visible + # createdBy, step, origin, intensity, scopes, requestor, anonymous, emergency, confidential : visible(default) | hidden + person_fields: + acceptEmail: hidden + alt_names: + - key: jeune_fille + labels: + lang: fr + label: Nom de naissance + marital_status: visible + civility: visible + deathdate: visible + validation: + center_required: true + +chill_activity: + form: + time_duration: + - + label: '5 minutes' + seconds: 300 + - + label: '10 minutes' + seconds: 600 + - + label: '15 minutes' + seconds: 900 + - + label: '20 minutes' + seconds: 1200 + - + label: '25 minutes' + seconds: 1500 + - + label: '30 minutes' + seconds: 1800 + - + label: '45 minutes' + seconds: 2700 + - + label: '1 hour' + seconds: 3600 + - + label: '1 hour 15' + seconds: 4500 + - + label: '1 hour 30' + seconds: 5400 + - + label: '1 hour 45' + seconds: 6300 + - + label: '2 hours' + seconds: 7200 + - + label: '2 hours 15' + seconds: 8100 + - + label: '2 hours 30' + seconds: 9000 + - + label: '2 hours 45' + seconds: 9900 + - + label: '3 hours' + seconds: 10800 + - + label: '3 hours 30' + seconds: 12600 + - + label: '4 hours' + seconds: 14400 + - + label: '4 hours 30' + seconds: 16200 + - + label: '5 hours' + seconds: 18000 diff --git a/config/packages/chill_budget.yaml b/config/packages/chill_budget.yaml new file mode 100644 index 000000000..853dc197b --- /dev/null +++ b/config/packages/chill_budget.yaml @@ -0,0 +1,85 @@ +chill_budget: + resources: + - { key: fixed_contract, labels: [{ lang: fr, label: "Salarié en CDI" }]} + - { key: temporary_contract, labels: [{ lang: fr, label: "Salarié en CDD"}]} + - { key: interim, labels: [{ lang: fr, label: "Salarié en intérim"}]} + - { key: other_revenues, labels: [{ lang: fr, label: "Revenus non salariés, commerçant, artisan,..."}]} + - { key: agricultural_activity, labels: [{ lang: fr, label: "Exploitant agricole"}]} + - { key: chomage_ass, labels: [{ lang: fr, label: "Allocations chômage ASS"}]} + - { key: chomage_are, labels: [{ lang: fr, label: "Allocations chômage ARE"}]} + - { key: remuneration_stage, labels: [{ lang: fr, label: "Rémunération de stage, d’apprentissage,..."}]} + - { key: daily_allowences, labels: [{ lang: fr, label: "Indemnités journalières"}]} + - { key: others, labels: [{ lang: fr, label: "Autres"}]} + - { key: pension, labels: [{ lang: fr, label: "Pension de retraite"}]} + - { key: invalidity, labels: [{ lang: fr, label: "Pension d'invalidité"}]} + - { key: reversion, labels: [{ lang: fr, label: "Pension de réversion"}]} + - { key: widowhood, labels: [{ lang: fr, label: "Pension de veuvage"}]} + - { key: military, labels: [{ lang: fr, label: "Pension militaire"}]} + - { key: food, labels: [{ lang: fr, label: "Pension alimentaire"}]} + - { key: compensation, labels: [{ lang: fr, label: "Pension de prestation compensatoire"}]} + - { key: allocation_handicap_adult, labels: [{ lang: fr, label: "Allocation aux adultes handicapés"}]} + - { key: rsa, labels: [{ lang: fr, label: "RSA"}]} + - { key: annuity_accident, labels: [{ lang: fr, label: "Rente accident"}]} + - { key: premium_al_pl, labels: [{ lang: fr, label: "Prime d’activité AL/APL au bénéficiaire"}]} + - { key: premium_thirdparty, labels: [{ lang: fr, label: "Prime d’activité versé au tiers"}]} + - { key: other_income, labels: [{ lang: fr, label: "Autres ressources (ARS, ...)"}]} + - { key: allocation_family, labels: [{ lang: fr, label: "Allocations familiales"}]} + - { key: allocation_basic, labels: [{ lang: fr, label: "Allocation de base"}]} + - { key: free_choice_saving, labels: [{ lang: fr, label: "Complément de libre choix du mode de garde"}]} + - { key: shared_benefits_child, labels: [{ lang: fr, label: "Prestation partagée éducation de l’enfant"}]} + - { key: complimentary_family, labels: [{ lang: fr, label: "Complément familial"}]} + - { key: allocation_family_support, labels: [{ lang: fr, label: "Allocation de soutien familial"}]} + - { key: allocation_education_child_handicap, labels: [{ lang: fr, label: "Allocation d’éducation de l’enfant handicapé"}]} + + charges: + - { key: rent, labels: [{ lang: fr, label: "Loyer" }]} + - { key: home_ownership, labels: [{ lang: fr, label: "Accession à la propriété" }]} + - { key: costs_accomodation, labels: [{ lang: fr, label: "Frais d’hébergement" }]} + - { key: home_insurance, labels: [{ lang: fr, label: "Assurance habitation" }]} + - { key: taxes, labels: [{ lang: fr, label: "Impôts (taxe habitation, taxe foncière, ordures ménagères, redevances incitatives)" }]} + - { key: impots, labels: [{lang: fr, label: "Impôts"}]} + - { key: electricity, labels: [{ lang: fr, label: "Electricité" }]} + - { key: gas, labels: [{ lang: fr, label: "Gaz en bouteille" }]} + - { key: heating, labels: [{ lang: fr, label: "Autre moyen de chauffage" }]} + - { key: water, labels: [{ lang: fr, label: "Eau" }]} + - { key: school_fees, labels: [ { lang: fr, label: "Frais de scolarité"}]} + - { key: alimony, labels: [ { lang: fr, label: "Pension alimentaire à reverser"}]} + - { key: child_care, labels: [ { lang: fr, label: "Frais de garde (en totalité)"}]} + - { key: telecom, labels: [ { lang: fr, label: "Frais de communication fixe"}]} + - { key: mobilephone, labels: [ { lang: fr, label: "Frais de communication mobile"}]} + - { key: internet, labels: [ { lang: fr, label: "Frais de communication internet"}]} + - { key: insurance, labels: [{ lang: fr, label: "Assurances"}]} + - { key: debt_commission, labels: [{ lang: fr, label: "Saisine de la commission surendettement"}]} + - { key: recovery_plan, labels: [{ lang: fr, label: "Plan de redressement"}]} + - { key: rpr, labels: [{ lang: fr, label: "PRP"}]} + - { key: moratoire, labels: [{lang: fr, label: "Moratoire"}]} + - { key: mutuelle, labels: [{lang: fr, label: "Mutuelle"}]} + - { key: transport, labels: [{lang: fr, label: "Frais de transport"}]} + - { key: decouvbank, labels: [{lang: fr, label: "Découvert bancaire utilisé"}]} + - { key: procsaisie, labels: [{lang: fr, label: "Procédure de saisie"}]} + - { key: indus, labels: [{lang: fr, label: "Indus"}]} + - { key: apurement, labels: [{lang: fr, label: "Plan d'apurement"}]} + - { key: debt_rent, labels: [{lang: fr, label: "Dette de loyer (hors APL)"}]} + - { key: debt_property, labels: [{lang: fr, label: "Dette d'accession à la propriété"}]} + - { key: debt_lodging, labels: [{lang: fr, label: "Dette de frais d’hébergement"}]} + - { key: debt_electricity, labels: [{lang: fr, label: "Dette d'électricité"}]} + - { key: debt_water, labels: [{lang: fr, label: "Dette d'eau"}]} + - { key: debt_heating, labels: [{lang: fr, label: "Dette d'autre moyen de chauffage"}]} + - { key: debt_gas, labels: [{lang: fr, label: "Dette de gaz en bouteille"}]} + - { key: debt_house_insurance, labels: [{lang: fr, label: "Dette d'assurance habitation"}]} + - { key: debt_housing_taxes, labels: [{lang: fr, label: "Dette d'impôts liées au logement"}]} + - { key: debt_taxes, labels: [{lang: fr, label: "Dette d'impôts autres"}]} + - { key: debt_school, labels: [{lang: fr, label: "Dette de frais de scolarité (cantine, transport, frais de scolarité, frais de garde)"}]} + - { key: debt_alimentation, labels: [{lang: fr, label: "Dette de pension alimentaire à reverser"}]} + - { key: debt_childcare, labels: [{lang: fr, label: "Dette de frais de garde (en totalité)"}]} + - { key: debt_phone, labels: [{lang: fr, label: "Dette de communication fixe"}]} + - { key: debt_mobile, labels: [{lang: fr, label: "Dette de communication portable"}]} + - { key: debt_internet, labels: [{lang: fr, label: "Dette de communication internet"}]} + - { key: debt_car_insurance, labels: [{lang: fr, label: "Dette d'assurance auto"}]} + - { key: debt_mutual, labels: [{lang: fr, label: "Dette de mutuelle"}]} + - { key: debt_transport, labels: [{lang: fr, label: "Dette de frais de transport"}]} + - { key: debt_bank, labels: [{lang: fr, label: "Dette de découvert bancaire utilisé"}]} + - { key: debt_garbage, labels: [{lang: fr, label: "Dette de taxe d’ordures ménagère"}]} + - { key: debt_other, labels: [{lang: fr, label: "Dette autre"}]} + - { key: autre, labels: [{lang: fr, label: "Autre"}]} + diff --git a/config/packages/chill_calendar.yaml b/config/packages/chill_calendar.yaml new file mode 100644 index 000000000..f7eedf748 --- /dev/null +++ b/config/packages/chill_calendar.yaml @@ -0,0 +1,3 @@ +chill_calendar: + remote_calendars_sync: + enabled: false diff --git a/config/packages/chill_doc_generator.yaml b/config/packages/chill_doc_generator.yaml new file mode 100644 index 000000000..1e5bf8686 --- /dev/null +++ b/config/packages/chill_doc_generator.yaml @@ -0,0 +1,5 @@ +chill_doc_generator: + driver: + type: relatorio + relatorio: + url: 'http://%env(RELATORIO_HOST)%:%env(RELATORIO_PORT)%/' \ No newline at end of file diff --git a/tests/app/config/packages/chill_doc_store.yaml b/config/packages/chill_doc_store.yaml similarity index 100% rename from tests/app/config/packages/chill_doc_store.yaml rename to config/packages/chill_doc_store.yaml diff --git a/config/packages/debug.yaml b/config/packages/debug.yaml new file mode 100644 index 000000000..ad874afdd --- /dev/null +++ b/config/packages/debug.yaml @@ -0,0 +1,5 @@ +when@dev: + debug: + # Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser. + # See the "server:dump" command to start a new server. + dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%" diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml new file mode 100644 index 000000000..d421158a0 --- /dev/null +++ b/config/packages/doctrine.yaml @@ -0,0 +1,38 @@ +doctrine: + dbal: + url: '%env(resolve:DATABASE_URL)%' + + # IMPORTANT: You MUST configure your server version, + # either here or in the DATABASE_URL env var (see .env file) + #server_version: '16' + use_savepoints: true + orm: + auto_generate_proxy_classes: true + naming_strategy: doctrine.orm.naming_strategy.default + auto_mapping: true + +when@test: + doctrine: + dbal: + # "TEST_TOKEN" is typically set by ParaTest + dbname_suffix: '_test%env(default::TEST_TOKEN)%' + +when@prod: + doctrine: + orm: + auto_generate_proxy_classes: false + proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies' + query_cache_driver: + type: pool + pool: doctrine.system_cache_pool + result_cache_driver: + type: pool + pool: doctrine.result_cache_pool + + framework: + cache: + pools: + doctrine.result_cache_pool: + adapter: cache.app + doctrine.system_cache_pool: + adapter: cache.system diff --git a/config/packages/doctrine_migrations.yaml b/config/packages/doctrine_migrations.yaml new file mode 100644 index 000000000..6eac03d9f --- /dev/null +++ b/config/packages/doctrine_migrations.yaml @@ -0,0 +1,2 @@ +doctrine_migrations: + enable_profiler: false diff --git a/tests/app/config/packages/doctrine_migrations.yaml b/config/packages/doctrine_migrations_chill.yaml similarity index 80% rename from tests/app/config/packages/doctrine_migrations.yaml rename to config/packages/doctrine_migrations_chill.yaml index a559780d3..8b8bf539b 100644 --- a/tests/app/config/packages/doctrine_migrations.yaml +++ b/config/packages/doctrine_migrations_chill.yaml @@ -7,24 +7,15 @@ doctrine_migrations: 'Chill\Migrations\CustomFields': '@ChillCustomFieldsBundle/migrations' 'Chill\Migrations\Event': '@ChillEventBundle/migrations' 'Chill\Migrations\Person': '@ChillPersonBundle/migrations' - 'Chill\Migrations\Report': '@ChillReportBundle/migrations' 'Chill\Migrations\Task': '@ChillTaskBundle/migrations' 'Chill\Migrations\ThirdParty': '@ChillThirdPartyBundle/migrations' - 'Chill\Migrations\AsideActivity': '@ChillAsideActivityBundle/migrations' 'Chill\Migrations\DocGenerator': '@ChillDocGeneratorBundle/migrations' + 'Chill\Migrations\AsideActivity': '@ChillAsideActivityBundle/migrations' 'Chill\Migrations\Calendar': '@ChillCalendarBundle/migrations' 'Chill\Migrations\Budget': '@ChillBudgetBundle/migrations' - + 'Chill\Migrations\Report': '@ChillReportBundle/migrations' all_or_nothing: true services: 'Doctrine\Migrations\Version\Comparator': 'Chill\MainBundle\Doctrine\Migrations\VersionComparator' - - storage: - table_storage: - table_name: 'migration_versions' - version_column_name: 'version' - version_column_length: 1024 - executed_at_column_name: 'executed_at' - execution_time_column_name: 'execution_time' diff --git a/tests/app/config/packages/framework.yaml b/config/packages/framework.yaml similarity index 65% rename from tests/app/config/packages/framework.yaml rename to config/packages/framework.yaml index a5ec738f2..33a27cd5c 100644 --- a/tests/app/config/packages/framework.yaml +++ b/config/packages/framework.yaml @@ -1,16 +1,6 @@ # see https://symfony.com/doc/current/reference/configuration/framework.html framework: secret: '%env(APP_SECRET)%' - - http_client: - default_options: - verify_peer: false - verify_host: false - - trusted_hosts: - - '^(localhost|127.0.0.1|web)$' - - '%env(resolve:TRUSTED_HOSTS)%' - #csrf_protection: true http_method_override: false @@ -27,12 +17,6 @@ framework: php_errors: log: true - #error_controller: App\Controller\ErrorController::show - - ## sf4 check: ou à déplacer dans un chill.yaml - assets: - json_manifest_path: '%kernel.project_dir%/public/build/manifest.json' - when@test: framework: test: true diff --git a/tests/app/config/packages/assets.yaml b/config/packages/framework_chill.yaml similarity index 55% rename from tests/app/config/packages/assets.yaml rename to config/packages/framework_chill.yaml index 051d36dce..d67a9d570 100644 --- a/tests/app/config/packages/assets.yaml +++ b/config/packages/framework_chill.yaml @@ -1,3 +1,8 @@ framework: assets: json_manifest_path: '%kernel.project_dir%/public/build/manifest.json' + +when@test: + framework: + assets: + json_manifest_path: null diff --git a/config/packages/knpu_oauth2_client.yaml b/config/packages/knpu_oauth2_client.yaml new file mode 100644 index 000000000..05e853399 --- /dev/null +++ b/config/packages/knpu_oauth2_client.yaml @@ -0,0 +1,3 @@ +knpu_oauth2_client: + clients: + # configure your clients as described here: https://github.com/knpuniversity/oauth2-client-bundle#configuration diff --git a/config/packages/lexik_jwt_authentication.yaml b/config/packages/lexik_jwt_authentication.yaml new file mode 100644 index 000000000..edfb69dc8 --- /dev/null +++ b/config/packages/lexik_jwt_authentication.yaml @@ -0,0 +1,4 @@ +lexik_jwt_authentication: + secret_key: '%env(resolve:JWT_SECRET_KEY)%' + public_key: '%env(resolve:JWT_PUBLIC_KEY)%' + pass_phrase: '%env(JWT_PASSPHRASE)%' diff --git a/config/packages/lexik_jwt_authentication_chill.yaml b/config/packages/lexik_jwt_authentication_chill.yaml new file mode 100644 index 000000000..0f1f9c130 --- /dev/null +++ b/config/packages/lexik_jwt_authentication_chill.yaml @@ -0,0 +1,9 @@ +lexik_jwt_authentication: + # required for wopi - recommended duration + token_ttl: 36000 + + # required for wopi - token in parameter access_token + token_extractors: + query_parameter: + enabled: true + name: access_token \ No newline at end of file diff --git a/tests/app/config/packages/loophp_psr17.yaml b/config/packages/loophp_psr17.yaml similarity index 100% rename from tests/app/config/packages/loophp_psr17.yaml rename to config/packages/loophp_psr17.yaml diff --git a/config/packages/mailer.yaml b/config/packages/mailer.yaml new file mode 100644 index 000000000..56a650d89 --- /dev/null +++ b/config/packages/mailer.yaml @@ -0,0 +1,3 @@ +framework: + mailer: + dsn: '%env(MAILER_DSN)%' diff --git a/config/packages/mailer_chill.yaml b/config/packages/mailer_chill.yaml new file mode 100644 index 000000000..041ea7978 --- /dev/null +++ b/config/packages/mailer_chill.yaml @@ -0,0 +1,4 @@ +framework: + mailer: + envelope: + sender: '%env(NOTIFICATION_FROM_EMAIL)%' diff --git a/config/packages/messenger.yaml b/config/packages/messenger.yaml new file mode 100644 index 000000000..b460fd60c --- /dev/null +++ b/config/packages/messenger.yaml @@ -0,0 +1,75 @@ +framework: + messenger: + # reset services after consuming messages + reset_on_message: true + + # Uncomment this (and the failed transport below) to send failed messages to this transport for later handling. + failure_transport: failed + + transports: + # those transports are added by chill-bundles recipes + sync: sync:// + async: + dsn: '%env(MESSENGER_TRANSPORT_DSN)%/async' + options: + exchange: + name: async + type: fanout + queues: + async: ~ + auto_setup: true + + priority: '%env(MESSENGER_TRANSPORT_DSN)%/priority' + # end of transports added by chill-bundles recipes + # https://symfony.com/doc/current/messenger.html#transport-configuration + failed: 'doctrine://default?queue_name=failed' + to_sign_worker: + dsn: '%env(MESSENGER_TRANSPORT_DSN)%/to_python_sign' + serializer: Chill\DocStoreBundle\Service\Signature\Driver\BaseSigner\RequestPdfSignMessageSerializer + options: + exchange: + name: to_python_sign + type: direct + queues: + to_python_sign: ~ + signed_docs: + dsn: '%env(MESSENGER_TRANSPORT_DSN)%/signed_docs' + serializer: Chill\DocStoreBundle\Service\Signature\Driver\BaseSigner\PdfSignedMessageSerializer + options: + exchange: + name: signed_docs + type: direct + queues: + signed_docs: + binding_keys: [signed_doc] + + auto_setup: false + + routing: + # routes added by chill-bundles recipes + 'Chill\CalendarBundle\Messenger\Message\CalendarRangeMessage': async + 'Chill\CalendarBundle\Messenger\Message\CalendarRangeRemovedMessage': async + 'Chill\CalendarBundle\Messenger\Message\CalendarRemovedMessage': async + 'Chill\CalendarBundle\Messenger\Message\CalendarMessage': async + 'Chill\CalendarBundle\Messenger\Message\InviteUpdateMessage': async + 'Chill\CalendarBundle\Messenger\Message\MSGraphChangeNotificationMessage': async + 'Chill\MainBundle\Service\ShortMessage\ShortMessage': async + 'Chill\DocGeneratorBundle\Service\Messenger\RequestGenerationMessage': priority + 'Chill\PersonBundle\AccompanyingPeriod\Lifecycle\AccompanyingPeriodStepChangeRequestMessage': async + 'Chill\DocStoreBundle\Service\Signature\Driver\BaseSigner\RequestPdfSignMessage': to_sign_worker + 'Chill\DocStoreBundle\Service\StoredObjectCleaner\RemoveOldVersionMessage': async + 'Chill\MainBundle\Workflow\Messenger\PostSignatureStateChangeMessage': priority + 'Chill\MainBundle\Workflow\Messenger\PostPublicViewMessage': async + 'Chill\MainBundle\Service\Workflow\CancelStaleWorkflowMessage': async + # end of routes added by chill-bundles recipes + # Route your messages to the transports + # 'App\Message\YourMessage': async + # 'Symfony\Component\Mailer\Messenger\SendEmailMessage': async + +when@test: + framework: + messenger: + transports: + async: 'in-memory://' + priority: 'in-memory://' + signed_docs: 'in-memory://' diff --git a/config/packages/misd_phone_number.yaml b/config/packages/misd_phone_number.yaml new file mode 100644 index 000000000..20e0144ae --- /dev/null +++ b/config/packages/misd_phone_number.yaml @@ -0,0 +1,13 @@ +# To persist libphonenumber\PhoneNumber objects, add the Misd\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType mapping to your application's config. +# This requires: doctrine/doctrine-bundle +#doctrine: +# dbal: +# types: +# phone_number: Misd\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType + +#misd_phone_number: +# twig: false +# form: false +# serializer: false +# validator: +# default_region: GB diff --git a/config/packages/monolog.yaml b/config/packages/monolog.yaml new file mode 100644 index 000000000..9db7d8a7f --- /dev/null +++ b/config/packages/monolog.yaml @@ -0,0 +1,62 @@ +monolog: + channels: + - deprecation # Deprecations are logged in the dedicated "deprecation" channel when it exists + +when@dev: + monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] + # uncomment to get logging in your browser + # you may have to allow bigger header sizes in your Web server configuration + #firephp: + # type: firephp + # level: info + #chromephp: + # type: chromephp + # level: info + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] + +when@test: + monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + channels: ["!event"] + nested: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + +when@prod: + monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + buffer_size: 50 # How many messages should be saved? Prevent memory leaks + nested: + type: stream + path: php://stderr + level: debug + formatter: monolog.formatter.json + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine"] + deprecation: + type: stream + channels: [deprecation] + path: php://stderr + formatter: monolog.formatter.json diff --git a/config/packages/nelmio_alice.yaml b/config/packages/nelmio_alice.yaml new file mode 100644 index 000000000..e82c32982 --- /dev/null +++ b/config/packages/nelmio_alice.yaml @@ -0,0 +1,12 @@ +when@dev: &dev + nelmio_alice: + functions_blacklist: + - 'current' + - 'shuffle' + - 'date' + - 'time' + - 'file' + - 'md5' + - 'sha1' + +when@test: *dev diff --git a/tests/app/config/packages/nyholm_psr7.yaml b/config/packages/nyholm_psr7.yaml similarity index 56% rename from tests/app/config/packages/nyholm_psr7.yaml rename to config/packages/nyholm_psr7.yaml index f1357233b..ade831249 100644 --- a/tests/app/config/packages/nyholm_psr7.yaml +++ b/config/packages/nyholm_psr7.yaml @@ -7,15 +7,5 @@ services: Psr\Http\Message\UploadedFileFactoryInterface: '@nyholm.psr7.psr17_factory' Psr\Http\Message\UriFactoryInterface: '@nyholm.psr7.psr17_factory' - # Register nyholm/psr7 services for autowiring with HTTPlug factories - Http\Message\MessageFactory: '@nyholm.psr7.httplug_factory' - Http\Message\RequestFactory: '@nyholm.psr7.httplug_factory' - Http\Message\ResponseFactory: '@nyholm.psr7.httplug_factory' - Http\Message\StreamFactory: '@nyholm.psr7.httplug_factory' - Http\Message\UriFactory: '@nyholm.psr7.httplug_factory' - nyholm.psr7.psr17_factory: class: Nyholm\Psr7\Factory\Psr17Factory - - nyholm.psr7.httplug_factory: - class: Nyholm\Psr7\Factory\HttplugFactory diff --git a/tests/app/config/packages/ramsey_uuid_doctrine.yaml b/config/packages/ramsey_uuid_doctrine.yaml similarity index 100% rename from tests/app/config/packages/ramsey_uuid_doctrine.yaml rename to config/packages/ramsey_uuid_doctrine.yaml diff --git a/tests/app/config/packages/routing.yaml b/config/packages/routing.yaml similarity index 75% rename from tests/app/config/packages/routing.yaml rename to config/packages/routing.yaml index b45c1cec7..4b766ce57 100644 --- a/tests/app/config/packages/routing.yaml +++ b/config/packages/routing.yaml @@ -5,3 +5,8 @@ framework: # Configure how to generate URLs in non-HTTP contexts, such as CLI commands. # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands #default_uri: http://localhost + +when@prod: + framework: + router: + strict_requirements: null diff --git a/config/packages/routing_chill.yaml b/config/packages/routing_chill.yaml new file mode 100644 index 000000000..ca2bc8d8d --- /dev/null +++ b/config/packages/routing_chill.yaml @@ -0,0 +1,8 @@ +parameters: + composed_uri: 'https://%env(resolve:NOTIFICATION_HOST)%' + +framework: + router: + # Configure how to generate URLs in non-HTTP contexts, such as CLI commands. + # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands + default_uri: '%composed_uri%' \ No newline at end of file diff --git a/tests/app/config/packages/security.yaml b/config/packages/security.yaml similarity index 65% rename from tests/app/config/packages/security.yaml rename to config/packages/security.yaml index a1a257736..af2385ba9 100644 --- a/tests/app/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -1,68 +1,68 @@ security: - - access_decision_manager: - strategy: unanimous - allow_if_all_abstain: false - enable_authenticator_manager: true # https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords password_hashers: Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto' # https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider providers: - - chain_provider: - chain : - providers: [in_memory, users] - in_memory: + # providers added by chill-bundles recipes\n + # those providers are required to make chill working + chill_chain_provider: + chain: + providers: [chill_in_memory, chill_users] + chill_in_memory: memory: users: admin: { password: '%env(resolve:ADMIN_PASSWORD)%', roles: ['ROLE_ADMIN', 'ROLE_ALLOWED_TO_SWITCH', 'ROLE_USER'] } - users: + chill_users: id: chill.main.user_provider - - encoders: - Chill\MainBundle\Entity\User: - algorithm: bcrypt - Symfony\Component\Security\Core\User\User: plaintext - + # end of providers added by chill-bundles recipes\n + # all other providers might be removed, unless you have specific needs\n firewalls: - dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false - + # those lines are added by chill-bundles recipe, and are requires to make chill-bundles working + # this firewall is in use for wopi endpoint, which requires wopi: pattern: ^/wopi - provider: chain_provider + provider: chill_chain_provider stateless: true guard: authenticators: - lexik_jwt_authentication.jwt_token_authenticator - - main: - # remove during upgrade from symfony 4 to symfony 5 TODO check this - #anonymous: ~ - provider: chain_provider + dav: + pattern: ^/dav + provider: chill_chain_provider + stateless: true + guard: + authenticators: + - Chill\DocStoreBundle\Security\Guard\JWTOnDavUrlAuthenticator + # this firewall is the main firewall for chill. It should be the last one in the stack, + # unless you have specific needs + chill_main: + provider: chill_chain_provider + entry_point: form_login form_login: csrf_parameter: _csrf_token csrf_token_id: authenticate #csrf_provider: security.csrf.token_manager - # remove during upgrade from symfony 4 to symfony 5 TODO check this - # logout_on_user_change: true logout: path: /logout - # uncomment to enable impersonate mode in Chill # https://symfony.com/doc/current/security/impersonating_user.html switch_user: true - + # end of lines added by chill-bundles recipe # activate different ways to authenticate - # https://symfony.com/doc/current/security.html#firewalls-authentication + # https://symfony.com/doc/current/security.html#the-firewall + + # https://symfony.com/doc/current/security/impersonating_user.html + # switch_user: true # Easy way to control access for large sections of your site # Note: Only the *first* access control that matches will be used access_control: + # those lines are added by chill-bundles recipes, and are requires to make chill-bundles working - { path: ^/(login|logout), roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/public, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/wopi, roles: IS_AUTHENTICATED_FULLY } @@ -75,6 +75,7 @@ security: - { path: ^/([a-z]+/)?admin, roles: ROLE_ADMIN } # other pages, only for regular user (no admin) - { path: ^/, roles: ROLE_USER } + # this is the end of line added by chill-project/chill-bundles recipes when@test: security: diff --git a/config/packages/security_chill.yaml b/config/packages/security_chill.yaml new file mode 100644 index 000000000..1de2a5ff6 --- /dev/null +++ b/config/packages/security_chill.yaml @@ -0,0 +1,9 @@ +security: + access_decision_manager: + strategy: unanimous + allow_if_all_abstain: false + +when@test: + security: + role_hierarchy: + CHILL_MASTER_ROLE: [ CHILL_INHERITED_ROLE_1 ] diff --git a/tests/app/config/packages/sensio_framework_extra.yaml b/config/packages/sensio_framework_extra.yaml similarity index 100% rename from tests/app/config/packages/sensio_framework_extra.yaml rename to config/packages/sensio_framework_extra.yaml diff --git a/config/packages/translation.yaml b/config/packages/translation.yaml new file mode 100644 index 000000000..b3f8f9cfe --- /dev/null +++ b/config/packages/translation.yaml @@ -0,0 +1,7 @@ +framework: + default_locale: en + translator: + default_path: '%kernel.project_dir%/translations' + fallbacks: + - en + providers: diff --git a/config/packages/translation_chill.yaml b/config/packages/translation_chill.yaml new file mode 100644 index 000000000..a0371ff10 --- /dev/null +++ b/config/packages/translation_chill.yaml @@ -0,0 +1,4 @@ +framework: + default_locale: '%env(resolve:LOCALE)%' + translator: + fallbacks: [ '%env(resolve:LOCALE)%' ] \ No newline at end of file diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml new file mode 100644 index 000000000..f9f4cc539 --- /dev/null +++ b/config/packages/twig.yaml @@ -0,0 +1,6 @@ +twig: + default_path: '%kernel.project_dir%/templates' + +when@test: + twig: + strict_variables: true diff --git a/tests/app/config/packages/twig.yaml b/config/packages/twig_chill.yaml similarity index 72% rename from tests/app/config/packages/twig.yaml rename to config/packages/twig_chill.yaml index 02d862922..15a3066fd 100644 --- a/tests/app/config/packages/twig.yaml +++ b/config/packages/twig_chill.yaml @@ -1,9 +1,4 @@ twig: - default_path: '%kernel.project_dir%/templates' - debug: '%kernel.debug%' - strict_variables: '%kernel.debug%' - exception_controller: null - ## In Symfony 5, bootstrap_5 theme is supported. But not yet in sf4 !! # see sf5 https://symfony.com/doc/current/form/form_themes.html # see sf4 https://symfony.com/doc/4.4/form/form_themes.html @@ -14,4 +9,8 @@ twig: # and adapt it lightly. # form_themes: ['@ChillMain/Form/bootstrap5/bootstrap_5_horizontal_layout.html.twig'] - #form_themes: ['bootstrap_5_horizontal_layout.html.twig'] + +when@dev: + twig: + globals: + responsive_debug: false diff --git a/tests/app/config/packages/validator.yaml b/config/packages/validator.yaml similarity index 74% rename from tests/app/config/packages/validator.yaml rename to config/packages/validator.yaml index 350786a13..0201281d3 100644 --- a/tests/app/config/packages/validator.yaml +++ b/config/packages/validator.yaml @@ -6,3 +6,8 @@ framework: # For instance, basic validation constraints will be inferred from Doctrine's metadata. #auto_mapping: # App\Entity\: [] + +when@test: + framework: + validation: + not_compromised_password: false diff --git a/tests/app/config/packages/webpack_encore.yaml b/config/packages/webpack_encore.yaml similarity index 63% rename from tests/app/config/packages/webpack_encore.yaml rename to config/packages/webpack_encore.yaml index 709531205..476246aec 100644 --- a/tests/app/config/packages/webpack_encore.yaml +++ b/config/packages/webpack_encore.yaml @@ -1,16 +1,18 @@ ---- webpack_encore: # The path where Encore is building the assets - i.e. Encore.setOutputPath() output_path: '%kernel.project_dir%/public/build' - # If multiple builds are defined (as shown below), you can disable the default build: # output_path: false # Set attributes that will be rendered on all script and link tags script_attributes: defer: true + # Uncomment (also under link_attributes) if using Turbo Drive + # https://turbo.hotwired.dev/handbook/drive#reloading-when-assets-change + # 'data-turbo-track': reload # link_attributes: - # + # Uncomment if using Turbo Drive + # 'data-turbo-track': reload # If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials') # crossorigin: 'anonymous' @@ -23,11 +25,17 @@ webpack_encore: # If you have multiple builds: # builds: - # pass "frontend" as the 3rg arg to the Twig functions - # {{ encore_entry_script_tags('entry1', null, 'frontend') }} - # frontend: '%kernel.project_dir%/public/frontend/build' - # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) - # Put in config/packages/prod/webpack_encore.yaml - # cache: true + # pass the build name as the 3rd argument to the Twig functions + # {{ encore_entry_script_tags('entry1', null, 'frontend') }} + +#when@prod: +# webpack_encore: +# # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) +# # Available in version 1.2 +# cache: true + +when@test: + webpack_encore: + strict_mode: false diff --git a/config/packages/wopi.yaml b/config/packages/wopi.yaml new file mode 100644 index 000000000..fc93a858e --- /dev/null +++ b/config/packages/wopi.yaml @@ -0,0 +1,2 @@ +wopi: + server: "%env(resolve:EDITOR_SERVER)%" \ No newline at end of file diff --git a/tests/app/config/packages/workflow.yaml b/config/packages/workflow.yaml similarity index 100% rename from tests/app/config/packages/workflow.yaml rename to config/packages/workflow.yaml diff --git a/config/preload.php b/config/preload.php new file mode 100644 index 000000000..5ebcdb215 --- /dev/null +++ b/config/preload.php @@ -0,0 +1,5 @@ + - + + - + + +