Compare commits

..

No commits in common. "develop" and "v01" have entirely different histories.
develop ... v01

127 changed files with 13600 additions and 5224 deletions

View File

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

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

View File

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

12
.env
View File

@ -16,7 +16,7 @@
###> symfony/framework-bundle ### ###> symfony/framework-bundle ###
APP_ENV=dev APP_ENV=dev
APP_SECRET=406ccaa0c76a451fdcc2307ea146cbef APP_SECRET=406ccaa0c76a451fdcc2307ea146cbef
URL_LINK="http://localhost" ###< symfony/framework-bundle ###
# configuration bdd # configuration bdd
DSN_REMOTE_DATABASE="pgsql:host='postgres';port=5432;dbname=lasql" DSN_REMOTE_DATABASE="pgsql:host='postgres';port=5432;dbname=lasql"
@ -40,13 +40,3 @@ LOCK_DSN=flock
###> sentry/sentry-symfony ### ###> sentry/sentry-symfony ###
SENTRY_DSN= SENTRY_DSN=
###< sentry/sentry-symfony ### ###< sentry/sentry-symfony ###
REDIS_DSN=redis://redis:6379
### Altcha
ALTCHA_HOST='http://altcha:3333'
ALTCHA_BASE_URL='/altcha'
ALTCHA_DEBUG=false
ALTCHA_WORKERS=8
ALTCHA_DELAY=100
ALTCHA_MOCK_ERROR=false
ALTCHA_ENABLED=true

21
.gitignore vendored
View File

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

View File

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

View File

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

View File

1
.nvmrc
View File

@ -1 +0,0 @@
lts/iron

View File

@ -1,17 +0,0 @@
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 Normal file
View File

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

View File

@ -1,43 +1,46 @@
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
IMAGE_REPO ?= reg.cadoles.com/cadoles down:
IMAGES_DIR := misc/images docker-compose down -v
IMAGES := $(foreach file, $(wildcard $(IMAGES_DIR)/*), $(basename $(notdir $(file))))
TRIVY_ARGS ?= purge:
docker-compose down -v --remove-orphans --rmi local
php-cs-fixer: hydra-sql-shell:
PHP_CS_FIXER_IGNORE_ENV=1 tools/php-cs-fixer/vendor/bin/php-cs-fixer -v fix --config=./tools/php-cs-fixer/.php-cs-fixer.dist.php $(CI_COMPOSE) exec \
-u "$(HYDRA_SQL_SHELL_USER)" \
hydra-sql \
/bin/bash
build-image: $(foreach image, $(IMAGES), build-image-$(image))
build-image-%: APP_LOCALES ?= fr,en
docker build \ HYDRA_ADMIN_BASE_URL ?= http://hydra:4445
-t "${IMAGE_REPO}/$*:latest" \ TRUSTED_PROXIES ?= 127.0.0.1,REMOTE_ADDR,localhost
-f ${IMAGES_DIR}/$*/Dockerfile \ 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 \
scan-image-%: tools/trivy/bin/trivy -it --rm \
mkdir -p .trivy/.cache -p 8080:80 \
tools/trivy/bin/trivy --cache-dir .trivy/.cache --ignorefile .trivyignore.yaml image $(TRIVY_ARGS) $(IMAGE_REPO)/$*:latest -e APP_LOCALES=$(APP_LOCALES) \
-e HYDRA_ADMIN_BASE_URL=$(HYDRA_ADMIN_BASE_URL) \
release-image: $(foreach image, $(IMAGES), release-image-$(image)) -e TRUSTED_PROXIES=$(TRUSTED_PROXIES) \
-e ISSUER_URL=$(ISSUER_URL) \
release-image-%: .mktools -e BASE_URL=$(BASE_URL) \
@[ ! -z "$(MKT_PROJECT_VERSION)" ] || ( echo "Just downloaded mktools. Please re-run command."; exit 1 ) -e DB_USER=$(DB_USER) \
docker tag "${IMAGE_REPO}/$*:latest" "${IMAGE_REPO}/$*:$(MKT_PROJECT_VERSION)" -e DB_PASSWORD=$(DB_PASSWORD) \
docker tag "${IMAGE_REPO}/$*:latest" "${IMAGE_REPO}/$*:$(MKT_PROJECT_SHORT_VERSION)" -e DEFAULT_LOCALE=$(DEFAULT_LOCALE) \
docker push "${IMAGE_REPO}/$*:$(MKT_PROJECT_VERSION)" -e DSN_REMOTE_DATABASE=$(DSN_REMOTE_DATABASE) \
docker push "${IMAGE_REPO}/$*:$(MKT_PROJECT_SHORT_VERSION)" $(DOCKER_IMAGE_NAME):latest \
docker push "${IMAGE_REPO}/$*:latest" $(DOCKER_CMD)
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,4 +8,5 @@
// any CSS you import will output into a single css file (app.css in this case) // any CSS you import will output into a single css file (app.css in this case)
import './styles/app.scss'; import './styles/app.scss';
import 'altcha'; // start the Stimulus application
import './bootstrap';

11
assets/bootstrap.js vendored Normal file
View File

@ -0,0 +1,11 @@
import { startStimulusApp } from '@symfony/stimulus-bridge';
// Registers Stimulus controllers from controllers.json and in the controllers/ directory
export const app = startStimulusApp(require.context(
'@symfony/stimulus-bridge/lazy-controller-loader!./controllers',
true,
/\.[jt]sx?$/
));
// register any custom, 3rd party controllers here
// app.register('some_controller_name', SomeImportedController);

4
assets/controllers.json Normal file
View File

@ -0,0 +1,4 @@
{
"controllers": [],
"entrypoints": []
}

View File

@ -0,0 +1,16 @@
import { Controller } from '@hotwired/stimulus';
/*
* This is an example Stimulus controller!
*
* Any element with a data-controller="hello" attribute will cause
* this controller to be executed. The name "hello" comes from the filename:
* hello_controller.js -> "hello"
*
* Delete this file or adapt it for your use!
*/
export default class extends Controller {
connect() {
this.element.textContent = 'Hello Stimulus! Edit me in assets/controllers/hello_controller.js';
}
}

View File

@ -1,722 +0,0 @@
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);
}
.header {
background-color: rgb(75, 207, 158);
width: 100%;
color: white;
}
section.header-logo a {
display: flex;
align-items: baseline;
width: auto;
float: left;
letter-spacing: -1px;
font-size: 30px;
text-decoration: none;
color: inherit;
color: #2c3e50;
line-height: 30px;
font-family: fontpvebold;
}
section.header-logo a span {
color: #4bcf9e;
font-size: 50px;
}
section.header-logo a svg {
width: 300px;
}
.header-logo {
margin-bottom: 15px;
padding: 25px 0;
}
@font-face {
font-family: "fontpve";
src: url("../fonts/oswald-regular-webfont.eot");
src: url("../fonts/oswald-regular-webfont.eot?#iefix")
format("embedded-opentype"),
url("../fonts/oswald-regular-webfont.woff2") format("woff2"),
url("../fonts/oswald-regular-webfont.woff") format("woff"),
url("../fonts/oswald-regular-webfont.ttf") format("truetype"),
url("../fonts/oswald-regular-webfont.svg#oswaldregular") format("svg");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: "fontpvebold";
src: url("../fonts/oswald-bold-webfont.eot");
src: url("../fonts/oswald-bold-webfont.eot?#iefix")
format("embedded-opentype"),
url("../fonts/oswald-bold-webfont.woff2") format("woff2"),
url("../fonts/oswald-bold-webfont.woff") format("woff"),
url("../fonts/oswald-bold-webfont.ttf") format("truetype"),
url("../fonts/oswald-bold-webfont.svg#oswaldbold") format("svg");
font-weight: normal;
font-style: normal;
}
a,
a:visited,
a:hover {
color: #fff;
text-decoration: none;
cursor: pointer;
}
.row {
margin: 0px;
}
.logo-france-connect-fr:hover {
content: url("../images/franceconnect-fr-hover.png");
min-height: 58px;
}
.logo-france-connect-en:hover {
content: url("../images/franceconnect-en-hover.png");
min-height: 58px;
}
.logo-mse-connect-fr:hover {
content: url("../images/MSEConnect-hover-fr.png");
min-height: 56px;
}
.logo-mse-connect-en:hover {
content: url("../images/MSEConnect-hover-en.png");
min-height: 56px;
}
.facebook, .x, .instagram {
height:24px;
width:24px;
}
.facebook:hover{
content: url('../images/facebook-hover.png');
}
.x:hover{
content: url('../images/x-hover.png');
}
.instagram:hover{
content: url('../images/instagram-hover.png');
}
.form-control:focus {
border-color: #66afe9;
outline: 1em;
}
#mesr {
width: 150px;
}
body {
font-family: "fontpve", "Source Sans Pro", "Helvetica Neue", Helvetica, Arial,
sans-serif;
font-size: 14px;
color: #fff;
background-color: #fff;
min-width: 320px;
}
#wrapper {
max-width: 1007px;
margin: 15px auto 30px auto;
}
#logo-mse {
padding: 80px;
}
#header {
vertical-align: top;
color: #fff;
font-family: "fontpve", arial;
}
.pvetools .dropdown .dropdown-toggle {
text-decoration: none;
}
#pvemenu {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-weight: bold;
background-color: #1c856aff;
height: 35px;
color: #fff;
display: flex;
justify-content: space-between;
}
#pvelink {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
padding: 5px 0 0 1rem;
display: inline-block;
color: #fff;
}
#pvelink ul {
list-style: none;
float: left;
padding-left: 0;
}
#pvelink ul li {
list-style: none;
display: inline-block;
}
#pvelink a {
color: #fff !important;
text-decoration: none;
}
#pvelink span {
float: left;
margin-right: 5px;
}
.header-nav nav {
display: inline-block;
color: #2c3e50;
min-height: 35px;
padding: 0;
display: flex;
flex-direction: row;
justify-content: center;
transition: background 0.2s;
}
.header-nav nav ul {
margin: 0;
}
.header-nav nav a {
line-height: 35px;
padding: 0 20px;
color: #2c3e50;
}
.header-nav nav:hover {
background: #125444;
}
.header-nav nav:hover a {
color: #ffffff;
}
.language-flag {
height: 20px;
margin-right: 10px;
}
.pvetools .dropdown-menu {
background: #1c856aff;
min-width: 0px;
border: 0px;
box-shadow: none;
border-radius: 0;
margin: 0;
}
.dropdown-menu li a {
color: #ffffff;
background: #1c856aff;
}
.dropdown-menu li a:hover {
background: #125444;
}
.link-fc {
text-align: center;
margin-top: 8px;
text-decoration: underline;
}
.link-fc a {
color: white;
letter-spacing: 1px;
text-decoration: none;
}
.link-fc a:hover {
color: white;
text-decoration: underline;
}
#logo {
z-index: 10;
margin-left: 50px;
width: 280px;
display: inline-block;
vertical-align: bottom;
margin-bottom: 5px;
}
#pvename {
display: block;
}
#pvename a {
display: flex;
align-items: baseline;
width: auto;
text-decoration: none;
letter-spacing: -1px;
font-size: 30px;
color: #2c3e50;
line-height: 30px;
font-family: "fontpvebold";
padding: 3.4rem 0;
}
#pvename a > svg {
width: 280px;
}
#pvename a > span {
color: #1c856aff;
font-size: 50px;
}
@media (min-width: 992px) {
#pvename a {
padding: 3.4rem 0 3.4rem 1.5rem;
}
}
@media (max-width: 768px) {
#pvename {
text-align: center;
display: block;
overflow: hidden;
}
#footer ul {
text-align: center;
margin-bottom: 30px;
}
#pvename a {
display: block;
width: 100%;
margin: 10px auto;
}
#pvename a > svg {
padding-bottom: 10px;
}
#pvename a > span {
display: block;
line-height: 40px;
}
}
#boxlogin-wrapper {
padding: 0 18px;
width: 66%;
margin: auto;
}
#boxlogin {
background-color: #2d3e50;
color: #fff;
font-family: arial;
font-size: 13px;
padding: 15px 30px 30px 30px;
}
#boxlogin > * + * {
margin-top: 15px;
}
#boxlogin-title {
margin: 0;
text-transform: uppercase;
text-align: center;
color: #fff;
background-color: #1d2730;
font-family: "fontpvebold", aroam;
}
#boxlogin-title h1 {
font-size: 33px;
padding: 10px;
margin: 0;
}
label {
display: inline-block;
max-width: 100%;
margin-bottom: 5px;
font-weight: bold;
}
label[for="login_login"] {
padding-top: 10px;
}
#boxlogin .loginapp {
text-align: center;
padding: 30px;
}
.loginapp-button img {
border-radius: 2px;
height: 100%;
width: 100%;
object-fit: contain;
min-height: 56px;
}
.loginapp-button:hover {
cursor: pointer;
}
.separateur {
align-items: center;
display: flex;
text-align: center;
padding: 0 2rem 1.3rem 2rem;
}
#choixFC {
width: 2.5rem;
font-size: 1.2rem;
}
.text-right {
text-align: right;
}
.separateur::after,
.separateur::before {
content: "";
flex: 1;
border-bottom: 2px solid #e8e8e8;
}
#boxlogin .encart-erreur {
color: #2d3e50;
text-transform: uppercase;
text-align: center;
background-color: #fff;
padding: 10px 2px;
font-family: "fontpve", aroam;
font-size: 15px;
margin-top: 20px;
margin-bottom: 10px;
}
#boxlogin h2 {
font-size: 25px;
text-transform: uppercase;
font-family: "fontpvebold", aroam;
}
#boxlogin h3 {
color: #fff;
text-transform: uppercase;
text-align: center;
background-color: #4bcf9e;
padding: 10px 2px;
font-family: "fontpve", aroam;
font-size: 15px;
}
#boxlogin h4 {
color: #fff;
text-align: center;
background-color: red;
padding: 10px 2px;
font-family: arial;
font-size: 15px;
margin: 10px;
}
#pvelogin,
#pvedescription {
/* padding: 30px 15px 10px 15px; */
margin: 0;
}
#pvelogin input {
font-size: 20px;
height: 45px;
}
#pvelogin input:-webkit-autofil {
background-color: #fff;
}
#pvelogin button {
background-color: rgba(0, 0, 0, 0);
border-color: #fff;
display: block;
width: 100%;
padding: 10px 16px;
font-size: 18px;
line-height: 1.33;
border-radius: 6px;
}
#pvelogin a {
color: #fff;
padding-top: 10px;
text-decoration: underline;
}
#pvelogininfo a {
text-decoration: underline;
color: #2c3e50;
font-family: arial;
font-size: 13px;
}
#pvelogininfo {
font-family: arial;
font-size: 13px;
background-color: #fff;
color: #2c3e50;
padding: 15px;
}
#pvelogininfo ul {
margin-bottom: 0;
}
#footer {
clear: both;
padding-top: 100px;
text-transform: none;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 15px;
font-weight: normal;
}
#footer > nav.navbar.navbar-inverse  {
min-height: 0;
}
#footer-copyright {
text-align: center;
color: #fff;
padding-top: 30px;
padding-bottom: 30px;
font-family: Arial;
font-size: 12px;
text-transform: initial;
}
#footer-copyright img {
padding-left: 10px;
padding-right: 10px;
}
#footerli01 {
margin-left: 150px;
}
#footer ul.nav.navbar-nav.navbar-left {
margin-top: 0;
}
#footer ul.nav.navbar-nav > li > a {
color: #ffffff;
background-color: transparent;
position: relative;
display: block;
padding-top: 0px;
padding-bottom: 0px;
padding-left: 0px;
padding-right: 0px;
font-size: 15px;
font-weight: normal;
text-transform: none;
}
#footer ul.nav.navbar-nav > li > a:before {
content: "/";
padding-left: 10px;
padding-right: 10px;
display: inline-block;
}
#footer ul.nav.navbar-nav.navbar-left > li:hover > a {
color: #fff;
text-decoration: underline;
}
#footer ul.nav.navbar-nav.navbar-left > li:hover > a:before {
color: #fff;
text-decoration: none !important;
}
#footer-editor {
text-align: right;
color: #ffffff;
}
@media (max-width: 1007px) {
#wrapper {
margin-top: 0px;
}
#boxlogin-wrapper {
width: 100%;
}
#header {
margin-top: 0px;
}
#pveuser {
font-size: 15px;
top: 10px;
}
#pveuser small {
font-size: 12px;
top: -2px;
}
#logo {
margin-left: 0px;
}
}
@media (max-width: 700px) {
#footerli01 {
margin-left: 0px;
}
#boxlogin .loginapp {
flex-direction: column;
justify-content: center;
align-items: center;
}
}
@media (max-width: 550px) {
#pvemenu {
font-size: 80%;
}
}
@media (max-width: 400px) {
#pvelink {
display: none;
}
#logo {
max-width: 46%;
height: auto;
}
#boxlogin-wrapper {
padding: 0 15px;
}
}
/* dispatcher error page */
.alert-danger {
background-color: #ff0000 !important;
border-color: #ff0000 !important;
color: #fff !important;
font-size: 15px;
}
.alert-danger a {
text-decoration: underline;
}
.alert-danger a:hover {
color: unset;
}
.alert {
padding: 15px !important;
margin-bottom: 21px !important;
border: 1px solid transparent !important;
border-radius: 0 !important;
}
.alert-danger p {
margin: 0 !important;
}
.footer-link {
text-decoration: none;
}
#loader {
display: -webkit-box;
display: -ms-flexbox;
display: none;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
position: absolute;
height: 120%;
width: 100%;
background-color: #efefef;
opacity: 0.9;
z-index: 10;
flex-flow: column;
align-items: center;
justify-content: center;
}
#nb-spinner {
width: 75px;
height: 75px;
margin: 0;
background: transparent;
border-top: 4px solid #1c856a;
border-right: 4px solid transparent;
border-radius: 50%;
-webkit-animation: 1s spin linear infinite;
animation: 1s spin linear infinite;
}
#loader-wrapper {
position: relative;
display: flex;
justify-content: center;
align-items: center;
height: 100%;
width: 100%;
}
#loader-content {
width: 300px;
height: 300px;
-webkit-box-flex: 0;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
border: 1px solid rgba(255, 255, 255, 0.1);
-webkit-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
position: relative;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
overflow: hidden;
position: absolute;
top: 200px;
display: flex;
flex-direction: column;
}
@keyframes spin {
from {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}

View File

@ -1,6 +0,0 @@
import './styles/theme.css'
import 'altcha';
import theme from './theme';
theme();

View File

@ -1,52 +0,0 @@
export default function theme() {
document.addEventListener("DOMContentLoaded", function() {
[].forEach.call(document.querySelectorAll('.language-change'), function(el) {
el.addEventListener('click', function(e) {
e.preventDefault();
var lang = el.getAttribute('data-lang');
if(getCookie('mselang') != lang) {
setCookie('mselang', lang, false);
location.reload();
}
return false;
})
});
// Empécher le double clic
const form = document.forms['login']
const loader = document.getElementById('loader');
form.addEventListener('submit', function(event) {
loader.style.display = 'flex';
});
});
function setCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
var temp = window.location.hostname.split('.').reverse();
var root_domain = '';
for(var i=temp.length - 1;i >= 0;i--){
root_domain += temp[i];
if(i > 0){
root_domain += '.';
}
}
document.cookie = name + "=" + (value || "") + expires + "; path=/; domain=" + root_domain;
}
function getCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
}

View File

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

1632
composer.lock generated
View File

@ -4,27 +4,27 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "203398b3a4f3ff689ff3341c02460f23", "content-hash": "caf75620d5f1d6c42561a31c9ccf2769",
"packages": [ "packages": [
{ {
"name": "clue/stream-filter", "name": "clue/stream-filter",
"version": "v1.7.0", "version": "v1.6.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/clue/stream-filter.git", "url": "https://github.com/clue/stream-filter.git",
"reference": "049509fef80032cb3f051595029ab75b49a3c2f7" "reference": "d6169430c7731d8509da7aecd0af756a5747b78e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7", "url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e",
"reference": "049509fef80032cb3f051595029ab75b49a3c2f7", "reference": "d6169430c7731d8509da7aecd0af756a5747b78e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.3" "php": ">=5.3"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -46,7 +46,7 @@
} }
], ],
"description": "A simple and modern approach to stream filtering in PHP", "description": "A simple and modern approach to stream filtering in PHP",
"homepage": "https://github.com/clue/stream-filter", "homepage": "https://github.com/clue/php-stream-filter",
"keywords": [ "keywords": [
"bucket brigade", "bucket brigade",
"callback", "callback",
@ -58,7 +58,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/clue/stream-filter/issues", "issues": "https://github.com/clue/stream-filter/issues",
"source": "https://github.com/clue/stream-filter/tree/v1.7.0" "source": "https://github.com/clue/stream-filter/tree/v1.6.0"
}, },
"funding": [ "funding": [
{ {
@ -70,20 +70,20 @@
"type": "github" "type": "github"
} }
], ],
"time": "2023-12-20T15:40:13+00:00" "time": "2022-02-21T13:15:14+00:00"
}, },
{ {
"name": "doctrine/annotations", "name": "doctrine/annotations",
"version": "1.14.4", "version": "1.14.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/annotations.git", "url": "https://github.com/doctrine/annotations.git",
"reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915" "reference": "9e034d7a70032d422169f27d8759e8d84abb4f51"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915", "url": "https://api.github.com/repos/doctrine/annotations/zipball/9e034d7a70032d422169f27d8759e8d84abb4f51",
"reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915", "reference": "9e034d7a70032d422169f27d8759e8d84abb4f51",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -94,11 +94,11 @@
}, },
"require-dev": { "require-dev": {
"doctrine/cache": "^1.11 || ^2.0", "doctrine/cache": "^1.11 || ^2.0",
"doctrine/coding-standard": "^9 || ^12", "doctrine/coding-standard": "^9 || ^10",
"phpstan/phpstan": "~1.4.10 || ^1.10.28", "phpstan/phpstan": "~1.4.10 || ^1.8.0",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7", "symfony/cache": "^4.4 || ^5.4 || ^6",
"vimeo/psalm": "^4.30 || ^5.14" "vimeo/psalm": "^4.10"
}, },
"suggest": { "suggest": {
"php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
@ -144,36 +144,31 @@
], ],
"support": { "support": {
"issues": "https://github.com/doctrine/annotations/issues", "issues": "https://github.com/doctrine/annotations/issues",
"source": "https://github.com/doctrine/annotations/tree/1.14.4" "source": "https://github.com/doctrine/annotations/tree/1.14.1"
}, },
"time": "2024-09-05T10:15:52+00:00" "time": "2022-12-12T12:46:12+00:00"
}, },
{ {
"name": "doctrine/deprecations", "name": "doctrine/deprecations",
"version": "1.1.5", "version": "v1.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/deprecations.git", "url": "https://github.com/doctrine/deprecations.git",
"reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
"reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1 || ^8.0" "php": "^7.1|^8.0"
},
"conflict": {
"phpunit/phpunit": "<=7.5 || >=13"
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^9 || ^12 || ^13", "doctrine/coding-standard": "^9",
"phpstan/phpstan": "1.4.10 || 2.1.11", "phpunit/phpunit": "^7.5|^8.5|^9.5",
"phpstan/phpstan-phpunit": "^1.0 || ^2", "psr/log": "^1|^2|^3"
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
"psr/log": "^1 || ^2 || ^3"
}, },
"suggest": { "suggest": {
"psr/log": "Allows logging deprecations via PSR-3 logger implementation" "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
@ -181,7 +176,7 @@
"type": "library", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Doctrine\\Deprecations\\": "src" "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@ -192,22 +187,22 @@
"homepage": "https://www.doctrine-project.org/", "homepage": "https://www.doctrine-project.org/",
"support": { "support": {
"issues": "https://github.com/doctrine/deprecations/issues", "issues": "https://github.com/doctrine/deprecations/issues",
"source": "https://github.com/doctrine/deprecations/tree/1.1.5" "source": "https://github.com/doctrine/deprecations/tree/v1.0.0"
}, },
"time": "2025-04-07T20:06:18+00:00" "time": "2022-05-02T15:47:09+00:00"
}, },
{ {
"name": "doctrine/lexer", "name": "doctrine/lexer",
"version": "2.1.1", "version": "2.1.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/lexer.git", "url": "https://github.com/doctrine/lexer.git",
"reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
"reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -215,11 +210,11 @@
"php": "^7.1 || ^8.0" "php": "^7.1 || ^8.0"
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^9 || ^12", "doctrine/coding-standard": "^9 || ^10",
"phpstan/phpstan": "^1.3", "phpstan/phpstan": "^1.3",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psalm/plugin-phpunit": "^0.18.3", "psalm/plugin-phpunit": "^0.18.3",
"vimeo/psalm": "^4.11 || ^5.21" "vimeo/psalm": "^4.11 || ^5.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -256,7 +251,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/doctrine/lexer/issues", "issues": "https://github.com/doctrine/lexer/issues",
"source": "https://github.com/doctrine/lexer/tree/2.1.1" "source": "https://github.com/doctrine/lexer/tree/2.1.0"
}, },
"funding": [ "funding": [
{ {
@ -272,37 +267,38 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-02-05T11:35:39+00:00" "time": "2022-12-14T08:49:07+00:00"
}, },
{ {
"name": "guzzlehttp/promises", "name": "guzzlehttp/promises",
"version": "2.2.0", "version": "1.5.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/promises.git", "url": "https://github.com/guzzle/promises.git",
"reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" "reference": "b94b2807d85443f9719887892882d0329d1e2598"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598",
"reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", "reference": "b94b2807d85443f9719887892882d0329d1e2598",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.2.5 || ^8.0" "php": ">=5.5"
}, },
"require-dev": { "require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2", "symfony/phpunit-bridge": "^4.4 || ^5.1"
"phpunit/phpunit": "^8.5.39 || ^9.6.20"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"bamarni-bin": { "branch-alias": {
"bin-links": true, "dev-master": "1.5-dev"
"forward-command": false
} }
}, },
"autoload": { "autoload": {
"files": [
"src/functions_include.php"
],
"psr-4": { "psr-4": {
"GuzzleHttp\\Promise\\": "src/" "GuzzleHttp\\Promise\\": "src/"
} }
@ -339,7 +335,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/promises/issues", "issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/2.2.0" "source": "https://github.com/guzzle/promises/tree/1.5.2"
}, },
"funding": [ "funding": [
{ {
@ -355,26 +351,26 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-03-27T13:27:01+00:00" "time": "2022-08-28T14:55:35+00:00"
}, },
{ {
"name": "guzzlehttp/psr7", "name": "guzzlehttp/psr7",
"version": "2.7.1", "version": "2.4.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/psr7.git", "url": "https://github.com/guzzle/psr7.git",
"reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" "reference": "67c26b443f348a51926030c83481b85718457d3d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
"reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", "reference": "67c26b443f348a51926030c83481b85718457d3d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.2.5 || ^8.0", "php": "^7.2.5 || ^8.0",
"psr/http-factory": "^1.0", "psr/http-factory": "^1.0",
"psr/http-message": "^1.1 || ^2.0", "psr/http-message": "^1.0",
"ralouphie/getallheaders": "^3.0" "ralouphie/getallheaders": "^3.0"
}, },
"provide": { "provide": {
@ -382,9 +378,9 @@
"psr/http-message-implementation": "1.0" "psr/http-message-implementation": "1.0"
}, },
"require-dev": { "require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2", "bamarni/composer-bin-plugin": "^1.8.1",
"http-interop/http-factory-tests": "0.9.0", "http-interop/http-factory-tests": "^0.9",
"phpunit/phpunit": "^8.5.39 || ^9.6.20" "phpunit/phpunit": "^8.5.29 || ^9.5.23"
}, },
"suggest": { "suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@ -394,6 +390,9 @@
"bamarni-bin": { "bamarni-bin": {
"bin-links": true, "bin-links": true,
"forward-command": false "forward-command": false
},
"branch-alias": {
"dev-master": "2.4-dev"
} }
}, },
"autoload": { "autoload": {
@ -455,7 +454,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/psr7/issues", "issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.7.1" "source": "https://github.com/guzzle/psr7/tree/2.4.3"
}, },
"funding": [ "funding": [
{ {
@ -471,7 +470,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-03-27T12:30:47+00:00" "time": "2022-10-26T14:07:24+00:00"
}, },
{ {
"name": "http-interop/http-factory-guzzle", "name": "http-interop/http-factory-guzzle",
@ -533,29 +532,28 @@
}, },
{ {
"name": "jean85/pretty-package-versions", "name": "jean85/pretty-package-versions",
"version": "2.1.1", "version": "2.0.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Jean85/pretty-package-versions.git", "url": "https://github.com/Jean85/pretty-package-versions.git",
"reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a" "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a", "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af",
"reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a", "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"composer-runtime-api": "^2.1.0", "composer-runtime-api": "^2.0.0",
"php": "^7.4|^8.0" "php": "^7.1|^8.0"
}, },
"require-dev": { "require-dev": {
"friendsofphp/php-cs-fixer": "^3.2", "friendsofphp/php-cs-fixer": "^2.17",
"jean85/composer-provided-replaced-stub-package": "^1.0", "jean85/composer-provided-replaced-stub-package": "^1.0",
"phpstan/phpstan": "^2.0", "phpstan/phpstan": "^0.12.66",
"phpunit/phpunit": "^7.5|^8.5|^9.6", "phpunit/phpunit": "^7.5|^8.5|^9.4",
"rector/rector": "^2.0", "vimeo/psalm": "^4.3"
"vimeo/psalm": "^4.3 || ^5.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@ -587,32 +585,33 @@
], ],
"support": { "support": {
"issues": "https://github.com/Jean85/pretty-package-versions/issues", "issues": "https://github.com/Jean85/pretty-package-versions/issues",
"source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1" "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.5"
}, },
"time": "2025-03-19T14:43:43+00:00" "time": "2021-10-08T21:21:46+00:00"
}, },
{ {
"name": "php-http/client-common", "name": "php-http/client-common",
"version": "2.7.2", "version": "2.6.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-http/client-common.git", "url": "https://github.com/php-http/client-common.git",
"reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46" "reference": "45db684cd4e186dcdc2b9c06b22970fe123796c0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-http/client-common/zipball/0cfe9858ab9d3b213041b947c881d5b19ceeca46", "url": "https://api.github.com/repos/php-http/client-common/zipball/45db684cd4e186dcdc2b9c06b22970fe123796c0",
"reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46", "reference": "45db684cd4e186dcdc2b9c06b22970fe123796c0",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1 || ^8.0", "php": "^7.1 || ^8.0",
"php-http/httplug": "^2.0", "php-http/httplug": "^2.0",
"php-http/message": "^1.6", "php-http/message": "^1.6",
"php-http/message-factory": "^1.0",
"psr/http-client": "^1.0", "psr/http-client": "^1.0",
"psr/http-factory": "^1.0", "psr/http-factory": "^1.0",
"psr/http-message": "^1.0 || ^2.0", "psr/http-message": "^1.0",
"symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0", "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0",
"symfony/polyfill-php80": "^1.17" "symfony/polyfill-php80": "^1.17"
}, },
"require-dev": { "require-dev": {
@ -621,7 +620,7 @@
"nyholm/psr7": "^1.2", "nyholm/psr7": "^1.2",
"phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1",
"phpspec/prophecy": "^1.10.2", "phpspec/prophecy": "^1.10.2",
"phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3"
}, },
"suggest": { "suggest": {
"ext-json": "To detect JSON responses with the ContentTypePlugin", "ext-json": "To detect JSON responses with the ContentTypePlugin",
@ -631,6 +630,11 @@
"php-http/stopwatch-plugin": "Symfony Stopwatch plugin" "php-http/stopwatch-plugin": "Symfony Stopwatch plugin"
}, },
"type": "library", "type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3.x-dev"
}
},
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Http\\Client\\Common\\": "src/" "Http\\Client\\Common\\": "src/"
@ -656,60 +660,49 @@
], ],
"support": { "support": {
"issues": "https://github.com/php-http/client-common/issues", "issues": "https://github.com/php-http/client-common/issues",
"source": "https://github.com/php-http/client-common/tree/2.7.2" "source": "https://github.com/php-http/client-common/tree/2.6.0"
}, },
"time": "2024-09-24T06:21:48+00:00" "time": "2022-09-29T09:59:43+00:00"
}, },
{ {
"name": "php-http/discovery", "name": "php-http/discovery",
"version": "1.20.0", "version": "1.14.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-http/discovery.git", "url": "https://github.com/php-http/discovery.git",
"reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" "reference": "31d8ee46d0215108df16a8527c7438e96a4d7735"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", "url": "https://api.github.com/repos/php-http/discovery/zipball/31d8ee46d0215108df16a8527c7438e96a4d7735",
"reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", "reference": "31d8ee46d0215108df16a8527c7438e96a4d7735",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"composer-plugin-api": "^1.0|^2.0",
"php": "^7.1 || ^8.0" "php": "^7.1 || ^8.0"
}, },
"conflict": { "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": { "require-dev": {
"composer/composer": "^1.0.2|^2.0",
"graham-campbell/phpspec-skip-example-extension": "^5.0", "graham-campbell/phpspec-skip-example-extension": "^5.0",
"php-http/httplug": "^1.0 || ^2.0", "php-http/httplug": "^1.0 || ^2.0",
"php-http/message-factory": "^1.0", "php-http/message-factory": "^1.0",
"phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", "phpspec/phpspec": "^5.1 || ^6.1"
"sebastian/comparator": "^3.0.5 || ^4.0.8",
"symfony/phpunit-bridge": "^6.4.4 || ^7.0.1"
}, },
"type": "composer-plugin", "suggest": {
"php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories"
},
"type": "library",
"extra": { "extra": {
"class": "Http\\Discovery\\Composer\\Plugin", "branch-alias": {
"plugin-optional": true "dev-master": "1.9-dev"
}
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Http\\Discovery\\": "src/" "Http\\Discovery\\": "src/"
}, }
"exclude-from-classmap": [
"src/Composer/Plugin.php"
]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
@ -721,7 +714,7 @@
"email": "mark.sagikazar@gmail.com" "email": "mark.sagikazar@gmail.com"
} }
], ],
"description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", "description": "Finds installed HTTPlug implementations and PSR-7 message factories",
"homepage": "http://php-http.org", "homepage": "http://php-http.org",
"keywords": [ "keywords": [
"adapter", "adapter",
@ -730,40 +723,44 @@
"factory", "factory",
"http", "http",
"message", "message",
"psr17",
"psr7" "psr7"
], ],
"support": { "support": {
"issues": "https://github.com/php-http/discovery/issues", "issues": "https://github.com/php-http/discovery/issues",
"source": "https://github.com/php-http/discovery/tree/1.20.0" "source": "https://github.com/php-http/discovery/tree/1.14.3"
}, },
"time": "2024-10-02T11:20:13+00:00" "time": "2022-07-11T14:04:40+00:00"
}, },
{ {
"name": "php-http/httplug", "name": "php-http/httplug",
"version": "2.4.1", "version": "2.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-http/httplug.git", "url": "https://github.com/php-http/httplug.git",
"reference": "5cad731844891a4c282f3f3e1b582c46839d22f4" "reference": "f640739f80dfa1152533976e3c112477f69274eb"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4", "url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb",
"reference": "5cad731844891a4c282f3f3e1b582c46839d22f4", "reference": "f640739f80dfa1152533976e3c112477f69274eb",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1 || ^8.0", "php": "^7.1 || ^8.0",
"php-http/promise": "^1.1", "php-http/promise": "^1.1",
"psr/http-client": "^1.0", "psr/http-client": "^1.0",
"psr/http-message": "^1.0 || ^2.0" "psr/http-message": "^1.0"
}, },
"require-dev": { "require-dev": {
"friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", "friends-of-phpspec/phpspec-code-coverage": "^4.1",
"phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" "phpspec/phpspec": "^5.1 || ^6.0"
}, },
"type": "library", "type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.x-dev"
}
},
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Http\\Client\\": "src/" "Http\\Client\\": "src/"
@ -792,28 +789,29 @@
], ],
"support": { "support": {
"issues": "https://github.com/php-http/httplug/issues", "issues": "https://github.com/php-http/httplug/issues",
"source": "https://github.com/php-http/httplug/tree/2.4.1" "source": "https://github.com/php-http/httplug/tree/2.3.0"
}, },
"time": "2024-09-23T11:39:58+00:00" "time": "2022-02-21T09:52:22+00:00"
}, },
{ {
"name": "php-http/message", "name": "php-http/message",
"version": "1.16.2", "version": "1.13.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-http/message.git", "url": "https://github.com/php-http/message.git",
"reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a" "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-http/message/zipball/06dd5e8562f84e641bf929bfe699ee0f5ce8080a", "url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361",
"reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a", "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"clue/stream-filter": "^1.5", "clue/stream-filter": "^1.5",
"php": "^7.2 || ^8.0", "php": "^7.1 || ^8.0",
"psr/http-message": "^1.1 || ^2.0" "php-http/message-factory": "^1.0.2",
"psr/http-message": "^1.0"
}, },
"provide": { "provide": {
"php-http/message-factory-implementation": "1.0" "php-http/message-factory-implementation": "1.0"
@ -821,9 +819,8 @@
"require-dev": { "require-dev": {
"ergebnis/composer-normalize": "^2.6", "ergebnis/composer-normalize": "^2.6",
"ext-zlib": "*", "ext-zlib": "*",
"guzzlehttp/psr7": "^1.0 || ^2.0", "guzzlehttp/psr7": "^1.0",
"laminas/laminas-diactoros": "^2.0 || ^3.0", "laminas/laminas-diactoros": "^2.0",
"php-http/message-factory": "^1.0.2",
"phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1",
"slim/slim": "^3.0" "slim/slim": "^3.0"
}, },
@ -834,6 +831,11 @@
"slim/slim": "Used with Slim Framework PSR-7 implementation" "slim/slim": "Used with Slim Framework PSR-7 implementation"
}, },
"type": "library", "type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.10-dev"
}
},
"autoload": { "autoload": {
"files": [ "files": [
"src/filters.php" "src/filters.php"
@ -861,32 +863,32 @@
], ],
"support": { "support": {
"issues": "https://github.com/php-http/message/issues", "issues": "https://github.com/php-http/message/issues",
"source": "https://github.com/php-http/message/tree/1.16.2" "source": "https://github.com/php-http/message/tree/1.13.0"
}, },
"time": "2024-10-02T11:34:13+00:00" "time": "2022-02-11T13:41:14+00:00"
}, },
{ {
"name": "php-http/message-factory", "name": "php-http/message-factory",
"version": "1.1.0", "version": "v1.0.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-http/message-factory.git", "url": "https://github.com/php-http/message-factory.git",
"reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1",
"reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.4", "php": ">=5.4",
"psr/http-message": "^1.0 || ^2.0" "psr/http-message": "^1.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.x-dev" "dev-master": "1.0-dev"
} }
}, },
"autoload": { "autoload": {
@ -915,33 +917,37 @@
], ],
"support": { "support": {
"issues": "https://github.com/php-http/message-factory/issues", "issues": "https://github.com/php-http/message-factory/issues",
"source": "https://github.com/php-http/message-factory/tree/1.1.0" "source": "https://github.com/php-http/message-factory/tree/master"
}, },
"abandoned": "psr/http-factory", "time": "2015-12-19T14:08:53+00:00"
"time": "2023-04-14T14:16:17+00:00"
}, },
{ {
"name": "php-http/promise", "name": "php-http/promise",
"version": "1.3.1", "version": "1.1.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-http/promise.git", "url": "https://github.com/php-http/promise.git",
"reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
"reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1 || ^8.0" "php": "^7.1 || ^8.0"
}, },
"require-dev": { "require-dev": {
"friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", "friends-of-phpspec/phpspec-code-coverage": "^4.3.2",
"phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" "phpspec/phpspec": "^5.1.2 || ^6.2"
}, },
"type": "library", "type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
}
},
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Http\\Promise\\": "src/" "Http\\Promise\\": "src/"
@ -968,70 +974,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/php-http/promise/issues", "issues": "https://github.com/php-http/promise/issues",
"source": "https://github.com/php-http/promise/tree/1.3.1" "source": "https://github.com/php-http/promise/tree/1.1.0"
}, },
"time": "2024-03-15T13:55:21+00:00" "time": "2020-07-07T09:29:14+00:00"
},
{
"name": "predis/predis",
"version": "v2.3.0",
"source": {
"type": "git",
"url": "https://github.com/predis/predis.git",
"reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/predis/predis/zipball/bac46bfdb78cd6e9c7926c697012aae740cb9ec9",
"reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.3",
"phpstan/phpstan": "^1.9",
"phpunit/phpunit": "^8.0 || ^9.4"
},
"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.3.0"
},
"funding": [
{
"url": "https://github.com/sponsors/tillkruss",
"type": "github"
}
],
"time": "2024-11-21T20:00:02+00:00"
}, },
{ {
"name": "psr/cache", "name": "psr/cache",
@ -1182,21 +1127,21 @@
}, },
{ {
"name": "psr/http-client", "name": "psr/http-client",
"version": "1.0.3", "version": "1.0.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-fig/http-client.git", "url": "https://github.com/php-fig/http-client.git",
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.0 || ^8.0", "php": "^7.0 || ^8.0",
"psr/http-message": "^1.0 || ^2.0" "psr/http-message": "^1.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@ -1216,7 +1161,7 @@
"authors": [ "authors": [
{ {
"name": "PHP-FIG", "name": "PHP-FIG",
"homepage": "https://www.php-fig.org/" "homepage": "http://www.php-fig.org/"
} }
], ],
"description": "Common interface for HTTP clients", "description": "Common interface for HTTP clients",
@ -1228,27 +1173,27 @@
"psr-18" "psr-18"
], ],
"support": { "support": {
"source": "https://github.com/php-fig/http-client" "source": "https://github.com/php-fig/http-client/tree/master"
}, },
"time": "2023-09-23T14:17:50+00:00" "time": "2020-06-29T06:28:15+00:00"
}, },
{ {
"name": "psr/http-factory", "name": "psr/http-factory",
"version": "1.1.0", "version": "1.0.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-fig/http-factory.git", "url": "https://github.com/php-fig/http-factory.git",
"reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
"reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.1", "php": ">=7.0.0",
"psr/http-message": "^1.0 || ^2.0" "psr/http-message": "^1.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@ -1268,10 +1213,10 @@
"authors": [ "authors": [
{ {
"name": "PHP-FIG", "name": "PHP-FIG",
"homepage": "https://www.php-fig.org/" "homepage": "http://www.php-fig.org/"
} }
], ],
"description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "description": "Common interfaces for PSR-7 HTTP message factories",
"keywords": [ "keywords": [
"factory", "factory",
"http", "http",
@ -1283,31 +1228,31 @@
"response" "response"
], ],
"support": { "support": {
"source": "https://github.com/php-fig/http-factory" "source": "https://github.com/php-fig/http-factory/tree/master"
}, },
"time": "2024-04-15T12:06:14+00:00" "time": "2019-04-30T12:38:16+00:00"
}, },
{ {
"name": "psr/http-message", "name": "psr/http-message",
"version": "2.0", "version": "1.0.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-fig/http-message.git", "url": "https://github.com/php-fig/http-message.git",
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.2 || ^8.0" "php": ">=5.3.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.0.x-dev" "dev-master": "1.0.x-dev"
} }
}, },
"autoload": { "autoload": {
@ -1322,7 +1267,7 @@
"authors": [ "authors": [
{ {
"name": "PHP-FIG", "name": "PHP-FIG",
"homepage": "https://www.php-fig.org/" "homepage": "http://www.php-fig.org/"
} }
], ],
"description": "Common interface for HTTP messages", "description": "Common interface for HTTP messages",
@ -1336,9 +1281,9 @@
"response" "response"
], ],
"support": { "support": {
"source": "https://github.com/php-fig/http-message/tree/2.0" "source": "https://github.com/php-fig/http-message/tree/master"
}, },
"time": "2023-04-04T09:54:51+00:00" "time": "2016-08-06T14:39:51+00:00"
}, },
{ {
"name": "psr/log", "name": "psr/log",
@ -1436,22 +1381,22 @@
}, },
{ {
"name": "sentry/sdk", "name": "sentry/sdk",
"version": "3.6.0", "version": "3.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/getsentry/sentry-php-sdk.git", "url": "https://github.com/getsentry/sentry-php-sdk.git",
"reference": "24c235ff2027401cbea099bf88689e1a1f197c7a" "reference": "d0678fc7274dbb03046ed05cb24eb92945bedf8e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/24c235ff2027401cbea099bf88689e1a1f197c7a", "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/d0678fc7274dbb03046ed05cb24eb92945bedf8e",
"reference": "24c235ff2027401cbea099bf88689e1a1f197c7a", "reference": "d0678fc7274dbb03046ed05cb24eb92945bedf8e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"http-interop/http-factory-guzzle": "^1.0", "http-interop/http-factory-guzzle": "^1.0",
"sentry/sentry": "^3.22", "sentry/sentry": "^3.9",
"symfony/http-client": "^4.3|^5.0|^6.0|^7.0" "symfony/http-client": "^4.3|^5.0|^6.0"
}, },
"type": "metapackage", "type": "metapackage",
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@ -1477,7 +1422,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/getsentry/sentry-php-sdk/issues", "issues": "https://github.com/getsentry/sentry-php-sdk/issues",
"source": "https://github.com/getsentry/sentry-php-sdk/tree/3.6.0" "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.3.0"
}, },
"funding": [ "funding": [
{ {
@ -1489,38 +1434,38 @@
"type": "custom" "type": "custom"
} }
], ],
"time": "2023-12-04T10:49:33+00:00" "time": "2022-10-11T09:05:00+00:00"
}, },
{ {
"name": "sentry/sentry", "name": "sentry/sentry",
"version": "3.22.1", "version": "3.12.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/getsentry/sentry-php.git", "url": "https://github.com/getsentry/sentry-php.git",
"reference": "8859631ba5ab15bc1af420b0eeed19ecc6c9d81d" "reference": "4902f43640963ed45517fd7c1da7fdd5511bb304"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/8859631ba5ab15bc1af420b0eeed19ecc6c9d81d", "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/4902f43640963ed45517fd7c1da7fdd5511bb304",
"reference": "8859631ba5ab15bc1af420b0eeed19ecc6c9d81d", "reference": "4902f43640963ed45517fd7c1da7fdd5511bb304",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-json": "*", "ext-json": "*",
"ext-mbstring": "*", "ext-mbstring": "*",
"guzzlehttp/promises": "^1.5.3|^2.0", "guzzlehttp/promises": "^1.4",
"guzzlehttp/psr7": "^1.8.4|^2.1.1",
"jean85/pretty-package-versions": "^1.5|^2.0.4", "jean85/pretty-package-versions": "^1.5|^2.0.4",
"php": "^7.2|^8.0", "php": "^7.2|^8.0",
"php-http/async-client-implementation": "^1.0", "php-http/async-client-implementation": "^1.0",
"php-http/client-common": "^1.5|^2.0", "php-http/client-common": "^1.5|^2.0",
"php-http/discovery": "^1.15", "php-http/discovery": "^1.11",
"php-http/httplug": "^1.1|^2.0", "php-http/httplug": "^1.1|^2.0",
"php-http/message": "^1.5", "php-http/message": "^1.5",
"php-http/message-factory": "^1.1",
"psr/http-factory": "^1.0", "psr/http-factory": "^1.0",
"psr/http-factory-implementation": "^1.0", "psr/http-message-implementation": "^1.0",
"psr/log": "^1.0|^2.0|^3.0", "psr/log": "^1.0|^2.0|^3.0",
"symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0|^7.0", "symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0",
"symfony/polyfill-php80": "^1.17" "symfony/polyfill-php80": "^1.17"
}, },
"conflict": { "conflict": {
@ -1529,7 +1474,6 @@
}, },
"require-dev": { "require-dev": {
"friendsofphp/php-cs-fixer": "^2.19|3.4.*", "friendsofphp/php-cs-fixer": "^2.19|3.4.*",
"guzzlehttp/psr7": "^1.8.4|^2.1.1",
"http-interop/http-factory-guzzle": "^1.0", "http-interop/http-factory-guzzle": "^1.0",
"monolog/monolog": "^1.6|^2.0|^3.0", "monolog/monolog": "^1.6|^2.0|^3.0",
"nikic/php-parser": "^4.10.3", "nikic/php-parser": "^4.10.3",
@ -1546,6 +1490,11 @@
"monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler."
}, },
"type": "library", "type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.12.x-dev"
}
},
"autoload": { "autoload": {
"files": [ "files": [
"src/functions.php" "src/functions.php"
@ -1556,7 +1505,7 @@
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"MIT" "BSD-3-Clause"
], ],
"authors": [ "authors": [
{ {
@ -1577,7 +1526,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/getsentry/sentry-php/issues", "issues": "https://github.com/getsentry/sentry-php/issues",
"source": "https://github.com/getsentry/sentry-php/tree/3.22.1" "source": "https://github.com/getsentry/sentry-php/tree/3.12.0"
}, },
"funding": [ "funding": [
{ {
@ -1589,61 +1538,62 @@
"type": "custom" "type": "custom"
} }
], ],
"time": "2023-11-13T11:47:28+00:00" "time": "2022-11-22T10:57:08+00:00"
}, },
{ {
"name": "sentry/sentry-symfony", "name": "sentry/sentry-symfony",
"version": "4.14.0", "version": "4.5.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/getsentry/sentry-symfony.git", "url": "https://github.com/getsentry/sentry-symfony.git",
"reference": "001c4cfd8fe93cbb00edaca903ffbfac28259170" "reference": "04e1f298a3a7ab477e09f4382189538473ad0a58"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-symfony/zipball/001c4cfd8fe93cbb00edaca903ffbfac28259170", "url": "https://api.github.com/repos/getsentry/sentry-symfony/zipball/04e1f298a3a7ab477e09f4382189538473ad0a58",
"reference": "001c4cfd8fe93cbb00edaca903ffbfac28259170", "reference": "04e1f298a3a7ab477e09f4382189538473ad0a58",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"guzzlehttp/psr7": "^1.7 || ^2.0",
"jean85/pretty-package-versions": "^1.5 || ^2.0", "jean85/pretty-package-versions": "^1.5 || ^2.0",
"php": "^7.2||^8.0", "php": "^7.2||^8.0",
"sentry/sdk": "^3.6", "php-http/discovery": "^1.11",
"sentry/sentry": "^3.22.1", "sentry/sdk": "^3.3",
"symfony/cache-contracts": "^1.1||^2.4||^3.0", "symfony/cache-contracts": "^1.1||^2.4||^3.0",
"symfony/config": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/config": "^4.4.20||^5.0.11||^6.0",
"symfony/console": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/console": "^4.4.20||^5.0.11||^6.0",
"symfony/dependency-injection": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/dependency-injection": "^4.4.20||^5.0.11||^6.0",
"symfony/event-dispatcher": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/event-dispatcher": "^4.4.20||^5.0.11||^6.0",
"symfony/http-kernel": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/http-kernel": "^4.4.20||^5.0.11||^6.0",
"symfony/polyfill-php80": "^1.22", "symfony/polyfill-php80": "^1.22",
"symfony/psr-http-message-bridge": "^1.2||^2.0||^6.4||^7.0", "symfony/psr-http-message-bridge": "^1.2||^2.0",
"symfony/security-core": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/security-core": "^4.4.20||^5.0.11||^6.0"
"symfony/security-http": "^4.4.20||^5.0.11||^6.0||^7.0"
}, },
"require-dev": { "require-dev": {
"doctrine/dbal": "^2.13||^3.3||^4.0", "doctrine/dbal": "^2.13||^3.0",
"doctrine/doctrine-bundle": "^2.6", "doctrine/doctrine-bundle": "^1.12||^2.5",
"friendsofphp/php-cs-fixer": "^2.19||^3.40", "friendsofphp/php-cs-fixer": "^2.19||^3.6",
"masterminds/html5": "^2.8", "jangregor/phpstan-prophecy": "^1.0",
"monolog/monolog": "^1.3||^2.0",
"phpspec/prophecy": "!=1.11.0",
"phpspec/prophecy-phpunit": "^1.1||^2.0",
"phpstan/extension-installer": "^1.0", "phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^1.3", "phpstan/phpstan": "^1.3",
"phpstan/phpstan-phpunit": "^1.0", "phpstan/phpstan-phpunit": "^1.0",
"phpstan/phpstan-symfony": "^1.0", "phpstan/phpstan-symfony": "^1.0",
"phpunit/phpunit": "^8.5.14||^9.3.9", "phpunit/phpunit": "^8.5.14||^9.3.9",
"symfony/browser-kit": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/browser-kit": "^4.4.20||^5.0.11||^6.0",
"symfony/cache": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/cache": "^4.4.20||^5.0.11||^6.0",
"symfony/dom-crawler": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/dom-crawler": "^4.4.20||^5.0.11||^6.0",
"symfony/framework-bundle": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/framework-bundle": "^4.4.20||^5.0.11||^6.0",
"symfony/http-client": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/http-client": "^4.4.20||^5.0.11||^6.0",
"symfony/messenger": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/messenger": "^4.4.20||^5.0.11||^6.0",
"symfony/monolog-bundle": "^3.4", "symfony/monolog-bundle": "^3.4",
"symfony/phpunit-bridge": "^5.2.6||^6.0||^7.0", "symfony/phpunit-bridge": "^5.2.6||^6.0",
"symfony/process": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/process": "^4.4.20||^5.0.11||^6.0",
"symfony/twig-bundle": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/twig-bundle": "^4.4.20||^5.0.11||^6.0",
"symfony/yaml": "^4.4.20||^5.0.11||^6.0||^7.0", "symfony/yaml": "^4.4.20||^5.0.11||^6.0",
"vimeo/psalm": "^4.3||^5.16.0" "vimeo/psalm": "^4.3"
}, },
"suggest": { "suggest": {
"doctrine/doctrine-bundle": "Allow distributed tracing of database queries using Sentry.", "doctrine/doctrine-bundle": "Allow distributed tracing of database queries using Sentry.",
@ -1654,9 +1604,10 @@
"type": "symfony-bundle", "type": "symfony-bundle",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"releases/1.x": "1.x-dev", "dev-master": "4.4.x-dev",
"releases/3.2.x": "3.2.x-dev",
"releases/2.x": "2.x-dev", "releases/2.x": "2.x-dev",
"releases/3.2.x": "3.2.x-dev" "releases/1.x": "1.x-dev"
} }
}, },
"autoload": { "autoload": {
@ -1669,7 +1620,7 @@
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"MIT" "Apache-2.0"
], ],
"authors": [ "authors": [
{ {
@ -1691,7 +1642,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/getsentry/sentry-symfony/issues", "issues": "https://github.com/getsentry/sentry-symfony/issues",
"source": "https://github.com/getsentry/sentry-symfony/tree/4.14.0" "source": "https://github.com/getsentry/sentry-symfony/tree/4.5.0"
}, },
"funding": [ "funding": [
{ {
@ -1703,7 +1654,7 @@
"type": "custom" "type": "custom"
} }
], ],
"time": "2024-02-26T09:27:19+00:00" "time": "2022-11-28T12:37:44+00:00"
}, },
{ {
"name": "symfony/apache-pack", "name": "symfony/apache-pack",
@ -1733,16 +1684,16 @@
}, },
{ {
"name": "symfony/asset", "name": "symfony/asset",
"version": "v5.4.45", "version": "v5.4.13",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/asset.git", "url": "https://github.com/symfony/asset.git",
"reference": "b7a18eaff1d717c321b4f13403413f8815bf9cb0" "reference": "9aa867206711cb6fcca51ef127ba52a018170be9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/asset/zipball/b7a18eaff1d717c321b4f13403413f8815bf9cb0", "url": "https://api.github.com/repos/symfony/asset/zipball/9aa867206711cb6fcca51ef127ba52a018170be9",
"reference": "b7a18eaff1d717c321b4f13403413f8815bf9cb0", "reference": "9aa867206711cb6fcca51ef127ba52a018170be9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1787,7 +1738,7 @@
"description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/asset/tree/v5.4.45" "source": "https://github.com/symfony/asset/tree/v5.4.13"
}, },
"funding": [ "funding": [
{ {
@ -1803,20 +1754,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-10-22T13:05:35+00:00" "time": "2022-08-31T08:17:19+00:00"
}, },
{ {
"name": "symfony/cache", "name": "symfony/cache",
"version": "v5.4.46", "version": "v5.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/cache.git", "url": "https://github.com/symfony/cache.git",
"reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b" "reference": "60e87188abbacd29ccde44d69c5392a33e888e98"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/0fe08ee32cec2748fbfea10c52d3ee02049e0f6b", "url": "https://api.github.com/repos/symfony/cache/zipball/60e87188abbacd29ccde44d69c5392a33e888e98",
"reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b", "reference": "60e87188abbacd29ccde44d69c5392a33e888e98",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1844,8 +1795,8 @@
"require-dev": { "require-dev": {
"cache/integration-tests": "dev-master", "cache/integration-tests": "dev-master",
"doctrine/cache": "^1.6|^2.0", "doctrine/cache": "^1.6|^2.0",
"doctrine/dbal": "^2.13.1|^3|^4", "doctrine/dbal": "^2.13.1|^3.0",
"predis/predis": "^1.1|^2.0", "predis/predis": "^1.1",
"psr/simple-cache": "^1.0|^2.0", "psr/simple-cache": "^1.0|^2.0",
"symfony/config": "^4.4|^5.0|^6.0", "symfony/config": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0",
@ -1884,7 +1835,7 @@
"psr6" "psr6"
], ],
"support": { "support": {
"source": "https://github.com/symfony/cache/tree/v5.4.46" "source": "https://github.com/symfony/cache/tree/v5.4.15"
}, },
"funding": [ "funding": [
{ {
@ -1900,20 +1851,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-04T11:43:55+00:00" "time": "2022-10-27T07:55:40+00:00"
}, },
{ {
"name": "symfony/cache-contracts", "name": "symfony/cache-contracts",
"version": "v2.5.4", "version": "v2.5.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/cache-contracts.git", "url": "https://github.com/symfony/cache-contracts.git",
"reference": "517c3a3619dadfa6952c4651767fcadffb4df65e" "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/517c3a3619dadfa6952c4651767fcadffb4df65e", "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc",
"reference": "517c3a3619dadfa6952c4651767fcadffb4df65e", "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1925,12 +1876,12 @@
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": { "branch-alias": {
"dev-main": "2.5-dev" "dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@ -1963,7 +1914,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/cache-contracts/tree/v2.5.4" "source": "https://github.com/symfony/cache-contracts/tree/v2.5.2"
}, },
"funding": [ "funding": [
{ {
@ -1979,20 +1930,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-01-02T09:53:40+00:00"
}, },
{ {
"name": "symfony/config", "name": "symfony/config",
"version": "v5.4.46", "version": "v5.4.11",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/config.git", "url": "https://github.com/symfony/config.git",
"reference": "977c88a02d7d3f16904a81907531b19666a08e78" "reference": "ec79e03125c1d2477e43dde8528535d90cc78379"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/977c88a02d7d3f16904a81907531b19666a08e78", "url": "https://api.github.com/repos/symfony/config/zipball/ec79e03125c1d2477e43dde8528535d90cc78379",
"reference": "977c88a02d7d3f16904a81907531b19666a08e78", "reference": "ec79e03125c1d2477e43dde8528535d90cc78379",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2042,7 +1993,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/config/tree/v5.4.46" "source": "https://github.com/symfony/config/tree/v5.4.11"
}, },
"funding": [ "funding": [
{ {
@ -2058,20 +2009,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-10-30T07:58:02+00:00" "time": "2022-07-20T13:00:38+00:00"
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v5.4.47", "version": "v5.4.16",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed" "reference": "8e9b9c8dfb33af6057c94e1b44846bee700dc5ef"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", "url": "https://api.github.com/repos/symfony/console/zipball/8e9b9c8dfb33af6057c94e1b44846bee700dc5ef",
"reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", "reference": "8e9b9c8dfb33af6057c94e1b44846bee700dc5ef",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2136,12 +2087,12 @@
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"keywords": [ "keywords": [
"cli", "cli",
"command-line", "command line",
"console", "console",
"terminal" "terminal"
], ],
"support": { "support": {
"source": "https://github.com/symfony/console/tree/v5.4.47" "source": "https://github.com/symfony/console/tree/v5.4.16"
}, },
"funding": [ "funding": [
{ {
@ -2157,20 +2108,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-06T11:30:55+00:00" "time": "2022-11-25T14:09:27+00:00"
}, },
{ {
"name": "symfony/dependency-injection", "name": "symfony/dependency-injection",
"version": "v5.4.48", "version": "v5.4.16",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dependency-injection.git", "url": "https://github.com/symfony/dependency-injection.git",
"reference": "e5ca16dee39ef7d63e552ff0bf0a2526a1142c92" "reference": "a93e1863500940780fc1235f52d54397be2d14b3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e5ca16dee39ef7d63e552ff0bf0a2526a1142c92", "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/a93e1863500940780fc1235f52d54397be2d14b3",
"reference": "e5ca16dee39ef7d63e552ff0bf0a2526a1142c92", "reference": "a93e1863500940780fc1235f52d54397be2d14b3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2230,7 +2181,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application", "description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.48" "source": "https://github.com/symfony/dependency-injection/tree/v5.4.16"
}, },
"funding": [ "funding": [
{ {
@ -2246,20 +2197,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-20T10:51:57+00:00" "time": "2022-11-25T07:33:13+00:00"
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
"version": "v3.5.1", "version": "v3.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git", "url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3",
"reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2267,12 +2218,12 @@
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": { "branch-alias": {
"dev-main": "3.5-dev" "dev-main": "3.3-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@ -2297,7 +2248,7 @@
"description": "A generic function and convention to trigger deprecation notices", "description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0"
}, },
"funding": [ "funding": [
{ {
@ -2313,20 +2264,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:20:29+00:00" "time": "2022-11-25T10:21:52+00:00"
}, },
{ {
"name": "symfony/dotenv", "name": "symfony/dotenv",
"version": "v5.4.48", "version": "v5.4.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dotenv.git", "url": "https://github.com/symfony/dotenv.git",
"reference": "08013403089c8a126c968179179b817a552841ab" "reference": "83a2310904a4f5d4f42526227b5a578ac82232a9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/08013403089c8a126c968179179b817a552841ab", "url": "https://api.github.com/repos/symfony/dotenv/zipball/83a2310904a4f5d4f42526227b5a578ac82232a9",
"reference": "08013403089c8a126c968179179b817a552841ab", "reference": "83a2310904a4f5d4f42526227b5a578ac82232a9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2368,7 +2319,7 @@
"environment" "environment"
], ],
"support": { "support": {
"source": "https://github.com/symfony/dotenv/tree/v5.4.48" "source": "https://github.com/symfony/dotenv/tree/v5.4.5"
}, },
"funding": [ "funding": [
{ {
@ -2384,20 +2335,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-27T09:33:00+00:00" "time": "2022-02-15T17:04:12+00:00"
}, },
{ {
"name": "symfony/error-handler", "name": "symfony/error-handler",
"version": "v5.4.46", "version": "v5.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/error-handler.git", "url": "https://github.com/symfony/error-handler.git",
"reference": "d19ede7a2cafb386be9486c580649d0f9e3d0363" "reference": "539cf1428b8442303c6e876ad7bf5a7babd91091"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/d19ede7a2cafb386be9486c580649d0f9e3d0363", "url": "https://api.github.com/repos/symfony/error-handler/zipball/539cf1428b8442303c6e876ad7bf5a7babd91091",
"reference": "d19ede7a2cafb386be9486c580649d0f9e3d0363", "reference": "539cf1428b8442303c6e876ad7bf5a7babd91091",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2439,7 +2390,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code", "description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/error-handler/tree/v5.4.46" "source": "https://github.com/symfony/error-handler/tree/v5.4.15"
}, },
"funding": [ "funding": [
{ {
@ -2455,20 +2406,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-05T14:17:06+00:00" "time": "2022-10-27T06:32:25+00:00"
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
"version": "v5.4.45", "version": "v5.4.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher.git", "url": "https://github.com/symfony/event-dispatcher.git",
"reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9" "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/72982eb416f61003e9bb6e91f8b3213600dcf9e9", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc",
"reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9", "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2524,7 +2475,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.45" "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9"
}, },
"funding": [ "funding": [
{ {
@ -2540,34 +2491,37 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-05-05T16:45:39+00:00"
}, },
{ {
"name": "symfony/event-dispatcher-contracts", "name": "symfony/event-dispatcher-contracts",
"version": "v3.5.1", "version": "v3.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git", "url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" "reference": "0782b0b52a737a05b4383d0df35a474303cabdae"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae",
"reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "reference": "0782b0b52a737a05b4383d0df35a474303cabdae",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.1",
"psr/event-dispatcher": "^1" "psr/event-dispatcher": "^1"
}, },
"suggest": {
"symfony/event-dispatcher-implementation": ""
},
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": { "branch-alias": {
"dev-main": "3.5-dev" "dev-main": "3.3-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@ -2600,7 +2554,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0"
}, },
"funding": [ "funding": [
{ {
@ -2616,83 +2570,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:20:29+00:00" "time": "2022-11-25T10:21:52+00:00"
},
{
"name": "symfony/expression-language",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/expression-language.git",
"reference": "a784b66edc4c151eb05076d04707906ee2c209a9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/expression-language/zipball/a784b66edc4c151eb05076d04707906ee2c209a9",
"reference": "a784b66edc4c151eb05076d04707906ee2c209a9",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/service-contracts": "^1.1|^2|^3"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\ExpressionLanguage\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides an engine that can compile and evaluate expressions",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/expression-language/tree/v5.4.45"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-10-04T14:55:40+00:00"
}, },
{ {
"name": "symfony/filesystem", "name": "symfony/filesystem",
"version": "v5.4.45", "version": "v5.4.13",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/filesystem.git", "url": "https://github.com/symfony/filesystem.git",
"reference": "57c8294ed37d4a055b77057827c67f9558c95c54" "reference": "ac09569844a9109a5966b9438fc29113ce77cf51"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54", "url": "https://api.github.com/repos/symfony/filesystem/zipball/ac09569844a9109a5966b9438fc29113ce77cf51",
"reference": "57c8294ed37d4a055b77057827c67f9558c95c54", "reference": "ac09569844a9109a5966b9438fc29113ce77cf51",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2701,9 +2592,6 @@
"symfony/polyfill-mbstring": "~1.8", "symfony/polyfill-mbstring": "~1.8",
"symfony/polyfill-php80": "^1.16" "symfony/polyfill-php80": "^1.16"
}, },
"require-dev": {
"symfony/process": "^5.4|^6.4"
},
"type": "library", "type": "library",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -2730,7 +2618,7 @@
"description": "Provides basic utilities for the filesystem", "description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/filesystem/tree/v5.4.45" "source": "https://github.com/symfony/filesystem/tree/v5.4.13"
}, },
"funding": [ "funding": [
{ {
@ -2746,20 +2634,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-10-22T13:05:35+00:00" "time": "2022-09-21T19:53:16+00:00"
}, },
{ {
"name": "symfony/finder", "name": "symfony/finder",
"version": "v5.4.45", "version": "v5.4.11",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/finder.git", "url": "https://github.com/symfony/finder.git",
"reference": "63741784cd7b9967975eec610b256eed3ede022b" "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b", "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c",
"reference": "63741784cd7b9967975eec610b256eed3ede022b", "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2793,7 +2681,7 @@
"description": "Finds files and directories via an intuitive fluent interface", "description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/finder/tree/v5.4.45" "source": "https://github.com/symfony/finder/tree/v5.4.11"
}, },
"funding": [ "funding": [
{ {
@ -2809,29 +2697,26 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-28T13:32:08+00:00" "time": "2022-07-29T07:37:50+00:00"
}, },
{ {
"name": "symfony/flex", "name": "symfony/flex",
"version": "v2.5.0", "version": "v2.2.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/flex.git", "url": "https://github.com/symfony/flex.git",
"reference": "8ce1acd9842abe0e9b4c4a0bd3f259859516c018" "reference": "0763da1bdcce1d48c06778d48249905c26d34a72"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/flex/zipball/8ce1acd9842abe0e9b4c4a0bd3f259859516c018", "url": "https://api.github.com/repos/symfony/flex/zipball/0763da1bdcce1d48c06778d48249905c26d34a72",
"reference": "8ce1acd9842abe0e9b4c4a0bd3f259859516c018", "reference": "0763da1bdcce1d48c06778d48249905c26d34a72",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"composer-plugin-api": "^2.1", "composer-plugin-api": "^2.1",
"php": ">=8.0" "php": ">=8.0"
}, },
"conflict": {
"composer/semver": "<1.7.2"
},
"require-dev": { "require-dev": {
"composer/composer": "^2.1", "composer/composer": "^2.1",
"symfony/dotenv": "^5.4|^6.0", "symfony/dotenv": "^5.4|^6.0",
@ -2861,7 +2746,7 @@
"description": "Composer plugin for Symfony", "description": "Composer plugin for Symfony",
"support": { "support": {
"issues": "https://github.com/symfony/flex/issues", "issues": "https://github.com/symfony/flex/issues",
"source": "https://github.com/symfony/flex/tree/v2.5.0" "source": "https://github.com/symfony/flex/tree/v2.2.3"
}, },
"funding": [ "funding": [
{ {
@ -2877,20 +2762,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-03-03T07:50:46+00:00" "time": "2022-08-07T09:39:47+00:00"
}, },
{ {
"name": "symfony/form", "name": "symfony/form",
"version": "v5.4.45", "version": "v5.4.16",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/form.git", "url": "https://github.com/symfony/form.git",
"reference": "c1974a723cdee8a273cb49ce13fada5c1667706a" "reference": "5d3790b31935deff2506b2687ae18b3cf8f50405"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/form/zipball/c1974a723cdee8a273cb49ce13fada5c1667706a", "url": "https://api.github.com/repos/symfony/form/zipball/5d3790b31935deff2506b2687ae18b3cf8f50405",
"reference": "c1974a723cdee8a273cb49ce13fada5c1667706a", "reference": "5d3790b31935deff2506b2687ae18b3cf8f50405",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2907,15 +2792,16 @@
"symfony/service-contracts": "^1.1|^2|^3" "symfony/service-contracts": "^1.1|^2|^3"
}, },
"conflict": { "conflict": {
"phpunit/phpunit": "<5.4.3",
"symfony/console": "<4.4", "symfony/console": "<4.4",
"symfony/dependency-injection": "<4.4", "symfony/dependency-injection": "<4.4",
"symfony/doctrine-bridge": "<5.4.21|>=6,<6.2.7", "symfony/doctrine-bridge": "<4.4",
"symfony/error-handler": "<4.4.5", "symfony/error-handler": "<4.4.5",
"symfony/framework-bundle": "<4.4", "symfony/framework-bundle": "<4.4",
"symfony/http-kernel": "<4.4", "symfony/http-kernel": "<4.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3", "symfony/translation": "<4.4",
"symfony/translation-contracts": "<1.1.7", "symfony/translation-contracts": "<1.1.7",
"symfony/twig-bridge": "<5.4.21|>=6,<6.2.7" "symfony/twig-bridge": "<4.4"
}, },
"require-dev": { "require-dev": {
"doctrine/collections": "^1.0|^2.0", "doctrine/collections": "^1.0|^2.0",
@ -2927,7 +2813,7 @@
"symfony/http-kernel": "^4.4|^5.0|^6.0", "symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/intl": "^4.4|^5.0|^6.0", "symfony/intl": "^4.4|^5.0|^6.0",
"symfony/security-csrf": "^4.4|^5.0|^6.0", "symfony/security-csrf": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3", "symfony/translation": "^4.4|^5.0|^6.0",
"symfony/uid": "^5.1|^6.0", "symfony/uid": "^5.1|^6.0",
"symfony/validator": "^4.4.17|^5.1.9|^6.0", "symfony/validator": "^4.4.17|^5.1.9|^6.0",
"symfony/var-dumper": "^4.4|^5.0|^6.0" "symfony/var-dumper": "^4.4|^5.0|^6.0"
@ -2963,7 +2849,7 @@
"description": "Allows to easily create, process and reuse HTML forms", "description": "Allows to easily create, process and reuse HTML forms",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/form/tree/v5.4.45" "source": "https://github.com/symfony/form/tree/v5.4.16"
}, },
"funding": [ "funding": [
{ {
@ -2979,20 +2865,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-10-08T07:27:17+00:00" "time": "2022-11-25T18:56:07+00:00"
}, },
{ {
"name": "symfony/framework-bundle", "name": "symfony/framework-bundle",
"version": "v5.4.45", "version": "v5.4.16",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/framework-bundle.git", "url": "https://github.com/symfony/framework-bundle.git",
"reference": "3d70f14176422d4d8ee400b6acae4e21f7c25ca2" "reference": "70bfb2e76b8d97b2b19058bd65046b4cc1f04e3d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/3d70f14176422d4d8ee400b6acae4e21f7c25ca2", "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/70bfb2e76b8d97b2b19058bd65046b4cc1f04e3d",
"reference": "3d70f14176422d4d8ee400b6acae4e21f7c25ca2", "reference": "70bfb2e76b8d97b2b19058bd65046b4cc1f04e3d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3000,13 +2886,13 @@
"php": ">=7.2.5", "php": ">=7.2.5",
"symfony/cache": "^5.2|^6.0", "symfony/cache": "^5.2|^6.0",
"symfony/config": "^5.3|^6.0", "symfony/config": "^5.3|^6.0",
"symfony/dependency-injection": "^5.4.44|^6.0.5", "symfony/dependency-injection": "^5.4.5|^6.0.5",
"symfony/deprecation-contracts": "^2.1|^3", "symfony/deprecation-contracts": "^2.1|^3",
"symfony/error-handler": "^4.4.1|^5.0.1|^6.0", "symfony/error-handler": "^4.4.1|^5.0.1|^6.0",
"symfony/event-dispatcher": "^5.1|^6.0", "symfony/event-dispatcher": "^5.1|^6.0",
"symfony/filesystem": "^4.4|^5.0|^6.0", "symfony/filesystem": "^4.4|^5.0|^6.0",
"symfony/finder": "^4.4|^5.0|^6.0", "symfony/finder": "^4.4|^5.0|^6.0",
"symfony/http-foundation": "^5.4.24|^6.2.11", "symfony/http-foundation": "^5.3|^6.0",
"symfony/http-kernel": "^5.4|^6.0", "symfony/http-kernel": "^5.4|^6.0",
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php80": "^1.16", "symfony/polyfill-php80": "^1.16",
@ -3019,8 +2905,9 @@
"doctrine/persistence": "<1.3", "doctrine/persistence": "<1.3",
"phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0", "phpdocumentor/type-resolver": "<1.4.0",
"phpunit/phpunit": "<5.4.3",
"symfony/asset": "<5.3", "symfony/asset": "<5.3",
"symfony/console": "<5.2.5|>=7.0", "symfony/console": "<5.2.5",
"symfony/dom-crawler": "<4.4", "symfony/dom-crawler": "<4.4",
"symfony/dotenv": "<5.1", "symfony/dotenv": "<5.1",
"symfony/form": "<5.2", "symfony/form": "<5.2",
@ -3031,7 +2918,6 @@
"symfony/mime": "<4.4", "symfony/mime": "<4.4",
"symfony/property-access": "<5.3", "symfony/property-access": "<5.3",
"symfony/property-info": "<4.4", "symfony/property-info": "<4.4",
"symfony/runtime": "<5.4.45|>=6.0,<6.4.13|>=7.0,<7.1.6",
"symfony/security-csrf": "<5.3", "symfony/security-csrf": "<5.3",
"symfony/serializer": "<5.2", "symfony/serializer": "<5.2",
"symfony/service-contracts": ">=3.0", "symfony/service-contracts": ">=3.0",
@ -3039,12 +2925,12 @@
"symfony/translation": "<5.3", "symfony/translation": "<5.3",
"symfony/twig-bridge": "<4.4", "symfony/twig-bridge": "<4.4",
"symfony/twig-bundle": "<4.4", "symfony/twig-bundle": "<4.4",
"symfony/validator": "<5.3.11", "symfony/validator": "<5.2",
"symfony/web-profiler-bundle": "<4.4", "symfony/web-profiler-bundle": "<4.4",
"symfony/workflow": "<5.2" "symfony/workflow": "<5.2"
}, },
"require-dev": { "require-dev": {
"doctrine/annotations": "^1.13.1|^2", "doctrine/annotations": "^1.13.1",
"doctrine/cache": "^1.11|^2.0", "doctrine/cache": "^1.11|^2.0",
"doctrine/persistence": "^1.3|^2|^3", "doctrine/persistence": "^1.3|^2|^3",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
@ -3072,11 +2958,11 @@
"symfony/string": "^5.0|^6.0", "symfony/string": "^5.0|^6.0",
"symfony/translation": "^5.3|^6.0", "symfony/translation": "^5.3|^6.0",
"symfony/twig-bundle": "^4.4|^5.0|^6.0", "symfony/twig-bundle": "^4.4|^5.0|^6.0",
"symfony/validator": "^5.3.11|^6.0", "symfony/validator": "^5.2|^6.0",
"symfony/web-link": "^4.4|^5.0|^6.0", "symfony/web-link": "^4.4|^5.0|^6.0",
"symfony/workflow": "^5.2|^6.0", "symfony/workflow": "^5.2|^6.0",
"symfony/yaml": "^4.4|^5.0|^6.0", "symfony/yaml": "^4.4|^5.0|^6.0",
"twig/twig": "^2.10|^3.0.4" "twig/twig": "^2.10|^3.0"
}, },
"suggest": { "suggest": {
"ext-apcu": "For best performance of the system caches", "ext-apcu": "For best performance of the system caches",
@ -3114,7 +3000,7 @@
"description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/framework-bundle/tree/v5.4.45" "source": "https://github.com/symfony/framework-bundle/tree/v5.4.16"
}, },
"funding": [ "funding": [
{ {
@ -3130,27 +3016,27 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-10-22T13:05:35+00:00" "time": "2022-11-25T14:26:10+00:00"
}, },
{ {
"name": "symfony/http-client", "name": "symfony/http-client",
"version": "v5.4.49", "version": "v5.4.16",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-client.git", "url": "https://github.com/symfony/http-client.git",
"reference": "d77d8e212cde7b5c4a64142bf431522f19487c28" "reference": "0f43af12a27733a060b92396b7bde84a4376da0a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/d77d8e212cde7b5c4a64142bf431522f19487c28", "url": "https://api.github.com/repos/symfony/http-client/zipball/0f43af12a27733a060b92396b7bde84a4376da0a",
"reference": "d77d8e212cde7b5c4a64142bf431522f19487c28", "reference": "0f43af12a27733a060b92396b7bde84a4376da0a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2.5", "php": ">=7.2.5",
"psr/log": "^1|^2|^3", "psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.1|^3", "symfony/deprecation-contracts": "^2.1|^3",
"symfony/http-client-contracts": "^2.5.4", "symfony/http-client-contracts": "^2.4",
"symfony/polyfill-php73": "^1.11", "symfony/polyfill-php73": "^1.11",
"symfony/polyfill-php80": "^1.16", "symfony/polyfill-php80": "^1.16",
"symfony/service-contracts": "^1.0|^2|^3" "symfony/service-contracts": "^1.0|^2|^3"
@ -3166,10 +3052,9 @@
"amphp/http-client": "^4.2.1", "amphp/http-client": "^4.2.1",
"amphp/http-tunnel": "^1.0", "amphp/http-tunnel": "^1.0",
"amphp/socket": "^1.1", "amphp/socket": "^1.1",
"guzzlehttp/promises": "^1.4|^2.0", "guzzlehttp/promises": "^1.4",
"nyholm/psr7": "^1.0", "nyholm/psr7": "^1.0",
"php-http/httplug": "^1.0|^2.0", "php-http/httplug": "^1.0|^2.0",
"php-http/message-factory": "^1.0",
"psr/http-client": "^1.0", "psr/http-client": "^1.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/http-kernel": "^4.4.13|^5.1.5|^6.0", "symfony/http-kernel": "^4.4.13|^5.1.5|^6.0",
@ -3201,11 +3086,8 @@
], ],
"description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"keywords": [
"http"
],
"support": { "support": {
"source": "https://github.com/symfony/http-client/tree/v5.4.49" "source": "https://github.com/symfony/http-client/tree/v5.4.16"
}, },
"funding": [ "funding": [
{ {
@ -3221,20 +3103,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-28T08:37:04+00:00" "time": "2022-11-09T11:27:39+00:00"
}, },
{ {
"name": "symfony/http-client-contracts", "name": "symfony/http-client-contracts",
"version": "v2.5.5", "version": "v2.5.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-client-contracts.git", "url": "https://github.com/symfony/http-client-contracts.git",
"reference": "48ef1d0a082885877b664332b9427662065a360c" "reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/48ef1d0a082885877b664332b9427662065a360c", "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70",
"reference": "48ef1d0a082885877b664332b9427662065a360c", "reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3245,12 +3127,12 @@
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": { "branch-alias": {
"dev-main": "2.5-dev" "dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@ -3283,7 +3165,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/http-client-contracts/tree/v2.5.5" "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.2"
}, },
"funding": [ "funding": [
{ {
@ -3299,20 +3181,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-28T08:37:04+00:00" "time": "2022-04-12T15:48:08+00:00"
}, },
{ {
"name": "symfony/http-foundation", "name": "symfony/http-foundation",
"version": "v5.4.48", "version": "v5.4.16",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-foundation.git", "url": "https://github.com/symfony/http-foundation.git",
"reference": "3f38b8af283b830e1363acd79e5bc3412d055341" "reference": "5032c5849aef24741e1970cb03511b0dd131d838"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/3f38b8af283b830e1363acd79e5bc3412d055341", "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5032c5849aef24741e1970cb03511b0dd131d838",
"reference": "3f38b8af283b830e1363acd79e5bc3412d055341", "reference": "5032c5849aef24741e1970cb03511b0dd131d838",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3322,7 +3204,7 @@
"symfony/polyfill-php80": "^1.16" "symfony/polyfill-php80": "^1.16"
}, },
"require-dev": { "require-dev": {
"predis/predis": "^1.0|^2.0", "predis/predis": "~1.0",
"symfony/cache": "^4.4|^5.0|^6.0", "symfony/cache": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0", "symfony/expression-language": "^4.4|^5.0|^6.0",
@ -3359,7 +3241,7 @@
"description": "Defines an object-oriented layer for the HTTP specification", "description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/http-foundation/tree/v5.4.48" "source": "https://github.com/symfony/http-foundation/tree/v5.4.16"
}, },
"funding": [ "funding": [
{ {
@ -3375,20 +3257,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-13T18:58:02+00:00" "time": "2022-11-07T08:06:40+00:00"
}, },
{ {
"name": "symfony/http-kernel", "name": "symfony/http-kernel",
"version": "v5.4.48", "version": "v5.4.16",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-kernel.git", "url": "https://github.com/symfony/http-kernel.git",
"reference": "c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0" "reference": "b432c57c5de73634b1859093c1f58e3cd84455a1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0", "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b432c57c5de73634b1859093c1f58e3cd84455a1",
"reference": "c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0", "reference": "b432c57c5de73634b1859093c1f58e3cd84455a1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3397,7 +3279,7 @@
"symfony/deprecation-contracts": "^2.1|^3", "symfony/deprecation-contracts": "^2.1|^3",
"symfony/error-handler": "^4.4|^5.0|^6.0", "symfony/error-handler": "^4.4|^5.0|^6.0",
"symfony/event-dispatcher": "^5.0|^6.0", "symfony/event-dispatcher": "^5.0|^6.0",
"symfony/http-foundation": "^5.4.21|^6.2.7", "symfony/http-foundation": "^5.3.7|^6.0",
"symfony/polyfill-ctype": "^1.8", "symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-php73": "^1.9", "symfony/polyfill-php73": "^1.9",
"symfony/polyfill-php80": "^1.16" "symfony/polyfill-php80": "^1.16"
@ -3437,7 +3319,6 @@
"symfony/stopwatch": "^4.4|^5.0|^6.0", "symfony/stopwatch": "^4.4|^5.0|^6.0",
"symfony/translation": "^4.4|^5.0|^6.0", "symfony/translation": "^4.4|^5.0|^6.0",
"symfony/translation-contracts": "^1.1|^2|^3", "symfony/translation-contracts": "^1.1|^2|^3",
"symfony/var-dumper": "^4.4.31|^5.4",
"twig/twig": "^2.13|^3.0.4" "twig/twig": "^2.13|^3.0.4"
}, },
"suggest": { "suggest": {
@ -3472,7 +3353,7 @@
"description": "Provides a structured process for converting a Request into a Response", "description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/http-kernel/tree/v5.4.48" "source": "https://github.com/symfony/http-kernel/tree/v5.4.16"
}, },
"funding": [ "funding": [
{ {
@ -3488,20 +3369,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-27T12:43:17+00:00" "time": "2022-11-28T18:08:58+00:00"
}, },
{ {
"name": "symfony/lock", "name": "symfony/lock",
"version": "v5.4.45", "version": "v5.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/lock.git", "url": "https://github.com/symfony/lock.git",
"reference": "f85ebc5346a2f0e4f9e347e9154922a6d4665c65" "reference": "109a20faa6119578b46457ef8cffb9389e20e5ca"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/lock/zipball/f85ebc5346a2f0e4f9e347e9154922a6d4665c65", "url": "https://api.github.com/repos/symfony/lock/zipball/109a20faa6119578b46457ef8cffb9389e20e5ca",
"reference": "f85ebc5346a2f0e4f9e347e9154922a6d4665c65", "reference": "109a20faa6119578b46457ef8cffb9389e20e5ca",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3514,8 +3395,8 @@
"doctrine/dbal": "<2.13" "doctrine/dbal": "<2.13"
}, },
"require-dev": { "require-dev": {
"doctrine/dbal": "^2.13|^3|^4", "doctrine/dbal": "^2.13|^3.0",
"predis/predis": "^1.0|^2.0" "predis/predis": "~1.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -3551,7 +3432,7 @@
"semaphore" "semaphore"
], ],
"support": { "support": {
"source": "https://github.com/symfony/lock/tree/v5.4.45" "source": "https://github.com/symfony/lock/tree/v5.4.15"
}, },
"funding": [ "funding": [
{ {
@ -3567,20 +3448,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-10-21T20:36:41+00:00" "time": "2022-10-27T07:55:40+00:00"
}, },
{ {
"name": "symfony/options-resolver", "name": "symfony/options-resolver",
"version": "v5.4.45", "version": "v5.4.11",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/options-resolver.git", "url": "https://github.com/symfony/options-resolver.git",
"reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6" "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", "url": "https://api.github.com/repos/symfony/options-resolver/zipball/54f14e36aa73cb8f7261d7686691fd4d75ea2690",
"reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6", "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3620,7 +3501,7 @@
"options" "options"
], ],
"support": { "support": {
"source": "https://github.com/symfony/options-resolver/tree/v5.4.45" "source": "https://github.com/symfony/options-resolver/tree/v5.4.11"
}, },
"funding": [ "funding": [
{ {
@ -3636,25 +3517,24 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-07-20T13:00:38+00:00"
}, },
{ {
"name": "symfony/password-hasher", "name": "symfony/password-hasher",
"version": "v5.4.45", "version": "v5.4.11",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/password-hasher.git", "url": "https://github.com/symfony/password-hasher.git",
"reference": "6c5993b24505f98b90ca4896448012bbec54c7c8" "reference": "b0169ed8f09a4ae39eb119218ea1685079a9b179"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/6c5993b24505f98b90ca4896448012bbec54c7c8", "url": "https://api.github.com/repos/symfony/password-hasher/zipball/b0169ed8f09a4ae39eb119218ea1685079a9b179",
"reference": "6c5993b24505f98b90ca4896448012bbec54c7c8", "reference": "b0169ed8f09a4ae39eb119218ea1685079a9b179",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2.5", "php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.15" "symfony/polyfill-php80": "^1.15"
}, },
"conflict": { "conflict": {
@ -3694,7 +3574,7 @@
"password" "password"
], ],
"support": { "support": {
"source": "https://github.com/symfony/password-hasher/tree/v5.4.45" "source": "https://github.com/symfony/password-hasher/tree/v5.4.11"
}, },
"funding": [ "funding": [
{ {
@ -3710,33 +3590,36 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-07-20T13:00:38+00:00"
}, },
{ {
"name": "symfony/polyfill-intl-grapheme", "name": "symfony/polyfill-intl-grapheme",
"version": "v1.31.0", "version": "v1.27.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
"reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" "reference": "511a08c03c1960e08a883f4cffcacd219b758354"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354",
"reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "reference": "511a08c03c1960e08a883f4cffcacd219b758354",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2" "php": ">=7.1"
}, },
"suggest": { "suggest": {
"ext-intl": "For best performance" "ext-intl": "For best performance"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": { "thanks": {
"url": "https://github.com/symfony/polyfill", "name": "symfony/polyfill",
"name": "symfony/polyfill" "url": "https://github.com/symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@ -3772,7 +3655,7 @@
"shim" "shim"
], ],
"support": { "support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0"
}, },
"funding": [ "funding": [
{ {
@ -3788,33 +3671,36 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-09T11:45:10+00:00" "time": "2022-11-03T14:55:06+00:00"
}, },
{ {
"name": "symfony/polyfill-intl-icu", "name": "symfony/polyfill-intl-icu",
"version": "v1.31.0", "version": "v1.27.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git", "url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78" "reference": "a3d9148e2c363588e05abbdd4ee4f971f0a5330c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/a3d9148e2c363588e05abbdd4ee4f971f0a5330c",
"reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", "reference": "a3d9148e2c363588e05abbdd4ee4f971f0a5330c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2" "php": ">=7.1"
}, },
"suggest": { "suggest": {
"ext-intl": "For best performance and support of other locales than \"en\"" "ext-intl": "For best performance and support of other locales than \"en\""
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": { "thanks": {
"url": "https://github.com/symfony/polyfill", "name": "symfony/polyfill",
"name": "symfony/polyfill" "url": "https://github.com/symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@ -3856,7 +3742,7 @@
"shim" "shim"
], ],
"support": { "support": {
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.31.0" "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.27.0"
}, },
"funding": [ "funding": [
{ {
@ -3872,33 +3758,36 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-09T11:45:10+00:00" "time": "2022-11-03T14:55:06+00:00"
}, },
{ {
"name": "symfony/polyfill-intl-normalizer", "name": "symfony/polyfill-intl-normalizer",
"version": "v1.31.0", "version": "v1.27.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "3833d7255cc303546435cb650316bff708a1c75c" "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
"reference": "3833d7255cc303546435cb650316bff708a1c75c", "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2" "php": ">=7.1"
}, },
"suggest": { "suggest": {
"ext-intl": "For best performance" "ext-intl": "For best performance"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": { "thanks": {
"url": "https://github.com/symfony/polyfill", "name": "symfony/polyfill",
"name": "symfony/polyfill" "url": "https://github.com/symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@ -3937,7 +3826,7 @@
"shim" "shim"
], ],
"support": { "support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
}, },
"funding": [ "funding": [
{ {
@ -3953,24 +3842,24 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-09T11:45:10+00:00" "time": "2022-11-03T14:55:06+00:00"
}, },
{ {
"name": "symfony/polyfill-mbstring", "name": "symfony/polyfill-mbstring",
"version": "v1.31.0", "version": "v1.27.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git", "url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2" "php": ">=7.1"
}, },
"provide": { "provide": {
"ext-mbstring": "*" "ext-mbstring": "*"
@ -3980,9 +3869,12 @@
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": { "thanks": {
"url": "https://github.com/symfony/polyfill", "name": "symfony/polyfill",
"name": "symfony/polyfill" "url": "https://github.com/symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@ -4017,7 +3909,7 @@
"shim" "shim"
], ],
"support": { "support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
}, },
"funding": [ "funding": [
{ {
@ -4033,30 +3925,33 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-09T11:45:10+00:00" "time": "2022-11-03T14:55:06+00:00"
}, },
{ {
"name": "symfony/polyfill-php73", "name": "symfony/polyfill-php73",
"version": "v1.31.0", "version": "v1.27.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-php73.git", "url": "https://github.com/symfony/polyfill-php73.git",
"reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
"reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2" "php": ">=7.1"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": { "thanks": {
"url": "https://github.com/symfony/polyfill", "name": "symfony/polyfill",
"name": "symfony/polyfill" "url": "https://github.com/symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@ -4093,7 +3988,7 @@
"shim" "shim"
], ],
"support": { "support": {
"source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0"
}, },
"funding": [ "funding": [
{ {
@ -4109,30 +4004,33 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-09T11:45:10+00:00" "time": "2022-11-03T14:55:06+00:00"
}, },
{ {
"name": "symfony/polyfill-php80", "name": "symfony/polyfill-php80",
"version": "v1.31.0", "version": "v1.27.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-php80.git", "url": "https://github.com/symfony/polyfill-php80.git",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2" "php": ">=7.1"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": { "thanks": {
"url": "https://github.com/symfony/polyfill", "name": "symfony/polyfill",
"name": "symfony/polyfill" "url": "https://github.com/symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@ -4173,7 +4071,7 @@
"shim" "shim"
], ],
"support": { "support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
}, },
"funding": [ "funding": [
{ {
@ -4189,30 +4087,33 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-09T11:45:10+00:00" "time": "2022-11-03T14:55:06+00:00"
}, },
{ {
"name": "symfony/polyfill-php81", "name": "symfony/polyfill-php81",
"version": "v1.31.0", "version": "v1.27.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-php81.git", "url": "https://github.com/symfony/polyfill-php81.git",
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a",
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2" "php": ">=7.1"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": {
"dev-main": "1.27-dev"
},
"thanks": { "thanks": {
"url": "https://github.com/symfony/polyfill", "name": "symfony/polyfill",
"name": "symfony/polyfill" "url": "https://github.com/symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@ -4249,7 +4150,7 @@
"shim" "shim"
], ],
"support": { "support": {
"source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0"
}, },
"funding": [ "funding": [
{ {
@ -4265,20 +4166,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-09T11:45:10+00:00" "time": "2022-11-03T14:55:06+00:00"
}, },
{ {
"name": "symfony/property-access", "name": "symfony/property-access",
"version": "v5.4.45", "version": "v5.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/property-access.git", "url": "https://github.com/symfony/property-access.git",
"reference": "111e7ed617509f1a9139686055d234aad6e388e0" "reference": "0f3e8f40a1d3da90f674b3dd772e4777ccde4273"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/111e7ed617509f1a9139686055d234aad6e388e0", "url": "https://api.github.com/repos/symfony/property-access/zipball/0f3e8f40a1d3da90f674b3dd772e4777ccde4273",
"reference": "111e7ed617509f1a9139686055d234aad6e388e0", "reference": "0f3e8f40a1d3da90f674b3dd772e4777ccde4273",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4326,11 +4227,11 @@
"injection", "injection",
"object", "object",
"property", "property",
"property-path", "property path",
"reflection" "reflection"
], ],
"support": { "support": {
"source": "https://github.com/symfony/property-access/tree/v5.4.45" "source": "https://github.com/symfony/property-access/tree/v5.4.15"
}, },
"funding": [ "funding": [
{ {
@ -4346,20 +4247,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-10-27T07:55:40+00:00"
}, },
{ {
"name": "symfony/property-info", "name": "symfony/property-info",
"version": "v5.4.48", "version": "v5.4.16",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/property-info.git", "url": "https://github.com/symfony/property-info.git",
"reference": "a0396295ad585f95fccd690bc6a281e5bd303902" "reference": "9dd148c4fbfc231fa4bff00def8dc16a2cd89944"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/property-info/zipball/a0396295ad585f95fccd690bc6a281e5bd303902", "url": "https://api.github.com/repos/symfony/property-info/zipball/9dd148c4fbfc231fa4bff00def8dc16a2cd89944",
"reference": "a0396295ad585f95fccd690bc6a281e5bd303902", "reference": "9dd148c4fbfc231fa4bff00def8dc16a2cd89944",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4374,9 +4275,9 @@
"symfony/dependency-injection": "<4.4" "symfony/dependency-injection": "<4.4"
}, },
"require-dev": { "require-dev": {
"doctrine/annotations": "^1.10.4|^2", "doctrine/annotations": "^1.10.4",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"phpstan/phpdoc-parser": "^1.0|^2.0", "phpstan/phpdoc-parser": "^1.0",
"symfony/cache": "^4.4|^5.0|^6.0", "symfony/cache": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/serializer": "^4.4|^5.0|^6.0" "symfony/serializer": "^4.4|^5.0|^6.0"
@ -4421,7 +4322,7 @@
"validator" "validator"
], ],
"support": { "support": {
"source": "https://github.com/symfony/property-info/tree/v5.4.48" "source": "https://github.com/symfony/property-info/tree/v5.4.16"
}, },
"funding": [ "funding": [
{ {
@ -4437,37 +4338,36 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-25T16:14:41+00:00" "time": "2022-11-19T17:41:50+00:00"
}, },
{ {
"name": "symfony/psr-http-message-bridge", "name": "symfony/psr-http-message-bridge",
"version": "v2.3.1", "version": "v2.1.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/psr-http-message-bridge.git", "url": "https://github.com/symfony/psr-http-message-bridge.git",
"reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e" "reference": "a125b93ef378c492e274f217874906fb9babdebb"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/581ca6067eb62640de5ff08ee1ba6850a0ee472e", "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a125b93ef378c492e274f217874906fb9babdebb",
"reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e", "reference": "a125b93ef378c492e274f217874906fb9babdebb",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2.5", "php": ">=7.1",
"psr/http-message": "^1.0 || ^2.0", "psr/http-message": "^1.0",
"symfony/deprecation-contracts": "^2.5 || ^3.0", "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0"
"symfony/http-foundation": "^5.4 || ^6.0"
}, },
"require-dev": { "require-dev": {
"nyholm/psr7": "^1.1", "nyholm/psr7": "^1.1",
"psr/log": "^1.1 || ^2 || ^3", "psr/log": "^1.1 || ^2 || ^3",
"symfony/browser-kit": "^5.4 || ^6.0", "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0",
"symfony/config": "^5.4 || ^6.0", "symfony/config": "^4.4 || ^5.0 || ^6.0",
"symfony/event-dispatcher": "^5.4 || ^6.0", "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0",
"symfony/framework-bundle": "^5.4 || ^6.0", "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0",
"symfony/http-kernel": "^5.4 || ^6.0", "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0",
"symfony/phpunit-bridge": "^6.2" "symfony/phpunit-bridge": "^5.4@dev || ^6.0"
}, },
"suggest": { "suggest": {
"nyholm/psr7": "For a super lightweight PSR-7/17 implementation" "nyholm/psr7": "For a super lightweight PSR-7/17 implementation"
@ -4475,7 +4375,7 @@
"type": "symfony-bridge", "type": "symfony-bridge",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-main": "2.3-dev" "dev-main": "2.1-dev"
} }
}, },
"autoload": { "autoload": {
@ -4510,7 +4410,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/symfony/psr-http-message-bridge/issues", "issues": "https://github.com/symfony/psr-http-message-bridge/issues",
"source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.3.1" "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.4"
}, },
"funding": [ "funding": [
{ {
@ -4526,20 +4426,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-07-26T11:53:26+00:00" "time": "2022-11-28T22:46:34+00:00"
}, },
{ {
"name": "symfony/rate-limiter", "name": "symfony/rate-limiter",
"version": "v5.4.47", "version": "v5.4.11",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/rate-limiter.git", "url": "https://github.com/symfony/rate-limiter.git",
"reference": "c902bf796ca6c9656c3cc8185b53afb9acbb7c72" "reference": "1a3a43eeb498290100e4a1559f4a48be14900bc2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/rate-limiter/zipball/c902bf796ca6c9656c3cc8185b53afb9acbb7c72", "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/1a3a43eeb498290100e4a1559f4a48be14900bc2",
"reference": "c902bf796ca6c9656c3cc8185b53afb9acbb7c72", "reference": "1a3a43eeb498290100e4a1559f4a48be14900bc2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4580,7 +4480,7 @@
"rate-limiter" "rate-limiter"
], ],
"support": { "support": {
"source": "https://github.com/symfony/rate-limiter/tree/v5.4.47" "source": "https://github.com/symfony/rate-limiter/tree/v5.4.11"
}, },
"funding": [ "funding": [
{ {
@ -4596,20 +4496,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-07T11:51:21+00:00" "time": "2022-07-20T13:00:38+00:00"
}, },
{ {
"name": "symfony/routing", "name": "symfony/routing",
"version": "v5.4.48", "version": "v5.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/routing.git", "url": "https://github.com/symfony/routing.git",
"reference": "dd08c19879a9b37ff14fd30dcbdf99a4cf045db1" "reference": "5c9b129efe9abce9470e384bf65d8a7e262eee69"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/dd08c19879a9b37ff14fd30dcbdf99a4cf045db1", "url": "https://api.github.com/repos/symfony/routing/zipball/5c9b129efe9abce9470e384bf65d8a7e262eee69",
"reference": "dd08c19879a9b37ff14fd30dcbdf99a4cf045db1", "reference": "5c9b129efe9abce9470e384bf65d8a7e262eee69",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4624,7 +4524,7 @@
"symfony/yaml": "<4.4" "symfony/yaml": "<4.4"
}, },
"require-dev": { "require-dev": {
"doctrine/annotations": "^1.12|^2", "doctrine/annotations": "^1.12",
"psr/log": "^1|^2|^3", "psr/log": "^1|^2|^3",
"symfony/config": "^5.3|^6.0", "symfony/config": "^5.3|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0",
@ -4670,7 +4570,7 @@
"url" "url"
], ],
"support": { "support": {
"source": "https://github.com/symfony/routing/tree/v5.4.48" "source": "https://github.com/symfony/routing/tree/v5.4.15"
}, },
"funding": [ "funding": [
{ {
@ -4686,20 +4586,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-12T18:20:21+00:00" "time": "2022-10-13T14:10:41+00:00"
}, },
{ {
"name": "symfony/runtime", "name": "symfony/runtime",
"version": "v5.4.46", "version": "v5.4.11",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/runtime.git", "url": "https://github.com/symfony/runtime.git",
"reference": "242b4d773c004fa258e1b412f3f49fc2ac78353a" "reference": "c32ac27a8abebe4e6375cd12a4f78ba78e9c742f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/runtime/zipball/242b4d773c004fa258e1b412f3f49fc2ac78353a", "url": "https://api.github.com/repos/symfony/runtime/zipball/c32ac27a8abebe4e6375cd12a4f78ba78e9c742f",
"reference": "242b4d773c004fa258e1b412f3f49fc2ac78353a", "reference": "c32ac27a8abebe4e6375cd12a4f78ba78e9c742f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4712,7 +4612,7 @@
}, },
"require-dev": { "require-dev": {
"composer/composer": "^1.0.2|^2.0", "composer/composer": "^1.0.2|^2.0",
"symfony/console": "^4.4.30|^5.4.9|^6.0.9", "symfony/console": "^4.4.30|^5.3.7|^6.0",
"symfony/dotenv": "^5.1|^6.0", "symfony/dotenv": "^5.1|^6.0",
"symfony/http-foundation": "^4.4.30|^5.3.7|^6.0", "symfony/http-foundation": "^4.4.30|^5.3.7|^6.0",
"symfony/http-kernel": "^4.4.30|^5.3.7|^6.0" "symfony/http-kernel": "^4.4.30|^5.3.7|^6.0"
@ -4746,11 +4646,8 @@
], ],
"description": "Enables decoupling PHP applications from global state", "description": "Enables decoupling PHP applications from global state",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"keywords": [
"runtime"
],
"support": { "support": {
"source": "https://github.com/symfony/runtime/tree/v5.4.46" "source": "https://github.com/symfony/runtime/tree/v5.4.11"
}, },
"funding": [ "funding": [
{ {
@ -4766,27 +4663,27 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-06T08:58:41+00:00" "time": "2022-06-27T16:58:25+00:00"
}, },
{ {
"name": "symfony/security-bundle", "name": "symfony/security-bundle",
"version": "v5.4.45", "version": "v5.4.11",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/security-bundle.git", "url": "https://github.com/symfony/security-bundle.git",
"reference": "d6081d1b9118f944df90bb77444a8617eba01542" "reference": "86b49feb056b840f2b79a03fcfa2d378d6d34234"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/d6081d1b9118f944df90bb77444a8617eba01542", "url": "https://api.github.com/repos/symfony/security-bundle/zipball/86b49feb056b840f2b79a03fcfa2d378d6d34234",
"reference": "d6081d1b9118f944df90bb77444a8617eba01542", "reference": "86b49feb056b840f2b79a03fcfa2d378d6d34234",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-xml": "*", "ext-xml": "*",
"php": ">=7.2.5", "php": ">=7.2.5",
"symfony/config": "^4.4|^5.0|^6.0", "symfony/config": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^5.4.43|^6.4.11", "symfony/dependency-injection": "^5.3|^6.0",
"symfony/deprecation-contracts": "^2.1|^3", "symfony/deprecation-contracts": "^2.1|^3",
"symfony/event-dispatcher": "^5.1|^6.0", "symfony/event-dispatcher": "^5.1|^6.0",
"symfony/http-foundation": "^5.3|^6.0", "symfony/http-foundation": "^5.3|^6.0",
@ -4796,8 +4693,7 @@
"symfony/security-core": "^5.4|^6.0", "symfony/security-core": "^5.4|^6.0",
"symfony/security-csrf": "^4.4|^5.0|^6.0", "symfony/security-csrf": "^4.4|^5.0|^6.0",
"symfony/security-guard": "^5.3", "symfony/security-guard": "^5.3",
"symfony/security-http": "^5.4.30|^6.3.6", "symfony/security-http": "^5.4|^6.0"
"symfony/service-contracts": "^1.10|^2|^3"
}, },
"conflict": { "conflict": {
"symfony/browser-kit": "<4.4", "symfony/browser-kit": "<4.4",
@ -4807,7 +4703,7 @@
"symfony/twig-bundle": "<4.4" "symfony/twig-bundle": "<4.4"
}, },
"require-dev": { "require-dev": {
"doctrine/annotations": "^1.10.4|^2", "doctrine/annotations": "^1.10.4",
"symfony/asset": "^4.4|^5.0|^6.0", "symfony/asset": "^4.4|^5.0|^6.0",
"symfony/browser-kit": "^4.4|^5.0|^6.0", "symfony/browser-kit": "^4.4|^5.0|^6.0",
"symfony/console": "^4.4|^5.0|^6.0", "symfony/console": "^4.4|^5.0|^6.0",
@ -4853,7 +4749,7 @@
"description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "description": "Provides a tight integration of the Security component into the Symfony full-stack framework",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/security-bundle/tree/v5.4.45" "source": "https://github.com/symfony/security-bundle/tree/v5.4.11"
}, },
"funding": [ "funding": [
{ {
@ -4869,20 +4765,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-07-20T13:00:38+00:00"
}, },
{ {
"name": "symfony/security-core", "name": "symfony/security-core",
"version": "v5.4.48", "version": "v5.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/security-core.git", "url": "https://github.com/symfony/security-core.git",
"reference": "cca947b1a74bdbc21c4d6288a4abb938d9a7eaba" "reference": "4ef922cd626a43b570522cb1616e3d678664c9a0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/security-core/zipball/cca947b1a74bdbc21c4d6288a4abb938d9a7eaba", "url": "https://api.github.com/repos/symfony/security-core/zipball/4ef922cd626a43b570522cb1616e3d678664c9a0",
"reference": "cca947b1a74bdbc21c4d6288a4abb938d9a7eaba", "reference": "4ef922cd626a43b570522cb1616e3d678664c9a0",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4898,7 +4794,6 @@
"symfony/http-foundation": "<5.3", "symfony/http-foundation": "<5.3",
"symfony/ldap": "<4.4", "symfony/ldap": "<4.4",
"symfony/security-guard": "<4.4", "symfony/security-guard": "<4.4",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3",
"symfony/validator": "<5.2" "symfony/validator": "<5.2"
}, },
"require-dev": { "require-dev": {
@ -4910,7 +4805,7 @@
"symfony/expression-language": "^4.4|^5.0|^6.0", "symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/http-foundation": "^5.3|^6.0", "symfony/http-foundation": "^5.3|^6.0",
"symfony/ldap": "^4.4|^5.0|^6.0", "symfony/ldap": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3", "symfony/translation": "^4.4|^5.0|^6.0",
"symfony/validator": "^5.2|^6.0" "symfony/validator": "^5.2|^6.0"
}, },
"suggest": { "suggest": {
@ -4947,7 +4842,7 @@
"description": "Symfony Security Component - Core Library", "description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/security-core/tree/v5.4.48" "source": "https://github.com/symfony/security-core/tree/v5.4.15"
}, },
"funding": [ "funding": [
{ {
@ -4963,25 +4858,24 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-27T08:58:20+00:00" "time": "2022-10-23T10:30:41+00:00"
}, },
{ {
"name": "symfony/security-csrf", "name": "symfony/security-csrf",
"version": "v5.4.45", "version": "v5.4.11",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/security-csrf.git", "url": "https://github.com/symfony/security-csrf.git",
"reference": "28dcafc3220f12264bb2aabe2389a2163458c1f4" "reference": "b97ab244b6dda80abb84a4a236d682871695db4a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/28dcafc3220f12264bb2aabe2389a2163458c1f4", "url": "https://api.github.com/repos/symfony/security-csrf/zipball/b97ab244b6dda80abb84a4a236d682871695db4a",
"reference": "28dcafc3220f12264bb2aabe2389a2163458c1f4", "reference": "b97ab244b6dda80abb84a4a236d682871695db4a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2.5", "php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.16", "symfony/polyfill-php80": "^1.16",
"symfony/security-core": "^4.4|^5.0|^6.0" "symfony/security-core": "^4.4|^5.0|^6.0"
}, },
@ -5020,7 +4914,7 @@
"description": "Symfony Security Component - CSRF Library", "description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/security-csrf/tree/v5.4.45" "source": "https://github.com/symfony/security-csrf/tree/v5.4.11"
}, },
"funding": [ "funding": [
{ {
@ -5036,25 +4930,24 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-07-20T13:00:38+00:00"
}, },
{ {
"name": "symfony/security-guard", "name": "symfony/security-guard",
"version": "v5.4.45", "version": "v5.4.13",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/security-guard.git", "url": "https://github.com/symfony/security-guard.git",
"reference": "f3da3dbec38aaedaf287ffeb4e3a90994af37faa" "reference": "83f647fcdc17aa14908f0e02a302d3d9d0f63fbc"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/security-guard/zipball/f3da3dbec38aaedaf287ffeb4e3a90994af37faa", "url": "https://api.github.com/repos/symfony/security-guard/zipball/83f647fcdc17aa14908f0e02a302d3d9d0f63fbc",
"reference": "f3da3dbec38aaedaf287ffeb4e3a90994af37faa", "reference": "83f647fcdc17aa14908f0e02a302d3d9d0f63fbc",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2.5", "php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.15", "symfony/polyfill-php80": "^1.15",
"symfony/security-core": "^5.0", "symfony/security-core": "^5.0",
"symfony/security-http": "^5.3" "symfony/security-http": "^5.3"
@ -5088,7 +4981,7 @@
"description": "Symfony Security Component - Guard", "description": "Symfony Security Component - Guard",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/security-guard/tree/v5.4.45" "source": "https://github.com/symfony/security-guard/tree/v5.4.13"
}, },
"funding": [ "funding": [
{ {
@ -5104,20 +4997,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-09-28T13:19:49+00:00"
}, },
{ {
"name": "symfony/security-http", "name": "symfony/security-http",
"version": "v5.4.47", "version": "v5.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/security-http.git", "url": "https://github.com/symfony/security-http.git",
"reference": "cde02b002e0447075430e6a84482e38f2fd9268d" "reference": "142d48153a453dbd49e880eef6bc77e4ba162dff"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/security-http/zipball/cde02b002e0447075430e6a84482e38f2fd9268d", "url": "https://api.github.com/repos/symfony/security-http/zipball/142d48153a453dbd49e880eef6bc77e4ba162dff",
"reference": "cde02b002e0447075430e6a84482e38f2fd9268d", "reference": "142d48153a453dbd49e880eef6bc77e4ba162dff",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5128,8 +5021,7 @@
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php80": "^1.16", "symfony/polyfill-php80": "^1.16",
"symfony/property-access": "^4.4|^5.0|^6.0", "symfony/property-access": "^4.4|^5.0|^6.0",
"symfony/security-core": "^5.4.19|~6.0.19|~6.1.11|^6.2.5", "symfony/security-core": "^5.4|^6.0"
"symfony/service-contracts": "^1.10|^2|^3"
}, },
"conflict": { "conflict": {
"symfony/event-dispatcher": "<4.3", "symfony/event-dispatcher": "<4.3",
@ -5174,7 +5066,7 @@
"description": "Symfony Security Component - HTTP Integration", "description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/security-http/tree/v5.4.47" "source": "https://github.com/symfony/security-http/tree/v5.4.15"
}, },
"funding": [ "funding": [
{ {
@ -5190,20 +5082,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-07T14:12:41+00:00" "time": "2022-10-23T10:30:41+00:00"
}, },
{ {
"name": "symfony/service-contracts", "name": "symfony/service-contracts",
"version": "v2.5.4", "version": "v2.5.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/service-contracts.git", "url": "https://github.com/symfony/service-contracts.git",
"reference": "f37b419f7aea2e9abf10abd261832cace12e3300" "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300", "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
"reference": "f37b419f7aea2e9abf10abd261832cace12e3300", "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5219,12 +5111,12 @@
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": { "branch-alias": {
"dev-main": "2.5-dev" "dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@ -5257,7 +5149,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/service-contracts/tree/v2.5.4" "source": "https://github.com/symfony/service-contracts/tree/v2.5.2"
}, },
"funding": [ "funding": [
{ {
@ -5273,20 +5165,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-05-30T19:17:29+00:00"
}, },
{ {
"name": "symfony/string", "name": "symfony/string",
"version": "v5.4.47", "version": "v5.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/string.git", "url": "https://github.com/symfony/string.git",
"reference": "136ca7d72f72b599f2631aca474a4f8e26719799" "reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/136ca7d72f72b599f2631aca474a4f8e26719799", "url": "https://api.github.com/repos/symfony/string/zipball/571334ce9f687e3e6af72db4d3b2a9431e4fd9ed",
"reference": "136ca7d72f72b599f2631aca474a4f8e26719799", "reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5343,7 +5235,7 @@
"utf8" "utf8"
], ],
"support": { "support": {
"source": "https://github.com/symfony/string/tree/v5.4.47" "source": "https://github.com/symfony/string/tree/v5.4.15"
}, },
"funding": [ "funding": [
{ {
@ -5359,20 +5251,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-10T20:33:58+00:00" "time": "2022-10-05T15:16:54+00:00"
}, },
{ {
"name": "symfony/translation", "name": "symfony/translation",
"version": "v5.4.45", "version": "v5.4.14",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/translation.git", "url": "https://github.com/symfony/translation.git",
"reference": "98f26acc99341ca4bab345fb14d7b1d7cb825bed" "reference": "f0ed07675863aa6e3939df8b1bc879450b585cab"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/98f26acc99341ca4bab345fb14d7b1d7cb825bed", "url": "https://api.github.com/repos/symfony/translation/zipball/f0ed07675863aa6e3939df8b1bc879450b585cab",
"reference": "98f26acc99341ca4bab345fb14d7b1d7cb825bed", "reference": "f0ed07675863aa6e3939df8b1bc879450b585cab",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5440,7 +5332,7 @@
"description": "Provides tools to internationalize your application", "description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/translation/tree/v5.4.45" "source": "https://github.com/symfony/translation/tree/v5.4.14"
}, },
"funding": [ "funding": [
{ {
@ -5456,20 +5348,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-10-07T08:01:20+00:00"
}, },
{ {
"name": "symfony/translation-contracts", "name": "symfony/translation-contracts",
"version": "v2.5.4", "version": "v2.5.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/translation-contracts.git", "url": "https://github.com/symfony/translation-contracts.git",
"reference": "450d4172653f38818657022252f9d81be89ee9a8" "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/450d4172653f38818657022252f9d81be89ee9a8", "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
"reference": "450d4172653f38818657022252f9d81be89ee9a8", "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5480,12 +5372,12 @@
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": { "branch-alias": {
"dev-main": "2.5-dev" "dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
} }
}, },
"autoload": { "autoload": {
@ -5518,7 +5410,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.4" "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2"
}, },
"funding": [ "funding": [
{ {
@ -5534,20 +5426,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-06-27T16:58:25+00:00"
}, },
{ {
"name": "symfony/twig-bridge", "name": "symfony/twig-bridge",
"version": "v5.4.48", "version": "v5.4.16",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/twig-bridge.git", "url": "https://github.com/symfony/twig-bridge.git",
"reference": "853a0c9aa40123a9feeb335c865b659d94e49e5d" "reference": "227d5030714c024bf4bc760b5762224070d4288c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/853a0c9aa40123a9feeb335c865b659d94e49e5d", "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/227d5030714c024bf4bc760b5762224070d4288c",
"reference": "853a0c9aa40123a9feeb335c865b659d94e49e5d", "reference": "227d5030714c024bf4bc760b5762224070d4288c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5560,22 +5452,22 @@
"phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0", "phpdocumentor/type-resolver": "<1.4.0",
"symfony/console": "<5.3", "symfony/console": "<5.3",
"symfony/form": "<5.4.21|>=6,<6.2.7", "symfony/form": "<5.3",
"symfony/http-foundation": "<5.3", "symfony/http-foundation": "<5.3",
"symfony/http-kernel": "<4.4", "symfony/http-kernel": "<4.4",
"symfony/translation": "<5.2", "symfony/translation": "<5.2",
"symfony/workflow": "<5.2" "symfony/workflow": "<5.2"
}, },
"require-dev": { "require-dev": {
"doctrine/annotations": "^1.12|^2", "doctrine/annotations": "^1.12",
"egulias/email-validator": "^2.1.10|^3|^4", "egulias/email-validator": "^2.1.10|^3",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"symfony/asset": "^4.4|^5.0|^6.0", "symfony/asset": "^4.4|^5.0|^6.0",
"symfony/console": "^5.3|^6.0", "symfony/console": "^5.3|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/expression-language": "^4.4|^5.0|^6.0", "symfony/expression-language": "^4.4|^5.0|^6.0",
"symfony/finder": "^4.4|^5.0|^6.0", "symfony/finder": "^4.4|^5.0|^6.0",
"symfony/form": "^5.4.21|^6.2.7", "symfony/form": "^5.3|^6.0",
"symfony/http-foundation": "^5.3|^6.0", "symfony/http-foundation": "^5.3|^6.0",
"symfony/http-kernel": "^4.4|^5.0|^6.0", "symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/intl": "^4.4|^5.0|^6.0", "symfony/intl": "^4.4|^5.0|^6.0",
@ -5587,7 +5479,7 @@
"symfony/security-core": "^4.4|^5.0|^6.0", "symfony/security-core": "^4.4|^5.0|^6.0",
"symfony/security-csrf": "^4.4|^5.0|^6.0", "symfony/security-csrf": "^4.4|^5.0|^6.0",
"symfony/security-http": "^4.4|^5.0|^6.0", "symfony/security-http": "^4.4|^5.0|^6.0",
"symfony/serializer": "^5.4.35|~6.3.12|^6.4.3", "symfony/serializer": "^5.2|^6.0",
"symfony/stopwatch": "^4.4|^5.0|^6.0", "symfony/stopwatch": "^4.4|^5.0|^6.0",
"symfony/translation": "^5.2|^6.0", "symfony/translation": "^5.2|^6.0",
"symfony/web-link": "^4.4|^5.0|^6.0", "symfony/web-link": "^4.4|^5.0|^6.0",
@ -5639,7 +5531,7 @@
"description": "Provides integration for Twig with various Symfony components", "description": "Provides integration for Twig with various Symfony components",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/twig-bridge/tree/v5.4.48" "source": "https://github.com/symfony/twig-bridge/tree/v5.4.16"
}, },
"funding": [ "funding": [
{ {
@ -5655,26 +5547,25 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-22T08:19:51+00:00" "time": "2022-11-04T07:37:26+00:00"
}, },
{ {
"name": "symfony/twig-bundle", "name": "symfony/twig-bundle",
"version": "v5.4.45", "version": "v5.4.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/twig-bundle.git", "url": "https://github.com/symfony/twig-bundle.git",
"reference": "e1ca56e1dc7791eb19f0aff71d3d94e6a91cc8f9" "reference": "c992b4474c3a31f3c40a1ca593d213833f91b818"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/e1ca56e1dc7791eb19f0aff71d3d94e6a91cc8f9", "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/c992b4474c3a31f3c40a1ca593d213833f91b818",
"reference": "e1ca56e1dc7791eb19f0aff71d3d94e6a91cc8f9", "reference": "c992b4474c3a31f3c40a1ca593d213833f91b818",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2.5", "php": ">=7.2.5",
"symfony/config": "^4.4|^5.0|^6.0", "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-foundation": "^4.4|^5.0|^6.0",
"symfony/http-kernel": "^5.0|^6.0", "symfony/http-kernel": "^5.0|^6.0",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
@ -5689,7 +5580,7 @@
"symfony/translation": "<5.0" "symfony/translation": "<5.0"
}, },
"require-dev": { "require-dev": {
"doctrine/annotations": "^1.10.4|^2", "doctrine/annotations": "^1.10.4",
"doctrine/cache": "^1.0|^2.0", "doctrine/cache": "^1.0|^2.0",
"symfony/asset": "^4.4|^5.0|^6.0", "symfony/asset": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^5.3|^6.0", "symfony/dependency-injection": "^5.3|^6.0",
@ -5729,7 +5620,7 @@
"description": "Provides a tight integration of Twig into the Symfony full-stack framework", "description": "Provides a tight integration of Twig into the Symfony full-stack framework",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/twig-bundle/tree/v5.4.45" "source": "https://github.com/symfony/twig-bundle/tree/v5.4.8"
}, },
"funding": [ "funding": [
{ {
@ -5745,20 +5636,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-04-03T13:03:10+00:00"
}, },
{ {
"name": "symfony/validator", "name": "symfony/validator",
"version": "v5.4.48", "version": "v5.4.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/validator.git", "url": "https://github.com/symfony/validator.git",
"reference": "883667679d93d6c30f1b7490d669801712d3be2f" "reference": "0fb0c50f18f4517a8ea59d1cc87bff231402a7e3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/883667679d93d6c30f1b7490d669801712d3be2f", "url": "https://api.github.com/repos/symfony/validator/zipball/0fb0c50f18f4517a8ea59d1cc87bff231402a7e3",
"reference": "883667679d93d6c30f1b7490d669801712d3be2f", "reference": "0fb0c50f18f4517a8ea59d1cc87bff231402a7e3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5775,18 +5666,19 @@
"doctrine/annotations": "<1.13", "doctrine/annotations": "<1.13",
"doctrine/cache": "<1.11", "doctrine/cache": "<1.11",
"doctrine/lexer": "<1.1", "doctrine/lexer": "<1.1",
"phpunit/phpunit": "<5.4.3",
"symfony/dependency-injection": "<4.4", "symfony/dependency-injection": "<4.4",
"symfony/expression-language": "<5.1", "symfony/expression-language": "<5.1",
"symfony/http-kernel": "<4.4", "symfony/http-kernel": "<4.4",
"symfony/intl": "<4.4", "symfony/intl": "<4.4",
"symfony/property-info": "<5.3", "symfony/property-info": "<5.3",
"symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3", "symfony/translation": "<4.4",
"symfony/yaml": "<4.4" "symfony/yaml": "<4.4"
}, },
"require-dev": { "require-dev": {
"doctrine/annotations": "^1.13|^2", "doctrine/annotations": "^1.13",
"doctrine/cache": "^1.11|^2.0", "doctrine/cache": "^1.11|^2.0",
"egulias/email-validator": "^2.1.10|^3|^4", "egulias/email-validator": "^2.1.10|^3",
"symfony/cache": "^4.4|^5.0|^6.0", "symfony/cache": "^4.4|^5.0|^6.0",
"symfony/config": "^4.4|^5.0|^6.0", "symfony/config": "^4.4|^5.0|^6.0",
"symfony/console": "^4.4|^5.0|^6.0", "symfony/console": "^4.4|^5.0|^6.0",
@ -5798,9 +5690,9 @@
"symfony/http-kernel": "^4.4|^5.0|^6.0", "symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/intl": "^4.4|^5.0|^6.0", "symfony/intl": "^4.4|^5.0|^6.0",
"symfony/mime": "^4.4|^5.0|^6.0", "symfony/mime": "^4.4|^5.0|^6.0",
"symfony/property-access": "^5.4|^6.0", "symfony/property-access": "^4.4|^5.0|^6.0",
"symfony/property-info": "^5.3|^6.0", "symfony/property-info": "^5.3|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3", "symfony/translation": "^4.4|^5.0|^6.0",
"symfony/yaml": "^4.4|^5.0|^6.0" "symfony/yaml": "^4.4|^5.0|^6.0"
}, },
"suggest": { "suggest": {
@ -5821,8 +5713,7 @@
"Symfony\\Component\\Validator\\": "" "Symfony\\Component\\Validator\\": ""
}, },
"exclude-from-classmap": [ "exclude-from-classmap": [
"/Tests/", "/Tests/"
"/Resources/bin/"
] ]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@ -5842,7 +5733,7 @@
"description": "Provides tools to validate values", "description": "Provides tools to validate values",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/validator/tree/v5.4.48" "source": "https://github.com/symfony/validator/tree/v5.4.15"
}, },
"funding": [ "funding": [
{ {
@ -5858,20 +5749,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-27T08:58:20+00:00" "time": "2022-10-27T08:04:35+00:00"
}, },
{ {
"name": "symfony/var-dumper", "name": "symfony/var-dumper",
"version": "v5.4.48", "version": "v5.4.14",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/var-dumper.git", "url": "https://github.com/symfony/var-dumper.git",
"reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8" "reference": "6894d06145fefebd9a4c7272baa026a1c394a430"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/42f18f170aa86d612c3559cfb3bd11a375df32c8", "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6894d06145fefebd9a4c7272baa026a1c394a430",
"reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8", "reference": "6894d06145fefebd9a4c7272baa026a1c394a430",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5880,12 +5771,12 @@
"symfony/polyfill-php80": "^1.16" "symfony/polyfill-php80": "^1.16"
}, },
"conflict": { "conflict": {
"phpunit/phpunit": "<5.4.3",
"symfony/console": "<4.4" "symfony/console": "<4.4"
}, },
"require-dev": { "require-dev": {
"ext-iconv": "*", "ext-iconv": "*",
"symfony/console": "^4.4|^5.0|^6.0", "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/process": "^4.4|^5.0|^6.0",
"symfony/uid": "^5.1|^6.0", "symfony/uid": "^5.1|^6.0",
"twig/twig": "^2.13|^3.0.4" "twig/twig": "^2.13|^3.0.4"
@ -5931,7 +5822,7 @@
"dump" "dump"
], ],
"support": { "support": {
"source": "https://github.com/symfony/var-dumper/tree/v5.4.48" "source": "https://github.com/symfony/var-dumper/tree/v5.4.14"
}, },
"funding": [ "funding": [
{ {
@ -5947,30 +5838,28 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-08T15:21:10+00:00" "time": "2022-10-07T08:01:20+00:00"
}, },
{ {
"name": "symfony/var-exporter", "name": "symfony/var-exporter",
"version": "v6.4.20", "version": "v5.4.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/var-exporter.git", "url": "https://github.com/symfony/var-exporter.git",
"reference": "998df255e9e6a15a36ae35e9c6cd818c17cf92a2" "reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/998df255e9e6a15a36ae35e9c6cd818c17cf92a2", "url": "https://api.github.com/repos/symfony/var-exporter/zipball/8fc03ee75eeece3d9be1ef47d26d79bea1afb340",
"reference": "998df255e9e6a15a36ae35e9c6cd818c17cf92a2", "reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.5|^3" "symfony/polyfill-php80": "^1.16"
}, },
"require-dev": { "require-dev": {
"symfony/property-access": "^6.4|^7.0", "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0"
"symfony/serializer": "^6.4|^7.0",
"symfony/var-dumper": "^5.4|^6.0|^7.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -6003,12 +5892,10 @@
"export", "export",
"hydrate", "hydrate",
"instantiate", "instantiate",
"lazy-loading",
"proxy",
"serialize" "serialize"
], ],
"support": { "support": {
"source": "https://github.com/symfony/var-exporter/tree/v6.4.20" "source": "https://github.com/symfony/var-exporter/tree/v5.4.10"
}, },
"funding": [ "funding": [
{ {
@ -6024,26 +5911,26 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-03-13T09:55:08+00:00" "time": "2022-05-27T12:56:18+00:00"
}, },
{ {
"name": "symfony/web-profiler-bundle", "name": "symfony/web-profiler-bundle",
"version": "v5.4.48", "version": "v5.4.14",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git", "url": "https://github.com/symfony/web-profiler-bundle.git",
"reference": "4afb0399456b966be92410d2bbd6146cc3ce2174" "reference": "e41ebd5411908bc8afdc848ccf68918ecb243c02"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/4afb0399456b966be92410d2bbd6146cc3ce2174", "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/e41ebd5411908bc8afdc848ccf68918ecb243c02",
"reference": "4afb0399456b966be92410d2bbd6146cc3ce2174", "reference": "e41ebd5411908bc8afdc848ccf68918ecb243c02",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2.5", "php": ">=7.2.5",
"symfony/config": "^4.4|^5.0|^6.0", "symfony/config": "^4.4|^5.0|^6.0",
"symfony/framework-bundle": "^5.3|^6.0,<6.4", "symfony/framework-bundle": "^5.3|^6.0",
"symfony/http-kernel": "^5.3|^6.0", "symfony/http-kernel": "^5.3|^6.0",
"symfony/polyfill-php80": "^1.16", "symfony/polyfill-php80": "^1.16",
"symfony/routing": "^4.4|^5.0|^6.0", "symfony/routing": "^4.4|^5.0|^6.0",
@ -6088,7 +5975,7 @@
"description": "Provides a development tool that gives detailed information about the execution of any request", "description": "Provides a development tool that gives detailed information about the execution of any request",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.48" "source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.14"
}, },
"funding": [ "funding": [
{ {
@ -6104,20 +5991,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-19T09:26:40+00:00" "time": "2022-10-01T21:59:28+00:00"
}, },
{ {
"name": "symfony/webpack-encore-bundle", "name": "symfony/webpack-encore-bundle",
"version": "v1.17.2", "version": "v1.16.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/webpack-encore-bundle.git", "url": "https://github.com/symfony/webpack-encore-bundle.git",
"reference": "471ebbc03072dad6e31840dc317bc634a32785f5" "reference": "bb399930c0299866258b616a74a27b50b94c5d45"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/471ebbc03072dad6e31840dc317bc634a32785f5", "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/bb399930c0299866258b616a74a27b50b94c5d45",
"reference": "471ebbc03072dad6e31840dc317bc634a32785f5", "reference": "bb399930c0299866258b616a74a27b50b94c5d45",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -6139,8 +6026,8 @@
"type": "symfony-bundle", "type": "symfony-bundle",
"extra": { "extra": {
"thanks": { "thanks": {
"url": "https://github.com/symfony/webpack-encore", "name": "symfony/webpack-encore",
"name": "symfony/webpack-encore" "url": "https://github.com/symfony/webpack-encore"
} }
}, },
"autoload": { "autoload": {
@ -6161,7 +6048,7 @@
"description": "Integration with your Symfony app & Webpack Encore!", "description": "Integration with your Symfony app & Webpack Encore!",
"support": { "support": {
"issues": "https://github.com/symfony/webpack-encore-bundle/issues", "issues": "https://github.com/symfony/webpack-encore-bundle/issues",
"source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.17.2" "source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.16.0"
}, },
"funding": [ "funding": [
{ {
@ -6177,20 +6064,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-09-26T14:36:28+00:00" "time": "2022-10-18T15:21:06+00:00"
}, },
{ {
"name": "symfony/yaml", "name": "symfony/yaml",
"version": "v5.4.45", "version": "v5.4.16",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/yaml.git", "url": "https://github.com/symfony/yaml.git",
"reference": "a454d47278cc16a5db371fe73ae66a78a633371e" "reference": "ebd37c71f62d5ec5f6e27de3e06fee492d4c6298"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/a454d47278cc16a5db371fe73ae66a78a633371e", "url": "https://api.github.com/repos/symfony/yaml/zipball/ebd37c71f62d5ec5f6e27de3e06fee492d4c6298",
"reference": "a454d47278cc16a5db371fe73ae66a78a633371e", "reference": "ebd37c71f62d5ec5f6e27de3e06fee492d4c6298",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -6236,7 +6123,7 @@
"description": "Loads and dumps YAML files", "description": "Loads and dumps YAML files",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/yaml/tree/v5.4.45" "source": "https://github.com/symfony/yaml/tree/v5.4.16"
}, },
"funding": [ "funding": [
{ {
@ -6252,41 +6139,38 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:11:13+00:00" "time": "2022-11-25T16:04:03+00:00"
}, },
{ {
"name": "twig/twig", "name": "twig/twig",
"version": "v3.20.0", "version": "v3.4.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/twigphp/Twig.git", "url": "https://github.com/twigphp/Twig.git",
"reference": "3468920399451a384bef53cf7996965f7cd40183" "reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/3468920399451a384bef53cf7996965f7cd40183", "url": "https://api.github.com/repos/twigphp/Twig/zipball/c38fd6b0b7f370c198db91ffd02e23b517426b58",
"reference": "3468920399451a384bef53cf7996965f7cd40183", "reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1.0", "php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8", "symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3" "symfony/polyfill-mbstring": "^1.3"
}, },
"require-dev": { "require-dev": {
"phpstan/phpstan": "^2.0", "psr/container": "^1.0",
"psr/container": "^1.0|^2.0", "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
}, },
"type": "library", "type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.4-dev"
}
},
"autoload": { "autoload": {
"files": [
"src/Resources/core.php",
"src/Resources/debug.php",
"src/Resources/escaper.php",
"src/Resources/string_loader.php"
],
"psr-4": { "psr-4": {
"Twig\\": "src/" "Twig\\": "src/"
} }
@ -6319,7 +6203,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/twigphp/Twig/issues", "issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.20.0" "source": "https://github.com/twigphp/Twig/tree/v3.4.3"
}, },
"funding": [ "funding": [
{ {
@ -6331,93 +6215,13 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-02-13T08:34:43+00:00" "time": "2022-09-28T08:42:51+00:00"
}
],
"packages-dev": [
{
"name": "symfony/debug-bundle",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-bundle.git",
"reference": "653c7629d036ef24ac5de54a157aecdc400d2570"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug-bundle/zipball/653c7629d036ef24ac5de54a157aecdc400d2570",
"reference": "653c7629d036ef24ac5de54a157aecdc400d2570",
"shasum": ""
},
"require": {
"ext-xml": "*",
"php": ">=7.2.5",
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/polyfill-php80": "^1.16",
"symfony/twig-bridge": "^4.4|^5.0|^6.0",
"symfony/var-dumper": "^4.4|^5.0|^6.0"
},
"conflict": {
"symfony/config": "<4.4",
"symfony/dependency-injection": "<5.2"
},
"require-dev": {
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/web-profiler-bundle": "^4.4|^5.0|^6.0"
},
"suggest": {
"symfony/config": "For service container configuration",
"symfony/dependency-injection": "For using as a service from the container"
},
"type": "symfony-bundle",
"autoload": {
"psr-4": {
"Symfony\\Bundle\\DebugBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/debug-bundle/tree/v5.4.45"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-09-25T14:11:13+00:00"
} }
], ],
"packages-dev": [],
"aliases": [], "aliases": [],
"minimum-stability": "stable", "minimum-stability": "stable",
"stability-flags": {}, "stability-flags": [],
"prefer-stable": true, "prefer-stable": true,
"prefer-lowest": false, "prefer-lowest": false,
"platform": { "platform": {
@ -6425,6 +6229,6 @@
"ext-ctype": "*", "ext-ctype": "*",
"ext-iconv": "*" "ext-iconv": "*"
}, },
"platform-dev": {}, "platform-dev": [],
"plugin-api-version": "2.6.0" "plugin-api-version": "2.3.0"
} }

View File

@ -7,5 +7,4 @@ return [
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true],
Sentry\SentryBundle\SentryBundle::class => ['all' => true], Sentry\SentryBundle\SentryBundle::class => ['all' => true],
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true],
]; ];

View File

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

View File

@ -1,5 +0,0 @@
when@dev:
debug:
# Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser.
# See the "server:dump" command to start a new server.
dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%"

View File

@ -12,7 +12,7 @@ framework:
# Enables session support. Note that the session will ONLY be started if you read or write from it. # 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. # Remove or comment this section to explicitly disable session support.
session: session:
handler_id: '%env(REDIS_DSN)%' handler_id: null
cookie_secure: auto cookie_secure: auto
cookie_samesite: lax cookie_samesite: lax
storage_factory_id: session.storage.factory.native storage_factory_id: session.storage.factory.native
@ -25,7 +25,6 @@ framework:
#fragments: true #fragments: true
php_errors: php_errors:
log: true log: true
error_controller: App\Controller\CustomErrorController::show
when@test: when@test:
framework: framework:

View File

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

View File

@ -37,7 +37,6 @@ security:
access_control: access_control:
- { path: ^/login, roles: PUBLIC_ACCESS } - { path: ^/login, roles: PUBLIC_ACCESS }
- { path: ^/connect, roles: ROLE_USER } - { path: ^/connect, roles: ROLE_USER }
- { path: ^/health, roles: PUBLIC_ACCESS }
# - { path: ^/connect, roles: [IS_AUTHENTICATED_FULLY, ROLE_USER] } # - { path: ^/connect, roles: [IS_AUTHENTICATED_FULLY, ROLE_USER] }
when@test: when@test:

View File

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

View File

@ -2,10 +2,6 @@ controllers:
resource: ../../src/Controller/ resource: ../../src/Controller/
type: annotation type: annotation
controllers_flag:
resource: ../../src/Flag/Controller/
type: annotation
kernel: kernel:
resource: ../../src/Kernel.php resource: ../../src/Kernel.php
type: annotation type: annotation

View File

@ -27,7 +27,7 @@ parameters:
locales: '%env(APP_LOCALES)%' locales: '%env(APP_LOCALES)%'
app.supported_locales: ~ app.supported_locales: ~
env(PEPPER): ~ env(PEPPER): ""
pepper: '%env(resolve:PEPPER)%' pepper: '%env(resolve:PEPPER)%'
services: services:
# default configuration for services in *this* file # default configuration for services in *this* file
@ -75,23 +75,3 @@ services:
$securityPattern: '%security_pattern%' $securityPattern: '%security_pattern%'
# add more service definitions when explicit configuration is needed # add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones # please note that last definitions always *replace* previous ones
App\Altcha\Form\AltchaType:
arguments:
$altchaHost: "%env(ALTCHA_HOST)%"
$altchaBaseUrl: "%env(ALTCHA_BASE_URL)%"
$altchaDebug: "%env(bool:ALTCHA_DEBUG)%"
$altchaWorkers: "%env(ALTCHA_WORKERS)%"
$altchaDelay: "%env(ALTCHA_DELAY)%"
$altchaMockError: "%env(bool:ALTCHA_MOCK_ERROR)%"
tags:
- { name: form.type, alias: altcha}
App\Form\LoginType:
arguments:
$altchaEnabled: "%env(bool:ALTCHA_ENABLED)%"
App\Altcha\AltchaValidator:
arguments:
$altchaHost: "%env(ALTCHA_HOST)%"
$altchaBaseUrl: "%env(ALTCHA_BASE_URL)%"

View File

@ -1,7 +1,7 @@
sql_login: sql_login:
login_column_name: email login_column_name: email
password_column_name: password password_column_name: password
salt_column_name: salt salt_column_name: ~
table_name: usager table_name: usager
data_to_fetch: data_to_fetch:
- email - email

View File

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

@ -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
('test1@test.com', '8ad4025044b77ae6a5e3fcf99e53e44b15db9a4ecf468be21cbc6b9fbdae6d9f', 'cesaltestunexemple', 'Locke', 'John'),
('test3@test.com', '504ae1c3e2f5fdaf41f868164dabcef21e17059f5f388b452718a1ce92692c67', 'cesaltestunautreexemple', 'Dupont', 'Henri');
INSERT INTO usager (email, password, lastname, firstname) VALUES
('test4@test.com', '$2a$12$91AHN7WFXieeadvUfZ88mO.9N7oS5adeXbdERnRno9oLAbqqDW4IG', 'Durand', 'Isabelle'),
('test2@test.com', '50626fa21f45a275cea0efff13ff78fd02234cade322da08b7191c7e9150141d', 'Dubois', 'Angela');
GRANT ALL PRIVILEGES ON DATABASE usager TO lasql

View File

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

View File

@ -1,15 +0,0 @@
CREATE TABLE IF NOT EXISTS usager (
email VARCHAR ( 100 ) UNIQUE NOT NULL,
password VARCHAR ( 255 ) NOT NULL,
salt VARCHAR (255),
lastname VARCHAR ( 255 ) NOT NULL,
firstname VARCHAR ( 255 ) NOT NULL
);
INSERT INTO usager (email, password, salt, lastname, firstname) VALUES
/* 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

@ -1,15 +0,0 @@
CREATE TABLE IF NOT EXISTS usager (
email VARCHAR ( 100 ) UNIQUE NOT NULL,
password VARCHAR ( 255 ) NOT NULL,
salt VARCHAR (255),
lastname VARCHAR ( 255 ) NOT NULL,
firstname VARCHAR ( 255 ) NOT NULL
);
INSERT INTO usager (email, password, salt, lastname, firstname) VALUES
/* 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

@ -1,17 +0,0 @@
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} \
php81-pecl-xdebug"
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-base-2024.10.4-stable.1529.b630c69
RUN chown 1000:www-data -R /app

View File

@ -1,18 +0,0 @@
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} \
php81-pecl-xdebug"
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-standalone-2024.10.4-stable.1529.b630c69
RUN chown 1000:www-data -R /app
USER www-data

9819
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -2,12 +2,13 @@
"devDependencies": { "devDependencies": {
"@babel/core": "^7.17.0", "@babel/core": "^7.17.0",
"@babel/preset-env": "^7.16.0", "@babel/preset-env": "^7.16.0",
"@hotwired/stimulus": "^3.0.0",
"@symfony/stimulus-bridge": "^3.2.0",
"@symfony/webpack-encore": "^4.1.2", "@symfony/webpack-encore": "^4.1.2",
"core-js": "^3.23.0", "core-js": "^3.23.0",
"regenerator-runtime": "^0.13.9", "regenerator-runtime": "^0.13.9",
"webpack": "^5.94.0", "webpack": "^5.74.0",
"webpack-cli": "^4.10.0", "webpack-cli": "^4.10.0",
"file-loader": "^6.2.0",
"webpack-notifier": "^1.15.0" "webpack-notifier": "^1.15.0"
}, },
"license": "UNLICENSED", "license": "UNLICENSED",
@ -25,7 +26,6 @@
"jquery": "^3.6.1", "jquery": "^3.6.1",
"postcss-loader": "^7.0.2", "postcss-loader": "^7.0.2",
"sass": "^1.56.2", "sass": "^1.56.2",
"sass-loader": "^13.2.0", "sass-loader": "^13.2.0"
"altcha": "^1.0.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

View File

@ -1 +1 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[524],{28:(e,s,u)=>{u(953)}},e=>{e.O(0,[953],(()=>{return s=28,e(e.s=s);var s}));e.O()}]); (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()}]);

View File

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

View File

@ -1 +1 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[513],{675:(e,s,u)=>{u(336)}},e=>{e.O(0,[336],(()=>{return s=675,e(e.s=s);var s}));e.O()}]); "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

@ -3,7 +3,7 @@
"app": { "app": {
"js": [ "js": [
"/build/app/runtime.js", "/build/app/runtime.js",
"/build/app/953.js", "/build/app/3.js",
"/build/app/app.js" "/build/app/app.js"
], ],
"css": [ "css": [
@ -22,7 +22,7 @@
"bootstrap-js": { "bootstrap-js": {
"js": [ "js": [
"/build/app/runtime.js", "/build/app/runtime.js",
"/build/app/336.js", "/build/app/138.js",
"/build/app/bootstrap-js.js" "/build/app/bootstrap-js.js"
] ]
} }

View File

@ -5,6 +5,6 @@
"build/app/bootstrap-css.js": "/build/app/bootstrap-css.js", "build/app/bootstrap-css.js": "/build/app/bootstrap-css.js",
"build/app/bootstrap-js.js": "/build/app/bootstrap-js.js", "build/app/bootstrap-js.js": "/build/app/bootstrap-js.js",
"build/app/runtime.js": "/build/app/runtime.js", "build/app/runtime.js": "/build/app/runtime.js",
"build/app/336.js": "/build/app/336.js", "build/app/3.js": "/build/app/3.js",
"build/app/953.js": "/build/app/953.js" "build/app/138.js": "/build/app/138.js"
} }

View File

@ -1 +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].call(l.exports,l,l.exports,t),l.exports}t.m=r,e=[],t.O=(r,o,n,l)=>{if(!o){var a=1/0;for(u=0;u<e.length;u++){for(var[o,n,l]=e[u],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(u--,1);var p=n();void 0!==p&&(r=p)}}return r}l=l||0;for(var u=e.length;u>0&&e[u-1][2]>l;u--)e[u]=e[u-1];e[u]=[o,n,l]},t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},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={121:0};t.O.j=r=>0===e[r];var r=(r,o)=>{var n,l,[a,i,f]=o,p=0;if(a.some((r=>0!==e[r]))){for(n in i)t.o(i,n)&&(t.m[n]=i[n]);if(f)var u=f(t)}for(r&&r(o);p<a.length;p++)l=a[p],t.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return t.O(u)},o=self.webpackChunk=self.webpackChunk||[];o.forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o))})()})(); (()=>{"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

@ -3,28 +3,11 @@
"theme": { "theme": {
"js": [ "js": [
"/build/theme/runtime.js", "/build/theme/runtime.js",
"/build/theme/869.js",
"/build/theme/theme.js" "/build/theme/theme.js"
], ],
"css": [ "css": [
"/build/theme/theme.css" "/build/theme/theme.css"
] ]
},
"bootstrap-css": {
"js": [
"/build/theme/runtime.js",
"/build/theme/bootstrap-css.js"
],
"css": [
"/build/theme/bootstrap-css.css"
]
},
"bootstrap-js": {
"js": [
"/build/theme/runtime.js",
"/build/theme/336.js",
"/build/theme/bootstrap-js.js"
]
} }
} }
} }

View File

@ -1,27 +1,5 @@
{ {
"build/theme/theme.css": "/build/theme/theme.css", "build/theme/theme.css": "/build/theme/theme.css",
"build/theme/theme.js": "/build/theme/theme.js", "build/theme/theme.js": "/build/theme/theme.js",
"build/theme/bootstrap-css.css": "/build/theme/bootstrap-css.css", "build/theme/runtime.js": "/build/theme/runtime.js"
"build/theme/bootstrap-css.js": "/build/theme/bootstrap-css.js",
"build/theme/bootstrap-js.js": "/build/theme/bootstrap-js.js",
"build/theme/runtime.js": "/build/theme/runtime.js",
"build/theme/869.js": "/build/theme/869.js",
"build/theme/336.js": "/build/theme/336.js",
"build/theme/images/oswald-regular-webfont.svg": "/build/theme/images/oswald-regular-webfont.03cdd684.svg",
"build/theme/images/oswald-bold-webfont.svg": "/build/theme/images/oswald-bold-webfont.9a1ed0ec.svg",
"build/theme/fonts/oswald-regular-webfont.ttf": "/build/theme/fonts/oswald-regular-webfont.c8502113.ttf",
"build/theme/fonts/oswald-bold-webfont.ttf": "/build/theme/fonts/oswald-bold-webfont.53c08c7b.ttf",
"build/theme/fonts/oswald-regular-webfont.woff": "/build/theme/fonts/oswald-regular-webfont.9e86c28e.woff",
"build/theme/fonts/oswald-bold-webfont.woff": "/build/theme/fonts/oswald-bold-webfont.fec2b538.woff",
"build/theme/fonts/oswald-regular-webfont.eot": "/build/theme/fonts/oswald-regular-webfont.edc12574.eot",
"build/theme/fonts/oswald-bold-webfont.eot": "/build/theme/fonts/oswald-bold-webfont.8f109a09.eot",
"build/theme/fonts/oswald-regular-webfont.woff2": "/build/theme/fonts/oswald-regular-webfont.009d0db9.woff2",
"build/theme/fonts/oswald-bold-webfont.woff2": "/build/theme/fonts/oswald-bold-webfont.6747e0fa.woff2",
"build/theme/images/franceconnect-fr-hover.png": "/build/theme/images/franceconnect-fr-hover.c0795590.png",
"build/theme/images/franceconnect-en-hover.png": "/build/theme/images/franceconnect-en-hover.bcc1e2f3.png",
"build/theme/images/MSEConnect-hover-fr.png": "/build/theme/images/MSEConnect-hover-fr.81c82e3e.png",
"build/theme/images/MSEConnect-hover-en.png": "/build/theme/images/MSEConnect-hover-en.32a6d3eb.png",
"build/theme/images/instagram-hover.png": "/build/theme/images/instagram-hover.5965b4e3.png",
"build/theme/images/x-hover.png": "/build/theme/images/x-hover.759179b7.png",
"build/theme/images/facebook-hover.png": "/build/theme/images/facebook-hover.4a346412.png"
} }

View File

@ -1 +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](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,f=0;f<t.length;f++)(!1&i||l>=i)&&Object.keys(o.O).every((e=>o.O[e](t[f])))?t.splice(f--,1):(a=!1,i<l&&(l=i));if(a){e.splice(s--,1);var u=n();void 0!==u&&(r=u)}}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.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={121:0};o.O.j=r=>0===e[r];var r=(r,t)=>{var n,i,[l,a,f]=t,u=0;if(l.some((r=>0!==e[r]))){for(n in a)o.o(a,n)&&(o.m[n]=a[n]);if(f)var s=f(o)}for(r&&r(t);u<l.length;u++)i=l[u],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))})()})(); (()=>{"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))})()})();

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[694],{5895:(e,t,n)=>{n(8953),n(8476),n(5086),n(9389),n(557),n(9693);document.addEventListener("DOMContentLoaded",(function(){[].forEach.call(document.querySelectorAll(".language-change"),(function(e){e.addEventListener("click",(function(t){t.preventDefault();var n=e.getAttribute("data-lang");return function(e){for(var t=e+"=",n=document.cookie.split(";"),r=0;r<n.length;r++){for(var a=n[r];" "==a.charAt(0);)a=a.substring(1,a.length);if(0==a.indexOf(t))return a.substring(t.length,a.length)}return null}("mselang")!=n&&(function(e,t,n){var r="";if(n){var a=new Date;a.setTime(a.getTime()+24*n*60*60*1e3),r="; expires="+a.toUTCString()}for(var o=window.location.hostname.split(".").reverse(),i="",l=o.length-1;l>=0;l--)i+=o[l],l>0&&(i+=".");document.cookie=e+"="+(t||"")+r+"; path=/; domain="+i}("mselang",n,!1),location.reload()),!1}))}));var e=document.forms.login,t=document.getElementById("loader");e.addEventListener("submit",(function(e){t.style.display="flex"}))}))}},e=>{e.O(0,[869],(()=>{return t=5895,e(e.s=t);var t}));e.O()}]); (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)}]);

201
readme.md
View File

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

View File

@ -1,48 +0,0 @@
<?php
namespace App\Altcha;
use App\Altcha\Form\AltchaModel;
use Symfony\Component\Form\DataTransformerInterface;
class AltchaTransformer implements DataTransformerInterface
{
/**
* {@inheritDoc}
*/
public function reverseTransform($value): AltchaModel
{
if (empty($value)) {
return new AltchaModel();
}
$decodedValue = base64_decode($value);
$data = json_decode($decodedValue);
$model = new AltchaModel();
foreach ($data as $property => $value) {
$model->{$property} = $value;
}
return $model;
}
/**
* {@inheritDoc}
*/
public function transform($value): string
{
if (empty($value)) {
return '';
}
$json = json_encode($value);
if (false === $json) {
return '';
}
return base64_encode($json);
}
}

View File

@ -1,52 +0,0 @@
<?php
namespace App\Altcha;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class AltchaValidator
{
public function __construct(
private readonly string $altchaHost,
private readonly string $altchaBaseUrl,
private readonly HttpClientInterface $httpClient,
private readonly TranslatorInterface $translator
) {
}
public function validate(FormEvent $formEvent): void
{
$form = $formEvent->getForm();
$data = $form->getData();
$response = $this->httpClient->request(
'POST',
$this->altchaHost.$this->altchaBaseUrl.'/verify',
[
'body' => json_encode($data),
'headers' => [
'Content-Type' => 'application/json',
],
],
);
if (Response::HTTP_OK !== $response->getStatusCode()) {
$form->addError(new FormError($this->translator->trans('altcha.validator.server_validation_error', [], 'form')));
return;
}
$content = $response->getContent();
$parsedResponse = json_decode($content);
if (true !== $parsedResponse->success) {
$form->addError(new FormError($this->translator->trans('altcha.validator.server_validation_error', [], 'form')));
return;
}
}
}

View File

@ -1,39 +0,0 @@
<?php
namespace App\Altcha\Form;
use Symfony\Component\Validator\Constraints as Assert;
class AltchaModel
{
/**
* @Assert\NotBlank()
* @Assert\Regex("/^(SHA-1|SHA-256|SHA-512)$/")
*/
public string $algorithm;
/**
* @Assert\NotBlank()
*/
public string $challenge;
/**
* @Assert\NotBlank()
*/
public string $salt;
/**
* @Assert\NotBlank()
*/
public int $number;
/**
* @Assert\NotBlank()
*/
public string $signature;
/**
* @Assert\NotBlank()
*/
public int $took;
}

View File

@ -1,81 +0,0 @@
<?php
namespace App\Altcha\Form;
use App\Altcha\AltchaTransformer;
use App\Altcha\AltchaValidator;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class AltchaType extends AbstractType
{
public function __construct(
private readonly string $altchaHost,
private readonly string $altchaBaseUrl,
private readonly string $altchaDebug,
private readonly string $altchaWorkers,
private readonly string $altchaDelay,
private readonly string $altchaMockError,
private readonly AltchaValidator $altchaValidator,
private readonly HttpClientInterface $httpClient,
private readonly TranslatorInterface $translator
) {
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->addModelTransformer(new AltchaTransformer());
$builder->addEventListener(FormEvents::POST_SUBMIT, [$this->altchaValidator, 'validate']);
}
public function buildView(FormView $view, FormInterface $form, array $options)
{
$translations = [
'label' => $this->translator->trans('altcha.widget.label', [], 'form'),
'verified' => $this->translator->trans('altcha.widget.verified', [], 'form'),
'verifying' => $this->translator->trans('altcha.widget.verifying', [], 'form'),
'waitAlert' => $this->translator->trans('altcha.widget.waitalert', [], 'form'),
'error' => $this->translator->trans('altcha.widget.error', [], 'form'),
'expired' => $this->translator->trans('altcha.widget.expired', [], 'form'),
];
$view->vars['translations'] = json_encode($translations);
$view->vars['challengeJson'] = $this->requestChallenge();
$view->vars['debug'] = $this->altchaDebug;
$view->vars['workers'] = $this->altchaWorkers;
$view->vars['delay'] = $this->altchaDelay;
$view->vars['mockError'] = $this->altchaMockError;
}
private function requestChallenge(): string
{
$resp = $this->httpClient->request('GET', $this->altchaHost.$this->altchaBaseUrl.'/request');
if (Response::HTTP_OK === $resp->getStatusCode()) {
return $resp->getContent();
}
return '';
}
public function getParent(): string
{
return TextType::class;
}
public function getName(): string
{
return $this->getBlockPrefix();
}
public function getBlockPrefix(): string
{
return 'altcha';
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,37 +0,0 @@
<?php
namespace App\Flag\Controller;
use App\Flag\FlagAccessor;
use App\Flag\FlagEnum;
use Psr\Cache\CacheItemPoolInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Exception\JsonException;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class FlagController extends AbstractController
{
#[Route('/flag/{flagName}', name: 'flag_update', methods: ['PUT'])]
public function updateFlag(CacheItemPoolInterface $cache, Request $request, string $flagName): Response
{
try {
FlagEnum::from($flagName);
$flagValue = \json_decode($request->getContent(), true, flags: JSON_THROW_ON_ERROR)[FlagAccessor::FLAG_VALUE];
} catch (\ValueError $e) {
throw new \InvalidArgumentException('invalid flag name provided');
} catch (JsonException $e) {
throw new \InvalidArgumentException('invalid json format');
}
$flag = $cache->getItem($flagName);
$flag->set($flagValue);
$cache->save($flag);
return new JsonResponse(
[\sprintf('flag %s has been %s.', $flagName, $flagValue ? 'enabled' : 'disabled')]
);
}
}

View File

@ -1,26 +0,0 @@
<?php
namespace App\Flag;
use Psr\Cache\CacheItemPoolInterface;
class FlagAccessor
{
public const FLAG_VALUE = 'flagValue';
public function __construct(
private readonly CacheItemPoolInterface $cache
) {
}
public function isFlagEnabled(FlagEnum $flagName, bool $fallbackValue = false): bool
{
$flagValue = $this->cache->getItem($flagName->value)->get();
if (null === $flagValue) {
return $fallbackValue;
}
return (bool) $flagValue;
}
}

View File

@ -1,8 +0,0 @@
<?php
namespace App\Flag;
enum FlagEnum: string
{
case Altcha = 'altcha';
}

View File

@ -2,10 +2,8 @@
namespace App\Form; namespace App\Form;
use App\Altcha\Form\AltchaType;
use App\Flag\FlagAccessor;
use App\Flag\FlagEnum;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType; use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
@ -13,12 +11,6 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
class LoginType extends AbstractType class LoginType extends AbstractType
{ {
public function __construct(
private readonly FlagAccessor $flagAccessor,
private readonly bool $altchaEnabled
) {
}
public function buildForm(FormBuilderInterface $builder, array $options): void public function buildForm(FormBuilderInterface $builder, array $options): void
{ {
$builder $builder
@ -30,15 +22,12 @@ class LoginType extends AbstractType
'translation_domain' => 'form', 'translation_domain' => 'form',
'label' => 'form.label.password', 'label' => 'form.label.password',
]) ])
; ->add('_remember_me', CheckboxType::class, [
'required' => false,
if ($this->flagAccessor->isFlagEnabled(FlagEnum::Altcha, $this->altchaEnabled)) {
$builder->add('altcha', AltchaType::class, [
'translation_domain' => 'form', 'translation_domain' => 'form',
'label' => 'altcha.widget.title', 'label' => 'form.label.remember_me',
'required' => true, ])
]); ;
}
} }
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void

View File

@ -8,28 +8,25 @@ use Symfony\Contracts\HttpClient\ResponseInterface;
class Client class Client
{ {
private const MAX_RETRY = 3; protected $client;
private const SLEEP_TIME = [
5,
500,
5000,
];
public function __construct( protected $hydraAdminBaseUrl;
private readonly HttpClientInterface $client,
private readonly string $hydraAdminBaseUrl public function __construct(HttpClientInterface $client, string $hydraAdminBaseUrl)
) { {
$this->client = $client;
$this->hydraAdminBaseUrl = $hydraAdminBaseUrl;
} }
public function fetchLoginRequestInfo(string $loginChallenge): ResponseInterface public function fetchLoginRequestInfo(string $loginChallenge): ResponseInterface
{ {
$response = $this->client->request( $response = $this->client->request(
'GET', 'GET',
$this->hydraAdminBaseUrl.'/oauth2/auth/requests/login', $this->hydraAdminBaseUrl . '/oauth2/auth/requests/login',
[ [
'query' => [ 'query' => [
'login_challenge' => $loginChallenge, 'login_challenge' => $loginChallenge,
], ]
] ]
); );
@ -38,6 +35,7 @@ class Client
throw new InvalidChallengeException(); throw new InvalidChallengeException();
} }
return $response; return $response;
} }
@ -45,11 +43,11 @@ class Client
{ {
$response = $this->client->request( $response = $this->client->request(
'GET', 'GET',
$this->hydraAdminBaseUrl.'/oauth2/auth/requests/logout', $this->hydraAdminBaseUrl . '/oauth2/auth/requests/logout',
[ [
'query' => [ 'query' => [
'logout_challenge' => $logoutChallenge, 'logout_challenge' => $logoutChallenge,
], ]
] ]
); );
@ -58,38 +56,27 @@ class Client
throw new InvalidChallengeException(); throw new InvalidChallengeException();
} }
return $response; return $response;
} }
public function fetchConsentRequestInfo(string $consentChallenge): ResponseInterface public function fetchConsentRequestInfo(string $consentChallenge): ResponseInterface
{ {
$attempt = 0;
while ($attempt < self::MAX_RETRY) {
$response = $this->client->request( $response = $this->client->request(
'GET', 'GET',
$this->hydraAdminBaseUrl.'/oauth2/auth/requests/consent', $this->hydraAdminBaseUrl . '/oauth2/auth/requests/consent',
[ [
'query' => [ 'query' => [
'consent_challenge' => $consentChallenge, 'consent_challenge' => $consentChallenge,
], ]
] ]
); );
$status = $response->getStatusCode(); switch ($response->getStatusCode()) {
if (503 === $status) {
++$attempt;
usleep(1000 * self::SLEEP_TIME[$attempt] + rand(1, 5) * 1000);
continue;
}
switch ($status) {
case 404: case 404:
throw new InvalidChallengeException(); throw new InvalidChallengeException();
} }
break;
}
if (self::MAX_RETRY === $attempt) {
throw new \Exception(sprintf('Fetch consent a rencontré une erreur %s après %s tentatives', $response->getStatusCode(), self::MAX_RETRY));
}
return $response; return $response;
} }
@ -98,13 +85,13 @@ class Client
{ {
$response = $this->client->request( $response = $this->client->request(
'PUT', 'PUT',
$this->hydraAdminBaseUrl.'/oauth2/auth/requests/login/accept', $this->hydraAdminBaseUrl . '/oauth2/auth/requests/login/accept',
[ [
'query' => [ 'query' => [
'login_challenge' => $loginChallenge, 'login_challenge' => $loginChallenge,
], ],
'headers' => [ 'headers' => [
'Content-Type' => 'application/json', 'Content-Type' => 'application/json'
], ],
'body' => json_encode($payload), 'body' => json_encode($payload),
] ]
@ -117,13 +104,13 @@ class Client
{ {
$response = $this->client->request( $response = $this->client->request(
'PUT', 'PUT',
$this->hydraAdminBaseUrl.'/oauth2/auth/requests/consent/accept', $this->hydraAdminBaseUrl . '/oauth2/auth/requests/consent/accept',
[ [
'query' => [ 'query' => [
'consent_challenge' => $consentChallenge, 'consent_challenge' => $consentChallenge,
], ],
'headers' => [ 'headers' => [
'Content-Type' => 'application/json', 'Content-Type' => 'application/json'
], ],
'body' => json_encode($payload), 'body' => json_encode($payload),
] ]
@ -136,13 +123,13 @@ class Client
{ {
$response = $this->client->request( $response = $this->client->request(
'PUT', 'PUT',
$this->hydraAdminBaseUrl.'/oauth2/auth/requests/logout/accept', $this->hydraAdminBaseUrl . '/oauth2/auth/requests/logout/accept',
[ [
'query' => [ 'query' => [
'logout_challenge' => $logoutChallenge, 'logout_challenge' => $logoutChallenge,
], ],
'headers' => [ 'headers' => [
'Content-Type' => 'application/json', 'Content-Type' => 'application/json'
], ],
] ]
); );

View File

@ -2,7 +2,6 @@
namespace App\Hydra; namespace App\Hydra;
use App\Entity\User;
use App\Hydra\Exception\InvalidChallengeException; use App\Hydra\Exception\InvalidChallengeException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\Exception\BadRequestException;
@ -10,14 +9,13 @@ use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class HydraService extends AbstractController class HydraService extends AbstractController
{ {
private SessionInterface $session; public SessionInterface $session;
private Client $client; public Client $client;
private TokenStorageInterface $tokenStorage; public TokenStorageInterface $tokenStorage;
private string $baseUrl; public string $baseUrl;
public function __construct(Client $client, SessionInterface $session, TokenStorageInterface $tokenStorage, string $baseUrl) public function __construct(Client $client, SessionInterface $session, TokenStorageInterface $tokenStorage, string $baseUrl)
{ {
@ -27,7 +25,7 @@ class HydraService extends AbstractController
$this->baseUrl = $baseUrl; $this->baseUrl = $baseUrl;
} }
public function handleLoginRequest(Request $request): RedirectResponse public function handleLoginRequest(Request $request)
{ {
$challenge = $request->query->get('login_challenge'); $challenge = $request->query->get('login_challenge');
// S'il n'y a pas de challenge, on déclenche une bad request // S'il n'y a pas de challenge, on déclenche une bad request
@ -39,7 +37,7 @@ class HydraService extends AbstractController
$loginRequestInfo = $res->toArray(); $loginRequestInfo = $res->toArray();
if (200 !== $res->getStatusCode()) { if (200 !== $res->getStatusCode()) {
$this->session->clear(); $this->session->clear();
throw new BadRequestException(); throw new BadRequestException('pas de code 200');
} }
// 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 // 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']); $this->session->set('challenge', $loginRequestInfo['challenge']);
@ -47,7 +45,7 @@ class HydraService extends AbstractController
return new RedirectResponse($this->baseUrl.'/connect/login-accept'); return new RedirectResponse($this->baseUrl.'/connect/login-accept');
} }
public function handleConsentRequest(Request $request): RedirectResponse public function handleConsentRequest(Request $request)
{ {
$challenge = $request->query->get('consent_challenge'); $challenge = $request->query->get('consent_challenge');
if (!$challenge) { if (!$challenge) {
@ -55,10 +53,8 @@ class HydraService extends AbstractController
} }
$consentRequestInfo = $this->client->fetchConsentRequestInfo($challenge)->toArray(); $consentRequestInfo = $this->client->fetchConsentRequestInfo($challenge)->toArray();
/** @var User */
$user = $this->getUser(); $user = $this->getUser();
if (!$user instanceof User) {
throw new AccessDeniedException('Utilisateur non autorisé.');
}
$consentAcceptResponse = $this->client->acceptConsentRequest($consentRequestInfo['challenge'], [ $consentAcceptResponse = $this->client->acceptConsentRequest($consentRequestInfo['challenge'], [
'grant_scope' => $consentRequestInfo['requested_scope'], 'grant_scope' => $consentRequestInfo['requested_scope'],
'session' => [ 'session' => [
@ -69,7 +65,7 @@ class HydraService extends AbstractController
return new RedirectResponse($consentAcceptResponse['redirect_to']); return new RedirectResponse($consentAcceptResponse['redirect_to']);
} }
public function handleLogoutRequest(Request $request): RedirectResponse public function handleLogoutRequest(Request $request)
{ {
$logoutChallenge = $request->get('logout_challenge'); $logoutChallenge = $request->get('logout_challenge');
if (empty($logoutChallenge)) { if (empty($logoutChallenge)) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -5,40 +5,36 @@ namespace App\Security;
use App\Entity\User; use App\Entity\User;
use App\Security\Hasher\PasswordEncoder; use App\Security\Hasher\PasswordEncoder;
use App\Service\SQLLoginService; use App\Service\SQLLoginService;
use App\SQLLogin\Exception\DataToFetchConfigurationException;
use App\SQLLogin\Exception\EmptyResultException;
use App\SQLLogin\Exception\InvalidSQLPasswordException; use App\SQLLogin\Exception\InvalidSQLPasswordException;
use App\SQLLogin\Exception\SecurityPatternConfigurationException;
use App\SQLLogin\SQLLoginRequest;
use PDOException; use PDOException;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\Security; use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator; use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator;
use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge; 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\Badge\UserBadge;
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport; use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport;
class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
{ {
public const LOGIN_ROUTE = 'app_login'; public const LOGIN_ROUTE = 'app_login';
public const ERROR_LOGIN = 'error_login'; public const ERROR_LOGIN = 'error_login';
public const TECHNICAL_ERROR = 'technical_error'; public const ERROR_PASSWORD = 'error_password';
public const ERROR_SQL_LOGIN = 'error_sql_login';
private string $baseUrl; protected string $baseUrl;
private SQLLoginService $sqlLoginService;
private PasswordEncoder $passwordHasher;
public function __construct( public function __construct(string $baseUrl, SQLLoginService $sqlLoginService, PasswordEncoder $passwordHasher)
string $baseUrl, {
private SQLLoginService $sqlLoginService,
private PasswordEncoder $passwordHasher,
private SQLLoginRequest $sqlLoginRequest
) {
$this->baseUrl = $baseUrl; $this->baseUrl = $baseUrl;
$this->sqlLoginService = $sqlLoginService; $this->sqlLoginService = $sqlLoginService;
$this->passwordHasher = $passwordHasher; $this->passwordHasher = $passwordHasher;
$this->sqlLoginRequest = $sqlLoginRequest;
} }
/** /**
@ -51,57 +47,38 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
return self::LOGIN_ROUTE === $request->attributes->get('_route') && $request->isMethod('POST'); return self::LOGIN_ROUTE === $request->attributes->get('_route') && $request->isMethod('POST');
} }
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey): RedirectResponse public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey): ?Response
{ {
return new RedirectResponse($this->baseUrl.'/connect/login-accept'); return new RedirectResponse($this->baseUrl.'/connect/login-accept');
} }
public function onAuthenticationFailure(Request $request, AuthenticationException $exception): RedirectResponse public function onAuthenticationFailure(Request $request, AuthenticationException $exception): Response
{ {
$request->getSession()->set(Security::AUTHENTICATION_ERROR, $exception); $request->getSession()->set(Security::AUTHENTICATION_ERROR, $exception);
return new RedirectResponse($this->baseUrl.'/login'); return new RedirectResponse($this->baseUrl.'/login');
} }
public function authenticate(Request $request): SelfValidatingPassport public function authenticate(Request $request): Passport
{ {
$form = $request->request->get('login'); $form = $request->request->get('login');
$login = $form['login']; $login = $form['login'];
$plaintextPassword = $form['password']; $plaintextPassword = $form['password'];
$rememberMe = isset($form['_remember_me']) ? true : false; $rememberMe = isset($form['_remember_me']) ? true : false;
$session = $request->getSession();
try { try {
$datas = $this->sqlLoginService->fetchPasswordAndDatas($login); // requête préparée
} catch (EmptyResultException $e) { list($remoteHashedPassword, $remoteSalt) = $this->sqlLoginService->fetchPassword($login);
$session->set(self::ERROR_LOGIN, true); } catch (PDOException $e) {
throw new AuthenticationException(); $request->getSession()->set(self::ERROR_SQL_LOGIN, true);
} catch (DataToFetchConfigurationException|PDOException $e) {
\Sentry\captureException($e);
$session->set(self::TECHNICAL_ERROR, true);
throw new AuthenticationException(); throw new AuthenticationException();
} }
$remoteHashedPassword = $datas[$this->sqlLoginRequest->getPasswordColumnName()]; if ($remoteHashedPassword) {
unset($datas[$this->sqlLoginRequest->getPasswordColumnName()]);
$remoteSalt = null;
if ($this->sqlLoginRequest->getSaltColumnName() && isset($datas[$this->sqlLoginRequest->getSaltColumnName()])) {
$remoteSalt = $datas[$this->sqlLoginRequest->getSaltColumnName()];
unset($datas[$this->sqlLoginRequest->getSaltColumnName()]);
}
if (null === $remoteHashedPassword) {
$remoteHashedPassword = '';
}
try { try {
// Comparaison remote hash et hash du input password + salt // Comparaison remote hash et hash du input password + salt
$this->passwordHasher->verify($remoteHashedPassword, $plaintextPassword, $remoteSalt); $this->passwordHasher->verify($remoteHashedPassword, $plaintextPassword, $remoteSalt);
} catch (InvalidSQLPasswordException $e) { $attributes = $this->sqlLoginService->fetchDatas($login);
$session->set(self::ERROR_LOGIN, true); $user = new User($login, $remoteHashedPassword, $attributes, $rememberMe);
throw new AuthenticationException();
} catch (SecurityPatternConfigurationException $e) {
\Sentry\captureException($e);
$session->set(self::TECHNICAL_ERROR, true);
throw new AuthenticationException();
}
$user = new User($login, $remoteHashedPassword, $datas, $rememberMe);
$loader = function (string $userIdentifier) use ($user) { $loader = function (string $userIdentifier) use ($user) {
return $user->getLogin() == $userIdentifier ? $user : null; return $user->getLogin() == $userIdentifier ? $user : null;
}; };
@ -112,6 +89,16 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
$passport->setAttribute('attributes', $user->getAttributes()); $passport->setAttribute('attributes', $user->getAttributes());
return $passport; return $passport;
} catch (InvalidSQLPasswordException $e) {
$request->getSession()->set(self::ERROR_PASSWORD, true);
throw new AuthenticationException();
} catch (PDOException $e) {
$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 protected function getLoginUrl(Request $request): string

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