diff --git a/assets/js/bottom-bar.js b/assets/js/bottom-bar.js index 1d311c29..57047e30 100644 --- a/assets/js/bottom-bar.js +++ b/assets/js/bottom-bar.js @@ -1,13 +1,15 @@ (function ($) { - 'use strict'; const $phone = $('#phone'); const $email = $('#email'); $('body').append(`
`); - })(window.jQuery); diff --git a/assets/js/user/_sidebar.js b/assets/js/user/_sidebar.js index ce573b52..6e1f36c9 100644 --- a/assets/js/user/_sidebar.js +++ b/assets/js/user/_sidebar.js @@ -7,7 +7,9 @@ $('.list-group-item-action:eq(2)').addClass('active'); } else if (currentUrl.indexOf('unpublished') !== -1) { $('.list-group-item-action:eq(1)').addClass('active'); + } else if (currentUrl.indexOf('security') !== -1) { + $('.list-group-item-action:eq(3)').addClass('active'); } else { $('.list-group-item-action:eq(0)').addClass('active'); } -})($); +})(window.jQuery); diff --git a/assets/js/user/two_factor/google_authenticator.js b/assets/js/user/two_factor/google_authenticator.js new file mode 100644 index 00000000..3d03a2e1 --- /dev/null +++ b/assets/js/user/two_factor/google_authenticator.js @@ -0,0 +1,89 @@ +(function ($) { + 'use strict'; + + const $form = $('#generate_google_auth_secret'); + const token = $('[name="auth_token"]').val(); + const $secret = $('[name="generatedSecret"]'); + const $authentication_code = $('[name="authentication_code"]'); + + // Open modal window + $('#setUpAuthenticatorButton').click(function () { + if ($form.data('generate-new-secret') === true) { + $.ajax({ + method: 'GET', + url: '/en/user/google_authenticator_code', + data: { csrf_token: token } + }).done(function (response) { + const { secret, qr_code } = response; + const image = new Image(); + image.src = qr_code; + + $secret.val(secret); + $('#generatedQrCode').html(image); + $('#generatedSecret').html(secret); + }); + } + }); + + // Enable 2fa + $('#enable2fa').click(function () { + let authentication_code = $authentication_code.val().trim(); + + if (!authentication_code) { + $authentication_code.addClass('is-invalid').focus(); + + return; + } + + $.ajax({ + method: 'PUT', + url: $form.attr('action'), + data: { + csrf_token: token, + secret: $secret.val(), + authentication_code: authentication_code + } + }) + .done(function () { + location.reload(); + }) + .fail(function (data) { + showError(data.responseJSON.message); + }); + }); + + // Disable 2fa + $('#disable2fa').click(function () { + $.ajax({ + method: 'DELETE', + url: $form.attr('action'), + data: { csrf_token: token } + }) + .done(function () { + location.reload(); + }) + .fail(function () { + location.reload(); + }); + }); + + $authentication_code.keyup(function () { + $(this).removeClass('is-invalid'); + }); + + // Reset form state + $('#setUpAuthenticator').on('hidden.bs.modal', function () { + resetFormState(); + }); + + function resetFormState() { + $authentication_code.val('').removeClass('is-invalid'); + $('#twoFactorAuthErrorMessage').text('').addClass('d-none'); + } + + function showError(message) { + $('#twoFactorAuthErrorMessage') + .text(message) + .removeClass('d-none'); + } +})(window.jQuery); diff --git a/assets/styles/user/security.scss b/assets/styles/user/security.scss new file mode 100644 index 00000000..09853db5 --- /dev/null +++ b/assets/styles/user/security.scss @@ -0,0 +1,6 @@ +.security-buttons a i { + background-color: #fff; + padding: 20px; + border-radius: 50%; + color: #BDC3C7; +} diff --git a/composer.json b/composer.json index 83852693..3424a21f 100644 --- a/composer.json +++ b/composer.json @@ -13,9 +13,12 @@ "doctrine/doctrine-bundle": "^2.8", "doctrine/doctrine-migrations-bundle": "^3.2", "doctrine/orm": "^2.13", + "endroid/qr-code": "^4.8", "gregwar/image": "master", "knplabs/knp-paginator-bundle": "^5.6", "phpdocumentor/reflection-docblock": "^5.2", + "scheb/2fa-bundle": "^6.8", + "scheb/2fa-google-authenticator": "^6.8", "symfony/asset": "^6.2", "symfony/cache": "^6.2", "symfony/console": "^6.2", @@ -59,6 +62,7 @@ "dbrekelmans/bdi": "^1.0", "doctrine/doctrine-fixtures-bundle": "^3.4", "friendsofphp/php-cs-fixer": "^3.2", + "phpgangsta/googleauthenticator": "dev-master", "phpunit/phpunit": "^9.5", "rector/rector": "^0.14.5", "symfony/browser-kit": "^6.2", diff --git a/composer.lock b/composer.lock index ebcede81..65a17451 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,112 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3c107b1a514de87fe65342b40036a85d", + "content-hash": "13208988da7d237ad05740d9e74749b9", "packages": [ + { + "name": "bacon/bacon-qr-code", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22", + "shasum": "" + }, + "require": { + "dasprid/enum": "^1.0.3", + "ext-iconv": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phly/keep-a-changelog": "^2.1", + "phpunit/phpunit": "^7 | ^8 | ^9", + "spatie/phpunit-snapshot-assertions": "^4.2.9", + "squizlabs/php_codesniffer": "^3.4" + }, + "suggest": { + "ext-imagick": "to generate QR code images" + }, + "type": "library", + "autoload": { + "psr-4": { + "BaconQrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "support": { + "issues": "https://github.com/Bacon/BaconQrCode/issues", + "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8" + }, + "time": "2022-12-07T17:46:57+00:00" + }, + { + "name": "dasprid/enum", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "8e6b6ea76eabbf19ea2bf5b67b98e1860474012f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8e6b6ea76eabbf19ea2bf5b67b98e1860474012f", + "reference": "8e6b6ea76eabbf19ea2bf5b67b98e1860474012f", + "shasum": "" + }, + "require": { + "php": ">=7.1 <9.0" + }, + "require-dev": { + "phpunit/phpunit": "^7 | ^8 | ^9", + "squizlabs/php_codesniffer": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.4" + }, + "time": "2023-03-01T18:44:03+00:00" + }, { "name": "doctrine/annotations", "version": "1.14.3", @@ -354,16 +458,16 @@ }, { "name": "doctrine/dbal", - "version": "3.6.1", + "version": "3.6.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "57815c7bbcda3cd18871d253c1dd8cbe56f8526e" + "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/57815c7bbcda3cd18871d253c1dd8cbe56f8526e", - "reference": "57815c7bbcda3cd18871d253c1dd8cbe56f8526e", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/b4bd1cfbd2b916951696d82e57d054394d84864c", + "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c", "shasum": "" }, "require": { @@ -379,9 +483,9 @@ "doctrine/coding-standard": "11.1.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2022.3", - "phpstan/phpstan": "1.10.3", + "phpstan/phpstan": "1.10.9", "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.4", + "phpunit/phpunit": "9.6.6", "psalm/plugin-phpunit": "0.18.4", "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^5.4|^6.0", @@ -446,7 +550,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.6.1" + "source": "https://github.com/doctrine/dbal/tree/3.6.2" }, "funding": [ { @@ -462,7 +566,7 @@ "type": "tidelift" } ], - "time": "2023-03-02T19:26:24+00:00" + "time": "2023-04-14T07:25:38+00:00" }, { "name": "doctrine/deprecations", @@ -509,21 +613,21 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.8.3", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "fd67ba64db3c806f626a33dcab15a4db0c77652e" + "reference": "7539b3c8bd620f7df6c2c6d510204bd2ce0064e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/fd67ba64db3c806f626a33dcab15a4db0c77652e", - "reference": "fd67ba64db3c806f626a33dcab15a4db0c77652e", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/7539b3c8bd620f7df6c2c6d510204bd2ce0064e3", + "reference": "7539b3c8bd620f7df6c2c6d510204bd2ce0064e3", "shasum": "" }, "require": { "doctrine/cache": "^1.11 || ^2.0", - "doctrine/dbal": "^3.4.0", + "doctrine/dbal": "^3.6.0", "doctrine/persistence": "^2.2 || ^3", "doctrine/sql-formatter": "^1.0.1", "php": "^7.4 || ^8.0", @@ -539,11 +643,12 @@ "conflict": { "doctrine/annotations": ">=3.0", "doctrine/orm": "<2.11 || >=3.0", - "twig/twig": "<1.34 || >=2.0,<2.4" + "twig/twig": "<1.34 || >=2.0 <2.4" }, "require-dev": { "doctrine/annotations": "^1 || ^2", "doctrine/coding-standard": "^9.0", + "doctrine/deprecations": "^1.0", "doctrine/orm": "^2.11 || ^3.0", "friendsofphp/proxy-manager-lts": "^1.0", "phpunit/phpunit": "^9.5.26 || ^10.0", @@ -604,7 +709,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.8.3" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.9.1" }, "funding": [ { @@ -620,7 +725,7 @@ "type": "tidelift" } ], - "time": "2023-02-03T09:32:42+00:00" + "time": "2023-04-14T05:39:34+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", @@ -1141,16 +1246,16 @@ }, { "name": "doctrine/orm", - "version": "2.14.1", + "version": "2.14.2", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "de7eee5ed7b1b35c99b118f26f210a8281e6db8e" + "reference": "e5fb1a4a8f5aa4e37612f66a22aac10291bcbb52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/de7eee5ed7b1b35c99b118f26f210a8281e6db8e", - "reference": "de7eee5ed7b1b35c99b118f26f210a8281e6db8e", + "url": "https://api.github.com/repos/doctrine/orm/zipball/e5fb1a4a8f5aa4e37612f66a22aac10291bcbb52", + "reference": "e5fb1a4a8f5aa4e37612f66a22aac10291bcbb52", "shasum": "" }, "require": { @@ -1179,14 +1284,14 @@ "doctrine/annotations": "^1.13 || ^2", "doctrine/coding-standard": "^9.0.2 || ^11.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.9.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "phpstan/phpstan": "~1.4.10 || 1.10.6", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", - "squizlabs/php_codesniffer": "3.7.1", + "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^4.4 || ^5.4 || ^6.0", "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2", "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "4.30.0 || 5.4.0" + "vimeo/psalm": "4.30.0 || 5.9.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -1236,9 +1341,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.14.1" + "source": "https://github.com/doctrine/orm/tree/2.14.2" }, - "time": "2023-01-16T18:36:59+00:00" + "time": "2023-03-30T15:18:54+00:00" }, { "name": "doctrine/persistence", @@ -1457,6 +1562,81 @@ ], "time": "2023-01-14T14:17:03+00:00" }, + { + "name": "endroid/qr-code", + "version": "4.8.2", + "source": { + "type": "git", + "url": "https://github.com/endroid/qr-code.git", + "reference": "2436c2333a3931c95e2b96eb82f16f53143d6bba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/2436c2333a3931c95e2b96eb82f16f53143d6bba", + "reference": "2436c2333a3931c95e2b96eb82f16f53143d6bba", + "shasum": "" + }, + "require": { + "bacon/bacon-qr-code": "^2.0.5", + "php": "^8.0" + }, + "conflict": { + "khanamiryan/qrcode-detector-decoder": "^1.0.6" + }, + "require-dev": { + "endroid/quality": "dev-master", + "ext-gd": "*", + "khanamiryan/qrcode-detector-decoder": "^1.0.4||^2.0.2", + "setasign/fpdf": "^1.8.2" + }, + "suggest": { + "ext-gd": "Enables you to write PNG images", + "khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator", + "roave/security-advisories": "Makes sure package versions with known security issues are not installed", + "setasign/fpdf": "Enables you to use the PDF writer" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Endroid\\QrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeroen van den Enden", + "email": "info@endroid.nl" + } + ], + "description": "Endroid QR Code", + "homepage": "https://github.com/endroid/qr-code", + "keywords": [ + "code", + "endroid", + "php", + "qr", + "qrcode" + ], + "support": { + "issues": "https://github.com/endroid/qr-code/issues", + "source": "https://github.com/endroid/qr-code/tree/4.8.2" + }, + "funding": [ + { + "url": "https://github.com/endroid", + "type": "github" + } + ], + "time": "2023-03-30T18:46:02+00:00" + }, { "name": "friendsofphp/proxy-manager-lts", "version": "v1.0.14", @@ -1804,29 +1984,29 @@ }, { "name": "laminas/laminas-code", - "version": "4.8.0", + "version": "4.10.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "dd19fe8e07cc3f374308565667eecd4958c22106" + "reference": "ad8b36073f9ac792716478befadca0798cc15635" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/dd19fe8e07cc3f374308565667eecd4958c22106", - "reference": "dd19fe8e07cc3f374308565667eecd4958c22106", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/ad8b36073f9ac792716478befadca0798cc15635", + "reference": "ad8b36073f9ac792716478befadca0798cc15635", "shasum": "" }, "require": { "php": "~8.1.0 || ~8.2.0" }, "require-dev": { - "doctrine/annotations": "^1.13.3", + "doctrine/annotations": "^2.0.0", "ext-phar": "*", "laminas/laminas-coding-standard": "^2.3.0", "laminas/laminas-stdlib": "^3.6.1", - "phpunit/phpunit": "^9.5.26", - "psalm/plugin-phpunit": "^0.18.0", - "vimeo/psalm": "^5.1.0" + "phpunit/phpunit": "^10.0.9", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.7.1" }, "suggest": { "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", @@ -1863,7 +2043,7 @@ "type": "community_bridge" } ], - "time": "2022-12-08T02:08:23+00:00" + "time": "2023-03-08T11:55:01+00:00" }, { "name": "monolog/monolog", @@ -1966,6 +2146,73 @@ ], "time": "2023-02-06T13:46:10+00:00" }, + { + "name": "paragonie/constant_time_encoding", + "version": "v2.6.3", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "58c3f47f650c94ec05a151692652a868995d2938" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", + "reference": "58c3f47f650c94ec05a151692652a868995d2938", + "shasum": "" + }, + "require": { + "php": "^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^6|^7|^8|^9", + "vimeo/psalm": "^1|^2|^3|^4" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2022-06-14T06:56:20+00:00" + }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -2078,24 +2325,27 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.2", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d" + "reference": "dfc078e8af9c99210337325ff5aa152872c98714" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d", - "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/dfc078e8af9c99210337325ff5aa152872c98714", + "reference": "dfc078e8af9c99210337325ff5aa152872c98714", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.0", "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" }, "require-dev": { "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.1", @@ -2127,9 +2377,54 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.1" + }, + "time": "2023-03-27T19:02:04+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.20.3", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "6c04009f6cae6eda2f040745b6b846080ef069c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6c04009f6cae6eda2f040745b6b846080ef069c2", + "reference": "6c04009f6cae6eda2f040745b6b846080ef069c2", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.20.3" }, - "time": "2022-10-14T12:47:21+00:00" + "time": "2023-04-25T09:01:03+00:00" }, { "name": "psr/cache", @@ -2389,6 +2684,204 @@ }, "time": "2021-07-14T16:46:02+00:00" }, + { + "name": "scheb/2fa-bundle", + "version": "v6.8.0", + "source": { + "type": "git", + "url": "https://github.com/scheb/2fa-bundle.git", + "reference": "4f8e9e87f90cf50c72b0857ea2b88453cf1d2446" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scheb/2fa-bundle/zipball/4f8e9e87f90cf50c72b0857ea2b88453cf1d2446", + "reference": "4f8e9e87f90cf50c72b0857ea2b88453cf1d2446", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "symfony/config": "^5.4 || ^6.0", + "symfony/dependency-injection": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/framework-bundle": "^5.4 || ^6.0", + "symfony/http-foundation": "^5.4 || ^6.0", + "symfony/http-kernel": "^5.4 || ^6.0", + "symfony/property-access": "^5.4 || ^6.0", + "symfony/security-bundle": "^5.4 || ^6.0", + "symfony/twig-bundle": "^5.4 || ^6.0" + }, + "conflict": { + "scheb/two-factor-bundle": "*" + }, + "suggest": { + "scheb/2fa-backup-code": "Emergency codes when you have no access to other methods", + "scheb/2fa-email": "Send codes by email", + "scheb/2fa-google-authenticator": "Google Authenticator support", + "scheb/2fa-totp": "Temporary one-time password (TOTP) support (Google Authenticator compatible)", + "scheb/2fa-trusted-device": "Trusted devices support" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Scheb\\TwoFactorBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Scheb", + "email": "me@christianscheb.de" + } + ], + "description": "A generic interface to implement two-factor authentication in Symfony applications", + "homepage": "https://github.com/scheb/2fa", + "keywords": [ + "2fa", + "Authentication", + "symfony", + "two-factor", + "two-step" + ], + "support": { + "source": "https://github.com/scheb/2fa-bundle/tree/v6.8.0" + }, + "time": "2023-01-26T18:47:22+00:00" + }, + { + "name": "scheb/2fa-google-authenticator", + "version": "v6.8.0", + "source": { + "type": "git", + "url": "https://github.com/scheb/2fa-google-authenticator.git", + "reference": "20eab4c1814b587cac71c4516a06b192ca838294" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scheb/2fa-google-authenticator/zipball/20eab4c1814b587cac71c4516a06b192ca838294", + "reference": "20eab4c1814b587cac71c4516a06b192ca838294", + "shasum": "" + }, + "require": { + "paragonie/constant_time_encoding": "^2.4", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "scheb/2fa-bundle": "self.version", + "spomky-labs/otphp": "^10.0 || ^11.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Scheb\\TwoFactorBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Scheb", + "email": "me@christianscheb.de" + } + ], + "description": "Extends scheb/2fa-bundle with two-factor authentication using Google Authenticator", + "homepage": "https://github.com/scheb/2fa", + "keywords": [ + "2fa", + "Authentication", + "google-authenticator", + "symfony", + "two-factor", + "two-step" + ], + "support": { + "source": "https://github.com/scheb/2fa-google-authenticator/tree/v6.8.0" + }, + "time": "2022-12-10T15:20:09+00:00" + }, + { + "name": "spomky-labs/otphp", + "version": "11.2.0", + "source": { + "type": "git", + "url": "https://github.com/Spomky-Labs/otphp.git", + "reference": "9a1569038bb1c8e98040b14b8bcbba54f25e7795" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/9a1569038bb1c8e98040b14b8bcbba54f25e7795", + "reference": "9a1569038bb1c8e98040b14b8bcbba54f25e7795", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "paragonie/constant_time_encoding": "^2.0", + "php": "^8.1" + }, + "require-dev": { + "ekino/phpstan-banned-code": "^1.0", + "infection/infection": "^0.26", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5.26", + "qossmic/deptrac-shim": "^1.0", + "rector/rector": "^0.15", + "symfony/phpunit-bridge": "^6.1", + "symplify/easy-coding-standard": "^11.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "OTPHP\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/Spomky-Labs/otphp/contributors" + } + ], + "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator", + "homepage": "https://github.com/Spomky-Labs/otphp", + "keywords": [ + "FreeOTP", + "RFC 4226", + "RFC 6238", + "google authenticator", + "hotp", + "otp", + "totp" + ], + "support": { + "issues": "https://github.com/Spomky-Labs/otphp/issues", + "source": "https://github.com/Spomky-Labs/otphp/tree/11.2.0" + }, + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2023-03-16T19:16:25+00:00" + }, { "name": "symfony/asset", "version": "v6.2.7", @@ -2463,16 +2956,16 @@ }, { "name": "symfony/cache", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "01a36b32f930018764bcbde006fbbe421fa6b61e" + "reference": "1ce7ed8e7ca6948892b6a3a52bb60cf2b04f7c94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/01a36b32f930018764bcbde006fbbe421fa6b61e", - "reference": "01a36b32f930018764bcbde006fbbe421fa6b61e", + "url": "https://api.github.com/repos/symfony/cache/zipball/1ce7ed8e7ca6948892b6a3a52bb60cf2b04f7c94", + "reference": "1ce7ed8e7ca6948892b6a3a52bb60cf2b04f7c94", "shasum": "" }, "require": { @@ -2481,7 +2974,7 @@ "psr/log": "^1.1|^2|^3", "symfony/cache-contracts": "^1.1.7|^2|^3", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/var-exporter": "^6.2.7" + "symfony/var-exporter": "^6.2.10" }, "conflict": { "doctrine/dbal": "<2.13.1", @@ -2539,7 +3032,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.2.7" + "source": "https://github.com/symfony/cache/tree/v6.2.10" }, "funding": [ { @@ -2555,7 +3048,7 @@ "type": "tidelift" } ], - "time": "2023-02-21T16:15:44+00:00" + "time": "2023-04-21T15:42:15+00:00" }, { "name": "symfony/cache-contracts", @@ -2715,16 +3208,16 @@ }, { "name": "symfony/console", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45" + "reference": "12288d9f4500f84a4d02254d4aa968b15488476f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/cbad09eb8925b6ad4fb721c7a179344dc4a19d45", - "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45", + "url": "https://api.github.com/repos/symfony/console/zipball/12288d9f4500f84a4d02254d4aa968b15488476f", + "reference": "12288d9f4500f84a4d02254d4aa968b15488476f", "shasum": "" }, "require": { @@ -2786,12 +3279,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.2.7" + "source": "https://github.com/symfony/console/tree/v6.2.10" }, "funding": [ { @@ -2807,20 +3300,20 @@ "type": "tidelift" } ], - "time": "2023-02-25T17:00:03+00:00" + "time": "2023-04-28T13:37:43+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "83369dd4ec84bba9673524d25b79dfbde9e6e84c" + "reference": "d732a66a2672669232c0b4536c8c96724a679780" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/83369dd4ec84bba9673524d25b79dfbde9e6e84c", - "reference": "83369dd4ec84bba9673524d25b79dfbde9e6e84c", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d732a66a2672669232c0b4536c8c96724a679780", + "reference": "d732a66a2672669232c0b4536c8c96724a679780", "shasum": "" }, "require": { @@ -2878,7 +3371,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/v6.2.7" + "source": "https://github.com/symfony/dependency-injection/tree/v6.2.10" }, "funding": [ { @@ -2894,7 +3387,7 @@ "type": "tidelift" } ], - "time": "2023-02-16T14:11:02+00:00" + "time": "2023-04-21T15:42:15+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2965,16 +3458,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v6.2.7", + "version": "v6.2.9", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "35cb5045e15bf6bd89fd1353d9b03ff61dc1feaf" + "reference": "4b3aeaa90d41c5527d7ba211d12102cedf06936e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/35cb5045e15bf6bd89fd1353d9b03ff61dc1feaf", - "reference": "35cb5045e15bf6bd89fd1353d9b03ff61dc1feaf", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/4b3aeaa90d41c5527d7ba211d12102cedf06936e", + "reference": "4b3aeaa90d41c5527d7ba211d12102cedf06936e", "shasum": "" }, "require": { @@ -3060,7 +3553,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.2.7" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.2.9" }, "funding": [ { @@ -3076,20 +3569,20 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-04-11T16:08:35+00:00" }, { "name": "symfony/dotenv", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "f2b09b7ee21458779df000bd24020b6e9955b393" + "reference": "4481aa45be7a11d2335c1d5b5bbe2f0c6199b105" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/f2b09b7ee21458779df000bd24020b6e9955b393", - "reference": "f2b09b7ee21458779df000bd24020b6e9955b393", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/4481aa45be7a11d2335c1d5b5bbe2f0c6199b105", + "reference": "4481aa45be7a11d2335c1d5b5bbe2f0c6199b105", "shasum": "" }, "require": { @@ -3134,7 +3627,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.2.7" + "source": "https://github.com/symfony/dotenv/tree/v6.2.8" }, "funding": [ { @@ -3150,20 +3643,20 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-03-10T10:06:03+00:00" }, { "name": "symfony/error-handler", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "61e90f94eb014054000bc902257d2763fac09166" + "reference": "8b7e9f124640cb0611624a9383176c3e5f7d8cfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/61e90f94eb014054000bc902257d2763fac09166", - "reference": "61e90f94eb014054000bc902257d2763fac09166", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8b7e9f124640cb0611624a9383176c3e5f7d8cfb", + "reference": "8b7e9f124640cb0611624a9383176c3e5f7d8cfb", "shasum": "" }, "require": { @@ -3205,7 +3698,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/v6.2.7" + "source": "https://github.com/symfony/error-handler/tree/v6.2.10" }, "funding": [ { @@ -3221,20 +3714,20 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-04-18T13:46:08+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "404b307de426c1c488e5afad64403e5f145e82a5" + "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/404b307de426c1c488e5afad64403e5f145e82a5", - "reference": "404b307de426c1c488e5afad64403e5f145e82a5", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/04046f35fd7d72f9646e721fc2ecb8f9c67d3339", + "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339", "shasum": "" }, "require": { @@ -3288,7 +3781,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/v6.2.7" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.8" }, "funding": [ { @@ -3304,7 +3797,7 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-03-20T16:06:02+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -3450,16 +3943,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "82b6c62b959f642d000456f08c6d219d749215b3" + "reference": "fd588debf7d1bc16a2c84b4b3b71145d9946b894" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/82b6c62b959f642d000456f08c6d219d749215b3", - "reference": "82b6c62b959f642d000456f08c6d219d749215b3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/fd588debf7d1bc16a2c84b4b3b71145d9946b894", + "reference": "fd588debf7d1bc16a2c84b4b3b71145d9946b894", "shasum": "" }, "require": { @@ -3493,7 +3986,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.2.7" + "source": "https://github.com/symfony/filesystem/tree/v6.2.10" }, "funding": [ { @@ -3509,7 +4002,7 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-04-18T13:46:08+00:00" }, { "name": "symfony/finder", @@ -3642,16 +4135,16 @@ }, { "name": "symfony/form", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "92379f5cf423c64e32be41897a65072ec972936e" + "reference": "a123512b46caea497ab8d96d9dbdbdaaf416a606" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/92379f5cf423c64e32be41897a65072ec972936e", - "reference": "92379f5cf423c64e32be41897a65072ec972936e", + "url": "https://api.github.com/repos/symfony/form/zipball/a123512b46caea497ab8d96d9dbdbdaaf416a606", + "reference": "a123512b46caea497ab8d96d9dbdbdaaf416a606", "shasum": "" }, "require": { @@ -3726,7 +4219,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v6.2.7" + "source": "https://github.com/symfony/form/tree/v6.2.10" }, "funding": [ { @@ -3742,20 +4235,20 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-04-19T08:03:37+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "01b1caa34ae121a192580acd38f66b7cb8b9ecce" + "reference": "823f285befde4e97bb70d97cae57997c38e4d6fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/01b1caa34ae121a192580acd38f66b7cb8b9ecce", - "reference": "01b1caa34ae121a192580acd38f66b7cb8b9ecce", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/823f285befde4e97bb70d97cae57997c38e4d6fd", + "reference": "823f285befde4e97bb70d97cae57997c38e4d6fd", "shasum": "" }, "require": { @@ -3764,7 +4257,7 @@ "php": ">=8.1", "symfony/cache": "^5.4|^6.0", "symfony/config": "^6.1", - "symfony/dependency-injection": "^6.2", + "symfony/dependency-injection": "^6.2.8", "symfony/deprecation-contracts": "^2.1|^3", "symfony/error-handler": "^6.1", "symfony/event-dispatcher": "^5.4|^6.0", @@ -3797,7 +4290,7 @@ "symfony/security-csrf": "<5.4", "symfony/serializer": "<6.1", "symfony/stopwatch": "<5.4", - "symfony/translation": "<5.4", + "symfony/translation": "<6.2.8", "symfony/twig-bridge": "<5.4", "symfony/twig-bundle": "<5.4", "symfony/validator": "<5.4", @@ -3832,7 +4325,7 @@ "symfony/serializer": "^6.1", "symfony/stopwatch": "^5.4|^6.0", "symfony/string": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", + "symfony/translation": "^6.2.8", "symfony/twig-bundle": "^5.4|^6.0", "symfony/uid": "^5.4|^6.0", "symfony/validator": "^5.4|^6.0", @@ -3877,7 +4370,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/v6.2.7" + "source": "https://github.com/symfony/framework-bundle/tree/v6.2.10" }, "funding": [ { @@ -3893,20 +4386,20 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-04-23T08:23:35+00:00" }, { "name": "symfony/google-mailer", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/google-mailer.git", - "reference": "de9ed9e23274151d8eb260d285d501e9bc0a0dbb" + "reference": "7e6cde8d40144e889e607bfc5320ea4192b247cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/google-mailer/zipball/de9ed9e23274151d8eb260d285d501e9bc0a0dbb", - "reference": "de9ed9e23274151d8eb260d285d501e9bc0a0dbb", + "url": "https://api.github.com/repos/symfony/google-mailer/zipball/7e6cde8d40144e889e607bfc5320ea4192b247cd", + "reference": "7e6cde8d40144e889e607bfc5320ea4192b247cd", "shasum": "" }, "require": { @@ -3942,7 +4435,7 @@ "description": "Symfony Google Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/google-mailer/tree/v6.2.7" + "source": "https://github.com/symfony/google-mailer/tree/v6.2.10" }, "funding": [ { @@ -3958,20 +4451,20 @@ "type": "tidelift" } ], - "time": "2023-02-21T10:35:38+00:00" + "time": "2023-04-14T16:23:31+00:00" }, { "name": "symfony/http-client", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "0a5be6cbc570ae23b51b49d67341f378629d78e4" + "reference": "3f5545a91c8e79dedd1a06c4b04e1682c80c42f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/0a5be6cbc570ae23b51b49d67341f378629d78e4", - "reference": "0a5be6cbc570ae23b51b49d67341f378629d78e4", + "url": "https://api.github.com/repos/symfony/http-client/zipball/3f5545a91c8e79dedd1a06c4b04e1682c80c42f9", + "reference": "3f5545a91c8e79dedd1a06c4b04e1682c80c42f9", "shasum": "" }, "require": { @@ -4026,8 +4519,11 @@ ], "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", "homepage": "https://symfony.com", + "keywords": [ + "http" + ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.2.7" + "source": "https://github.com/symfony/http-client/tree/v6.2.10" }, "funding": [ { @@ -4043,7 +4539,7 @@ "type": "tidelift" } ], - "time": "2023-02-21T10:54:55+00:00" + "time": "2023-04-20T13:12:48+00:00" }, { "name": "symfony/http-client-contracts", @@ -4128,16 +4624,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5fc3038d4a594223f9ea42e4e985548f3fcc9a3b" + "reference": "49adbb92bcb4e3c2943719d2756271e8b9602acc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5fc3038d4a594223f9ea42e4e985548f3fcc9a3b", - "reference": "5fc3038d4a594223f9ea42e4e985548f3fcc9a3b", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/49adbb92bcb4e3c2943719d2756271e8b9602acc", + "reference": "49adbb92bcb4e3c2943719d2756271e8b9602acc", "shasum": "" }, "require": { @@ -4186,7 +4682,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.2.7" + "source": "https://github.com/symfony/http-foundation/tree/v6.2.10" }, "funding": [ { @@ -4202,20 +4698,20 @@ "type": "tidelift" } ], - "time": "2023-02-21T10:54:55+00:00" + "time": "2023-04-18T13:46:08+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd" + "reference": "81064a65a5496f17d2b6984f6519406f98864215" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd", - "reference": "ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/81064a65a5496f17d2b6984f6519406f98864215", + "reference": "81064a65a5496f17d2b6984f6519406f98864215", "shasum": "" }, "require": { @@ -4297,7 +4793,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/v6.2.7" + "source": "https://github.com/symfony/http-kernel/tree/v6.2.10" }, "funding": [ { @@ -4313,20 +4809,20 @@ "type": "tidelift" } ], - "time": "2023-02-28T13:26:41+00:00" + "time": "2023-04-28T13:50:28+00:00" }, { "name": "symfony/intl", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "e7346ea6d88ae22e1b5d489b7a60135e72527cec" + "reference": "860c99e53149d22df1900d3aefdaeb17adb7669d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/e7346ea6d88ae22e1b5d489b7a60135e72527cec", - "reference": "e7346ea6d88ae22e1b5d489b7a60135e72527cec", + "url": "https://api.github.com/repos/symfony/intl/zipball/860c99e53149d22df1900d3aefdaeb17adb7669d", + "reference": "860c99e53149d22df1900d3aefdaeb17adb7669d", "shasum": "" }, "require": { @@ -4367,7 +4863,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides a PHP replacement layer for the C intl extension that includes additional data from the ICU library", + "description": "Provides access to the localization data of the ICU library", "homepage": "https://symfony.com", "keywords": [ "i18n", @@ -4378,7 +4874,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v6.2.7" + "source": "https://github.com/symfony/intl/tree/v6.2.10" }, "funding": [ { @@ -4394,20 +4890,20 @@ "type": "tidelift" } ], - "time": "2023-02-21T10:54:55+00:00" + "time": "2023-04-14T16:23:31+00:00" }, { "name": "symfony/lock", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/lock.git", - "reference": "febdeed9473e568ff34bf4350c04760f5357dfe2" + "reference": "fe452788cc81762f0840bd2a3dd1f230193186e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/lock/zipball/febdeed9473e568ff34bf4350c04760f5357dfe2", - "reference": "febdeed9473e568ff34bf4350c04760f5357dfe2", + "url": "https://api.github.com/repos/symfony/lock/zipball/fe452788cc81762f0840bd2a3dd1f230193186e5", + "reference": "fe452788cc81762f0840bd2a3dd1f230193186e5", "shasum": "" }, "require": { @@ -4456,7 +4952,7 @@ "semaphore" ], "support": { - "source": "https://github.com/symfony/lock/tree/v6.2.7" + "source": "https://github.com/symfony/lock/tree/v6.2.8" }, "funding": [ { @@ -4472,20 +4968,20 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-03-14T15:00:05+00:00" }, { "name": "symfony/mailer", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "e4f84c633b72ec70efc50b8016871c3bc43e691e" + "reference": "bfcfa015c67e19c6fdb7ca6fe70700af1e740a17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/e4f84c633b72ec70efc50b8016871c3bc43e691e", - "reference": "e4f84c633b72ec70efc50b8016871c3bc43e691e", + "url": "https://api.github.com/repos/symfony/mailer/zipball/bfcfa015c67e19c6fdb7ca6fe70700af1e740a17", + "reference": "bfcfa015c67e19c6fdb7ca6fe70700af1e740a17", "shasum": "" }, "require": { @@ -4535,7 +5031,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.2.7" + "source": "https://github.com/symfony/mailer/tree/v6.2.8" }, "funding": [ { @@ -4551,20 +5047,20 @@ "type": "tidelift" } ], - "time": "2023-02-21T10:35:38+00:00" + "time": "2023-03-14T15:00:05+00:00" }, { "name": "symfony/messenger", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "5ca618865eb726354e5369dda38770af1a8a8331" + "reference": "f54eef78d500309bbc51291f8a353b4b0afef8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/5ca618865eb726354e5369dda38770af1a8a8331", - "reference": "5ca618865eb726354e5369dda38770af1a8a8331", + "url": "https://api.github.com/repos/symfony/messenger/zipball/f54eef78d500309bbc51291f8a353b4b0afef8c1", + "reference": "f54eef78d500309bbc51291f8a353b4b0afef8c1", "shasum": "" }, "require": { @@ -4622,7 +5118,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v6.2.7" + "source": "https://github.com/symfony/messenger/tree/v6.2.8" }, "funding": [ { @@ -4638,20 +5134,20 @@ "type": "tidelift" } ], - "time": "2023-02-16T09:57:23+00:00" + "time": "2023-03-14T15:00:05+00:00" }, { "name": "symfony/mime", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "62e341f80699badb0ad70b31149c8df89a2d778e" + "reference": "b6c137fc53a9f7c4c951cd3f362b3734c7a97723" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/62e341f80699badb0ad70b31149c8df89a2d778e", - "reference": "62e341f80699badb0ad70b31149c8df89a2d778e", + "url": "https://api.github.com/repos/symfony/mime/zipball/b6c137fc53a9f7c4c951cd3f362b3734c7a97723", + "reference": "b6c137fc53a9f7c4c951cd3f362b3734c7a97723", "shasum": "" }, "require": { @@ -4705,7 +5201,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.2.7" + "source": "https://github.com/symfony/mime/tree/v6.2.10" }, "funding": [ { @@ -4721,20 +5217,20 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-04-19T09:54:16+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "c611e34f9e7b075f3af6d89d7cd10c6a80ab6a74" + "reference": "34700f2e5c7e9eae78f8e59fc02399dd8f110cae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/c611e34f9e7b075f3af6d89d7cd10c6a80ab6a74", - "reference": "c611e34f9e7b075f3af6d89d7cd10c6a80ab6a74", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/34700f2e5c7e9eae78f8e59fc02399dd8f110cae", + "reference": "34700f2e5c7e9eae78f8e59fc02399dd8f110cae", "shasum": "" }, "require": { @@ -4788,7 +5284,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v6.2.7" + "source": "https://github.com/symfony/monolog-bridge/tree/v6.2.8" }, "funding": [ { @@ -4804,7 +5300,7 @@ "type": "tidelift" } ], - "time": "2023-02-21T16:15:44+00:00" + "time": "2023-03-09T16:20:02+00:00" }, { "name": "symfony/monolog-bundle", @@ -4889,16 +5385,16 @@ }, { "name": "symfony/notifier", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/notifier.git", - "reference": "051bb72b2e2b64dbdc1a0b4f70fb2a0050d96850" + "reference": "993df4464c577e7eb828324181d2a451e81619b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/notifier/zipball/051bb72b2e2b64dbdc1a0b4f70fb2a0050d96850", - "reference": "051bb72b2e2b64dbdc1a0b4f70fb2a0050d96850", + "url": "https://api.github.com/repos/symfony/notifier/zipball/993df4464c577e7eb828324181d2a451e81619b6", + "reference": "993df4464c577e7eb828324181d2a451e81619b6", "shasum": "" }, "require": { @@ -4945,7 +5441,7 @@ "notifier" ], "support": { - "source": "https://github.com/symfony/notifier/tree/v6.2.7" + "source": "https://github.com/symfony/notifier/tree/v6.2.8" }, "funding": [ { @@ -4961,7 +5457,7 @@ "type": "tidelift" } ], - "time": "2023-02-17T11:05:34+00:00" + "time": "2023-03-10T10:06:03+00:00" }, { "name": "symfony/options-resolver", @@ -5526,16 +6022,16 @@ }, { "name": "symfony/process", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "680e8a2ea6b3f87aecc07a6a65a203ae573d1902" + "reference": "b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/680e8a2ea6b3f87aecc07a6a65a203ae573d1902", - "reference": "680e8a2ea6b3f87aecc07a6a65a203ae573d1902", + "url": "https://api.github.com/repos/symfony/process/zipball/b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e", + "reference": "b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e", "shasum": "" }, "require": { @@ -5567,7 +6063,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.2.7" + "source": "https://github.com/symfony/process/tree/v6.2.10" }, "funding": [ { @@ -5583,20 +6079,20 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-04-18T13:56:57+00:00" }, { "name": "symfony/property-access", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "5a389172011e2c37b47c896d0b156549126690a1" + "reference": "2ad1e0a07b8cab3e09905659d14f3b248e916374" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/5a389172011e2c37b47c896d0b156549126690a1", - "reference": "5a389172011e2c37b47c896d0b156549126690a1", + "url": "https://api.github.com/repos/symfony/property-access/zipball/2ad1e0a07b8cab3e09905659d14f3b248e916374", + "reference": "2ad1e0a07b8cab3e09905659d14f3b248e916374", "shasum": "" }, "require": { @@ -5643,11 +6139,11 @@ "injection", "object", "property", - "property path", + "property-path", "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v6.2.7" + "source": "https://github.com/symfony/property-access/tree/v6.2.8" }, "funding": [ { @@ -5663,20 +6159,20 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-03-14T15:00:05+00:00" }, { "name": "symfony/property-info", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "5cf906918ea0f74032ffc5c0b85def246ce409df" + "reference": "617177c24e1a92e011851948ba973758429a68b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/5cf906918ea0f74032ffc5c0b85def246ce409df", - "reference": "5cf906918ea0f74032ffc5c0b85def246ce409df", + "url": "https://api.github.com/repos/symfony/property-info/zipball/617177c24e1a92e011851948ba973758429a68b2", + "reference": "617177c24e1a92e011851948ba973758429a68b2", "shasum": "" }, "require": { @@ -5736,7 +6232,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.2.7" + "source": "https://github.com/symfony/property-info/tree/v6.2.10" }, "funding": [ { @@ -5752,7 +6248,7 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:53:37+00:00" + "time": "2023-04-18T13:46:08+00:00" }, { "name": "symfony/proxy-manager-bridge", @@ -5895,16 +6391,16 @@ }, { "name": "symfony/routing", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "fa643fa4c56de161f8bc8c0492a76a60140b50e4" + "reference": "69062e2823f03b82265d73a966999660f0e1e404" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/fa643fa4c56de161f8bc8c0492a76a60140b50e4", - "reference": "fa643fa4c56de161f8bc8c0492a76a60140b50e4", + "url": "https://api.github.com/repos/symfony/routing/zipball/69062e2823f03b82265d73a966999660f0e1e404", + "reference": "69062e2823f03b82265d73a966999660f0e1e404", "shasum": "" }, "require": { @@ -5963,7 +6459,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.2.7" + "source": "https://github.com/symfony/routing/tree/v6.2.8" }, "funding": [ { @@ -5979,20 +6475,20 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:53:37+00:00" + "time": "2023-03-14T15:00:05+00:00" }, { "name": "symfony/runtime", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/runtime.git", - "reference": "111b9d617d0cfc71d44baf01eb9951517fd8b739" + "reference": "f8b0751b33888329be8f8f0481bb81d279ec4157" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/runtime/zipball/111b9d617d0cfc71d44baf01eb9951517fd8b739", - "reference": "111b9d617d0cfc71d44baf01eb9951517fd8b739", + "url": "https://api.github.com/repos/symfony/runtime/zipball/f8b0751b33888329be8f8f0481bb81d279ec4157", + "reference": "f8b0751b33888329be8f8f0481bb81d279ec4157", "shasum": "" }, "require": { @@ -6038,8 +6534,11 @@ ], "description": "Enables decoupling PHP applications from global state", "homepage": "https://symfony.com", + "keywords": [ + "runtime" + ], "support": { - "source": "https://github.com/symfony/runtime/tree/v6.2.7" + "source": "https://github.com/symfony/runtime/tree/v6.2.8" }, "funding": [ { @@ -6055,20 +6554,20 @@ "type": "tidelift" } ], - "time": "2023-02-02T07:44:01+00:00" + "time": "2023-03-14T15:48:35+00:00" }, { "name": "symfony/security-bundle", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "601bcc14b6e8c168dc5985d31cfdfd11bd07b50b" + "reference": "b12dcedbcf423ae6d34d79cfaa6791a21c90bd14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/601bcc14b6e8c168dc5985d31cfdfd11bd07b50b", - "reference": "601bcc14b6e8c168dc5985d31cfdfd11bd07b50b", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/b12dcedbcf423ae6d34d79cfaa6791a21c90bd14", + "reference": "b12dcedbcf423ae6d34d79cfaa6791a21c90bd14", "shasum": "" }, "require": { @@ -6083,7 +6582,7 @@ "symfony/password-hasher": "^5.4|^6.0", "symfony/security-core": "^6.2", "symfony/security-csrf": "^5.4|^6.0", - "symfony/security-http": "^6.2.6" + "symfony/security-http": "^6.2.10" }, "conflict": { "symfony/browser-kit": "<5.4", @@ -6139,7 +6638,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/v6.2.7" + "source": "https://github.com/symfony/security-bundle/tree/v6.2.10" }, "funding": [ { @@ -6155,20 +6654,20 @@ "type": "tidelift" } ], - "time": "2023-02-21T12:32:47+00:00" + "time": "2023-04-21T15:49:06+00:00" }, { "name": "symfony/security-core", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "5dd5509ec58bf30c98811681870f58e7f5918bbe" + "reference": "c141337bc7451f9a9e464733f1e536bf38d1d2fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/5dd5509ec58bf30c98811681870f58e7f5918bbe", - "reference": "5dd5509ec58bf30c98811681870f58e7f5918bbe", + "url": "https://api.github.com/repos/symfony/security-core/zipball/c141337bc7451f9a9e464733f1e536bf38d1d2fb", + "reference": "c141337bc7451f9a9e464733f1e536bf38d1d2fb", "shasum": "" }, "require": { @@ -6230,7 +6729,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v6.2.7" + "source": "https://github.com/symfony/security-core/tree/v6.2.8" }, "funding": [ { @@ -6246,7 +6745,7 @@ "type": "tidelift" } ], - "time": "2023-02-17T11:05:34+00:00" + "time": "2023-03-10T10:06:03+00:00" }, { "name": "symfony/security-csrf", @@ -6321,16 +6820,16 @@ }, { "name": "symfony/security-http", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "0b96e76243877b53e9ff1418f9e538ecf480dd69" + "reference": "c468f059fac27680acf7e84cea07ba5ffff8942a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/0b96e76243877b53e9ff1418f9e538ecf480dd69", - "reference": "0b96e76243877b53e9ff1418f9e538ecf480dd69", + "url": "https://api.github.com/repos/symfony/security-http/zipball/c468f059fac27680acf7e84cea07ba5ffff8942a", + "reference": "c468f059fac27680acf7e84cea07ba5ffff8942a", "shasum": "" }, "require": { @@ -6386,7 +6885,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v6.2.7" + "source": "https://github.com/symfony/security-http/tree/v6.2.10" }, "funding": [ { @@ -6402,20 +6901,20 @@ "type": "tidelift" } ], - "time": "2023-02-28T10:56:03+00:00" + "time": "2023-04-21T11:56:14+00:00" }, { "name": "symfony/serializer", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "df9599873fdc2540e6f4291f49be4fcc167e9cbf" + "reference": "0732edf0ad28dd3faacde4f1200ab9d7a4d5f40d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/df9599873fdc2540e6f4291f49be4fcc167e9cbf", - "reference": "df9599873fdc2540e6f4291f49be4fcc167e9cbf", + "url": "https://api.github.com/repos/symfony/serializer/zipball/0732edf0ad28dd3faacde4f1200ab9d7a4d5f40d", + "reference": "0732edf0ad28dd3faacde4f1200ab9d7a4d5f40d", "shasum": "" }, "require": { @@ -6425,7 +6924,7 @@ "conflict": { "doctrine/annotations": "<1.12", "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0|>=1.7.0", + "phpdocumentor/type-resolver": "<1.4.0", "symfony/dependency-injection": "<5.4", "symfony/property-access": "<5.4", "symfony/property-info": "<5.4", @@ -6487,7 +6986,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.2.7" + "source": "https://github.com/symfony/serializer/tree/v6.2.10" }, "funding": [ { @@ -6503,7 +7002,7 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-04-18T13:57:49+00:00" }, { "name": "symfony/service-contracts", @@ -6654,16 +7153,16 @@ }, { "name": "symfony/string", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "67b8c1eec78296b85dc1c7d9743830160218993d" + "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/67b8c1eec78296b85dc1c7d9743830160218993d", - "reference": "67b8c1eec78296b85dc1c7d9743830160218993d", + "url": "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef", + "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef", "shasum": "" }, "require": { @@ -6720,7 +7219,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.2.7" + "source": "https://github.com/symfony/string/tree/v6.2.8" }, "funding": [ { @@ -6736,20 +7235,20 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-03-20T16:06:02+00:00" }, { "name": "symfony/translation", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "90db1c6138c90527917671cd9ffa9e8b359e3a73" + "reference": "817535dbb1721df8b3a8f2489dc7e50bcd6209b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/90db1c6138c90527917671cd9ffa9e8b359e3a73", - "reference": "90db1c6138c90527917671cd9ffa9e8b359e3a73", + "url": "https://api.github.com/repos/symfony/translation/zipball/817535dbb1721df8b3a8f2489dc7e50bcd6209b5", + "reference": "817535dbb1721df8b3a8f2489dc7e50bcd6209b5", "shasum": "" }, "require": { @@ -6818,7 +7317,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.2.7" + "source": "https://github.com/symfony/translation/tree/v6.2.8" }, "funding": [ { @@ -6834,7 +7333,7 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-03-31T09:14:44+00:00" }, { "name": "symfony/translation-contracts", @@ -6919,16 +7418,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "f1899fd3b8a29f9544440a716a1ed7d1121c4615" + "reference": "30e3ad6ae749b2d2700ecf9b4a1a9d5c96b18927" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/f1899fd3b8a29f9544440a716a1ed7d1121c4615", - "reference": "f1899fd3b8a29f9544440a716a1ed7d1121c4615", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/30e3ad6ae749b2d2700ecf9b4a1a9d5c96b18927", + "reference": "30e3ad6ae749b2d2700ecf9b4a1a9d5c96b18927", "shasum": "" }, "require": { @@ -7023,7 +7522,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.2.7" + "source": "https://github.com/symfony/twig-bridge/tree/v6.2.8" }, "funding": [ { @@ -7039,7 +7538,7 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-03-31T09:14:44+00:00" }, { "name": "symfony/twig-bundle", @@ -7128,16 +7627,16 @@ }, { "name": "symfony/validator", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "4b3bd0a9545bdf7ebc84f0a494c05219010bb403" + "reference": "c02ea86844926f04247bc1f5db5f85bb53330823" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/4b3bd0a9545bdf7ebc84f0a494c05219010bb403", - "reference": "4b3bd0a9545bdf7ebc84f0a494c05219010bb403", + "url": "https://api.github.com/repos/symfony/validator/zipball/c02ea86844926f04247bc1f5db5f85bb53330823", + "reference": "c02ea86844926f04247bc1f5db5f85bb53330823", "shasum": "" }, "require": { @@ -7216,7 +7715,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.2.7" + "source": "https://github.com/symfony/validator/tree/v6.2.10" }, "funding": [ { @@ -7232,20 +7731,20 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-04-19T09:54:16+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e" + "reference": "41a750a23412ca76fdbbf5096943b4134272c1ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e", - "reference": "cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/41a750a23412ca76fdbbf5096943b4134272c1ab", + "reference": "41a750a23412ca76fdbbf5096943b4134272c1ab", "shasum": "" }, "require": { @@ -7304,7 +7803,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.2.7" + "source": "https://github.com/symfony/var-dumper/tree/v6.2.10" }, "funding": [ { @@ -7320,20 +7819,20 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-04-18T13:46:08+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "86062dd0103530e151588c8f60f5b85a139f1442" + "reference": "9a07920c2058bafee921ce4d90aeef2193837d63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/86062dd0103530e151588c8f60f5b85a139f1442", - "reference": "86062dd0103530e151588c8f60f5b85a139f1442", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/9a07920c2058bafee921ce4d90aeef2193837d63", + "reference": "9a07920c2058bafee921ce4d90aeef2193837d63", "shasum": "" }, "require": { @@ -7373,12 +7872,12 @@ "export", "hydrate", "instantiate", - "lazy loading", + "lazy-loading", "proxy", "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.2.7" + "source": "https://github.com/symfony/var-exporter/tree/v6.2.10" }, "funding": [ { @@ -7394,7 +7893,7 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-04-21T08:33:05+00:00" }, { "name": "symfony/web-link", @@ -7557,16 +8056,16 @@ }, { "name": "symfony/yaml", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57" + "reference": "61916f3861b1e9705b18cfde723921a71dd1559d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e8e6a1d59e050525f27a1f530aa9703423cb7f57", - "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57", + "url": "https://api.github.com/repos/symfony/yaml/zipball/61916f3861b1e9705b18cfde723921a71dd1559d", + "reference": "61916f3861b1e9705b18cfde723921a71dd1559d", "shasum": "" }, "require": { @@ -7611,7 +8110,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.2.7" + "source": "https://github.com/symfony/yaml/tree/v6.2.10" }, "funding": [ { @@ -7627,7 +8126,7 @@ "type": "tidelift" } ], - "time": "2023-02-16T09:57:23+00:00" + "time": "2023-04-28T13:25:36+00:00" }, { "name": "symfonycasts/verify-email-bundle", @@ -8375,20 +8874,21 @@ }, { "name": "doctrine/data-fixtures", - "version": "1.6.3", + "version": "1.6.5", "source": { "type": "git", "url": "https://github.com/doctrine/data-fixtures.git", - "reference": "c27821d038e64f1bfc852a94064d65d2a75ad01f" + "reference": "e6b97f557942ea17564bbc30ae3ebc9bd2209363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/c27821d038e64f1bfc852a94064d65d2a75ad01f", - "reference": "c27821d038e64f1bfc852a94064d65d2a75ad01f", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/e6b97f557942ea17564bbc30ae3ebc9bd2209363", + "reference": "e6b97f557942ea17564bbc30ae3ebc9bd2209363", "shasum": "" }, "require": { - "doctrine/persistence": "^1.3.3|^2.0|^3.0", + "doctrine/deprecations": "^0.5.3 || ^1.0", + "doctrine/persistence": "^1.3.3 || ^2.0 || ^3.0", "php": "^7.2 || ^8.0" }, "conflict": { @@ -8397,16 +8897,15 @@ "doctrine/phpcr-odm": "<1.3.0" }, "require-dev": { - "doctrine/coding-standard": "^10.0", + "doctrine/coding-standard": "^11.0", "doctrine/dbal": "^2.13 || ^3.0", - "doctrine/deprecations": "^1.0", "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", "doctrine/orm": "^2.12", "ext-sqlite3": "*", "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^8.5 || ^9.5", + "phpunit/phpunit": "^8.5 || ^9.5 || ^10.0", "symfony/cache": "^5.0 || ^6.0", - "vimeo/psalm": "^4.10" + "vimeo/psalm": "^4.10 || ^5.9" }, "suggest": { "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)", @@ -8417,7 +8916,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\DataFixtures\\": "lib/Doctrine/Common/DataFixtures" + "Doctrine\\Common\\DataFixtures\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -8437,7 +8936,7 @@ ], "support": { "issues": "https://github.com/doctrine/data-fixtures/issues", - "source": "https://github.com/doctrine/data-fixtures/tree/1.6.3" + "source": "https://github.com/doctrine/data-fixtures/tree/1.6.5" }, "funding": [ { @@ -8453,20 +8952,20 @@ "type": "tidelift" } ], - "time": "2023-01-07T15:10:22+00:00" + "time": "2023-04-03T14:58:58+00:00" }, { "name": "doctrine/doctrine-fixtures-bundle", - "version": "3.4.2", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", - "reference": "601988c5b46dbd20a0f886f967210aba378a6fd5" + "reference": "fd39829fed8f090ef6e185d33449d47c2fb59c9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/601988c5b46dbd20a0f886f967210aba378a6fd5", - "reference": "601988c5b46dbd20a0f886f967210aba378a6fd5", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/fd39829fed8f090ef6e185d33449d47c2fb59c9c", + "reference": "fd39829fed8f090ef6e185d33449d47c2fb59c9c", "shasum": "" }, "require": { @@ -8520,7 +9019,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", - "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.4.2" + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.4.3" }, "funding": [ { @@ -8536,7 +9035,7 @@ "type": "tidelift" } ], - "time": "2022-04-28T17:58:29+00:00" + "time": "2023-04-11T12:37:36+00:00" }, { "name": "friendsofphp/php-cs-fixer", @@ -8630,26 +9129,24 @@ }, { "name": "masterminds/html5", - "version": "2.7.6", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "897eb517a343a2281f11bc5556d6548db7d93947" + "reference": "3c5d5a56d56f48a1ca08a0670f0f80c1dad368f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/897eb517a343a2281f11bc5556d6548db7d93947", - "reference": "897eb517a343a2281f11bc5556d6548db7d93947", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/3c5d5a56d56f48a1ca08a0670f0f80c1dad368f3", + "reference": "3c5d5a56d56f48a1ca08a0670f0f80c1dad368f3", "shasum": "" }, "require": { - "ext-ctype": "*", "ext-dom": "*", - "ext-libxml": "*", "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" }, "type": "library", "extra": { @@ -8693,22 +9190,22 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.7.6" + "source": "https://github.com/Masterminds/html5-php/tree/2.8.0" }, - "time": "2022-08-18T16:18:26+00:00" + "time": "2023-04-26T07:27:39+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -8746,7 +9243,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -8754,20 +9251,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "nikic/php-parser", - "version": "v4.15.3", + "version": "v4.15.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", "shasum": "" }, "require": { @@ -8808,9 +9305,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" }, - "time": "2023-01-16T22:05:37+00:00" + "time": "2023-03-05T19:49:14+00:00" }, { "name": "phar-io/manifest", @@ -8989,18 +9486,66 @@ }, "time": "2023-02-09T12:12:19+00:00" }, + { + "name": "phpgangsta/googleauthenticator", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/PHPGangsta/GoogleAuthenticator.git", + "reference": "505c2af8337b559b33557f37cda38e5f843f3768" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPGangsta/GoogleAuthenticator/zipball/505c2af8337b559b33557f37cda38e5f843f3768", + "reference": "505c2af8337b559b33557f37cda38e5f843f3768", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "default-branch": true, + "type": "library", + "autoload": { + "classmap": [ + "PHPGangsta/GoogleAuthenticator.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-4-Clause" + ], + "authors": [ + { + "name": "Michael Kliewe", + "email": "info@phpgangsta.de", + "homepage": "http://www.phpgangsta.de/", + "role": "Developer" + } + ], + "description": "Google Authenticator 2-factor authentication", + "keywords": [ + "googleauthenticator", + "rfc6238", + "totp" + ], + "support": { + "issues": "https://github.com/PHPGangsta/GoogleAuthenticator/issues", + "source": "https://github.com/PHPGangsta/GoogleAuthenticator" + }, + "time": "2019-03-20T00:55:58+00:00" + }, { "name": "phpstan/phpstan", - "version": "1.10.3", + "version": "1.10.13", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "5419375b5891add97dc74be71e6c1c34baaddf64" + "reference": "f07bf8c6980b81bf9e49d44bd0caf2e737614a70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/5419375b5891add97dc74be71e6c1c34baaddf64", - "reference": "5419375b5891add97dc74be71e6c1c34baaddf64", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f07bf8c6980b81bf9e49d44bd0caf2e737614a70", + "reference": "f07bf8c6980b81bf9e49d44bd0caf2e737614a70", "shasum": "" }, "require": { @@ -9029,8 +9574,11 @@ "static analysis" ], "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.10.3" + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, "funding": [ { @@ -9046,20 +9594,20 @@ "type": "tidelift" } ], - "time": "2023-02-25T14:47:13+00:00" + "time": "2023-04-12T19:29:52+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.25", + "version": "9.2.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954" + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/0e2b40518197a8c0d4b08bc34dfff1c99c508954", - "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", "shasum": "" }, "require": { @@ -9081,8 +9629,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -9115,7 +9663,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.25" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" }, "funding": [ { @@ -9123,7 +9671,7 @@ "type": "github" } ], - "time": "2023-02-25T05:32:00+00:00" + "time": "2023-03-06T12:58:08+00:00" }, { "name": "phpunit/php-file-iterator", @@ -9368,16 +9916,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.4", + "version": "9.6.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d" + "reference": "c993f0d3b0489ffc42ee2fe0bd645af1538a63b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9125ee085b6d95e78277dc07aa1f46f9e0607b8d", - "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c993f0d3b0489ffc42ee2fe0bd645af1538a63b2", + "reference": "c993f0d3b0489ffc42ee2fe0bd645af1538a63b2", "shasum": "" }, "require": { @@ -9410,8 +9958,8 @@ "sebastian/version": "^3.0.2" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -9450,7 +9998,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.4" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.7" }, "funding": [ { @@ -9466,7 +10015,7 @@ "type": "tidelift" } ], - "time": "2023-02-27T13:06:37+00:00" + "time": "2023-04-14T08:58:40+00:00" }, { "name": "rector/rector", @@ -10705,16 +11254,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v6.2.7", + "version": "v6.2.9", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "65a906f5141ff2d3aef1b01c128fba78f5e9f921" + "reference": "328bc3795059651d2d4e462e8febdf7ec2d7a626" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/65a906f5141ff2d3aef1b01c128fba78f5e9f921", - "reference": "65a906f5141ff2d3aef1b01c128fba78f5e9f921", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/328bc3795059651d2d4e462e8febdf7ec2d7a626", + "reference": "328bc3795059651d2d4e462e8febdf7ec2d7a626", "shasum": "" }, "require": { @@ -10755,7 +11304,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.2.7" + "source": "https://github.com/symfony/dom-crawler/tree/v6.2.9" }, "funding": [ { @@ -10771,7 +11320,7 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-04-11T16:03:19+00:00" }, { "name": "symfony/maker-bundle", @@ -10957,16 +11506,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "56965fae0b6b8d271015990eff5240ffff02e185" + "reference": "552950db2919421ad917e29e76d1999a2a31a8e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/56965fae0b6b8d271015990eff5240ffff02e185", - "reference": "56965fae0b6b8d271015990eff5240ffff02e185", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/552950db2919421ad917e29e76d1999a2a31a8e3", + "reference": "552950db2919421ad917e29e76d1999a2a31a8e3", "shasum": "" }, "require": { @@ -11020,7 +11569,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.2.7" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.2.10" }, "funding": [ { @@ -11036,7 +11585,7 @@ "type": "tidelift" } ], - "time": "2023-02-16T09:57:23+00:00" + "time": "2023-04-18T13:46:08+00:00" }, { "name": "symfony/polyfill-php81", @@ -11119,16 +11668,16 @@ }, { "name": "symfony/web-profiler-bundle", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "0d183e0a69652e348007e97ffff8d3ded9cc6d2d" + "reference": "24b6f4370f1cd59aacfc5e799c8614b40776e9c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/0d183e0a69652e348007e97ffff8d3ded9cc6d2d", - "reference": "0d183e0a69652e348007e97ffff8d3ded9cc6d2d", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/24b6f4370f1cd59aacfc5e799c8614b40776e9c8", + "reference": "24b6f4370f1cd59aacfc5e799c8614b40776e9c8", "shasum": "" }, "require": { @@ -11177,7 +11726,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/v6.2.7" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.2.10" }, "funding": [ { @@ -11193,7 +11742,7 @@ "type": "tidelift" } ], - "time": "2023-02-21T16:32:03+00:00" + "time": "2023-04-24T13:41:17+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/bundles.php b/config/bundles.php index b7dc3d70..ee0f6489 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -15,4 +15,5 @@ Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], SymfonyCasts\Bundle\VerifyEmail\SymfonyCastsVerifyEmailBundle::class => ['all' => true], + Scheb\TwoFactorBundle\SchebTwoFactorBundle::class => ['all' => true], ]; diff --git a/config/packages/rate_limiter.yaml b/config/packages/rate_limiter.yaml index 3538f207..f9375376 100644 --- a/config/packages/rate_limiter.yaml +++ b/config/packages/rate_limiter.yaml @@ -2,5 +2,5 @@ framework: rate_limiter: auth: policy: 'fixed_window' - limit: 5 + limit: 6 interval: '100 seconds' diff --git a/config/packages/scheb_2fa.yaml b/config/packages/scheb_2fa.yaml new file mode 100644 index 00000000..6e38cf2d --- /dev/null +++ b/config/packages/scheb_2fa.yaml @@ -0,0 +1,16 @@ +scheb_two_factor: + security_tokens: + - Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken + - Symfony\Component\Security\Http\Authenticator\Token\PostAuthenticationToken + - Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface + + google: + enabled: true + #server_name: server_name # Server name used in QR code + issuer: issuer_placeholder # Issuer name used in QR code + digits: 6 # Number of digits in authentication code + window: 1 # Depends on the version of Spomky-Labs/otphp used: + # Until v10: How many codes before/after the current one would be accepted + # From v11: Acceptable time drift in seconds + template: auth/two_factor/two_factor_form.html.twig # Template used to render the authentication form + form_renderer: App\Controller\Auth\TwoFactor\EnterAuthCodeController diff --git a/config/packages/security.yaml b/config/packages/security.yaml index fcc91cf1..1bed4c6c 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -30,6 +30,12 @@ security: lazy: true login_throttling: max_attempts: 5 + two_factor: + auth_form_path: 2fa_login # The route name you have used in the routes.yaml + check_path: 2fa_login_check # The route name you have used in the routes.yaml + enable_csrf: true + csrf_parameter: _csrf_security_token + csrf_token_id: two_factor # This allows the user to login by submitting a username and password # Reference: https://symfony.com/doc/current/security/form_login_setup.html @@ -74,6 +80,11 @@ security: # additional security lives in the controllers - { path: '^/(%app_locales%)/admin', roles: ROLE_ADMIN } - { path: '^/(%app_locales%)/user', roles: ROLE_USER } + # This makes the logout route accessible during two-factor authentication. Allows the user to + # cancel two-factor authentication, if they need to. + - { path: ^/logout, role: PUBLIC_ACCESS } + # This ensures that the form can only be accessed when two-factor authentication is in progress. + - { path: ^/2fa, role: IS_AUTHENTICATED_2FA_IN_PROGRESS } when@test: # this configuration simplifies testing URLs protected by the security mechanism diff --git a/config/routes/sched_2fa.yaml b/config/routes/sched_2fa.yaml new file mode 100644 index 00000000..33020f10 --- /dev/null +++ b/config/routes/sched_2fa.yaml @@ -0,0 +1,7 @@ +2fa_login: + path: /{_locale}/2fa + defaults: + _controller: "scheb_two_factor.form_controller::form" + +2fa_login_check: + path: /{_locale}/2fa_check diff --git a/config/services.yaml b/config/services.yaml index 9b1cf9e5..76736d4a 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -7,7 +7,7 @@ parameters: locale: 'en' app_locales: 'en|ru|nl|bg' images_directory: '%kernel.project_dir%/public/uploads/images' - app_version: '2.5.0' + app_version: '2.6.0' services: # default configuration for services in *this* file diff --git a/migrations/Version20230501134351.php b/migrations/Version20230501134351.php new file mode 100644 index 00000000..f7d9709b --- /dev/null +++ b/migrations/Version20230501134351.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE users ADD google_authenticator_secret VARCHAR(255) DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE users DROP google_authenticator_secret'); + } +} diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 2f8af21f..890644a1 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -15,6 +15,7 @@