From 151bac8c3b22b89464ef27b7f9c3948c1340eba5 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 18 Jan 2024 12:44:14 +0100 Subject: [PATCH] jwt token works --- .env | 6 + .gitignore | 5 +- composer.json | 1 + composer.lock | 922 +++++++++++++----- config/bundles.php | 1 + config/packages/api_platform.yaml | 6 + config/packages/lexik_jwt_authentication.yaml | 5 + config/packages/nelmio_cors.yaml | 52 +- config/packages/security.yaml | 19 +- config/routes.yaml | 7 +- migrations/Version20231214140601.php | 35 - migrations/Version20231221143009.php | 45 + src/ApiResource/PostingApi.php | 2 +- src/Controller/SecurityController.php | 1 - src/Controller/TesController.php | 28 + src/DataFixtures/AppFixtures.php | 3 + src/Entity/ApiToken.php | 93 ++ src/Entity/Partner.php | 206 ++++ src/Entity/PartnerContact.php | 162 +++ src/Enum/PartnerType.php | 15 + src/Factory/PartnerFactory.php | 76 ++ src/Repository/ApiTokenRepository.php | 66 ++ src/Repository/PartnerContactRepository.php | 48 + src/Repository/PartnerRepository.php | 48 + symfony.lock | 12 + 25 files changed, 1531 insertions(+), 333 deletions(-) create mode 100644 config/packages/lexik_jwt_authentication.yaml delete mode 100644 migrations/Version20231214140601.php create mode 100644 migrations/Version20231221143009.php create mode 100644 src/Controller/TesController.php create mode 100644 src/Entity/ApiToken.php create mode 100644 src/Entity/Partner.php create mode 100644 src/Entity/PartnerContact.php create mode 100644 src/Enum/PartnerType.php create mode 100644 src/Factory/PartnerFactory.php create mode 100644 src/Repository/ApiTokenRepository.php create mode 100644 src/Repository/PartnerContactRepository.php create mode 100644 src/Repository/PartnerRepository.php diff --git a/.env b/.env index 3c8c7c0..9776eb5 100644 --- a/.env +++ b/.env @@ -43,3 +43,9 @@ MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 ###> nelmio/cors-bundle ### CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$' ###< nelmio/cors-bundle ### + +###> lexik/jwt-authentication-bundle ### +JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem +JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem +JWT_PASSPHRASE=dd92770a0c99773cc99cf1bdc4bd425986dacbcde1bc753e9934614aa6f364b6 +###< lexik/jwt-authentication-bundle ### diff --git a/.gitignore b/.gitignore index 4013f09..31b6a22 100644 --- a/.gitignore +++ b/.gitignore @@ -18,4 +18,7 @@ .phpunit.result.cache /phpunit.xml ###< symfony/phpunit-bridge ### -/.idea \ No newline at end of file +/.idea +###> lexik/jwt-authentication-bundle ### +/config/jwt/*.pem +###< lexik/jwt-authentication-bundle ### diff --git a/composer.json b/composer.json index fa47b67..841ff78 100644 --- a/composer.json +++ b/composer.json @@ -11,6 +11,7 @@ "doctrine/doctrine-bundle": "^2.11", "doctrine/doctrine-migrations-bundle": "^3.3", "doctrine/orm": "^2.17", + "lexik/jwt-authentication-bundle": "^2.20", "nelmio/cors-bundle": "^2.4", "phpdocumentor/reflection-docblock": "^5.3", "phpstan/phpdoc-parser": "^1.24", diff --git a/composer.lock b/composer.lock index 1b33cc4..afeb432 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e29fe980d3968cb83139b26407957151", + "content-hash": "90d8363fb071963db3a216753262c590", "packages": [ { "name": "api-platform/core", - "version": "v3.2.7", + "version": "v3.2.11", "source": { "type": "git", "url": "https://github.com/api-platform/core.git", - "reference": "f297d2192652a3acd2a644707740de8cb5069221" + "reference": "227c85871b00613f427ea985b54f4af24ce56a29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/core/zipball/f297d2192652a3acd2a644707740de8cb5069221", - "reference": "f297d2192652a3acd2a644707740de8cb5069221", + "url": "https://api.github.com/repos/api-platform/core/zipball/227c85871b00613f427ea985b54f4af24ce56a29", + "reference": "227c85871b00613f427ea985b54f4af24ce56a29", "shasum": "" }, "require": { @@ -69,9 +69,11 @@ "phpstan/phpstan-doctrine": "^1.0", "phpstan/phpstan-phpunit": "^1.0", "phpstan/phpstan-symfony": "^1.0", + "phpunit/phpunit": "^9.5", "psr/log": "^1.0 || ^2.0 || ^3.0", "ramsey/uuid": "^3.9.7 || ^4.0", "ramsey/uuid-doctrine": "^1.4 || ^2.0", + "sebastian/comparator": "<5.0", "soyuka/contexts": "v3.3.9", "soyuka/stubs-mongodb": "^1.0", "symfony/asset": "^6.1 || ^7.0", @@ -165,9 +167,9 @@ ], "support": { "issues": "https://github.com/api-platform/core/issues", - "source": "https://github.com/api-platform/core/tree/v3.2.7" + "source": "https://github.com/api-platform/core/tree/v3.2.11" }, - "time": "2023-11-30T13:51:25+00:00" + "time": "2024-01-12T13:17:28+00:00" }, { "name": "doctrine/cache", @@ -902,16 +904,16 @@ }, { "name": "doctrine/inflector", - "version": "2.0.8", + "version": "2.0.9", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" + "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/2930cd5ef353871c821d5c43ed030d39ac8cfe65", + "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65", "shasum": "" }, "require": { @@ -973,7 +975,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.8" + "source": "https://github.com/doctrine/inflector/tree/2.0.9" }, "funding": [ { @@ -989,7 +991,7 @@ "type": "tidelift" } ], - "time": "2023-06-16T13:40:37+00:00" + "time": "2024-01-15T18:05:13+00:00" }, { "name": "doctrine/instantiator", @@ -1243,16 +1245,16 @@ }, { "name": "doctrine/orm", - "version": "2.17.1", + "version": "2.17.3", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "1a4fe6e0bb67762370937a7e6cee3da40a9122d1" + "reference": "398ab0547aaf90bdb352b560a94c24f44ff00670" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/1a4fe6e0bb67762370937a7e6cee3da40a9122d1", - "reference": "1a4fe6e0bb67762370937a7e6cee3da40a9122d1", + "url": "https://api.github.com/repos/doctrine/orm/zipball/398ab0547aaf90bdb352b560a94c24f44ff00670", + "reference": "398ab0547aaf90bdb352b560a94c24f44ff00670", "shasum": "" }, "require": { @@ -1285,10 +1287,10 @@ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", "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.15.0" + "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7.0", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2 || ^7.0", + "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "vimeo/psalm": "4.30.0 || 5.16.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -1338,9 +1340,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.17.1" + "source": "https://github.com/doctrine/orm/tree/2.17.3" }, - "time": "2023-11-17T06:25:40+00:00" + "time": "2024-01-16T21:32:04+00:00" }, { "name": "doctrine/persistence", @@ -1559,6 +1561,262 @@ ], "time": "2023-10-06T06:47:41+00:00" }, + { + "name": "lcobucci/clock", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/clock.git", + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715", + "reference": "6f28b826ea01306b07980cb8320ab30b966cd715", + "shasum": "" + }, + "require": { + "php": "~8.2.0 || ~8.3.0", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "infection/infection": "^0.27", + "lcobucci/coding-standard": "^11.0.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.25", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.13", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^10.2.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com" + } + ], + "description": "Yet another clock abstraction", + "support": { + "issues": "https://github.com/lcobucci/clock/issues", + "source": "https://github.com/lcobucci/clock/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2023-11-17T17:00:27+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "5.2.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "0ba88aed12c04bd2ed9924f500673f32b67a6211" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/0ba88aed12c04bd2ed9924f500673f32b67a6211", + "reference": "0ba88aed12c04bd2ed9924f500673f32b67a6211", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-sodium": "*", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "psr/clock": "^1.0" + }, + "require-dev": { + "infection/infection": "^0.27.0", + "lcobucci/clock": "^3.0", + "lcobucci/coding-standard": "^11.0", + "phpbench/phpbench": "^1.2.9", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10.7", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.10", + "phpstan/phpstan-strict-rules": "^1.5.0", + "phpunit/phpunit": "^10.2.6" + }, + "suggest": { + "lcobucci/clock": ">= 3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/5.2.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2023-11-20T21:17:42+00:00" + }, + { + "name": "lexik/jwt-authentication-bundle", + "version": "v2.20.3", + "source": { + "type": "git", + "url": "https://github.com/lexik/LexikJWTAuthenticationBundle.git", + "reference": "a196d68d07dd5486a523cc3415620badbb5d25c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lexik/LexikJWTAuthenticationBundle/zipball/a196d68d07dd5486a523cc3415620badbb5d25c2", + "reference": "a196d68d07dd5486a523cc3415620badbb5d25c2", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "lcobucci/clock": "^1.2|^2.0|^3.0", + "lcobucci/jwt": "^3.4|^4.1|^5.0", + "namshi/jose": "^7.2", + "php": ">=7.1", + "symfony/config": "^4.4|^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^4.4|^5.4|^6.0|^7.0", + "symfony/deprecation-contracts": "^2.4|^3.0", + "symfony/event-dispatcher": "^4.4|^5.4|^6.0|^7.0", + "symfony/http-foundation": "^4.4|^5.4|^6.0|^7.0", + "symfony/http-kernel": "^4.4|^5.4|^6.0|^7.0", + "symfony/property-access": "^4.4|^5.4|^6.0|^7.0", + "symfony/security-bundle": "^4.4|^5.4|^6.0|^7.0", + "symfony/translation-contracts": "^1.0|^2.0|^3.0" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^4.4|^5.4|^6.0|^7.0", + "symfony/framework-bundle": "^4.4|^5.4|^6.0|^7.0", + "symfony/phpunit-bridge": "^4.4|^5.4|^6.0|^7.0", + "symfony/security-guard": "^4.4|^5.4|^6.0|^7.0", + "symfony/var-dumper": "^4.4|^5.4|^6.0|^7.0", + "symfony/yaml": "^4.4|^5.4|^6.0|^7.0" + }, + "suggest": { + "gesdinet/jwt-refresh-token-bundle": "Implements a refresh token system over Json Web Tokens in Symfony", + "spomky-labs/lexik-jose-bridge": "Provides a JWT Token encoder with encryption support" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Lexik\\Bundle\\JWTAuthenticationBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Barthe", + "email": "j.barthe@lexik.fr", + "homepage": "https://github.com/jeremyb" + }, + { + "name": "Nicolas Cabot", + "email": "n.cabot@lexik.fr", + "homepage": "https://github.com/slashfan" + }, + { + "name": "Cedric Girard", + "email": "c.girard@lexik.fr", + "homepage": "https://github.com/cedric-g" + }, + { + "name": "Dev Lexik", + "email": "dev@lexik.fr", + "homepage": "https://github.com/lexik" + }, + { + "name": "Robin Chalas", + "email": "robin.chalas@gmail.com", + "homepage": "https://github.com/chalasr" + }, + { + "name": "Lexik Community", + "homepage": "https://github.com/lexik/LexikJWTAuthenticationBundle/graphs/contributors" + } + ], + "description": "This bundle provides JWT authentication for your Symfony REST API", + "homepage": "https://github.com/lexik/LexikJWTAuthenticationBundle", + "keywords": [ + "Authentication", + "JWS", + "api", + "bundle", + "jwt", + "rest", + "symfony" + ], + "support": { + "issues": "https://github.com/lexik/LexikJWTAuthenticationBundle/issues", + "source": "https://github.com/lexik/LexikJWTAuthenticationBundle/tree/v2.20.3" + }, + "funding": [ + { + "url": "https://github.com/chalasr", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/lexik/jwt-authentication-bundle", + "type": "tidelift" + } + ], + "time": "2023-12-14T15:58:11+00:00" + }, { "name": "monolog/monolog", "version": "3.5.0", @@ -1660,6 +1918,73 @@ ], "time": "2023-10-27T15:32:31+00:00" }, + { + "name": "namshi/jose", + "version": "7.2.3", + "source": { + "type": "git", + "url": "https://github.com/namshi/jose.git", + "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/namshi/jose/zipball/89a24d7eb3040e285dd5925fcad992378b82bcff", + "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff", + "shasum": "" + }, + "require": { + "ext-date": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-spl": "*", + "php": ">=5.5", + "symfony/polyfill-php56": "^1.0" + }, + "require-dev": { + "phpseclib/phpseclib": "^2.0", + "phpunit/phpunit": "^4.5|^5.0", + "satooshi/php-coveralls": "^1.0" + }, + "suggest": { + "ext-openssl": "Allows to use OpenSSL as crypto engine.", + "phpseclib/phpseclib": "Allows to use Phpseclib as crypto engine, use version ^2.0." + }, + "type": "library", + "autoload": { + "psr-4": { + "Namshi\\JOSE\\": "src/Namshi/JOSE/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Nadalin", + "email": "alessandro.nadalin@gmail.com" + }, + { + "name": "Alessandro Cinelli (cirpo)", + "email": "alessandro.cinelli@gmail.com" + } + ], + "description": "JSON Object Signing and Encryption library for PHP.", + "keywords": [ + "JSON Web Signature", + "JSON Web Token", + "JWS", + "json", + "jwt", + "token" + ], + "support": { + "issues": "https://github.com/namshi/jose/issues", + "source": "https://github.com/namshi/jose/tree/master" + }, + "time": "2016-12-05T07:27:31+00:00" + }, { "name": "nelmio/cors-bundle", "version": "2.4.0", @@ -1834,16 +2159,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.7.3", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" + "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fad452781b3d774e3337b0c0b245dd8e5a4455fc", + "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc", "shasum": "" }, "require": { @@ -1886,22 +2211,22 @@ "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.7.3" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.0" }, - "time": "2023-08-12T11:01:26+00:00" + "time": "2024-01-11T11:49:22+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.24.4", + "version": "1.25.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496" + "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6bd0c26f3786cd9b7c359675cb789e35a8e07496", - "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bd84b629c8de41aa2ae82c067c955e06f1b00240", + "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240", "shasum": "" }, "require": { @@ -1933,9 +2258,9 @@ "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.24.4" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.25.0" }, - "time": "2023-11-26T18:29:22+00:00" + "time": "2024-01-04T17:06:16+00:00" }, { "name": "psr/cache", @@ -2314,16 +2639,16 @@ }, { "name": "symfony/cache", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "5e2376f726d61541b9617512e374808d12c1dc22" + "reference": "378e30a864c868d635353f103a5a5e7569f029ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/5e2376f726d61541b9617512e374808d12c1dc22", - "reference": "5e2376f726d61541b9617512e374808d12c1dc22", + "url": "https://api.github.com/repos/symfony/cache/zipball/378e30a864c868d635353f103a5a5e7569f029ec", + "reference": "378e30a864c868d635353f103a5a5e7569f029ec", "shasum": "" }, "require": { @@ -2390,7 +2715,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.0.0" + "source": "https://github.com/symfony/cache/tree/v7.0.2" }, "funding": [ { @@ -2406,7 +2731,7 @@ "type": "tidelift" } ], - "time": "2023-11-25T15:40:35+00:00" + "time": "2023-12-29T15:37:40+00:00" }, { "name": "symfony/cache-contracts", @@ -2486,16 +2811,16 @@ }, { "name": "symfony/clock", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "c696b075befdd4bcffe5ef2eab9a32a1a9c0d29d" + "reference": "67c5ae749ebabe7d8c84c3cab2544331eee7d2cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/c696b075befdd4bcffe5ef2eab9a32a1a9c0d29d", - "reference": "c696b075befdd4bcffe5ef2eab9a32a1a9c0d29d", + "url": "https://api.github.com/repos/symfony/clock/zipball/67c5ae749ebabe7d8c84c3cab2544331eee7d2cf", + "reference": "67c5ae749ebabe7d8c84c3cab2544331eee7d2cf", "shasum": "" }, "require": { @@ -2540,7 +2865,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.0.0" + "source": "https://github.com/symfony/clock/tree/v7.0.2" }, "funding": [ { @@ -2556,7 +2881,7 @@ "type": "tidelift" } ], - "time": "2023-11-25T20:15:12+00:00" + "time": "2023-12-27T08:42:13+00:00" }, { "name": "symfony/config", @@ -2635,16 +2960,16 @@ }, { "name": "symfony/console", - "version": "v7.0.1", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "cdce5c684b2f920bb1343deecdfba356ffad83d5" + "reference": "f8587c4cdc5acad67af71c37db34ef03af91e59c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/cdce5c684b2f920bb1343deecdfba356ffad83d5", - "reference": "cdce5c684b2f920bb1343deecdfba356ffad83d5", + "url": "https://api.github.com/repos/symfony/console/zipball/f8587c4cdc5acad67af71c37db34ef03af91e59c", + "reference": "f8587c4cdc5acad67af71c37db34ef03af91e59c", "shasum": "" }, "require": { @@ -2708,7 +3033,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.0.1" + "source": "https://github.com/symfony/console/tree/v7.0.2" }, "funding": [ { @@ -2724,20 +3049,20 @@ "type": "tidelift" } ], - "time": "2023-12-01T15:10:06+00:00" + "time": "2023-12-10T16:54:46+00:00" }, { "name": "symfony/dependency-injection", - "version": "v7.0.1", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "f6667642954bce638733f254c39e5b5700b47ba4" + "reference": "bd25ef7c937b9da12510bdc4f1c66728f19620e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f6667642954bce638733f254c39e5b5700b47ba4", - "reference": "f6667642954bce638733f254c39e5b5700b47ba4", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/bd25ef7c937b9da12510bdc4f1c66728f19620e3", + "reference": "bd25ef7c937b9da12510bdc4f1c66728f19620e3", "shasum": "" }, "require": { @@ -2788,7 +3113,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/v7.0.1" + "source": "https://github.com/symfony/dependency-injection/tree/v7.0.2" }, "funding": [ { @@ -2804,7 +3129,7 @@ "type": "tidelift" } ], - "time": "2023-12-01T15:10:06+00:00" + "time": "2023-12-28T19:18:20+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2875,16 +3200,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "5e8e95e8389d03f2f3ae16a6c7c804849ed483b5" + "reference": "9c0ce8ff41c25fbee07cd3235e9d6f0d6505b8b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/5e8e95e8389d03f2f3ae16a6c7c804849ed483b5", - "reference": "5e8e95e8389d03f2f3ae16a6c7c804849ed483b5", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/9c0ce8ff41c25fbee07cd3235e9d6f0d6505b8b3", + "reference": "9c0ce8ff41c25fbee07cd3235e9d6f0d6505b8b3", "shasum": "" }, "require": { @@ -2961,7 +3286,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.0.0" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.0.2" }, "funding": [ { @@ -2977,20 +3302,20 @@ "type": "tidelift" } ], - "time": "2023-11-17T16:04:05+00:00" + "time": "2023-12-27T08:42:13+00:00" }, { "name": "symfony/doctrine-messenger", - "version": "v7.0.1", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "6bfd3c99510b702cd3ff3a470322df6315d9a21d" + "reference": "edd6c474878bc6a6ee3b79c3210771357f6afad3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/6bfd3c99510b702cd3ff3a470322df6315d9a21d", - "reference": "6bfd3c99510b702cd3ff3a470322df6315d9a21d", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/edd6c474878bc6a6ee3b79c3210771357f6afad3", + "reference": "edd6c474878bc6a6ee3b79c3210771357f6afad3", "shasum": "" }, "require": { @@ -3033,7 +3358,7 @@ "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v7.0.1" + "source": "https://github.com/symfony/doctrine-messenger/tree/v7.0.2" }, "funding": [ { @@ -3049,20 +3374,20 @@ "type": "tidelift" } ], - "time": "2023-12-01T09:26:31+00:00" + "time": "2023-12-27T08:42:13+00:00" }, { "name": "symfony/dotenv", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "782d55cb978921499086df75888bda88888ad1c3" + "reference": "1e3e123fd1887fb2097ad38205a9a866a52d4dcc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/782d55cb978921499086df75888bda88888ad1c3", - "reference": "782d55cb978921499086df75888bda88888ad1c3", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/1e3e123fd1887fb2097ad38205a9a866a52d4dcc", + "reference": "1e3e123fd1887fb2097ad38205a9a866a52d4dcc", "shasum": "" }, "require": { @@ -3107,7 +3432,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v7.0.0" + "source": "https://github.com/symfony/dotenv/tree/v7.0.2" }, "funding": [ { @@ -3123,7 +3448,7 @@ "type": "tidelift" } ], - "time": "2023-10-26T18:22:49+00:00" + "time": "2023-12-28T19:18:20+00:00" }, { "name": "symfony/error-handler", @@ -3202,16 +3527,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "c459b40ffe67c49af6fd392aac374c9edf8a027e" + "reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c459b40ffe67c49af6fd392aac374c9edf8a027e", - "reference": "c459b40ffe67c49af6fd392aac374c9edf8a027e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/098b62ae81fdd6cbf941f355059f617db28f4f9a", + "reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a", "shasum": "" }, "require": { @@ -3262,7 +3587,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/v7.0.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.2" }, "funding": [ { @@ -3278,7 +3603,7 @@ "type": "tidelift" } ], - "time": "2023-07-27T16:29:09+00:00" + "time": "2023-12-27T22:24:19+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -3358,16 +3683,16 @@ }, { "name": "symfony/expression-language", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "46520d885b340f44a369967835a4bec178d7ab3d" + "reference": "d88bfcc37230f6ead9c6f713dc977daf26ddffce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/46520d885b340f44a369967835a4bec178d7ab3d", - "reference": "46520d885b340f44a369967835a4bec178d7ab3d", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/d88bfcc37230f6ead9c6f713dc977daf26ddffce", + "reference": "d88bfcc37230f6ead9c6f713dc977daf26ddffce", "shasum": "" }, "require": { @@ -3401,7 +3726,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v7.0.0" + "source": "https://github.com/symfony/expression-language/tree/v7.0.2" }, "funding": [ { @@ -3417,7 +3742,7 @@ "type": "tidelift" } ], - "time": "2023-07-27T16:29:09+00:00" + "time": "2023-12-10T16:54:46+00:00" }, { "name": "symfony/filesystem", @@ -3548,16 +3873,16 @@ }, { "name": "symfony/flex", - "version": "v2.4.2", + "version": "v2.4.3", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "67ee785f1aedada76461de7a7ec10cd7f8ff8d36" + "reference": "6b44ac75c7f07f48159ec36c2d21ef8cf48a21b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/67ee785f1aedada76461de7a7ec10cd7f8ff8d36", - "reference": "67ee785f1aedada76461de7a7ec10cd7f8ff8d36", + "url": "https://api.github.com/repos/symfony/flex/zipball/6b44ac75c7f07f48159ec36c2d21ef8cf48a21b1", + "reference": "6b44ac75c7f07f48159ec36c2d21ef8cf48a21b1", "shasum": "" }, "require": { @@ -3593,7 +3918,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v2.4.2" + "source": "https://github.com/symfony/flex/tree/v2.4.3" }, "funding": [ { @@ -3609,7 +3934,7 @@ "type": "tidelift" } ], - "time": "2023-12-05T14:09:35+00:00" + "time": "2024-01-02T11:08:32+00:00" }, { "name": "symfony/form", @@ -3709,16 +4034,16 @@ }, { "name": "symfony/framework-bundle", - "version": "v7.0.1", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "71f790cc6a81828b810c830ad72b1bc4c8ceaf74" + "reference": "c647b0162e2190cbcd4a21174482af645e11367c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/71f790cc6a81828b810c830ad72b1bc4c8ceaf74", - "reference": "71f790cc6a81828b810c830ad72b1bc4c8ceaf74", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/c647b0162e2190cbcd4a21174482af645e11367c", + "reference": "c647b0162e2190cbcd4a21174482af645e11367c", "shasum": "" }, "require": { @@ -3835,7 +4160,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/v7.0.1" + "source": "https://github.com/symfony/framework-bundle/tree/v7.0.2" }, "funding": [ { @@ -3851,20 +4176,20 @@ "type": "tidelift" } ], - "time": "2023-12-01T16:37:31+00:00" + "time": "2023-12-29T15:37:40+00:00" }, { "name": "symfony/http-client", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "c3e90d09b3c45a5d47170e81a712d51c352cbc68" + "reference": "db714986d3b84330bb6196fdb201c9f79b3a8853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/c3e90d09b3c45a5d47170e81a712d51c352cbc68", - "reference": "c3e90d09b3c45a5d47170e81a712d51c352cbc68", + "url": "https://api.github.com/repos/symfony/http-client/zipball/db714986d3b84330bb6196fdb201c9f79b3a8853", + "reference": "db714986d3b84330bb6196fdb201c9f79b3a8853", "shasum": "" }, "require": { @@ -3927,7 +4252,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.0.0" + "source": "https://github.com/symfony/http-client/tree/v7.0.2" }, "funding": [ { @@ -3943,7 +4268,7 @@ "type": "tidelift" } ], - "time": "2023-11-29T08:40:23+00:00" + "time": "2023-12-02T12:51:19+00:00" }, { "name": "symfony/http-client-contracts", @@ -4102,16 +4427,16 @@ }, { "name": "symfony/http-kernel", - "version": "v7.0.1", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "4787639523dcdda32f69063f7fca2ad709f3c6d2" + "reference": "237d3008bc3f5db3e066e348dc0a6435d70a52bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4787639523dcdda32f69063f7fca2ad709f3c6d2", - "reference": "4787639523dcdda32f69063f7fca2ad709f3c6d2", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/237d3008bc3f5db3e066e348dc0a6435d70a52bb", + "reference": "237d3008bc3f5db3e066e348dc0a6435d70a52bb", "shasum": "" }, "require": { @@ -4194,7 +4519,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/v7.0.1" + "source": "https://github.com/symfony/http-kernel/tree/v7.0.2" }, "funding": [ { @@ -4210,20 +4535,20 @@ "type": "tidelift" } ], - "time": "2023-12-01T17:08:48+00:00" + "time": "2023-12-30T15:41:17+00:00" }, { "name": "symfony/intl", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "a2bf3df1fe6ca7ed9aaf2d3f7d7a33b5529b021d" + "reference": "5fbee19d24354bbd77b300971eb38469ddbfd7fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/a2bf3df1fe6ca7ed9aaf2d3f7d7a33b5529b021d", - "reference": "a2bf3df1fe6ca7ed9aaf2d3f7d7a33b5529b021d", + "url": "https://api.github.com/repos/symfony/intl/zipball/5fbee19d24354bbd77b300971eb38469ddbfd7fc", + "reference": "5fbee19d24354bbd77b300971eb38469ddbfd7fc", "shasum": "" }, "require": { @@ -4276,7 +4601,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v7.0.0" + "source": "https://github.com/symfony/intl/tree/v7.0.2" }, "funding": [ { @@ -4292,20 +4617,20 @@ "type": "tidelift" } ], - "time": "2023-10-28T23:12:22+00:00" + "time": "2023-12-27T08:42:13+00:00" }, { "name": "symfony/mailer", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "5a0ff09429d34763a5569596b1793df1f07ac2d0" + "reference": "c51c8f411062ef8fec837c76b0dad15dd5a6ab16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/5a0ff09429d34763a5569596b1793df1f07ac2d0", - "reference": "5a0ff09429d34763a5569596b1793df1f07ac2d0", + "url": "https://api.github.com/repos/symfony/mailer/zipball/c51c8f411062ef8fec837c76b0dad15dd5a6ab16", + "reference": "c51c8f411062ef8fec837c76b0dad15dd5a6ab16", "shasum": "" }, "require": { @@ -4356,7 +4681,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.0.0" + "source": "https://github.com/symfony/mailer/tree/v7.0.2" }, "funding": [ { @@ -4372,7 +4697,7 @@ "type": "tidelift" } ], - "time": "2023-11-14T09:46:33+00:00" + "time": "2023-12-19T11:23:03+00:00" }, { "name": "symfony/messenger", @@ -5341,6 +5666,74 @@ ], "time": "2023-07-28T09:04:16+00:00" }, + { + "name": "symfony/polyfill-php56", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "metapackage", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" + }, + "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": "2020-10-23T14:02:19+00:00" + }, { "name": "symfony/polyfill-php83", "version": "v1.28.0", @@ -5423,16 +5816,16 @@ }, { "name": "symfony/process", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "13bdb1670c7f510494e04fcb2bfa29af63db9c0d" + "reference": "acd3eb5cb02382c1cb0287ba29b2908cc6ffa83a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/13bdb1670c7f510494e04fcb2bfa29af63db9c0d", - "reference": "13bdb1670c7f510494e04fcb2bfa29af63db9c0d", + "url": "https://api.github.com/repos/symfony/process/zipball/acd3eb5cb02382c1cb0287ba29b2908cc6ffa83a", + "reference": "acd3eb5cb02382c1cb0287ba29b2908cc6ffa83a", "shasum": "" }, "require": { @@ -5464,7 +5857,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.0.0" + "source": "https://github.com/symfony/process/tree/v7.0.2" }, "funding": [ { @@ -5480,7 +5873,7 @@ "type": "tidelift" } ], - "time": "2023-11-20T16:43:42+00:00" + "time": "2023-12-24T09:15:37+00:00" }, { "name": "symfony/property-access", @@ -5643,16 +6036,16 @@ }, { "name": "symfony/routing", - "version": "v7.0.1", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "fc55062907669835af6408558ae4d1dafef74b1e" + "reference": "78866be67255f42716271e33d1d8b64eb6e47bd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/fc55062907669835af6408558ae4d1dafef74b1e", - "reference": "fc55062907669835af6408558ae4d1dafef74b1e", + "url": "https://api.github.com/repos/symfony/routing/zipball/78866be67255f42716271e33d1d8b64eb6e47bd9", + "reference": "78866be67255f42716271e33d1d8b64eb6e47bd9", "shasum": "" }, "require": { @@ -5704,7 +6097,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.0.1" + "source": "https://github.com/symfony/routing/tree/v7.0.2" }, "funding": [ { @@ -5720,7 +6113,7 @@ "type": "tidelift" } ], - "time": "2023-12-01T15:10:06+00:00" + "time": "2023-12-29T15:37:40+00:00" }, { "name": "symfony/runtime", @@ -5803,16 +6196,16 @@ }, { "name": "symfony/security-bundle", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "4138552567cdc211ec2e13f2642339b64219e343" + "reference": "5c781fc5cc853286613d7fec1ecbe00cfbec967e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/4138552567cdc211ec2e13f2642339b64219e343", - "reference": "4138552567cdc211ec2e13f2642339b64219e343", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/5c781fc5cc853286613d7fec1ecbe00cfbec967e", + "reference": "5c781fc5cc853286613d7fec1ecbe00cfbec967e", "shasum": "" }, "require": { @@ -5894,7 +6287,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/v7.0.0" + "source": "https://github.com/symfony/security-bundle/tree/v7.0.2" }, "funding": [ { @@ -5910,7 +6303,7 @@ "type": "tidelift" } ], - "time": "2023-10-31T17:59:56+00:00" + "time": "2023-12-24T09:15:37+00:00" }, { "name": "symfony/security-core", @@ -6152,16 +6545,16 @@ }, { "name": "symfony/serializer", - "version": "v7.0.1", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "9c8f67c1444adf6dbcf90fb76da5b2f5c43af0ff" + "reference": "dd7d7612f9ae288889caba4bdff79424ce4ffdf0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/9c8f67c1444adf6dbcf90fb76da5b2f5c43af0ff", - "reference": "9c8f67c1444adf6dbcf90fb76da5b2f5c43af0ff", + "url": "https://api.github.com/repos/symfony/serializer/zipball/dd7d7612f9ae288889caba4bdff79424ce4ffdf0", + "reference": "dd7d7612f9ae288889caba4bdff79424ce4ffdf0", "shasum": "" }, "require": { @@ -6227,7 +6620,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/v7.0.1" + "source": "https://github.com/symfony/serializer/tree/v7.0.2" }, "funding": [ { @@ -6243,25 +6636,25 @@ "type": "tidelift" } ], - "time": "2023-12-01T15:10:06+00:00" + "time": "2023-12-29T15:37:40+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.4.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838" + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838", - "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -6309,7 +6702,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" }, "funding": [ { @@ -6325,7 +6718,7 @@ "type": "tidelift" } ], - "time": "2023-07-30T20:28:31+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { "name": "symfony/stopwatch", @@ -6391,16 +6784,16 @@ }, { "name": "symfony/string", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "92bd2bfbba476d4a1838e5e12168bef2fd1e6620" + "reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/92bd2bfbba476d4a1838e5e12168bef2fd1e6620", - "reference": "92bd2bfbba476d4a1838e5e12168bef2fd1e6620", + "url": "https://api.github.com/repos/symfony/string/zipball/cc78f14f91f5e53b42044d0620961c48028ff9f5", + "reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5", "shasum": "" }, "require": { @@ -6457,7 +6850,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.0.0" + "source": "https://github.com/symfony/string/tree/v7.0.2" }, "funding": [ { @@ -6473,20 +6866,20 @@ "type": "tidelift" } ], - "time": "2023-11-29T08:40:23+00:00" + "time": "2023-12-10T16:54:46+00:00" }, { "name": "symfony/translation", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "ab5a14723f23159854bf91b41255cad23b929fab" + "reference": "a7566ad85f4328c4a8cdaf441fcfab18ece995e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/ab5a14723f23159854bf91b41255cad23b929fab", - "reference": "ab5a14723f23159854bf91b41255cad23b929fab", + "url": "https://api.github.com/repos/symfony/translation/zipball/a7566ad85f4328c4a8cdaf441fcfab18ece995e1", + "reference": "a7566ad85f4328c4a8cdaf441fcfab18ece995e1", "shasum": "" }, "require": { @@ -6551,7 +6944,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.0.0" + "source": "https://github.com/symfony/translation/tree/v7.0.2" }, "funding": [ { @@ -6567,20 +6960,20 @@ "type": "tidelift" } ], - "time": "2023-11-29T08:40:23+00:00" + "time": "2023-12-19T11:23:03+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.4.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5" + "reference": "06450585bf65e978026bda220cdebca3f867fde7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dee0c6e5b4c07ce851b462530088e64b255ac9c5", - "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/06450585bf65e978026bda220cdebca3f867fde7", + "reference": "06450585bf65e978026bda220cdebca3f867fde7", "shasum": "" }, "require": { @@ -6629,7 +7022,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.1" }, "funding": [ { @@ -6645,20 +7038,20 @@ "type": "tidelift" } ], - "time": "2023-07-25T15:08:44+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { "name": "symfony/twig-bridge", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "883b7b035670b02e06f1dd6cbe71fa1dabcdec7d" + "reference": "d6236c6e75ee70317a27f0fd4c3f9bb956f22366" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/883b7b035670b02e06f1dd6cbe71fa1dabcdec7d", - "reference": "883b7b035670b02e06f1dd6cbe71fa1dabcdec7d", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/d6236c6e75ee70317a27f0fd4c3f9bb956f22366", + "reference": "d6236c6e75ee70317a27f0fd4c3f9bb956f22366", "shasum": "" }, "require": { @@ -6737,7 +7130,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v7.0.0" + "source": "https://github.com/symfony/twig-bridge/tree/v7.0.2" }, "funding": [ { @@ -6753,7 +7146,7 @@ "type": "tidelift" } ], - "time": "2023-11-26T15:16:53+00:00" + "time": "2023-12-15T12:36:57+00:00" }, { "name": "symfony/twig-bundle", @@ -6841,16 +7234,16 @@ }, { "name": "symfony/validator", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "616b39ffb22c1519f7fd2582b8052cde4c2d0b9f" + "reference": "24911cba25f0ef2a8e23327c100664502e1b95cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/616b39ffb22c1519f7fd2582b8052cde4c2d0b9f", - "reference": "616b39ffb22c1519f7fd2582b8052cde4c2d0b9f", + "url": "https://api.github.com/repos/symfony/validator/zipball/24911cba25f0ef2a8e23327c100664502e1b95cb", + "reference": "24911cba25f0ef2a8e23327c100664502e1b95cb", "shasum": "" }, "require": { @@ -6915,7 +7308,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.0.0" + "source": "https://github.com/symfony/validator/tree/v7.0.2" }, "funding": [ { @@ -6931,20 +7324,20 @@ "type": "tidelift" } ], - "time": "2023-11-29T08:40:23+00:00" + "time": "2023-12-30T09:57:06+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "cf0220fc7607476fd0d001ab3ed9e830d1fdda56" + "reference": "5f6f1a527002068f6d40fda068399220eabebf71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cf0220fc7607476fd0d001ab3ed9e830d1fdda56", - "reference": "cf0220fc7607476fd0d001ab3ed9e830d1fdda56", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5f6f1a527002068f6d40fda068399220eabebf71", + "reference": "5f6f1a527002068f6d40fda068399220eabebf71", "shasum": "" }, "require": { @@ -6998,7 +7391,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.0.0" + "source": "https://github.com/symfony/var-dumper/tree/v7.0.2" }, "funding": [ { @@ -7014,20 +7407,20 @@ "type": "tidelift" } ], - "time": "2023-11-27T12:39:18+00:00" + "time": "2023-12-28T19:18:20+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.0.1", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "a3d7c877414fcd59ab7075ecdc3b8f9c00f7bcc3" + "reference": "345c62fefe92243c3a06fc0cc65f2ec1a47e0764" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/a3d7c877414fcd59ab7075ecdc3b8f9c00f7bcc3", - "reference": "a3d7c877414fcd59ab7075ecdc3b8f9c00f7bcc3", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/345c62fefe92243c3a06fc0cc65f2ec1a47e0764", + "reference": "345c62fefe92243c3a06fc0cc65f2ec1a47e0764", "shasum": "" }, "require": { @@ -7072,7 +7465,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.0.1" + "source": "https://github.com/symfony/var-exporter/tree/v7.0.2" }, "funding": [ { @@ -7088,7 +7481,7 @@ "type": "tidelift" } ], - "time": "2023-11-30T11:38:21+00:00" + "time": "2023-12-27T08:42:13+00:00" }, { "name": "symfony/web-link", @@ -7794,16 +8187,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", "shasum": "" }, "require": { @@ -7829,11 +8222,6 @@ "ext-mbstring": "Required for multibyte Unicode string functionality." }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.21-dev" - } - }, "autoload": { "psr-4": { "Faker\\": "src/Faker/" @@ -7856,9 +8244,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" }, - "time": "2023-06-12T08:44:38+00:00" + "time": "2024-01-02T13:46:09+00:00" }, { "name": "masterminds/html5", @@ -8054,16 +8442,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.17.1", + "version": "v4.18.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999", + "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999", "shasum": "" }, "require": { @@ -8104,9 +8492,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0" }, - "time": "2023-08-13T19:53:39+00:00" + "time": "2023-12-10T21:03:43+00:00" }, { "name": "phar-io/manifest", @@ -8221,23 +8609,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.29", + "version": "9.2.30", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" + "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca2bd87d2f9215904682a9cb9bb37dda98e76089", + "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -8287,7 +8675,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.30" }, "funding": [ { @@ -8295,7 +8683,7 @@ "type": "github" } ], - "time": "2023-09-19T04:57:46+00:00" + "time": "2023-12-22T06:47:57+00:00" }, { "name": "phpunit/php-file-iterator", @@ -8884,20 +9272,20 @@ }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -8929,7 +9317,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -8937,7 +9325,7 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", @@ -9211,20 +9599,20 @@ }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -9256,7 +9644,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -9264,7 +9652,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -9973,16 +10361,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v7.0.1", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "c2d059b25e31274157dd7727131cd1cf33650207" + "reference": "92df075808c9437beca9540e25ae0c40eea1c061" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/c2d059b25e31274157dd7727131cd1cf33650207", - "reference": "c2d059b25e31274157dd7727131cd1cf33650207", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/92df075808c9437beca9540e25ae0c40eea1c061", + "reference": "92df075808c9437beca9540e25ae0c40eea1c061", "shasum": "" }, "require": { @@ -10034,7 +10422,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.0.1" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.0.2" }, "funding": [ { @@ -10050,20 +10438,20 @@ "type": "tidelift" } ], - "time": "2023-12-01T09:26:31+00:00" + "time": "2023-12-19T11:23:03+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v7.0.0", + "version": "v7.0.2", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "e3bc3568b201fe1dec17352fef86868b74fa0226" + "reference": "b3746379ad31d02a578aff360caacf521e753b85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/e3bc3568b201fe1dec17352fef86868b74fa0226", - "reference": "e3bc3568b201fe1dec17352fef86868b74fa0226", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/b3746379ad31d02a578aff360caacf521e753b85", + "reference": "b3746379ad31d02a578aff360caacf521e753b85", "shasum": "" }, "require": { @@ -10115,7 +10503,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.0.0" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.0.2" }, "funding": [ { @@ -10131,7 +10519,7 @@ "type": "tidelift" } ], - "time": "2023-11-18T18:20:00+00:00" + "time": "2023-12-27T08:42:13+00:00" }, { "name": "theseer/tokenizer", @@ -10244,16 +10632,16 @@ }, { "name": "zenstruck/browser", - "version": "v1.6.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/zenstruck/browser.git", - "reference": "9e931f5d5a62007f6642bec47992f54574ebc5f1" + "reference": "cf514edcf66cd889baeb29870c29a0494d32aff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zenstruck/browser/zipball/9e931f5d5a62007f6642bec47992f54574ebc5f1", - "reference": "9e931f5d5a62007f6642bec47992f54574ebc5f1", + "url": "https://api.github.com/repos/zenstruck/browser/zipball/cf514edcf66cd889baeb29870c29a0494d32aff4", + "reference": "cf514edcf66cd889baeb29870c29a0494d32aff4", "shasum": "" }, "require": { @@ -10271,7 +10659,7 @@ "justinrainbow/json-schema": "^5.2", "mtdowling/jmespath.php": "^2.6", "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "^9.5|^10.4", "symfony/mime": "^5.4|^6.0|^7.0", "symfony/panther": "^1.1|^2.0.1", "symfony/phpunit-bridge": "^6.0|^7.0", @@ -10306,7 +10694,7 @@ ], "support": { "issues": "https://github.com/zenstruck/browser/issues", - "source": "https://github.com/zenstruck/browser/tree/v1.6.0" + "source": "https://github.com/zenstruck/browser/tree/v1.7.0" }, "funding": [ { @@ -10314,7 +10702,7 @@ "type": "github" } ], - "time": "2023-10-31T17:14:32+00:00" + "time": "2023-12-14T21:04:01+00:00" }, { "name": "zenstruck/callback", @@ -10374,16 +10762,16 @@ }, { "name": "zenstruck/foundry", - "version": "v1.36.0", + "version": "v1.36.1", "source": { "type": "git", "url": "https://github.com/zenstruck/foundry.git", - "reference": "1aefc394059a315ef8567de9745efd5ba6aacfd0" + "reference": "c32de571213e05e718eb05bfaf8d8b35cf8610df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zenstruck/foundry/zipball/1aefc394059a315ef8567de9745efd5ba6aacfd0", - "reference": "1aefc394059a315ef8567de9745efd5ba6aacfd0", + "url": "https://api.github.com/repos/zenstruck/foundry/zipball/c32de571213e05e718eb05bfaf8d8b35cf8610df", + "reference": "c32de571213e05e718eb05bfaf8d8b35cf8610df", "shasum": "" }, "require": { @@ -10401,13 +10789,15 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4", - "dama/doctrine-test-bundle": "^7.0", + "dama/doctrine-test-bundle": "^7.0|^8.0", "doctrine/doctrine-bundle": "^2.5", "doctrine/doctrine-migrations-bundle": "^2.2|^3.0", - "doctrine/mongodb-odm": "^2.0", - "doctrine/mongodb-odm-bundle": "^4.4.0", - "doctrine/orm": "^2.9", - "matthiasnoback/symfony-dependency-injection-test": "^4.1", + "doctrine/mongodb-odm": "^2.4", + "doctrine/mongodb-odm-bundle": "^4.4.0|^5.0", + "doctrine/orm": "^2.11", + "matthiasnoback/symfony-dependency-injection-test": "^4.1|^5.0", + "phpunit/phpunit": "^9.5.0", + "symfony/dotenv": "^5.4|^6.0|^7.0", "symfony/framework-bundle": "^5.4|^6.0|^7.0", "symfony/maker-bundle": "^1.49", "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", @@ -10452,7 +10842,7 @@ ], "support": { "issues": "https://github.com/zenstruck/foundry/issues", - "source": "https://github.com/zenstruck/foundry/tree/v1.36.0" + "source": "https://github.com/zenstruck/foundry/tree/v1.36.1" }, "funding": [ { @@ -10460,7 +10850,7 @@ "type": "github" } ], - "time": "2023-10-13T18:44:57+00:00" + "time": "2023-12-14T23:19:08+00:00" } ], "aliases": [], diff --git a/config/bundles.php b/config/bundles.php index eaa8354..8ec8171 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -16,4 +16,5 @@ return [ Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], Zenstruck\Foundry\ZenstruckFoundryBundle::class => ['dev' => true, 'test' => true], Symfonycasts\MicroMapper\SymfonycastsMicroMapperBundle::class => ['all' => true], + Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true], ]; diff --git a/config/packages/api_platform.yaml b/config/packages/api_platform.yaml index 47fc8f5..3606a3f 100644 --- a/config/packages/api_platform.yaml +++ b/config/packages/api_platform.yaml @@ -19,3 +19,9 @@ api_platform: rfc_7807_compliant_errors: true event_listeners_backward_compatibility_layer: false keep_legacy_inflector: false + + swagger: + api_keys: + JWT: + name: Authorization + type: header \ No newline at end of file diff --git a/config/packages/lexik_jwt_authentication.yaml b/config/packages/lexik_jwt_authentication.yaml new file mode 100644 index 0000000..d7b6820 --- /dev/null +++ b/config/packages/lexik_jwt_authentication.yaml @@ -0,0 +1,5 @@ +lexik_jwt_authentication: + secret_key: '%env(resolve:JWT_SECRET_KEY)%' + public_key: '%env(resolve:JWT_PUBLIC_KEY)%' + pass_phrase: '%env(JWT_PASSPHRASE)%' + token_ttl: 3600 \ No newline at end of file diff --git a/config/packages/nelmio_cors.yaml b/config/packages/nelmio_cors.yaml index 9185145..04f41f0 100644 --- a/config/packages/nelmio_cors.yaml +++ b/config/packages/nelmio_cors.yaml @@ -1,19 +1,35 @@ nelmio_cors: - defaults: - origin_regex: true -# allow_origin: ['%env(CORS_ALLOW_ORIGIN)%'] -# allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE'] -# allow_headers: ['Content-Type', 'Authorization'] -# expose_headers: ['Link'] - expose_headers: ['*'] - allow_origin: [ '*' ] - allow_headers: [ '*' ] - allow_methods: ['GET', 'OPTIONS', 'POST', 'PATCH', 'DELETE'] - max_age: 3600 - paths: - '^/': null -# '^/api/': -# allow_origin: [ '*' ] -# allow_headers: [ '*' ] -# allow_methods: [ '*' ] -# max_age: 3600 + defaults: + allow_credentials: true + allow_origin: ['*'] + allow_headers: ['*'] + allow_methods: ['POST', 'PATCH', 'GET', 'DELETE', 'OPTIONS'] + expose_headers: [] + max_age: 3600 + hosts: [] + origin_regex: true + paths: + # Important api settings : + # Access-Control-Request-Method + '^/': ~ + +#nelmio_cors: +# defaults: +# allow_credentials: true +# origin_regex: false +## allow_origin: ['%env(CORS_ALLOW_ORIGIN)%'] +## allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE'] +## allow_headers: ['Content-Type', 'Authorization'] +## expose_headers: ['Link'] +# allow_origin: [ '*' ] +# allow_methods: ['*'] +## expose_headers: ['*'] +# allow_headers: [ '*' ] +# max_age: 3600 +# paths: +# '^/': null +## '^/api/': +## allow_origin: [ '*' ] +## allow_headers: [ '*' ] +## allow_methods: [ '*' ] +## max_age: 3600 diff --git a/config/packages/security.yaml b/config/packages/security.yaml index 3677c9f..08cc324 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -13,19 +13,18 @@ security: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false - main: - lazy: true + api: + pattern: ^/api/ + stateless: true provider: app_user_provider + jwt: ~ + main: json_login: - check_path: app_login - username_path: username + check_path: auth # The name in routes.yaml is enough for mapping + username_path: email password_path: password - - # activate different ways to authenticate - # https://symfony.com/doc/current/security.html#the-firewall - - # https://symfony.com/doc/current/security/impersonating_user.html - # switch_user: true + success_handler: lexik_jwt_authentication.handler.authentication_success + failure_handler: lexik_jwt_authentication.handler.authentication_failure # Easy way to control access for large sections of your site # Note: Only the *first* access control that matches will be used diff --git a/config/routes.yaml b/config/routes.yaml index 7c25751..4120cb0 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -3,4 +3,9 @@ controllers: path: ../src/Controller/ namespace: App\Controller type: attribute - stateless: false \ No newline at end of file + stateless: true + +# api/config/routes.yaml +auth: + path: /auth + methods: ['POST'] \ No newline at end of file diff --git a/migrations/Version20231214140601.php b/migrations/Version20231214140601.php deleted file mode 100644 index 581efd6..0000000 --- a/migrations/Version20231214140601.php +++ /dev/null @@ -1,35 +0,0 @@ -addSql('CREATE TABLE posting (id INT AUTO_INCREMENT NOT NULL, owner_id INT NOT NULL, message LONGTEXT NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_BD275D737E3C61F9 (owner_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE `user` (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(180) NOT NULL, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, roles JSON NOT NULL COMMENT \'(DC2Type:json)\', password VARCHAR(255) NOT NULL, active TINYINT(1) NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', UNIQUE INDEX UNIQ_8D93D649E7927C74 (email), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('ALTER TABLE posting ADD CONSTRAINT FK_BD275D737E3C61F9 FOREIGN KEY (owner_id) REFERENCES `user` (id)'); - } - - public function down(Schema $schema): void - { - // this down() migration is auto-generated, please modify it to your needs - $this->addSql('ALTER TABLE posting DROP FOREIGN KEY FK_BD275D737E3C61F9'); - $this->addSql('DROP TABLE posting'); - $this->addSql('DROP TABLE `user`'); - } -} diff --git a/migrations/Version20231221143009.php b/migrations/Version20231221143009.php new file mode 100644 index 0000000..c2bb9c7 --- /dev/null +++ b/migrations/Version20231221143009.php @@ -0,0 +1,45 @@ +addSql('CREATE TABLE api_token (id INT AUTO_INCREMENT NOT NULL, owned_by_id INT NOT NULL, expires_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\', token VARCHAR(68) NOT NULL, scopes JSON NOT NULL COMMENT \'(DC2Type:json)\', INDEX IDX_7BA2F5EB5E70BCD7 (owned_by_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE partner (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(255) NOT NULL, street VARCHAR(255) DEFAULT NULL, street_no VARCHAR(255) DEFAULT NULL, zip VARCHAR(255) DEFAULT NULL, city VARCHAR(255) DEFAULT NULL, country VARCHAR(255) DEFAULT NULL, website VARCHAR(255) DEFAULT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', logo VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE partner_contact (id INT AUTO_INCREMENT NOT NULL, partner_id INT NOT NULL, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, birthday DATE DEFAULT NULL, picture VARCHAR(255) DEFAULT NULL, position VARCHAR(255) DEFAULT NULL, phone VARCHAR(255) DEFAULT NULL, email VARCHAR(255) DEFAULT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_8B8885259393F8FE (partner_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE posting (id INT AUTO_INCREMENT NOT NULL, owner_id INT NOT NULL, message LONGTEXT NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_BD275D737E3C61F9 (owner_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE `user` (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(180) NOT NULL, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, roles JSON NOT NULL COMMENT \'(DC2Type:json)\', password VARCHAR(255) NOT NULL, active TINYINT(1) NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', UNIQUE INDEX UNIQ_8D93D649E7927C74 (email), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE api_token ADD CONSTRAINT FK_7BA2F5EB5E70BCD7 FOREIGN KEY (owned_by_id) REFERENCES `user` (id)'); + $this->addSql('ALTER TABLE partner_contact ADD CONSTRAINT FK_8B8885259393F8FE FOREIGN KEY (partner_id) REFERENCES partner (id)'); + $this->addSql('ALTER TABLE posting ADD CONSTRAINT FK_BD275D737E3C61F9 FOREIGN KEY (owner_id) REFERENCES `user` (id)'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE api_token DROP FOREIGN KEY FK_7BA2F5EB5E70BCD7'); + $this->addSql('ALTER TABLE partner_contact DROP FOREIGN KEY FK_8B8885259393F8FE'); + $this->addSql('ALTER TABLE posting DROP FOREIGN KEY FK_BD275D737E3C61F9'); + $this->addSql('DROP TABLE api_token'); + $this->addSql('DROP TABLE partner'); + $this->addSql('DROP TABLE partner_contact'); + $this->addSql('DROP TABLE posting'); + $this->addSql('DROP TABLE `user`'); + } +} diff --git a/src/ApiResource/PostingApi.php b/src/ApiResource/PostingApi.php index 385676d..e6ac88f 100644 --- a/src/ApiResource/PostingApi.php +++ b/src/ApiResource/PostingApi.php @@ -39,7 +39,7 @@ use Symfony\Component\Validator\Constraints\NotBlank; ) ], paginationItemsPerPage: 10, -// security: 'is_granted("ROLE_USER")', + security: 'is_granted("ROLE_USER")', provider: EntityToDtoStateProvider::class, processor: EntityClassDtoStateProcessor::class, stateOptions: new Options(entityClass: Posting::class), diff --git a/src/Controller/SecurityController.php b/src/Controller/SecurityController.php index b3ea2d9..f1a226f 100644 --- a/src/Controller/SecurityController.php +++ b/src/Controller/SecurityController.php @@ -13,7 +13,6 @@ use Symfony\Component\Security\Http\Attribute\CurrentUser; class SecurityController extends AbstractController { #[Route('/login', name: 'app_login', methods: ['POST'])] - #[Api] public function login(IriConverterInterface $iriConverter, #[CurrentUser] $user = null): Response { if (!$user) { diff --git a/src/Controller/TesController.php b/src/Controller/TesController.php new file mode 100644 index 0000000..520490e --- /dev/null +++ b/src/Controller/TesController.php @@ -0,0 +1,28 @@ + + * @date 22.12.23 + */ + + +namespace App\Controller; + + +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Security\Http\Attribute\IsGranted; + +class TesController extends AbstractController +{ + #[Route('/test')] + #[IsGranted('ROLE_USER')] + public function test() { + return new JsonResponse('jo'); + } + + #[Route('/foo')] + public function test2() { + return new JsonResponse('nenene'); + } +} \ No newline at end of file diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php index f2bf156..dc31a78 100644 --- a/src/DataFixtures/AppFixtures.php +++ b/src/DataFixtures/AppFixtures.php @@ -2,6 +2,7 @@ namespace App\DataFixtures; +use App\Factory\PartnerFactory; use App\Factory\PostingFactory; use App\Factory\UserFactory; use Doctrine\Bundle\FixturesBundle\Fixture; @@ -37,5 +38,7 @@ class AppFixtures extends Fixture 'owner' => UserFactory::random() ]; }); + + //PartnerFactory::createMany(50); } } diff --git a/src/Entity/ApiToken.php b/src/Entity/ApiToken.php new file mode 100644 index 0000000..4090105 --- /dev/null +++ b/src/Entity/ApiToken.php @@ -0,0 +1,93 @@ +token = $tokenType.bin2hex(random_bytes(32)); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getOwnedBy(): ?User + { + return $this->ownedBy; + } + + public function setOwnedBy(?User $ownedBy): self + { + $this->ownedBy = $ownedBy; + + return $this; + } + + public function getExpiresAt(): ?\DateTimeImmutable + { + return $this->expiresAt; + } + + public function setExpiresAt(?\DateTimeImmutable $expiresAt): self + { + $this->expiresAt = $expiresAt; + + return $this; + } + + public function getToken(): ?string + { + return $this->token; + } + + public function setToken(string $token): self + { + $this->token = $token; + + return $this; + } + + public function getScopes(): array + { + return $this->scopes; + } + + public function setScopes(array $scopes): self + { + $this->scopes = $scopes; + + return $this; + } + + public function isValid(): bool + { + return $this->expiresAt === null || $this->expiresAt > new \DateTimeImmutable(); + } +} diff --git a/src/Entity/Partner.php b/src/Entity/Partner.php new file mode 100644 index 0000000..308ff31 --- /dev/null +++ b/src/Entity/Partner.php @@ -0,0 +1,206 @@ +createdAt = new \DateTimeImmutable(); + $this->partnerContacts = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getName(): ?string + { + return $this->name; + } + + public function setName(string $name): static + { + $this->name = $name; + + return $this; + } + + public function getType(): ?string + { + return $this->type; + } + + public function setType(string $type): static + { + $this->type = $type; + + return $this; + } + + public function getStreet(): ?string + { + return $this->street; + } + + public function setStreet(?string $street): static + { + $this->street = $street; + + return $this; + } + + public function getStreetNo(): ?string + { + return $this->streetNo; + } + + public function setStreetNo(?string $streetNo): static + { + $this->streetNo = $streetNo; + + return $this; + } + + public function getZip(): ?string + { + return $this->zip; + } + + public function setZip(?string $zip): static + { + $this->zip = $zip; + + return $this; + } + + public function getCity(): ?string + { + return $this->city; + } + + public function setCity(?string $city): static + { + $this->city = $city; + + return $this; + } + + public function getCountry(): ?string + { + return $this->country; + } + + public function setCountry(?string $country): static + { + $this->country = $country; + + return $this; + } + + public function getWebsite(): ?string + { + return $this->website; + } + + public function setWebsite(?string $website): static + { + $this->website = $website; + + return $this; + } + + public function getCreatedAt(): ?\DateTimeImmutable + { + return $this->createdAt; + } + + /** + * @return Collection + */ + public function getPartnerContacts(): Collection + { + return $this->partnerContacts; + } + + public function addPartnerContact(PartnerContact $partnerContact): static + { + if (!$this->partnerContacts->contains($partnerContact)) { + $this->partnerContacts->add($partnerContact); + $partnerContact->setPartner($this); + } + + return $this; + } + + public function removePartnerContact(PartnerContact $partnerContact): static + { + if ($this->partnerContacts->removeElement($partnerContact)) { + // set the owning side to null (unless already changed) + if ($partnerContact->getPartner() === $this) { + $partnerContact->setPartner(null); + } + } + + return $this; + } + + public function getLogo(): ?string + { + return $this->logo; + } + + public function setLogo(?string $logo): static + { + $this->logo = $logo; + + return $this; + } + +} diff --git a/src/Entity/PartnerContact.php b/src/Entity/PartnerContact.php new file mode 100644 index 0000000..4a8f2b6 --- /dev/null +++ b/src/Entity/PartnerContact.php @@ -0,0 +1,162 @@ +createdAt = new \DateTimeImmutable(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getFirstName(): ?string + { + return $this->firstName; + } + + public function setFirstName(string $firstName): static + { + $this->firstName = $firstName; + + return $this; + } + + public function getLastName(): ?string + { + return $this->lastName; + } + + public function setLastName(string $lastName): static + { + $this->lastName = $lastName; + + return $this; + } + + public function getPartner(): ?Partner + { + return $this->partner; + } + + public function setPartner(?Partner $partner): static + { + $this->partner = $partner; + + return $this; + } + + public function getBirthday(): ?\DateTimeInterface + { + return $this->birthday; + } + + public function setBirthday(?\DateTimeInterface $birthday): static + { + $this->birthday = $birthday; + + return $this; + } + + public function getPicture(): ?string + { + return $this->picture; + } + + public function setPicture(?string $picture): static + { + $this->picture = $picture; + + return $this; + } + + public function getPosition(): ?string + { + return $this->position; + } + + public function setPosition(?string $position): static + { + $this->position = $position; + + return $this; + } + + public function getPhone(): ?string + { + return $this->phone; + } + + public function setPhone(?string $phone): static + { + $this->phone = $phone; + + return $this; + } + + public function getEmail(): ?string + { + return $this->email; + } + + public function setEmail(?string $email): static + { + $this->email = $email; + + return $this; + } + + public function getCreatedAt(): ?\DateTimeImmutable + { + return $this->createdAt; + } + + public function setCreatedAt(\DateTimeImmutable $createdAt): static + { + $this->createdAt = $createdAt; + + return $this; + } +} diff --git a/src/Enum/PartnerType.php b/src/Enum/PartnerType.php new file mode 100644 index 0000000..7e0425a --- /dev/null +++ b/src/Enum/PartnerType.php @@ -0,0 +1,15 @@ + + * @date 20.12.23 + */ + + +namespace App\Enum; + + +enum PartnerType: string { + case Customer = 'customer'; + case Supplier = 'supplier'; + case Service = 'service'; +} diff --git a/src/Factory/PartnerFactory.php b/src/Factory/PartnerFactory.php new file mode 100644 index 0000000..3a29c19 --- /dev/null +++ b/src/Factory/PartnerFactory.php @@ -0,0 +1,76 @@ + + * + * @method Partner|Proxy create(array|callable $attributes = []) + * @method static Partner|Proxy createOne(array $attributes = []) + * @method static Partner|Proxy find(object|array|mixed $criteria) + * @method static Partner|Proxy findOrCreate(array $attributes) + * @method static Partner|Proxy first(string $sortedField = 'id') + * @method static Partner|Proxy last(string $sortedField = 'id') + * @method static Partner|Proxy random(array $attributes = []) + * @method static Partner|Proxy randomOrCreate(array $attributes = []) + * @method static PartnerRepository|RepositoryProxy repository() + * @method static Partner[]|Proxy[] all() + * @method static Partner[]|Proxy[] createMany(int $number, array|callable $attributes = []) + * @method static Partner[]|Proxy[] createSequence(iterable|callable $sequence) + * @method static Partner[]|Proxy[] findBy(array $attributes) + * @method static Partner[]|Proxy[] randomRange(int $min, int $max, array $attributes = []) + * @method static Partner[]|Proxy[] randomSet(int $number, array $attributes = []) + */ +final class PartnerFactory extends ModelFactory +{ + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services + * + * @todo inject services if required + */ + public function __construct() + { + parent::__construct(); + } + + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories + * + * @todo add your default values here + */ + protected function getDefaults(): array + { + return [ + 'name' => self::faker()->text(255), + 'type' => self::faker()->randomElement(PartnerType::cases()), + 'street' => self::faker()->text(255), + 'streetNo' => self::faker()->text(255), + 'zip' => self::faker()->text(255), + 'city' => self::faker()->text(255), + 'country' => self::faker()->text(255), + 'website' => self::faker()->text(255), + ]; + } + + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization + */ + protected function initialize(): self + { + return $this + // ->afterInstantiate(function(Partner $partner): void {}) + ; + } + + protected static function getClass(): string + { + return Partner::class; + } +} diff --git a/src/Repository/ApiTokenRepository.php b/src/Repository/ApiTokenRepository.php new file mode 100644 index 0000000..9cd4e1c --- /dev/null +++ b/src/Repository/ApiTokenRepository.php @@ -0,0 +1,66 @@ + + * + * @method ApiToken|null find($id, $lockMode = null, $lockVersion = null) + * @method ApiToken|null findOneBy(array $criteria, array $orderBy = null) + * @method ApiToken[] findAll() + * @method ApiToken[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ApiTokenRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, ApiToken::class); + } + + public function save(ApiToken $entity, bool $flush = false): void + { + $this->getEntityManager()->persist($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(ApiToken $entity, bool $flush = false): void + { + $this->getEntityManager()->remove($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + +// /** +// * @return ApiToken[] Returns an array of ApiToken objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('a') +// ->andWhere('a.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('a.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?ApiToken +// { +// return $this->createQueryBuilder('a') +// ->andWhere('a.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/PartnerContactRepository.php b/src/Repository/PartnerContactRepository.php new file mode 100644 index 0000000..7e851b6 --- /dev/null +++ b/src/Repository/PartnerContactRepository.php @@ -0,0 +1,48 @@ + + * + * @method PartnerContact|null find($id, $lockMode = null, $lockVersion = null) + * @method PartnerContact|null findOneBy(array $criteria, array $orderBy = null) + * @method PartnerContact[] findAll() + * @method PartnerContact[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class PartnerContactRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, PartnerContact::class); + } + +// /** +// * @return PartnerContact[] Returns an array of PartnerContact objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('p.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?PartnerContact +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/PartnerRepository.php b/src/Repository/PartnerRepository.php new file mode 100644 index 0000000..c50b18b --- /dev/null +++ b/src/Repository/PartnerRepository.php @@ -0,0 +1,48 @@ + + * + * @method Partner|null find($id, $lockMode = null, $lockVersion = null) + * @method Partner|null findOneBy(array $criteria, array $orderBy = null) + * @method Partner[] findAll() + * @method Partner[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class PartnerRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Partner::class); + } + +// /** +// * @return Partner[] Returns an array of Partner objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('p.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Partner +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/symfony.lock b/symfony.lock index 0c12af2..b0df86e 100644 --- a/symfony.lock +++ b/symfony.lock @@ -52,6 +52,18 @@ "migrations/.gitignore" ] }, + "lexik/jwt-authentication-bundle": { + "version": "2.20", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "2.5", + "ref": "e9481b233a11ef7e15fe055a2b21fd3ac1aa2bb7" + }, + "files": [ + "config/packages/lexik_jwt_authentication.yaml" + ] + }, "nelmio/cors-bundle": { "version": "2.4", "recipe": {