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
This commit is contained in:
2024-11-06 22:05:23 +01:00
parent 9ef884349a
commit 3e0731f06e
91 changed files with 10783 additions and 539 deletions

View File

@@ -1,3 +0,0 @@
framework:
assets:
json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'

View File

@@ -1,33 +0,0 @@
framework:
cache:
# Unique name of your app: used to compute stable namespaces for cache keys.
#prefix_seed: your_vendor_name/app_name
# The "app" cache stores to the filesystem by default.
# The data in this cache should persist between deploys.
# Other options include:
# Redis
#app: cache.adapter.redis
#default_redis_provider: redis://localhost
# APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues)
#app: cache.adapter.apcu
# 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

View File

@@ -1,23 +0,0 @@
chill_main:
available_languages: [ '%env(resolve:LOCALE)%' ]
notifications:
from_email: 'test@yopmail.com'
from_name: 'TEST CHILL'
host: 'localhost'
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)%'
chill_custom_fields:
show_empty_values_in_views: false
# Enable/disable specific libraries (css and js)
twig:
globals:
active_bootstrap: false
active_forkawesome: true
active_ckeditor: false

View File

@@ -1,14 +0,0 @@
#chill_amli_budget:
# resources:
# - { key: travail-temporaire, labels: [{ lang: fr, label: "Travail temporaire" }]}
# - { key: chomage, labels: [{ lang: fr, label: "Allocation de chômage"}]}
# - { key: cpas, labels: [{ lang: fr, label: "CPAS"}]}
# - { key: mutuelle, labels: [{ lang: fr, label: "Mutuelle"}]}
# - { key: pension-alimentaire, labels: [{ lang: fr, label: "Pension alimentaire"}]}
# - { key: allocation-fam, labels: [{ lang: fr, label: "Allocations familiales"}]}
# charges:
# - { key: charge-communes, labels: [{ lang: fr, label: "Charges communes" }]}
# - { key: electricity, labels: [{ lang: fr, label: "Électricité" }]}
# - { key: gaz, labels: [{ lang: fr, label: "Gaz" }]}
# - { key: water, labels: [{ lang: fr, label: "Eau" }]}
# - { key: autres, labels: [ { lang: fr, label: "Autres"}]}

View File

@@ -1,6 +0,0 @@
chill_doc_store:
openstack:
temp_url:
temp_url_key: '%env(resolve:ASYNC_UPLOAD_TEMP_URL_KEY)%' # Required
container: '%env(resolve:ASYNC_UPLOAD_TEMP_URL_CONTAINER)%' # Required
temp_url_base_path: '%env(resolve:ASYNC_UPLOAD_TEMP_URL_BASE_PATH)%' # Required

View File

@@ -1,4 +0,0 @@
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)%"

View File

@@ -1,7 +0,0 @@
framework:
messenger:
transports:
async: 'in-memory://'
sync: 'in-memory://'
priority: 'in-memory://'
failed: 'in-memory://'

View File

@@ -1,21 +0,0 @@
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']
bubble: false

View File

@@ -1,18 +0,0 @@
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: '5.7'
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.default
auto_mapping: true
#mappings:
# App:
# is_bundle: false
# type: annotation
# dir: '%kernel.project_dir%/src/Entity'
# prefix: 'App\Entity'
# alias: App

View File

@@ -1,30 +0,0 @@
doctrine_migrations:
migrations_paths:
# migrations for default chill modules
'Chill\Migrations\Main': '@ChillMainBundle/migrations'
'Chill\Migrations\Activity': '@ChillActivityBundle/migrations'
'Chill\Migrations\DocStore': '@ChillDocStoreBundle/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\Calendar': '@ChillCalendarBundle/migrations'
'Chill\Migrations\Budget': '@ChillBudgetBundle/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'

View File

@@ -1,42 +0,0 @@
# 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
# Enables session support. Note that the session will ONLY be started if you read or write from it.
# Remove or comment this section to explicitly disable session support.
session:
handler_id: null
cookie_secure: auto
cookie_samesite: lax
storage_factory_id: session.storage.factory.native
#esi: true
#fragments: true
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
session:
storage_factory_id: session.storage.factory.mock_file
assets:
json_manifest_path: null

View File

@@ -1,12 +0,0 @@
lexik_jwt_authentication:
secret_key: '%env(resolve:JWT_SECRET_KEY)%'
public_key: '%env(resolve:JWT_PUBLIC_KEY)%'
pass_phrase: '%env(JWT_PASSPHRASE)%'
# required for wopi - recommended duration
token_ttl: 36000
token_extractors:
query_parameter:
enabled: true
name: access_token

View File

@@ -1,8 +0,0 @@
services:
# Register loophp/psr17/Psr17 class and autowire/autoconfigure it.
loophp\psr17\Psr17:
autowire: true
autoconfigure: true
# Alias the service to the Psr17 interface.
loophp\psr17\Psr17Interface: '@loophp\psr17\Psr17'

View File

@@ -1,32 +0,0 @@
framework:
messenger:
# Uncomment this (and the failed transport below) to send failed messages to this transport for later handling.
# failure_transport: failed
transports:
# https://symfony.com/doc/current/messenger.html#transport-configuration
async: '%env(MESSENGER_TRANSPORT_DSN)%'
priority:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
failed: 'doctrine://default?queue_name=failed'
routing:
# Route your messages to the transports
'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
when@test:
framework:
messenger:
transports:
async: 'in-memory://'
failed: 'in-memory://'
sync: 'in-memory://'
priority: 'in-memory://'

View File

@@ -1,21 +0,0 @@
services:
# Register nyholm/psr7 services for autowiring with PSR-17 (HTTP factories)
Psr\Http\Message\RequestFactoryInterface: '@nyholm.psr7.psr17_factory'
Psr\Http\Message\ResponseFactoryInterface: '@nyholm.psr7.psr17_factory'
Psr\Http\Message\ServerRequestFactoryInterface: '@nyholm.psr7.psr17_factory'
Psr\Http\Message\StreamFactoryInterface: '@nyholm.psr7.psr17_factory'
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

View File

@@ -1,8 +0,0 @@
# As of Symfony 5.1, deprecations are logged in the dedicated "deprecation" channel when it exists
#monolog:
# channels: [deprecation]
# handlers:
# deprecation:
# type: stream
# channels: [deprecation]
# path: "%kernel.logs_dir%/%kernel.environment%.deprecations.log"

View File

@@ -1,20 +0,0 @@
doctrine:
orm:
auto_generate_proxy_classes: false
metadata_cache_driver:
type: pool
pool: doctrine.system_cache_pool
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

View File

@@ -1,14 +0,0 @@
monolog:
handlers:
graylog:
type: gelf
publisher:
hostname: "%env(resolve:GELF_HOST)%"
port: "%env(resolve:GELF_PORT)%"
level: warning
channels: ['!event']
console:
type: console
process_psr_3_messages: false
channels: ['!event', '!doctrine', '!console']
bubble: false

View File

@@ -1,3 +0,0 @@
framework:
router:
strict_requirements: null

View File

@@ -1,4 +0,0 @@
#webpack_encore:
# Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes)
# Available in version 1.2
#cache: true

View File

@@ -1,4 +0,0 @@
doctrine:
dbal:
types:
uuid: 'Ramsey\Uuid\Doctrine\UuidType'

View File

@@ -1,7 +0,0 @@
framework:
router:
utf8: true
# 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

View File

@@ -1,90 +0,0 @@
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:
memory:
users:
admin: { password: '%env(resolve:ADMIN_PASSWORD)%', roles: ['ROLE_ADMIN', 'ROLE_ALLOWED_TO_SWITCH', 'ROLE_USER'] }
users:
id: chill.main.user_provider
encoders:
Chill\MainBundle\Entity\User:
algorithm: bcrypt
Symfony\Component\Security\Core\User\User: plaintext
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
wopi:
pattern: ^/wopi
provider: 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
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
# activate different ways to authenticate
# https://symfony.com/doc/current/security.html#firewalls-authentication
# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
- { path: ^/(login|logout), roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/public, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/wopi, roles: IS_AUTHENTICATED_FULLY }
# access for homepage, the homepage redirect admin to admin section
- { path: ^/$, roles: [ IS_AUTHENTICATED_REMEMBERED ] }
- { path: ^/homepage$, roles: [ IS_AUTHENTICATED_REMEMBERED ] }
# idem
- { path: ^/([a-z]+/)?homepage, roles: [ IS_AUTHENTICATED_REMEMBERED ] }
# admin section, only for admin
- { path: ^/([a-z]+/)?admin, roles: ROLE_ADMIN }
# other pages, only for regular user (no admin)
- { path: ^/, roles: ROLE_USER }
when@test:
security:
password_hashers:
# By default, password hashers are resource intensive and take time. This is
# important to generate secure password hashes. In tests however, secure hashes
# are not important, waste resources and increase test times. The following
# reduces the work factor to the lowest possible values.
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface:
algorithm: auto
cost: 4 # Lowest possible value for bcrypt
time_cost: 3 # Lowest possible value for argon
memory_cost: 10 # Lowest possible value for argon

View File

@@ -1,3 +0,0 @@
sensio_framework_extra:
router:
annotations: false

View File

@@ -1,5 +0,0 @@
---
chill_main:
available_languages:
- 'fr'
- 'en'

View File

@@ -1,5 +0,0 @@
framework:
mailer:
dsn: 'null://null'
envelope:
sender: 'test@chill.social'

View File

@@ -1,12 +0,0 @@
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

View File

@@ -1,5 +0,0 @@
---
# config/packages/test/security.yaml
security:
role_hierarchy:
CHILL_MASTER_ROLE: [ CHILL_INHERITED_ROLE_1 ]

View File

@@ -1,2 +0,0 @@
twig:
strict_variables: true

View File

@@ -1,3 +0,0 @@
framework:
validation:
not_compromised_password: false

View File

@@ -1,2 +0,0 @@
webpack_encore:
strict_mode: false

View File

@@ -1,7 +0,0 @@
framework:
default_locale: '%env(resolve:LOCALE)%'
translator:
default_path: '%kernel.project_dir%/translations'
fallbacks: [ '%env(resolve:LOCALE)%' ]

View File

@@ -1,17 +0,0 @@
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
#
# While waiting for the upgrade, we get the form theme file
# (https://github.com/symfony/symfony/tree/5.4/src/Symfony/Bridge/Twig/Resources/views/Form),
# put it in ChillMainBundle/Resources/views/Form/bootstrap5/
# and adapt it lightly.
#
form_themes: ['@ChillMain/Form/bootstrap5/bootstrap_5_horizontal_layout.html.twig']
#form_themes: ['bootstrap_5_horizontal_layout.html.twig']

View File

@@ -1,8 +0,0 @@
framework:
validation:
email_validation_mode: html5
# Enables validator auto-mapping support.
# For instance, basic validation constraints will be inferred from Doctrine's metadata.
#auto_mapping:
# App\Entity\: []

View File

@@ -1,33 +0,0 @@
---
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
# link_attributes:
#
# If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials')
# crossorigin: 'anonymous'
# Preload all rendered script and link tags automatically via the HTTP/2 Link header
# preload: true
# Throw an exception if the entrypoints.json file is missing or an entry is missing from the data
# strict_mode: false
# 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

View File

@@ -1,2 +0,0 @@
framework:
workflows: null