From c72f2ed108c0a10ad26087c47db637d951078bab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Franc=CC=A7ois=20Hodierne?=
Date: Sat, 1 Apr 2023 20:49:13 +0200
Subject: [PATCH 1/4] wip: oauth
---
application/modules/oauth.module.php | 59 ++
application/partials/top.partial.php | 12 +-
application/start.action.php | 3 +
application/views/oauth/membership.view.php | 16 +
classes/service/oauth.php | 84 +++
composer.json | 3 +-
composer.lock | 724 +++++++++++++++++++-
public/img/opencollective-contribute.png | Bin 0 -> 139847 bytes
replaceables/session/signout.php | 2 +
9 files changed, 897 insertions(+), 6 deletions(-)
create mode 100644 application/modules/oauth.module.php
create mode 100644 application/views/oauth/membership.view.php
create mode 100644 classes/service/oauth.php
create mode 100644 public/img/opencollective-contribute.png
diff --git a/application/modules/oauth.module.php b/application/modules/oauth.module.php
new file mode 100644
index 0000000..c263335
--- /dev/null
+++ b/application/modules/oauth.module.php
@@ -0,0 +1,59 @@
+state();
+ return redirect($oauth->authorization_url());
+}
+
+else if (url_is('/oauth/callback')) {
+ check_parameters(['code', 'state']);
+
+ $code = get_param('code');
+ $state = get_param('state');
+
+ # Recommended security checks
+ # https://oauth2-client.thephpleague.com/usage/
+ if (isset($_SESSION['oauth_state']) && $state !== $_SESSION['oauth_state']) {
+ if (isset($_SESSION['oauth_state'])) {
+ unset($_SESSION['oauth_state']);
+ }
+ throw blogmarks::http_error(400, 'Invalid state.');
+ }
+
+ # error_log("access_token:$access_token");
+ $_SESSION['oauth_access_token'] = $oauth->access_token($code);
+
+ return redirect('/oauth/membership');
+}
+
+else if (url_is('/oauth/membership')) {
+ $access_token = $_SESSION['oauth_access_token'];
+
+ $authenticated_user = $oauth->authenticated_user($access_token);
+ if (empty($authenticated_user)) {
+ return redirect('/oauth/connect');
+ }
+
+ # error_log(json_encode($authenticated_user));
+ $_SESSION['oauth_authenticated_user'] = $authenticated_user;
+
+ $member_of = $authenticated_user['memberOf']['nodes'];
+ # If member of blogmarks on Open Collective
+ if (!empty($member_of)) {
+ $user = table('users')->get_one('email', $authenticated_user['email']);
+ # If user found
+ if ($user) {
+ signin($user);
+ return redirect(get_param('redirect_url', '/my/'));
+ }
+ }
+
+ title(_('Membership'));
+ return render('oauth/membership');
+}
+
+else {
+ return unknown_url();
+}
diff --git a/application/partials/top.partial.php b/application/partials/top.partial.php
index cc93c60..39ec76c 100644
--- a/application/partials/top.partial.php
+++ b/application/partials/top.partial.php
@@ -20,11 +20,15 @@
/
= _("Sign Out") ?>
-
- = _("Sign Up") ?>
- /
+
+ = _("Sign In with Open Collective") ?>
+
+
+ = _("Sign Up") ?>
+ /
+
+ = _("Sign In") ?>
- = _("Sign In") ?>
diff --git a/application/start.action.php b/application/start.action.php
index 95ed54c..ca6c4db 100644
--- a/application/start.action.php
+++ b/application/start.action.php
@@ -24,6 +24,9 @@
elseif (url_start_with('/auth')) {
module('auth');
}
+elseif (url_start_with('/oauth')) {
+ module('oauth');
+}
else {
module('public');
}
diff --git a/application/views/oauth/membership.view.php b/application/views/oauth/membership.view.php
new file mode 100644
index 0000000..2e53b08
--- /dev/null
+++ b/application/views/oauth/membership.view.php
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/classes/service/oauth.php b/classes/service/oauth.php
new file mode 100644
index 0000000..5322649
--- /dev/null
+++ b/classes/service/oauth.php
@@ -0,0 +1,84 @@
+params = $this->params + $params : $this->params;
+ }
+
+ protected $provider;
+
+ function provider()
+ {
+ if (isset($this->provider)) {
+ return $this->provider;
+ }
+
+ if (!$this->params) {
+ return;
+ }
+
+ return $this->provider = new \League\OAuth2\Client\Provider\GenericProvider([
+ 'clientId' => $this->params['clientId'],
+ 'clientSecret' => $this->params['clientSecret'],
+ 'redirectUri' => $this->params['redirectUri'],
+ 'urlAuthorize' => $this->website_url . '/oauth/authorize?scope=' . implode(',', $this->scope),
+ 'urlAccessToken' => $this->website_url . '/oauth/token',
+ 'urlResourceOwnerDetails' => $this->api_url . '/graphql?query=' . urlencode($this->graphql_query)
+ ]);
+ }
+
+ function authorization_url()
+ {
+ $provider = $this->provider();
+ return $provider->getAuthorizationUrl();
+ }
+
+ function state()
+ {
+ $provider = $this->provider();
+ return $provider->getState();
+ }
+
+ function access_token($code)
+ {
+ $provider = $this->provider();
+ return $provider->getAccessToken('authorization_code', ['code' => $code]);
+ }
+
+ function authenticated_user($access_token)
+ {
+ $provider = $this->provider();
+ $resource_owner = $provider->getResourceOwner($access_token)->toArray();
+ return $resource_owner['data']['me'];
+ }
+
+}
diff --git a/composer.json b/composer.json
index c7b166d..227f3c7 100644
--- a/composer.json
+++ b/composer.json
@@ -7,7 +7,8 @@
"ruflin/elastica": "^6.1.1",
"pixel418/markdownify": "^2.3",
"swiftmailer/swiftmailer": "^6.0",
- "ca-dsgn/lessphp": "^0.7.0"
+ "ca-dsgn/lessphp": "^0.7.0",
+ "league/oauth2-client": "^2.6"
},
"autoload": {
"psr-4": {
diff --git a/composer.lock b/composer.lock
index ff739c7..c287700 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": "f4313375727608c9221da77e4e108863",
+ "content-hash": "01d7017cb9fba5f6ca2df24f0ecd3317",
"packages": [
{
"name": "ca-dsgn/lessphp",
@@ -418,6 +418,407 @@
},
"time": "2022-12-07T11:28:53+00:00"
},
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "7.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba",
+ "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/promises": "^1.5",
+ "guzzlehttp/psr7": "^1.9 || ^2.4",
+ "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.1",
+ "ext-curl": "*",
+ "php-http/client-integration-tests": "^3.0",
+ "phpunit/phpunit": "^8.5.29 || ^9.5.23",
+ "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
+ },
+ "branch-alias": {
+ "dev-master": "7.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "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": "Guzzle is a PHP HTTP client library",
+ "keywords": [
+ "client",
+ "curl",
+ "framework",
+ "http",
+ "http client",
+ "psr-18",
+ "psr-7",
+ "rest",
+ "web service"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/7.5.0"
+ },
+ "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": "2022-08-28T15:39:27+00:00"
+ },
+ {
+ "name": "guzzlehttp/promises",
+ "version": "1.5.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "b94b2807d85443f9719887892882d0329d1e2598"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598",
+ "reference": "b94b2807d85443f9719887892882d0329d1e2598",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "^4.4 || ^5.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "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": "Guzzle promises library",
+ "keywords": [
+ "promise"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/1.5.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-08-28T14:55:35+00:00"
+ },
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "2.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf",
+ "reference": "3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.0",
+ "ralouphie/getallheaders": "^3.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.1",
+ "http-interop/http-factory-tests": "^0.9",
+ "phpunit/phpunit": "^8.5.29 || ^9.5.23"
+ },
+ "suggest": {
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ },
+ "branch-alias": {
+ "dev-master": "2.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "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"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
+ }
+ ],
+ "description": "PSR-7 message implementation that also provides common utility methods",
+ "keywords": [
+ "http",
+ "message",
+ "psr-7",
+ "request",
+ "response",
+ "stream",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/2.4.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-03-09T13:19:02+00:00"
+ },
+ {
+ "name": "league/oauth2-client",
+ "version": "2.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/oauth2-client.git",
+ "reference": "2334c249907190c132364f5dae0287ab8666aa19"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/2334c249907190c132364f5dae0287ab8666aa19",
+ "reference": "2334c249907190c132364f5dae0287ab8666aa19",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/guzzle": "^6.0 || ^7.0",
+ "paragonie/random_compat": "^1 || ^2 || ^9.99",
+ "php": "^5.6 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.3.5",
+ "php-parallel-lint/php-parallel-lint": "^1.3.1",
+ "phpunit/phpunit": "^5.7 || ^6.0 || ^9.5",
+ "squizlabs/php_codesniffer": "^2.3 || ^3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-2.x": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\OAuth2\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Alex Bilbie",
+ "email": "hello@alexbilbie.com",
+ "homepage": "http://www.alexbilbie.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Woody Gilk",
+ "homepage": "https://github.com/shadowhand",
+ "role": "Contributor"
+ }
+ ],
+ "description": "OAuth 2.0 Client Library",
+ "keywords": [
+ "Authentication",
+ "SSO",
+ "authorization",
+ "identity",
+ "idp",
+ "oauth",
+ "oauth2",
+ "single sign on"
+ ],
+ "support": {
+ "issues": "https://github.com/thephpleague/oauth2-client/issues",
+ "source": "https://github.com/thephpleague/oauth2-client/tree/2.6.1"
+ },
+ "time": "2021-12-22T16:42:49+00:00"
+ },
{
"name": "michelf/php-markdown",
"version": "1.9.1",
@@ -471,6 +872,56 @@
},
"time": "2021-11-24T02:52:38+00:00"
},
+ {
+ "name": "paragonie/random_compat",
+ "version": "v9.99.100",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
+ "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">= 7"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*|5.*",
+ "vimeo/psalm": "^1"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "keywords": [
+ "csprng",
+ "polyfill",
+ "pseudorandom",
+ "random"
+ ],
+ "support": {
+ "email": "info@paragonie.com",
+ "issues": "https://github.com/paragonie/random_compat/issues",
+ "source": "https://github.com/paragonie/random_compat"
+ },
+ "time": "2020-10-15T08:29:30+00:00"
+ },
{
"name": "php-amqplib/php-amqplib",
"version": "v2.12.1",
@@ -719,6 +1170,166 @@
},
"time": "2019-01-22T16:33:43+00:00"
},
+ {
+ "name": "psr/http-client",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.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": "http://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/tree/master"
+ },
+ "time": "2020-06-29T06:28:15+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory/tree/master"
+ },
+ "time": "2019-04-30T12:38:16+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
+ "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/1.1"
+ },
+ "time": "2023-04-04T09:50:52+00:00"
+ },
{
"name": "psr/log",
"version": "1.1.4",
@@ -769,6 +1380,50 @@
},
"time": "2021-05-03T11:20:27+00:00"
},
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
+ "time": "2019-03-08T08:55:37+00:00"
+ },
{
"name": "react/promise",
"version": "v2.9.0",
@@ -989,6 +1644,73 @@
"abandoned": "symfony/mailer",
"time": "2021-10-18T15:26:12+00:00"
},
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e",
+ "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.3-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "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": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1"
+ },
+ "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": "2023-03-01T10:25:55+00:00"
+ },
{
"name": "symfony/polyfill-iconv",
"version": "v1.27.0",
diff --git a/public/img/opencollective-contribute.png b/public/img/opencollective-contribute.png
new file mode 100644
index 0000000000000000000000000000000000000000..c84b0100dacd4ffb094a7ff21f51e91064f2ccf0
GIT binary patch
literal 139847
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