Compare commits

..

24 Commits

Author SHA1 Message Date
945a558565 Merge pull request 'remove altcha feature flag for security' (#53) from issue-4543-bis into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #53
Reviewed-by: Matthieu Lamalle <mlamalle@cadoles.com>
2025-04-15 10:07:13 +02:00
79337efef0 feat(altcha): remove feature flag for security
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Cadoles/hydra-sql/pipeline/pr-develop This commit is unstable
2025-04-14 16:33:12 +02:00
303b0279f8 Merge pull request 'mse#4543 - Add altcha to login form and its feature flag to disable it' (#52) from 4543-add-altcha-to-login into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #52
Reviewed-by: Matthieu Lamalle <mlamalle@cadoles.com>
2025-04-10 16:12:21 +02:00
12523398f6 feat(altcha): add altcha validation layer to login
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
2025-04-10 16:01:22 +02:00
1cb5ae6bc3 feat(altcha): add altcha and update dependencies
Some checks failed
Cadoles/hydra-sql/pipeline/head There was a failure building this commit
2025-03-24 13:51:37 +01:00
7239d841d4 Merge pull request 'ANO - Suppresion du lower sur la colonne mail de la requête suite au login, traitement du lwoer en PHP' (#51) from fix-lower-mail into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #51
2025-03-07 14:15:40 +01:00
a5d5a18190 fix(mail): suppresion du lower sur la colonne mail de la requête suite au login, traitement du lwoer en PHP
Some checks are pending
Cadoles/hydra-sql/pipeline/head Build started...
Cadoles/hydra-sql/pipeline/pr-develop Build started...
2025-03-07 14:01:40 +01:00
075be9b0df Merge pull request 'recherche login lower dans requête de connexion' (#48) from issue-47 into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #48
2024-11-06 11:13:10 +01:00
4e4c5d8e7b recherche login lower dans requête de connexion
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
Cadoles/hydra-sql/pipeline/head This commit is unstable
2024-11-06 10:22:48 +01:00
7032787d8c Merge pull request 'fix login sql : ajout d'un retry sur le login, suppression des options' (#45) from retour-43 into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit was not built
Reviewed-on: #45
2024-10-14 10:40:12 +02:00
999e708ff7 modification gestion des exceptions
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
2024-10-11 15:09:52 +02:00
cb8361e7d1 optimisation appel pdo, retry consent
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
2024-10-11 13:25:21 +02:00
e3f406a8bb fix resultat null vaut login inconnu
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
2024-10-10 16:32:46 +02:00
d6d9e81df6 fix login sql : ajout d'un retry sur le login, suppression des options
Some checks failed
Cadoles/hydra-sql/pipeline/head This commit is unstable
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
2024-10-10 12:01:15 +02:00
8e56433216 Merge pull request 'feat: ajout du packet xdebug à l'image' (#42) from xdebug into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #42
2024-10-10 10:26:21 +02:00
19178bbe3b fix typo
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
2024-10-10 10:25:34 +02:00
14668150cb Merge pull request 'modification requete de fetch à la bdd #43' (#44) from issue-43 into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit was not built
Reviewed-on: #44
Reviewed-by: Matthieu Lamalle <mlamalle@cadoles.com>
2024-10-10 10:01:29 +02:00
0903151f27 chore (authenticator) #43 : fix isset variable
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
2024-10-09 11:57:10 +02:00
f378751f7a chore (maj) #43 : ajout package debug, révision docker-compose pour environnement standalone
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
Cadoles/hydra-sql/pipeline/head This commit is unstable
2024-10-08 14:38:19 +02:00
d707a91694 chore (login) #43 : remaniement connexion sql, passage à 1 requête au lieu de 2 pour performances 2024-10-08 14:36:12 +02:00
f39ab1626e feat: ajout du packet xdebug à l'image
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
Cadoles/hydra-sql/pipeline/head This commit is unstable
2024-10-07 11:22:17 +02:00
fe4d683c20 Merge pull request 'fix code quality, typage, php-csfixer' (#41) from fix-code-quality into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Reviewed-on: #41
Reviewed-by: Matthieu Lamalle <mlamalle@cadoles.com>
2024-09-24 13:00:50 +02:00
f36a675d22 fix code quality, typage, php-csfixer
Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
Cadoles/hydra-sql/pipeline/head This commit is unstable
2024-09-24 11:47:52 +02:00
27f957124b Merge pull request 'chore (fetch datas) #39 : fermeture connexion sql après login$' (#40) from issue-39 into develop
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit was not built
Reviewed-on: #40
2024-09-24 10:37:15 +02:00
66 changed files with 6691 additions and 3047 deletions

9
.env
View File

@ -41,3 +41,12 @@ LOCK_DSN=flock
SENTRY_DSN=
###< 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

1
.gitignore vendored
View File

@ -21,6 +21,7 @@ composer.phar
/tools
/.trivy
.mktools/
.php-cs-fixer.cache
###> symfony/framework-bundle ###
/.env.local

1
.nvmrc Normal file
View File

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

View File

@ -5,6 +5,9 @@ IMAGES := $(foreach file, $(wildcard $(IMAGES_DIR)/*), $(basename $(notdir $(fil
TRIVY_ARGS ?=
php-cs-fixer:
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
build-image: $(foreach image, $(IMAGES), build-image-$(image))
build-image-%:

View File

@ -8,5 +8,4 @@
// any CSS you import will output into a single css file (app.css in this case)
import './styles/app.scss';
// start the Stimulus application
import './bootstrap';
import 'altcha';

11
assets/bootstrap.js vendored
View File

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

View File

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

View File

@ -1,16 +0,0 @@
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';
}
}

722
assets/styles/theme.css Normal file
View File

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

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

52
assets/theme.js Normal file
View File

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

@ -78,5 +78,8 @@
"allow-contrib": true,
"require": "5.4.*"
}
},
"require-dev": {
"symfony/debug-bundle": "5.4.*"
}
}

1000
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "7d46fa52cba3dcb28f7d339d548030e9",
"content-hash": "203398b3a4f3ff689ff3341c02460f23",
"packages": [
{
"name": "clue/stream-filter",
@ -74,16 +74,16 @@
},
{
"name": "doctrine/annotations",
"version": "1.14.3",
"version": "1.14.4",
"source": {
"type": "git",
"url": "https://github.com/doctrine/annotations.git",
"reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af"
"reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
"reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
"url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915",
"reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915",
"shasum": ""
},
"require": {
@ -94,11 +94,11 @@
},
"require-dev": {
"doctrine/cache": "^1.11 || ^2.0",
"doctrine/coding-standard": "^9 || ^10",
"phpstan/phpstan": "~1.4.10 || ^1.8.0",
"doctrine/coding-standard": "^9 || ^12",
"phpstan/phpstan": "~1.4.10 || ^1.10.28",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"symfony/cache": "^4.4 || ^5.4 || ^6",
"vimeo/psalm": "^4.10"
"symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7",
"vimeo/psalm": "^4.30 || ^5.14"
},
"suggest": {
"php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
@ -144,35 +144,36 @@
],
"support": {
"issues": "https://github.com/doctrine/annotations/issues",
"source": "https://github.com/doctrine/annotations/tree/1.14.3"
"source": "https://github.com/doctrine/annotations/tree/1.14.4"
},
"time": "2023-02-01T09:20:38+00:00"
"time": "2024-09-05T10:15:52+00:00"
},
{
"name": "doctrine/deprecations",
"version": "1.1.3",
"version": "1.1.5",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
"reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
"reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
"reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
"reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"conflict": {
"phpunit/phpunit": "<=7.5 || >=13"
},
"require-dev": {
"doctrine/coding-standard": "^9",
"phpstan/phpstan": "1.4.10 || 1.10.15",
"phpstan/phpstan-phpunit": "^1.0",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psalm/plugin-phpunit": "0.18.4",
"psr/log": "^1 || ^2 || ^3",
"vimeo/psalm": "4.30.0 || 5.12.0"
"doctrine/coding-standard": "^9 || ^12 || ^13",
"phpstan/phpstan": "1.4.10 || 2.1.11",
"phpstan/phpstan-phpunit": "^1.0 || ^2",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
"psr/log": "^1 || ^2 || ^3"
},
"suggest": {
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
@ -180,7 +181,7 @@
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
"Doctrine\\Deprecations\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -191,9 +192,9 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
"source": "https://github.com/doctrine/deprecations/tree/1.1.3"
"source": "https://github.com/doctrine/deprecations/tree/1.1.5"
},
"time": "2024-01-30T19:34:25+00:00"
"time": "2025-04-07T20:06:18+00:00"
},
{
"name": "doctrine/lexer",
@ -275,16 +276,16 @@
},
{
"name": "guzzlehttp/promises",
"version": "2.0.3",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8"
"reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8",
"reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8",
"url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c",
"reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c",
"shasum": ""
},
"require": {
@ -338,7 +339,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/2.0.3"
"source": "https://github.com/guzzle/promises/tree/2.2.0"
},
"funding": [
{
@ -354,20 +355,20 @@
"type": "tidelift"
}
],
"time": "2024-07-18T10:29:17+00:00"
"time": "2025-03-27T13:27:01+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "2.7.0",
"version": "2.7.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
"reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
"reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16",
"reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16",
"shasum": ""
},
"require": {
@ -454,7 +455,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.7.0"
"source": "https://github.com/guzzle/psr7/tree/2.7.1"
},
"funding": [
{
@ -470,7 +471,7 @@
"type": "tidelift"
}
],
"time": "2024-07-18T11:15:46+00:00"
"time": "2025-03-27T12:30:47+00:00"
},
{
"name": "http-interop/http-factory-guzzle",
@ -532,28 +533,29 @@
},
{
"name": "jean85/pretty-package-versions",
"version": "2.0.6",
"version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/Jean85/pretty-package-versions.git",
"reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4"
"reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4",
"reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4",
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a",
"reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2.0.0",
"php": "^7.1|^8.0"
"composer-runtime-api": "^2.1.0",
"php": "^7.4|^8.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.2",
"jean85/composer-provided-replaced-stub-package": "^1.0",
"phpstan/phpstan": "^1.4",
"phpunit/phpunit": "^7.5|^8.5|^9.4",
"vimeo/psalm": "^4.3"
"phpstan/phpstan": "^2.0",
"phpunit/phpunit": "^7.5|^8.5|^9.6",
"rector/rector": "^2.0",
"vimeo/psalm": "^4.3 || ^5.0"
},
"type": "library",
"extra": {
@ -585,22 +587,22 @@
],
"support": {
"issues": "https://github.com/Jean85/pretty-package-versions/issues",
"source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6"
"source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1"
},
"time": "2024-03-08T09:58:59+00:00"
"time": "2025-03-19T14:43:43+00:00"
},
{
"name": "php-http/client-common",
"version": "2.7.1",
"version": "2.7.2",
"source": {
"type": "git",
"url": "https://github.com/php-http/client-common.git",
"reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612"
"reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/client-common/zipball/1e19c059b0e4d5f717bf5d524d616165aeab0612",
"reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612",
"url": "https://api.github.com/repos/php-http/client-common/zipball/0cfe9858ab9d3b213041b947c881d5b19ceeca46",
"reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46",
"shasum": ""
},
"require": {
@ -654,22 +656,22 @@
],
"support": {
"issues": "https://github.com/php-http/client-common/issues",
"source": "https://github.com/php-http/client-common/tree/2.7.1"
"source": "https://github.com/php-http/client-common/tree/2.7.2"
},
"time": "2023-11-30T10:31:25+00:00"
"time": "2024-09-24T06:21:48+00:00"
},
{
"name": "php-http/discovery",
"version": "1.19.4",
"version": "1.20.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/discovery.git",
"reference": "0700efda8d7526335132360167315fdab3aeb599"
"reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/discovery/zipball/0700efda8d7526335132360167315fdab3aeb599",
"reference": "0700efda8d7526335132360167315fdab3aeb599",
"url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d",
"reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d",
"shasum": ""
},
"require": {
@ -733,22 +735,22 @@
],
"support": {
"issues": "https://github.com/php-http/discovery/issues",
"source": "https://github.com/php-http/discovery/tree/1.19.4"
"source": "https://github.com/php-http/discovery/tree/1.20.0"
},
"time": "2024-03-29T13:00:05+00:00"
"time": "2024-10-02T11:20:13+00:00"
},
{
"name": "php-http/httplug",
"version": "2.4.0",
"version": "2.4.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/httplug.git",
"reference": "625ad742c360c8ac580fcc647a1541d29e257f67"
"reference": "5cad731844891a4c282f3f3e1b582c46839d22f4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67",
"reference": "625ad742c360c8ac580fcc647a1541d29e257f67",
"url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4",
"reference": "5cad731844891a4c282f3f3e1b582c46839d22f4",
"shasum": ""
},
"require": {
@ -790,22 +792,22 @@
],
"support": {
"issues": "https://github.com/php-http/httplug/issues",
"source": "https://github.com/php-http/httplug/tree/2.4.0"
"source": "https://github.com/php-http/httplug/tree/2.4.1"
},
"time": "2023-04-14T15:10:03+00:00"
"time": "2024-09-23T11:39:58+00:00"
},
{
"name": "php-http/message",
"version": "1.16.1",
"version": "1.16.2",
"source": {
"type": "git",
"url": "https://github.com/php-http/message.git",
"reference": "5997f3289332c699fa2545c427826272498a2088"
"reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/message/zipball/5997f3289332c699fa2545c427826272498a2088",
"reference": "5997f3289332c699fa2545c427826272498a2088",
"url": "https://api.github.com/repos/php-http/message/zipball/06dd5e8562f84e641bf929bfe699ee0f5ce8080a",
"reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a",
"shasum": ""
},
"require": {
@ -859,9 +861,9 @@
],
"support": {
"issues": "https://github.com/php-http/message/issues",
"source": "https://github.com/php-http/message/tree/1.16.1"
"source": "https://github.com/php-http/message/tree/1.16.2"
},
"time": "2024-03-07T13:22:09+00:00"
"time": "2024-10-02T11:34:13+00:00"
},
{
"name": "php-http/message-factory",
@ -972,16 +974,16 @@
},
{
"name": "predis/predis",
"version": "v2.2.2",
"version": "v2.3.0",
"source": {
"type": "git",
"url": "https://github.com/predis/predis.git",
"reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1"
"reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/predis/predis/zipball/b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1",
"reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1",
"url": "https://api.github.com/repos/predis/predis/zipball/bac46bfdb78cd6e9c7926c697012aae740cb9ec9",
"reference": "bac46bfdb78cd6e9c7926c697012aae740cb9ec9",
"shasum": ""
},
"require": {
@ -990,7 +992,7 @@
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.3",
"phpstan/phpstan": "^1.9",
"phpunit/phpunit": "^8.0 || ~9.4.4"
"phpunit/phpunit": "^8.0 || ^9.4"
},
"suggest": {
"ext-relay": "Faster connection with in-memory caching (>=0.6.2)"
@ -1021,7 +1023,7 @@
],
"support": {
"issues": "https://github.com/predis/predis/issues",
"source": "https://github.com/predis/predis/tree/v2.2.2"
"source": "https://github.com/predis/predis/tree/v2.3.0"
},
"funding": [
{
@ -1029,7 +1031,7 @@
"type": "github"
}
],
"time": "2023-09-13T16:42:03+00:00"
"time": "2024-11-21T20:00:02+00:00"
},
{
"name": "psr/cache",
@ -1652,9 +1654,9 @@
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"releases/3.2.x": "3.2.x-dev",
"releases/1.x": "1.x-dev",
"releases/2.x": "2.x-dev",
"releases/1.x": "1.x-dev"
"releases/3.2.x": "3.2.x-dev"
}
},
"autoload": {
@ -1731,16 +1733,16 @@
},
{
"name": "symfony/asset",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/asset.git",
"reference": "e5aa241b4914257164b39c3c2678b2c41b7671e3"
"reference": "b7a18eaff1d717c321b4f13403413f8815bf9cb0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/asset/zipball/e5aa241b4914257164b39c3c2678b2c41b7671e3",
"reference": "e5aa241b4914257164b39c3c2678b2c41b7671e3",
"url": "https://api.github.com/repos/symfony/asset/zipball/b7a18eaff1d717c321b4f13403413f8815bf9cb0",
"reference": "b7a18eaff1d717c321b4f13403413f8815bf9cb0",
"shasum": ""
},
"require": {
@ -1785,7 +1787,7 @@
"description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/asset/tree/v5.4.40"
"source": "https://github.com/symfony/asset/tree/v5.4.45"
},
"funding": [
{
@ -1801,20 +1803,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-10-22T13:05:35+00:00"
},
{
"name": "symfony/cache",
"version": "v5.4.40",
"version": "v5.4.46",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
"reference": "89005bc368ca02ed0433c592e4d27670d0844a66"
"reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache/zipball/89005bc368ca02ed0433c592e4d27670d0844a66",
"reference": "89005bc368ca02ed0433c592e4d27670d0844a66",
"url": "https://api.github.com/repos/symfony/cache/zipball/0fe08ee32cec2748fbfea10c52d3ee02049e0f6b",
"reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b",
"shasum": ""
},
"require": {
@ -1882,7 +1884,7 @@
"psr6"
],
"support": {
"source": "https://github.com/symfony/cache/tree/v5.4.40"
"source": "https://github.com/symfony/cache/tree/v5.4.46"
},
"funding": [
{
@ -1898,20 +1900,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-11-04T11:43:55+00:00"
},
{
"name": "symfony/cache-contracts",
"version": "v2.5.3",
"version": "v2.5.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache-contracts.git",
"reference": "fee6db04d913094e2fb55ff8e7db5685a8134463"
"reference": "517c3a3619dadfa6952c4651767fcadffb4df65e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/fee6db04d913094e2fb55ff8e7db5685a8134463",
"reference": "fee6db04d913094e2fb55ff8e7db5685a8134463",
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/517c3a3619dadfa6952c4651767fcadffb4df65e",
"reference": "517c3a3619dadfa6952c4651767fcadffb4df65e",
"shasum": ""
},
"require": {
@ -1923,12 +1925,12 @@
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@ -1961,7 +1963,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/cache-contracts/tree/v2.5.3"
"source": "https://github.com/symfony/cache-contracts/tree/v2.5.4"
},
"funding": [
{
@ -1977,20 +1979,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/config",
"version": "v5.4.40",
"version": "v5.4.46",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
"reference": "d4e1db78421163b98dd9971d247fd0df4a57ee5e"
"reference": "977c88a02d7d3f16904a81907531b19666a08e78"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/d4e1db78421163b98dd9971d247fd0df4a57ee5e",
"reference": "d4e1db78421163b98dd9971d247fd0df4a57ee5e",
"url": "https://api.github.com/repos/symfony/config/zipball/977c88a02d7d3f16904a81907531b19666a08e78",
"reference": "977c88a02d7d3f16904a81907531b19666a08e78",
"shasum": ""
},
"require": {
@ -2040,7 +2042,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/config/tree/v5.4.40"
"source": "https://github.com/symfony/config/tree/v5.4.46"
},
"funding": [
{
@ -2056,20 +2058,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-10-30T07:58:02+00:00"
},
{
"name": "symfony/console",
"version": "v5.4.41",
"version": "v5.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "6473d441a913cb997123b59ff2dbe3d1cf9e11ba"
"reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/6473d441a913cb997123b59ff2dbe3d1cf9e11ba",
"reference": "6473d441a913cb997123b59ff2dbe3d1cf9e11ba",
"url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed",
"reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed",
"shasum": ""
},
"require": {
@ -2139,7 +2141,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v5.4.41"
"source": "https://github.com/symfony/console/tree/v5.4.47"
},
"funding": [
{
@ -2155,20 +2157,20 @@
"type": "tidelift"
}
],
"time": "2024-06-28T07:48:55+00:00"
"time": "2024-11-06T11:30:55+00:00"
},
{
"name": "symfony/dependency-injection",
"version": "v5.4.40",
"version": "v5.4.48",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "408b33326496030c201b8051b003e9e8cdb2efc9"
"reference": "e5ca16dee39ef7d63e552ff0bf0a2526a1142c92"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/408b33326496030c201b8051b003e9e8cdb2efc9",
"reference": "408b33326496030c201b8051b003e9e8cdb2efc9",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e5ca16dee39ef7d63e552ff0bf0a2526a1142c92",
"reference": "e5ca16dee39ef7d63e552ff0bf0a2526a1142c92",
"shasum": ""
},
"require": {
@ -2228,7 +2230,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.40"
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.48"
},
"funding": [
{
@ -2244,20 +2246,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-11-20T10:51:57+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v3.5.0",
"version": "v3.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
"reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
"reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
"shasum": ""
},
"require": {
@ -2265,12 +2267,12 @@
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@ -2295,7 +2297,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
},
"funding": [
{
@ -2311,20 +2313,20 @@
"type": "tidelift"
}
],
"time": "2024-04-18T09:32:20+00:00"
"time": "2024-09-25T14:20:29+00:00"
},
{
"name": "symfony/dotenv",
"version": "v5.4.40",
"version": "v5.4.48",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
"reference": "3052dbf22f71e47f6ef7a5efa6aaedfe871ba35d"
"reference": "08013403089c8a126c968179179b817a552841ab"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/3052dbf22f71e47f6ef7a5efa6aaedfe871ba35d",
"reference": "3052dbf22f71e47f6ef7a5efa6aaedfe871ba35d",
"url": "https://api.github.com/repos/symfony/dotenv/zipball/08013403089c8a126c968179179b817a552841ab",
"reference": "08013403089c8a126c968179179b817a552841ab",
"shasum": ""
},
"require": {
@ -2366,7 +2368,7 @@
"environment"
],
"support": {
"source": "https://github.com/symfony/dotenv/tree/v5.4.40"
"source": "https://github.com/symfony/dotenv/tree/v5.4.48"
},
"funding": [
{
@ -2382,20 +2384,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-11-27T09:33:00+00:00"
},
{
"name": "symfony/error-handler",
"version": "v5.4.41",
"version": "v5.4.46",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "c25da5cc2de4e6f96b3a0a2813050355a20dd0e1"
"reference": "d19ede7a2cafb386be9486c580649d0f9e3d0363"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/c25da5cc2de4e6f96b3a0a2813050355a20dd0e1",
"reference": "c25da5cc2de4e6f96b3a0a2813050355a20dd0e1",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/d19ede7a2cafb386be9486c580649d0f9e3d0363",
"reference": "d19ede7a2cafb386be9486c580649d0f9e3d0363",
"shasum": ""
},
"require": {
@ -2437,7 +2439,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/error-handler/tree/v5.4.41"
"source": "https://github.com/symfony/error-handler/tree/v5.4.46"
},
"funding": [
{
@ -2453,20 +2455,20 @@
"type": "tidelift"
}
],
"time": "2024-06-09T18:59:35+00:00"
"time": "2024-11-05T14:17:06+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "a54e2a8a114065f31020d6a89ede83e34c3b27a4"
"reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a54e2a8a114065f31020d6a89ede83e34c3b27a4",
"reference": "a54e2a8a114065f31020d6a89ede83e34c3b27a4",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/72982eb416f61003e9bb6e91f8b3213600dcf9e9",
"reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9",
"shasum": ""
},
"require": {
@ -2522,7 +2524,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.40"
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.45"
},
"funding": [
{
@ -2538,20 +2540,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
"version": "v3.5.0",
"version": "v3.5.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
"reference": "8f93aec25d41b72493c6ddff14e916177c9efc50"
"reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50",
"reference": "8f93aec25d41b72493c6ddff14e916177c9efc50",
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f",
"reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f",
"shasum": ""
},
"require": {
@ -2560,12 +2562,12 @@
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@ -2598,7 +2600,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0"
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1"
},
"funding": [
{
@ -2614,20 +2616,20 @@
"type": "tidelift"
}
],
"time": "2024-04-18T09:32:20+00:00"
"time": "2024-09-25T14:20:29+00:00"
},
{
"name": "symfony/expression-language",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/expression-language.git",
"reference": "77670d1e74086dc8d941a18f97097bbf988f2840"
"reference": "a784b66edc4c151eb05076d04707906ee2c209a9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/expression-language/zipball/77670d1e74086dc8d941a18f97097bbf988f2840",
"reference": "77670d1e74086dc8d941a18f97097bbf988f2840",
"url": "https://api.github.com/repos/symfony/expression-language/zipball/a784b66edc4c151eb05076d04707906ee2c209a9",
"reference": "a784b66edc4c151eb05076d04707906ee2c209a9",
"shasum": ""
},
"require": {
@ -2661,7 +2663,7 @@
"description": "Provides an engine that can compile and evaluate expressions",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/expression-language/tree/v5.4.40"
"source": "https://github.com/symfony/expression-language/tree/v5.4.45"
},
"funding": [
{
@ -2677,20 +2679,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-10-04T14:55:40+00:00"
},
{
"name": "symfony/filesystem",
"version": "v5.4.41",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "6d29dd9340b372fa603f04e6df4dd76bb808591e"
"reference": "57c8294ed37d4a055b77057827c67f9558c95c54"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/6d29dd9340b372fa603f04e6df4dd76bb808591e",
"reference": "6d29dd9340b372fa603f04e6df4dd76bb808591e",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54",
"reference": "57c8294ed37d4a055b77057827c67f9558c95c54",
"shasum": ""
},
"require": {
@ -2728,7 +2730,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v5.4.41"
"source": "https://github.com/symfony/filesystem/tree/v5.4.45"
},
"funding": [
{
@ -2744,20 +2746,20 @@
"type": "tidelift"
}
],
"time": "2024-06-28T09:36:24+00:00"
"time": "2024-10-22T13:05:35+00:00"
},
{
"name": "symfony/finder",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "f51cff4687547641c7d8180d74932ab40b2205ce"
"reference": "63741784cd7b9967975eec610b256eed3ede022b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/f51cff4687547641c7d8180d74932ab40b2205ce",
"reference": "f51cff4687547641c7d8180d74932ab40b2205ce",
"url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b",
"reference": "63741784cd7b9967975eec610b256eed3ede022b",
"shasum": ""
},
"require": {
@ -2791,7 +2793,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v5.4.40"
"source": "https://github.com/symfony/finder/tree/v5.4.45"
},
"funding": [
{
@ -2807,26 +2809,29 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-09-28T13:32:08+00:00"
},
{
"name": "symfony/flex",
"version": "v2.4.5",
"version": "v2.5.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
"reference": "b0a405f40614c9f584b489d54f91091817b0e26e"
"reference": "8ce1acd9842abe0e9b4c4a0bd3f259859516c018"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/flex/zipball/b0a405f40614c9f584b489d54f91091817b0e26e",
"reference": "b0a405f40614c9f584b489d54f91091817b0e26e",
"url": "https://api.github.com/repos/symfony/flex/zipball/8ce1acd9842abe0e9b4c4a0bd3f259859516c018",
"reference": "8ce1acd9842abe0e9b4c4a0bd3f259859516c018",
"shasum": ""
},
"require": {
"composer-plugin-api": "^2.1",
"php": ">=8.0"
},
"conflict": {
"composer/semver": "<1.7.2"
},
"require-dev": {
"composer/composer": "^2.1",
"symfony/dotenv": "^5.4|^6.0",
@ -2856,7 +2861,7 @@
"description": "Composer plugin for Symfony",
"support": {
"issues": "https://github.com/symfony/flex/issues",
"source": "https://github.com/symfony/flex/tree/v2.4.5"
"source": "https://github.com/symfony/flex/tree/v2.5.0"
},
"funding": [
{
@ -2872,20 +2877,20 @@
"type": "tidelift"
}
],
"time": "2024-03-02T08:16:47+00:00"
"time": "2025-03-03T07:50:46+00:00"
},
{
"name": "symfony/form",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
"reference": "ff45013def0a3a692e84010095e8ee5fe9a9fa43"
"reference": "c1974a723cdee8a273cb49ce13fada5c1667706a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/form/zipball/ff45013def0a3a692e84010095e8ee5fe9a9fa43",
"reference": "ff45013def0a3a692e84010095e8ee5fe9a9fa43",
"url": "https://api.github.com/repos/symfony/form/zipball/c1974a723cdee8a273cb49ce13fada5c1667706a",
"reference": "c1974a723cdee8a273cb49ce13fada5c1667706a",
"shasum": ""
},
"require": {
@ -2958,7 +2963,7 @@
"description": "Allows to easily create, process and reuse HTML forms",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/form/tree/v5.4.40"
"source": "https://github.com/symfony/form/tree/v5.4.45"
},
"funding": [
{
@ -2974,20 +2979,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-10-08T07:27:17+00:00"
},
{
"name": "symfony/framework-bundle",
"version": "v5.4.41",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
"reference": "18b84194424511fe541fc7962553ae423e4553c7"
"reference": "3d70f14176422d4d8ee400b6acae4e21f7c25ca2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/18b84194424511fe541fc7962553ae423e4553c7",
"reference": "18b84194424511fe541fc7962553ae423e4553c7",
"url": "https://api.github.com/repos/symfony/framework-bundle/zipball/3d70f14176422d4d8ee400b6acae4e21f7c25ca2",
"reference": "3d70f14176422d4d8ee400b6acae4e21f7c25ca2",
"shasum": ""
},
"require": {
@ -2995,7 +3000,7 @@
"php": ">=7.2.5",
"symfony/cache": "^5.2|^6.0",
"symfony/config": "^5.3|^6.0",
"symfony/dependency-injection": "^5.4.5|^6.0.5",
"symfony/dependency-injection": "^5.4.44|^6.0.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/error-handler": "^4.4.1|^5.0.1|^6.0",
"symfony/event-dispatcher": "^5.1|^6.0",
@ -3026,6 +3031,7 @@
"symfony/mime": "<4.4",
"symfony/property-access": "<5.3",
"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/serializer": "<5.2",
"symfony/service-contracts": ">=3.0",
@ -3108,7 +3114,7 @@
"description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/framework-bundle/tree/v5.4.41"
"source": "https://github.com/symfony/framework-bundle/tree/v5.4.45"
},
"funding": [
{
@ -3124,27 +3130,27 @@
"type": "tidelift"
}
],
"time": "2024-06-14T09:52:52+00:00"
"time": "2024-10-22T13:05:35+00:00"
},
{
"name": "symfony/http-client",
"version": "v5.4.41",
"version": "v5.4.49",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "87ca825717928d178de8a3458f163100925fb675"
"reference": "d77d8e212cde7b5c4a64142bf431522f19487c28"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/87ca825717928d178de8a3458f163100925fb675",
"reference": "87ca825717928d178de8a3458f163100925fb675",
"url": "https://api.github.com/repos/symfony/http-client/zipball/d77d8e212cde7b5c4a64142bf431522f19487c28",
"reference": "d77d8e212cde7b5c4a64142bf431522f19487c28",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/http-client-contracts": "^2.5.3",
"symfony/http-client-contracts": "^2.5.4",
"symfony/polyfill-php73": "^1.11",
"symfony/polyfill-php80": "^1.16",
"symfony/service-contracts": "^1.0|^2|^3"
@ -3199,7 +3205,7 @@
"http"
],
"support": {
"source": "https://github.com/symfony/http-client/tree/v5.4.41"
"source": "https://github.com/symfony/http-client/tree/v5.4.49"
},
"funding": [
{
@ -3215,20 +3221,20 @@
"type": "tidelift"
}
],
"time": "2024-06-28T07:25:22+00:00"
"time": "2024-11-28T08:37:04+00:00"
},
{
"name": "symfony/http-client-contracts",
"version": "v2.5.3",
"version": "v2.5.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client-contracts.git",
"reference": "e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1"
"reference": "48ef1d0a082885877b664332b9427662065a360c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1",
"reference": "e5cc97c2b4a4db0ba26bebc154f1426e3fd1d2f1",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/48ef1d0a082885877b664332b9427662065a360c",
"reference": "48ef1d0a082885877b664332b9427662065a360c",
"shasum": ""
},
"require": {
@ -3239,12 +3245,12 @@
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@ -3277,7 +3283,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/http-client-contracts/tree/v2.5.3"
"source": "https://github.com/symfony/http-client-contracts/tree/v2.5.5"
},
"funding": [
{
@ -3293,20 +3299,20 @@
"type": "tidelift"
}
],
"time": "2024-03-26T19:42:53+00:00"
"time": "2024-11-28T08:37:04+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v5.4.40",
"version": "v5.4.48",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "cf4893ca4eca3fac4ae06da1590afdbbb4217847"
"reference": "3f38b8af283b830e1363acd79e5bc3412d055341"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/cf4893ca4eca3fac4ae06da1590afdbbb4217847",
"reference": "cf4893ca4eca3fac4ae06da1590afdbbb4217847",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/3f38b8af283b830e1363acd79e5bc3412d055341",
"reference": "3f38b8af283b830e1363acd79e5bc3412d055341",
"shasum": ""
},
"require": {
@ -3353,7 +3359,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v5.4.40"
"source": "https://github.com/symfony/http-foundation/tree/v5.4.48"
},
"funding": [
{
@ -3369,20 +3375,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-11-13T18:58:02+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v5.4.41",
"version": "v5.4.48",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "aad4078e1210343b7cd5acb803c02f8b02f002b2"
"reference": "c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/aad4078e1210343b7cd5acb803c02f8b02f002b2",
"reference": "aad4078e1210343b7cd5acb803c02f8b02f002b2",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0",
"reference": "c2dbfc92b851404567160d1ecf3fb7d9b7bde9b0",
"shasum": ""
},
"require": {
@ -3466,7 +3472,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-kernel/tree/v5.4.41"
"source": "https://github.com/symfony/http-kernel/tree/v5.4.48"
},
"funding": [
{
@ -3482,20 +3488,20 @@
"type": "tidelift"
}
],
"time": "2024-06-28T11:42:41+00:00"
"time": "2024-11-27T12:43:17+00:00"
},
{
"name": "symfony/lock",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/lock.git",
"reference": "d96955c9919fa8609b193ba76e9f527776b70176"
"reference": "f85ebc5346a2f0e4f9e347e9154922a6d4665c65"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/lock/zipball/d96955c9919fa8609b193ba76e9f527776b70176",
"reference": "d96955c9919fa8609b193ba76e9f527776b70176",
"url": "https://api.github.com/repos/symfony/lock/zipball/f85ebc5346a2f0e4f9e347e9154922a6d4665c65",
"reference": "f85ebc5346a2f0e4f9e347e9154922a6d4665c65",
"shasum": ""
},
"require": {
@ -3545,7 +3551,7 @@
"semaphore"
],
"support": {
"source": "https://github.com/symfony/lock/tree/v5.4.40"
"source": "https://github.com/symfony/lock/tree/v5.4.45"
},
"funding": [
{
@ -3561,20 +3567,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-10-21T20:36:41+00:00"
},
{
"name": "symfony/options-resolver",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
"reference": "bd1afbde6613a8d6b956115e0e14b196191fd0c4"
"reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/bd1afbde6613a8d6b956115e0e14b196191fd0c4",
"reference": "bd1afbde6613a8d6b956115e0e14b196191fd0c4",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6",
"reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6",
"shasum": ""
},
"require": {
@ -3614,7 +3620,7 @@
"options"
],
"support": {
"source": "https://github.com/symfony/options-resolver/tree/v5.4.40"
"source": "https://github.com/symfony/options-resolver/tree/v5.4.45"
},
"funding": [
{
@ -3630,20 +3636,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/password-hasher",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/password-hasher.git",
"reference": "21b98178ab2024e6c7d8ab72cca9ba16015c6093"
"reference": "6c5993b24505f98b90ca4896448012bbec54c7c8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/21b98178ab2024e6c7d8ab72cca9ba16015c6093",
"reference": "21b98178ab2024e6c7d8ab72cca9ba16015c6093",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/6c5993b24505f98b90ca4896448012bbec54c7c8",
"reference": "6c5993b24505f98b90ca4896448012bbec54c7c8",
"shasum": ""
},
"require": {
@ -3688,7 +3694,7 @@
"password"
],
"support": {
"source": "https://github.com/symfony/password-hasher/tree/v5.4.40"
"source": "https://github.com/symfony/password-hasher/tree/v5.4.45"
},
"funding": [
{
@ -3704,24 +3710,24 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.30.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
"reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a"
"reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a",
"reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
"reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"suggest": {
"ext-intl": "For best performance"
@ -3729,8 +3735,8 @@
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
@ -3766,7 +3772,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0"
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
},
"funding": [
{
@ -3782,24 +3788,24 @@
"type": "tidelift"
}
],
"time": "2024-05-31T15:07:36+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-intl-icu",
"version": "v1.30.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
"reference": "e76343c631b453088e2260ac41dfebe21954de81"
"reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e76343c631b453088e2260ac41dfebe21954de81",
"reference": "e76343c631b453088e2260ac41dfebe21954de81",
"url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78",
"reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"suggest": {
"ext-intl": "For best performance and support of other locales than \"en\""
@ -3807,8 +3813,8 @@
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
@ -3850,7 +3856,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.30.0"
"source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.31.0"
},
"funding": [
{
@ -3866,24 +3872,24 @@
"type": "tidelift"
}
],
"time": "2024-05-31T15:07:36+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.30.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb"
"reference": "3833d7255cc303546435cb650316bff708a1c75c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb",
"reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
"reference": "3833d7255cc303546435cb650316bff708a1c75c",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"suggest": {
"ext-intl": "For best performance"
@ -3891,8 +3897,8 @@
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
@ -3931,7 +3937,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
},
"funding": [
{
@ -3947,24 +3953,24 @@
"type": "tidelift"
}
],
"time": "2024-05-31T15:07:36+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.30.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c"
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c",
"reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"provide": {
"ext-mbstring": "*"
@ -3975,8 +3981,8 @@
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
@ -4011,7 +4017,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
},
"funding": [
{
@ -4027,30 +4033,30 @@
"type": "tidelift"
}
],
"time": "2024-06-19T12:30:46+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php73",
"version": "v1.30.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
"reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1"
"reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/ec444d3f3f6505bb28d11afa41e75faadebc10a1",
"reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
"reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
@ -4087,7 +4093,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php73/tree/v1.30.0"
"source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0"
},
"funding": [
{
@ -4103,30 +4109,30 @@
"type": "tidelift"
}
],
"time": "2024-05-31T15:07:36+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.30.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "77fa7995ac1b21ab60769b7323d600a991a90433"
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433",
"reference": "77fa7995ac1b21ab60769b7323d600a991a90433",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
@ -4167,7 +4173,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
},
"funding": [
{
@ -4183,30 +4189,30 @@
"type": "tidelift"
}
],
"time": "2024-05-31T15:07:36+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php81",
"version": "v1.30.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
"reference": "3fb075789fb91f9ad9af537c4012d523085bd5af"
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af",
"reference": "3fb075789fb91f9ad9af537c4012d523085bd5af",
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
"shasum": ""
},
"require": {
"php": ">=7.1"
"php": ">=7.2"
},
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
@ -4243,7 +4249,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0"
"source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
},
"funding": [
{
@ -4259,20 +4265,20 @@
"type": "tidelift"
}
],
"time": "2024-06-19T12:30:46+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/property-access",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
"reference": "6e4834145c2231b34eafabe440aaac478a95b456"
"reference": "111e7ed617509f1a9139686055d234aad6e388e0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/6e4834145c2231b34eafabe440aaac478a95b456",
"reference": "6e4834145c2231b34eafabe440aaac478a95b456",
"url": "https://api.github.com/repos/symfony/property-access/zipball/111e7ed617509f1a9139686055d234aad6e388e0",
"reference": "111e7ed617509f1a9139686055d234aad6e388e0",
"shasum": ""
},
"require": {
@ -4324,7 +4330,7 @@
"reflection"
],
"support": {
"source": "https://github.com/symfony/property-access/tree/v5.4.40"
"source": "https://github.com/symfony/property-access/tree/v5.4.45"
},
"funding": [
{
@ -4340,20 +4346,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/property-info",
"version": "v5.4.41",
"version": "v5.4.48",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
"reference": "2c96c24961cab73bdc9020809bd82bdadd1a10f2"
"reference": "a0396295ad585f95fccd690bc6a281e5bd303902"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-info/zipball/2c96c24961cab73bdc9020809bd82bdadd1a10f2",
"reference": "2c96c24961cab73bdc9020809bd82bdadd1a10f2",
"url": "https://api.github.com/repos/symfony/property-info/zipball/a0396295ad585f95fccd690bc6a281e5bd303902",
"reference": "a0396295ad585f95fccd690bc6a281e5bd303902",
"shasum": ""
},
"require": {
@ -4370,7 +4376,7 @@
"require-dev": {
"doctrine/annotations": "^1.10.4|^2",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
"phpstan/phpdoc-parser": "^1.0",
"phpstan/phpdoc-parser": "^1.0|^2.0",
"symfony/cache": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/serializer": "^4.4|^5.0|^6.0"
@ -4415,7 +4421,7 @@
"validator"
],
"support": {
"source": "https://github.com/symfony/property-info/tree/v5.4.41"
"source": "https://github.com/symfony/property-info/tree/v5.4.48"
},
"funding": [
{
@ -4431,7 +4437,7 @@
"type": "tidelift"
}
],
"time": "2024-06-09T07:25:10+00:00"
"time": "2024-11-25T16:14:41+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
@ -4524,16 +4530,16 @@
},
{
"name": "symfony/rate-limiter",
"version": "v5.4.40",
"version": "v5.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/rate-limiter.git",
"reference": "b3de902fc83923b9121169ade2453c41d0819110"
"reference": "c902bf796ca6c9656c3cc8185b53afb9acbb7c72"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/rate-limiter/zipball/b3de902fc83923b9121169ade2453c41d0819110",
"reference": "b3de902fc83923b9121169ade2453c41d0819110",
"url": "https://api.github.com/repos/symfony/rate-limiter/zipball/c902bf796ca6c9656c3cc8185b53afb9acbb7c72",
"reference": "c902bf796ca6c9656c3cc8185b53afb9acbb7c72",
"shasum": ""
},
"require": {
@ -4574,7 +4580,7 @@
"rate-limiter"
],
"support": {
"source": "https://github.com/symfony/rate-limiter/tree/v5.4.40"
"source": "https://github.com/symfony/rate-limiter/tree/v5.4.47"
},
"funding": [
{
@ -4590,20 +4596,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-11-07T11:51:21+00:00"
},
{
"name": "symfony/routing",
"version": "v5.4.40",
"version": "v5.4.48",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "6df1dd8b306649303267a760699cf04cf39b1f7b"
"reference": "dd08c19879a9b37ff14fd30dcbdf99a4cf045db1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/6df1dd8b306649303267a760699cf04cf39b1f7b",
"reference": "6df1dd8b306649303267a760699cf04cf39b1f7b",
"url": "https://api.github.com/repos/symfony/routing/zipball/dd08c19879a9b37ff14fd30dcbdf99a4cf045db1",
"reference": "dd08c19879a9b37ff14fd30dcbdf99a4cf045db1",
"shasum": ""
},
"require": {
@ -4664,7 +4670,7 @@
"url"
],
"support": {
"source": "https://github.com/symfony/routing/tree/v5.4.40"
"source": "https://github.com/symfony/routing/tree/v5.4.48"
},
"funding": [
{
@ -4680,20 +4686,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-11-12T18:20:21+00:00"
},
{
"name": "symfony/runtime",
"version": "v5.4.40",
"version": "v5.4.46",
"source": {
"type": "git",
"url": "https://github.com/symfony/runtime.git",
"reference": "50096d4ebebb4f9c41b87695868a6e34bdbf7cde"
"reference": "242b4d773c004fa258e1b412f3f49fc2ac78353a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/runtime/zipball/50096d4ebebb4f9c41b87695868a6e34bdbf7cde",
"reference": "50096d4ebebb4f9c41b87695868a6e34bdbf7cde",
"url": "https://api.github.com/repos/symfony/runtime/zipball/242b4d773c004fa258e1b412f3f49fc2ac78353a",
"reference": "242b4d773c004fa258e1b412f3f49fc2ac78353a",
"shasum": ""
},
"require": {
@ -4744,7 +4750,7 @@
"runtime"
],
"support": {
"source": "https://github.com/symfony/runtime/tree/v5.4.40"
"source": "https://github.com/symfony/runtime/tree/v5.4.46"
},
"funding": [
{
@ -4760,27 +4766,27 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-11-06T08:58:41+00:00"
},
{
"name": "symfony/security-bundle",
"version": "v5.4.41",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
"reference": "86557f237fb152412048912660895ab86aa61494"
"reference": "d6081d1b9118f944df90bb77444a8617eba01542"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/86557f237fb152412048912660895ab86aa61494",
"reference": "86557f237fb152412048912660895ab86aa61494",
"url": "https://api.github.com/repos/symfony/security-bundle/zipball/d6081d1b9118f944df90bb77444a8617eba01542",
"reference": "d6081d1b9118f944df90bb77444a8617eba01542",
"shasum": ""
},
"require": {
"ext-xml": "*",
"php": ">=7.2.5",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^5.3|^6.0",
"symfony/dependency-injection": "^5.4.43|^6.4.11",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/event-dispatcher": "^5.1|^6.0",
"symfony/http-foundation": "^5.3|^6.0",
@ -4847,7 +4853,7 @@
"description": "Provides a tight integration of the Security component into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-bundle/tree/v5.4.41"
"source": "https://github.com/symfony/security-bundle/tree/v5.4.45"
},
"funding": [
{
@ -4863,20 +4869,20 @@
"type": "tidelift"
}
],
"time": "2024-06-21T13:58:36+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/security-core",
"version": "v5.4.41",
"version": "v5.4.48",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
"reference": "98789f9a01db2168079fa973358ddc4deb6a0da8"
"reference": "cca947b1a74bdbc21c4d6288a4abb938d9a7eaba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-core/zipball/98789f9a01db2168079fa973358ddc4deb6a0da8",
"reference": "98789f9a01db2168079fa973358ddc4deb6a0da8",
"url": "https://api.github.com/repos/symfony/security-core/zipball/cca947b1a74bdbc21c4d6288a4abb938d9a7eaba",
"reference": "cca947b1a74bdbc21c4d6288a4abb938d9a7eaba",
"shasum": ""
},
"require": {
@ -4941,7 +4947,7 @@
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-core/tree/v5.4.41"
"source": "https://github.com/symfony/security-core/tree/v5.4.48"
},
"funding": [
{
@ -4957,20 +4963,20 @@
"type": "tidelift"
}
],
"time": "2024-06-28T07:24:26+00:00"
"time": "2024-11-27T08:58:20+00:00"
},
{
"name": "symfony/security-csrf",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
"reference": "9058d522c1c33d7ba13f4b3c79555cc2c4c16028"
"reference": "28dcafc3220f12264bb2aabe2389a2163458c1f4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/9058d522c1c33d7ba13f4b3c79555cc2c4c16028",
"reference": "9058d522c1c33d7ba13f4b3c79555cc2c4c16028",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/28dcafc3220f12264bb2aabe2389a2163458c1f4",
"reference": "28dcafc3220f12264bb2aabe2389a2163458c1f4",
"shasum": ""
},
"require": {
@ -5014,7 +5020,7 @@
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-csrf/tree/v5.4.40"
"source": "https://github.com/symfony/security-csrf/tree/v5.4.45"
},
"funding": [
{
@ -5030,20 +5036,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/security-guard",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-guard.git",
"reference": "d930fd327c290f451c9d8dd7889169195d4484e9"
"reference": "f3da3dbec38aaedaf287ffeb4e3a90994af37faa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-guard/zipball/d930fd327c290f451c9d8dd7889169195d4484e9",
"reference": "d930fd327c290f451c9d8dd7889169195d4484e9",
"url": "https://api.github.com/repos/symfony/security-guard/zipball/f3da3dbec38aaedaf287ffeb4e3a90994af37faa",
"reference": "f3da3dbec38aaedaf287ffeb4e3a90994af37faa",
"shasum": ""
},
"require": {
@ -5082,7 +5088,7 @@
"description": "Symfony Security Component - Guard",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-guard/tree/v5.4.40"
"source": "https://github.com/symfony/security-guard/tree/v5.4.45"
},
"funding": [
{
@ -5098,20 +5104,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/security-http",
"version": "v5.4.41",
"version": "v5.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
"reference": "14d271e304dce13ae77e39e6a6353c986e756b40"
"reference": "cde02b002e0447075430e6a84482e38f2fd9268d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-http/zipball/14d271e304dce13ae77e39e6a6353c986e756b40",
"reference": "14d271e304dce13ae77e39e6a6353c986e756b40",
"url": "https://api.github.com/repos/symfony/security-http/zipball/cde02b002e0447075430e6a84482e38f2fd9268d",
"reference": "cde02b002e0447075430e6a84482e38f2fd9268d",
"shasum": ""
},
"require": {
@ -5168,7 +5174,7 @@
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-http/tree/v5.4.41"
"source": "https://github.com/symfony/security-http/tree/v5.4.47"
},
"funding": [
{
@ -5184,20 +5190,20 @@
"type": "tidelift"
}
],
"time": "2024-06-17T05:58:45+00:00"
"time": "2024-11-07T14:12:41+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v2.5.3",
"version": "v2.5.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3"
"reference": "f37b419f7aea2e9abf10abd261832cace12e3300"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/a2329596ddc8fd568900e3fc76cba42489ecc7f3",
"reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300",
"reference": "f37b419f7aea2e9abf10abd261832cace12e3300",
"shasum": ""
},
"require": {
@ -5213,12 +5219,12 @@
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@ -5251,7 +5257,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v2.5.3"
"source": "https://github.com/symfony/service-contracts/tree/v2.5.4"
},
"funding": [
{
@ -5267,20 +5273,20 @@
"type": "tidelift"
}
],
"time": "2023-04-21T15:04:16+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/string",
"version": "v5.4.41",
"version": "v5.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "065a9611e0b1fd2197a867e1fb7f2238191b7096"
"reference": "136ca7d72f72b599f2631aca474a4f8e26719799"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/065a9611e0b1fd2197a867e1fb7f2238191b7096",
"reference": "065a9611e0b1fd2197a867e1fb7f2238191b7096",
"url": "https://api.github.com/repos/symfony/string/zipball/136ca7d72f72b599f2631aca474a4f8e26719799",
"reference": "136ca7d72f72b599f2631aca474a4f8e26719799",
"shasum": ""
},
"require": {
@ -5337,7 +5343,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v5.4.41"
"source": "https://github.com/symfony/string/tree/v5.4.47"
},
"funding": [
{
@ -5353,20 +5359,20 @@
"type": "tidelift"
}
],
"time": "2024-06-28T09:20:55+00:00"
"time": "2024-11-10T20:33:58+00:00"
},
{
"name": "symfony/translation",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "bb51d7f183756d1ac03f50ea47dc5726518cc7e8"
"reference": "98f26acc99341ca4bab345fb14d7b1d7cb825bed"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/bb51d7f183756d1ac03f50ea47dc5726518cc7e8",
"reference": "bb51d7f183756d1ac03f50ea47dc5726518cc7e8",
"url": "https://api.github.com/repos/symfony/translation/zipball/98f26acc99341ca4bab345fb14d7b1d7cb825bed",
"reference": "98f26acc99341ca4bab345fb14d7b1d7cb825bed",
"shasum": ""
},
"require": {
@ -5434,7 +5440,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/translation/tree/v5.4.40"
"source": "https://github.com/symfony/translation/tree/v5.4.45"
},
"funding": [
{
@ -5450,20 +5456,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/translation-contracts",
"version": "v2.5.3",
"version": "v2.5.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
"reference": "b0073a77ac0b7ea55131020e87b1e3af540f4664"
"reference": "450d4172653f38818657022252f9d81be89ee9a8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b0073a77ac0b7ea55131020e87b1e3af540f4664",
"reference": "b0073a77ac0b7ea55131020e87b1e3af540f4664",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/450d4172653f38818657022252f9d81be89ee9a8",
"reference": "450d4172653f38818657022252f9d81be89ee9a8",
"shasum": ""
},
"require": {
@ -5474,12 +5480,12 @@
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@ -5512,7 +5518,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.3"
"source": "https://github.com/symfony/translation-contracts/tree/v2.5.4"
},
"funding": [
{
@ -5528,20 +5534,20 @@
"type": "tidelift"
}
],
"time": "2024-01-23T13:51:25+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/twig-bridge",
"version": "v5.4.41",
"version": "v5.4.48",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
"reference": "d7b10dad12c49863c20c7f8e4cc74b9416eefbb9"
"reference": "853a0c9aa40123a9feeb335c865b659d94e49e5d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/d7b10dad12c49863c20c7f8e4cc74b9416eefbb9",
"reference": "d7b10dad12c49863c20c7f8e4cc74b9416eefbb9",
"url": "https://api.github.com/repos/symfony/twig-bridge/zipball/853a0c9aa40123a9feeb335c865b659d94e49e5d",
"reference": "853a0c9aa40123a9feeb335c865b659d94e49e5d",
"shasum": ""
},
"require": {
@ -5633,7 +5639,7 @@
"description": "Provides integration for Twig with various Symfony components",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bridge/tree/v5.4.41"
"source": "https://github.com/symfony/twig-bridge/tree/v5.4.48"
},
"funding": [
{
@ -5649,20 +5655,20 @@
"type": "tidelift"
}
],
"time": "2024-06-09T18:59:35+00:00"
"time": "2024-11-22T08:19:51+00:00"
},
{
"name": "symfony/twig-bundle",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
"reference": "997c002735c88b50a6325cca8ecf3d8723902666"
"reference": "e1ca56e1dc7791eb19f0aff71d3d94e6a91cc8f9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/997c002735c88b50a6325cca8ecf3d8723902666",
"reference": "997c002735c88b50a6325cca8ecf3d8723902666",
"url": "https://api.github.com/repos/symfony/twig-bundle/zipball/e1ca56e1dc7791eb19f0aff71d3d94e6a91cc8f9",
"reference": "e1ca56e1dc7791eb19f0aff71d3d94e6a91cc8f9",
"shasum": ""
},
"require": {
@ -5723,7 +5729,7 @@
"description": "Provides a tight integration of Twig into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/twig-bundle/tree/v5.4.40"
"source": "https://github.com/symfony/twig-bundle/tree/v5.4.45"
},
"funding": [
{
@ -5739,20 +5745,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/validator",
"version": "v5.4.41",
"version": "v5.4.48",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
"reference": "e00b2547f712a97755933db45efc03123b2d2690"
"reference": "883667679d93d6c30f1b7490d669801712d3be2f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/e00b2547f712a97755933db45efc03123b2d2690",
"reference": "e00b2547f712a97755933db45efc03123b2d2690",
"url": "https://api.github.com/repos/symfony/validator/zipball/883667679d93d6c30f1b7490d669801712d3be2f",
"reference": "883667679d93d6c30f1b7490d669801712d3be2f",
"shasum": ""
},
"require": {
@ -5792,7 +5798,7 @@
"symfony/http-kernel": "^4.4|^5.0|^6.0",
"symfony/intl": "^4.4|^5.0|^6.0",
"symfony/mime": "^4.4|^5.0|^6.0",
"symfony/property-access": "^4.4|^5.0|^6.0",
"symfony/property-access": "^5.4|^6.0",
"symfony/property-info": "^5.3|^6.0",
"symfony/translation": "^5.4.35|~6.3.12|^6.4.3",
"symfony/yaml": "^4.4|^5.0|^6.0"
@ -5836,7 +5842,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/validator/tree/v5.4.41"
"source": "https://github.com/symfony/validator/tree/v5.4.48"
},
"funding": [
{
@ -5852,20 +5858,20 @@
"type": "tidelift"
}
],
"time": "2024-06-10T09:18:21+00:00"
"time": "2024-11-27T08:58:20+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v5.4.40",
"version": "v5.4.48",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "af8868a6e9d6082dfca11f1a1f205ae93a8b6d93"
"reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/af8868a6e9d6082dfca11f1a1f205ae93a8b6d93",
"reference": "af8868a6e9d6082dfca11f1a1f205ae93a8b6d93",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/42f18f170aa86d612c3559cfb3bd11a375df32c8",
"reference": "42f18f170aa86d612c3559cfb3bd11a375df32c8",
"shasum": ""
},
"require": {
@ -5925,7 +5931,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v5.4.40"
"source": "https://github.com/symfony/var-dumper/tree/v5.4.48"
},
"funding": [
{
@ -5941,20 +5947,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-11-08T15:21:10+00:00"
},
{
"name": "symfony/var-exporter",
"version": "v6.4.9",
"version": "v6.4.20",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
"reference": "f9a060622e0d93777b7f8687ec4860191e16802e"
"reference": "998df255e9e6a15a36ae35e9c6cd818c17cf92a2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/f9a060622e0d93777b7f8687ec4860191e16802e",
"reference": "f9a060622e0d93777b7f8687ec4860191e16802e",
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/998df255e9e6a15a36ae35e9c6cd818c17cf92a2",
"reference": "998df255e9e6a15a36ae35e9c6cd818c17cf92a2",
"shasum": ""
},
"require": {
@ -6002,7 +6008,7 @@
"serialize"
],
"support": {
"source": "https://github.com/symfony/var-exporter/tree/v6.4.9"
"source": "https://github.com/symfony/var-exporter/tree/v6.4.20"
},
"funding": [
{
@ -6018,20 +6024,20 @@
"type": "tidelift"
}
],
"time": "2024-06-24T15:53:56+00:00"
"time": "2025-03-13T09:55:08+00:00"
},
{
"name": "symfony/web-profiler-bundle",
"version": "v5.4.40",
"version": "v5.4.48",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
"reference": "a29669617c4e63785f363571a190a706b9022890"
"reference": "4afb0399456b966be92410d2bbd6146cc3ce2174"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/a29669617c4e63785f363571a190a706b9022890",
"reference": "a29669617c4e63785f363571a190a706b9022890",
"url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/4afb0399456b966be92410d2bbd6146cc3ce2174",
"reference": "4afb0399456b966be92410d2bbd6146cc3ce2174",
"shasum": ""
},
"require": {
@ -6082,7 +6088,7 @@
"description": "Provides a development tool that gives detailed information about the execution of any request",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.40"
"source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.48"
},
"funding": [
{
@ -6098,7 +6104,7 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-11-19T09:26:40+00:00"
},
{
"name": "symfony/webpack-encore-bundle",
@ -6133,8 +6139,8 @@
"type": "symfony-bundle",
"extra": {
"thanks": {
"name": "symfony/webpack-encore",
"url": "https://github.com/symfony/webpack-encore"
"url": "https://github.com/symfony/webpack-encore",
"name": "symfony/webpack-encore"
}
},
"autoload": {
@ -6175,16 +6181,16 @@
},
{
"name": "symfony/yaml",
"version": "v5.4.40",
"version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "81cad0ceab3d61fe14fe941ff18a230ac9c80f83"
"reference": "a454d47278cc16a5db371fe73ae66a78a633371e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/81cad0ceab3d61fe14fe941ff18a230ac9c80f83",
"reference": "81cad0ceab3d61fe14fe941ff18a230ac9c80f83",
"url": "https://api.github.com/repos/symfony/yaml/zipball/a454d47278cc16a5db371fe73ae66a78a633371e",
"reference": "a454d47278cc16a5db371fe73ae66a78a633371e",
"shasum": ""
},
"require": {
@ -6230,7 +6236,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v5.4.40"
"source": "https://github.com/symfony/yaml/tree/v5.4.45"
},
"funding": [
{
@ -6246,30 +6252,30 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:33:22+00:00"
"time": "2024-09-25T14:11:13+00:00"
},
{
"name": "twig/twig",
"version": "v3.10.3",
"version": "v3.20.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "67f29781ffafa520b0bbfbd8384674b42db04572"
"reference": "3468920399451a384bef53cf7996965f7cd40183"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572",
"reference": "67f29781ffafa520b0bbfbd8384674b42db04572",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/3468920399451a384bef53cf7996965f7cd40183",
"reference": "3468920399451a384bef53cf7996965f7cd40183",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"php": ">=8.1.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3",
"symfony/polyfill-php80": "^1.22"
"symfony/polyfill-mbstring": "^1.3"
},
"require-dev": {
"phpstan/phpstan": "^2.0",
"psr/container": "^1.0|^2.0",
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
},
@ -6313,7 +6319,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.10.3"
"source": "https://github.com/twigphp/Twig/tree/v3.20.0"
},
"funding": [
{
@ -6325,13 +6331,93 @@
"type": "tidelift"
}
],
"time": "2024-05-16T10:04:27+00:00"
"time": "2025-02-13T08:34:43+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": [],
"minimum-stability": "stable",
"stability-flags": [],
"stability-flags": {},
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
@ -6339,6 +6425,6 @@
"ext-ctype": "*",
"ext-iconv": "*"
},
"platform-dev": [],
"platform-dev": {},
"plugin-api-version": "2.6.0"
}

View File

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

View File

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

View File

@ -5,6 +5,7 @@ twig:
default_path: "%kernel.project_dir%/templates"
form_themes:
- "bootstrap_5_layout.html.twig"
- "altcha.html.twig"
when@test:
twig:
strict_variables: true

View File

@ -75,3 +75,23 @@ services:
$securityPattern: '%security_pattern%'
# add more service definitions when explicit configuration is needed
# 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

@ -13,12 +13,7 @@ services:
ports:
- 8082:8071
volumes:
- ./src:/app/src
- ./config:/app/config
- ./translations:/app/translations
- ./templates:/app/templates
- /etc/localtime:/etc/localtime:ro
- $HOME/.ssh:/root/.host-ssh:ro
- .:/app
tmpfs:
- /var/www/var/logs:uid=${FIXUID:-1000},gid=${FIXGID:-1000}
- /var/www/var/cache:uid=${FIXUID:-1000},gid=${FIXGID:-1000}
@ -26,12 +21,14 @@ services:
- /tmp
links:
- hydra
depends_on:
- redis
extra_hosts:
- "localhost:127.0.0.1"
- "localhost:host-gateway"
- "host.docker.internal:host-gateway"
environment:
- APP_ENV=prod
- APP_ENV=dev
- PHP_FPM_MEMORY_LIMIT=128m
- APP_LOCALES=fr,en
- HYDRA_ADMIN_BASE_URL=http://hydra:4445
@ -139,6 +136,11 @@ services:
- 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:
postgres:
mariadb:

View File

@ -10,7 +10,8 @@ ARG ADDITIONAL_PACKAGES="bash=5.2.15-r0 \
php81-soap=${PHP_PKG_VERSION} \
php81-ldap=${PHP_PKG_VERSION} \
php81-pdo_mysql=${PHP_PKG_VERSION} \
php81-bcmath=${PHP_PKG_VERSION}"
php81-bcmath=${PHP_PKG_VERSION} \
php81-pecl-xdebug"
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-base-2024.7.25-stable.959.7896915
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

@ -10,8 +10,9 @@ ARG ADDITIONAL_PACKAGES="bash=5.2.15-r0 \
php81-soap=${PHP_PKG_VERSION} \
php81-ldap=${PHP_PKG_VERSION} \
php81-pdo_mysql=${PHP_PKG_VERSION} \
php81-bcmath=${PHP_PKG_VERSION}"
php81-bcmath=${PHP_PKG_VERSION} \
php81-pecl-xdebug"
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-standalone-2024.7.25-stable.959.7896915
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

6178
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because one or more lines are too long

View File

@ -1,30 +0,0 @@
/*!
* 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
*/

File diff suppressed because one or more lines are too long

View File

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

View File

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

View File

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

View File

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

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].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))})()})();
(()=>{"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))})()})();

View File

@ -3,11 +3,28 @@
"theme": {
"js": [
"/build/theme/runtime.js",
"/build/theme/869.js",
"/build/theme/theme.js"
],
"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,5 +1,27 @@
{
"build/theme/theme.css": "/build/theme/theme.css",
"build/theme/theme.js": "/build/theme/theme.js",
"build/theme/runtime.js": "/build/theme/runtime.js"
"build/theme/bootstrap-css.css": "/build/theme/bootstrap-css.css",
"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={},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))})()})();
(()=>{"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))})()})();

File diff suppressed because one or more lines are too long

View File

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

View File

@ -46,6 +46,7 @@ Elle permet de se connecter à une base de donnée et de vérifier un mot de pas
| `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 | |
| `ALTCHA_ENABLED` | Désactivation d'altcha lors de la connexion | true | |
### Algorithmes de hashage compatibles
@ -109,3 +110,10 @@ ex : `'redis:?host[redis1:26379]&host[redis2:26379]&host[redis3:26379]&redis_sen
| `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` |
### 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

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

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

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

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

@ -32,21 +32,9 @@ class SecurityController extends AbstractController
$loginForm->addError(new FormError($trans->trans('error.login', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_LOGIN);
}
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_PDO)) {
$loginForm->addError(new FormError($trans->trans('error.pdo', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_PDO);
}
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_CONFIGURATION)) {
$loginForm->addError(new FormError($trans->trans('error.configuration', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_CONFIGURATION);
}
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_DATA_TO_FETCH_CONFIGURATION)) {
$loginForm->addError(new FormError($trans->trans('error.data_to_fetch_configuration', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_DATA_TO_FETCH_CONFIGURATION);
}
if ($request->getSession()->has(SQLLoginUserAuthenticator::ERROR_SECURITY_PATTERN_CONFIGURATION)) {
$loginForm->addError(new FormError($trans->trans('error.security_pattern_configuration', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::ERROR_SECURITY_PATTERN_CONFIGURATION);
if ($request->getSession()->has(SQLLoginUserAuthenticator::TECHNICAL_ERROR)) {
$loginForm->addError(new FormError($trans->trans('error.technical', [], 'messages')));
$request->getSession()->remove(SQLLoginUserAuthenticator::TECHNICAL_ERROR);
}
}

View File

@ -2,8 +2,8 @@
namespace App\Form;
use App\Altcha\Form\AltchaType;
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\TextType;
use Symfony\Component\Form\FormBuilderInterface;
@ -11,6 +11,11 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
class LoginType extends AbstractType
{
public function __construct(
private readonly bool $altchaEnabled
) {
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
@ -22,12 +27,15 @@ class LoginType extends AbstractType
'translation_domain' => 'form',
'label' => 'form.label.password',
])
->add('_remember_me', CheckboxType::class, [
'required' => false,
'translation_domain' => 'form',
'label' => 'form.label.remember_me',
])
;
if ($this->altchaEnabled) {
$builder->add('altcha', AltchaType::class, [
'translation_domain' => 'form',
'label' => 'altcha.widget.title',
'required' => true,
]);
}
}
public function configureOptions(OptionsResolver $resolver): void

View File

@ -8,14 +8,17 @@ use Symfony\Contracts\HttpClient\ResponseInterface;
class Client
{
protected $client;
private const MAX_RETRY = 3;
private const SLEEP_TIME = [
5,
500,
5000,
];
protected $hydraAdminBaseUrl;
public function __construct(HttpClientInterface $client, string $hydraAdminBaseUrl)
{
$this->client = $client;
$this->hydraAdminBaseUrl = $hydraAdminBaseUrl;
public function __construct(
private readonly HttpClientInterface $client,
private readonly string $hydraAdminBaseUrl
) {
}
public function fetchLoginRequestInfo(string $loginChallenge): ResponseInterface
@ -26,7 +29,7 @@ class Client
[
'query' => [
'login_challenge' => $loginChallenge,
]
],
]
);
@ -35,7 +38,6 @@ class Client
throw new InvalidChallengeException();
}
return $response;
}
@ -47,7 +49,7 @@ class Client
[
'query' => [
'logout_challenge' => $logoutChallenge,
]
],
]
);
@ -56,27 +58,38 @@ class Client
throw new InvalidChallengeException();
}
return $response;
}
public function fetchConsentRequestInfo(string $consentChallenge): ResponseInterface
{
$attempt = 0;
while ($attempt < self::MAX_RETRY) {
$response = $this->client->request(
'GET',
$this->hydraAdminBaseUrl.'/oauth2/auth/requests/consent',
[
'query' => [
'consent_challenge' => $consentChallenge,
]
],
]
);
switch ($response->getStatusCode()) {
$status = $response->getStatusCode();
if (503 === $status) {
++$attempt;
usleep(1000 * self::SLEEP_TIME[$attempt] + rand(1, 5) * 1000);
continue;
}
switch ($status) {
case 404:
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;
}
@ -91,7 +104,7 @@ class Client
'login_challenge' => $loginChallenge,
],
'headers' => [
'Content-Type' => 'application/json'
'Content-Type' => 'application/json',
],
'body' => json_encode($payload),
]
@ -110,7 +123,7 @@ class Client
'consent_challenge' => $consentChallenge,
],
'headers' => [
'Content-Type' => 'application/json'
'Content-Type' => 'application/json',
],
'body' => json_encode($payload),
]
@ -129,7 +142,7 @@ class Client
'logout_challenge' => $logoutChallenge,
],
'headers' => [
'Content-Type' => 'application/json'
'Content-Type' => 'application/json',
],
]
);

View File

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

View File

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

View File

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

View File

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

View File

@ -12,7 +12,6 @@ class SQLLoginConnect extends AbstractController
/**
* Méthode qui crée l'unique instance de la classe
* si elle n'existe pas encore puis la retourne.
*
*/
public static function getInstance(): SQLLoginConnect
{

View File

@ -72,33 +72,37 @@ class SQLLoginRequest
return $this->config[self::SUBJECT_REWRITE_EXPRESSION];
}
public function getRequestScope(): string
private function getDataFields(): array
{
$scope = '';
if (!$this->config[self::DATA_TO_FETCH]) {
throw new NullDataToFetchException();
}
foreach ($this->config[self::DATA_TO_FETCH] as $data) {
$scope .= $data.',';
}
// On enlève la dernière virgule
$scope = substr($scope, 0, -1);
return 'SELECT '.$scope.' FROM '.$this->getTableName().' WHERE '.$this->getLoginColumnName().' = :'.$this->getLoginColumnName().';';
return $this->config[self::DATA_TO_FETCH];
}
/**
* Construction de la string pour la requête préparée selon la configuration yaml
* intègre la récupération du mot de passe hashé, du salt et de besoin d'upgrade de la méthode de hashage
*/
public function getRequestPassword(): string
private function getPasswordFields(): array
{
$fields = $this->getPasswordColumnName();
$fields[] = $this->getPasswordColumnName();
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().';';
}
}

View File

@ -88,7 +88,7 @@ class PasswordEncoder implements LegacyPasswordHasherInterface
foreach ($this->securityPattern as $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 SecurityPatternConfigurationException();
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 = '';

View File

@ -5,12 +5,12 @@ namespace App\Security;
use App\Entity\User;
use App\Security\Hasher\PasswordEncoder;
use App\Service\SQLLoginService;
use App\SQLLogin\Exception\DatabaseConnectionException;
use App\SQLLogin\Exception\DataToFetchConfigurationException;
use App\SQLLogin\Exception\EmptyResultException;
use App\SQLLogin\Exception\InvalidSQLPasswordException;
use App\SQLLogin\Exception\LoginElementsConfigurationException;
use App\SQLLogin\Exception\SecurityPatternConfigurationException;
use Exception;
use App\SQLLogin\SQLLoginRequest;
use PDOException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
@ -25,21 +25,20 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
{
public const LOGIN_ROUTE = 'app_login';
public const ERROR_LOGIN = 'error_login';
public const ERROR_PDO = 'error_pdo';
public const ERROR_SQL_LOGIN = 'error_sql_login';
public const ERROR_CONFIGURATION = 'error_configuration';
public const ERROR_DATA_TO_FETCH_CONFIGURATION = 'error_data_to_fetch_configuration';
public const ERROR_SECURITY_PATTERN_CONFIGURATION = 'error_security_pattern_configuration';
public const TECHNICAL_ERROR = 'technical_error';
private string $baseUrl;
private SQLLoginService $sqlLoginService;
private PasswordEncoder $passwordHasher;
public function __construct(string $baseUrl, SQLLoginService $sqlLoginService, PasswordEncoder $passwordHasher)
{
public function __construct(
string $baseUrl,
private SQLLoginService $sqlLoginService,
private PasswordEncoder $passwordHasher,
private SQLLoginRequest $sqlLoginRequest
) {
$this->baseUrl = $baseUrl;
$this->sqlLoginService = $sqlLoginService;
$this->passwordHasher = $passwordHasher;
$this->sqlLoginRequest = $sqlLoginRequest;
}
/**
@ -72,29 +71,37 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
$rememberMe = isset($form['_remember_me']) ? true : false;
$session = $request->getSession();
try {
// requête préparée
list($remoteHashedPassword, $remoteSalt) = $this->sqlLoginService->fetchPassword($login);
} catch (DatabaseConnectionException $e) {
$session->set(self::ERROR_PDO, true);
$datas = $this->sqlLoginService->fetchPasswordAndDatas($login);
} catch (EmptyResultException $e) {
$session->set(self::ERROR_LOGIN, true);
throw new AuthenticationException();
} catch (LoginElementsConfigurationException $e) {
$session->set(self::ERROR_CONFIGURATION, true);
throw new AuthenticationException();
} catch (Exception $exception) {
$request->getSession()->set(self::ERROR_LOGIN, true);
} catch (DataToFetchConfigurationException|PDOException $e) {
\Sentry\captureException($e);
$session->set(self::TECHNICAL_ERROR, true);
throw new AuthenticationException();
}
$remoteHashedPassword = $datas[$this->sqlLoginRequest->getPasswordColumnName()];
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 {
// Comparaison remote hash et hash du input password + salt
$this->passwordHasher->verify($remoteHashedPassword, $plaintextPassword, $remoteSalt);
$attributes = $this->sqlLoginService->fetchDatas($login);
$user = new User($login, $remoteHashedPassword, $attributes, $rememberMe);
} catch (InvalidSQLPasswordException $e) {
$session->set(self::ERROR_LOGIN, true);
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) {
return $user->getLogin() == $userIdentifier ? $user : null;
};
@ -105,19 +112,6 @@ class SQLLoginUserAuthenticator extends AbstractLoginFormAuthenticator
$passport->setAttribute('attributes', $user->getAttributes());
return $passport;
} catch (InvalidSQLPasswordException $e) {
$session->set(self::ERROR_LOGIN, true);
throw new AuthenticationException();
} catch (DataToFetchConfigurationException $e) {
$session->set(self::ERROR_DATA_TO_FETCH_CONFIGURATION, true);
throw new AuthenticationException();
} catch (DatabaseConnectionException $e) {
$session->set(self::ERROR_PDO, true);
throw new AuthenticationException();
} catch (SecurityPatternConfigurationException $e) {
$session->set(self::ERROR_SECURITY_PATTERN_CONFIGURATION, true);
throw new AuthenticationException();
}
}
protected function getLoginUrl(Request $request): string

View File

@ -2,100 +2,63 @@
namespace App\Service;
use App\SQLLogin\Exception\DatabaseConnectionException;
use App\SQLLogin\Exception\DataToFetchConfigurationException;
use App\SQLLogin\Exception\LoginElementsConfigurationException;
use App\SQLLogin\Exception\NullDataToFetchException;
use App\SQLLogin\Exception\EmptyResultException;
use App\SQLLogin\SQLLoginConnect;
use App\SQLLogin\SQLLoginRequest;
use Exception;
use PDO;
use PDOException;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class SQLLoginService extends AbstractController
{
private SQLLoginRequest $sqlLoginRequest;
public const MAX_RETRY = 3;
public function __construct(SQLLoginRequest $sqlLoginRequest, private LoggerInterface $loggerInterface)
{
public function __construct(
private SQLLoginRequest $sqlLoginRequest,
private LoggerInterface $loggerInterface
) {
$this->sqlLoginRequest = $sqlLoginRequest;
$this->loggerInterface = $loggerInterface;
}
public function fetchDatas(string $login): array
public function fetchPasswordAndDatas(string $login): array
{
if (empty($login)) {
throw new Exception('Connexion échouée, le login ne peut pas être vide');
}
try {
$dbh = $this->getConnection();
} catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage());
throw new DatabaseConnectionException($e->getMessage());
}
try {
// forge de la requête
$request = $this->sqlLoginRequest->getRequestScope();
} catch (NullDataToFetchException $e) {
throw new DataToFetchConfigurationException($e->getMessage());
}
try {
// Préparation de la requête
$query = $dbh->prepare($request);
$query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]);
$datas = $query->fetch(PDO::FETCH_ASSOC);
$query->closeCursor();
} catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage());
throw new DataToFetchConfigurationException($e->getMessage());
}
if (false === $datas) {
throw new Exception(sprintf('La requête sql "%s" a renvoyé un résultat incorrect.', $request));
}
$dataRequest = $this->sqlLoginRequest->getDatasRequest();
$login = \strtolower($login);
$datas = $this->executeRequestWithLogin($dataRequest, $login);
return $datas;
}
public function fetchPassword(string $login): array
private function executeRequestWithLogin(string $request, string $login): array
{
try {
$dbh = $this->getConnection();
} catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage());
throw new DatabaseConnectionException($e->getMessage());
}
// forge de la requête
$request = $this->sqlLoginRequest->getRequestPassword();
try {
$query = $dbh->prepare($request);
$attempt = 0;
while ($attempt < self::MAX_RETRY) {
$pdo = $this->getConnection();
$query = $pdo->prepare($request);
$query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]);
$password = $query->fetch(PDO::FETCH_ASSOC);
$datas = $query->fetch(PDO::FETCH_ASSOC);
$query->closeCursor();
} catch (PDOException $e) {
$this->loggerInterface->critical($e->getMessage());
throw new LoginElementsConfigurationException($e->getMessage());
if (false === $datas) {
usleep(3000);
++$attempt;
} else {
break;
}
if (!$password) {
throw new Exception('Une erreur est survenue lors de la récupération des données');
}
if (self::MAX_RETRY === $attempt) {
throw new EmptyResultException();
}
return [
$password[$this->sqlLoginRequest->getPasswordColumnName()],
isset($password[$this->sqlLoginRequest->getSaltColumnName()]) ? $password[$this->sqlLoginRequest->getSaltColumnName()] : null,
];
return $datas;
}
private function getConnection(): PDO
{
// Appel du singleton
$sqlLogin = SQLLoginConnect::getInstance();
// Connection bdd
return $sqlLogin->connect($this->sqlLoginRequest->getDatabaseDsn(), $this->sqlLoginRequest->getDbUser(), $this->sqlLoginRequest->getDbPassword());
$pdo = $sqlLogin->connect($this->sqlLoginRequest->getDatabaseDsn(), $this->sqlLoginRequest->getDbUser(), $this->sqlLoginRequest->getDbPassword());
return $pdo;
}
}

View File

@ -59,6 +59,18 @@
"bin/console"
]
},
"symfony/debug-bundle": {
"version": "5.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "5.3",
"ref": "5aa8aa48234c8eb6dbdd7b3cd5d791485d2cec4b"
},
"files": [
"config/packages/debug.yaml"
]
},
"symfony/flex": {
"version": "1.21",
"recipe": {

View File

@ -0,0 +1,13 @@
{% block altcha_widget %}
<altcha-widget
challengejson={{challengeJson}}
name='altcha'
strings="{{translations}}"
hidelogo
hidefooter
workers= {{ workers }}
delay={{ delay }}
{{ debug ? 'debug' : ''}}
{{ mockError ? 'mockerror' : ''}}
></altcha-widget>
{% endblock %}

View File

@ -6,7 +6,6 @@
{% block stylesheets %}
{{ encore_entry_link_tags('app', null, 'appConfig') }}
{{ encore_entry_link_tags('bootstrap-css', null, 'appConfig') }}
{{ encore_entry_link_tags('theme', null, 'themeConfig') }}
{% endblock %}
</head>
@ -15,7 +14,6 @@
{% block javascripts %}
{{ encore_entry_script_tags('app', null, 'appConfig') }}
{{ encore_entry_script_tags('bootstrap-js', null, 'appConfig') }}
{{ encore_entry_script_tags('theme', null, 'themeConfig') }}
{% endblock %}
</body>
</html>

3
tools/php-cs-fixer/.php-cs-fixer.dist.php Normal file → Executable file
View File

@ -5,8 +5,6 @@ $finder = PhpCsFixer\Finder::create()
->name('*.php')
;
// TODO: Définir les règles de style communes
// spécifiques au projet
return (new PhpCsFixer\Config())
->setRules([
'@Symfony' => true,
@ -22,6 +20,7 @@ return (new PhpCsFixer\Config())
'ternary_operator_spaces' => true,
'class_definition' => ['single_line' => true],
'whitespace_after_comma_in_array' => true,
'trailing_comma_in_multiline' => true,
// phpdoc
'phpdoc_add_missing_param_annotation' => ['only_untyped' => true],

View File

@ -7,16 +7,52 @@
<body>
<trans-unit id="4Lw8Y4y" resname="form.label.login">
<source>form.label.login</source>
<target>login</target>
<target>Email address *</target>
</trans-unit>
<trans-unit id="RmsDr53" resname="form.label.password">
<source>form.label.password</source>
<target>Password</target>
<target>Password *</target>
</trans-unit>
<trans-unit id="t17Vcvs" resname="form.label.remember_me">
<source>form.label.remember_me</source>
<target>Remember me</target>
</trans-unit>
<trans-unit id="4kfMq14" resname="altcha.validator.server_validation_error">
<source>altcha.validator.server_validation_error</source>
<target>Verification failed. Try again later.</target>
</trans-unit>
<trans-unit id="7mZdXx_" resname="altcha.widget.error">
<source>altcha.widget.error</source>
<target>Verification failed. Try again later.</target>
</trans-unit>
<trans-unit id="Yg33QZt" resname="altcha.widget.expired">
<source>altcha.widget.expired</source>
<target>Verification expired. Try again.</target>
</trans-unit>
<trans-unit id="3y0.Bhb" resname="altcha.widget.label">
<source>altcha.widget.label</source>
<target>I'm not a robot</target>
</trans-unit>
<trans-unit id="QFBWtGD" resname="altcha.widget.verified">
<source>altcha.widget.verified</source>
<target>Verified</target>
</trans-unit>
<trans-unit id="SfOrgtj" resname="altcha.widget.verifying">
<source>altcha.widget.verifying</source>
<target>Verifying...</target>
</trans-unit>
<trans-unit id="9dhbPuz" resname="altcha.widget.waitalert">
<source>altcha.widget.waitalert</source>
<target>Verifying... please wait.</target>
</trans-unit>
<trans-unit id="9k5hI.D" resname="altcha.widget.title">
<source>altcha.widget.title</source>
<target>Verification *</target>
</trans-unit>
<trans-unit id="vGcy2C3" resname="altcha.widget.info">
<source>altcha.widget.info</source>
<target>Please check the box above to validate that you are not a robot. If you encounter any problem while doing this, please update your browser.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -7,16 +7,52 @@
<body>
<trans-unit id="4Lw8Y4y" resname="form.label.login">
<source>form.label.login</source>
<target>login</target>
<target>Adresse courriel *</target>
</trans-unit>
<trans-unit id="RmsDr53" resname="form.label.password">
<source>form.label.password</source>
<target>Mot de passe</target>
<target>Mot de passe *</target>
</trans-unit>
<trans-unit id="t17Vcvs" resname="form.label.remember_me">
<source>form.label.remember_me</source>
<target>Se souvenir de moi</target>
</trans-unit>
<trans-unit id="4kfMq14" resname="altcha.validator.server_validation_error">
<source>altcha.validator.server_validation_error</source>
<target>Échec de la vérification. Réessayez plus tard.</target>
</trans-unit>
<trans-unit id="7mZdXx_" resname="altcha.widget.error">
<source>altcha.widget.error</source>
<target>Échec de la vérification. Réesayez plus tard.</target>
</trans-unit>
<trans-unit id="Yg33QZt" resname="altcha.widget.expired">
<source>altcha.widget.expired</source>
<target>Vérification expirée. Réessayez.</target>
</trans-unit>
<trans-unit id="3y0.Bhb" resname="altcha.widget.label">
<source>altcha.widget.label</source>
<target>Je ne suis pas un robot</target>
</trans-unit>
<trans-unit id="QFBWtGD" resname="altcha.widget.verified">
<source>altcha.widget.verified</source>
<target>Vérifié</target>
</trans-unit>
<trans-unit id="SfOrgtj" resname="altcha.widget.verifying">
<source>altcha.widget.verifying</source>
<target>Vérification en cours...</target>
</trans-unit>
<trans-unit id="9dhbPuz" resname="altcha.widget.waitalert">
<source>altcha.widget.waitalert</source>
<target>Vérification en cours... veuillez patienter.</target>
</trans-unit>
<trans-unit id="9k5hI.D" resname="altcha.widget.title">
<source>altcha.widget.title</source>
<target>Vérification *</target>
</trans-unit>
<trans-unit id="vGcy2C3" resname="altcha.widget.info">
<source>altcha.widget.info</source>
<target>Veuillez cocher la case ci dessus afin de valider que vous n'êtes pas un robot. Si vous rencontrez un problème lors de cette action, mettez à jour votre navigateur.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -9,25 +9,9 @@
<source>error.login</source>
<target>Incorrect login or password</target>
</trans-unit>
<trans-unit id="36t19qm" resname="error.sql_login">
<source>error.sql_login</source>
<target>Connection to database encountered a problem</target>
</trans-unit>
<trans-unit id="lBole_G" resname="error.pdo">
<source>error.pdo</source>
<target>Connection to database encountered a problem</target>
</trans-unit>
<trans-unit id="1QRR4uA" resname="error.configuration">
<source>error.configuration</source>
<target>Identification data references do not exist in the database</target>
</trans-unit>
<trans-unit id="4EPIhsV" resname="error.data_to_fetch_configuration">
<source>error.data_to_fetch_configuration</source>
<target>Data references to be transmitted do not exist</target>
</trans-unit>
<trans-unit id="6iuTNs3" resname="error.security_pattern_configuration">
<source>error.security_pattern_configuration</source>
<target>The security pattern is not allowed</target>
<trans-unit id="1QRR4uA" resname="error.technical">
<source>error.technical</source>
<target>A technical error happened, try again later</target>
</trans-unit>
</body>
</file>

View File

@ -9,25 +9,9 @@
<source>error.login</source>
<target>Login ou mot de passe inconnu</target>
</trans-unit>
<trans-unit id="36t19qm" resname="error.sql_login">
<source>error.sql_login</source>
<target>La connexion à la base de données a rencontré un problème</target>
</trans-unit>
<trans-unit id="lBole_G" resname="error.pdo">
<source>error.pdo</source>
<target>La connexion à la base de données a rencontré un problème</target>
</trans-unit>
<trans-unit id="1QRR4uA" resname="error.configuration">
<source>error.configuration</source>
<target>Les références de données d'identification n'existent pas dans la base de données</target>
</trans-unit>
<trans-unit id="4EPIhsV" resname="error.data_to_fetch_configuration">
<source>error.data_to_fetch_configuration</source>
<target>Les références de données à transmettre n'existent pas</target>
</trans-unit>
<trans-unit id="6iuTNs3" resname="error.security_pattern_configuration">
<source>error.security_pattern_configuration</source>
<target>Le patron de sécurité n'est pas autorisé</target>
<trans-unit id="1QRR4uA" resname="error.technical">
<source>error.technical</source>
<target>Une erreur technique s'est produite, rééssayez plus tard</target>
</trans-unit>
</body>
</file>

View File

@ -25,9 +25,6 @@ Encore
.addEntry('bootstrap-css', './assets/styles/bootstrap.scss')
.addEntry('bootstrap-js', './assets/app-bootstrap.js')
// enables the Symfony UX Stimulus bridge (used in assets/bootstrap.js)
.enableStimulusBridge('./assets/controllers.json')
// When enabled, Webpack "splits" your files into smaller pieces for greater optimization.
.splitEntryChunks()
@ -75,14 +72,27 @@ Encore
.setOutputPath('public/build/theme/')
// public path used by the web server to access the output path
.setPublicPath('/build/theme')
.addEntry('theme','./public/theme-entrypoint.js')
.addEntry('theme','./assets/theme-entrypoint.js')
.addEntry('bootstrap-css', './assets/styles/bootstrap.scss')
.addEntry('bootstrap-js', './assets/app-bootstrap.js')
.splitEntryChunks()
.enableSingleRuntimeChunk()
.cleanupOutputBeforeBuild()
.enableBuildNotifications()
.enableSourceMaps(false)
.enableVersioning(false)
.configureBabel((config) => {
config.plugins.push('@babel/plugin-proposal-class-properties');
})
// enables @babel/preset-env polyfills
.configureBabelPresetEnv((config) => {
config.useBuiltIns = 'usage';
config.corejs = 3;
})
.enablePostCssLoader()
.enableSassLoader()
;
// build the second configuration