41 Commits

Author SHA1 Message Date
11d4989316 feat(redis): fix session.handler_id: remove '?'
Some checks reported warnings
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
Cadoles/hydra-sql/pipeline/head This commit is unstable
2023-12-14 15:22:08 +01:00
ea7d353be7 feat(redis): add env var HYDRA_SQL_REDIS_PREFIX/HYDRA_SQL_REDIS_TTL
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-14 11:14:53 +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
84b72ccf18 Merge pull request 'maj: sémantique, révision vérification password' (#3) from maj into develop
All checks were successful
Cadoles/hydra-sql/pipeline/head This commit looks good
Reviewed-on: #3
2023-01-05 14:09:41 +01:00
03e15da862 maj: correction phpstan, optional param config must be behind
Some checks reported warnings
Cadoles/hydra-sql/pipeline/pr-develop This commit looks good
Cadoles/hydra-sql/pipeline/head This commit is unstable
2023-01-05 13:22:18 +01:00
b8fb01da5c maj: suppression commentaire inutile
All checks were successful
Cadoles/hydra-sql/pipeline/pr-develop This commit looks good
2023-01-05 12:13:08 +01:00
422e97d329 supression des fonctions liées à l'update du hashage de mot de passe
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
2022-12-16 16:49:24 +01:00
906d8edf82 fix faille twig, coding standard
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
2022-12-16 15:39:42 +01:00
bd1b035f1e ajout de l'updatde hashage selon algo indiqué en ver env, fix typo
Some checks reported warnings
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2022-12-16 15:00:14 +01:00
441c0f563c maj: sémantique, révision vérification ppassword
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2022-12-14 16:43:44 +01:00
103 changed files with 4790 additions and 13983 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

8
.env
View File

@ -29,8 +29,8 @@ BASE_URL='http://localhost:8080'
# connexion hydra
HYDRA_ADMIN_BASE_URL='http://hydra:4445'
APP_LOCALES="fr,en"
SECURITY_PATTERN=
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,7 @@ LOCK_DSN=flock
###> sentry/sentry-symfony ###
SENTRY_DSN=
###< sentry/sentry-symfony ###
REDIS_DSN=redis://redis:6379
HYDRA_SQL_REDIS_PREFIX=mse
HYDRA_SQL_REDIS_TTL=3600

17
.gitignore vendored
View File

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

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:20.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,6 +8,7 @@
"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.*",
@ -32,7 +33,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": {

1364
composer.lock generated
View File

@ -4,7 +4,7 @@
"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": "7dce269ca449b7de7e1bd2e23df94eab",
"packages": [
{
"name": "clue/stream-filter",
@ -74,30 +74,34 @@
},
{
"name": "doctrine/annotations",
"version": "1.13.2",
"version": "1.14.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/annotations.git",
"reference": "5b668aef16090008790395c02c893b1ba13f7e08"
"reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08",
"reference": "5b668aef16090008790395c02c893b1ba13f7e08",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
"reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
"shasum": ""
},
"require": {
"doctrine/lexer": "1.*",
"doctrine/lexer": "^1 || ^2",
"ext-tokenizer": "*",
"php": "^7.1 || ^8.0",
"psr/cache": "^1 || ^2 || ^3"
},
"require-dev": {
"doctrine/cache": "^1.11 || ^2.0",
"doctrine/coding-standard": "^6.0 || ^8.1",
"phpstan/phpstan": "^0.12.20",
"phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5",
"symfony/cache": "^4.4 || ^5.2"
"doctrine/coding-standard": "^9 || ^10",
"phpstan/phpstan": "~1.4.10 || ^1.8.0",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"symfony/cache": "^4.4 || ^5.4 || ^6",
"vimeo/psalm": "^4.10"
},
"suggest": {
"php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
},
"type": "library",
"autoload": {
@ -140,37 +144,86 @@
],
"support": {
"issues": "https://github.com/doctrine/annotations/issues",
"source": "https://github.com/doctrine/annotations/tree/1.13.2"
"source": "https://github.com/doctrine/annotations/tree/1.14.3"
},
"time": "2021-08-05T19:00:23+00:00"
"time": "2023-02-01T09:20:38+00:00"
},
{
"name": "doctrine/lexer",
"version": "1.2.3",
"name": "doctrine/deprecations",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229"
"url": "https://github.com/doctrine/deprecations.git",
"reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229",
"reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931",
"reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9.0",
"phpstan/phpstan": "^1.3",
"doctrine/coding-standard": "^9",
"phpstan/phpstan": "1.4.10 || 1.10.15",
"phpstan/phpstan-phpunit": "^1.0",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^4.11"
"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"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
"Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
"source": "https://github.com/doctrine/deprecations/tree/1.1.2"
},
"time": "2023-09-27T20:04:15+00:00"
},
{
"name": "doctrine/lexer",
"version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
"reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^1.0",
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9 || ^10",
"phpstan/phpstan": "^1.3",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psalm/plugin-phpunit": "^0.18.3",
"vimeo/psalm": "^4.11 || ^5.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\Lexer\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -202,7 +255,7 @@
],
"support": {
"issues": "https://github.com/doctrine/lexer/issues",
"source": "https://github.com/doctrine/lexer/tree/1.2.3"
"source": "https://github.com/doctrine/lexer/tree/2.1.0"
},
"funding": [
{
@ -218,38 +271,37 @@
"type": "tidelift"
}
],
"time": "2022-02-28T11:07:21+00:00"
"time": "2022-12-14T08:49:07+00:00"
},
{
"name": "guzzlehttp/promises",
"version": "1.5.2",
"version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "b94b2807d85443f9719887892882d0329d1e2598"
"reference": "bbff78d96034045e58e13dedd6ad91b5d1253223"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598",
"reference": "b94b2807d85443f9719887892882d0329d1e2598",
"url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223",
"reference": "bbff78d96034045e58e13dedd6ad91b5d1253223",
"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.36 || ^9.6.15"
},
"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/"
}
@ -286,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.2"
},
"funding": [
{
@ -302,26 +354,26 @@
"type": "tidelift"
}
],
"time": "2022-08-28T14:55:35+00:00"
"time": "2023-12-03T20:19:20+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "2.4.3",
"version": "2.6.2",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "67c26b443f348a51926030c83481b85718457d3d"
"reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
"reference": "67c26b443f348a51926030c83481b85718457d3d",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221",
"reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221",
"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": {
@ -329,9 +381,9 @@
"psr/http-message-implementation": "1.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.1",
"bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "^0.9",
"phpunit/phpunit": "^8.5.29 || ^9.5.23"
"phpunit/phpunit": "^8.5.36 || ^9.6.15"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@ -341,9 +393,6 @@
"bamarni-bin": {
"bin-links": true,
"forward-command": false
},
"branch-alias": {
"dev-master": "2.4-dev"
}
},
"autoload": {
@ -405,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.6.2"
},
"funding": [
{
@ -421,7 +470,7 @@
"type": "tidelift"
}
],
"time": "2022-10-26T14:07:24+00:00"
"time": "2023-12-03T20:05:35+00:00"
},
{
"name": "http-interop/http-factory-guzzle",
@ -542,27 +591,26 @@
},
{
"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": {
@ -571,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",
@ -581,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/"
@ -611,49 +654,59 @@
],
"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.2",
"source": {
"type": "git",
"url": "https://github.com/php-http/discovery.git",
"reference": "31d8ee46d0215108df16a8527c7438e96a4d7735"
"reference": "61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb"
},
"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/61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb",
"reference": "61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb",
"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",
"symfony/phpunit-bridge": "^6.2"
},
"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": [
@ -665,7 +718,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",
@ -674,44 +727,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.2"
},
"time": "2022-07-11T14:04:40+00:00"
"time": "2023-11-30T16:49: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/"
@ -740,29 +789,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.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/message.git",
"reference": "7886e647a30a966a1a8d1dad1845b71ca8678361"
"reference": "47a14338bf4ebd67d317bf1144253d7db4ab55fd"
},
"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/47a14338bf4ebd67d317bf1144253d7db4ab55fd",
"reference": "47a14338bf4ebd67d317bf1144253d7db4ab55fd",
"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"
@ -770,8 +818,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"
},
@ -782,11 +831,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"
@ -814,32 +858,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.0"
},
"time": "2022-02-11T13:41:14+00:00"
"time": "2023-05-17T06:43:38+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": {
@ -868,37 +912,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.2.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/promise.git",
"reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88"
"reference": "44a67cb59f708f826f3bec35f22030b3edb90119"
},
"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/44a67cb59f708f826f3bec35f22030b3edb90119",
"reference": "44a67cb59f708f826f3bec35f22030b3edb90119",
"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/"
@ -925,26 +965,87 @@
],
"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.2.1"
},
"time": "2020-07-07T09:29:14+00:00"
"time": "2023-11-08T12:57:08+00:00"
},
{
"name": "psr/cache",
"version": "1.0.1",
"name": "predis/predis",
"version": "v2.2.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/cache.git",
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
"url": "https://github.com/predis/predis.git",
"reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
"url": "https://api.github.com/repos/predis/predis/zipball/b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1",
"reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
"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",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/cache.git",
"reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/cache/zipball/213f9dbc5b9bfbc4f8db86d2838dc968752ce13b",
"reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b",
"shasum": ""
},
"require": {
"php": ">=8.0.0"
},
"type": "library",
"extra": {
@ -964,7 +1065,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for caching libraries",
@ -974,9 +1075,9 @@
"psr-6"
],
"support": {
"source": "https://github.com/php-fig/cache/tree/master"
"source": "https://github.com/php-fig/cache/tree/2.0.0"
},
"time": "2016-08-06T20:24:11+00:00"
"time": "2021-02-03T23:23:37+00:00"
},
{
"name": "psr/container",
@ -1078,21 +1179,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": {
@ -1112,7 +1213,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP clients",
@ -1124,27 +1225,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.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-factory.git",
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
"reference": "e616d01114759c4c489f93b099585439f795fe35"
},
"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/e616d01114759c4c489f93b099585439f795fe35",
"reference": "e616d01114759c4c489f93b099585439f795fe35",
"shasum": ""
},
"require": {
"php": ">=7.0.0",
"psr/http-message": "^1.0"
"psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
"extra": {
@ -1164,7 +1265,7 @@
"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",
@ -1179,31 +1280,31 @@
"response"
],
"support": {
"source": "https://github.com/php-fig/http-factory/tree/master"
"source": "https://github.com/php-fig/http-factory/tree/1.0.2"
},
"time": "2019-04-30T12:38:16+00:00"
"time": "2023-04-10T20:10:41+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": {
@ -1218,7 +1319,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
@ -1232,36 +1333,36 @@
"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",
"version": "1.1.4",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11"
"reference": "ef29f6d262798707a9edd554e2b82517ef3a9376"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11",
"url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376",
"reference": "ef29f6d262798707a9edd554e2b82517ef3a9376",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
"php": ">=8.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1.x-dev"
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Log\\": "Psr/Log/"
"Psr\\Log\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -1282,9 +1383,9 @@
"psr-3"
],
"support": {
"source": "https://github.com/php-fig/log/tree/1.1.4"
"source": "https://github.com/php-fig/log/tree/2.0.0"
},
"time": "2021-05-03T11:20:27+00:00"
"time": "2021-07-14T16:41:46+00:00"
},
{
"name": "ralouphie/getallheaders",
@ -1332,22 +1433,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/",
@ -1373,7 +1474,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": [
{
@ -1385,38 +1486,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": {
@ -1425,6 +1526,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",
@ -1441,11 +1543,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"
@ -1456,7 +1553,7 @@
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
"MIT"
],
"authors": [
{
@ -1477,7 +1574,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": [
{
@ -1489,62 +1586,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.13.1",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-symfony.git",
"reference": "04e1f298a3a7ab477e09f4382189538473ad0a58"
"reference": "e8102da84841b33c0237b81479377d1cbaea9aa4"
},
"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/e8102da84841b33c0237b81479377d1cbaea9aa4",
"reference": "e8102da84841b33c0237b81479377d1cbaea9aa4",
"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",
"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.",
@ -1555,7 +1651,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"
@ -1571,7 +1666,7 @@
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
"MIT"
],
"authors": [
{
@ -1593,7 +1688,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.13.1"
},
"funding": [
{
@ -1605,7 +1700,7 @@
"type": "custom"
}
],
"time": "2022-11-28T12:37:44+00:00"
"time": "2023-12-06T16:02:30+00:00"
},
{
"name": "symfony/apache-pack",
@ -1635,16 +1730,16 @@
},
{
"name": "symfony/asset",
"version": "v5.4.13",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/asset.git",
"reference": "9aa867206711cb6fcca51ef127ba52a018170be9"
"reference": "edb2457a0ef615d420d2319851f679a4cc3b3635"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/asset/zipball/9aa867206711cb6fcca51ef127ba52a018170be9",
"reference": "9aa867206711cb6fcca51ef127ba52a018170be9",
"url": "https://api.github.com/repos/symfony/asset/zipball/edb2457a0ef615d420d2319851f679a4cc3b3635",
"reference": "edb2457a0ef615d420d2319851f679a4cc3b3635",
"shasum": ""
},
"require": {
@ -1689,7 +1784,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.31"
},
"funding": [
{
@ -1705,20 +1800,20 @@
"type": "tidelift"
}
],
"time": "2022-08-31T08:17:19+00:00"
"time": "2023-10-31T07:58:33+00:00"
},
{
"name": "symfony/cache",
"version": "v5.4.7",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
"reference": "ba06841ed293fcaf79a592f59fdaba471f7c756c"
"reference": "2553faca77502a4f68dc93cd2f3b9ec650751e40"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/ba06841ed293fcaf79a592f59fdaba471f7c756c",
"reference": "ba06841ed293fcaf79a592f59fdaba471f7c756c",
"url": "https://api.github.com/repos/symfony/cache/zipball/2553faca77502a4f68dc93cd2f3b9ec650751e40",
"reference": "2553faca77502a4f68dc93cd2f3b9ec650751e40",
"shasum": ""
},
"require": {
@ -1746,7 +1841,7 @@
"require-dev": {
"cache/integration-tests": "dev-master",
"doctrine/cache": "^1.6|^2.0",
"doctrine/dbal": "^2.13.1|^3.0",
"doctrine/dbal": "^2.13.1|^3|^4",
"predis/predis": "^1.1",
"psr/simple-cache": "^1.0|^2.0",
"symfony/config": "^4.4|^5.0|^6.0",
@ -1779,14 +1874,14 @@
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides an extended PSR-6, PSR-16 (and tags) implementation",
"description": "Provides extended PSR-6, PSR-16 (and tags) implementations",
"homepage": "https://symfony.com",
"keywords": [
"caching",
"psr6"
],
"support": {
"source": "https://github.com/symfony/cache/tree/v5.4.7"
"source": "https://github.com/symfony/cache/tree/v5.4.32"
},
"funding": [
{
@ -1802,11 +1897,11 @@
"type": "tidelift"
}
],
"time": "2022-03-22T15:31:03+00:00"
"time": "2023-11-24T13:04:07+00:00"
},
{
"name": "symfony/cache-contracts",
"version": "v2.5.1",
"version": "v2.5.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache-contracts.git",
@ -1865,7 +1960,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/cache-contracts/tree/v2.5.1"
"source": "https://github.com/symfony/cache-contracts/tree/v2.5.2"
},
"funding": [
{
@ -1885,16 +1980,16 @@
},
{
"name": "symfony/config",
"version": "v5.4.7",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
"reference": "05624c386afa1b4ccc1357463d830fade8d9d404"
"reference": "dd5ea39de228813aba0c23c3a4153da2a4cf3cd9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/05624c386afa1b4ccc1357463d830fade8d9d404",
"reference": "05624c386afa1b4ccc1357463d830fade8d9d404",
"url": "https://api.github.com/repos/symfony/config/zipball/dd5ea39de228813aba0c23c3a4153da2a4cf3cd9",
"reference": "dd5ea39de228813aba0c23c3a4153da2a4cf3cd9",
"shasum": ""
},
"require": {
@ -1944,7 +2039,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.7"
"source": "https://github.com/symfony/config/tree/v5.4.31"
},
"funding": [
{
@ -1960,20 +2055,20 @@
"type": "tidelift"
}
],
"time": "2022-03-21T13:42:03+00:00"
"time": "2023-11-09T08:22:43+00:00"
},
{
"name": "symfony/console",
"version": "v5.4.7",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6"
"reference": "c70df1ffaf23a8d340bded3cfab1b86752ad6ed7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/900275254f0a1a2afff1ab0e11abd5587a10e1d6",
"reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6",
"url": "https://api.github.com/repos/symfony/console/zipball/c70df1ffaf23a8d340bded3cfab1b86752ad6ed7",
"reference": "c70df1ffaf23a8d340bded3cfab1b86752ad6ed7",
"shasum": ""
},
"require": {
@ -2038,12 +2133,12 @@
"homepage": "https://symfony.com",
"keywords": [
"cli",
"command line",
"command-line",
"console",
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v5.4.7"
"source": "https://github.com/symfony/console/tree/v5.4.32"
},
"funding": [
{
@ -2059,20 +2154,20 @@
"type": "tidelift"
}
],
"time": "2022-03-31T17:09:19+00:00"
"time": "2023-11-18T18:23:04+00:00"
},
{
"name": "symfony/dependency-injection",
"version": "v5.4.16",
"version": "v5.4.33",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "a93e1863500940780fc1235f52d54397be2d14b3"
"reference": "14969a558cd6382b2a12b14b20ef9a851a02da79"
},
"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/14969a558cd6382b2a12b14b20ef9a851a02da79",
"reference": "14969a558cd6382b2a12b14b20ef9a851a02da79",
"shasum": ""
},
"require": {
@ -2132,7 +2227,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.33"
},
"funding": [
{
@ -2148,29 +2243,29 @@
"type": "tidelift"
}
],
"time": "2022-11-25T07:33:13+00:00"
"time": "2023-11-30T08:15:37+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v2.5.1",
"version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
"reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=8.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.5-dev"
"dev-main": "3.4-dev"
},
"thanks": {
"name": "symfony/contracts",
@ -2199,7 +2294,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1"
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
},
"funding": [
{
@ -2215,20 +2310,20 @@
"type": "tidelift"
}
],
"time": "2022-01-02T09:53:40+00:00"
"time": "2023-05-23T14:45:45+00:00"
},
{
"name": "symfony/dotenv",
"version": "v5.4.5",
"version": "v5.4.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
"reference": "83a2310904a4f5d4f42526227b5a578ac82232a9"
"reference": "ceed2cd28442adcf3679a9a82dacd45baeefc458"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/83a2310904a4f5d4f42526227b5a578ac82232a9",
"reference": "83a2310904a4f5d4f42526227b5a578ac82232a9",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/ceed2cd28442adcf3679a9a82dacd45baeefc458",
"reference": "ceed2cd28442adcf3679a9a82dacd45baeefc458",
"shasum": ""
},
"require": {
@ -2270,7 +2365,7 @@
"environment"
],
"support": {
"source": "https://github.com/symfony/dotenv/tree/v5.4.5"
"source": "https://github.com/symfony/dotenv/tree/v5.4.30"
},
"funding": [
{
@ -2286,20 +2381,20 @@
"type": "tidelift"
}
],
"time": "2022-02-15T17:04:12+00:00"
"time": "2023-10-26T16:37:39+00:00"
},
{
"name": "symfony/error-handler",
"version": "v5.4.7",
"version": "v5.4.29",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "060bc01856a1846e3e4385261bc9ed11a1dd7b6a"
"reference": "328c6fcfd2f90b64c16efaf0ea67a311d672f078"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/060bc01856a1846e3e4385261bc9ed11a1dd7b6a",
"reference": "060bc01856a1846e3e4385261bc9ed11a1dd7b6a",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/328c6fcfd2f90b64c16efaf0ea67a311d672f078",
"reference": "328c6fcfd2f90b64c16efaf0ea67a311d672f078",
"shasum": ""
},
"require": {
@ -2341,7 +2436,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.7"
"source": "https://github.com/symfony/error-handler/tree/v5.4.29"
},
"funding": [
{
@ -2357,20 +2452,20 @@
"type": "tidelift"
}
],
"time": "2022-03-18T16:21:29+00:00"
"time": "2023-09-06T21:54:06+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v5.4.3",
"version": "v5.4.26",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d"
"reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d",
"reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5dcc00e03413f05c1e7900090927bb7247cb0aac",
"reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac",
"shasum": ""
},
"require": {
@ -2426,7 +2521,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.3"
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.26"
},
"funding": [
{
@ -2442,33 +2537,30 @@
"type": "tidelift"
}
],
"time": "2022-01-02T09:53:40+00:00"
"time": "2023-07-06T06:34:20+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
"version": "v2.5.1",
"version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "f98b54df6ad059855739db6fcbc2d36995283fe1"
"reference": "a76aed96a42d2b521153fb382d418e30d18b59df"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1",
"reference": "f98b54df6ad059855739db6fcbc2d36995283fe1",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df",
"reference": "a76aed96a42d2b521153fb382d418e30d18b59df",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"php": ">=8.1",
"psr/event-dispatcher": "^1"
},
"suggest": {
"symfony/event-dispatcher-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.5-dev"
"dev-main": "3.4-dev"
},
"thanks": {
"name": "symfony/contracts",
@ -2505,7 +2597,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.1"
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0"
},
"funding": [
{
@ -2521,20 +2613,20 @@
"type": "tidelift"
}
],
"time": "2022-01-02T09:53:40+00:00"
"time": "2023-05-23T14:45:45+00:00"
},
{
"name": "symfony/filesystem",
"version": "v5.4.7",
"version": "v5.4.25",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "3a4442138d80c9f7b600fb297534ac718b61d37f"
"reference": "0ce3a62c9579a53358d3a7eb6b3dfb79789a6364"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/3a4442138d80c9f7b600fb297534ac718b61d37f",
"reference": "3a4442138d80c9f7b600fb297534ac718b61d37f",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/0ce3a62c9579a53358d3a7eb6b3dfb79789a6364",
"reference": "0ce3a62c9579a53358d3a7eb6b3dfb79789a6364",
"shasum": ""
},
"require": {
@ -2569,7 +2661,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v5.4.7"
"source": "https://github.com/symfony/filesystem/tree/v5.4.25"
},
"funding": [
{
@ -2585,20 +2677,20 @@
"type": "tidelift"
}
],
"time": "2022-04-01T12:33:59+00:00"
"time": "2023-05-31T13:04:02+00:00"
},
{
"name": "symfony/finder",
"version": "v5.4.3",
"version": "v5.4.27",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d"
"reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d",
"reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d",
"url": "https://api.github.com/repos/symfony/finder/zipball/ff4bce3c33451e7ec778070e45bd23f74214cd5d",
"reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d",
"shasum": ""
},
"require": {
@ -2632,7 +2724,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.3"
"source": "https://github.com/symfony/finder/tree/v5.4.27"
},
"funding": [
{
@ -2648,32 +2740,32 @@
"type": "tidelift"
}
],
"time": "2022-01-26T16:34:36+00:00"
"time": "2023-07-31T08:02:31+00:00"
},
{
"name": "symfony/flex",
"version": "v1.18.5",
"version": "v2.4.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
"reference": "10e438f53a972439675dc720706f0cd5c0ed94f1"
"reference": "67ee785f1aedada76461de7a7ec10cd7f8ff8d36"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/flex/zipball/10e438f53a972439675dc720706f0cd5c0ed94f1",
"reference": "10e438f53a972439675dc720706f0cd5c0ed94f1",
"url": "https://api.github.com/repos/symfony/flex/zipball/67ee785f1aedada76461de7a7ec10cd7f8ff8d36",
"reference": "67ee785f1aedada76461de7a7ec10cd7f8ff8d36",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0|^2.0",
"php": ">=7.1"
"composer-plugin-api": "^2.1",
"php": ">=8.0"
},
"require-dev": {
"composer/composer": "^1.0.2|^2.0",
"symfony/dotenv": "^4.4|^5.0|^6.0",
"symfony/filesystem": "^4.4|^5.0|^6.0",
"symfony/phpunit-bridge": "^4.4.12|^5.0|^6.0",
"symfony/process": "^4.4|^5.0|^6.0"
"composer/composer": "^2.1",
"symfony/dotenv": "^5.4|^6.0",
"symfony/filesystem": "^5.4|^6.0",
"symfony/phpunit-bridge": "^5.4|^6.0",
"symfony/process": "^5.4|^6.0"
},
"type": "composer-plugin",
"extra": {
@ -2697,7 +2789,7 @@
"description": "Composer plugin for Symfony",
"support": {
"issues": "https://github.com/symfony/flex/issues",
"source": "https://github.com/symfony/flex/tree/v1.18.5"
"source": "https://github.com/symfony/flex/tree/v2.4.2"
},
"funding": [
{
@ -2713,20 +2805,20 @@
"type": "tidelift"
}
],
"time": "2022-02-16T17:26:46+00:00"
"time": "2023-12-05T14:09:35+00:00"
},
{
"name": "symfony/form",
"version": "v5.4.8",
"version": "v5.4.33",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
"reference": "7d1bd919be530e8071314a54bd5ae786452a81bf"
"reference": "9c13bf53e728d3f75ce7a36046ffc2cd0e7d25ec"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/form/zipball/7d1bd919be530e8071314a54bd5ae786452a81bf",
"reference": "7d1bd919be530e8071314a54bd5ae786452a81bf",
"url": "https://api.github.com/repos/symfony/form/zipball/9c13bf53e728d3f75ce7a36046ffc2cd0e7d25ec",
"reference": "9c13bf53e728d3f75ce7a36046ffc2cd0e7d25ec",
"shasum": ""
},
"require": {
@ -2743,19 +2835,18 @@
"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-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",
"doctrine/collections": "^1.0|^2.0",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/console": "^5.4|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
@ -2800,7 +2891,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.8"
"source": "https://github.com/symfony/form/tree/v5.4.33"
},
"funding": [
{
@ -2816,20 +2907,20 @@
"type": "tidelift"
}
],
"time": "2022-04-23T15:25:10+00:00"
"time": "2023-11-30T10:45:54+00:00"
},
{
"name": "symfony/framework-bundle",
"version": "v5.4.7",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
"reference": "7520f553c7a7721652c1b7ac95c09dae62a1676e"
"reference": "14597eccde5051368918bce92393be9ba941db14"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/7520f553c7a7721652c1b7ac95c09dae62a1676e",
"reference": "7520f553c7a7721652c1b7ac95c09dae62a1676e",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/14597eccde5051368918bce92393be9ba941db14",
"reference": "14597eccde5051368918bce92393be9ba941db14",
"shasum": ""
},
"require": {
@ -2843,7 +2934,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",
@ -2856,7 +2947,6 @@
"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/dom-crawler": "<4.4",
@ -2876,18 +2966,18 @@
"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.0",
"doctrine/persistence": "^1.3|^2|^3",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"symfony/asset": "^5.3|^6.0",
"symfony/browser-kit": "^5.4|^6.0",
"symfony/console": "^5.4|^6.0",
"symfony/console": "^5.4.9|^6.0.9",
"symfony/css-selector": "^4.4|^5.0|^6.0",
"symfony/dom-crawler": "^4.4.30|^5.3.7|^6.0",
"symfony/dotenv": "^5.1|^6.0",
@ -2909,7 +2999,7 @@
"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",
@ -2951,7 +3041,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.7"
"source": "https://github.com/symfony/framework-bundle/tree/v5.4.32"
},
"funding": [
{
@ -2967,20 +3057,20 @@
"type": "tidelift"
}
],
"time": "2022-04-01T06:09:41+00:00"
"time": "2023-11-23T15:18:29+00:00"
},
{
"name": "symfony/http-client",
"version": "v5.4.8",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "0dabec4e3898d3e00451dd47b5ef839168f9bbf5"
"reference": "6cdf6cdf48101454f014a9ab4e0905f0b902389d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/0dabec4e3898d3e00451dd47b5ef839168f9bbf5",
"reference": "0dabec4e3898d3e00451dd47b5ef839168f9bbf5",
"url": "https://api.github.com/repos/symfony/http-client/zipball/6cdf6cdf48101454f014a9ab4e0905f0b902389d",
"reference": "6cdf6cdf48101454f014a9ab4e0905f0b902389d",
"shasum": ""
},
"require": {
@ -3006,6 +3096,7 @@
"guzzlehttp/promises": "^1.4",
"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",
@ -3037,8 +3128,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.8"
"source": "https://github.com/symfony/http-client/tree/v5.4.31"
},
"funding": [
{
@ -3054,20 +3148,20 @@
"type": "tidelift"
}
],
"time": "2022-04-12T16:02:29+00:00"
"time": "2023-10-29T12:33:05+00:00"
},
{
"name": "symfony/http-client-contracts",
"version": "v2.5.1",
"version": "v2.5.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client-contracts.git",
"reference": "1a4f708e4e87f335d1b1be6148060739152f0bd5"
"reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/1a4f708e4e87f335d1b1be6148060739152f0bd5",
"reference": "1a4f708e4e87f335d1b1be6148060739152f0bd5",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70",
"reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70",
"shasum": ""
},
"require": {
@ -3116,7 +3210,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/http-client-contracts/tree/v2.5.1"
"source": "https://github.com/symfony/http-client-contracts/tree/v2.5.2"
},
"funding": [
{
@ -3132,20 +3226,20 @@
"type": "tidelift"
}
],
"time": "2022-03-13T20:07:29+00:00"
"time": "2022-04-12T15:48:08+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v5.4.6",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465"
"reference": "cbcd80a4c36f59772d62860fdb0cb6a38da63fd2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/34e89bc147633c0f9dd6caaaf56da3b806a21465",
"reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/cbcd80a4c36f59772d62860fdb0cb6a38da63fd2",
"reference": "cbcd80a4c36f59772d62860fdb0cb6a38da63fd2",
"shasum": ""
},
"require": {
@ -3157,8 +3251,11 @@
"require-dev": {
"predis/predis": "~1.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",
"symfony/mime": "^4.4|^5.0|^6.0"
"symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4",
"symfony/mime": "^4.4|^5.0|^6.0",
"symfony/rate-limiter": "^5.2|^6.0"
},
"suggest": {
"symfony/mime": "To use the file extension guesser"
@ -3189,7 +3286,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.6"
"source": "https://github.com/symfony/http-foundation/tree/v5.4.32"
},
"funding": [
{
@ -3205,20 +3302,20 @@
"type": "tidelift"
}
],
"time": "2022-03-05T21:03:43+00:00"
"time": "2023-11-20T15:40:25+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v5.4.7",
"version": "v5.4.33",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "509243b9b3656db966284c45dffce9316c1ecc5c"
"reference": "892636f9279f953dc266dc088f900b03eecb4ffa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/509243b9b3656db966284c45dffce9316c1ecc5c",
"reference": "509243b9b3656db966284c45dffce9316c1ecc5c",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/892636f9279f953dc266dc088f900b03eecb4ffa",
"reference": "892636f9279f953dc266dc088f900b03eecb4ffa",
"shasum": ""
},
"require": {
@ -3227,7 +3324,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"
@ -3301,7 +3398,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.7"
"source": "https://github.com/symfony/http-kernel/tree/v5.4.33"
},
"funding": [
{
@ -3317,20 +3414,20 @@
"type": "tidelift"
}
],
"time": "2022-04-02T06:04:20+00:00"
"time": "2023-12-01T16:51:11+00:00"
},
{
"name": "symfony/lock",
"version": "v5.4.15",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/lock.git",
"reference": "109a20faa6119578b46457ef8cffb9389e20e5ca"
"reference": "a6d7d829f4907134775a0e1b162780e61f80ed87"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/lock/zipball/109a20faa6119578b46457ef8cffb9389e20e5ca",
"reference": "109a20faa6119578b46457ef8cffb9389e20e5ca",
"url": "https://api.github.com/repos/symfony/lock/zipball/a6d7d829f4907134775a0e1b162780e61f80ed87",
"reference": "a6d7d829f4907134775a0e1b162780e61f80ed87",
"shasum": ""
},
"require": {
@ -3343,7 +3440,7 @@
"doctrine/dbal": "<2.13"
},
"require-dev": {
"doctrine/dbal": "^2.13|^3.0",
"doctrine/dbal": "^2.13|^3|^4",
"predis/predis": "~1.0"
},
"type": "library",
@ -3380,7 +3477,7 @@
"semaphore"
],
"support": {
"source": "https://github.com/symfony/lock/tree/v5.4.15"
"source": "https://github.com/symfony/lock/tree/v5.4.32"
},
"funding": [
{
@ -3396,20 +3493,20 @@
"type": "tidelift"
}
],
"time": "2022-10-27T07:55:40+00:00"
"time": "2023-11-20T15:40:25+00:00"
},
{
"name": "symfony/options-resolver",
"version": "v5.4.3",
"version": "v5.4.21",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
"reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8"
"reference": "4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8",
"reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9",
"reference": "4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9",
"shasum": ""
},
"require": {
@ -3449,7 +3546,7 @@
"options"
],
"support": {
"source": "https://github.com/symfony/options-resolver/tree/v5.4.3"
"source": "https://github.com/symfony/options-resolver/tree/v5.4.21"
},
"funding": [
{
@ -3465,24 +3562,25 @@
"type": "tidelift"
}
],
"time": "2022-01-02T09:53:40+00:00"
"time": "2023-02-14T08:03:56+00:00"
},
{
"name": "symfony/password-hasher",
"version": "v5.4.8",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/password-hasher.git",
"reference": "bc9c982b25c0292aa4e009b3e9cc9835e4d1e94f"
"reference": "f1a07181f3442836b0aadfd4c65841804d4173c4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/bc9c982b25c0292aa4e009b3e9cc9835e4d1e94f",
"reference": "bc9c982b25c0292aa4e009b3e9cc9835e4d1e94f",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/f1a07181f3442836b0aadfd4c65841804d4173c4",
"reference": "f1a07181f3442836b0aadfd4c65841804d4173c4",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.15"
},
"conflict": {
@ -3522,7 +3620,7 @@
"password"
],
"support": {
"source": "https://github.com/symfony/password-hasher/tree/v5.4.8"
"source": "https://github.com/symfony/password-hasher/tree/v5.4.31"
},
"funding": [
{
@ -3538,20 +3636,20 @@
"type": "tidelift"
}
],
"time": "2022-04-15T13:57:25+00:00"
"time": "2023-11-02T10:18:11+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.25.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
"reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
"reference": "875e90aeea2777b6f135677f618529449334a612"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
"reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612",
"reference": "875e90aeea2777b6f135677f618529449334a612",
"shasum": ""
},
"require": {
@ -3563,7 +3661,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -3603,7 +3701,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0"
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0"
},
"funding": [
{
@ -3619,20 +3717,20 @@
"type": "tidelift"
}
],
"time": "2021-11-23T21:10:46+00:00"
"time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-intl-icu",
"version": "v1.25.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "c023a439b8551e320cc3c8433b198e408a623af1"
"reference": "e46b4da57951a16053cd751f63f4a24292788157"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/c023a439b8551e320cc3c8433b198e408a623af1",
"reference": "c023a439b8551e320cc3c8433b198e408a623af1",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e46b4da57951a16053cd751f63f4a24292788157",
"reference": "e46b4da57951a16053cd751f63f4a24292788157",
"shasum": ""
},
"require": {
@ -3644,7 +3742,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -3690,7 +3788,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.25.0"
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.28.0"
},
"funding": [
{
@ -3706,20 +3804,20 @@
"type": "tidelift"
}
],
"time": "2021-10-26T17:16:04+00:00"
"time": "2023-03-21T17:27:24+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.25.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
"reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
"reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
"reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
"shasum": ""
},
"require": {
@ -3731,7 +3829,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -3774,7 +3872,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0"
},
"funding": [
{
@ -3790,20 +3888,20 @@
"type": "tidelift"
}
],
"time": "2021-02-19T12:13:01+00:00"
"time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.25.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
"reference": "42292d99c55abe617799667f454222c54c60e229"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
"reference": "42292d99c55abe617799667f454222c54c60e229",
"shasum": ""
},
"require": {
@ -3818,7 +3916,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -3857,7 +3955,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
},
"funding": [
{
@ -3873,20 +3971,20 @@
"type": "tidelift"
}
],
"time": "2021-11-30T18:21:41+00:00"
"time": "2023-07-28T09:04:16+00:00"
},
{
"name": "symfony/polyfill-php73",
"version": "v1.25.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
"reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
"reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
"reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5",
"reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5",
"shasum": ""
},
"require": {
@ -3895,7 +3993,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -3936,7 +4034,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0"
"source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0"
},
"funding": [
{
@ -3952,20 +4050,20 @@
"type": "tidelift"
}
],
"time": "2021-06-05T21:20:04+00:00"
"time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.25.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c"
"reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c",
"reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
"reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
"shasum": ""
},
"require": {
@ -3974,7 +4072,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -4019,7 +4117,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0"
},
"funding": [
{
@ -4035,20 +4133,20 @@
"type": "tidelift"
}
],
"time": "2022-03-04T08:16:47+00:00"
"time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-php81",
"version": "v1.25.0",
"version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
"reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f"
"reference": "7581cd600fa9fd681b797d00b02f068e2f13263b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
"reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b",
"reference": "7581cd600fa9fd681b797d00b02f068e2f13263b",
"shasum": ""
},
"require": {
@ -4057,7 +4155,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.23-dev"
"dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -4098,7 +4196,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0"
"source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0"
},
"funding": [
{
@ -4114,20 +4212,20 @@
"type": "tidelift"
}
],
"time": "2021-09-13T13:58:11+00:00"
"time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/property-access",
"version": "v5.4.8",
"version": "v5.4.26",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
"reference": "fe501d498d6ec7e9efe928c90fabedf629116495"
"reference": "0249e46f69e92049a488f39fcf531cb42c50caaa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/fe501d498d6ec7e9efe928c90fabedf629116495",
"reference": "fe501d498d6ec7e9efe928c90fabedf629116495",
"url": "https://api.github.com/repos/symfony/property-access/zipball/0249e46f69e92049a488f39fcf531cb42c50caaa",
"reference": "0249e46f69e92049a488f39fcf531cb42c50caaa",
"shasum": ""
},
"require": {
@ -4175,11 +4273,11 @@
"injection",
"object",
"property",
"property path",
"property-path",
"reflection"
],
"support": {
"source": "https://github.com/symfony/property-access/tree/v5.4.8"
"source": "https://github.com/symfony/property-access/tree/v5.4.26"
},
"funding": [
{
@ -4195,20 +4293,20 @@
"type": "tidelift"
}
],
"time": "2022-04-12T15:48:08+00:00"
"time": "2023-07-13T15:20:41+00:00"
},
{
"name": "symfony/property-info",
"version": "v5.4.7",
"version": "v5.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
"reference": "0fc07795712972b9792f203d0fe0e77c26c3281d"
"reference": "d43b85b00699b4484964c297575b5c6f9dc5f6e1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-info/zipball/0fc07795712972b9792f203d0fe0e77c26c3281d",
"reference": "0fc07795712972b9792f203d0fe0e77c26c3281d",
"url": "https://api.github.com/repos/symfony/property-info/zipball/d43b85b00699b4484964c297575b5c6f9dc5f6e1",
"reference": "d43b85b00699b4484964c297575b5c6f9dc5f6e1",
"shasum": ""
},
"require": {
@ -4223,7 +4321,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",
@ -4270,7 +4368,7 @@
"validator"
],
"support": {
"source": "https://github.com/symfony/property-info/tree/v5.4.7"
"source": "https://github.com/symfony/property-info/tree/v5.4.24"
},
"funding": [
{
@ -4286,36 +4384,37 @@
"type": "tidelift"
}
],
"time": "2022-03-30T13:40:48+00:00"
"time": "2023-05-15T20:11:03+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"
@ -4323,7 +4422,7 @@
"type": "symfony-bridge",
"extra": {
"branch-alias": {
"dev-main": "2.1-dev"
"dev-main": "2.3-dev"
}
},
"autoload": {
@ -4358,7 +4457,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": [
{
@ -4374,20 +4473,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.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/rate-limiter.git",
"reference": "1a3a43eeb498290100e4a1559f4a48be14900bc2"
"reference": "10c8064e57ae1bb6dee152d44d737a1a799f8386"
},
"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/10c8064e57ae1bb6dee152d44d737a1a799f8386",
"reference": "10c8064e57ae1bb6dee152d44d737a1a799f8386",
"shasum": ""
},
"require": {
@ -4428,7 +4527,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.30"
},
"funding": [
{
@ -4444,20 +4543,20 @@
"type": "tidelift"
}
],
"time": "2022-07-20T13:00:38+00:00"
"time": "2023-10-10T05:34:18+00:00"
},
{
"name": "symfony/routing",
"version": "v5.4.3",
"version": "v5.4.33",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "44b29c7a94e867ccde1da604792f11a469958981"
"reference": "5b5b86670f947db92ab54cdcff585e76064d0b04"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981",
"reference": "44b29c7a94e867ccde1da604792f11a469958981",
"url": "https://api.github.com/repos/symfony/routing/zipball/5b5b86670f947db92ab54cdcff585e76064d0b04",
"reference": "5b5b86670f947db92ab54cdcff585e76064d0b04",
"shasum": ""
},
"require": {
@ -4472,7 +4571,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",
@ -4518,7 +4617,7 @@
"url"
],
"support": {
"source": "https://github.com/symfony/routing/tree/v5.4.3"
"source": "https://github.com/symfony/routing/tree/v5.4.33"
},
"funding": [
{
@ -4534,20 +4633,20 @@
"type": "tidelift"
}
],
"time": "2022-01-02T09:53:40+00:00"
"time": "2023-12-01T09:28:00+00:00"
},
{
"name": "symfony/runtime",
"version": "v5.4.7",
"version": "v5.4.26",
"source": {
"type": "git",
"url": "https://github.com/symfony/runtime.git",
"reference": "dc22a2876de3a3dc26b686570d9e638d443b575e"
"reference": "4659b552bc9f2380986e3f4b7e2bd4e512470e0d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/runtime/zipball/dc22a2876de3a3dc26b686570d9e638d443b575e",
"reference": "dc22a2876de3a3dc26b686570d9e638d443b575e",
"url": "https://api.github.com/repos/symfony/runtime/zipball/4659b552bc9f2380986e3f4b7e2bd4e512470e0d",
"reference": "4659b552bc9f2380986e3f4b7e2bd4e512470e0d",
"shasum": ""
},
"require": {
@ -4560,7 +4659,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"
@ -4594,8 +4693,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.7"
"source": "https://github.com/symfony/runtime/tree/v5.4.26"
},
"funding": [
{
@ -4611,20 +4713,20 @@
"type": "tidelift"
}
],
"time": "2022-03-08T15:36:36+00:00"
"time": "2023-07-16T16:48:57+00:00"
},
{
"name": "symfony/security-bundle",
"version": "v5.4.8",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
"reference": "9806c9d491584e14a4444ea861a15428ab4b00be"
"reference": "92e24de1759b6a502896d87c5e0997973ef47ac4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/9806c9d491584e14a4444ea861a15428ab4b00be",
"reference": "9806c9d491584e14a4444ea861a15428ab4b00be",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/92e24de1759b6a502896d87c5e0997973ef47ac4",
"reference": "92e24de1759b6a502896d87c5e0997973ef47ac4",
"shasum": ""
},
"require": {
@ -4641,7 +4743,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",
@ -4651,7 +4754,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",
@ -4697,7 +4800,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.8"
"source": "https://github.com/symfony/security-bundle/tree/v5.4.31"
},
"funding": [
{
@ -4713,20 +4816,20 @@
"type": "tidelift"
}
],
"time": "2022-04-15T11:48:31+00:00"
"time": "2023-11-09T09:26:13+00:00"
},
{
"name": "symfony/security-core",
"version": "v5.4.8",
"version": "v5.4.30",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
"reference": "4540ecb8ae82cc46d9580672888597f481ff0440"
"reference": "3908c54da30dd68c2fe31915d82a1c81809d1928"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-core/zipball/4540ecb8ae82cc46d9580672888597f481ff0440",
"reference": "4540ecb8ae82cc46d9580672888597f481ff0440",
"url": "https://api.github.com/repos/symfony/security-core/zipball/3908c54da30dd68c2fe31915d82a1c81809d1928",
"reference": "3908c54da30dd68c2fe31915d82a1c81809d1928",
"shasum": ""
},
"require": {
@ -4790,7 +4893,7 @@
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-core/tree/v5.4.8"
"source": "https://github.com/symfony/security-core/tree/v5.4.30"
},
"funding": [
{
@ -4806,24 +4909,25 @@
"type": "tidelift"
}
],
"time": "2022-04-15T08:07:45+00:00"
"time": "2023-10-27T07:38:28+00:00"
},
{
"name": "symfony/security-csrf",
"version": "v5.4.3",
"version": "v5.4.27",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
"reference": "57c1c252ca756289c2b61327e08fb10be3936956"
"reference": "995fcfcc5a3be09df157b4960668f61cceb86611"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/57c1c252ca756289c2b61327e08fb10be3936956",
"reference": "57c1c252ca756289c2b61327e08fb10be3936956",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/995fcfcc5a3be09df157b4960668f61cceb86611",
"reference": "995fcfcc5a3be09df157b4960668f61cceb86611",
"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"
},
@ -4862,7 +4966,7 @@
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-csrf/tree/v5.4.3"
"source": "https://github.com/symfony/security-csrf/tree/v5.4.27"
},
"funding": [
{
@ -4878,24 +4982,25 @@
"type": "tidelift"
}
],
"time": "2022-01-02T09:53:40+00:00"
"time": "2023-07-28T14:44:35+00:00"
},
{
"name": "symfony/security-guard",
"version": "v5.4.3",
"version": "v5.4.27",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-guard.git",
"reference": "3d68d9f8e162f6655eb0a0237b9f333a82a19da9"
"reference": "72c53142533462fc6fda4a429c2a21c2b944a8cc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-guard/zipball/3d68d9f8e162f6655eb0a0237b9f333a82a19da9",
"reference": "3d68d9f8e162f6655eb0a0237b9f333a82a19da9",
"url": "https://api.github.com/repos/symfony/security-guard/zipball/72c53142533462fc6fda4a429c2a21c2b944a8cc",
"reference": "72c53142533462fc6fda4a429c2a21c2b944a8cc",
"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"
@ -4929,7 +5034,7 @@
"description": "Symfony Security Component - Guard",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-guard/tree/v5.4.3"
"source": "https://github.com/symfony/security-guard/tree/v5.4.27"
},
"funding": [
{
@ -4945,20 +5050,20 @@
"type": "tidelift"
}
],
"time": "2022-01-02T09:53:40+00:00"
"time": "2023-07-28T14:44:35+00:00"
},
{
"name": "symfony/security-http",
"version": "v5.4.8",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
"reference": "3d4b612da3a278285e6fd16fc2e5233820eeba0d"
"reference": "6d3cd5a4deee9697738db8d24258890ca4140ae9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-http/zipball/3d4b612da3a278285e6fd16fc2e5233820eeba0d",
"reference": "3d4b612da3a278285e6fd16fc2e5233820eeba0d",
"url": "https://api.github.com/repos/symfony/security-http/zipball/6d3cd5a4deee9697738db8d24258890ca4140ae9",
"reference": "6d3cd5a4deee9697738db8d24258890ca4140ae9",
"shasum": ""
},
"require": {
@ -4969,7 +5074,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",
@ -5014,7 +5120,7 @@
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-http/tree/v5.4.8"
"source": "https://github.com/symfony/security-http/tree/v5.4.31"
},
"funding": [
{
@ -5030,20 +5136,20 @@
"type": "tidelift"
}
],
"time": "2022-04-16T13:32:04+00:00"
"time": "2023-11-03T16:13:08+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v2.5.1",
"version": "v2.5.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c"
"reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
"reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
"reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
"shasum": ""
},
"require": {
@ -5097,7 +5203,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v2.5.1"
"source": "https://github.com/symfony/service-contracts/tree/v2.5.2"
},
"funding": [
{
@ -5113,20 +5219,20 @@
"type": "tidelift"
}
],
"time": "2022-03-13T20:07:29+00:00"
"time": "2022-05-30T19:17:29+00:00"
},
{
"name": "symfony/string",
"version": "v5.4.3",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "92043b7d8383e48104e411bc9434b260dbeb5a10"
"reference": "91bf4453d65d8231688a04376c3a40efe0770f04"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10",
"reference": "92043b7d8383e48104e411bc9434b260dbeb5a10",
"url": "https://api.github.com/repos/symfony/string/zipball/91bf4453d65d8231688a04376c3a40efe0770f04",
"reference": "91bf4453d65d8231688a04376c3a40efe0770f04",
"shasum": ""
},
"require": {
@ -5183,7 +5289,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v5.4.3"
"source": "https://github.com/symfony/string/tree/v5.4.32"
},
"funding": [
{
@ -5199,20 +5305,20 @@
"type": "tidelift"
}
],
"time": "2022-01-02T09:53:40+00:00"
"time": "2023-11-26T13:43:46+00:00"
},
{
"name": "symfony/translation",
"version": "v5.4.14",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "f0ed07675863aa6e3939df8b1bc879450b585cab"
"reference": "ba72f72fceddf36f00bd495966b5873f2d17ad8f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/f0ed07675863aa6e3939df8b1bc879450b585cab",
"reference": "f0ed07675863aa6e3939df8b1bc879450b585cab",
"url": "https://api.github.com/repos/symfony/translation/zipball/ba72f72fceddf36f00bd495966b5873f2d17ad8f",
"reference": "ba72f72fceddf36f00bd495966b5873f2d17ad8f",
"shasum": ""
},
"require": {
@ -5280,7 +5386,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.31"
},
"funding": [
{
@ -5296,20 +5402,20 @@
"type": "tidelift"
}
],
"time": "2022-10-07T08:01:20+00:00"
"time": "2023-11-03T16:16:43+00:00"
},
{
"name": "symfony/translation-contracts",
"version": "v2.5.1",
"version": "v2.5.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
"reference": "1211df0afa701e45a04253110e959d4af4ef0f07"
"reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1211df0afa701e45a04253110e959d4af4ef0f07",
"reference": "1211df0afa701e45a04253110e959d4af4ef0f07",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
"reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
"shasum": ""
},
"require": {
@ -5358,7 +5464,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.1"
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.2"
},
"funding": [
{
@ -5374,20 +5480,20 @@
"type": "tidelift"
}
],
"time": "2022-01-02T09:53:40+00:00"
"time": "2022-06-27T16:58:25+00:00"
},
{
"name": "symfony/twig-bridge",
"version": "v5.4.8",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
"reference": "f68dbdb80c9ce425f503512dfa8c8c01cf789e43"
"reference": "fc6ee0a3b672ea12ca1f26592d257bfc7f4ee942"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/f68dbdb80c9ce425f503512dfa8c8c01cf789e43",
"reference": "f68dbdb80c9ce425f503512dfa8c8c01cf789e43",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/fc6ee0a3b672ea12ca1f26592d257bfc7f4ee942",
"reference": "fc6ee0a3b672ea12ca1f26592d257bfc7f4ee942",
"shasum": ""
},
"require": {
@ -5400,22 +5506,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 +5585,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.8"
"source": "https://github.com/symfony/twig-bridge/tree/v5.4.31"
},
"funding": [
{
@ -5495,25 +5601,26 @@
"type": "tidelift"
}
],
"time": "2022-04-12T15:48:08+00:00"
"time": "2023-11-09T21:19:08+00:00"
},
{
"name": "symfony/twig-bundle",
"version": "v5.4.8",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
"reference": "c992b4474c3a31f3c40a1ca593d213833f91b818"
"reference": "62e3505a62f482a577f55ba08747dc6a3b7463b3"
},
"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/62e3505a62f482a577f55ba08747dc6a3b7463b3",
"reference": "62e3505a62f482a577f55ba08747dc6a3b7463b3",
"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",
@ -5528,7 +5635,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",
@ -5568,7 +5675,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.31"
},
"funding": [
{
@ -5584,20 +5691,20 @@
"type": "tidelift"
}
],
"time": "2022-04-03T13:03:10+00:00"
"time": "2023-10-31T07:58:33+00:00"
},
{
"name": "symfony/validator",
"version": "v5.4.8",
"version": "v5.4.32",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
"reference": "bdc6d04ba95c73ccbf906b4ad9b8775c738d83ad"
"reference": "d205d071c4a7ef5b6b43349c7e41d47d1b227636"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/bdc6d04ba95c73ccbf906b4ad9b8775c738d83ad",
"reference": "bdc6d04ba95c73ccbf906b4ad9b8775c738d83ad",
"url": "https://api.github.com/repos/symfony/validator/zipball/d205d071c4a7ef5b6b43349c7e41d47d1b227636",
"reference": "d205d071c4a7ef5b6b43349c7e41d47d1b227636",
"shasum": ""
},
"require": {
@ -5614,7 +5721,6 @@
"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",
@ -5624,9 +5730,9 @@
"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",
@ -5681,7 +5787,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/validator/tree/v5.4.8"
"source": "https://github.com/symfony/validator/tree/v5.4.32"
},
"funding": [
{
@ -5697,20 +5803,20 @@
"type": "tidelift"
}
],
"time": "2022-04-15T08:07:45+00:00"
"time": "2023-11-29T07:42:18+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v5.4.6",
"version": "v5.4.29",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0"
"reference": "6172e4ae3534d25ee9e07eb487c20be7760fcc65"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/294e9da6e2e0dd404e983daa5aa74253d92c05d0",
"reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/6172e4ae3534d25ee9e07eb487c20be7760fcc65",
"reference": "6172e4ae3534d25ee9e07eb487c20be7760fcc65",
"shasum": ""
},
"require": {
@ -5719,12 +5825,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"
@ -5770,7 +5876,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v5.4.6"
"source": "https://github.com/symfony/var-dumper/tree/v5.4.29"
},
"funding": [
{
@ -5786,28 +5892,28 @@
"type": "tidelift"
}
],
"time": "2022-03-02T12:42:23+00:00"
"time": "2023-09-12T10:09:58+00:00"
},
{
"name": "symfony/var-exporter",
"version": "v5.4.7",
"version": "v6.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
"reference": "7eacaa588c9b27f2738575adb4a8457a80d9c807"
"reference": "2d08ca6b9cc704dce525615d1e6d1788734f36d9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/7eacaa588c9b27f2738575adb4a8457a80d9c807",
"reference": "7eacaa588c9b27f2738575adb4a8457a80d9c807",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/2d08ca6b9cc704dce525615d1e6d1788734f36d9",
"reference": "2d08ca6b9cc704dce525615d1e6d1788734f36d9",
"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/var-dumper": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@ -5840,10 +5946,12 @@
"export",
"hydrate",
"instantiate",
"lazy-loading",
"proxy",
"serialize"
],
"support": {
"source": "https://github.com/symfony/var-exporter/tree/v5.4.7"
"source": "https://github.com/symfony/var-exporter/tree/v6.4.1"
},
"funding": [
{
@ -5859,26 +5967,26 @@
"type": "tidelift"
}
],
"time": "2022-03-31T17:09:19+00:00"
"time": "2023-11-30T10:32:10+00:00"
},
{
"name": "symfony/web-profiler-bundle",
"version": "v5.4.8",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
"reference": "909c6eea7815066a80d0a362ed41abd7924e376a"
"reference": "c3e04e0ad13df22acad1157a5b66404a85c3c538"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/909c6eea7815066a80d0a362ed41abd7924e376a",
"reference": "909c6eea7815066a80d0a362ed41abd7924e376a",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/c3e04e0ad13df22acad1157a5b66404a85c3c538",
"reference": "c3e04e0ad13df22acad1157a5b66404a85c3c538",
"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",
@ -5923,7 +6031,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.8"
"source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.31"
},
"funding": [
{
@ -5939,20 +6047,20 @@
"type": "tidelift"
}
],
"time": "2022-04-22T08:14:12+00:00"
"time": "2023-10-31T14:39:57+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": {
@ -5996,7 +6104,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": [
{
@ -6012,20 +6120,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.3",
"version": "v5.4.31",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "e80f87d2c9495966768310fc531b487ce64237a2"
"reference": "f387675d7f5fc4231f7554baa70681f222f73563"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2",
"reference": "e80f87d2c9495966768310fc531b487ce64237a2",
"url": "https://api.github.com/repos/symfony/yaml/zipball/f387675d7f5fc4231f7554baa70681f222f73563",
"reference": "f387675d7f5fc4231f7554baa70681f222f73563",
"shasum": ""
},
"require": {
@ -6071,7 +6179,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v5.4.3"
"source": "https://github.com/symfony/yaml/tree/v5.4.31"
},
"funding": [
{
@ -6087,37 +6195,33 @@
"type": "tidelift"
}
],
"time": "2022-01-26T16:32:32+00:00"
"time": "2023-11-03T14:41:28+00:00"
},
{
"name": "twig/twig",
"version": "v3.3.10",
"version": "v3.8.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "8442df056c51b706793adf80a9fd363406dd3674"
"reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/8442df056c51b706793adf80a9fd363406dd3674",
"reference": "8442df056c51b706793adf80a9fd363406dd3674",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
"reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"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.3|^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.3-dev"
}
},
"autoload": {
"psr-4": {
"Twig\\": "src/"
@ -6151,7 +6255,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.3.10"
"source": "https://github.com/twigphp/Twig/tree/v3.8.0"
},
"funding": [
{
@ -6163,7 +6267,7 @@
"type": "tidelift"
}
],
"time": "2022-04-06T06:47:41+00:00"
"time": "2023-11-21T18:54:41+00:00"
}
],
"packages-dev": [],

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)%&prefix=%env(string:HYDRA_SQL_REDIS_PREFIX)%&ttl=%env(HYDRA_SQL_REDIS_TTL)%'
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

@ -2,11 +2,16 @@ security:
enable_authenticator_manager: true
# https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords
password_hashers:
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
app_hasher:
# the service ID of your custom hasher (the FQCN using the default services.yaml)
id: 'App\Security\Hasher\PasswordEncoder'
# App\Entity\User: 'sha256'
# Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface:
# algorithm: 'sha256'
# https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider
providers:
pdo_user_provider:
id: App\Security\PdoUserProvider
sql_login_provider:
id: App\Security\SQLLoginUserProvider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
@ -14,17 +19,9 @@ security:
main:
# lazy: true
stateless: false
provider: pdo_user_provider
provider: sql_login_provider
custom_authenticators:
- App\Security\PdoUserAuthenticator
entry_point: form_login
form_login:
login_path: app_login
check_path: app_login
username_parameter: login
password_parameter: password
enable_csrf: true
- App\Security\SQLLoginUserAuthenticator
login_throttling:
max_attempts: 3
@ -40,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,9 @@
twig:
globals:
locales: "%locales%"
default_path: '%kernel.project_dir%/templates'
form_themes:
- 'bootstrap_5_layout.html.twig'
globals:
locales: "%app.supported_locales%"
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

@ -1,8 +0,0 @@
pdo:
column_login_name: email
column_password_name: password
table_name: usager
data_to_fetch:
- email
- lastname
- firstname

View File

@ -9,8 +9,9 @@ parameters:
database.user: "%env(resolve:DB_USER)%"
database.password: "%env(resolve:DB_PASSWORD)%"
# algorythme de hahshage utilisé "md5", "sha256", "haval160,4", etc.
hashAlgo: "sha256"
# algorythme de hashage utilisé "md5", "sha256", "haval160,4", etc.
env(HASH_ALGO_LEGACY): "sha256"
hashAlgoLegacy: '%env(resolve:HASH_ALGO_LEGACY)%'
# adresse du site hote
issuer_url: '%env(resolve:ISSUER_URL)%'
@ -21,9 +22,13 @@ parameters:
default_locale: '%env(DEFAULT_LOCALE)%'
env(DEFAULT_LOCALE): 'fr'
security_pattern: '%env(resolve:SECURITY_PATTERN)%'
env(APP_LOCALES): "fr,en"
locales: '%env(APP_LOCALES)%'
app.supported_locales: ~
env(PEPPER): ~
pepper: '%env(resolve:PEPPER)%'
services:
# default configuration for services in *this* file
_defaults:
@ -39,11 +44,15 @@ services:
- '../src/Entity/'
- '../src/Kernel.php'
App\Security\PdoUserAuthenticator:
App\Security\SQLLoginUserAuthenticator:
arguments:
$baseUrl: '%base_url%'
App\Pdo\PdoRequest:
App\Hydra\HydraService:
arguments:
$baseUrl: '%base_url%'
App\SQLLogin\SQLLoginRequest:
arguments:
$config: []
$dsn: "%database.dsn%"
@ -58,5 +67,11 @@ services:
App\EventListener\LocaleSubscriber:
arguments:
$defaultLocale: "%default_locale%"
App\Security\Hasher\PasswordEncoder:
arguments:
$pepper: '%pepper%'
$hashAlgoLegacy: '%hashAlgoLegacy%'
$securityPattern: '%security_pattern%'
# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones

View File

@ -0,0 +1,9 @@
sql_login:
login_column_name: email
password_column_name: password
salt_column_name: salt
table_name: usager
data_to_fetch:
- email
- lastname
- firstname

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,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', 'Locke', 'John'),
('test2@test.com', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 'Dubois', 'Angela'),
('test3@test.com', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 'Dupont', 'Henri'),
('test4@test.com', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 'Durand', 'Isabelle');
GRANT ALL PRIVILEGES ON DATABASE usager TO lasql

View File

@ -3,17 +3,18 @@ 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:8080
volumes:
- .:/var/www
- ./src:/app/src
- ./config:/app/config
- /etc/localtime:/etc/localtime:ro
- $HOME/.ssh:/root/.host-ssh:ro
tmpfs:
@ -28,15 +29,19 @@ services:
- "localhost:host-gateway"
- "host.docker.internal:host-gateway"
environment:
- PHP_FPM_MEMORY_LIMIT=128m
- APP_ENV=dev
- 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"
- SECURITY_PATTERN=password,salt,pepper
oidc-test:
@ -52,20 +57,21 @@ services:
depends_on:
hydra:
condition: service_healthy
network_mode: host
network_mode: host
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
@ -91,7 +97,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
@ -105,7 +111,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:
@ -115,9 +121,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:
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-standalone-2023.11.16-stable.1541.eec311d

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-standalone-2023.11.16-stable.1541.eec311d

11207
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -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);
}

111
readme.md
View File

@ -3,66 +3,43 @@
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
## Configuration
### Variables d'environnement
Dans le cas d'utilsation du thème pour personaliser la page de login
|Variable|Description|Valeur par défaut|Utilisation|
|--------|-----------|-----------------|-----------|
|`APP_ENV`|Environnement symfony|prod|dev:prod|
|`APP_DEBUG`|Console de debug symofny|false|true:false|
|`PHP_FPM_MEMORY_LIMIT`|php-fpm memory limit|128mo||
|`NGINX_APP_SERVER_LISTEN`|Port d'écoute de l'application|8080||
|`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?&redis_sentinel=mymaster|obligatoire|
### Développement
### Algorithmes de hashage compatibles
Un environnement Docker Compose est proposé comme support de développement.
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.
Afin de démarrer celui-ci:
### 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"`
```bash
### Schéma de base de donnée
Permet d'adapter les requetes SQL à la base de donnée utilisée en indiquant les noms de colonnes de celle-ci.
# Démarrer l'environnement docker-compose
make up
# fermer l'environnement
make down
```
## Variables d'environnement
```
DB_USER="lasql"
DB_PASSWORD="lasql"
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"
```
### 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
un base de données postgres est montée dans l'environnement pour tester la connexion:
utilisateurs disponibles au démarage:
('test1@test.com', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 'Locke', 'John'),
('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
```
pdo:
column_login_name: email
column_password_name: password
```yaml
# config/sql_login_configuration/sql_login.yaml
sql_login:
login_column_name: email
password_column_name: password
salt_column_name: ~
table_name: usager
data_to_fetch:
- email
@ -70,7 +47,29 @@ pdo:
- firstname
```
#### 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)|
|---|-----------|------------------|
@ -79,4 +78,4 @@ pdo:
|`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`
|`pgadmin`| pour administrer la base de donnée |`8085`

View File

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

View File

@ -3,14 +3,25 @@
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class LocaleController extends AbstractController
{
#[Route(path: 'locale/{locale}', name: 'locale_change')]
public function changeLocal(string $locale, Request $request)
private ParameterBagInterface $params;
public function __construct(ParameterBagInterface $params)
{
$this->params = $params;
}
#[Route(path: 'locale/{locale?}', name: 'locale_change')]
public function changeLocal(?string $locale, Request $request)
{
if (empty($locale)) {
$locale = $this->params->get('default_locale');
}
// On stocke la langue dans la session
$request->getSession()->set('_locale', $locale);

View File

@ -8,6 +8,7 @@ use App\Hydra\HydraService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
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;
@ -29,6 +30,14 @@ class MainController extends AbstractController
{
return $this->hydra->handleLoginRequest($request);
}
/*
* Route de Healthcheck (notament pour kubernetes)
*/
#[Route('/health', name: 'health')]
public function health(Request $request)
{
return new Response('healthy', 200);
}
#[Route('/connect/login-accept', name: 'app_login_accept')]
public function loginAccept(Request $request)

View File

@ -3,7 +3,7 @@
namespace App\Controller;
use App\Form\LoginType;
use App\Security\PdoUserAuthenticator;
use App\Security\SQLLoginUserAuthenticator;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Form\FormError;
@ -28,17 +28,17 @@ class SecurityController extends AbstractController
$loginForm = $this->createForm(LoginType::class, null);
$error = $authenticationUtils->getLastAuthenticationError();
if ($error) {
if ($request->getSession()->has(PdoUserAuthenticator::ERROR_LOGIN)) {
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_LOGIN)) {
$loginForm->get('login')->addError(new FormError($trans->trans('error.login', [], 'messages')));
$request->getSession()->remove(PdoUserAuthenticator::ERROR_LOGIN);
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_LOGIN);
}
if ($request->getSession()->has(PdoUserAuthenticator::ERROR_PASSWORD)) {
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_PASSWORD)) {
$loginForm->get('password')->addError(new FormError($trans->trans('error.password', [], 'messages')));
$request->getSession()->remove(PdoUserAuthenticator::ERROR_PASSWORD);
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_PASSWORD);
}
if ($request->getSession()->has(PdoUserAuthenticator::ERROR_PDO)) {
$loginForm->addError(new FormError($trans->trans('error.pdo', [], 'messages')));
$request->getSession()->remove(PdoUserAuthenticator::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);
}
}

View File

@ -1,25 +0,0 @@
<?php
namespace App\DependencyInjection;
use App\Pdo\PdoRequest;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class PdoConfiguration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder('pdo');
$treeBuilder->getRootNode()->children()
->scalarNode(PdoRequest::COLUMN_LOGIN_NAME)->isRequired()->cannotBeEmpty()->end()
->scalarNode(PdoRequest::COLUMN_PASSWORD_NAME)->isRequired()->cannotBeEmpty()->end()
->scalarNode(PdoRequest::TABLE_NAME)->isRequired()->cannotBeEmpty()->end()
->arrayNode(PdoRequest::DATA_TO_FETCH)
->scalarPrototype()->end()
->end()
->end();
return $treeBuilder;
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace App\DependencyInjection;
use App\SQLLogin\SQLLoginRequest;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class SQLLoginConfiguration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder('sql_login');
$treeBuilder->getRootNode()->children()
->scalarNode(SQLLoginRequest::LOGIN_COLUMN_NAME)->isRequired()->cannotBeEmpty()->end()
->scalarNode(SQLLoginRequest::PASSWORD_COLUMN_NAME)->isRequired()->cannotBeEmpty()->end()
->scalarNode(SQLLoginRequest::SALT_COLUMN_NAME)->end()
->scalarNode(SQLLoginRequest::TABLE_NAME)->isRequired()->cannotBeEmpty()->end()
->arrayNode(SQLLoginRequest::DATA_TO_FETCH)
->scalarPrototype()->end()
->end()
->end();
return $treeBuilder;
}
}

View File

@ -2,26 +2,26 @@
namespace App\DependencyInjection;
use App\Pdo\PdoRequest;
use App\SQLLogin\SQLLoginRequest;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;
class PdoExtension extends Extension implements CompilerPassInterface
class SQLLoginExtension extends Extension implements CompilerPassInterface
{
/** @var array */
protected $pdoConfig;
protected $sqlLoginConfig;
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new PdoConfiguration();
$configuration = new SQLLoginConfiguration();
$config = $this->processConfiguration($configuration, $configs);
$this->pdoConfig = $config;
$this->sqlLoginConfig = $config;
}
public function process(ContainerBuilder $container)
{
$definition = $container->getDefinition(PdoRequest::class);
$definition->replaceArgument('$config', $this->pdoConfig);
$definition = $container->getDefinition(SQLLoginRequest::class);
$definition->replaceArgument('$config', $this->sqlLoginConfig);
}
}

View File

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

View File

@ -4,15 +4,16 @@ namespace App\EventListener;
use App\Hydra\HydraService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Http\Event\LogoutEvent;
class LogoutSubscriber implements EventSubscriberInterface
{
private HydraService $hydra;
public function __construct(
private UrlGeneratorInterface $urlGenerator,
private HydraService $hydra
HydraService $hydra
) {
$this->hydra = $hydra;
}
public static function getSubscribedEvents(): array

View File

@ -3,30 +3,26 @@
namespace App\Hydra;
use App\Hydra\Exception\InvalidChallengeException;
use App\Services\PdoService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Exception\BadRequestException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class HydraService extends AbstractController
{
public SessionInterface $session;
public UrlGeneratorInterface $router;
public Client $client;
public PdoService $pdoServices;
public TokenStorageInterface $tokenStorage;
public string $baseUrl;
public function __construct(PdoService $pdoServices, Client $client, SessionInterface $session, UrlGeneratorInterface $router, TokenStorageInterface $tokenStorage)
public function __construct(Client $client, SessionInterface $session, TokenStorageInterface $tokenStorage, string $baseUrl)
{
$this->pdoServices = $pdoServices;
$this->session = $session;
$this->client = $client;
$this->router = $router;
$this->tokenStorage = $tokenStorage;
$this->baseUrl = $baseUrl;
}
public function handleLoginRequest(Request $request)
@ -46,7 +42,7 @@ class HydraService extends AbstractController
// 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)

View File

@ -2,7 +2,7 @@
namespace App;
use App\DependencyInjection\PdoExtension;
use App\DependencyInjection\SQLLoginExtension;
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
@ -22,10 +22,10 @@ class Kernel extends BaseKernel
$this->microKernelConfigureContainer($loader);
$loader->load(function (ContainerBuilder $container) use ($loader) {
$envLanguage = \getenv('APP_LOCALES');
$envLanguage = getenv('APP_LOCALES');
$container->setParameter('app.supported_locales', explode(',', $envLanguage));
$container->registerExtension(new PdoExtension());
$loader->load($this->getConfigDir().'/pdo_configuration/*.{yml,yaml}', 'glob');
$container->registerExtension(new SQLLoginExtension());
$loader->load($this->getConfigDir().'/sql_login_configuration/*.{yml,yaml}', 'glob');
});
}
}

View File

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

View File

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

View File

@ -1,66 +0,0 @@
<?php
namespace App\Pdo;
class PdoRequest
{
public const DATA_TO_FETCH = 'data_to_fetch';
public const COLUMN_LOGIN_NAME = 'column_login_name';
public const COLUMN_PASSWORD_NAME = 'column_password_name';
public const TABLE_NAME = 'table_name';
protected array $config;
protected string $dsn;
protected string $user;
protected string $password;
public function __construct(array $config = [], string $dsn, string $user, string $password)
{
$this->config = $config;
$this->dsn = $dsn;
$this->user = $user;
$this->password = $password;
}
public function getDatabaseDsn()
{
return $this->dsn;
}
public function getDbUser()
{
return $this->user;
}
public function getDbPassword()
{
return $this->password;
}
public function getNameLogin()
{
return $this->config[self::COLUMN_LOGIN_NAME];
}
public function getNamePassword()
{
return $this->config[self::COLUMN_PASSWORD_NAME];
}
public function getRequestScope()
{
$scope = '';
foreach ($this->config[self::DATA_TO_FETCH] as $data) {
$scope .= $data.',';
}
$scope = substr($scope, 0, -1);
$request = 'SELECT '.$scope.' FROM '.$this->config[self::TABLE_NAME].' WHERE '.$this->config[self::COLUMN_LOGIN_NAME].' = :'.$this->config[self::COLUMN_LOGIN_NAME].';';
return $request;
}
public function getRequestLogin()
{
return 'SELECT '.$this->config[self::COLUMN_PASSWORD_NAME].' FROM '.$this->config[self::TABLE_NAME].' WHERE '.$this->config[self::COLUMN_LOGIN_NAME].' = :'.$this->config[self::COLUMN_LOGIN_NAME].';';
}
}

View File

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

View File

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

View File

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

View File

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

View File

@ -1,41 +1,24 @@
<?php
namespace App\Pdo;
namespace App\SQLLogin;
use PDO;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class PdoConnect extends 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 PdoConnect
* @return SQLLoginConnect
*/
public static function getInstance()
{
if (is_null(self::$_instance)) {
self::$_instance = new PdoConnect();
self::$_instance = new SQLLoginConnect();
}
return self::$_instance;

View File

@ -0,0 +1,91 @@
<?php
namespace App\SQLLogin;
class SQLLoginRequest
{
public const DATA_TO_FETCH = 'data_to_fetch';
public const LOGIN_COLUMN_NAME = 'login_column_name';
public const SALT_COLUMN_NAME = 'salt_column_name';
public const PASSWORD_COLUMN_NAME = 'password_column_name';
public const PASSWORD_NEED_UPGRADE = 'password_need_upgrade';
public const TABLE_NAME = 'table_name';
protected array $config;
protected string $dsn;
protected string $user;
protected string $password;
public function __construct(string $dsn, string $user, string $password, array $config = [])
{
$this->config = $config;
$this->dsn = $dsn;
$this->user = $user;
$this->password = $password;
}
public function getDatabaseDsn(): string
{
return $this->dsn;
}
public function getDbUser(): string
{
return $this->user;
}
public function getDbPassword(): string
{
return $this->password;
}
public function getLoginColumnName(): string
{
return $this->config[self::LOGIN_COLUMN_NAME];
}
public function getPasswordColumnName(): string
{
return $this->config[self::PASSWORD_COLUMN_NAME];
}
public function getSaltColumnName(): ?string
{
return $this->config[self::SALT_COLUMN_NAME];
}
public function getTableName(): string
{
return $this->config[self::TABLE_NAME];
}
public function getDataToFetch(): array
{
return $this->config[self::DATA_TO_FETCH];
}
public function getRequestScope()
{
$scope = '';
foreach ($this->config[self::DATA_TO_FETCH] as $data) {
$scope .= $data.',';
}
$scope = substr($scope, 0, -1);
return 'SELECT '.$scope.' FROM '.$this->getTableName().' WHERE '.$this->getLoginColumnName().' = :'.$this->getLoginColumnName().';';
}
/**
* 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()
{
$fields = $this->getPasswordColumnName();
if (!empty($this->getSaltColumnName())) {
$fields .= ', '.$this->getSaltColumnName();
}
return 'SELECT '.$fields.' FROM '.$this->getTableName().' WHERE '.$this->getLoginColumnName().' = :'.$this->getLoginColumnName().';';
}
}

View File

@ -0,0 +1,114 @@
<?php
namespace App\Security\Hasher;
use App\SQLLogin\Exception\InvalidSQLLoginConfigurationException;
use App\SQLLogin\Exception\InvalidSQLPasswordException;
use Symfony\Component\PasswordHasher\Exception\InvalidPasswordException;
use Symfony\Component\PasswordHasher\Hasher\CheckPasswordLengthTrait;
use Symfony\Component\PasswordHasher\LegacyPasswordHasherInterface;
class PasswordEncoder implements LegacyPasswordHasherInterface
{
use CheckPasswordLengthTrait;
public const PASSWORD_PATTERN = 'password';
public const SALT_PATTERN = 'salt';
public const PEPPER_PATTERN = 'pepper';
protected ?string $pepper;
protected array $hashAlgoLegacy;
protected array $securityPattern;
public function __construct(?string $pepper, string $hashAlgoLegacy, string $securityPattern)
{
$this->pepper = $pepper;
$this->hashAlgoLegacy = explode(',', $hashAlgoLegacy);
$this->securityPattern = explode(',', $securityPattern);
}
/**
* Pas utilisé, mais on doit le garder pour le implements
*/
public function hash(string $plainPassword, string $salt = null): string
{
if ($this->isPasswordTooLong($plainPassword)) {
throw new InvalidPasswordException();
}
return hash($plainPassword.$salt, $this->hashAlgoLegacy[0]);
}
public function verify(string $hashedPassword, string $plainPassword, string $salt = null): bool
{
if ('' === $plainPassword || $this->isPasswordTooLong($plainPassword)) {
return false;
}
$completedPassword = $this->getPasswordToHash($plainPassword, $salt);
if (str_starts_with($hashedPassword, '{SSHA}') && $this->compareSsha($hashedPassword, $plainPassword)) {
return true;
}
if (password_verify($completedPassword, $hashedPassword)) {
return true;
}
foreach (hash_algos() as $algo) {
if (hash_equals($hashedPassword, hash($algo, $completedPassword))) {
return true;
}
}
throw new InvalidSQLPasswordException();
}
public function needsRehash(string $hashedPassword): bool
{
return false;
}
public function isObsoleteAlgo($algo): bool
{
return in_array($algo, hash_algos());
}
/**
* Retourne la string à hasher en fonction du pattern indiqué
*
* @return string
*/
protected function getPasswordToHash($plainTextPassword, $salt)
{
$arrayRef = [
self::PASSWORD_PATTERN => $plainTextPassword,
self::SALT_PATTERN => $salt,
self::PEPPER_PATTERN => $this->pepper,
];
foreach ($this->securityPattern as $term) {
if (self::PEPPER_PATTERN !== $term && self::PASSWORD_PATTERN !== $term && self::SALT_PATTERN !== $term) {
throw new InvalidSQLLoginConfigurationException();
}
}
$completedPlainPassword = '';
foreach ($this->securityPattern as $term) {
$completedPlainPassword .= $arrayRef[$term];
}
return $completedPlainPassword;
}
protected function compareSsha($hashPassword, $plainPassword)
{
$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

@ -3,38 +3,38 @@
namespace App\Security;
use App\Entity\User;
use App\Pdo\Exception\InvalidPasswordException;
use App\Services\PdoService;
use App\Security\Hasher\PasswordEncoder;
use App\Service\SQLLoginService;
use App\SQLLogin\Exception\InvalidSQLPasswordException;
use PDOException;
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 PdoUserAuthenticator 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';
protected string $baseUrl;
private PdoService $pdoService;
private UrlGeneratorInterface $router;
private SQLLoginService $sqlLoginService;
private PasswordEncoder $passwordHasher;
public function __construct(string $baseUrl, PdoService $pdoService, UrlGeneratorInterface $router)
public function __construct(string $baseUrl, SQLLoginService $sqlLoginService, PasswordEncoder $passwordHasher)
{
$this->baseUrl = $baseUrl;
$this->pdoService = $pdoService;
$this->router = $router;
$this->sqlLoginService = $sqlLoginService;
$this->passwordHasher = $passwordHasher;
}
/**
@ -52,33 +52,33 @@ class PdoUserAuthenticator extends AbstractAuthenticator
return new RedirectResponse($this->baseUrl.'/connect/login-accept');
}
public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response
public function onAuthenticationFailure(Request $request, AuthenticationException $exception): Response
{
$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
{
$form = $request->request->get('login');
$login = $form['login'];
$password = $form['password'];
$plaintextPassword = $form['password'];
$rememberMe = isset($form['_remember_me']) ? true : false;
try {
// requête préparée
$remoteHashedPassword = $this->pdoService->fetchPassword($login);
list($remoteHashedPassword, $remoteSalt) = $this->sqlLoginService->fetchPassword($login);
} catch (PDOException $e) {
$request->getSession()->set(self::ERROR_PDO, true);
$request->getSession()->set(self::ERROR_SQL_LOGIN, true);
throw new AuthenticationException();
}
if ($remoteHashedPassword) {
try {
$this->pdoService->verifyPassword($password, $remoteHashedPassword);
$attributes = $this->pdoService->fetchDatas($login);
$user = new User($login, $password, $attributes, $rememberMe);
// Comparaison remote hash et hash du input password + salt
$this->passwordHasher->verify($remoteHashedPassword, $plaintextPassword, $remoteSalt);
$attributes = $this->sqlLoginService->fetchDatas($login);
$user = new User($login, $remoteHashedPassword, $attributes, $rememberMe);
$loader = function (string $userIdentifier) use ($user) {
return $user->getLogin() == $userIdentifier ? $user : null;
};
@ -89,15 +89,20 @@ class PdoUserAuthenticator extends AbstractAuthenticator
$passport->setAttribute('attributes', $user->getAttributes());
return $passport;
} catch (InvalidPasswordException $e) {
} catch (InvalidSQLPasswordException $e) {
$request->getSession()->set(self::ERROR_PASSWORD, true);
throw new AuthenticationException();
} catch (PDOException $e) {
$request->getSession()->set(self::ERROR_PDO, true);
$request->getSession()->set(self::ERROR_SQL_LOGIN, 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

@ -4,19 +4,17 @@ namespace App\Security;
use App\Entity\User;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
class PdoUserProvider implements UserProviderInterface
class SQLLoginUserProvider implements UserProviderInterface
{
protected RequestStack $requestStack;
public function __construct(RequestStack $requestStack, SessionInterface $session)
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
$this->session = $session;
}
public function loadUserByIdentifier(string $identifier, ?User $user): ?UserInterface

View File

@ -0,0 +1,73 @@
<?php
namespace App\Service;
use App\SQLLogin\SQLLoginConnect;
use App\SQLLogin\SQLLoginRequest;
use PDO;
use PDOException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class SQLLoginService extends AbstractController
{
public SQLLoginRequest $sqlLoginRequest;
public function __construct(SQLLoginRequest $sqlLoginRequest)
{
$this->sqlLoginRequest = $sqlLoginRequest;
}
public function fetchDatas($login)
{
try {
$dbh = $this->getConnection();
// forge de la requête
$request = $this->sqlLoginRequest->getRequestScope();
// Préparation de la requête
$query = $dbh->prepare($request);
$query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]);
$datas = $query->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
\Sentry\captureException($e);
throw new PDOException();
}
return $datas;
}
/**
* @param mixed $login
*
* @return bool
*/
public function fetchPassword($login)
{
try {
$dbh = $this->getConnection();
$request = $this->sqlLoginRequest->getRequestPassword();
$query = $dbh->prepare($request);
$query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]);
$password = $query->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
\Sentry\captureException($e);
throw new PDOException();
}
if ($password) {
return [
$password[$this->sqlLoginRequest->getPasswordColumnName()],
isset($password[$this->sqlLoginRequest->getSaltColumnName()]) ? $password[$this->sqlLoginRequest->getSaltColumnName()] : null,
];
}
return false;
}
public function getConnection()
{
// Appel du singleton
$sqlLogin = SQLLoginConnect::getInstance();
// Connection bdd
return $sqlLogin->connect($this->sqlLoginRequest->getDatabaseDsn(), $this->sqlLoginRequest->getDbUser(), $this->sqlLoginRequest->getDbPassword());
}
}

View File

@ -1,89 +0,0 @@
<?php
namespace App\Services;
use PDO;
use PDOException;
use App\Pdo\PdoConnect;
use App\Pdo\PdoRequest;
use Sentry\captureException;
use App\Pdo\Exception\InvalidPasswordException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
class PdoService extends AbstractController
{
private $params;
public PdoRequest $pdoRequest;
public function __construct(ParameterBagInterface $params, PdoRequest $pdoRequest)
{
$this->params = $params;
$this->pdoRequest = $pdoRequest;
}
public function fetchDatas($login)
{
try {
$dbh = $this->getConnection();
// forge de la requête
$request = $this->pdoRequest->getRequestScope();
// Préparation de la requête
$query = $dbh->prepare($request);
$query->execute([$this->pdoRequest->getNameLogin() => $login]);
$datas = $query->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
\Sentry\captureException($e);
throw new PDOException();
}
return $datas;
}
/**
* @param mixed $login
*
* @return bool
*/
public function fetchPassword($login)
{
try {
$dbh = $this->getConnection();
$request = $this->pdoRequest->getRequestLogin();
$query = $dbh->prepare($request);
$query->execute([$this->pdoRequest->getNameLogin() => $login]);
$password = $query->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
\Sentry\captureException($e);
dd($e);
throw new PDOException();
}
if ($password) {
return $password[$this->pdoRequest->getNamePassword()];
}
return false;
}
public function getConnection()
{
// Appel du singleton
$pdo = PdoConnect::getInstance();
// Connection bdd
return $pdo->connect($this->pdoRequest->getDatabaseDsn(), $this->pdoRequest->getDbUser(), $this->pdoRequest->getDbPassword());
}
public function verifyPassword($password, $hashedPassword)
{
$hashAlgo = $this->params->get('hashAlgo') ?? 'sha256';
if ($hashedPassword === hash($hashAlgo, $password)) {
return true;
} else {
throw new InvalidPasswordException();
}
}
}

View File

@ -1 +0,0 @@
123

View File

@ -1,383 +0,0 @@
{
"clue/stream-filter": {
"version": "v1.6.0"
},
"doctrine/annotations": {
"version": "1.13",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"version": "1.0",
"ref": "a2759dd6123694c8d901d0ec80006e044c2e6457"
},
"files": [
"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"
},
"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"
},
"sentry/sentry-symfony": {
"version": "4.5",
"recipe": {
"repo": "github.com/symfony/recipes-contrib",
"branch": "main",
"version": "4.0",
"ref": "9ac202e84b6fb3c276cb3d7846006e0df65272d0"
},
"files": [
"config/packages/sentry.yaml"
]
},
"symfony/apache-pack": {
"version": "1.0",
"recipe": {
"repo": "github.com/symfony/recipes-contrib",
"branch": "master",
"version": "1.0",
"ref": "9d254a22efca7264203eea98b866f16f944b2f09"
},
"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",
"version": "5.3",
"ref": "da0c8be8157600ad34f10ff0c9cc91232522e047"
},
"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",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"version": "1.0",
"ref": "c0eeb50665f0f77226616b6038a9b06c03752d8e"
},
"files": [
".env"
]
},
"symfony/form": {
"version": "v5.4.8"
},
"symfony/framework-bundle": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"version": "5.4",
"ref": "3cd216a4d007b78d8554d44a5b1c0a446dab24fb"
},
"files": [
"config/packages/cache.yaml",
"config/packages/framework.yaml",
"config/preload.php",
"config/routes/framework.yaml",
"config/services.yaml",
"public/index.php",
"src/Controller/.gitignore",
"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": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.2",
"ref": "8e937ff2b4735d110af1770f242c1107fdab4c8e"
},
"files": [
"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",
"version": "5.3",
"ref": "85de1d8ae45b284c3c84b668171d2615049e698f"
},
"files": [
"config/packages/routing.yaml",
"config/routes.yaml"
]
},
"symfony/runtime": {
"version": "v5.4.7"
},
"symfony/security-bundle": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"version": "5.3",
"ref": "98f1f2b0d635908c2b40f3675da2d23b1a069d30"
},
"files": [
"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"
},
"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",
"version": "5.4",
"ref": "bb2178c57eee79e6be0b297aa96fc0c0def81387"
},
"files": [
"config/packages/twig.yaml",
"templates/base.html.twig"
]
},
"symfony/validator": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.3",
"ref": "c32cfd98f714894c4f128bb99aa2530c1227603c"
},
"files": [
"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": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.3",
"ref": "24bbc3d84ef2f427f82104f766014e799eefcc3e"
},
"files": [
"config/packages/web_profiler.yaml",
"config/routes/web_profiler.yaml"
]
},
"symfony/webpack-encore-bundle": {
"version": "1.16",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "1.10",
"ref": "160f0a23c9c2bdd3f264bb4d841b51f900a3572e"
},
"files": [
"assets/app.js",
"assets/bootstrap.js",
"assets/controllers.json",
"assets/controllers/hello_controller.js",
"assets/styles/app.css",
"config/packages/webpack_encore.yaml",
"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

@ -12,13 +12,13 @@
</div>
{% endif %}
<div class="lang">
{% for locale in locales %}
{% for locale in locales|split(',') %}
<a href="{{ path('locale_change', {'locale':locale }) }}" title="{{locale}}" aria-label="{{locale}}" class="flag"><img class="w-10" src="{{ asset('flags/'~ locale ~'.svg') }}"/></a>
{% endfor %}
</div>
<h1 class="h3 mb-3 font-weight-normal">{% trans from 'view' %} sign_in {% endtrans %}</h1>
{{form_start(loginForm)}}
{{form_widget(loginForm)}}
{{form_start(loginForm)}}
{{form_widget(loginForm)}}
<button class="btn btn-lg btn-primary" type="submit">
{% trans from 'view' %} submit {% endtrans %}
</button>

View File

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

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