64 Commits

Author SHA1 Message Date
f2945e01de issue-39 : code quality, typage manquant
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
2024-09-24 11:34:29 +02:00
a1049a55a2 issue-39 : close cursor pour requête password
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
2024-09-24 10:32:05 +02:00
085533b299 chore (fetch datas) #39 : fermeture connexion sql après login$
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
Cadoles/hydra-sql/pipeline/head This commit is unstable
2024-09-23 17:02:01 +02:00
5bfd8991ee update symfony-container ref
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
2024-07-25 10:26:33 +02:00
18c0edbe5b Merge pull request 'feat : Ajout expression de réecriture du subject paramétrable' (#38) from rewrite_sub_expression into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit was not built
Reviewed-on: #38
2024-07-25 10:25:10 +02:00
fa77278c55 Fix : retrait de l'expression dans la config d'exemple
Some checks reported warnings
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2024-07-25 09:48:20 +02:00
daa5eaaa63 feat : Ajout expression de réecriture du subject paramétrable
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2024-07-24 16:41:22 +02:00
769e7ed59e Merge pull request 'fix: vérification du mdp en cas de mdp non défini' (#37) from issue-mse-3699 into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #37
Reviewed-by: Matthieu Lamalle <mlamalle@cadoles.com>
2024-06-06 13:43:13 +02:00
abe212c7ad fix: vérification du mdp en cas de mdp non défini
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2024-06-06 10:36:21 +02:00
890c44da0c Merge pull request 'chore (multi lanque) #35: correction twig yaml pour langues acceptées' (#36) from issue-35 into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #36
2024-05-21 10:50:19 +02:00
4465d0097e chore (multi lanque) #35: correction twig yaml pour langues acceptées
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2024-05-17 11:32:51 +02:00
f9d7e94420 fix: update symfony-containers ref
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
2024-04-29 14:16:47 +02:00
e03312be7d update symofny-containers
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
2024-04-29 11:47:26 +02:00
69f0a607a3 Merge pull request 'complément logs et exceptions' (#20) from issue-19 into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #20
2024-04-29 11:33:16 +02:00
51c92a0dba feat (gestion exception) #19: modification fetchPassword
Some checks reported warnings
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2024-04-29 11:09:58 +02:00
0791727694 feat (gestion exceptions) #19: traitement retour: typage, un seul message pour erreur login ou mdp
Some checks reported warnings
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2024-04-29 10:44:38 +02:00
3e45119684 issue-19: séparation des exceptions pour éviter les erreurs génériques, message personalisé par type d'erreur 2024-04-29 10:08:41 +02:00
5aacd981b4 issue-19: ajout de logs des exceptions PDOExceptions 2024-04-29 10:07:44 +02:00
fc4cecf106 Merge pull request 'Mise à jour des traductions' (#34) from issue-33 into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #34
Reviewed-by: Matthieu Lamalle <mlamalle@cadoles.com>
2024-04-25 11:27:23 +02:00
d26920695f Merge pull request 'Vérification challenge dans la session #31' (#32) from issue-31 into develop
Some checks reported errors
Cadoles/hydra-sql/pipeline/head Something is wrong with the build of this commit
Reviewed-on: #32
Reviewed-by: Matthieu Lamalle <mlamalle@cadoles.com>
2024-04-25 11:27:00 +02:00
fc348943c8 feat (compose): maj des volumes de docker-compose
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2024-04-23 12:06:51 +02:00
afd5349a7c chore (translations) : Suppression des fichiers traduction yaml 2024-04-23 12:06:06 +02:00
562c7cb7b7 fix (translations): Ajout des traductions manquantes 2024-04-23 12:05:40 +02:00
bcc91a17b4 fix (oidc timeout) #31: ajout d'une règle de redirection en cas de donnée de session perdue
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2024-04-18 17:13:42 +02:00
cd888d2080 chore (images) #31: maj droits et env 2024-04-18 17:12:28 +02:00
0cdb4c3a36 chore (composer update) #31: maj composer update 2024-04-18 17:11:23 +02:00
fc87b24c4e Merge pull request 'chore(caddy): passage à caddy' (#30) from cmsassot-caddy into develop
All checks were successful
Cadoles/hydra-sql/pipeline/head This commit looks good
Reviewed-on: #30
Reviewed-by: Matthieu Lamalle <mlamalle@cadoles.com>
2024-04-02 09:53:55 +02:00
d1847289bd feat(Dockefile): modification ref tag
All checks were successful
Cadoles/hydra-sql/pipeline/pr-develop This commit looks good
2024-03-29 11:20:28 +01:00
d5718e0a39 feat(node): updated depencies
Some checks reported warnings
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2024-03-29 09:44:38 +01:00
8cde31fc9c chore(caddy): passage à caddy
Some checks reported warnings
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2024-03-28 11:13:41 +01:00
9420354ec0 Merge pull request 'ajout url_link pour personnalisation theme' (#29) from url_link into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #29
2024-01-16 11:46:33 +01:00
e320d288cc ajout url_link pour personnalisation theme
Some checks are pending
Cadoles/hydra-sql/pipeline/head Build started...
Cadoles/hydra-sql/pipeline/pr-develop Build started...
2024-01-16 11:45:59 +01:00
740a7569e4 Merge pull request 'issue-21: actualisation de l'environnement de dev et maj des dépendances' (#27) from issue-21 into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #27
2023-12-14 11:07:39 +01:00
6ec21e4677 maj gitignore
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
2023-12-14 11:07:16 +01:00
3be77eabf5 maj readme et correction env var
Some checks reported warnings
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2023-12-14 10:57:24 +01:00
b5de7ee873 correction phpstan
Some checks reported warnings
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2023-12-14 10:25:22 +01:00
341a1ecd87 issue-21: actualisation de l'env de dev et maj dépendances
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2023-12-13 15:52:43 +01:00
72e912facb Merge pull request 'Maj env et doc' (#26) from redis-sentinel into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #26
2023-12-12 08:48:57 +01:00
abb1adecb7 Maj env et doc
Some checks are pending
Cadoles/hydra-sql/pipeline/head Build started...
Cadoles/hydra-sql/pipeline/pr-develop Build started...
2023-12-12 08:47:41 +01:00
cc03fd808c Merge pull request 'Utilisation des symfony-containers, et publication sur reg.cadoles' (#25) from tech into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #25
2023-12-11 14:50:20 +01:00
56373b7725 feat: keep up with technical debt
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2023-12-11 14:41:20 +01:00
c7d1fb4ef3 feat: keep up with technical recommandations 2023-12-11 14:33:28 +01:00
3b4e0762c2 Merge pull request 'Ajout health path' (#23) from health into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #23
2023-12-11 14:18:47 +01:00
df59f29fc2 ajout commentaire
Some checks reported warnings
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2023-12-11 14:13:35 +01:00
47917abafb typo
Some checks reported warnings
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2023-12-11 14:07:40 +01:00
d2925fbd49 Ajout health path
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2023-12-11 13:57:15 +01:00
ba63c271f9 Merge pull request 'issue-12: implémentation redis pour la gestion des session' (#13) from issue-12 into develop
All checks were successful
Cadoles/hydra-sql/pipeline/head This commit looks good
Reviewed-on: #13
2023-06-14 16:08:34 +02:00
a83e8d07ef issue-12: implémentation redis pour la gestion des session
All checks were successful
Cadoles/hydra-sql/pipeline/pr-develop This commit looks good
Cadoles/hydra-sql/pipeline/head This commit looks good
2023-06-12 15:26:56 +02:00
8d52721172 Merge pull request 'fix verify password methode ssha' (#11) from themeConfig into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #11
2023-01-11 10:32:41 +01:00
39829ca6a1 fix verify password methode ssha
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
Cadoles/hydra-sql/pipeline/head This commit looks good
2023-01-11 10:30:24 +01:00
05a3ddd7cd Merge pull request 'maj manifest' (#10) from themeConfig into develop
All checks were successful
Cadoles/hydra-sql/pipeline/head This commit looks good
Reviewed-on: #10
2023-01-10 17:04:05 +01:00
4b360cc2a0 maj manifest
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
Cadoles/hydra-sql/pipeline/head This commit looks good
2023-01-10 17:03:00 +01:00
82b40aec8a Merge pull request 'modification des assets pour theme' (#9) from themeConfig into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #9
2023-01-10 15:26:24 +01:00
744b3c3c06 modification des assets pour theme
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
Cadoles/hydra-sql/pipeline/head This commit looks good
2023-01-10 15:24:53 +01:00
d7ada479c4 Merge pull request 'prise en compte du cookie_path' (#8) from issue-cookie into develop
All checks were successful
Cadoles/hydra-sql/pipeline/head This commit looks good
Reviewed-on: #8
2023-01-09 15:10:17 +01:00
df73cede0f prise en compte du cookie_path
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
Cadoles/hydra-sql/pipeline/head This commit looks good
2023-01-09 15:06:49 +01:00
b9648231ba Merge pull request 'ajout d'une methode spécifique à ssha' (#7) from method-ssha into develop
All checks were successful
Cadoles/hydra-sql/pipeline/head This commit looks good
Reviewed-on: #7
2023-01-06 17:07:42 +01:00
f19d68ae93 ajout d'une methode spécifique à ssha
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
Cadoles/hydra-sql/pipeline/head This commit looks good
2023-01-06 17:06:29 +01:00
437a40e309 Merge pull request 'modification de l'authenticator pour former l'url de login en comprenant le baseUrl' (#6) from loginForm into develop
All checks were successful
Cadoles/hydra-sql/pipeline/head This commit looks good
Reviewed-on: #6
2023-01-06 15:27:55 +01:00
e5a27850c3 modification de l'authenticator pour former l'url de login en comprenant le baseUrl
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
Cadoles/hydra-sql/pipeline/head This commit looks good
2023-01-06 15:26:53 +01:00
0996ce6402 Merge pull request 'baseUrl: utilisation baseUrl en cas de failure' (#5) from baseUrl2 into develop
All checks were successful
Cadoles/hydra-sql/pipeline/head This commit looks good
Reviewed-on: #5
2023-01-06 14:32:32 +01:00
9cd3190b53 baseUrl: utilisation baseUrl en cas de failure
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
Cadoles/hydra-sql/pipeline/head This commit looks good
2023-01-06 14:31:43 +01:00
597485586c Merge pull request 'baseUrl: modification pour la construction de l'url après acces, utilsation de baseUrl' (#4) from baseUrl into develop
All checks were successful
Cadoles/hydra-sql/pipeline/head This commit looks good
Reviewed-on: #4
2023-01-06 14:05:19 +01:00
a21bff82bc baseUrl: modification pour la construction de l'url après acces, utilsation de baseUrl
All checks were successful
Cadoles/hydra-sql/pipeline/pr-develop This commit looks good
Cadoles/hydra-sql/pipeline/head This commit looks good
2023-01-06 14:02:20 +01:00
107 changed files with 3622 additions and 15150 deletions

View File

@ -1 +0,0 @@
Deny from all

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
Deny from all

14
.dockerignore Normal file
View File

@ -0,0 +1,14 @@
.env.local
.env.local.php
.env.*.local
config/secrets/prod/prod.decrypt.private.php
public/bundles/
var/
vendor/
supervisord.log
supervisord.pid
.composer/
.vscode
composer.phar
/tools
/.trivy

5
.env
View File

@ -16,7 +16,7 @@
###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=406ccaa0c76a451fdcc2307ea146cbef
###< symfony/framework-bundle ###
URL_LINK="http://localhost"
# configuration bdd
DSN_REMOTE_DATABASE="pgsql:host='postgres';port=5432;dbname=lasql"
@ -30,7 +30,7 @@ BASE_URL='http://localhost:8080'
HYDRA_ADMIN_BASE_URL='http://hydra:4445'
APP_LOCALES="fr,en"
SECURITY_PATTERN=
HASH_ALGO_LEGACY="sha256"
HASH_ALGO_LEGACY="sha256,ssha"
###> symfony/lock ###
# Choose one of the stores below
# postgresql+advisory://db_user:db_password@localhost/db_name
@ -40,3 +40,4 @@ LOCK_DSN=flock
###> sentry/sentry-symfony ###
SENTRY_DSN=
###< sentry/sentry-symfony ###
REDIS_DSN=redis://redis:6379

37
.gitignore vendored
View File

@ -4,18 +4,37 @@
/config/secrets/prod/prod.decrypt.private.php
/public/bundles/
/var/
/vendor
/tools/php-cs-fixer/vendor
/node_modules/
npm-debug.log
yarn-error.log
supervisord.log
supervisord.pid
composer.phar
/.vscode
/.cache
/.config
/.npm
/.local
/.bash_history
/tools
/.trivy
.mktools/
###> symfony/framework-bundle ###
/.env.local
/.env.local.php
/.env.*.local
/config/secrets/prod/prod.decrypt.private.php
/public/bundles/
/var/
/vendor/
###< symfony/framework-bundle ###
###> symfony/webpack-encore-bundle ###
/node_modules/
/public/build/
npm-debug.log
yarn-error.log
/.vscode
/.cache/
/.config
/.npm
/.local
/supervisord.log
/supervisord.pid
.cache
###< symfony/webpack-encore-bundle ###

View File

@ -1 +0,0 @@
Deny from all

View File

@ -1,2 +0,0 @@
0edbcb2d5794fb8d3cf2402f19f25438805a970f {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/npm","integrity":"sha512-1TJYoof98S3R0ahPa565wn2XsDI+CaLbvwzx88tgsZ5DTcOmelEBX2A802NyU1UWsVXXmvHWLnEKIvBl6zWMVg==","time":1670943539811,"size":2046874,"metadata":{"time":1670943539263,"url":"https://registry.npmjs.org/npm","reqHeaders":{"accept":"application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*"},"resHeaders":{"cache-control":"public, max-age=300","content-type":"application/vnd.npm.install-v1+json","date":"Tue, 13 Dec 2022 14:58:59 GMT","etag":"\"3607fbc1a9bba44efd5bd54b34a79dd5\"","last-modified":"Wed, 07 Dec 2022 23:13:12 GMT","vary":"accept-encoding, accept"},"options":{"compress":true}}}

17
.trivyignore.yaml Normal file
View File

@ -0,0 +1,17 @@
vulnerabilities:
- id: CVE-2023-39325
paths:
- usr/local/bin/gomplate
statement: Not concerned
- id: CVE-2023-3978
paths:
- usr/local/bin/gomplate
statement: Not concerned
- id: CVE-2023-44487
paths:
- usr/local/bin/gomplate
statement: Not concerned
- id: GHSA-m425-mq94-257g
paths:
- usr/local/bin/gomplate
statement: Not concerned

11
.vscode/settings.json vendored
View File

@ -1,11 +0,0 @@
{
"git.ignoreLimitWarning": true,
"php-cs-fixer.executable": "tools/php-cs-fixer/vendor/bin/php-cs-fixer",
"php-cs-fixer.configFile": "tools/php-cs-fixer/.php-cs-fixer.dist.php",
"symfony-vscode.fileWatchingPatterns": [
"yml",
"yaml",
"xml"
]
}

23
Jenkinsfile vendored
View File

@ -4,4 +4,25 @@
// Utilisation du pipeline partagé pour les applications Symfony de Cadoles
// Le nom de l'image Docker passée en paramètre vous permet de préciser l'environnement de test
// de votre application Symfony
symfonyAppPipeline("ubuntu:22.04")
symfonyAppPipeline('ubuntu:22.04', [
'hooks': [
// Run docker image build, verification and publication stages
'postSymfonyAppPipeline': {
boolean isRelease = ["develop", "staging", "master"].contains(env.BRANCH_NAME)
stage('Build and publish hydra-sql standalone image') {
container.buildAndPublishImage([
'imageName': 'reg.cadoles.com/cadoles/hydra-sql-standalone',
'dockerfile': './misc/images/hydra-sql-standalone/Dockerfile',
'dryRun': !isRelease
])
}
stage('Build and publish hydra-sql base image') {
container.buildAndPublishImage([
'imageName': 'reg.cadoles.com/cadoles/hydra-sql-base',
'dockerfile': './misc/images/hydra-sql-base/Dockerfile',
'dryRun': !isRelease
])
}
}
]
])

View File

@ -1,46 +1,40 @@
CI_COMPOSE=FIXUID=$(shell id -u) FIXGID=$(shell id -g) docker-compose -f docker-compose.yml
HYDRA_SQL_SHELL_USER ?= www-data:
DOCKER_CMD ?=
DOCKER_IMAGE_NAME ?= login-app-sql_hydra-sql
up:
FIXUID=$(shell id -u) FIXGID=$(shell id -g) docker-compose up --build
down:
docker-compose down -v
IMAGE_REPO ?= reg.cadoles.com/cadoles
IMAGES_DIR := misc/images
IMAGES := $(foreach file, $(wildcard $(IMAGES_DIR)/*), $(basename $(notdir $(file))))
purge:
docker-compose down -v --remove-orphans --rmi local
TRIVY_ARGS ?=
hydra-sql-shell:
$(CI_COMPOSE) exec \
-u "$(HYDRA_SQL_SHELL_USER)" \
hydra-sql \
/bin/bash
build-image: $(foreach image, $(IMAGES), build-image-$(image))
build-image-%:
docker build \
-t "${IMAGE_REPO}/$*:latest" \
-f ${IMAGES_DIR}/$*/Dockerfile \
.
APP_LOCALES ?= fr,en
HYDRA_ADMIN_BASE_URL ?= http://hydra:4445
TRUSTED_PROXIES ?= 127.0.0.1,REMOTE_ADDR,localhost
ISSUER_URL ?= http://localhost:8000
BASE_URL ?= http://localhost:8080
DB_USER ?= lasql
DB_PASSWORD ?= lasql
DEFAULT_LOCALE ?= fr
BDD ?= postgres
DSN_REMOTE_DATABASE=mysql:host=mariadb;port=3306;dbname=lasql
scan-image: $(foreach image, $(IMAGES), scan-image-$(image))
up-mysql:
docker run \
-it --rm \
-p 8080:80 \
-e APP_LOCALES=$(APP_LOCALES) \
-e HYDRA_ADMIN_BASE_URL=$(HYDRA_ADMIN_BASE_URL) \
-e TRUSTED_PROXIES=$(TRUSTED_PROXIES) \
-e ISSUER_URL=$(ISSUER_URL) \
-e BASE_URL=$(BASE_URL) \
-e DB_USER=$(DB_USER) \
-e DB_PASSWORD=$(DB_PASSWORD) \
-e DEFAULT_LOCALE=$(DEFAULT_LOCALE) \
-e DSN_REMOTE_DATABASE=$(DSN_REMOTE_DATABASE) \
$(DOCKER_IMAGE_NAME):latest \
$(DOCKER_CMD)
scan-image-%: tools/trivy/bin/trivy
mkdir -p .trivy/.cache
tools/trivy/bin/trivy --cache-dir .trivy/.cache --ignorefile .trivyignore.yaml image $(TRIVY_ARGS) $(IMAGE_REPO)/$*:latest
release-image: $(foreach image, $(IMAGES), release-image-$(image))
release-image-%: .mktools
@[ ! -z "$(MKT_PROJECT_VERSION)" ] || ( echo "Just downloaded mktools. Please re-run command."; exit 1 )
docker tag "${IMAGE_REPO}/$*:latest" "${IMAGE_REPO}/$*:$(MKT_PROJECT_VERSION)"
docker tag "${IMAGE_REPO}/$*:latest" "${IMAGE_REPO}/$*:$(MKT_PROJECT_SHORT_VERSION)"
docker push "${IMAGE_REPO}/$*:$(MKT_PROJECT_VERSION)"
docker push "${IMAGE_REPO}/$*:$(MKT_PROJECT_SHORT_VERSION)"
docker push "${IMAGE_REPO}/$*:latest"
tools/trivy/bin/trivy:
mkdir -p tools/trivy/bin
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b ./tools/trivy/bin v0.47.0
.mktools:
rm -rf .mktools
curl -q https://forge.cadoles.com/Cadoles/mktools/raw/branch/master/install.sh | TASKS="version" $(SHELL)
-include .mktools/*.mk

View File

@ -8,12 +8,14 @@
"ext-ctype": "*",
"ext-iconv": "*",
"doctrine/annotations": "^1.13",
"predis/predis": "^2.1",
"sentry/sentry-symfony": "^4.5",
"symfony/apache-pack": "^1.0",
"symfony/asset": "5.4.*",
"symfony/console": "5.4.*",
"symfony/dependency-injection": "5.4.*",
"symfony/dotenv": "5.4.*",
"symfony/expression-language": "5.4.*",
"symfony/flex": "^1.17|^2",
"symfony/form": "5.4.*",
"symfony/framework-bundle": "5.4.*",
@ -32,7 +34,8 @@
"allow-plugins": {
"composer/package-versions-deprecated": true,
"symfony/flex": true,
"symfony/runtime": true
"symfony/runtime": true,
"php-http/discovery": true
},
"optimize-autoloader": true,
"preferred-install": {

1418
composer.lock generated
View File

@ -4,27 +4,27 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "caf75620d5f1d6c42561a31c9ccf2769",
"content-hash": "7d46fa52cba3dcb28f7d339d548030e9",
"packages": [
{
"name": "clue/stream-filter",
"version": "v1.6.0",
"version": "v1.7.0",
"source": {
"type": "git",
"url": "https://github.com/clue/stream-filter.git",
"reference": "d6169430c7731d8509da7aecd0af756a5747b78e"
"reference": "049509fef80032cb3f051595029ab75b49a3c2f7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e",
"reference": "d6169430c7731d8509da7aecd0af756a5747b78e",
"url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7",
"reference": "049509fef80032cb3f051595029ab75b49a3c2f7",
"shasum": ""
},
"require": {
"php": ">=5.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
@ -46,7 +46,7 @@
}
],
"description": "A simple and modern approach to stream filtering in PHP",
"homepage": "https://github.com/clue/php-stream-filter",
"homepage": "https://github.com/clue/stream-filter",
"keywords": [
"bucket brigade",
"callback",
@ -58,7 +58,7 @@
],
"support": {
"issues": "https://github.com/clue/stream-filter/issues",
"source": "https://github.com/clue/stream-filter/tree/v1.6.0"
"source": "https://github.com/clue/stream-filter/tree/v1.7.0"
},
"funding": [
{
@ -70,20 +70,20 @@
"type": "github"
}
],
"time": "2022-02-21T13:15:14+00:00"
"time": "2023-12-20T15:40:13+00:00"
},
{
"name": "doctrine/annotations",
"version": "1.14.1",
"version": "1.14.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/annotations.git",
"reference": "9e034d7a70032d422169f27d8759e8d84abb4f51"
"reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/9e034d7a70032d422169f27d8759e8d84abb4f51",
"reference": "9e034d7a70032d422169f27d8759e8d84abb4f51",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
"reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
"shasum": ""
},
"require": {
@ -144,31 +144,35 @@
],
"support": {
"issues": "https://github.com/doctrine/annotations/issues",
"source": "https://github.com/doctrine/annotations/tree/1.14.1"
"source": "https://github.com/doctrine/annotations/tree/1.14.3"
},
"time": "2022-12-12T12:46:12+00:00"
"time": "2023-02-01T09:20:38+00:00"
},
{
"name": "doctrine/deprecations",
"version": "v1.0.0",
"version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
"reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de"
"reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
"reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
"reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
"shasum": ""
},
"require": {
"php": "^7.1|^8.0"
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9",
"phpunit/phpunit": "^7.5|^8.5|^9.5",
"psr/log": "^1|^2|^3"
"phpstan/phpstan": "1.4.10 || 1.10.15",
"phpstan/phpstan-phpunit": "^1.0",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psalm/plugin-phpunit": "0.18.4",
"psr/log": "^1 || ^2 || ^3",
"vimeo/psalm": "4.30.0 || 5.12.0"
},
"suggest": {
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
@ -187,22 +191,22 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
"source": "https://github.com/doctrine/deprecations/tree/v1.0.0"
"source": "https://github.com/doctrine/deprecations/tree/1.1.3"
},
"time": "2022-05-02T15:47:09+00:00"
"time": "2024-01-30T19:34:25+00:00"
},
{
"name": "doctrine/lexer",
"version": "2.1.0",
"version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
"reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
"reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6",
"reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6",
"shasum": ""
},
"require": {
@ -210,11 +214,11 @@
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9 || ^10",
"doctrine/coding-standard": "^9 || ^12",
"phpstan/phpstan": "^1.3",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.6",
"psalm/plugin-phpunit": "^0.18.3",
"vimeo/psalm": "^4.11 || ^5.0"
"vimeo/psalm": "^4.11 || ^5.21"
},
"type": "library",
"autoload": {
@ -251,7 +255,7 @@
],
"support": {
"issues": "https://github.com/doctrine/lexer/issues",
"source": "https://github.com/doctrine/lexer/tree/2.1.0"
"source": "https://github.com/doctrine/lexer/tree/2.1.1"
},
"funding": [
{
@ -267,38 +271,37 @@
"type": "tidelift"
}
],
"time": "2022-12-14T08:49:07+00:00"
"time": "2024-02-05T11:35:39+00:00"
},
{
"name": "guzzlehttp/promises",
"version": "1.5.2",
"version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "b94b2807d85443f9719887892882d0329d1e2598"
"reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598",
"reference": "b94b2807d85443f9719887892882d0329d1e2598",
"url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8",
"reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8",
"shasum": ""
},
"require": {
"php": ">=5.5"
"php": "^7.2.5 || ^8.0"
},
"require-dev": {
"symfony/phpunit-bridge": "^4.4 || ^5.1"
"bamarni/composer-bin-plugin": "^1.8.2",
"phpunit/phpunit": "^8.5.39 || ^9.6.20"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.5-dev"
"bamarni-bin": {
"bin-links": true,
"forward-command": false
}
},
"autoload": {
"files": [
"src/functions_include.php"
],
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
}
@ -335,7 +338,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/1.5.2"
"source": "https://github.com/guzzle/promises/tree/2.0.3"
},
"funding": [
{
@ -351,26 +354,26 @@
"type": "tidelift"
}
],
"time": "2022-08-28T14:55:35+00:00"
"time": "2024-07-18T10:29:17+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "2.4.3",
"version": "2.7.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "67c26b443f348a51926030c83481b85718457d3d"
"reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
"reference": "67c26b443f348a51926030c83481b85718457d3d",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
"reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.0",
"psr/http-message": "^1.1 || ^2.0",
"ralouphie/getallheaders": "^3.0"
},
"provide": {
@ -378,9 +381,9 @@
"psr/http-message-implementation": "1.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.1",
"http-interop/http-factory-tests": "^0.9",
"phpunit/phpunit": "^8.5.29 || ^9.5.23"
"bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "0.9.0",
"phpunit/phpunit": "^8.5.39 || ^9.6.20"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@ -390,9 +393,6 @@
"bamarni-bin": {
"bin-links": true,
"forward-command": false
},
"branch-alias": {
"dev-master": "2.4-dev"
}
},
"autoload": {
@ -454,7 +454,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.4.3"
"source": "https://github.com/guzzle/psr7/tree/2.7.0"
},
"funding": [
{
@ -470,7 +470,7 @@
"type": "tidelift"
}
],
"time": "2022-10-26T14:07:24+00:00"
"time": "2024-07-18T11:15:46+00:00"
},
{
"name": "http-interop/http-factory-guzzle",
@ -532,16 +532,16 @@
},
{
"name": "jean85/pretty-package-versions",
"version": "2.0.5",
"version": "2.0.6",
"source": {
"type": "git",
"url": "https://github.com/Jean85/pretty-package-versions.git",
"reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af"
"reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af",
"reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af",
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4",
"reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4",
"shasum": ""
},
"require": {
@ -549,9 +549,9 @@
"php": "^7.1|^8.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.17",
"friendsofphp/php-cs-fixer": "^3.2",
"jean85/composer-provided-replaced-stub-package": "^1.0",
"phpstan/phpstan": "^0.12.66",
"phpstan/phpstan": "^1.4",
"phpunit/phpunit": "^7.5|^8.5|^9.4",
"vimeo/psalm": "^4.3"
},
@ -585,33 +585,32 @@
],
"support": {
"issues": "https://github.com/Jean85/pretty-package-versions/issues",
"source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.5"
"source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6"
},
"time": "2021-10-08T21:21:46+00:00"
"time": "2024-03-08T09:58:59+00:00"
},
{
"name": "php-http/client-common",
"version": "2.6.0",
"version": "2.7.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/client-common.git",
"reference": "45db684cd4e186dcdc2b9c06b22970fe123796c0"
"reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/client-common/zipball/45db684cd4e186dcdc2b9c06b22970fe123796c0",
"reference": "45db684cd4e186dcdc2b9c06b22970fe123796c0",
"url": "https://api.github.com/repos/php-http/client-common/zipball/1e19c059b0e4d5f717bf5d524d616165aeab0612",
"reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0",
"php-http/httplug": "^2.0",
"php-http/message": "^1.6",
"php-http/message-factory": "^1.0",
"psr/http-client": "^1.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.0",
"symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0",
"psr/http-message": "^1.0 || ^2.0",
"symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0",
"symfony/polyfill-php80": "^1.17"
},
"require-dev": {
@ -620,7 +619,7 @@
"nyholm/psr7": "^1.2",
"phpspec/phpspec": "^5.1 || ^6.3 || ^7.1",
"phpspec/prophecy": "^1.10.2",
"phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3"
"phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7"
},
"suggest": {
"ext-json": "To detect JSON responses with the ContentTypePlugin",
@ -630,11 +629,6 @@
"php-http/stopwatch-plugin": "Symfony Stopwatch plugin"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3.x-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Client\\Common\\": "src/"
@ -660,49 +654,60 @@
],
"support": {
"issues": "https://github.com/php-http/client-common/issues",
"source": "https://github.com/php-http/client-common/tree/2.6.0"
"source": "https://github.com/php-http/client-common/tree/2.7.1"
},
"time": "2022-09-29T09:59:43+00:00"
"time": "2023-11-30T10:31:25+00:00"
},
{
"name": "php-http/discovery",
"version": "1.14.3",
"version": "1.19.4",
"source": {
"type": "git",
"url": "https://github.com/php-http/discovery.git",
"reference": "31d8ee46d0215108df16a8527c7438e96a4d7735"
"reference": "0700efda8d7526335132360167315fdab3aeb599"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/discovery/zipball/31d8ee46d0215108df16a8527c7438e96a4d7735",
"reference": "31d8ee46d0215108df16a8527c7438e96a4d7735",
"url": "https://api.github.com/repos/php-http/discovery/zipball/0700efda8d7526335132360167315fdab3aeb599",
"reference": "0700efda8d7526335132360167315fdab3aeb599",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0|^2.0",
"php": "^7.1 || ^8.0"
},
"conflict": {
"nyholm/psr7": "<1.0"
"nyholm/psr7": "<1.0",
"zendframework/zend-diactoros": "*"
},
"provide": {
"php-http/async-client-implementation": "*",
"php-http/client-implementation": "*",
"psr/http-client-implementation": "*",
"psr/http-factory-implementation": "*",
"psr/http-message-implementation": "*"
},
"require-dev": {
"composer/composer": "^1.0.2|^2.0",
"graham-campbell/phpspec-skip-example-extension": "^5.0",
"php-http/httplug": "^1.0 || ^2.0",
"php-http/message-factory": "^1.0",
"phpspec/phpspec": "^5.1 || ^6.1"
"phpspec/phpspec": "^5.1 || ^6.1 || ^7.3",
"sebastian/comparator": "^3.0.5 || ^4.0.8",
"symfony/phpunit-bridge": "^6.4.4 || ^7.0.1"
},
"suggest": {
"php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories"
},
"type": "library",
"type": "composer-plugin",
"extra": {
"branch-alias": {
"dev-master": "1.9-dev"
}
"class": "Http\\Discovery\\Composer\\Plugin",
"plugin-optional": true
},
"autoload": {
"psr-4": {
"Http\\Discovery\\": "src/"
}
},
"exclude-from-classmap": [
"src/Composer/Plugin.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@ -714,7 +719,7 @@
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Finds installed HTTPlug implementations and PSR-7 message factories",
"description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations",
"homepage": "http://php-http.org",
"keywords": [
"adapter",
@ -723,44 +728,40 @@
"factory",
"http",
"message",
"psr17",
"psr7"
],
"support": {
"issues": "https://github.com/php-http/discovery/issues",
"source": "https://github.com/php-http/discovery/tree/1.14.3"
"source": "https://github.com/php-http/discovery/tree/1.19.4"
},
"time": "2022-07-11T14:04:40+00:00"
"time": "2024-03-29T13:00:05+00:00"
},
{
"name": "php-http/httplug",
"version": "2.3.0",
"version": "2.4.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/httplug.git",
"reference": "f640739f80dfa1152533976e3c112477f69274eb"
"reference": "625ad742c360c8ac580fcc647a1541d29e257f67"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb",
"reference": "f640739f80dfa1152533976e3c112477f69274eb",
"url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67",
"reference": "625ad742c360c8ac580fcc647a1541d29e257f67",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0",
"php-http/promise": "^1.1",
"psr/http-client": "^1.0",
"psr/http-message": "^1.0"
"psr/http-message": "^1.0 || ^2.0"
},
"require-dev": {
"friends-of-phpspec/phpspec-code-coverage": "^4.1",
"phpspec/phpspec": "^5.1 || ^6.0"
"friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0",
"phpspec/phpspec": "^5.1 || ^6.0 || ^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.x-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Client\\": "src/"
@ -789,29 +790,28 @@
],
"support": {
"issues": "https://github.com/php-http/httplug/issues",
"source": "https://github.com/php-http/httplug/tree/2.3.0"
"source": "https://github.com/php-http/httplug/tree/2.4.0"
},
"time": "2022-02-21T09:52:22+00:00"
"time": "2023-04-14T15:10:03+00:00"
},
{
"name": "php-http/message",
"version": "1.13.0",
"version": "1.16.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/message.git",
"reference": "7886e647a30a966a1a8d1dad1845b71ca8678361"
"reference": "5997f3289332c699fa2545c427826272498a2088"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361",
"reference": "7886e647a30a966a1a8d1dad1845b71ca8678361",
"url": "https://api.github.com/repos/php-http/message/zipball/5997f3289332c699fa2545c427826272498a2088",
"reference": "5997f3289332c699fa2545c427826272498a2088",
"shasum": ""
},
"require": {
"clue/stream-filter": "^1.5",
"php": "^7.1 || ^8.0",
"php-http/message-factory": "^1.0.2",
"psr/http-message": "^1.0"
"php": "^7.2 || ^8.0",
"psr/http-message": "^1.1 || ^2.0"
},
"provide": {
"php-http/message-factory-implementation": "1.0"
@ -819,8 +819,9 @@
"require-dev": {
"ergebnis/composer-normalize": "^2.6",
"ext-zlib": "*",
"guzzlehttp/psr7": "^1.0",
"laminas/laminas-diactoros": "^2.0",
"guzzlehttp/psr7": "^1.0 || ^2.0",
"laminas/laminas-diactoros": "^2.0 || ^3.0",
"php-http/message-factory": "^1.0.2",
"phpspec/phpspec": "^5.1 || ^6.3 || ^7.1",
"slim/slim": "^3.0"
},
@ -831,11 +832,6 @@
"slim/slim": "Used with Slim Framework PSR-7 implementation"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.10-dev"
}
},
"autoload": {
"files": [
"src/filters.php"
@ -863,32 +859,32 @@
],
"support": {
"issues": "https://github.com/php-http/message/issues",
"source": "https://github.com/php-http/message/tree/1.13.0"
"source": "https://github.com/php-http/message/tree/1.16.1"
},
"time": "2022-02-11T13:41:14+00:00"
"time": "2024-03-07T13:22:09+00:00"
},
{
"name": "php-http/message-factory",
"version": "v1.0.2",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/message-factory.git",
"reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1"
"reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1",
"reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1",
"url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57",
"reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57",
"shasum": ""
},
"require": {
"php": ">=5.4",
"psr/http-message": "^1.0"
"psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
"dev-master": "1.x-dev"
}
},
"autoload": {
@ -917,37 +913,33 @@
],
"support": {
"issues": "https://github.com/php-http/message-factory/issues",
"source": "https://github.com/php-http/message-factory/tree/master"
"source": "https://github.com/php-http/message-factory/tree/1.1.0"
},
"time": "2015-12-19T14:08:53+00:00"
"abandoned": "psr/http-factory",
"time": "2023-04-14T14:16:17+00:00"
},
{
"name": "php-http/promise",
"version": "1.1.0",
"version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/promise.git",
"reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88"
"reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
"reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
"url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83",
"reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"friends-of-phpspec/phpspec-code-coverage": "^4.3.2",
"phpspec/phpspec": "^5.1.2 || ^6.2"
"friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3",
"phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Promise\\": "src/"
@ -974,9 +966,70 @@
],
"support": {
"issues": "https://github.com/php-http/promise/issues",
"source": "https://github.com/php-http/promise/tree/1.1.0"
"source": "https://github.com/php-http/promise/tree/1.3.1"
},
"time": "2020-07-07T09:29:14+00:00"
"time": "2024-03-15T13:55:21+00:00"
},
{
"name": "predis/predis",
"version": "v2.2.2",
"source": {
"type": "git",
"url": "https://github.com/predis/predis.git",
"reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/predis/predis/zipball/b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1",
"reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.3",
"phpstan/phpstan": "^1.9",
"phpunit/phpunit": "^8.0 || ~9.4.4"
},
"suggest": {
"ext-relay": "Faster connection with in-memory caching (>=0.6.2)"
},
"type": "library",
"autoload": {
"psr-4": {
"Predis\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Till Krüss",
"homepage": "https://till.im",
"role": "Maintainer"
}
],
"description": "A flexible and feature-complete Redis client for PHP.",
"homepage": "http://github.com/predis/predis",
"keywords": [
"nosql",
"predis",
"redis"
],
"support": {
"issues": "https://github.com/predis/predis/issues",
"source": "https://github.com/predis/predis/tree/v2.2.2"
},
"funding": [
{
"url": "https://github.com/sponsors/tillkruss",
"type": "github"
}
],
"time": "2023-09-13T16:42:03+00:00"
},
{
"name": "psr/cache",
@ -1127,21 +1180,21 @@
},
{
"name": "psr/http-client",
"version": "1.0.1",
"version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-client.git",
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
"shasum": ""
},
"require": {
"php": "^7.0 || ^8.0",
"psr/http-message": "^1.0"
"psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
"extra": {
@ -1161,7 +1214,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP clients",
@ -1173,27 +1226,27 @@
"psr-18"
],
"support": {
"source": "https://github.com/php-fig/http-client/tree/master"
"source": "https://github.com/php-fig/http-client"
},
"time": "2020-06-29T06:28:15+00:00"
"time": "2023-09-23T14:17:50+00:00"
},
{
"name": "psr/http-factory",
"version": "1.0.1",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-factory.git",
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
"reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
"reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
"shasum": ""
},
"require": {
"php": ">=7.0.0",
"psr/http-message": "^1.0"
"php": ">=7.1",
"psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
"extra": {
@ -1213,10 +1266,10 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interfaces for PSR-7 HTTP message factories",
"description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
"keywords": [
"factory",
"http",
@ -1228,31 +1281,31 @@
"response"
],
"support": {
"source": "https://github.com/php-fig/http-factory/tree/master"
"source": "https://github.com/php-fig/http-factory"
},
"time": "2019-04-30T12:38:16+00:00"
"time": "2024-04-15T12:06:14+00:00"
},
{
"name": "psr/http-message",
"version": "1.0.1",
"version": "2.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
"php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
"dev-master": "2.0.x-dev"
}
},
"autoload": {
@ -1267,7 +1320,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
@ -1281,9 +1334,9 @@
"response"
],
"support": {
"source": "https://github.com/php-fig/http-message/tree/master"
"source": "https://github.com/php-fig/http-message/tree/2.0"
},
"time": "2016-08-06T14:39:51+00:00"
"time": "2023-04-04T09:54:51+00:00"
},
{
"name": "psr/log",
@ -1381,22 +1434,22 @@
},
{
"name": "sentry/sdk",
"version": "3.3.0",
"version": "3.6.0",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php-sdk.git",
"reference": "d0678fc7274dbb03046ed05cb24eb92945bedf8e"
"reference": "24c235ff2027401cbea099bf88689e1a1f197c7a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/d0678fc7274dbb03046ed05cb24eb92945bedf8e",
"reference": "d0678fc7274dbb03046ed05cb24eb92945bedf8e",
"url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/24c235ff2027401cbea099bf88689e1a1f197c7a",
"reference": "24c235ff2027401cbea099bf88689e1a1f197c7a",
"shasum": ""
},
"require": {
"http-interop/http-factory-guzzle": "^1.0",
"sentry/sentry": "^3.9",
"symfony/http-client": "^4.3|^5.0|^6.0"
"sentry/sentry": "^3.22",
"symfony/http-client": "^4.3|^5.0|^6.0|^7.0"
},
"type": "metapackage",
"notification-url": "https://packagist.org/downloads/",
@ -1422,7 +1475,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-php-sdk/issues",
"source": "https://github.com/getsentry/sentry-php-sdk/tree/3.3.0"
"source": "https://github.com/getsentry/sentry-php-sdk/tree/3.6.0"
},
"funding": [
{
@ -1434,38 +1487,38 @@
"type": "custom"
}
],
"time": "2022-10-11T09:05:00+00:00"
"time": "2023-12-04T10:49:33+00:00"
},
{
"name": "sentry/sentry",
"version": "3.12.0",
"version": "3.22.1",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php.git",
"reference": "4902f43640963ed45517fd7c1da7fdd5511bb304"
"reference": "8859631ba5ab15bc1af420b0eeed19ecc6c9d81d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/4902f43640963ed45517fd7c1da7fdd5511bb304",
"reference": "4902f43640963ed45517fd7c1da7fdd5511bb304",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/8859631ba5ab15bc1af420b0eeed19ecc6c9d81d",
"reference": "8859631ba5ab15bc1af420b0eeed19ecc6c9d81d",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-mbstring": "*",
"guzzlehttp/promises": "^1.4",
"guzzlehttp/psr7": "^1.8.4|^2.1.1",
"guzzlehttp/promises": "^1.5.3|^2.0",
"jean85/pretty-package-versions": "^1.5|^2.0.4",
"php": "^7.2|^8.0",
"php-http/async-client-implementation": "^1.0",
"php-http/client-common": "^1.5|^2.0",
"php-http/discovery": "^1.11",
"php-http/discovery": "^1.15",
"php-http/httplug": "^1.1|^2.0",
"php-http/message": "^1.5",
"php-http/message-factory": "^1.1",
"psr/http-factory": "^1.0",
"psr/http-message-implementation": "^1.0",
"psr/http-factory-implementation": "^1.0",
"psr/log": "^1.0|^2.0|^3.0",
"symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0",
"symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0|^7.0",
"symfony/polyfill-php80": "^1.17"
},
"conflict": {
@ -1474,6 +1527,7 @@
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.19|3.4.*",
"guzzlehttp/psr7": "^1.8.4|^2.1.1",
"http-interop/http-factory-guzzle": "^1.0",
"monolog/monolog": "^1.6|^2.0|^3.0",
"nikic/php-parser": "^4.10.3",
@ -1490,11 +1544,6 @@
"monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler."
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.12.x-dev"
}
},
"autoload": {
"files": [
"src/functions.php"
@ -1505,7 +1554,7 @@
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
"MIT"
],
"authors": [
{
@ -1526,7 +1575,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-php/issues",
"source": "https://github.com/getsentry/sentry-php/tree/3.12.0"
"source": "https://github.com/getsentry/sentry-php/tree/3.22.1"
},
"funding": [
{
@ -1538,62 +1587,61 @@
"type": "custom"
}
],
"time": "2022-11-22T10:57:08+00:00"
"time": "2023-11-13T11:47:28+00:00"
},
{
"name": "sentry/sentry-symfony",
"version": "4.5.0",
"version": "4.14.0",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-symfony.git",
"reference": "04e1f298a3a7ab477e09f4382189538473ad0a58"
"reference": "001c4cfd8fe93cbb00edaca903ffbfac28259170"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-symfony/zipball/04e1f298a3a7ab477e09f4382189538473ad0a58",
"reference": "04e1f298a3a7ab477e09f4382189538473ad0a58",
"url": "https://api.github.com/repos/getsentry/sentry-symfony/zipball/001c4cfd8fe93cbb00edaca903ffbfac28259170",
"reference": "001c4cfd8fe93cbb00edaca903ffbfac28259170",
"shasum": ""
},
"require": {
"guzzlehttp/psr7": "^1.7 || ^2.0",
"jean85/pretty-package-versions": "^1.5 || ^2.0",
"php": "^7.2||^8.0",
"php-http/discovery": "^1.11",
"sentry/sdk": "^3.3",
"sentry/sdk": "^3.6",
"sentry/sentry": "^3.22.1",
"symfony/cache-contracts": "^1.1||^2.4||^3.0",
"symfony/config": "^4.4.20||^5.0.11||^6.0",
"symfony/console": "^4.4.20||^5.0.11||^6.0",
"symfony/dependency-injection": "^4.4.20||^5.0.11||^6.0",
"symfony/event-dispatcher": "^4.4.20||^5.0.11||^6.0",
"symfony/http-kernel": "^4.4.20||^5.0.11||^6.0",
"symfony/config": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/console": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/dependency-injection": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/event-dispatcher": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/http-kernel": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/polyfill-php80": "^1.22",
"symfony/psr-http-message-bridge": "^1.2||^2.0",
"symfony/security-core": "^4.4.20||^5.0.11||^6.0"
"symfony/psr-http-message-bridge": "^1.2||^2.0||^6.4||^7.0",
"symfony/security-core": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/security-http": "^4.4.20||^5.0.11||^6.0||^7.0"
},
"require-dev": {
"doctrine/dbal": "^2.13||^3.0",
"doctrine/doctrine-bundle": "^1.12||^2.5",
"friendsofphp/php-cs-fixer": "^2.19||^3.6",
"jangregor/phpstan-prophecy": "^1.0",
"monolog/monolog": "^1.3||^2.0",
"phpspec/prophecy": "!=1.11.0",
"phpspec/prophecy-phpunit": "^1.1||^2.0",
"doctrine/dbal": "^2.13||^3.3||^4.0",
"doctrine/doctrine-bundle": "^2.6",
"friendsofphp/php-cs-fixer": "^2.19||^3.40",
"masterminds/html5": "^2.8",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^1.3",
"phpstan/phpstan-phpunit": "^1.0",
"phpstan/phpstan-symfony": "^1.0",
"phpunit/phpunit": "^8.5.14||^9.3.9",
"symfony/browser-kit": "^4.4.20||^5.0.11||^6.0",
"symfony/cache": "^4.4.20||^5.0.11||^6.0",
"symfony/dom-crawler": "^4.4.20||^5.0.11||^6.0",
"symfony/framework-bundle": "^4.4.20||^5.0.11||^6.0",
"symfony/http-client": "^4.4.20||^5.0.11||^6.0",
"symfony/messenger": "^4.4.20||^5.0.11||^6.0",
"symfony/browser-kit": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/cache": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/dom-crawler": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/framework-bundle": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/http-client": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/messenger": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/monolog-bundle": "^3.4",
"symfony/phpunit-bridge": "^5.2.6||^6.0",
"symfony/process": "^4.4.20||^5.0.11||^6.0",
"symfony/twig-bundle": "^4.4.20||^5.0.11||^6.0",
"symfony/yaml": "^4.4.20||^5.0.11||^6.0",
"vimeo/psalm": "^4.3"
"symfony/phpunit-bridge": "^5.2.6||^6.0||^7.0",
"symfony/process": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/twig-bundle": "^4.4.20||^5.0.11||^6.0||^7.0",
"symfony/yaml": "^4.4.20||^5.0.11||^6.0||^7.0",
"vimeo/psalm": "^4.3||^5.16.0"
},
"suggest": {
"doctrine/doctrine-bundle": "Allow distributed tracing of database queries using Sentry.",
@ -1604,7 +1652,6 @@
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "4.4.x-dev",
"releases/3.2.x": "3.2.x-dev",
"releases/2.x": "2.x-dev",
"releases/1.x": "1.x-dev"
@ -1620,7 +1667,7 @@
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
"MIT"
],
"authors": [
{
@ -1642,7 +1689,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-symfony/issues",
"source": "https://github.com/getsentry/sentry-symfony/tree/4.5.0"
"source": "https://github.com/getsentry/sentry-symfony/tree/4.14.0"
},
"funding": [
{
@ -1654,7 +1701,7 @@
"type": "custom"
}
],
"time": "2022-11-28T12:37:44+00:00"
"time": "2024-02-26T09:27:19+00:00"
},
{
"name": "symfony/apache-pack",
@ -1684,16 +1731,16 @@
},
{
"name": "symfony/asset",
"version": "v5.4.13",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/asset.git",
"reference": "9aa867206711cb6fcca51ef127ba52a018170be9"
"reference": "e5aa241b4914257164b39c3c2678b2c41b7671e3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/asset/zipball/9aa867206711cb6fcca51ef127ba52a018170be9",
"reference": "9aa867206711cb6fcca51ef127ba52a018170be9",
"url": "https://api.github.com/repos/symfony/asset/zipball/e5aa241b4914257164b39c3c2678b2c41b7671e3",
"reference": "e5aa241b4914257164b39c3c2678b2c41b7671e3",
"shasum": ""
},
"require": {
@ -1738,7 +1785,7 @@
"description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/asset/tree/v5.4.13"
"source": "https://github.com/symfony/asset/tree/v5.4.40"
},
"funding": [
{
@ -1754,20 +1801,20 @@
"type": "tidelift"
}
],
"time": "2022-08-31T08:17:19+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/cache",
"version": "v5.4.15",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
"reference": "60e87188abbacd29ccde44d69c5392a33e888e98"
"reference": "89005bc368ca02ed0433c592e4d27670d0844a66"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/60e87188abbacd29ccde44d69c5392a33e888e98",
"reference": "60e87188abbacd29ccde44d69c5392a33e888e98",
"url": "https://api.github.com/repos/symfony/cache/zipball/89005bc368ca02ed0433c592e4d27670d0844a66",
"reference": "89005bc368ca02ed0433c592e4d27670d0844a66",
"shasum": ""
},
"require": {
@ -1795,8 +1842,8 @@
"require-dev": {
"cache/integration-tests": "dev-master",
"doctrine/cache": "^1.6|^2.0",
"doctrine/dbal": "^2.13.1|^3.0",
"predis/predis": "^1.1",
"doctrine/dbal": "^2.13.1|^3|^4",
"predis/predis": "^1.1|^2.0",
"psr/simple-cache": "^1.0|^2.0",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
@ -1835,7 +1882,7 @@
"psr6"
],
"support": {
"source": "https://github.com/symfony/cache/tree/v5.4.15"
"source": "https://github.com/symfony/cache/tree/v5.4.40"
},
"funding": [
{
@ -1851,20 +1898,20 @@
"type": "tidelift"
}
],
"time": "2022-10-27T07:55:40+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/cache-contracts",
"version": "v2.5.2",
"version": "v2.5.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache-contracts.git",
"reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc"
"reference": "fee6db04d913094e2fb55ff8e7db5685a8134463"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc",
"reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc",
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/fee6db04d913094e2fb55ff8e7db5685a8134463",
"reference": "fee6db04d913094e2fb55ff8e7db5685a8134463",
"shasum": ""
},
"require": {
@ -1914,7 +1961,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/cache-contracts/tree/v2.5.2"
"source": "https://github.com/symfony/cache-contracts/tree/v2.5.3"
},
"funding": [
{
@ -1930,20 +1977,20 @@
"type": "tidelift"
}
],
"time": "2022-01-02T09:53:40+00:00"
"time": "2024-01-23T13:51:25+00:00"
},
{
"name": "symfony/config",
"version": "v5.4.11",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
"reference": "ec79e03125c1d2477e43dde8528535d90cc78379"
"reference": "d4e1db78421163b98dd9971d247fd0df4a57ee5e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/ec79e03125c1d2477e43dde8528535d90cc78379",
"reference": "ec79e03125c1d2477e43dde8528535d90cc78379",
"url": "https://api.github.com/repos/symfony/config/zipball/d4e1db78421163b98dd9971d247fd0df4a57ee5e",
"reference": "d4e1db78421163b98dd9971d247fd0df4a57ee5e",
"shasum": ""
},
"require": {
@ -1993,7 +2040,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/config/tree/v5.4.11"
"source": "https://github.com/symfony/config/tree/v5.4.40"
},
"funding": [
{
@ -2009,20 +2056,20 @@
"type": "tidelift"
}
],
"time": "2022-07-20T13:00:38+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/console",
"version": "v5.4.16",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "8e9b9c8dfb33af6057c94e1b44846bee700dc5ef"
"reference": "6473d441a913cb997123b59ff2dbe3d1cf9e11ba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/8e9b9c8dfb33af6057c94e1b44846bee700dc5ef",
"reference": "8e9b9c8dfb33af6057c94e1b44846bee700dc5ef",
"url": "https://api.github.com/repos/symfony/console/zipball/6473d441a913cb997123b59ff2dbe3d1cf9e11ba",
"reference": "6473d441a913cb997123b59ff2dbe3d1cf9e11ba",
"shasum": ""
},
"require": {
@ -2087,12 +2134,12 @@
"homepage": "https://symfony.com",
"keywords": [
"cli",
"command line",
"command-line",
"console",
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v5.4.16"
"source": "https://github.com/symfony/console/tree/v5.4.41"
},
"funding": [
{
@ -2108,20 +2155,20 @@
"type": "tidelift"
}
],
"time": "2022-11-25T14:09:27+00:00"
"time": "2024-06-28T07:48:55+00:00"
},
{
"name": "symfony/dependency-injection",
"version": "v5.4.16",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "a93e1863500940780fc1235f52d54397be2d14b3"
"reference": "408b33326496030c201b8051b003e9e8cdb2efc9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/a93e1863500940780fc1235f52d54397be2d14b3",
"reference": "a93e1863500940780fc1235f52d54397be2d14b3",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/408b33326496030c201b8051b003e9e8cdb2efc9",
"reference": "408b33326496030c201b8051b003e9e8cdb2efc9",
"shasum": ""
},
"require": {
@ -2181,7 +2228,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.16"
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.40"
},
"funding": [
{
@ -2197,20 +2244,20 @@
"type": "tidelift"
}
],
"time": "2022-11-25T07:33:13+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v3.2.0",
"version": "v3.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3"
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3",
"reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
"shasum": ""
},
"require": {
@ -2219,7 +2266,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.3-dev"
"dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
@ -2248,7 +2295,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0"
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
},
"funding": [
{
@ -2264,20 +2311,20 @@
"type": "tidelift"
}
],
"time": "2022-11-25T10:21:52+00:00"
"time": "2024-04-18T09:32:20+00:00"
},
{
"name": "symfony/dotenv",
"version": "v5.4.5",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
"reference": "83a2310904a4f5d4f42526227b5a578ac82232a9"
"reference": "3052dbf22f71e47f6ef7a5efa6aaedfe871ba35d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/83a2310904a4f5d4f42526227b5a578ac82232a9",
"reference": "83a2310904a4f5d4f42526227b5a578ac82232a9",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/3052dbf22f71e47f6ef7a5efa6aaedfe871ba35d",
"reference": "3052dbf22f71e47f6ef7a5efa6aaedfe871ba35d",
"shasum": ""
},
"require": {
@ -2319,7 +2366,7 @@
"environment"
],
"support": {
"source": "https://github.com/symfony/dotenv/tree/v5.4.5"
"source": "https://github.com/symfony/dotenv/tree/v5.4.40"
},
"funding": [
{
@ -2335,20 +2382,20 @@
"type": "tidelift"
}
],
"time": "2022-02-15T17:04:12+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/error-handler",
"version": "v5.4.15",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "539cf1428b8442303c6e876ad7bf5a7babd91091"
"reference": "c25da5cc2de4e6f96b3a0a2813050355a20dd0e1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/539cf1428b8442303c6e876ad7bf5a7babd91091",
"reference": "539cf1428b8442303c6e876ad7bf5a7babd91091",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/c25da5cc2de4e6f96b3a0a2813050355a20dd0e1",
"reference": "c25da5cc2de4e6f96b3a0a2813050355a20dd0e1",
"shasum": ""
},
"require": {
@ -2390,7 +2437,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/error-handler/tree/v5.4.15"
"source": "https://github.com/symfony/error-handler/tree/v5.4.41"
},
"funding": [
{
@ -2406,20 +2453,20 @@
"type": "tidelift"
}
],
"time": "2022-10-27T06:32:25+00:00"
"time": "2024-06-09T18:59:35+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v5.4.9",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc"
"reference": "a54e2a8a114065f31020d6a89ede83e34c3b27a4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc",
"reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a54e2a8a114065f31020d6a89ede83e34c3b27a4",
"reference": "a54e2a8a114065f31020d6a89ede83e34c3b27a4",
"shasum": ""
},
"require": {
@ -2475,7 +2522,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9"
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.40"
},
"funding": [
{
@ -2491,33 +2538,30 @@
"type": "tidelift"
}
],
"time": "2022-05-05T16:45:39+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
"version": "v3.2.0",
"version": "v3.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "0782b0b52a737a05b4383d0df35a474303cabdae"
"reference": "8f93aec25d41b72493c6ddff14e916177c9efc50"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae",
"reference": "0782b0b52a737a05b4383d0df35a474303cabdae",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50",
"reference": "8f93aec25d41b72493c6ddff14e916177c9efc50",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/event-dispatcher": "^1"
},
"suggest": {
"symfony/event-dispatcher-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.3-dev"
"dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
@ -2554,7 +2598,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0"
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0"
},
"funding": [
{
@ -2570,20 +2614,83 @@
"type": "tidelift"
}
],
"time": "2022-11-25T10:21:52+00:00"
"time": "2024-04-18T09:32:20+00:00"
},
{
"name": "symfony/filesystem",
"version": "v5.4.13",
"name": "symfony/expression-language",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "ac09569844a9109a5966b9438fc29113ce77cf51"
"url": "https://github.com/symfony/expression-language.git",
"reference": "77670d1e74086dc8d941a18f97097bbf988f2840"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/ac09569844a9109a5966b9438fc29113ce77cf51",
"reference": "ac09569844a9109a5966b9438fc29113ce77cf51",
"url": "https://api.github.com/repos/symfony/expression-language/zipball/77670d1e74086dc8d941a18f97097bbf988f2840",
"reference": "77670d1e74086dc8d941a18f97097bbf988f2840",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/service-contracts": "^1.1|^2|^3"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\ExpressionLanguage\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides an engine that can compile and evaluate expressions",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/expression-language/tree/v5.4.40"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/filesystem",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "6d29dd9340b372fa603f04e6df4dd76bb808591e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/6d29dd9340b372fa603f04e6df4dd76bb808591e",
"reference": "6d29dd9340b372fa603f04e6df4dd76bb808591e",
"shasum": ""
},
"require": {
@ -2592,6 +2699,9 @@
"symfony/polyfill-mbstring": "~1.8",
"symfony/polyfill-php80": "^1.16"
},
"require-dev": {
"symfony/process": "^5.4|^6.4"
},
"type": "library",
"autoload": {
"psr-4": {
@ -2618,7 +2728,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v5.4.13"
"source": "https://github.com/symfony/filesystem/tree/v5.4.41"
},
"funding": [
{
@ -2634,20 +2744,20 @@
"type": "tidelift"
}
],
"time": "2022-09-21T19:53:16+00:00"
"time": "2024-06-28T09:36:24+00:00"
},
{
"name": "symfony/finder",
"version": "v5.4.11",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c"
"reference": "f51cff4687547641c7d8180d74932ab40b2205ce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c",
"reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c",
"url": "https://api.github.com/repos/symfony/finder/zipball/f51cff4687547641c7d8180d74932ab40b2205ce",
"reference": "f51cff4687547641c7d8180d74932ab40b2205ce",
"shasum": ""
},
"require": {
@ -2681,7 +2791,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v5.4.11"
"source": "https://github.com/symfony/finder/tree/v5.4.40"
},
"funding": [
{
@ -2697,20 +2807,20 @@
"type": "tidelift"
}
],
"time": "2022-07-29T07:37:50+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/flex",
"version": "v2.2.3",
"version": "v2.4.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
"reference": "0763da1bdcce1d48c06778d48249905c26d34a72"
"reference": "b0a405f40614c9f584b489d54f91091817b0e26e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/flex/zipball/0763da1bdcce1d48c06778d48249905c26d34a72",
"reference": "0763da1bdcce1d48c06778d48249905c26d34a72",
"url": "https://api.github.com/repos/symfony/flex/zipball/b0a405f40614c9f584b489d54f91091817b0e26e",
"reference": "b0a405f40614c9f584b489d54f91091817b0e26e",
"shasum": ""
},
"require": {
@ -2746,7 +2856,7 @@
"description": "Composer plugin for Symfony",
"support": {
"issues": "https://github.com/symfony/flex/issues",
"source": "https://github.com/symfony/flex/tree/v2.2.3"
"source": "https://github.com/symfony/flex/tree/v2.4.5"
},
"funding": [
{
@ -2762,20 +2872,20 @@
"type": "tidelift"
}
],
"time": "2022-08-07T09:39:47+00:00"
"time": "2024-03-02T08:16:47+00:00"
},
{
"name": "symfony/form",
"version": "v5.4.16",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
"reference": "5d3790b31935deff2506b2687ae18b3cf8f50405"
"reference": "ff45013def0a3a692e84010095e8ee5fe9a9fa43"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/form/zipball/5d3790b31935deff2506b2687ae18b3cf8f50405",
"reference": "5d3790b31935deff2506b2687ae18b3cf8f50405",
"url": "https://api.github.com/repos/symfony/form/zipball/ff45013def0a3a692e84010095e8ee5fe9a9fa43",
"reference": "ff45013def0a3a692e84010095e8ee5fe9a9fa43",
"shasum": ""
},
"require": {
@ -2792,16 +2902,15 @@
"symfony/service-contracts": "^1.1|^2|^3"
},
"conflict": {
"phpunit/phpunit": "<5.4.3",
"symfony/console": "<4.4",
"symfony/dependency-injection": "<4.4",
"symfony/doctrine-bridge": "<4.4",
"symfony/doctrine-bridge": "<5.4.21|>=6,<6.2.7",
"symfony/error-handler": "<4.4.5",
"symfony/framework-bundle": "<4.4",
"symfony/http-kernel": "<4.4",
"symfony/translation": "<4.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3",
"symfony/translation-contracts": "<1.1.7",
"symfony/twig-bridge": "<4.4"
"symfony/twig-bridge": "<5.4.21|>=6,<6.2.7"
},
"require-dev": {
"doctrine/collections": "^1.0|^2.0",
@ -2813,7 +2922,7 @@
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/intl": "^4.4|^5.0|^6.0",
"symfony/security-csrf": "^4.4|^5.0|^6.0",
"symfony/translation": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3",
"symfony/uid": "^5.1|^6.0",
"symfony/validator": "^4.4.17|^5.1.9|^6.0",
"symfony/var-dumper": "^4.4|^5.0|^6.0"
@ -2849,7 +2958,7 @@
"description": "Allows to easily create, process and reuse HTML forms",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/form/tree/v5.4.16"
"source": "https://github.com/symfony/form/tree/v5.4.40"
},
"funding": [
{
@ -2865,20 +2974,20 @@
"type": "tidelift"
}
],
"time": "2022-11-25T18:56:07+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/framework-bundle",
"version": "v5.4.16",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
"reference": "70bfb2e76b8d97b2b19058bd65046b4cc1f04e3d"
"reference": "18b84194424511fe541fc7962553ae423e4553c7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/70bfb2e76b8d97b2b19058bd65046b4cc1f04e3d",
"reference": "70bfb2e76b8d97b2b19058bd65046b4cc1f04e3d",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/18b84194424511fe541fc7962553ae423e4553c7",
"reference": "18b84194424511fe541fc7962553ae423e4553c7",
"shasum": ""
},
"require": {
@ -2892,7 +3001,7 @@
"symfony/event-dispatcher": "^5.1|^6.0",
"symfony/filesystem": "^4.4|^5.0|^6.0",
"symfony/finder": "^4.4|^5.0|^6.0",
"symfony/http-foundation": "^5.3|^6.0",
"symfony/http-foundation": "^5.4.24|^6.2.11",
"symfony/http-kernel": "^5.4|^6.0",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php80": "^1.16",
@ -2905,9 +3014,8 @@
"doctrine/persistence": "<1.3",
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"phpunit/phpunit": "<5.4.3",
"symfony/asset": "<5.3",
"symfony/console": "<5.2.5",
"symfony/console": "<5.2.5|>=7.0",
"symfony/dom-crawler": "<4.4",
"symfony/dotenv": "<5.1",
"symfony/form": "<5.2",
@ -2925,12 +3033,12 @@
"symfony/translation": "<5.3",
"symfony/twig-bridge": "<4.4",
"symfony/twig-bundle": "<4.4",
"symfony/validator": "<5.2",
"symfony/validator": "<5.3.11",
"symfony/web-profiler-bundle": "<4.4",
"symfony/workflow": "<5.2"
},
"require-dev": {
"doctrine/annotations": "^1.13.1",
"doctrine/annotations": "^1.13.1|^2",
"doctrine/cache": "^1.11|^2.0",
"doctrine/persistence": "^1.3|^2|^3",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
@ -2958,11 +3066,11 @@
"symfony/string": "^5.0|^6.0",
"symfony/translation": "^5.3|^6.0",
"symfony/twig-bundle": "^4.4|^5.0|^6.0",
"symfony/validator": "^5.2|^6.0",
"symfony/validator": "^5.3.11|^6.0",
"symfony/web-link": "^4.4|^5.0|^6.0",
"symfony/workflow": "^5.2|^6.0",
"symfony/yaml": "^4.4|^5.0|^6.0",
"twig/twig": "^2.10|^3.0"
"twig/twig": "^2.10|^3.0.4"
},
"suggest": {
"ext-apcu": "For best performance of the system caches",
@ -3000,7 +3108,7 @@
"description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/framework-bundle/tree/v5.4.16"
"source": "https://github.com/symfony/framework-bundle/tree/v5.4.41"
},
"funding": [
{
@ -3016,27 +3124,27 @@
"type": "tidelift"
}
],
"time": "2022-11-25T14:26:10+00:00"
"time": "2024-06-14T09:52:52+00:00"
},
{
"name": "symfony/http-client",
"version": "v5.4.16",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "0f43af12a27733a060b92396b7bde84a4376da0a"
"reference": "87ca825717928d178de8a3458f163100925fb675"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/0f43af12a27733a060b92396b7bde84a4376da0a",
"reference": "0f43af12a27733a060b92396b7bde84a4376da0a",
"url": "https://api.github.com/repos/symfony/http-client/zipball/87ca825717928d178de8a3458f163100925fb675",
"reference": "87ca825717928d178de8a3458f163100925fb675",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/http-client-contracts": "^2.4",
"symfony/http-client-contracts": "^2.5.3",
"symfony/polyfill-php73": "^1.11",
"symfony/polyfill-php80": "^1.16",
"symfony/service-contracts": "^1.0|^2|^3"
@ -3052,9 +3160,10 @@
"amphp/http-client": "^4.2.1",
"amphp/http-tunnel": "^1.0",
"amphp/socket": "^1.1",
"guzzlehttp/promises": "^1.4",
"guzzlehttp/promises": "^1.4|^2.0",
"nyholm/psr7": "^1.0",
"php-http/httplug": "^1.0|^2.0",
"php-http/message-factory": "^1.0",
"psr/http-client": "^1.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/http-kernel": "^4.4.13|^5.1.5|^6.0",
@ -3086,8 +3195,11 @@
],
"description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
"homepage": "https://symfony.com",
"keywords": [
"http"
],
"support": {
"source": "https://github.com/symfony/http-client/tree/v5.4.16"
"source": "https://github.com/symfony/http-client/tree/v5.4.41"
},
"funding": [
{
@ -3103,20 +3215,20 @@
"type": "tidelift"
}
],
"time": "2022-11-09T11:27:39+00:00"
"time": "2024-06-28T07:25:22+00:00"
},
{
"name": "symfony/http-client-contracts",
"version": "v2.5.2",
"version": "v2.5.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client-contracts.git",
"reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70"
"reference": "e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70",
"reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1",
"reference": "e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1",
"shasum": ""
},
"require": {
@ -3165,7 +3277,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/http-client-contracts/tree/v2.5.2"
"source": "https://github.com/symfony/http-client-contracts/tree/v2.5.3"
},
"funding": [
{
@ -3181,20 +3293,20 @@
"type": "tidelift"
}
],
"time": "2022-04-12T15:48:08+00:00"
"time": "2024-03-26T19:42:53+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v5.4.16",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "5032c5849aef24741e1970cb03511b0dd131d838"
"reference": "cf4893ca4eca3fac4ae06da1590afdbbb4217847"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/5032c5849aef24741e1970cb03511b0dd131d838",
"reference": "5032c5849aef24741e1970cb03511b0dd131d838",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/cf4893ca4eca3fac4ae06da1590afdbbb4217847",
"reference": "cf4893ca4eca3fac4ae06da1590afdbbb4217847",
"shasum": ""
},
"require": {
@ -3204,7 +3316,7 @@
"symfony/polyfill-php80": "^1.16"
},
"require-dev": {
"predis/predis": "~1.0",
"predis/predis": "^1.0|^2.0",
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^5.4|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
@ -3241,7 +3353,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v5.4.16"
"source": "https://github.com/symfony/http-foundation/tree/v5.4.40"
},
"funding": [
{
@ -3257,20 +3369,20 @@
"type": "tidelift"
}
],
"time": "2022-11-07T08:06:40+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v5.4.16",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "b432c57c5de73634b1859093c1f58e3cd84455a1"
"reference": "aad4078e1210343b7cd5acb803c02f8b02f002b2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/b432c57c5de73634b1859093c1f58e3cd84455a1",
"reference": "b432c57c5de73634b1859093c1f58e3cd84455a1",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/aad4078e1210343b7cd5acb803c02f8b02f002b2",
"reference": "aad4078e1210343b7cd5acb803c02f8b02f002b2",
"shasum": ""
},
"require": {
@ -3279,7 +3391,7 @@
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/error-handler": "^4.4|^5.0|^6.0",
"symfony/event-dispatcher": "^5.0|^6.0",
"symfony/http-foundation": "^5.3.7|^6.0",
"symfony/http-foundation": "^5.4.21|^6.2.7",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-php73": "^1.9",
"symfony/polyfill-php80": "^1.16"
@ -3319,6 +3431,7 @@
"symfony/stopwatch": "^4.4|^5.0|^6.0",
"symfony/translation": "^4.4|^5.0|^6.0",
"symfony/translation-contracts": "^1.1|^2|^3",
"symfony/var-dumper": "^4.4.31|^5.4",
"twig/twig": "^2.13|^3.0.4"
},
"suggest": {
@ -3353,7 +3466,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-kernel/tree/v5.4.16"
"source": "https://github.com/symfony/http-kernel/tree/v5.4.41"
},
"funding": [
{
@ -3369,20 +3482,20 @@
"type": "tidelift"
}
],
"time": "2022-11-28T18:08:58+00:00"
"time": "2024-06-28T11:42:41+00:00"
},
{
"name": "symfony/lock",
"version": "v5.4.15",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/lock.git",
"reference": "109a20faa6119578b46457ef8cffb9389e20e5ca"
"reference": "d96955c9919fa8609b193ba76e9f527776b70176"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/lock/zipball/109a20faa6119578b46457ef8cffb9389e20e5ca",
"reference": "109a20faa6119578b46457ef8cffb9389e20e5ca",
"url": "https://api.github.com/repos/symfony/lock/zipball/d96955c9919fa8609b193ba76e9f527776b70176",
"reference": "d96955c9919fa8609b193ba76e9f527776b70176",
"shasum": ""
},
"require": {
@ -3395,8 +3508,8 @@
"doctrine/dbal": "<2.13"
},
"require-dev": {
"doctrine/dbal": "^2.13|^3.0",
"predis/predis": "~1.0"
"doctrine/dbal": "^2.13|^3|^4",
"predis/predis": "^1.0|^2.0"
},
"type": "library",
"autoload": {
@ -3432,7 +3545,7 @@
"semaphore"
],
"support": {
"source": "https://github.com/symfony/lock/tree/v5.4.15"
"source": "https://github.com/symfony/lock/tree/v5.4.40"
},
"funding": [
{
@ -3448,20 +3561,20 @@
"type": "tidelift"
}
],
"time": "2022-10-27T07:55:40+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/options-resolver",
"version": "v5.4.11",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
"reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690"
"reference": "bd1afbde6613a8d6b956115e0e14b196191fd0c4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/54f14e36aa73cb8f7261d7686691fd4d75ea2690",
"reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/bd1afbde6613a8d6b956115e0e14b196191fd0c4",
"reference": "bd1afbde6613a8d6b956115e0e14b196191fd0c4",
"shasum": ""
},
"require": {
@ -3501,7 +3614,7 @@
"options"
],
"support": {
"source": "https://github.com/symfony/options-resolver/tree/v5.4.11"
"source": "https://github.com/symfony/options-resolver/tree/v5.4.40"
},
"funding": [
{
@ -3517,24 +3630,25 @@
"type": "tidelift"
}
],
"time": "2022-07-20T13:00:38+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/password-hasher",
"version": "v5.4.11",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/password-hasher.git",
"reference": "b0169ed8f09a4ae39eb119218ea1685079a9b179"
"reference": "21b98178ab2024e6c7d8ab72cca9ba16015c6093"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/b0169ed8f09a4ae39eb119218ea1685079a9b179",
"reference": "b0169ed8f09a4ae39eb119218ea1685079a9b179",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/21b98178ab2024e6c7d8ab72cca9ba16015c6093",
"reference": "21b98178ab2024e6c7d8ab72cca9ba16015c6093",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.15"
},
"conflict": {
@ -3574,7 +3688,7 @@
"password"
],
"support": {
"source": "https://github.com/symfony/password-hasher/tree/v5.4.11"
"source": "https://github.com/symfony/password-hasher/tree/v5.4.40"
},
"funding": [
{
@ -3590,20 +3704,20 @@
"type": "tidelift"
}
],
"time": "2022-07-20T13:00:38+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.27.0",
"version": "v1.30.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
"reference": "511a08c03c1960e08a883f4cffcacd219b758354"
"reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354",
"reference": "511a08c03c1960e08a883f4cffcacd219b758354",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a",
"reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a",
"shasum": ""
},
"require": {
@ -3614,9 +3728,6 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -3655,7 +3766,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0"
},
"funding": [
{
@ -3671,20 +3782,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2024-05-31T15:07:36+00:00"
},
{
"name": "symfony/polyfill-intl-icu",
"version": "v1.27.0",
"version": "v1.30.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "a3d9148e2c363588e05abbdd4ee4f971f0a5330c"
"reference": "e76343c631b453088e2260ac41dfebe21954de81"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/a3d9148e2c363588e05abbdd4ee4f971f0a5330c",
"reference": "a3d9148e2c363588e05abbdd4ee4f971f0a5330c",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e76343c631b453088e2260ac41dfebe21954de81",
"reference": "e76343c631b453088e2260ac41dfebe21954de81",
"shasum": ""
},
"require": {
@ -3695,9 +3806,6 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -3742,7 +3850,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.30.0"
},
"funding": [
{
@ -3758,20 +3866,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2024-05-31T15:07:36+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.27.0",
"version": "v1.30.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
"reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
"reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb",
"reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb",
"shasum": ""
},
"require": {
@ -3782,9 +3890,6 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -3826,7 +3931,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0"
},
"funding": [
{
@ -3842,20 +3947,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2024-05-31T15:07:36+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.27.0",
"version": "v1.30.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
"reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c",
"reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c",
"shasum": ""
},
"require": {
@ -3869,9 +3974,6 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -3909,7 +4011,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0"
},
"funding": [
{
@ -3925,20 +4027,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2024-06-19T12:30:46+00:00"
},
{
"name": "symfony/polyfill-php73",
"version": "v1.27.0",
"version": "v1.30.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
"reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
"reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
"reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/ec444d3f3f6505bb28d11afa41e75faadebc10a1",
"reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1",
"shasum": ""
},
"require": {
@ -3946,9 +4048,6 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -3988,7 +4087,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-php73/tree/v1.30.0"
},
"funding": [
{
@ -4004,20 +4103,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2024-05-31T15:07:36+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.27.0",
"version": "v1.30.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
"reference": "77fa7995ac1b21ab60769b7323d600a991a90433"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
"reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433",
"reference": "77fa7995ac1b21ab60769b7323d600a991a90433",
"shasum": ""
},
"require": {
@ -4025,9 +4124,6 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -4071,7 +4167,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0"
},
"funding": [
{
@ -4087,20 +4183,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2024-05-31T15:07:36+00:00"
},
{
"name": "symfony/polyfill-php81",
"version": "v1.27.0",
"version": "v1.30.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
"reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a"
"reference": "3fb075789fb91f9ad9af537c4012d523085bd5af"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a",
"reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af",
"reference": "3fb075789fb91f9ad9af537c4012d523085bd5af",
"shasum": ""
},
"require": {
@ -4108,9 +4204,6 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
@ -4150,7 +4243,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0"
"source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0"
},
"funding": [
{
@ -4166,20 +4259,20 @@
"type": "tidelift"
}
],
"time": "2022-11-03T14:55:06+00:00"
"time": "2024-06-19T12:30:46+00:00"
},
{
"name": "symfony/property-access",
"version": "v5.4.15",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
"reference": "0f3e8f40a1d3da90f674b3dd772e4777ccde4273"
"reference": "6e4834145c2231b34eafabe440aaac478a95b456"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/0f3e8f40a1d3da90f674b3dd772e4777ccde4273",
"reference": "0f3e8f40a1d3da90f674b3dd772e4777ccde4273",
"url": "https://api.github.com/repos/symfony/property-access/zipball/6e4834145c2231b34eafabe440aaac478a95b456",
"reference": "6e4834145c2231b34eafabe440aaac478a95b456",
"shasum": ""
},
"require": {
@ -4227,11 +4320,11 @@
"injection",
"object",
"property",
"property path",
"property-path",
"reflection"
],
"support": {
"source": "https://github.com/symfony/property-access/tree/v5.4.15"
"source": "https://github.com/symfony/property-access/tree/v5.4.40"
},
"funding": [
{
@ -4247,20 +4340,20 @@
"type": "tidelift"
}
],
"time": "2022-10-27T07:55:40+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/property-info",
"version": "v5.4.16",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
"reference": "9dd148c4fbfc231fa4bff00def8dc16a2cd89944"
"reference": "2c96c24961cab73bdc9020809bd82bdadd1a10f2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-info/zipball/9dd148c4fbfc231fa4bff00def8dc16a2cd89944",
"reference": "9dd148c4fbfc231fa4bff00def8dc16a2cd89944",
"url": "https://api.github.com/repos/symfony/property-info/zipball/2c96c24961cab73bdc9020809bd82bdadd1a10f2",
"reference": "2c96c24961cab73bdc9020809bd82bdadd1a10f2",
"shasum": ""
},
"require": {
@ -4275,7 +4368,7 @@
"symfony/dependency-injection": "<4.4"
},
"require-dev": {
"doctrine/annotations": "^1.10.4",
"doctrine/annotations": "^1.10.4|^2",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"phpstan/phpdoc-parser": "^1.0",
"symfony/cache": "^4.4|^5.0|^6.0",
@ -4322,7 +4415,7 @@
"validator"
],
"support": {
"source": "https://github.com/symfony/property-info/tree/v5.4.16"
"source": "https://github.com/symfony/property-info/tree/v5.4.41"
},
"funding": [
{
@ -4338,36 +4431,37 @@
"type": "tidelift"
}
],
"time": "2022-11-19T17:41:50+00:00"
"time": "2024-06-09T07:25:10+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
"version": "v2.1.4",
"version": "v2.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/psr-http-message-bridge.git",
"reference": "a125b93ef378c492e274f217874906fb9babdebb"
"reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a125b93ef378c492e274f217874906fb9babdebb",
"reference": "a125b93ef378c492e274f217874906fb9babdebb",
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/581ca6067eb62640de5ff08ee1ba6850a0ee472e",
"reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e",
"shasum": ""
},
"require": {
"php": ">=7.1",
"psr/http-message": "^1.0",
"symfony/http-foundation": "^4.4 || ^5.0 || ^6.0"
"php": ">=7.2.5",
"psr/http-message": "^1.0 || ^2.0",
"symfony/deprecation-contracts": "^2.5 || ^3.0",
"symfony/http-foundation": "^5.4 || ^6.0"
},
"require-dev": {
"nyholm/psr7": "^1.1",
"psr/log": "^1.1 || ^2 || ^3",
"symfony/browser-kit": "^4.4 || ^5.0 || ^6.0",
"symfony/config": "^4.4 || ^5.0 || ^6.0",
"symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0",
"symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0",
"symfony/http-kernel": "^4.4 || ^5.0 || ^6.0",
"symfony/phpunit-bridge": "^5.4@dev || ^6.0"
"symfony/browser-kit": "^5.4 || ^6.0",
"symfony/config": "^5.4 || ^6.0",
"symfony/event-dispatcher": "^5.4 || ^6.0",
"symfony/framework-bundle": "^5.4 || ^6.0",
"symfony/http-kernel": "^5.4 || ^6.0",
"symfony/phpunit-bridge": "^6.2"
},
"suggest": {
"nyholm/psr7": "For a super lightweight PSR-7/17 implementation"
@ -4375,7 +4469,7 @@
"type": "symfony-bridge",
"extra": {
"branch-alias": {
"dev-main": "2.1-dev"
"dev-main": "2.3-dev"
}
},
"autoload": {
@ -4410,7 +4504,7 @@
],
"support": {
"issues": "https://github.com/symfony/psr-http-message-bridge/issues",
"source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.4"
"source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.3.1"
},
"funding": [
{
@ -4426,20 +4520,20 @@
"type": "tidelift"
}
],
"time": "2022-11-28T22:46:34+00:00"
"time": "2023-07-26T11:53:26+00:00"
},
{
"name": "symfony/rate-limiter",
"version": "v5.4.11",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/rate-limiter.git",
"reference": "1a3a43eeb498290100e4a1559f4a48be14900bc2"
"reference": "b3de902fc83923b9121169ade2453c41d0819110"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/rate-limiter/zipball/1a3a43eeb498290100e4a1559f4a48be14900bc2",
"reference": "1a3a43eeb498290100e4a1559f4a48be14900bc2",
"url": "https://api.github.com/repos/symfony/rate-limiter/zipball/b3de902fc83923b9121169ade2453c41d0819110",
"reference": "b3de902fc83923b9121169ade2453c41d0819110",
"shasum": ""
},
"require": {
@ -4480,7 +4574,7 @@
"rate-limiter"
],
"support": {
"source": "https://github.com/symfony/rate-limiter/tree/v5.4.11"
"source": "https://github.com/symfony/rate-limiter/tree/v5.4.40"
},
"funding": [
{
@ -4496,20 +4590,20 @@
"type": "tidelift"
}
],
"time": "2022-07-20T13:00:38+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/routing",
"version": "v5.4.15",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "5c9b129efe9abce9470e384bf65d8a7e262eee69"
"reference": "6df1dd8b306649303267a760699cf04cf39b1f7b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/5c9b129efe9abce9470e384bf65d8a7e262eee69",
"reference": "5c9b129efe9abce9470e384bf65d8a7e262eee69",
"url": "https://api.github.com/repos/symfony/routing/zipball/6df1dd8b306649303267a760699cf04cf39b1f7b",
"reference": "6df1dd8b306649303267a760699cf04cf39b1f7b",
"shasum": ""
},
"require": {
@ -4524,7 +4618,7 @@
"symfony/yaml": "<4.4"
},
"require-dev": {
"doctrine/annotations": "^1.12",
"doctrine/annotations": "^1.12|^2",
"psr/log": "^1|^2|^3",
"symfony/config": "^5.3|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
@ -4570,7 +4664,7 @@
"url"
],
"support": {
"source": "https://github.com/symfony/routing/tree/v5.4.15"
"source": "https://github.com/symfony/routing/tree/v5.4.40"
},
"funding": [
{
@ -4586,20 +4680,20 @@
"type": "tidelift"
}
],
"time": "2022-10-13T14:10:41+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/runtime",
"version": "v5.4.11",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/runtime.git",
"reference": "c32ac27a8abebe4e6375cd12a4f78ba78e9c742f"
"reference": "50096d4ebebb4f9c41b87695868a6e34bdbf7cde"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/runtime/zipball/c32ac27a8abebe4e6375cd12a4f78ba78e9c742f",
"reference": "c32ac27a8abebe4e6375cd12a4f78ba78e9c742f",
"url": "https://api.github.com/repos/symfony/runtime/zipball/50096d4ebebb4f9c41b87695868a6e34bdbf7cde",
"reference": "50096d4ebebb4f9c41b87695868a6e34bdbf7cde",
"shasum": ""
},
"require": {
@ -4612,7 +4706,7 @@
},
"require-dev": {
"composer/composer": "^1.0.2|^2.0",
"symfony/console": "^4.4.30|^5.3.7|^6.0",
"symfony/console": "^4.4.30|^5.4.9|^6.0.9",
"symfony/dotenv": "^5.1|^6.0",
"symfony/http-foundation": "^4.4.30|^5.3.7|^6.0",
"symfony/http-kernel": "^4.4.30|^5.3.7|^6.0"
@ -4646,8 +4740,11 @@
],
"description": "Enables decoupling PHP applications from global state",
"homepage": "https://symfony.com",
"keywords": [
"runtime"
],
"support": {
"source": "https://github.com/symfony/runtime/tree/v5.4.11"
"source": "https://github.com/symfony/runtime/tree/v5.4.40"
},
"funding": [
{
@ -4663,20 +4760,20 @@
"type": "tidelift"
}
],
"time": "2022-06-27T16:58:25+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/security-bundle",
"version": "v5.4.11",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
"reference": "86b49feb056b840f2b79a03fcfa2d378d6d34234"
"reference": "86557f237fb152412048912660895ab86aa61494"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/86b49feb056b840f2b79a03fcfa2d378d6d34234",
"reference": "86b49feb056b840f2b79a03fcfa2d378d6d34234",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/86557f237fb152412048912660895ab86aa61494",
"reference": "86557f237fb152412048912660895ab86aa61494",
"shasum": ""
},
"require": {
@ -4693,7 +4790,8 @@
"symfony/security-core": "^5.4|^6.0",
"symfony/security-csrf": "^4.4|^5.0|^6.0",
"symfony/security-guard": "^5.3",
"symfony/security-http": "^5.4|^6.0"
"symfony/security-http": "^5.4.30|^6.3.6",
"symfony/service-contracts": "^1.10|^2|^3"
},
"conflict": {
"symfony/browser-kit": "<4.4",
@ -4703,7 +4801,7 @@
"symfony/twig-bundle": "<4.4"
},
"require-dev": {
"doctrine/annotations": "^1.10.4",
"doctrine/annotations": "^1.10.4|^2",
"symfony/asset": "^4.4|^5.0|^6.0",
"symfony/browser-kit": "^4.4|^5.0|^6.0",
"symfony/console": "^4.4|^5.0|^6.0",
@ -4749,7 +4847,7 @@
"description": "Provides a tight integration of the Security component into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-bundle/tree/v5.4.11"
"source": "https://github.com/symfony/security-bundle/tree/v5.4.41"
},
"funding": [
{
@ -4765,20 +4863,20 @@
"type": "tidelift"
}
],
"time": "2022-07-20T13:00:38+00:00"
"time": "2024-06-21T13:58:36+00:00"
},
{
"name": "symfony/security-core",
"version": "v5.4.15",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
"reference": "4ef922cd626a43b570522cb1616e3d678664c9a0"
"reference": "98789f9a01db2168079fa973358ddc4deb6a0da8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-core/zipball/4ef922cd626a43b570522cb1616e3d678664c9a0",
"reference": "4ef922cd626a43b570522cb1616e3d678664c9a0",
"url": "https://api.github.com/repos/symfony/security-core/zipball/98789f9a01db2168079fa973358ddc4deb6a0da8",
"reference": "98789f9a01db2168079fa973358ddc4deb6a0da8",
"shasum": ""
},
"require": {
@ -4794,6 +4892,7 @@
"symfony/http-foundation": "<5.3",
"symfony/ldap": "<4.4",
"symfony/security-guard": "<4.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3",
"symfony/validator": "<5.2"
},
"require-dev": {
@ -4805,7 +4904,7 @@
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/http-foundation": "^5.3|^6.0",
"symfony/ldap": "^4.4|^5.0|^6.0",
"symfony/translation": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3",
"symfony/validator": "^5.2|^6.0"
},
"suggest": {
@ -4842,7 +4941,7 @@
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-core/tree/v5.4.15"
"source": "https://github.com/symfony/security-core/tree/v5.4.41"
},
"funding": [
{
@ -4858,24 +4957,25 @@
"type": "tidelift"
}
],
"time": "2022-10-23T10:30:41+00:00"
"time": "2024-06-28T07:24:26+00:00"
},
{
"name": "symfony/security-csrf",
"version": "v5.4.11",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
"reference": "b97ab244b6dda80abb84a4a236d682871695db4a"
"reference": "9058d522c1c33d7ba13f4b3c79555cc2c4c16028"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/b97ab244b6dda80abb84a4a236d682871695db4a",
"reference": "b97ab244b6dda80abb84a4a236d682871695db4a",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/9058d522c1c33d7ba13f4b3c79555cc2c4c16028",
"reference": "9058d522c1c33d7ba13f4b3c79555cc2c4c16028",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.16",
"symfony/security-core": "^4.4|^5.0|^6.0"
},
@ -4914,7 +5014,7 @@
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-csrf/tree/v5.4.11"
"source": "https://github.com/symfony/security-csrf/tree/v5.4.40"
},
"funding": [
{
@ -4930,24 +5030,25 @@
"type": "tidelift"
}
],
"time": "2022-07-20T13:00:38+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/security-guard",
"version": "v5.4.13",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-guard.git",
"reference": "83f647fcdc17aa14908f0e02a302d3d9d0f63fbc"
"reference": "d930fd327c290f451c9d8dd7889169195d4484e9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-guard/zipball/83f647fcdc17aa14908f0e02a302d3d9d0f63fbc",
"reference": "83f647fcdc17aa14908f0e02a302d3d9d0f63fbc",
"url": "https://api.github.com/repos/symfony/security-guard/zipball/d930fd327c290f451c9d8dd7889169195d4484e9",
"reference": "d930fd327c290f451c9d8dd7889169195d4484e9",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.15",
"symfony/security-core": "^5.0",
"symfony/security-http": "^5.3"
@ -4981,7 +5082,7 @@
"description": "Symfony Security Component - Guard",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-guard/tree/v5.4.13"
"source": "https://github.com/symfony/security-guard/tree/v5.4.40"
},
"funding": [
{
@ -4997,20 +5098,20 @@
"type": "tidelift"
}
],
"time": "2022-09-28T13:19:49+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/security-http",
"version": "v5.4.15",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
"reference": "142d48153a453dbd49e880eef6bc77e4ba162dff"
"reference": "14d271e304dce13ae77e39e6a6353c986e756b40"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-http/zipball/142d48153a453dbd49e880eef6bc77e4ba162dff",
"reference": "142d48153a453dbd49e880eef6bc77e4ba162dff",
"url": "https://api.github.com/repos/symfony/security-http/zipball/14d271e304dce13ae77e39e6a6353c986e756b40",
"reference": "14d271e304dce13ae77e39e6a6353c986e756b40",
"shasum": ""
},
"require": {
@ -5021,7 +5122,8 @@
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php80": "^1.16",
"symfony/property-access": "^4.4|^5.0|^6.0",
"symfony/security-core": "^5.4|^6.0"
"symfony/security-core": "^5.4.19|~6.0.19|~6.1.11|^6.2.5",
"symfony/service-contracts": "^1.10|^2|^3"
},
"conflict": {
"symfony/event-dispatcher": "<4.3",
@ -5066,7 +5168,7 @@
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-http/tree/v5.4.15"
"source": "https://github.com/symfony/security-http/tree/v5.4.41"
},
"funding": [
{
@ -5082,20 +5184,20 @@
"type": "tidelift"
}
],
"time": "2022-10-23T10:30:41+00:00"
"time": "2024-06-17T05:58:45+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v2.5.2",
"version": "v2.5.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c"
"reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
"reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/a2329596ddc8fd568900e3fc76cba42489ecc7f3",
"reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3",
"shasum": ""
},
"require": {
@ -5149,7 +5251,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v2.5.2"
"source": "https://github.com/symfony/service-contracts/tree/v2.5.3"
},
"funding": [
{
@ -5165,20 +5267,20 @@
"type": "tidelift"
}
],
"time": "2022-05-30T19:17:29+00:00"
"time": "2023-04-21T15:04:16+00:00"
},
{
"name": "symfony/string",
"version": "v5.4.15",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed"
"reference": "065a9611e0b1fd2197a867e1fb7f2238191b7096"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/571334ce9f687e3e6af72db4d3b2a9431e4fd9ed",
"reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed",
"url": "https://api.github.com/repos/symfony/string/zipball/065a9611e0b1fd2197a867e1fb7f2238191b7096",
"reference": "065a9611e0b1fd2197a867e1fb7f2238191b7096",
"shasum": ""
},
"require": {
@ -5235,7 +5337,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v5.4.15"
"source": "https://github.com/symfony/string/tree/v5.4.41"
},
"funding": [
{
@ -5251,20 +5353,20 @@
"type": "tidelift"
}
],
"time": "2022-10-05T15:16:54+00:00"
"time": "2024-06-28T09:20:55+00:00"
},
{
"name": "symfony/translation",
"version": "v5.4.14",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "f0ed07675863aa6e3939df8b1bc879450b585cab"
"reference": "bb51d7f183756d1ac03f50ea47dc5726518cc7e8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/f0ed07675863aa6e3939df8b1bc879450b585cab",
"reference": "f0ed07675863aa6e3939df8b1bc879450b585cab",
"url": "https://api.github.com/repos/symfony/translation/zipball/bb51d7f183756d1ac03f50ea47dc5726518cc7e8",
"reference": "bb51d7f183756d1ac03f50ea47dc5726518cc7e8",
"shasum": ""
},
"require": {
@ -5332,7 +5434,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/translation/tree/v5.4.14"
"source": "https://github.com/symfony/translation/tree/v5.4.40"
},
"funding": [
{
@ -5348,20 +5450,20 @@
"type": "tidelift"
}
],
"time": "2022-10-07T08:01:20+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/translation-contracts",
"version": "v2.5.2",
"version": "v2.5.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
"reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe"
"reference": "b0073a77ac0b7ea55131020e87b1e3af540f4664"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
"reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b0073a77ac0b7ea55131020e87b1e3af540f4664",
"reference": "b0073a77ac0b7ea55131020e87b1e3af540f4664",
"shasum": ""
},
"require": {
@ -5410,7 +5512,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.2"
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.3"
},
"funding": [
{
@ -5426,20 +5528,20 @@
"type": "tidelift"
}
],
"time": "2022-06-27T16:58:25+00:00"
"time": "2024-01-23T13:51:25+00:00"
},
{
"name": "symfony/twig-bridge",
"version": "v5.4.16",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
"reference": "227d5030714c024bf4bc760b5762224070d4288c"
"reference": "d7b10dad12c49863c20c7f8e4cc74b9416eefbb9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/227d5030714c024bf4bc760b5762224070d4288c",
"reference": "227d5030714c024bf4bc760b5762224070d4288c",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/d7b10dad12c49863c20c7f8e4cc74b9416eefbb9",
"reference": "d7b10dad12c49863c20c7f8e4cc74b9416eefbb9",
"shasum": ""
},
"require": {
@ -5452,22 +5554,22 @@
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"symfony/console": "<5.3",
"symfony/form": "<5.3",
"symfony/form": "<5.4.21|>=6,<6.2.7",
"symfony/http-foundation": "<5.3",
"symfony/http-kernel": "<4.4",
"symfony/translation": "<5.2",
"symfony/workflow": "<5.2"
},
"require-dev": {
"doctrine/annotations": "^1.12",
"egulias/email-validator": "^2.1.10|^3",
"doctrine/annotations": "^1.12|^2",
"egulias/email-validator": "^2.1.10|^3|^4",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"symfony/asset": "^4.4|^5.0|^6.0",
"symfony/console": "^5.3|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/finder": "^4.4|^5.0|^6.0",
"symfony/form": "^5.3|^6.0",
"symfony/form": "^5.4.21|^6.2.7",
"symfony/http-foundation": "^5.3|^6.0",
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/intl": "^4.4|^5.0|^6.0",
@ -5479,7 +5581,7 @@
"symfony/security-core": "^4.4|^5.0|^6.0",
"symfony/security-csrf": "^4.4|^5.0|^6.0",
"symfony/security-http": "^4.4|^5.0|^6.0",
"symfony/serializer": "^5.2|^6.0",
"symfony/serializer": "^5.4.35|~6.3.12|^6.4.3",
"symfony/stopwatch": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.2|^6.0",
"symfony/web-link": "^4.4|^5.0|^6.0",
@ -5531,7 +5633,7 @@
"description": "Provides integration for Twig with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bridge/tree/v5.4.16"
"source": "https://github.com/symfony/twig-bridge/tree/v5.4.41"
},
"funding": [
{
@ -5547,25 +5649,26 @@
"type": "tidelift"
}
],
"time": "2022-11-04T07:37:26+00:00"
"time": "2024-06-09T18:59:35+00:00"
},
{
"name": "symfony/twig-bundle",
"version": "v5.4.8",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
"reference": "c992b4474c3a31f3c40a1ca593d213833f91b818"
"reference": "997c002735c88b50a6325cca8ecf3d8723902666"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/c992b4474c3a31f3c40a1ca593d213833f91b818",
"reference": "c992b4474c3a31f3c40a1ca593d213833f91b818",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/997c002735c88b50a6325cca8ecf3d8723902666",
"reference": "997c002735c88b50a6325cca8ecf3d8723902666",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/http-foundation": "^4.4|^5.0|^6.0",
"symfony/http-kernel": "^5.0|^6.0",
"symfony/polyfill-ctype": "~1.8",
@ -5580,7 +5683,7 @@
"symfony/translation": "<5.0"
},
"require-dev": {
"doctrine/annotations": "^1.10.4",
"doctrine/annotations": "^1.10.4|^2",
"doctrine/cache": "^1.0|^2.0",
"symfony/asset": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^5.3|^6.0",
@ -5620,7 +5723,7 @@
"description": "Provides a tight integration of Twig into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bundle/tree/v5.4.8"
"source": "https://github.com/symfony/twig-bundle/tree/v5.4.40"
},
"funding": [
{
@ -5636,20 +5739,20 @@
"type": "tidelift"
}
],
"time": "2022-04-03T13:03:10+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/validator",
"version": "v5.4.15",
"version": "v5.4.41",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
"reference": "0fb0c50f18f4517a8ea59d1cc87bff231402a7e3"
"reference": "e00b2547f712a97755933db45efc03123b2d2690"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/0fb0c50f18f4517a8ea59d1cc87bff231402a7e3",
"reference": "0fb0c50f18f4517a8ea59d1cc87bff231402a7e3",
"url": "https://api.github.com/repos/symfony/validator/zipball/e00b2547f712a97755933db45efc03123b2d2690",
"reference": "e00b2547f712a97755933db45efc03123b2d2690",
"shasum": ""
},
"require": {
@ -5666,19 +5769,18 @@
"doctrine/annotations": "<1.13",
"doctrine/cache": "<1.11",
"doctrine/lexer": "<1.1",
"phpunit/phpunit": "<5.4.3",
"symfony/dependency-injection": "<4.4",
"symfony/expression-language": "<5.1",
"symfony/http-kernel": "<4.4",
"symfony/intl": "<4.4",
"symfony/property-info": "<5.3",
"symfony/translation": "<4.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3",
"symfony/yaml": "<4.4"
},
"require-dev": {
"doctrine/annotations": "^1.13",
"doctrine/annotations": "^1.13|^2",
"doctrine/cache": "^1.11|^2.0",
"egulias/email-validator": "^2.1.10|^3",
"egulias/email-validator": "^2.1.10|^3|^4",
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/console": "^4.4|^5.0|^6.0",
@ -5692,7 +5794,7 @@
"symfony/mime": "^4.4|^5.0|^6.0",
"symfony/property-access": "^4.4|^5.0|^6.0",
"symfony/property-info": "^5.3|^6.0",
"symfony/translation": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3",
"symfony/yaml": "^4.4|^5.0|^6.0"
},
"suggest": {
@ -5713,7 +5815,8 @@
"Symfony\\Component\\Validator\\": ""
},
"exclude-from-classmap": [
"/Tests/"
"/Tests/",
"/Resources/bin/"
]
},
"notification-url": "https://packagist.org/downloads/",
@ -5733,7 +5836,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/validator/tree/v5.4.15"
"source": "https://github.com/symfony/validator/tree/v5.4.41"
},
"funding": [
{
@ -5749,20 +5852,20 @@
"type": "tidelift"
}
],
"time": "2022-10-27T08:04:35+00:00"
"time": "2024-06-10T09:18:21+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v5.4.14",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "6894d06145fefebd9a4c7272baa026a1c394a430"
"reference": "af8868a6e9d6082dfca11f1a1f205ae93a8b6d93"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/6894d06145fefebd9a4c7272baa026a1c394a430",
"reference": "6894d06145fefebd9a4c7272baa026a1c394a430",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/af8868a6e9d6082dfca11f1a1f205ae93a8b6d93",
"reference": "af8868a6e9d6082dfca11f1a1f205ae93a8b6d93",
"shasum": ""
},
"require": {
@ -5771,12 +5874,12 @@
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"phpunit/phpunit": "<5.4.3",
"symfony/console": "<4.4"
},
"require-dev": {
"ext-iconv": "*",
"symfony/console": "^4.4|^5.0|^6.0",
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/process": "^4.4|^5.0|^6.0",
"symfony/uid": "^5.1|^6.0",
"twig/twig": "^2.13|^3.0.4"
@ -5822,7 +5925,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v5.4.14"
"source": "https://github.com/symfony/var-dumper/tree/v5.4.40"
},
"funding": [
{
@ -5838,28 +5941,30 @@
"type": "tidelift"
}
],
"time": "2022-10-07T08:01:20+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/var-exporter",
"version": "v5.4.10",
"version": "v6.4.9",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
"reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340"
"reference": "f9a060622e0d93777b7f8687ec4860191e16802e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/8fc03ee75eeece3d9be1ef47d26d79bea1afb340",
"reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/f9a060622e0d93777b7f8687ec4860191e16802e",
"reference": "f9a060622e0d93777b7f8687ec4860191e16802e",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/polyfill-php80": "^1.16"
"php": ">=8.1",
"symfony/deprecation-contracts": "^2.5|^3"
},
"require-dev": {
"symfony/var-dumper": "^4.4.9|^5.0.9|^6.0"
"symfony/property-access": "^6.4|^7.0",
"symfony/serializer": "^6.4|^7.0",
"symfony/var-dumper": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@ -5892,10 +5997,12 @@
"export",
"hydrate",
"instantiate",
"lazy-loading",
"proxy",
"serialize"
],
"support": {
"source": "https://github.com/symfony/var-exporter/tree/v5.4.10"
"source": "https://github.com/symfony/var-exporter/tree/v6.4.9"
},
"funding": [
{
@ -5911,26 +6018,26 @@
"type": "tidelift"
}
],
"time": "2022-05-27T12:56:18+00:00"
"time": "2024-06-24T15:53:56+00:00"
},
{
"name": "symfony/web-profiler-bundle",
"version": "v5.4.14",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
"reference": "e41ebd5411908bc8afdc848ccf68918ecb243c02"
"reference": "a29669617c4e63785f363571a190a706b9022890"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/e41ebd5411908bc8afdc848ccf68918ecb243c02",
"reference": "e41ebd5411908bc8afdc848ccf68918ecb243c02",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/a29669617c4e63785f363571a190a706b9022890",
"reference": "a29669617c4e63785f363571a190a706b9022890",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/framework-bundle": "^5.3|^6.0",
"symfony/framework-bundle": "^5.3|^6.0,<6.4",
"symfony/http-kernel": "^5.3|^6.0",
"symfony/polyfill-php80": "^1.16",
"symfony/routing": "^4.4|^5.0|^6.0",
@ -5975,7 +6082,7 @@
"description": "Provides a development tool that gives detailed information about the execution of any request",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.14"
"source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.40"
},
"funding": [
{
@ -5991,20 +6098,20 @@
"type": "tidelift"
}
],
"time": "2022-10-01T21:59:28+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "symfony/webpack-encore-bundle",
"version": "v1.16.0",
"version": "v1.17.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/webpack-encore-bundle.git",
"reference": "bb399930c0299866258b616a74a27b50b94c5d45"
"reference": "471ebbc03072dad6e31840dc317bc634a32785f5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/bb399930c0299866258b616a74a27b50b94c5d45",
"reference": "bb399930c0299866258b616a74a27b50b94c5d45",
"url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/471ebbc03072dad6e31840dc317bc634a32785f5",
"reference": "471ebbc03072dad6e31840dc317bc634a32785f5",
"shasum": ""
},
"require": {
@ -6048,7 +6155,7 @@
"description": "Integration with your Symfony app & Webpack Encore!",
"support": {
"issues": "https://github.com/symfony/webpack-encore-bundle/issues",
"source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.16.0"
"source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.17.2"
},
"funding": [
{
@ -6064,20 +6171,20 @@
"type": "tidelift"
}
],
"time": "2022-10-18T15:21:06+00:00"
"time": "2023-09-26T14:36:28+00:00"
},
{
"name": "symfony/yaml",
"version": "v5.4.16",
"version": "v5.4.40",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "ebd37c71f62d5ec5f6e27de3e06fee492d4c6298"
"reference": "81cad0ceab3d61fe14fe941ff18a230ac9c80f83"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/ebd37c71f62d5ec5f6e27de3e06fee492d4c6298",
"reference": "ebd37c71f62d5ec5f6e27de3e06fee492d4c6298",
"url": "https://api.github.com/repos/symfony/yaml/zipball/81cad0ceab3d61fe14fe941ff18a230ac9c80f83",
"reference": "81cad0ceab3d61fe14fe941ff18a230ac9c80f83",
"shasum": ""
},
"require": {
@ -6123,7 +6230,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v5.4.16"
"source": "https://github.com/symfony/yaml/tree/v5.4.40"
},
"funding": [
{
@ -6139,38 +6246,41 @@
"type": "tidelift"
}
],
"time": "2022-11-25T16:04:03+00:00"
"time": "2024-05-31T14:33:22+00:00"
},
{
"name": "twig/twig",
"version": "v3.4.3",
"version": "v3.10.3",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58"
"reference": "67f29781ffafa520b0bbfbd8384674b42db04572"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/c38fd6b0b7f370c198db91ffd02e23b517426b58",
"reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572",
"reference": "67f29781ffafa520b0bbfbd8384674b42db04572",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3"
"symfony/polyfill-mbstring": "^1.3",
"symfony/polyfill-php80": "^1.22"
},
"require-dev": {
"psr/container": "^1.0",
"symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
"psr/container": "^1.0|^2.0",
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.4-dev"
}
},
"autoload": {
"files": [
"src/Resources/core.php",
"src/Resources/debug.php",
"src/Resources/escaper.php",
"src/Resources/string_loader.php"
],
"psr-4": {
"Twig\\": "src/"
}
@ -6203,7 +6313,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.4.3"
"source": "https://github.com/twigphp/Twig/tree/v3.10.3"
},
"funding": [
{
@ -6215,7 +6325,7 @@
"type": "tidelift"
}
],
"time": "2022-09-28T08:42:51+00:00"
"time": "2024-05-16T10:04:27+00:00"
}
],
"packages-dev": [],
@ -6230,5 +6340,5 @@
"ext-iconv": "*"
},
"platform-dev": [],
"plugin-api-version": "2.3.0"
"plugin-api-version": "2.6.0"
}

View File

@ -8,8 +8,8 @@ framework:
# Other options include:
# Redis
#app: cache.adapter.redis
#default_redis_provider: redis://localhost
app: cache.adapter.redis
default_redis_provider: '%env(REDIS_DSN)%'
# APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues)
#app: cache.adapter.apcu

View File

@ -1,4 +1,9 @@
# see https://symfony.com/doc/current/reference/configuration/framework.html
parameters:
base_url: '%env(BASE_URL)%'
env(BASE_URL): '//'
cookie_path: '%env(COOKIE_PATH)%'
env(COOKIE_PATH): '/'
framework:
secret: '%env(APP_SECRET)%'
#csrf_protection: true
@ -7,15 +12,20 @@ framework:
# 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
handler_id: '%env(REDIS_DSN)%'
cookie_secure: auto
cookie_samesite: lax
storage_factory_id: session.storage.factory.native
cookie_path: "%cookie_path%"
assets:
base_urls: '%base_url%'
router:
default_uri: '%base_url%'
#esi: true
#fragments: true
php_errors:
log: true
error_controller: App\Controller\CustomErrorController::show
when@test:
framework:

View File

@ -0,0 +1,10 @@
services:
Psr\Http\Message\RequestFactoryInterface: '@http_discovery.psr17_factory'
Psr\Http\Message\ResponseFactoryInterface: '@http_discovery.psr17_factory'
Psr\Http\Message\ServerRequestFactoryInterface: '@http_discovery.psr17_factory'
Psr\Http\Message\StreamFactoryInterface: '@http_discovery.psr17_factory'
Psr\Http\Message\UploadedFileFactoryInterface: '@http_discovery.psr17_factory'
Psr\Http\Message\UriFactoryInterface: '@http_discovery.psr17_factory'
http_discovery.psr17_factory:
class: Http\Discovery\Psr17Factory

View File

@ -23,14 +23,6 @@ security:
custom_authenticators:
- App\Security\SQLLoginUserAuthenticator
entry_point: form_login
form_login:
login_path: app_login
check_path: app_login
username_parameter: login
password_parameter: password
enable_csrf: true
login_throttling:
max_attempts: 3
logout: true
@ -45,6 +37,7 @@ security:
access_control:
- { path: ^/login, roles: PUBLIC_ACCESS }
- { path: ^/connect, roles: ROLE_USER }
- { path: ^/health, roles: PUBLIC_ACCESS }
# - { path: ^/connect, roles: [IS_AUTHENTICATED_FULLY, ROLE_USER] }
when@test:

View File

@ -1,9 +1,10 @@
twig:
globals:
locales: "%app.supported_locales%"
default_path: '%kernel.project_dir%/templates'
url_link: "%env(URL_LINK)%"
default_path: "%kernel.project_dir%/templates"
form_themes:
- 'bootstrap_5_layout.html.twig'
- "bootstrap_5_layout.html.twig"
when@test:
twig:
strict_variables: true

View File

@ -1,9 +1,11 @@
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
output_path: false
builds:
appConfig: '%kernel.project_dir%/public/build/app'
themeConfig: '%kernel.project_dir%/public/build/theme'
# Set attributes that will be rendered on all script and link tags
script_attributes:
defer: true
@ -36,8 +38,11 @@ webpack_encore:
framework:
assets:
json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
packages:
app:
json_manifest_path: '%kernel.project_dir%/public/build/app/manifest.json'
theme:
json_manifest_path: '%kernel.project_dir%/public/build/theme/manifest.json'
#when@prod:
# webpack_encore:
# # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes)

View File

@ -27,7 +27,7 @@ parameters:
locales: '%env(APP_LOCALES)%'
app.supported_locales: ~
env(PEPPER): "257d62c24cd352c21b51c26dba678c8ff05011a89022aec106185bf67c69aa8b"
env(PEPPER): ~
pepper: '%env(resolve:PEPPER)%'
services:
# default configuration for services in *this* file
@ -48,6 +48,10 @@ services:
arguments:
$baseUrl: '%base_url%'
App\Hydra\HydraService:
arguments:
$baseUrl: '%base_url%'
App\SQLLogin\SQLLoginRequest:
arguments:
$config: []

View File

@ -1,12 +0,0 @@
CREATE TABLE IF NOT EXISTS usager (
email VARCHAR ( 100 ) UNIQUE NOT NULL,
password VARCHAR ( 255 ) NOT NULL,
lastname VARCHAR ( 255 ) NOT NULL,
firstname VARCHAR ( 255 ) NOT NULL
);
INSERT INTO usager (email, password, lastname, firstname) VALUES
('test1@test.com', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 'Sassot', 'Charles'),
('test2@test.com', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 'Dubois', 'Angela'),
('test3@test.com', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 'Dupont', 'Henri'),
('test4@test.com', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 'Durand', 'Isabelle');
GRANT ALL PRIVILEGES ON lasql.* TO lasql@localhost identified by 'lasql';

View File

@ -1,15 +0,0 @@
CREATE TABLE IF NOT EXISTS usager (
email VARCHAR ( 100 ) UNIQUE NOT NULL,
password VARCHAR ( 255 ) NOT NULL,
salt VARCHAR (255),
lastname VARCHAR ( 255 ) NOT NULL,
firstname VARCHAR ( 255 ) NOT NULL
);
INSERT INTO usager (email, password, salt, lastname, firstname) VALUES
('test1@test.com', '8ad4025044b77ae6a5e3fcf99e53e44b15db9a4ecf468be21cbc6b9fbdae6d9f', 'cesaltestunexemple', 'Locke', 'John'),
('test3@test.com', '504ae1c3e2f5fdaf41f868164dabcef21e17059f5f388b452718a1ce92692c67', 'cesaltestunautreexemple', 'Dupont', 'Henri');
INSERT INTO usager (email, password, lastname, firstname) VALUES
('test4@test.com', '$2a$12$91AHN7WFXieeadvUfZ88mO.9N7oS5adeXbdERnRno9oLAbqqDW4IG', 'Durand', 'Isabelle'),
('test2@test.com', '50626fa21f45a275cea0efff13ff78fd02234cade322da08b7191c7e9150141d', 'Dubois', 'Angela');
GRANT ALL PRIVILEGES ON DATABASE usager TO lasql

View File

@ -3,17 +3,20 @@ services:
hydra-sql:
container_name: hydra-sql
build:
context: ./containers/hydra-sql
context: .
dockerfile: ./misc/images/hydra-sql-standalone/Dockerfile
args:
- HTTP_PROXY=${HTTP_PROXY}
- HTTPS_PROXY=${HTTPS_PROXY}
- http_proxy=${http_proxy}
- https_proxy=${https_proxy}
user: ${FIXUID:-1000}:${FIXGID:-1000}
ports:
- 8080:80
- 8082:8071
volumes:
- .:/var/www
- ./src:/app/src
- ./config:/app/config
- ./translations:/app/translations
- ./templates:/app/templates
- /etc/localtime:/etc/localtime:ro
- $HOME/.ssh:/root/.host-ssh:ro
tmpfs:
@ -28,18 +31,20 @@ services:
- "localhost:host-gateway"
- "host.docker.internal:host-gateway"
environment:
- APP_ENV=prod
- PHP_FPM_MEMORY_LIMIT=128m
- APP_LOCALES=fr,en
- HYDRA_ADMIN_BASE_URL=http://hydra:4445
- TRUSTED_PROXIES=127.0.0.1,REMOTE_ADDR,localhost
- ISSUER_URL=http://localhost:8000
- BASE_URL=http://localhost:8080
- BASE_URL=http://localhost:8082
- DB_USER=lasql
- DB_PASSWORD=lasql
- DEFAULT_LOCALE=fr
- DSN_REMOTE_DATABASE=pgsql:host='postgres';port=5432;dbname=lasql;
- HASH_ALGO_LEGACY=sha256
- HASH_ALGO_LEGACY="sha256"
- SECURITY_PATTERN=password,salt,pepper
- CADDY_HTTP_PORT=8071
oidc-test:
image: bornholm/oidc-test:v0.0.0-1-g936a77e
@ -58,16 +63,17 @@ services:
restart: unless-stopped
hydra:
image: docker.io/cadoles/hydra-v1:latest
image: cadoles/hydra-v1:v0.0.0-151-gc9c6fb1
volumes:
- ./containers/compose/hydra/clients.d:/etc/hydra/clients.d
- ./misc/compose/hydra/clients.d:/etc/hydra/clients.d
environment:
- LOG_LEAK_SENSITIVE_VALUES=true
- HYDRA_ALLOW_INSECURE=yes
- HYDRA_URLS_SELF_ISSUER=http://localhost:8081/
- HYDRA_URLS_LOGOUT=http://localhost:8080/logout
- HYDRA_URLS_LOGIN=http://localhost:8080/
- HYDRA_URLS_CONSENT=http://localhost:8080/connect/consent
- HYDRA_URLS_LOGOUT=http://localhost:8082/logout
- HYDRA_URLS_LOGIN=http://localhost:8082/
- HYDRA_URLS_CONSENT=http://localhost:8082/connect/consent
- HYDRA_URLS_ERROR=http://localhost:8082/error
- HYDRA_LEVEL=debug
- HYDRA_DSN=postgres://lasql:lasql@postgres:5432/hydra
- HYDRA_WAIT4X_DATABASE_DSN=postgres://lasql:lasql@postgres:5432/hydra?sslmode=disable
@ -78,7 +84,14 @@ services:
links:
- postgres
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:4444/.well-known/openid-configuration"]
test:
[
"CMD",
"wget",
"--spider",
"-q",
"http://127.0.0.1:4444/.well-known/openid-configuration",
]
interval: 10s
timeout: 10s
retries: 10
@ -93,7 +106,7 @@ services:
POSTGRES_DB: lasql
POSTGRES_PASSWORD: lasql
volumes:
- ./containers/compose/postgres/init-db.d:/docker-entrypoint-initdb.d/:ro
- ./misc/compose/postgres/init-db.d:/docker-entrypoint-initdb.d/:ro
- postgres:/var/lib/pgsql/data
- /etc/localtime:/etc/localtime:ro
@ -107,7 +120,7 @@ services:
PGADMIN_DEFAULT_PASSWORD: admin
PGADMIN_SERVER_JSON_FILE: /pgadminfile/server.json
volumes:
- ./containers/compose/pgadmin:/pgadminfile/:ro
- ./misc/compose/pgadmin:/pgadminfile/:ro
mariadb:
image: mariadb:10.10
environment:
@ -117,9 +130,15 @@ services:
MYSQL_ROOT_PASSWORD: lasql
TZ: Europe/Paris
volumes:
- ./containers/compose/mariadb/init-db.d:/docker-entrypoint-initdb.d/:ro
- ./misc/compose/mariadb/init-db.d:/docker-entrypoint-initdb.d/:ro
- mariadb:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
redis:
image: redis:7.2-rc2-alpine
environment:
- TZ=Europe/Paris
volumes:
- /etc/localtime:/etc/localtime:ro
volumes:
postgres:
mariadb:

View File

@ -0,0 +1,15 @@
CREATE TABLE IF NOT EXISTS usager (
email VARCHAR ( 100 ) UNIQUE NOT NULL,
password VARCHAR ( 255 ) NOT NULL,
salt VARCHAR (255),
lastname VARCHAR ( 255 ) NOT NULL,
firstname VARCHAR ( 255 ) NOT NULL
);
INSERT INTO usager (email, password, salt, lastname, firstname) VALUES
/* Bcrypt */
('test1@test.com', '$2y$10$cpgbS9OkiH9tQTh0QOyAgeWhyg1GSTIzjAlb8DXNW5VGM.2TTPMgK', '','Locke', 'John'),
/* SHA256 */
('test2@test.com', '34631c8f2a3e00900c463a00d5eab046e9060ac6ff752fc88a0ce549e7a500d2', 'cesaltestunexemple', 'Durand', 'Isabelle'),
/* SSHA */
('test3@test.com', '{SSHA}xip81P5Ga8dx07WZJ0Y9lJ2RGapjZXNhbHRlc3R1bmF1dHJlZXhlbXBsZQ==', '', 'Dupont', 'Henri');
GRANT ALL PRIVILEGES ON lasql.* TO lasql@localhost identified by 'lasql';

View File

@ -0,0 +1,15 @@
CREATE TABLE IF NOT EXISTS usager (
email VARCHAR ( 100 ) UNIQUE NOT NULL,
password VARCHAR ( 255 ) NOT NULL,
salt VARCHAR (255),
lastname VARCHAR ( 255 ) NOT NULL,
firstname VARCHAR ( 255 ) NOT NULL
);
INSERT INTO usager (email, password, salt, lastname, firstname) VALUES
/* Bcrypt */
('test1@test.com', '$2y$10$cpgbS9OkiH9tQTh0QOyAgeWhyg1GSTIzjAlb8DXNW5VGM.2TTPMgK', '','Locke', 'John'),
/* SHA256 */
('test2@test.com', '34631c8f2a3e00900c463a00d5eab046e9060ac6ff752fc88a0ce549e7a500d2', 'cesaltestunexemple', 'Durand', 'Isabelle'),
/* SSHA */
('test3@test.com', '{SSHA}xip81P5Ga8dx07WZJ0Y9lJ2RGapjZXNhbHRlc3R1bmF1dHJlZXhlbXBsZQ==', '', 'Dupont', 'Henri');
GRANT ALL PRIVILEGES ON DATABASE usager TO lasql

View File

@ -0,0 +1,16 @@
ARG NODE_OPTIONS="--openssl-legacy-provider"
ARG PHP_PKG_VERSION="8.1.22-r0"
ARG ADDITIONAL_PACKAGES="bash=5.2.15-r0 \
build-base=0.5-r3 \
php81-gd=${PHP_PKG_VERSION} \
php81-xsl=${PHP_PKG_VERSION} \
php81-pdo=${PHP_PKG_VERSION} \
php81-pgsql=${PHP_PKG_VERSION} \
php81-pdo_pgsql=${PHP_PKG_VERSION} \
php81-soap=${PHP_PKG_VERSION} \
php81-ldap=${PHP_PKG_VERSION} \
php81-pdo_mysql=${PHP_PKG_VERSION} \
php81-bcmath=${PHP_PKG_VERSION}"
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-base-2024.7.25-stable.959.7896915
RUN chown 1000:www-data -R /app

View File

@ -0,0 +1,17 @@
ARG NODE_OPTIONS="--openssl-legacy-provider"
ARG PHP_PKG_VERSION="8.1.22-r0"
ARG ADDITIONAL_PACKAGES="bash=5.2.15-r0 \
build-base=0.5-r3 \
php81-gd=${PHP_PKG_VERSION} \
php81-xsl=${PHP_PKG_VERSION} \
php81-pdo=${PHP_PKG_VERSION} \
php81-pgsql=${PHP_PKG_VERSION} \
php81-pdo_pgsql=${PHP_PKG_VERSION} \
php81-soap=${PHP_PKG_VERSION} \
php81-ldap=${PHP_PKG_VERSION} \
php81-pdo_mysql=${PHP_PKG_VERSION} \
php81-bcmath=${PHP_PKG_VERSION}"
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-standalone-2024.7.25-stable.959.7896915
RUN chown 1000:www-data -R /app
USER www-data

11336
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@
"@symfony/webpack-encore": "^4.1.2",
"core-js": "^3.23.0",
"regenerator-runtime": "^0.13.9",
"webpack": "^5.74.0",
"webpack": "^5.91.0",
"webpack-cli": "^4.10.0",
"webpack-notifier": "^1.15.0"
},
@ -20,7 +20,11 @@
"build": "encore production --progress"
},
"dependencies": {
"autoprefixer": "^10.4.4",
"add": "^2.0.6",
"bootstrap": "^5.2.3",
"jquery": "^3.6.1",
"postcss-loader": "^7.0.2",
"sass": "^1.56.2",
"sass-loader": "^13.2.0"
}

2
public/build/app/138.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,30 @@
/*!
* Bootstrap v5.2.3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
* Sizzle CSS Selector Engine v2.3.9
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2022-12-19
*/
/*!
* jQuery JavaScript Library v3.6.3
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
* Copyright OpenJS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2022-12-20T21:28Z
*/

1
public/build/app/3.js Normal file

File diff suppressed because one or more lines are too long

1
public/build/app/app.css Normal file
View File

@ -0,0 +1 @@
body{min-height:50vh}.wrapper,body{align-items:center;display:flex;justify-content:center}.wrapper{height:100%}form{border:1px solid grey;border-radius:5px;display:flex;flex-direction:column;padding:15px}.form-error{color:red}.lang{align-items:center;display:flex;justify-content:center}.lang .flag{height:auto;margin:5px;width:200px}

1
public/build/app/app.js Normal file
View File

@ -0,0 +1 @@
(self.webpackChunk=self.webpackChunk||[]).push([[143],{4180:(t,e,r)=>{var n={"./hello_controller.js":4695};function o(t){var e=i(t);return r(e)}function i(t){if(!r.o(n,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return n[t]}o.keys=function(){return Object.keys(n)},o.resolve=i,t.exports=o,o.id=4180},8205:(t,e,r)=>{"use strict";r.d(e,{Z:()=>n});const n={}},4695:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>s});r(8304),r(4812),r(489),r(1539),r(2419),r(8011),r(9070),r(6649),r(6078),r(2526),r(1817),r(9653),r(2165),r(6992),r(8783),r(3948);function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var r=0;r<e.length;r++){var o=e[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,(i=o.key,u=void 0,u=function(t,e){if("object"!==n(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,e||"default");if("object"!==n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(i,"string"),"symbol"===n(u)?u:String(u)),o)}var i,u}function u(t,e){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},u(t,e)}function c(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=l(t);if(e){var o=l(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return f(this,r)}}function f(t,e){if(e&&("object"===n(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}var s=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&u(t,e)}(l,t);var e,r,n,f=c(l);function l(){return o(this,l),f.apply(this,arguments)}return e=l,(r=[{key:"connect",value:function(){this.element.textContent="Hello Stimulus! Edit me in assets/controllers/hello_controller.js"}}])&&i(e.prototype,r),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),l}(r(6599).Qr)},9437:(t,e,r)=>{"use strict";(0,r(2192).x)(r(4180))}},t=>{t.O(0,[3],(()=>{return e=9437,t(t.s=e);var e}));t.O()}]);

7
public/build/app/bootstrap-css.css vendored Normal file

File diff suppressed because one or more lines are too long

1
public/build/app/bootstrap-css.js vendored Normal file
View File

@ -0,0 +1 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[113],{9218:()=>{}},s=>{var e;e=9218,s(s.s=e)}]);

1
public/build/app/bootstrap-js.js vendored Normal file
View File

@ -0,0 +1 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[144],{2576:(e,s,u)=>{u(3138)}},e=>{e.O(0,[138],(()=>{return s=2576,e(e.s=s);var s}));e.O()}]);

View File

@ -0,0 +1,30 @@
{
"entrypoints": {
"app": {
"js": [
"/build/app/runtime.js",
"/build/app/3.js",
"/build/app/app.js"
],
"css": [
"/build/app/app.css"
]
},
"bootstrap-css": {
"js": [
"/build/app/runtime.js",
"/build/app/bootstrap-css.js"
],
"css": [
"/build/app/bootstrap-css.css"
]
},
"bootstrap-js": {
"js": [
"/build/app/runtime.js",
"/build/app/138.js",
"/build/app/bootstrap-js.js"
]
}
}
}

View File

@ -0,0 +1,10 @@
{
"build/app/app.css": "/build/app/app.css",
"build/app/app.js": "/build/app/app.js",
"build/app/bootstrap-css.css": "/build/app/bootstrap-css.css",
"build/app/bootstrap-css.js": "/build/app/bootstrap-css.js",
"build/app/bootstrap-js.js": "/build/app/bootstrap-js.js",
"build/app/runtime.js": "/build/app/runtime.js",
"build/app/3.js": "/build/app/3.js",
"build/app/138.js": "/build/app/138.js"
}

View File

@ -0,0 +1 @@
(()=>{"use strict";var e,r={},t={};function o(e){var n=t[e];if(void 0!==n)return n.exports;var i=t[e]={exports:{}};return r[e].call(i.exports,i,i.exports,o),i.exports}o.m=r,e=[],o.O=(r,t,n,i)=>{if(!t){var l=1/0;for(s=0;s<e.length;s++){for(var[t,n,i]=e[s],a=!0,u=0;u<t.length;u++)(!1&i||l>=i)&&Object.keys(o.O).every((e=>o.O[e](t[u])))?t.splice(u--,1):(a=!1,i<l&&(l=i));if(a){e.splice(s--,1);var f=n();void 0!==f&&(r=f)}}return r}i=i||0;for(var s=e.length;s>0&&e[s-1][2]>i;s--)e[s]=e[s-1];e[s]=[t,n,i]},o.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return o.d(r,{a:r}),r},o.d=(e,r)=>{for(var t in r)o.o(r,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={666:0};o.O.j=r=>0===e[r];var r=(r,t)=>{var n,i,[l,a,u]=t,f=0;if(l.some((r=>0!==e[r]))){for(n in a)o.o(a,n)&&(o.m[n]=a[n]);if(u)var s=u(o)}for(r&&r(t);f<l.length;f++)i=l[f],o.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return o.O(s)},t=self.webpackChunk=self.webpackChunk||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})()})();

View File

@ -0,0 +1,13 @@
{
"entrypoints": {
"theme": {
"js": [
"/build/theme/runtime.js",
"/build/theme/theme.js"
],
"css": [
"/build/theme/theme.css"
]
}
}
}

View File

@ -0,0 +1,5 @@
{
"build/theme/theme.css": "/build/theme/theme.css",
"build/theme/theme.js": "/build/theme/theme.js",
"build/theme/runtime.js": "/build/theme/runtime.js"
}

View File

@ -0,0 +1 @@
(()=>{"use strict";var e,r={},o={};function t(e){var n=o[e];if(void 0!==n)return n.exports;var l=o[e]={exports:{}};return r[e](l,l.exports,t),l.exports}t.m=r,e=[],t.O=(r,o,n,l)=>{if(!o){var a=1/0;for(p=0;p<e.length;p++){for(var[o,n,l]=e[p],i=!0,f=0;f<o.length;f++)(!1&l||a>=l)&&Object.keys(t.O).every((e=>t.O[e](o[f])))?o.splice(f--,1):(i=!1,l<a&&(a=l));if(i){e.splice(p--,1);var u=n();void 0!==u&&(r=u)}}return r}l=l||0;for(var p=e.length;p>0&&e[p-1][2]>l;p--)e[p]=e[p-1];e[p]=[o,n,l]},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={666:0};t.O.j=r=>0===e[r];var r=(r,o)=>{var n,l,[a,i,f]=o,u=0;if(a.some((r=>0!==e[r]))){for(n in i)t.o(i,n)&&(t.m[n]=i[n]);if(f)var p=f(t)}for(r&&r(o);u<a.length;u++)l=a[u],t.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return t.O(p)},o=self.webpackChunk=self.webpackChunk||[];o.forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o))})()})();

View File

@ -0,0 +1 @@
input[type=radio]:checked~.app-item{--tw-shadow:0 10px 15px -3px rgba(22,78,99,.3),0 4px 6px -4px rgba(22,78,99,.3);background-color:rgba(76,233,14,.15)}

View File

@ -0,0 +1 @@
(self.webpackChunk=self.webpackChunk||[]).push([[505],{755:(s,e,k)=>{k(634),k(681)},634:()=>{},681:(s,e,k)=>{"use strict";k.r(e)}},s=>{var e;e=755,s(s.s=e)}]);

View File

@ -0,0 +1,2 @@
require('./theme.js')
require('./theme.css')

4
public/theme.css Normal file
View File

@ -0,0 +1,4 @@
input[type="radio"]:checked ~ .app-item {
--tw-shadow: 0 10px 15px -3px rgb(22 78 99 / 0.3), 0 4px 6px -4px rgb(22 78 99 / 0.3);
background-color: rgb(76 233 14 / 0.15);
}

172
readme.md
View File

@ -3,105 +3,65 @@
Une [LoginApp](https://www.ory.sh/docs/hydra/concepts/login) pour le serveur OpenID Connect [Ory/Hydra](https://github.com/ory/hydra).
Elle permet de se connecter à une base de donnée et de vérifier un mot de passe donné sur une mire locale puis d'aller chercher des données demandées
## Usage
## Image
Dans le cas d'utilsation du thème pour personaliser la page de login
- L'image standalone est construite en utilisant l'utilisateur `www-data` pour lancer supervisor (qui va lancer le process php-fpm et caddy, avec ce même user)
- C'est pour cela qu'on fini par "USER www-data" à la fin de `misc/images/hydra-oidc-standalone/Dockerfile`, sinon le conteneur `hydra-sql` ne tournera pas
### Développement
## Configuration
Un environnement Docker Compose est proposé comme support de développement.
### Variables d'environnement
Afin de démarrer celui-ci:
| Variable | Description | Valeur par défaut | Utilisation |
| ----------------------------------- | ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------- |
| `APP_ENV` | Environnement symfony | prod | dev:prod |
| `APP_DEBUG` | Console de debug symofny | false | true:false |
| `HYDRA_ADMIN_BASE_URL` | Url d'admin Hydra ou dispatcher | http://hydra:4445 | obligatoire |
| `BASE_URL` | Url d'accès | http://localhost:8080 | obligatoire |
| `DSN_REMOTE_DATABASE` | DSN de la BDD | postgresql://lasql:lasql@postgres:5432/lasql?serverVersion=15&chartset=utf8 | |
| `DB_USER` | User de connection à la BDD | lasql | obligatoire |
| `DB_PASSWORD` | PAssword de l'utilisateur de la BDD | lasql | obligatoire |
| `APP_LOCALES` | Langues disponibles dans l'application | fr,en | obligatoire |
| `HASH_ALGO_LEGACY` | ALgorythme de Hashage par défaut | sha256 | |
| `SECURITY_PATTERN` | Séquence à employer pour le hashage du mot de passe | password,salt,pepper | obligatoire |
| `PEPPER` | Pepper utilisé pour le Hashage | | |
| `REDIS_DSN` | DSN du serveur Redis | redis://redis:6379 | obligatoire |
| `URL_LINK` | Url pouvant être utilisée dans les liens des templates | | |
| `CADDY_HTTP_PORT` | Port d'écoute de l'application | 8080 | |
| `CADDY_HTTPS_PORT` | Port d'écoute de l'application | 8443 | |
| `CADDY_DATA_FS` | Chemin vers le répertoire utilisé pour le stockage de caddy | /tmp/caddy | |
| `CADDY_APP_ROOT_PUBLIC` | Chemin vers le répertoire utilisé pour servire les fichiers | /app/public | |
| `CADDY_PHP_INDEX` | Nom du fichier a utiliser pour servir l'application | index.php | |
| `CADDY_APP_UPSTREAM_BACKEND_SERVER` | Adresse du serveur backend FastCGI PHP vers lequel doit être diriger les requêtes PHP. | unix//tmp/php-fpm.sock | |
| `CADDY_TRUSTED_PROXIES` | Spécification des adresses IP /plage IP étant sur pour transmettre les requetes HTTP | private_ranges | |
| `CADDY_LOG_FORMAT` | Spécification du format des logs | console | |
| `CADDY_LOG_LEVEL` | Spécification du niveau de verbosité des logs | INFO | |
| `PHP_FPM_MEMORY_LIMIT` | Spécification de la mémoire limite maximale alloué au processus PHP-FPM | 128M | |
| `PHP_FPM_DISPLAY_ERRORS` | Afficahge des erreurs dans la sortie du serveur web. | off | |
| `PHP_FPM_LISTEN` | Spécification du serveur sur lequel PHP FPM écoute les connexion. | /tmp/php-fpm.sock | |
| `PHP_FPM_LOG_LEVEL` | Spécification du niveau de verbosité des logs PHP-FPM | notice | |
| `PHP_FPM_PM` | Définition du mode de gestion des processus PHP-FPM | dynamic | |
| `PHP_FPM_PM_MAX_CHILDREN` | Définition du nombre maximum de processus enfants que PHP-FPM peut générer | 5 | |
| `PHP_FPM_PM_START_SERVERS` | Définition du nombre de processus enfants que PHP-FPM va démarrer au lancement de PHP-FPM | 2 | |
| `PHP_FPM_PM_MIN_SPARE_SERVERS` | Définition du nombre minimum de processus enfants inactifs que PHP-FPM doit conserver en réserve. | 1 | |
| `PHP_FPM_PM_MAX_SPARE_SERVERS` | Définition du nombre maximum de processus enfants inactifs que PHP-FPM peut conserver en réserve. | 3 | |
| `XDG_DATA_HOME` | Définition du répertoire de base pour le stockage des données spécifiques à l'utilisateur. | /tmp/data | |
```bash
### Algorithmes de hashage compatibles
# Démarrer l'environnement docker-compose
make up
La login app est compatible par défaut avec toutes les méthodes de hashage de PHP et avec SSHA. Aucune configuration supplémentaire n'est nécessaire.
# fermer l'environnement
make down
### Pattern de hashage
```
Définir dans la variable `SECURITY_PATTERN` le pattern utilisé avec les mots clés: password | salt | pepper séparé par des virgules pour représenter la séquence à employer pour le hashage du mot de passe.
Exemple : `SECURITY_PATTERN="salt,password,pepper"`
## Variables d'environnement
```
DB_USER="lasql"
DB_PASSWORD="lasql"
### Schéma de base de donnée
ISSUER_URL="http://localhost:8000"
BASE_URL='http://localhost:8080'
# connexion hydra
HYDRA_ADMIN_BASE_URL='http://hydra:4445'
DSN_REMOTE_DATABASE="pgsql:host='postgres';port=5432;dbname=lasql"
APP_LOCALES="fr,en"
HASH_ALGO_LEGACY="sha256, bcrypt"
SECURITY_PATTERN="password,salt,pepper"
PEPPER=
```
## Tests password
Permet d'adapter les requetes SQL à la base de donnée utilisée en indiquant les noms de colonnes de celle-ci.
Dans le cas où plusieurs méthodes de hashage cohabitent (migration de méthode par exemple dans l'application principale), toutes les méthode seront testées pour comparer les hashs jusqu'à un succès
## Pattern de hashage
```
Définir le pattern utilisé avec les mots clés autorisé: password | salt | pepper dans un string, séparé par des virgules pour représenter la séquence à employer pour le hashage du mot de passe.
```
### Postgres
```
Les mot de passe inscrits en bdd sont hachés en tenant compte du salt si non vide (cf données de la bdd plus bas) et du pepper inscrit en variable d'environnement (généré avec : bin2hex(random_bytes(32) pour l'exemple), le pepper peut être vide
Indiquer le nom de la colonne contenant le salt:
Il faut inscrire dans slq_login_configuration salt_column_name: salt
Indiquer le pepper utilisé:
et conserver le pepper dans service.yaml
env(PEPPER): "257d62c24cd352c21b51c26dba678c8ff05011a89022aec106185bf67c69aa8b"
```
### mariadb
```
En plus de tester la connexion à une différente base de donnée, on teste le hashage de password sans salt ni pepper
Il faut mettre dans sql_login_configuration salt_column_name: ~
et dans service.yaml
env(PEPPER): ~
```
### test connexion mariadb
```
Modifier la variable d'environnement avec cette valeur
DSN_REMOTE_DATABASE="mysql:host=mariadb;port=3306;dbname=lasql;"
```
## Données de test
### postgres
```
|email|password|salt|lastname|firstname
|test1@test.com| 8ad4025044b77ae6a5e3fcf99e53e44b15db9a4ecf468be21cbc6b9fbdae6d9f| cesaltestunexemple| Locke|John|
|test2@test.com| 50626fa21f45a275cea0efff13ff78fd02234cade322da08b7191c7e9150141d| NULL| Dubois| Angela|
|test3@test.com| 504ae1c3e2f5fdaf41f868164dabcef21e17059f5f388b452718a1ce92692c67| cesaltestunautreexemple| Dupont| Henri|
|test4@test.com| $2a$12$91AHN7WFXieeadvUfZ88mO.9N7oS5adeXbdERnRno9oLAbqqDW4IG| NULL| Durand|Isabelle|
A noter que le hash de test4 est en bcrypt
```
### mariadb (sans salt)
```
|email|password|lastname|firstname
|test1@test.com| 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92| Sassot|Charles|
|test2@test.com| 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92| Dubois| Angela|
|test3@test.com| 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92| Dupont| Henri|
|test4@test.com| 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92| Durand|Isabelle|
```
Mot de passe = '123456' hashé en par sha256
## configuration
Permet d'adapter les requetes SQL en indiquant les noms de colonnes nécessaires.
pdo_configuration/pdo.yaml
```
```yaml
# config/sql_login_configuration/sql_login.yaml
sql_login:
login_column_name: email
password_column_name: password
@ -111,15 +71,41 @@ sql_login:
- email
- lastname
- firstname
subject_rewrite_expression: 'firstname~"."~lastname~"@exemple.com"'
```
#### Conteneurs
## Environnement de développement
### Tester
Se rendre sur [http://localhost:8000/](http://localhost:8000/) et cliquer `Login` pour commencer une nouvelle connexion.
3 utilisateurs d'exemple sont disponible pour les tests:
| Login | Mot de passe | Algorithme |
|-------|--------------|------------|
| test1@test.com | 123456 | Bcrypt |
| test2@test.com | 123456 | SHA256 |
| test3@test.com | 123456 | SSHA |
### Base de donnée
2 bases de données différentes sont disponible pour les tests.
Pour choisir la base de donnée à utiliser, modifier les d'environnement relatives à la base de donnée.
- **URL Postgres**: `postgresql://lasql:lasql@mariadb:3306/lasql?serverVersion=15&chartset=utf8`
- **URL Mariadb**: `mysql://lasql:lasql@postgres:5432/lasql`
### Redis
La variable `REDIS_DSN` est obligatoire. Hydra-sql utilise dorénavant Redis pour le stockage du cache et des session. Compatible Redis Sentinel
ex : `'redis:?host[redis1:26379]&host[redis2:26379]&host[redis3:26379]&redis_sentinel=mymaster'`
### Liste des ports
| Nom | Description | Port(s) hôte utilisé(s) |
|---|-----------|------------------|
| ----------- | -------------------------------------------------------------------------- | ----------------------- |
| `oidc-test` | Application factice permettant de tester l'authentification OpenID Connect | `8080` |
| `hydra` | Serveur Ory/Hydra | `8081` |
| `hydra-sql` | Login/Consent/Logout App (ce projet) | `8082` |
|`postgres`| Base de donnée postgres support du test et pour hydra|`5432`
|`mariadb`| Base de donnée mariadb support du test|`3306`
|`pgadmin`| pour administrer la base de donnée |`8085`
| `postgres` | Base de donnée postgres support du test et pour hydra | `5432` |
| `mariadb` | Base de donnée mariadb support du test | `3306` |
| `pgadmin` | pour administrer la base de donnée | `8085` |

View File

@ -0,0 +1,23 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\ErrorHandler\Exception\FlattenException;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class CustomErrorController extends AbstractController
{
#[Route(path: '/error', name: 'custom_error_controller')]
public function show(FlattenException $exception): Response
{
$statusCode = $exception->getStatusCode();
$message = $exception->getMessage();
return $this->render('error.html.twig', [
'statusCode' => $statusCode,
'message' => $message,
]);
}
}

View File

@ -4,6 +4,7 @@ namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
@ -17,7 +18,7 @@ class LocaleController extends AbstractController
}
#[Route(path: 'locale/{locale?}', name: 'locale_change')]
public function changeLocal(?string $locale, Request $request)
public function changeLocal(?string $locale, Request $request): RedirectResponse
{
if (empty($locale)) {
$locale = $this->params->get('default_locale');

View File

@ -5,17 +5,21 @@ namespace App\Controller;
use App\Entity\User;
use App\Hydra\Client;
use App\Hydra\HydraService;
use App\SQLLogin\SQLLoginRequest;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use Symfony\Component\Finder\Exception\AccessDeniedException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
class MainController extends AbstractController
{
public HydraService $hydra;
public Client $client;
public SessionInterface $session;
private HydraService $hydra;
private Client $client;
private SessionInterface $session;
public function __construct(SessionInterface $session, HydraService $hydra, Client $client)
{
@ -25,18 +29,44 @@ class MainController extends AbstractController
}
#[Route('/', name: 'app_home')]
public function home(Request $request)
public function home(Request $request): RedirectResponse
{
return $this->hydra->handleLoginRequest($request);
}
#[Route('/connect/login-accept', name: 'app_login_accept')]
public function loginAccept(Request $request)
/*
* Route de Healthcheck (notament pour kubernetes)
*/
#[Route('/health', name: 'health')]
public function health(Request $request): Response
{
return new Response('healthy', 200);
}
#[Route('/connect/login-accept', name: 'app_login_accept', methods: ['GET'])]
public function loginAccept(SQLLoginRequest $sqlLoginRequest): RedirectResponse
{
/** @var User */
$user = $this->getUser();
$loginAcceptRes = $this->client->acceptLoginRequest($this->session->get('challenge'), [
'subject' => $user->getLogin(),
if (!$user instanceof User) {
throw new AccessDeniedException();
}
$challenge = $this->session->get('challenge');
if (!$challenge) {
return new RedirectResponse($this->getParameter('issuer_url'));
}
$subject = $user->getLogin();
$subjectRewriteExpression = $sqlLoginRequest->getSubjectRewriteExpression();
if (null != $subjectRewriteExpression) {
$expressionLanguage = new ExpressionLanguage();
$subject = $expressionLanguage->evaluate($subjectRewriteExpression, $user->getAttributes());
}
$loginAcceptRes = $this->client->acceptLoginRequest($challenge, [
'subject' => $subject,
'remember' => true,
])->toArray();
@ -44,7 +74,7 @@ class MainController extends AbstractController
}
#[Route('/connect/consent', name: 'app_consent')]
public function consent(Request $request)
public function consent(Request $request): RedirectResponse
{
return $this->hydra->handleConsentRequest($request);
}

View File

@ -17,7 +17,7 @@ use Symfony\Contracts\Translation\TranslatorInterface;
class SecurityController extends AbstractController
{
#[Route('/login', name: 'app_login')]
public function login(ParameterBagInterface $params, AuthenticationUtils $authenticationUtils, Request $request, TranslatorInterface $trans): Response
public function login(ParameterBagInterface $params, AuthenticationUtils $authenticationUtils, Request $request, TranslatorInterface $trans): Response|RedirectResponse
{
// Si l'utilisateur est déjà connecté on le renvoie sur la page du site demandeur
if ($this->getUser()) {
@ -29,16 +29,24 @@ class SecurityController extends AbstractController
$error = $authenticationUtils->getLastAuthenticationError();
if ($error) {
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_LOGIN)) {
$loginForm->get('login')->addError(new FormError($trans->trans('error.login', [], 'messages')));
$loginForm->addError(new FormError($trans->trans('error.login', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_LOGIN);
}
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_PASSWORD)) {
$loginForm->get('password')->addError(new FormError($trans->trans('error.password', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_PASSWORD);
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_PDO)) {
$loginForm->addError(new FormError($trans->trans('error.pdo', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_PDO);
}
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_SQL_LOGIN)) {
$loginForm->addError(new FormError($trans->trans('error.sql_login', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_SQL_LOGIN);
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_CONFIGURATION)) {
$loginForm->addError(new FormError($trans->trans('error.configuration', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_CONFIGURATION);
}
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_DATA_TO_FETCH_CONFIGURATION)) {
$loginForm->addError(new FormError($trans->trans('error.data_to_fetch_configuration', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_DATA_TO_FETCH_CONFIGURATION);
}
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_SECURITY_PATTERN_CONFIGURATION)) {
$loginForm->addError(new FormError($trans->trans('error.security_pattern_configuration', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_SECURITY_PATTERN_CONFIGURATION);
}
}
@ -48,7 +56,7 @@ class SecurityController extends AbstractController
}
#[Route('/logout', name: 'logout')]
public function logout(Request $request)
public function logout(Request $request): void
{
}
}

View File

@ -19,6 +19,7 @@ class SQLLoginConfiguration implements ConfigurationInterface
->arrayNode(SQLLoginRequest::DATA_TO_FETCH)
->scalarPrototype()->end()
->end()
->scalarNode(SQLLoginRequest::SUBJECT_REWRITE_EXPRESSION)->defaultNull()->end()
->end();
return $treeBuilder;

View File

@ -6,7 +6,7 @@ use Symfony\Component\Security\Core\User\UserInterface;
class User implements UserInterface
{
protected array $attributes = [];
private array $attributes = [];
private string $login;
private string $password;
private bool $rememberMe;

View File

@ -16,7 +16,7 @@ class LocaleSubscriber implements EventSubscriberInterface
$this->defaultLocale = $defaultLocale;
}
public function onKernelRequest(RequestEvent $event)
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
if (!$request->hasPreviousSession()) {
@ -32,7 +32,7 @@ class LocaleSubscriber implements EventSubscriberInterface
}
}
public static function getSubscribedEvents()
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => [['onKernelRequest', 20]],

View File

@ -2,6 +2,7 @@
namespace App\Hydra;
use App\Entity\User;
use App\Hydra\Exception\InvalidChallengeException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Exception\BadRequestException;
@ -9,21 +10,24 @@ use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class HydraService extends AbstractController
{
public SessionInterface $session;
public Client $client;
public TokenStorageInterface $tokenStorage;
private SessionInterface $session;
private Client $client;
private TokenStorageInterface $tokenStorage;
private string $baseUrl;
public function __construct(Client $client, SessionInterface $session, TokenStorageInterface $tokenStorage)
public function __construct(Client $client, SessionInterface $session, TokenStorageInterface $tokenStorage, string $baseUrl)
{
$this->session = $session;
$this->client = $client;
$this->tokenStorage = $tokenStorage;
$this->baseUrl = $baseUrl;
}
public function handleLoginRequest(Request $request)
public function handleLoginRequest(Request $request): RedirectResponse
{
$challenge = $request->query->get('login_challenge');
// S'il n'y a pas de challenge, on déclenche une bad request
@ -35,15 +39,15 @@ class HydraService extends AbstractController
$loginRequestInfo = $res->toArray();
if (200 !== $res->getStatusCode()) {
$this->session->clear();
throw new BadRequestException('pas de code 200');
throw new BadRequestException();
}
// si le challenge est validé par hydra, on le stocke en session pour l'utiliser par la suite et on redirige vers une route interne protégée qui va déclencher l'identification FranceConnect
$this->session->set('challenge', $loginRequestInfo['challenge']);
return $this->redirectToRoute('app_login');
return new RedirectResponse($this->baseUrl . '/connect/login-accept');
}
public function handleConsentRequest(Request $request)
public function handleConsentRequest(Request $request): RedirectResponse
{
$challenge = $request->query->get('consent_challenge');
if (!$challenge) {
@ -51,8 +55,10 @@ class HydraService extends AbstractController
}
$consentRequestInfo = $this->client->fetchConsentRequestInfo($challenge)->toArray();
/** @var User */
$user = $this->getUser();
if (!$user instanceof User) {
throw new AccessDeniedException('Utilisateur non autorisé.');
}
$consentAcceptResponse = $this->client->acceptConsentRequest($consentRequestInfo['challenge'], [
'grant_scope' => $consentRequestInfo['requested_scope'],
'session' => [
@ -63,7 +69,7 @@ class HydraService extends AbstractController
return new RedirectResponse($consentAcceptResponse['redirect_to']);
}
public function handleLogoutRequest(Request $request)
public function handleLogoutRequest(Request $request): RedirectResponse
{
$logoutChallenge = $request->get('logout_challenge');
if (empty($logoutChallenge)) {

View File

@ -4,6 +4,6 @@ namespace App\SQLLogin\Exception;
use Exception;
class InvalidSQLLoginConfigurationException extends Exception
class DataToFetchConfigurationException extends Exception
{
}

View File

@ -0,0 +1,9 @@
<?php
namespace App\SQLLogin\Exception;
use Exception;
class DatabaseConnectionException extends Exception
{
}

View File

@ -0,0 +1,9 @@
<?php
namespace App\SQLLogin\Exception;
use Exception;
class LoginElementsConfigurationException extends Exception
{
}

View File

@ -4,6 +4,6 @@ namespace App\SQLLogin\Exception;
use Exception;
class InvalidSQLLoginException extends Exception
class NullDataToFetchException extends Exception
{
}

View File

@ -0,0 +1,9 @@
<?php
namespace App\SQLLogin\Exception;
use Exception;
class NullPasswordColumnNameException extends Exception
{
}

View File

@ -0,0 +1,9 @@
<?php
namespace App\SQLLogin\Exception;
use Exception;
class SecurityPatternConfigurationException extends Exception
{
}

View File

@ -7,32 +7,14 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class SQLLoginConnect extends AbstractController
{
/**
* @var Singleton
* @static
*/
private static $_instance = null;
/**
* Constructeur de la classe
*
* @param void
*
* @return void
*/
private function __construct()
{
}
/**
* Méthode qui crée l'unique instance de la classe
* si elle n'existe pas encore puis la retourne.
*
* @param void
*
* @return SQLLoginConnect
*/
public static function getInstance()
public static function getInstance(): SQLLoginConnect
{
if (is_null(self::$_instance)) {
self::$_instance = new SQLLoginConnect();
@ -41,7 +23,7 @@ class SQLLoginConnect extends AbstractController
return self::$_instance;
}
public function connect($urlDatabase, $dbUser, $dbPassword)
public function connect($urlDatabase, $dbUser, $dbPassword): PDO
{
return new PDO($urlDatabase, $dbUser, $dbPassword);
}

View File

@ -2,6 +2,8 @@
namespace App\SQLLogin;
use App\SQLLogin\Exception\NullDataToFetchException;
class SQLLoginRequest
{
public const DATA_TO_FETCH = 'data_to_fetch';
@ -10,11 +12,12 @@ class SQLLoginRequest
public const PASSWORD_COLUMN_NAME = 'password_column_name';
public const PASSWORD_NEED_UPGRADE = 'password_need_upgrade';
public const TABLE_NAME = 'table_name';
public const SUBJECT_REWRITE_EXPRESSION = 'subject_rewrite_expression';
protected array $config;
protected string $dsn;
protected string $user;
protected string $password;
private array $config;
private string $dsn;
private string $user;
private string $password;
public function __construct(string $dsn, string $user, string $password, array $config = [])
{
@ -64,12 +67,22 @@ class SQLLoginRequest
return $this->config[self::DATA_TO_FETCH];
}
public function getRequestScope()
public function getSubjectRewriteExpression(): ?string
{
return $this->config[self::SUBJECT_REWRITE_EXPRESSION];
}
public function getRequestScope(): string
{
$scope = '';
if (!$this->config[self::DATA_TO_FETCH]) {
throw new NullDataToFetchException();
}
foreach ($this->config[self::DATA_TO_FETCH] as $data) {
$scope .= $data.',';
}
// On enlève la dernière virgule
$scope = substr($scope, 0, -1);
return 'SELECT '.$scope.' FROM '.$this->getTableName().' WHERE '.$this->getLoginColumnName().' = :'.$this->getLoginColumnName().';';
@ -79,7 +92,7 @@ class SQLLoginRequest
* Construction de la string pour la requête préparée selon la configuration yaml
* intègre la récupération du mot de passe hashé, du salt et de besoin d'upgrade de la méthode de hashage
*/
public function getRequestPassword()
public function getRequestPassword(): string
{
$fields = $this->getPasswordColumnName();
if (!empty($this->getSaltColumnName())) {

View File

@ -2,8 +2,9 @@
namespace App\Security\Hasher;
use App\SQLLogin\Exception\InvalidSQLLoginConfigurationException;
use App\SQLLogin\Exception\InvalidSQLPasswordException;
use App\SQLLogin\Exception\SecurityPatternConfigurationException;
use Psr\Log\LoggerInterface;
use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException;
use Symfony\Component\PasswordHasher\Hasher\CheckPasswordLengthTrait;
use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface;
@ -19,7 +20,7 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
protected array $hashAlgoLegacy;
protected array $securityPattern;
public function __construct(?string $pepper, string $hashAlgoLegacy, string $securityPattern)
public function __construct(?string $pepper, string $hashAlgoLegacy, string $securityPattern, private LoggerInterface $loggerInterface)
{
$this->pepper = $pepper;
$this->hashAlgoLegacy = explode(',', $hashAlgoLegacy);
@ -29,7 +30,7 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
/**
* Pas utilisé, mais on doit le garder pour le implements
*/
public function hash(string $plainPassword, string $salt = null): string
public function hash(string $plainPassword, ?string $salt = null): string
{
if ($this->isPasswordTooLong($plainPassword)) {
throw new InvalidPasswordException();
@ -38,7 +39,7 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
return hash($plainPassword.$salt, $this->hashAlgoLegacy[0]);
}
public function verify(string $hashedPassword, string $plainPassword, string $salt = null): bool
public function verify(string $hashedPassword, string $plainPassword, ?string $salt = null): bool
{
if ('' === $plainPassword || $this->isPasswordTooLong($plainPassword)) {
return false;
@ -46,17 +47,20 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
$completedPassword = $this->getPasswordToHash($plainPassword, $salt);
foreach ($this->hashAlgoLegacy as $algo) {
if ($this->isObsoleteAlgo($algo)) {
if (hash_equals(hash($algo, $completedPassword), $hashedPassword)) {
if (str_starts_with($hashedPassword, '{SSHA}') && $this->compareSsha($hashedPassword, $plainPassword)) {
return true;
}
} else {
if (password_verify($completedPassword, $hashedPassword)) {
return true;
}
foreach (hash_algos() as $algo) {
if (hash_equals($hashedPassword, hash($algo, $completedPassword))) {
return true;
}
}
throw new InvalidSQLPasswordException();
}
@ -72,13 +76,8 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
/**
* Retourne la string à hasher en fonction du pattern indiqué
*
* @param mixed $plainTextPassword
* @param mixed $salt
*
* @return string
*/
protected function getPasswordToHash($plainTextPassword, $salt)
protected function getPasswordToHash(string $plainTextPassword, ?string $salt = null): string
{
$arrayRef = [
self::PASSWORD_PATTERN => $plainTextPassword,
@ -88,7 +87,8 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
foreach ($this->securityPattern as $term) {
if (self::PEPPER_PATTERN !== $term && self::PASSWORD_PATTERN !== $term && self::SALT_PATTERN !== $term) {
throw new InvalidSQLLoginConfigurationException();
$this->loggerInterface->critical('La configuration du security pattern est invalide, les termes autorisés sont : '.self::PASSWORD_PATTERN.', '.self::SALT_PATTERN.' et '.self::PEPPER_PATTERN);
throw new SecurityPatternConfigurationException();
}
}
$completedPlainPassword = '';
@ -98,4 +98,17 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
return $completedPlainPassword;
}
protected function compareSsha(string $hashPassword, string $plainPassword): bool
{
$base_64_hash_with_salt = substr($hashPassword, 6);
$hash_with_salt = base64_decode($base_64_hash_with_salt);
$hash = substr($hash_with_salt, 0, 20);
$salt = substr($hash_with_salt, 20);
// hash given password
$hash_given = sha1($plainPassword.$salt, true);
return $hash == $hash_given;
}
}

View File

@ -5,38 +5,40 @@ namespace App\Security;
use App\Entity\User;
use App\Security\Hasher\PasswordEncoder;
use App\Service\SQLLoginService;
use App\SQLLogin\Exception\DatabaseConnectionException;
use App\SQLLogin\Exception\DataToFetchConfigurationException;
use App\SQLLogin\Exception\InvalidSQLPasswordException;
use PDOException;
use App\SQLLogin\Exception\LoginElementsConfigurationException;
use App\SQLLogin\Exception\SecurityPatternConfigurationException;
use Exception;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Http\Authenticator\AbstractAuthenticator;
use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport;
class SQLLoginUserAuthenticator extends AbstractAuthenticator
class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
{
public const LOGIN_ROUTE = 'app_login';
public const ERROR_LOGIN = 'error_login';
public const ERROR_PASSWORD = 'error_password';
public const ERROR_PDO = 'error_pdo';
public const ERROR_SQL_LOGIN = 'error_sql_login';
public const ERROR_CONFIGURATION = 'error_configuration';
public const ERROR_DATA_TO_FETCH_CONFIGURATION = 'error_data_to_fetch_configuration';
public const ERROR_SECURITY_PATTERN_CONFIGURATION = 'error_security_pattern_configuration';
protected string $baseUrl;
private string $baseUrl;
private SQLLoginService $sqlLoginService;
private UrlGeneratorInterface $router;
private PasswordEncoder $passwordHasher;
public function __construct(string $baseUrl, SQLLoginService $sqlLoginService, UrlGeneratorInterface $router, PasswordEncoder $passwordHasher)
public function __construct(string $baseUrl, SQLLoginService $sqlLoginService, PasswordEncoder $passwordHasher)
{
$this->baseUrl = $baseUrl;
$this->sqlLoginService = $sqlLoginService;
$this->router = $router;
$this->passwordHasher = $passwordHasher;
}
@ -50,34 +52,43 @@ class SQLLoginUserAuthenticator extends AbstractAuthenticator
return self::LOGIN_ROUTE === $request->attributes->get('_route') && $request->isMethod('POST');
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey): ?Response
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey): RedirectResponse
{
return new RedirectResponse($this->baseUrl.'/connect/login-accept');
}
public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response
public function onAuthenticationFailure(Request $request, AuthenticationException $exception): RedirectResponse
{
$request->getSession()->set(Security::AUTHENTICATION_ERROR, $exception);
return new RedirectResponse(
$this->router->generate('app_login')
);
return new RedirectResponse($this->baseUrl.'/login');
}
public function authenticate(Request $request): Passport
public function authenticate(Request $request): SelfValidatingPassport
{
$form = $request->request->get('login');
$login = $form['login'];
$plaintextPassword = $form['password'];
$rememberMe = isset($form['_remember_me']) ? true : false;
$session = $request->getSession();
try {
// requête préparée
list($remoteHashedPassword, $remoteSalt) = $this->sqlLoginService->fetchPassword($login);
} catch (PDOException $e) {
$request->getSession()->set(self::ERROR_SQL_LOGIN, true);
} catch (DatabaseConnectionException $e) {
$session->set(self::ERROR_PDO, true);
throw new AuthenticationException();
} catch (LoginElementsConfigurationException $e) {
$session->set(self::ERROR_CONFIGURATION, true);
throw new AuthenticationException();
} catch (Exception $exception) {
$request->getSession()->set(self::ERROR_LOGIN, true);
throw new AuthenticationException();
}
if ($remoteHashedPassword) {
if (null === $remoteHashedPassword) {
$remoteHashedPassword = '';
}
try {
// Comparaison remote hash et hash du input password + salt
$this->passwordHasher->verify($remoteHashedPassword, $plaintextPassword, $remoteSalt);
@ -95,14 +106,22 @@ class SQLLoginUserAuthenticator extends AbstractAuthenticator
return $passport;
} catch (InvalidSQLPasswordException $e) {
$request->getSession()->set(self::ERROR_PASSWORD, true);
$session->set(self::ERROR_LOGIN, true);
throw new AuthenticationException();
} catch (PDOException $e) {
$request->getSession()->set(self::ERROR_SQL_LOGIN, true);
} catch (DataToFetchConfigurationException $e) {
$session->set(self::ERROR_DATA_TO_FETCH_CONFIGURATION, true);
throw new AuthenticationException();
} catch (DatabaseConnectionException $e) {
$session->set(self::ERROR_PDO, true);
throw new AuthenticationException();
} catch (SecurityPatternConfigurationException $e) {
$session->set(self::ERROR_SECURITY_PATTERN_CONFIGURATION, true);
throw new AuthenticationException();
}
}
$request->getSession()->set(self::ERROR_LOGIN, true);
throw new AuthenticationException();
protected function getLoginUrl(Request $request): string
{
return $this->baseUrl.'/login';
}
}

View File

@ -31,7 +31,7 @@ class SQLLoginUserProvider implements UserProviderInterface
return $this->loadUserByIdentifier($username, null);
}
public function refreshUser(UserInterface $user)
public function refreshUser(UserInterface $user): UserInterface|null
{
if (!$user instanceof User) {
throw new UnsupportedUserException(sprintf('Invalid user class "%s".', get_class($user)));
@ -40,7 +40,7 @@ class SQLLoginUserProvider implements UserProviderInterface
return $this->loadUserByIdentifier($user->getUserIdentifier(), $user);
}
public function supportsClass(string $class)
public function supportsClass(string $class): bool
{
return User::class === $class || is_subclass_of($class, User::class);
}

View File

@ -2,68 +2,96 @@
namespace App\Service;
use App\SQLLogin\Exception\DatabaseConnectionException;
use App\SQLLogin\Exception\DataToFetchConfigurationException;
use App\SQLLogin\Exception\LoginElementsConfigurationException;
use App\SQLLogin\Exception\NullDataToFetchException;
use App\SQLLogin\SQLLoginConnect;
use App\SQLLogin\SQLLoginRequest;
use Exception;
use PDO;
use PDOException;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class SQLLoginService extends AbstractController
{
public SQLLoginRequest $sqlLoginRequest;
private SQLLoginRequest $sqlLoginRequest;
public function __construct(SQLLoginRequest $sqlLoginRequest)
public function __construct(SQLLoginRequest $sqlLoginRequest, private LoggerInterface $loggerInterface)
{
$this->sqlLoginRequest = $sqlLoginRequest;
$this->loggerInterface = $loggerInterface;
}
public function fetchDatas($login)
public function fetchDatas(string $login): array
{
if (empty($login)) {
throw new Exception('Connexion échouée, le login ne peut pas être vide');
}
try {
$dbh = $this->getConnection();
} catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage());
throw new DatabaseConnectionException($e->getMessage());
}
try {
// forge de la requête
$request = $this->sqlLoginRequest->getRequestScope();
} catch (NullDataToFetchException $e) {
throw new DataToFetchConfigurationException($e->getMessage());
}
try {
// Préparation de la requête
$query = $dbh->prepare($request);
$query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]);
$datas = $query->fetch(PDO::FETCH_ASSOC);
$query->closeCursor();
} catch (PDOException $e) {
\Sentry\captureException($e);
$this->loggerInterface->critical($e->getMessage());
throw new DataToFetchConfigurationException($e->getMessage());
}
throw new PDOException();
if (false === $datas) {
throw new Exception(sprintf('La requête sql "%s" a renvoyé un résultat incorrect.', $request));
}
return $datas;
}
/**
* @param mixed $login
*
* @return bool
*/
public function fetchPassword($login)
public function fetchPassword(string $login): array
{
try {
$dbh = $this->getConnection();
} catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage());
throw new DatabaseConnectionException($e->getMessage());
}
// forge de la requête
$request = $this->sqlLoginRequest->getRequestPassword();
try {
$query = $dbh->prepare($request);
$query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]);
$password = $query->fetch(PDO::FETCH_ASSOC);
$query->closeCursor();
} catch (PDOException $e) {
\Sentry\captureException($e);
throw new PDOException();
$this->loggerInterface->critical($e->getMessage());
throw new LoginElementsConfigurationException($e->getMessage());
}
if ($password) {
if (!$password) {
throw new Exception('Une erreur est survenue lors de la récupération des données');
}
return [
$password[$this->sqlLoginRequest->getPasswordColumnName()],
isset($password[$this->sqlLoginRequest->getSaltColumnName()]) ? $password[$this->sqlLoginRequest->getSaltColumnName()] : null,
];
}
return false;
}
public function getConnection()
private function getConnection(): PDO
{
// Appel du singleton
$sqlLogin = SQLLoginConnect::getInstance();

View File

@ -1 +0,0 @@
134

View File

@ -1,12 +1,9 @@
{
"clue/stream-filter": {
"version": "v1.6.0"
},
"doctrine/annotations": {
"version": "1.13",
"version": "1.14",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"branch": "main",
"version": "1.0",
"ref": "a2759dd6123694c8d901d0ec80006e044c2e6457"
},
@ -14,76 +11,25 @@
"config/routes/annotations.yaml"
]
},
"doctrine/lexer": {
"version": "1.2.3"
},
"guzzlehttp/promises": {
"version": "1.5.2"
},
"guzzlehttp/psr7": {
"version": "2.4.3"
},
"http-interop/http-factory-guzzle": {
"version": "1.2.0"
},
"jean85/pretty-package-versions": {
"version": "2.0.5"
},
"php-http/client-common": {
"version": "2.6.0"
},
"php-http/discovery": {
"version": "1.14.3"
"version": "1.19",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "1.18",
"ref": "f45b5dd173a27873ab19f5e3180b2f661c21de02"
},
"php-http/httplug": {
"version": "2.3.0"
},
"php-http/message": {
"version": "1.13.0"
},
"php-http/message-factory": {
"version": "v1.0.2"
},
"php-http/promise": {
"version": "1.1.0"
},
"psr/cache": {
"version": "2.0.0"
},
"psr/container": {
"version": "1.1.2"
},
"psr/event-dispatcher": {
"version": "1.0.0"
},
"psr/http-client": {
"version": "1.0.1"
},
"psr/http-factory": {
"version": "1.0.1"
},
"psr/http-message": {
"version": "1.0.1"
},
"psr/log": {
"version": "2.0.0"
},
"ralouphie/getallheaders": {
"version": "3.0.3"
},
"sentry/sdk": {
"version": "3.3.0"
},
"sentry/sentry": {
"version": "3.12.0"
"files": [
"config/packages/http_discovery.yaml"
]
},
"sentry/sentry-symfony": {
"version": "4.5",
"version": "4.14",
"recipe": {
"repo": "github.com/symfony/recipes-contrib",
"branch": "main",
"version": "4.0",
"ref": "9ac202e84b6fb3c276cb3d7846006e0df65272d0"
"version": "4.6",
"ref": "153de5f041f7e8a9c19f3674b800b76be0e6fd90"
},
"files": [
"config/packages/sentry.yaml"
@ -93,82 +39,43 @@
"version": "1.0",
"recipe": {
"repo": "github.com/symfony/recipes-contrib",
"branch": "master",
"branch": "main",
"version": "1.0",
"ref": "9d254a22efca7264203eea98b866f16f944b2f09"
"ref": "0f18b4decdf5695d692c1d0dfd65516a07a6adf1"
},
"files": [
"public/.htaccess"
]
},
"symfony/asset": {
"version": "v5.4.13"
},
"symfony/cache": {
"version": "v5.4.7"
},
"symfony/cache-contracts": {
"version": "v2.5.1"
},
"symfony/config": {
"version": "v5.4.7"
},
"symfony/console": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"branch": "main",
"version": "5.3",
"ref": "da0c8be8157600ad34f10ff0c9cc91232522e047"
"ref": "1781ff40d8a17d87cf53f8d4cf0c8346ed2bb461"
},
"files": [
"bin/console"
]
},
"symfony/dependency-injection": {
"version": "v5.4.7"
},
"symfony/deprecation-contracts": {
"version": "v3.0.1"
},
"symfony/dotenv": {
"version": "v5.4.5"
},
"symfony/error-handler": {
"version": "v5.4.7"
},
"symfony/event-dispatcher": {
"version": "v5.4.3"
},
"symfony/event-dispatcher-contracts": {
"version": "v3.0.1"
},
"symfony/filesystem": {
"version": "v5.4.7"
},
"symfony/finder": {
"version": "v5.4.3"
},
"symfony/flex": {
"version": "2.1",
"version": "1.21",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"branch": "main",
"version": "1.0",
"ref": "c0eeb50665f0f77226616b6038a9b06c03752d8e"
"ref": "146251ae39e06a95be0fe3d13c807bcf3938b172"
},
"files": [
".env"
]
},
"symfony/form": {
"version": "v5.4.8"
},
"symfony/framework-bundle": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"branch": "main",
"version": "5.4",
"ref": "3cd216a4d007b78d8554d44a5b1c0a446dab24fb"
},
@ -183,18 +90,6 @@
"src/Kernel.php"
]
},
"symfony/http-client": {
"version": "v5.4.8"
},
"symfony/http-client-contracts": {
"version": "v2.5.1"
},
"symfony/http-foundation": {
"version": "v5.4.6"
},
"symfony/http-kernel": {
"version": "v5.4.7"
},
"symfony/lock": {
"version": "5.4",
"recipe": {
@ -207,50 +102,11 @@
"config/packages/lock.yaml"
]
},
"symfony/options-resolver": {
"version": "v5.4.3"
},
"symfony/password-hasher": {
"version": "v5.4.8"
},
"symfony/polyfill-intl-grapheme": {
"version": "v1.25.0"
},
"symfony/polyfill-intl-icu": {
"version": "v1.25.0"
},
"symfony/polyfill-intl-normalizer": {
"version": "v1.25.0"
},
"symfony/polyfill-mbstring": {
"version": "v1.25.0"
},
"symfony/polyfill-php73": {
"version": "v1.25.0"
},
"symfony/polyfill-php80": {
"version": "v1.25.0"
},
"symfony/polyfill-php81": {
"version": "v1.25.0"
},
"symfony/property-access": {
"version": "v5.4.8"
},
"symfony/property-info": {
"version": "v5.4.7"
},
"symfony/psr-http-message-bridge": {
"version": "v2.1.4"
},
"symfony/rate-limiter": {
"version": "v5.4.11"
},
"symfony/routing": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"branch": "main",
"version": "5.3",
"ref": "85de1d8ae45b284c3c84b668171d2615049e698f"
},
@ -259,14 +115,11 @@
"config/routes.yaml"
]
},
"symfony/runtime": {
"version": "v5.4.7"
},
"symfony/security-bundle": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"branch": "main",
"version": "5.3",
"ref": "98f1f2b0d635908c2b40f3675da2d23b1a069d30"
},
@ -274,48 +127,24 @@
"config/packages/security.yaml"
]
},
"symfony/security-core": {
"version": "v5.4.8"
},
"symfony/security-csrf": {
"version": "v5.4.3"
},
"symfony/security-guard": {
"version": "v5.4.3"
},
"symfony/security-http": {
"version": "v5.4.8"
},
"symfony/service-contracts": {
"version": "v2.5.1"
},
"symfony/string": {
"version": "v5.4.3"
},
"symfony/translation": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.3",
"ref": "da64f5a2b6d96f5dc24914517c0350a5f91dee43"
"ref": "e28e27f53663cc34f0be2837aba18e3a1bef8e7b"
},
"files": [
"config/packages/translation.yaml",
"translations/.gitignore"
]
},
"symfony/translation-contracts": {
"version": "v2.5.1"
},
"symfony/twig-bridge": {
"version": "v5.4.8"
},
"symfony/twig-bundle": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"branch": "main",
"version": "5.4",
"ref": "bb2178c57eee79e6be0b297aa96fc0c0def81387"
},
@ -336,12 +165,6 @@
"config/packages/validator.yaml"
]
},
"symfony/var-dumper": {
"version": "v5.4.6"
},
"symfony/var-exporter": {
"version": "v5.4.7"
},
"symfony/web-profiler-bundle": {
"version": "5.4",
"recipe": {
@ -356,12 +179,12 @@
]
},
"symfony/webpack-encore-bundle": {
"version": "1.16",
"version": "1.17",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "1.10",
"ref": "160f0a23c9c2bdd3f264bb4d841b51f900a3572e"
"ref": "eff2e505d4557c967b6710fe06bd947ba555cae5"
},
"files": [
"assets/app.js",
@ -373,11 +196,5 @@
"package.json",
"webpack.config.js"
]
},
"symfony/yaml": {
"version": "v5.4.3"
},
"twig/twig": {
"version": "v3.3.10"
}
}

View File

@ -4,16 +4,18 @@
<meta charset="UTF-8">
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}
{{ encore_entry_link_tags('bootstrap-css') }}
{{ encore_entry_link_tags('app') }}
{{ encore_entry_link_tags('app', null, 'appConfig') }}
{{ encore_entry_link_tags('bootstrap-css', null, 'appConfig') }}
{{ encore_entry_link_tags('theme', null, 'themeConfig') }}
{% endblock %}
</head>
<body>
{% block body %}{% endblock %}
{% block javascripts %}
{{ encore_entry_script_tags('bootstrap-js') }}
{{ encore_entry_script_tags('app') }}
{{ encore_entry_script_tags('app', null, 'appConfig') }}
{{ encore_entry_script_tags('bootstrap-js', null, 'appConfig') }}
{{ encore_entry_script_tags('theme', null, 'themeConfig') }}
{% endblock %}
</body>
</html>

14
templates/error.html.twig Normal file
View File

@ -0,0 +1,14 @@
{% extends 'base.html.twig' %}
{% block stylesheets %}
{{ parent() }}
{% endblock %}
{% block body %}
<section class="grid place-items-center h-screen">
<div class="container px-5 py-2 mx-auto lg:px-32">
<p>{{statusCode}}</p>
<p>{{message}}</p>
</div>
</section>
{% endblock %}

View File

@ -1,5 +0,0 @@
form:
label:
login: login
password: Password
remember_me: Remember me

View File

@ -1,5 +0,0 @@
form:
label:
login: Login
password: Mot de passe
remember_me: Se souvenir de moi

View File

@ -7,16 +7,28 @@
<body>
<trans-unit id="fXVg5Zq" resname="error.login">
<source>error.login</source>
<target>Incorrect login</target>
<target>Incorrect login or password</target>
</trans-unit>
<trans-unit id="8VJKwdK" resname="error.password">
<source>error.password</source>
<target>Incorrect password</target>
<trans-unit id="36t19qm" resname="error.sql_login">
<source>error.sql_login</source>
<target>Connection to database encountered a problem</target>
</trans-unit>
<trans-unit id="lBole_G" resname="error.pdo">
<source>error.pdo</source>
<target>Connection to database encountered a problem</target>
</trans-unit>
<trans-unit id="1QRR4uA" resname="error.configuration">
<source>error.configuration</source>
<target>Identification data references do not exist in the database</target>
</trans-unit>
<trans-unit id="4EPIhsV" resname="error.data_to_fetch_configuration">
<source>error.data_to_fetch_configuration</source>
<target>Data references to be transmitted do not exist</target>
</trans-unit>
<trans-unit id="6iuTNs3" resname="error.security_pattern_configuration">
<source>error.security_pattern_configuration</source>
<target>The security pattern is not allowed</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -1,4 +0,0 @@
error:
login: 'Incorrect login'
password: 'Incorrect password'
sql_login: 'Connection to database encountered a problem'

View File

@ -7,15 +7,27 @@
<body>
<trans-unit id="fXVg5Zq" resname="error.login">
<source>error.login</source>
<target>Login incorrect ou inconnu</target>
<target>Login ou mot de passe inconnu</target>
</trans-unit>
<trans-unit id="8VJKwdK" resname="error.password">
<source>error.password</source>
<target>Mot de passe incorrect</target>
<trans-unit id="36t19qm" resname="error.sql_login">
<source>error.sql_login</source>
<target>La connexion à la base de données a rencontré un problème</target>
</trans-unit>
<trans-unit id="lBole_G" resname="error.pdo">
<source>error.pdo</source>
<target>La connexion à la base de déonnées à rencontré un problème</target>
<target>La connexion à la base de données a rencontré un problème</target>
</trans-unit>
<trans-unit id="1QRR4uA" resname="error.configuration">
<source>error.configuration</source>
<target>Les références de données d'identification n'existent pas dans la base de données</target>
</trans-unit>
<trans-unit id="4EPIhsV" resname="error.data_to_fetch_configuration">
<source>error.data_to_fetch_configuration</source>
<target>Les références de données à transmettre n'existent pas</target>
</trans-unit>
<trans-unit id="6iuTNs3" resname="error.security_pattern_configuration">
<source>error.security_pattern_configuration</source>
<target>Le patron de sécurité n'est pas autorisé</target>
</trans-unit>
</body>
</file>

View File

@ -1,4 +0,0 @@
error:
login: 'Login incorrect ou inconnu'
password: 'Mot de passe incorrect'
sql_login: 'La connexion à la base de données a rencontré un problème'

View File

@ -405,6 +405,30 @@
<source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
<target>The value of the netmask should be between {{ min }} and {{ max }}.</target>
</trans-unit>
<trans-unit id="O5pay9e" resname="The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.">
<source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
<target>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</target>
</trans-unit>
<trans-unit id="f_lviDt" resname="The password strength is too low. Please use a stronger password.">
<source>The password strength is too low. Please use a stronger password.</source>
<target>The password strength is too low. Please use a stronger password.</target>
</trans-unit>
<trans-unit id="xfCh6.k" resname="This value contains characters that are not allowed by the current restriction-level.">
<source>This value contains characters that are not allowed by the current restriction-level.</source>
<target>This value contains characters that are not allowed by the current restriction-level.</target>
</trans-unit>
<trans-unit id="x15dlan" resname="Using invisible characters is not allowed.">
<source>Using invisible characters is not allowed.</source>
<target>Using invisible characters is not allowed.</target>
</trans-unit>
<trans-unit id="2NiS4YC" resname="Mixing numbers from different scripts is not allowed.">
<source>Mixing numbers from different scripts is not allowed.</source>
<target>Mixing numbers from different scripts is not allowed.</target>
</trans-unit>
<trans-unit id="W8N1HuG" resname="Using hidden overlay characters is not allowed.">
<source>Using hidden overlay characters is not allowed.</source>
<target>Using hidden overlay characters is not allowed.</target>
</trans-unit>
<trans-unit id=".SEaaBa" resname="This form should not contain extra fields.">
<source>This form should not contain extra fields.</source>
<target>This form should not contain extra fields.</target>

View File

@ -405,6 +405,30 @@
<source>The value of the netmask should be between {{ min }} and {{ max }}.</source>
<target>La valeur du masque de réseau doit être comprise entre {{ min }} et {{ max }}.</target>
</trans-unit>
<trans-unit id="O5pay9e" resname="The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.">
<source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
<target>Le nom du fichier est trop long. Il doit contenir au maximum {{ filename_max_length }} caractère.|Le nom de fichier est trop long. Il doit contenir au maximum {{ filename_max_length }} caractères.</target>
</trans-unit>
<trans-unit id="f_lviDt" resname="The password strength is too low. Please use a stronger password.">
<source>The password strength is too low. Please use a stronger password.</source>
<target>La force du mot de passe est trop faible. Veuillez utiliser un mot de passe plus fort.</target>
</trans-unit>
<trans-unit id="xfCh6.k" resname="This value contains characters that are not allowed by the current restriction-level.">
<source>This value contains characters that are not allowed by the current restriction-level.</source>
<target>Cette valeur contient des caractères qui ne sont pas autorisés par le niveau de restriction actuel.</target>
</trans-unit>
<trans-unit id="x15dlan" resname="Using invisible characters is not allowed.">
<source>Using invisible characters is not allowed.</source>
<target>Utiliser des caractères invisibles n'est pas autorisé.</target>
</trans-unit>
<trans-unit id="2NiS4YC" resname="Mixing numbers from different scripts is not allowed.">
<source>Mixing numbers from different scripts is not allowed.</source>
<target>Mélanger des chiffres provenant de différents scripts n'est pas autorisé.</target>
</trans-unit>
<trans-unit id="W8N1HuG" resname="Using hidden overlay characters is not allowed.">
<source>Using hidden overlay characters is not allowed.</source>
<target>Utiliser des caractères de superposition cachés n'est pas autorisé.</target>
</trans-unit>
<trans-unit id=".SEaaBa" resname="This form should not contain extra fields.">
<source>This form should not contain extra fields.</source>
<target>Ce formulaire ne doit pas contenir de champs supplémentaires.</target>

Some files were not shown because too many files have changed in this diff Show More