diff --git a/.gitignore b/.gitignore
index 6b9ac8b..a860924 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ vendor/
composer.phar
Configuration/Secrets.yaml
+Configuration/GCCServiceAccountCreds.json
diff --git a/App/Enumerators/SessionElement.php b/App/Enumerators/SessionElement.php
index 13d4c19..80d2b5e 100644
--- a/App/Enumerators/SessionElement.php
+++ b/App/Enumerators/SessionElement.php
@@ -7,4 +7,5 @@ enum SessionElement: string
case IS_LOGGED_IN = "IS_LOGGED_IN";
case USER_ID = "USER_ID";
case USERNAME = "USERNAME";
+ case LAST_ASSESSMENT_RESULT = "LAST_ASSESSMENT_RESULT";
}
\ No newline at end of file
diff --git a/App/Wrappers/CAPTCHAWrapper.php b/App/Wrappers/CAPTCHAWrapper.php
new file mode 100644
index 0000000..d27fb9e
--- /dev/null
+++ b/App/Wrappers/CAPTCHAWrapper.php
@@ -0,0 +1,89 @@
+projectName($project);
+
+ // Set the properties of the event to be tracked.
+ $event = (new Event())
+ ->setSiteKey(Configuration::GetConfig("reCAPTCHA", "KeyID"))
+ ->setToken($token);
+
+ // Build the assessment request.
+ $assessment = (new Assessment())->setEvent($event);
+
+ $response = $client->createAssessment(
+ $projectName,
+ $assessment
+ );
+
+ // Check if the token is valid.
+ if ($response->getTokenProperties()->getValid() == false) {
+ // printf('The CreateAssessment() call failed because the token was invalid for the following reason: ');
+ // printf(InvalidReason::name($response->getTokenProperties()->getInvalidReason()));
+ return floatval(-1);
+ }
+
+ // Check if the expected action was executed.
+ if ($response->getTokenProperties()->getAction() == $action) {
+ // Get the risk score and the reason(s).
+ // For more information on interpreting the assessment, see:
+ // https://cloud.google.com/recaptcha-enterprise/docs/interpret-assessment
+ // printf('The score for the protection action is:');
+ return $response->getRiskAnalysis()->getScore();
+ } else {
+ // printf('The action attribute in your reCAPTCHA tag does not match the action you are expecting to score');
+ }
+ return null;
+ }
+
+ public static function HandleCaptchaResponse(string $captchaResponse): void
+ {
+ $assessmentResponse = CAPTCHAWrapper::CreateAssessment(
+ token: $captchaResponse,
+ action: 'submit'
+ );
+
+ if ($assessmentResponse == null)
+ {
+ die("captcha assessment is null");
+ }
+ if ($assessmentResponse <= floatval(Configuration::GetConfig("reCAPTCHA", "AcceptableLowerBoundsForLogin")))
+ {
+ die("go away robot!");
+ }
+
+ SessionWrapper::Set(SessionElement::LAST_ASSESSMENT_RESULT, $assessmentResponse);
+ }
+}
diff --git a/App/Wrappers/SessionWrapper.php b/App/Wrappers/SessionWrapper.php
index f21aab0..d1c0cbe 100644
--- a/App/Wrappers/SessionWrapper.php
+++ b/App/Wrappers/SessionWrapper.php
@@ -8,12 +8,13 @@ class SessionWrapper
{
public static function Start(): void
{
- if (session_status() == PHP_SESSION_NONE) {
+ if (session_status() == PHP_SESSION_NONE)
+ {
session_start();
}
}
- public static function Get(SessionElement $target)
+ public static function Get(SessionElement $target): mixed
{
self::Start();
if(array_key_exists(key: $target->value, array: $_SESSION))
@@ -22,4 +23,10 @@ class SessionWrapper
}
die();
}
+
+ public static function Set(SessionElement $target, mixed $newValue): void
+ {
+ self::Start();
+ $_SESSION[$target->value] = $newValue;
+ }
}
diff --git a/App/Wrappers/TwigWrapper.php b/App/Wrappers/TwigWrapper.php
index 5c1df3f..abfd534 100644
--- a/App/Wrappers/TwigWrapper.php
+++ b/App/Wrappers/TwigWrapper.php
@@ -43,6 +43,8 @@ class TwigWrapper
$this->twig->addGlobal('_CURRENT_URI_', urlencode("http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"));
$this->twig->addGlobal('_USER_TIMEZONE_OFFSET_', 60);
+ $this->twig->addGlobal('_CAPTCHA_KEY_ID_', Configuration::GetConfig('reCAPTCHA', 'KeyID'));
+
$this->twig->addExtension(new FiltersExtension());
$this->twig->addExtension(new FunctionExtensions($this->twig));
diff --git a/Configuration/Configuration.yaml b/Configuration/Configuration.yaml
index fe0db4e..0552d9d 100644
--- a/Configuration/Configuration.yaml
+++ b/Configuration/Configuration.yaml
@@ -16,3 +16,8 @@ MariaDB:
Username: ;MARIADB__USERNAME
Password: ;MARIADB__PASSWORD
Database: FolkTuneFinder_Live
+
+reCAPTCHA:
+ KeyID: ;RECAPTCHA_ENTERPRISE_KEY_ID
+ ProjectID: ;RECAPTCHA_ENTERPRISE_PROJECT_ID
+ AcceptableLowerBoundsForLogin: 0.5
diff --git a/Localisation/en-GB.yaml b/Localisation/en-GB.yaml
index 0dd0c4f..4dcb588 100644
--- a/Localisation/en-GB.yaml
+++ b/Localisation/en-GB.yaml
@@ -3,6 +3,7 @@
# A
##################################################
ABC Notation: ABC Notation
+Account Login: Account Login
Audio: Audio
@@ -17,7 +18,9 @@ Bars: Bars
##################################################
# C
##################################################
+Confirm Password: Confirm Password
Copyright: Copyright
+Create an Account: Create an Account
@@ -77,6 +80,7 @@ Key Signature: Key Signature
# L
##################################################
Log in to vote: Log in to vote
+Logout: Logout
diff --git a/Pages/logout.php b/Pages/logout.php
new file mode 100644
index 0000000..88d2692
--- /dev/null
+++ b/Pages/logout.php
@@ -0,0 +1,12 @@
+
+
+
-
Ceilidh Kit Login
+ {{ "Account Login"|translate }}
+
+ {{ "Create an Account"|translate }}
+
{% endblock %}
\ No newline at end of file
diff --git a/Templates/Pages/profile.html.twig b/Templates/Pages/profile.html.twig
index e4be38f..7c2c416 100644
--- a/Templates/Pages/profile.html.twig
+++ b/Templates/Pages/profile.html.twig
@@ -4,6 +4,8 @@
{{ "Your Profile"|translate }}
+
{{ "Logout"|translate }}
+
{{ "Summary"|translate }}
diff --git a/composer.json b/composer.json
index 4a861ae..df55a76 100644
--- a/composer.json
+++ b/composer.json
@@ -27,6 +27,8 @@
"algolia/algoliasearch-client-php": "*",
"ext-pdo": "*",
- "aura/sqlquery": "2.8.1"
+ "aura/sqlquery": "2.8.1",
+
+ "google/cloud-recaptcha-enterprise": "v1.7.0"
}
}
diff --git a/composer.lock b/composer.lock
index 6d607ca..aa196c4 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "90b41113c9eda0bc1927b5c774613582",
+ "content-hash": "efea1a83885c04fe988e656c653f9f65",
"packages": [
{
"name": "algolia/algoliasearch-client-php",
@@ -144,6 +144,66 @@
},
"time": "2023-04-25T13:25:37+00:00"
},
+ {
+ "name": "brick/math",
+ "version": "0.12.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/brick/math.git",
+ "reference": "f510c0a40911935b77b86859eb5223d58d660df1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1",
+ "reference": "f510c0a40911935b77b86859eb5223d58d660df1",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpunit/phpunit": "^10.1",
+ "vimeo/psalm": "5.16.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Brick\\Math\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Arbitrary-precision arithmetic library",
+ "keywords": [
+ "Arbitrary-precision",
+ "BigInteger",
+ "BigRational",
+ "arithmetic",
+ "bigdecimal",
+ "bignum",
+ "bignumber",
+ "brick",
+ "decimal",
+ "integer",
+ "math",
+ "mathematics",
+ "rational"
+ ],
+ "support": {
+ "issues": "https://github.com/brick/math/issues",
+ "source": "https://github.com/brick/math/tree/0.12.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/BenMorel",
+ "type": "github"
+ }
+ ],
+ "time": "2023-11-29T23:19:16+00:00"
+ },
{
"name": "doctrine/annotations",
"version": "2.0.2",
@@ -173,12 +233,648 @@
"vimeo/psalm": "^4.30 || ^5.14"
},
"suggest": {
- "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
+ "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Docblock Annotations Parser",
+ "homepage": "https://www.doctrine-project.org/projects/annotations.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "parser"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/annotations/issues",
+ "source": "https://github.com/doctrine/annotations/tree/2.0.2"
+ },
+ "time": "2024-09-05T10:17:24+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^12",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^10.5",
+ "psalm/plugin-phpunit": "^0.18.3",
+ "vimeo/psalm": "^5.21"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/3.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-02-05T11:56:58+00:00"
+ },
+ {
+ "name": "firebase/php-jwt",
+ "version": "v6.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/firebase/php-jwt.git",
+ "reference": "8f718f4dfc9c5d5f0c994cdfd103921b43592712"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/firebase/php-jwt/zipball/8f718f4dfc9c5d5f0c994cdfd103921b43592712",
+ "reference": "8f718f4dfc9c5d5f0c994cdfd103921b43592712",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "guzzlehttp/guzzle": "^7.4",
+ "phpspec/prophecy-phpunit": "^2.0",
+ "phpunit/phpunit": "^9.5",
+ "psr/cache": "^2.0||^3.0",
+ "psr/http-client": "^1.0",
+ "psr/http-factory": "^1.0"
+ },
+ "suggest": {
+ "ext-sodium": "Support EdDSA (Ed25519) signatures",
+ "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Firebase\\JWT\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Neuman Vong",
+ "email": "neuman+pear@twilio.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Anant Narayanan",
+ "email": "anant@php.net",
+ "role": "Developer"
+ }
+ ],
+ "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
+ "homepage": "https://github.com/firebase/php-jwt",
+ "keywords": [
+ "jwt",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/firebase/php-jwt/issues",
+ "source": "https://github.com/firebase/php-jwt/tree/v6.11.0"
+ },
+ "time": "2025-01-23T05:11:06+00:00"
+ },
+ {
+ "name": "google/auth",
+ "version": "v1.45.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/googleapis/google-auth-library-php.git",
+ "reference": "86e9d937632a96b09dc40444c7cb68eb778a6ea6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/86e9d937632a96b09dc40444c7cb68eb778a6ea6",
+ "reference": "86e9d937632a96b09dc40444c7cb68eb778a6ea6",
+ "shasum": ""
+ },
+ "require": {
+ "firebase/php-jwt": "^6.0",
+ "guzzlehttp/guzzle": "^7.4.5",
+ "guzzlehttp/psr7": "^2.4.5",
+ "php": "^8.0",
+ "psr/cache": "^2.0||^3.0",
+ "psr/http-message": "^1.1||^2.0",
+ "psr/log": "^3.0"
+ },
+ "require-dev": {
+ "guzzlehttp/promises": "^2.0",
+ "kelvinmo/simplejwt": "0.7.1",
+ "phpseclib/phpseclib": "^3.0.35",
+ "phpspec/prophecy-phpunit": "^2.1",
+ "phpunit/phpunit": "^9.6",
+ "sebastian/comparator": ">=1.2.3",
+ "squizlabs/php_codesniffer": "^3.5",
+ "symfony/process": "^6.0||^7.0",
+ "webmozart/assert": "^1.11"
+ },
+ "suggest": {
+ "phpseclib/phpseclib": "May be used in place of OpenSSL for signing strings or for token management. Please require version ^2."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Google\\Auth\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "description": "Google Auth Library for PHP",
+ "homepage": "http://github.com/google/google-auth-library-php",
+ "keywords": [
+ "Authentication",
+ "google",
+ "oauth2"
+ ],
+ "support": {
+ "docs": "https://googleapis.github.io/google-auth-library-php/main/",
+ "issues": "https://github.com/googleapis/google-auth-library-php/issues",
+ "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.45.1"
+ },
+ "time": "2025-01-22T23:27:35+00:00"
+ },
+ {
+ "name": "google/cloud-recaptcha-enterprise",
+ "version": "v1.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/googleapis/google-cloud-php-recaptcha-enterprise.git",
+ "reference": "e7f7b88541883cdd92c9f89b3616eb52a34cf020"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/googleapis/google-cloud-php-recaptcha-enterprise/zipball/e7f7b88541883cdd92c9f89b3616eb52a34cf020",
+ "reference": "e7f7b88541883cdd92c9f89b3616eb52a34cf020",
+ "shasum": ""
+ },
+ "require": {
+ "google/gax": "^1.24.0",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "suggest": {
+ "ext-grpc": "Enables use of gRPC, a universal high-performance RPC framework created by Google.",
+ "ext-protobuf": "Provides a significant increase in throughput over the pure PHP protobuf implementation. See https://cloud.google.com/php/grpc for installation instructions."
+ },
+ "type": "library",
+ "extra": {
+ "component": {
+ "id": "cloud-recaptcha-enterprise",
+ "path": "RecaptchaEnterprise",
+ "entry": null,
+ "target": "googleapis/google-cloud-php-recaptcha-enterprise.git"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Google\\Cloud\\RecaptchaEnterprise\\": "src",
+ "GPBMetadata\\Google\\Cloud\\Recaptchaenterprise\\": "metadata"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "description": "Google Cloud Recaptcha Enterprise Client for PHP",
+ "support": {
+ "source": "https://github.com/googleapis/google-cloud-php-recaptcha-enterprise/tree/v1.7.0"
+ },
+ "time": "2023-12-08T22:36:35+00:00"
+ },
+ {
+ "name": "google/common-protos",
+ "version": "4.9.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/googleapis/common-protos-php.git",
+ "reference": "a2d1a583819286db5ef9403c6a2bfa29c9636c46"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/googleapis/common-protos-php/zipball/a2d1a583819286db5ef9403c6a2bfa29c9636c46",
+ "reference": "a2d1a583819286db5ef9403c6a2bfa29c9636c46",
+ "shasum": ""
+ },
+ "require": {
+ "google/protobuf": "^v3.25.3||^4.26.1",
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.6"
+ },
+ "type": "library",
+ "extra": {
+ "component": {
+ "id": "common-protos",
+ "path": "CommonProtos",
+ "entry": "README.md",
+ "target": "googleapis/common-protos-php.git"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Google\\Api\\": "src/Api",
+ "Google\\Iam\\": "src/Iam",
+ "Google\\Rpc\\": "src/Rpc",
+ "Google\\Type\\": "src/Type",
+ "Google\\Cloud\\": "src/Cloud",
+ "GPBMetadata\\Google\\Api\\": "metadata/Api",
+ "GPBMetadata\\Google\\Iam\\": "metadata/Iam",
+ "GPBMetadata\\Google\\Rpc\\": "metadata/Rpc",
+ "GPBMetadata\\Google\\Type\\": "metadata/Type",
+ "GPBMetadata\\Google\\Cloud\\": "metadata/Cloud",
+ "GPBMetadata\\Google\\Logging\\": "metadata/Logging"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "description": "Google API Common Protos for PHP",
+ "homepage": "https://github.com/googleapis/common-protos-php",
+ "keywords": [
+ "google"
+ ],
+ "support": {
+ "source": "https://github.com/googleapis/common-protos-php/tree/v4.9.0"
+ },
+ "time": "2025-01-11T02:14:50+00:00"
+ },
+ {
+ "name": "google/gax",
+ "version": "v1.36.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/googleapis/gax-php.git",
+ "reference": "140599cf5eae2432363ce6198e9fdff851625a7a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/googleapis/gax-php/zipball/140599cf5eae2432363ce6198e9fdff851625a7a",
+ "reference": "140599cf5eae2432363ce6198e9fdff851625a7a",
+ "shasum": ""
+ },
+ "require": {
+ "google/auth": "^1.45",
+ "google/common-protos": "^4.4",
+ "google/grpc-gcp": "^0.4",
+ "google/longrunning": "~0.4",
+ "google/protobuf": "^v3.25.3||^4.26.1",
+ "grpc/grpc": "^1.13",
+ "guzzlehttp/promises": "^2.0",
+ "guzzlehttp/psr7": "^2.0",
+ "php": "^8.0",
+ "ramsey/uuid": "^4.0"
+ },
+ "conflict": {
+ "ext-protobuf": "<3.7.0"
+ },
+ "require-dev": {
+ "phpspec/prophecy-phpunit": "^2.1",
+ "phpstan/phpstan": "^2.0",
+ "phpunit/phpunit": "^9.6",
+ "squizlabs/php_codesniffer": "3.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Google\\ApiCore\\": "src",
+ "GPBMetadata\\ApiCore\\": "metadata/ApiCore"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "Google API Core for PHP",
+ "homepage": "https://github.com/googleapis/gax-php",
+ "keywords": [
+ "google"
+ ],
+ "support": {
+ "issues": "https://github.com/googleapis/gax-php/issues",
+ "source": "https://github.com/googleapis/gax-php/tree/v1.36.0"
+ },
+ "time": "2024-12-11T02:47:43+00:00"
+ },
+ {
+ "name": "google/grpc-gcp",
+ "version": "v0.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/GoogleCloudPlatform/grpc-gcp-php.git",
+ "reference": "2a80dbf690922aa52bb6bb79b9a32a9637a5c2d9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/GoogleCloudPlatform/grpc-gcp-php/zipball/2a80dbf690922aa52bb6bb79b9a32a9637a5c2d9",
+ "reference": "2a80dbf690922aa52bb6bb79b9a32a9637a5c2d9",
+ "shasum": ""
+ },
+ "require": {
+ "google/auth": "^1.3",
+ "google/protobuf": "^v3.25.3||^4.26.1",
+ "grpc/grpc": "^v1.13.0",
+ "php": "^8.0",
+ "psr/cache": "^1.0.1||^2.0.0||^3.0.0"
+ },
+ "require-dev": {
+ "google/cloud-spanner": "^1.7",
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Grpc\\Gcp\\": "src/"
+ },
+ "classmap": [
+ "src/generated/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "description": "gRPC GCP library for channel management",
+ "support": {
+ "issues": "https://github.com/GoogleCloudPlatform/grpc-gcp-php/issues",
+ "source": "https://github.com/GoogleCloudPlatform/grpc-gcp-php/tree/v0.4.0"
+ },
+ "time": "2024-04-03T16:37:55+00:00"
+ },
+ {
+ "name": "google/longrunning",
+ "version": "0.4.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/googleapis/php-longrunning.git",
+ "reference": "624cabb874c10e5ddc9034c999f724894b70a3d3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/googleapis/php-longrunning/zipball/624cabb874c10e5ddc9034c999f724894b70a3d3",
+ "reference": "624cabb874c10e5ddc9034c999f724894b70a3d3",
+ "shasum": ""
+ },
+ "require-dev": {
+ "google/gax": "^1.36.0",
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "component": {
+ "id": "longrunning",
+ "path": "LongRunning",
+ "entry": null,
+ "target": "googleapis/php-longrunning"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Google\\LongRunning\\": "src/LongRunning",
+ "Google\\ApiCore\\LongRunning\\": "src/ApiCore/LongRunning",
+ "GPBMetadata\\Google\\Longrunning\\": "metadata/Longrunning"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "description": "Google LongRunning Client for PHP",
+ "support": {
+ "source": "https://github.com/googleapis/php-longrunning/tree/v0.4.7"
+ },
+ "time": "2025-01-24T21:24:06+00:00"
+ },
+ {
+ "name": "google/protobuf",
+ "version": "v4.29.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/protocolbuffers/protobuf-php.git",
+ "reference": "ab5077c2cfdd1f415f42d11fdbdf903ba8e3d9b7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/ab5077c2cfdd1f415f42d11fdbdf903ba8e3d9b7",
+ "reference": "ab5077c2cfdd1f415f42d11fdbdf903ba8e3d9b7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=5.0.0"
+ },
+ "suggest": {
+ "ext-bcmath": "Need to support JSON deserialization"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Google\\Protobuf\\": "src/Google/Protobuf",
+ "GPBMetadata\\Google\\Protobuf\\": "src/GPBMetadata/Google/Protobuf"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "proto library for PHP",
+ "homepage": "https://developers.google.com/protocol-buffers/",
+ "keywords": [
+ "proto"
+ ],
+ "support": {
+ "source": "https://github.com/protocolbuffers/protobuf-php/tree/v4.29.3"
+ },
+ "time": "2025-01-08T21:00:13+00:00"
+ },
+ {
+ "name": "grpc/grpc",
+ "version": "1.57.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/grpc/grpc-php.git",
+ "reference": "b610c42022ed3a22f831439cb93802f2a4502fdf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/grpc/grpc-php/zipball/b610c42022ed3a22f831439cb93802f2a4502fdf",
+ "reference": "b610c42022ed3a22f831439cb93802f2a4502fdf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "google/auth": "^v1.3.0"
+ },
+ "suggest": {
+ "ext-protobuf": "For better performance, install the protobuf C extension.",
+ "google/protobuf": "To get started using grpc quickly, install the native protobuf library."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Grpc\\": "src/lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "description": "gRPC library for PHP",
+ "homepage": "https://grpc.io",
+ "keywords": [
+ "rpc"
+ ],
+ "support": {
+ "source": "https://github.com/grpc/grpc-php/tree/v1.57.0"
+ },
+ "time": "2023-08-14T23:57:54+00:00"
+ },
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "7.9.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "d281ed313b989f213357e3be1a179f02196ac99b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b",
+ "reference": "d281ed313b989f213357e3be1a179f02196ac99b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
+ "guzzlehttp/psr7": "^2.7.0",
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-client": "^1.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "provide": {
+ "psr/http-client-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-curl": "*",
+ "guzzle/client-integration-tests": "3.0.2",
+ "php-http/message-factory": "^1.1",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
+ },
+ "suggest": {
+ "ext-curl": "Required for CURL handler support",
+ "ext-intl": "Required for Internationalized Domain Name (IDN) support",
+ "psr/log": "Required for using the Log middleware"
},
"type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
"autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
"psr-4": {
- "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
+ "GuzzleHttp\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -187,67 +883,104 @@
],
"authors": [
{
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
},
{
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
},
{
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia"
},
{
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
},
{
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
}
],
- "description": "Docblock Annotations Parser",
- "homepage": "https://www.doctrine-project.org/projects/annotations.html",
+ "description": "Guzzle is a PHP HTTP client library",
"keywords": [
- "annotations",
- "docblock",
- "parser"
+ "client",
+ "curl",
+ "framework",
+ "http",
+ "http client",
+ "psr-18",
+ "psr-7",
+ "rest",
+ "web service"
],
"support": {
- "issues": "https://github.com/doctrine/annotations/issues",
- "source": "https://github.com/doctrine/annotations/tree/2.0.2"
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/7.9.2"
},
- "time": "2024-09-05T10:17:24+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-07-24T11:22:20+00:00"
},
{
- "name": "doctrine/lexer",
- "version": "3.0.1",
+ "name": "guzzlehttp/promises",
+ "version": "2.0.4",
"source": {
"type": "git",
- "url": "https://github.com/doctrine/lexer.git",
- "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
- "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
+ "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
"shasum": ""
},
"require": {
- "php": "^8.1"
+ "php": "^7.2.5 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^12",
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^10.5",
- "psalm/plugin-phpunit": "^0.18.3",
- "vimeo/psalm": "^5.21"
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20"
},
"type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
"autoload": {
"psr-4": {
- "Doctrine\\Common\\Lexer\\": "src"
+ "GuzzleHttp\\Promise\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -256,46 +989,49 @@
],
"authors": [
{
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
},
{
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
},
{
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
}
],
- "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
- "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "description": "Guzzle promises library",
"keywords": [
- "annotations",
- "docblock",
- "lexer",
- "parser",
- "php"
+ "promise"
],
"support": {
- "issues": "https://github.com/doctrine/lexer/issues",
- "source": "https://github.com/doctrine/lexer/tree/3.0.1"
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/2.0.4"
},
"funding": [
{
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
},
{
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
+ "url": "https://github.com/Nyholm",
+ "type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
"type": "tidelift"
}
],
- "time": "2024-02-05T11:56:58+00:00"
+ "time": "2024-10-17T10:06:22+00:00"
},
{
"name": "guzzlehttp/psr7",
@@ -462,6 +1198,58 @@
},
"time": "2021-02-03T23:26:27+00:00"
},
+ {
+ "name": "psr/http-client",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client"
+ },
+ "time": "2023-09-23T14:17:50+00:00"
+ },
{
"name": "psr/http-factory",
"version": "1.1.0",
@@ -715,6 +1503,187 @@
},
"time": "2019-03-08T08:55:37+00:00"
},
+ {
+ "name": "ramsey/collection",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/collection.git",
+ "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
+ "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "captainhook/plugin-composer": "^5.3",
+ "ergebnis/composer-normalize": "^2.28.3",
+ "fakerphp/faker": "^1.21",
+ "hamcrest/hamcrest-php": "^2.0",
+ "jangregor/phpstan-prophecy": "^1.0",
+ "mockery/mockery": "^1.5",
+ "php-parallel-lint/php-console-highlighter": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.3",
+ "phpcsstandards/phpcsutils": "^1.0.0-rc1",
+ "phpspec/prophecy-phpunit": "^2.0",
+ "phpstan/extension-installer": "^1.2",
+ "phpstan/phpstan": "^1.9",
+ "phpstan/phpstan-mockery": "^1.1",
+ "phpstan/phpstan-phpunit": "^1.3",
+ "phpunit/phpunit": "^9.5",
+ "psalm/plugin-mockery": "^1.1",
+ "psalm/plugin-phpunit": "^0.18.4",
+ "ramsey/coding-standard": "^2.0.3",
+ "ramsey/conventional-commits": "^1.3",
+ "vimeo/psalm": "^5.4"
+ },
+ "type": "library",
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ },
+ "ramsey/conventional-commits": {
+ "configFile": "conventional-commits.json"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Ramsey\\Collection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ }
+ ],
+ "description": "A PHP library for representing and manipulating collections.",
+ "keywords": [
+ "array",
+ "collection",
+ "hash",
+ "map",
+ "queue",
+ "set"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/collection/issues",
+ "source": "https://github.com/ramsey/collection/tree/2.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ramsey",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-31T21:50:55+00:00"
+ },
+ {
+ "name": "ramsey/uuid",
+ "version": "4.7.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/uuid.git",
+ "reference": "91039bc1faa45ba123c4328958e620d382ec7088"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088",
+ "reference": "91039bc1faa45ba123c4328958e620d382ec7088",
+ "shasum": ""
+ },
+ "require": {
+ "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12",
+ "ext-json": "*",
+ "php": "^8.0",
+ "ramsey/collection": "^1.2 || ^2.0"
+ },
+ "replace": {
+ "rhumsaa/uuid": "self.version"
+ },
+ "require-dev": {
+ "captainhook/captainhook": "^5.10",
+ "captainhook/plugin-composer": "^5.3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+ "doctrine/annotations": "^1.8",
+ "ergebnis/composer-normalize": "^2.15",
+ "mockery/mockery": "^1.3",
+ "paragonie/random-lib": "^2",
+ "php-mock/php-mock": "^2.2",
+ "php-mock/php-mock-mockery": "^1.3",
+ "php-parallel-lint/php-parallel-lint": "^1.1",
+ "phpbench/phpbench": "^1.0",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-mockery": "^1.1",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpunit/phpunit": "^8.5 || ^9",
+ "ramsey/composer-repl": "^1.4",
+ "slevomat/coding-standard": "^8.4",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^4.9"
+ },
+ "suggest": {
+ "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
+ "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
+ "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
+ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+ "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+ },
+ "type": "library",
+ "extra": {
+ "captainhook": {
+ "force-install": true
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Ramsey\\Uuid\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
+ "keywords": [
+ "guid",
+ "identifier",
+ "uuid"
+ ],
+ "support": {
+ "issues": "https://github.com/ramsey/uuid/issues",
+ "source": "https://github.com/ramsey/uuid/tree/4.7.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ramsey",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-04-27T21:32:50+00:00"
+ },
{
"name": "symfony/deprecation-contracts",
"version": "v3.5.1",