Started reworking TokenStorage
This commit is contained in:
parent
c106e1568c
commit
ed5f43a5e4
@ -29,7 +29,8 @@
|
|||||||
"dflydev/fig-cookies": "^3.0",
|
"dflydev/fig-cookies": "^3.0",
|
||||||
"mf2/mf2": "^0.4.6",
|
"mf2/mf2": "^0.4.6",
|
||||||
"barnabywalters/mf-cleaner": "^0.1.4",
|
"barnabywalters/mf-cleaner": "^0.1.4",
|
||||||
"guzzlehttp/psr7": "^1.8"
|
"guzzlehttp/psr7": "^1.8",
|
||||||
|
"webmozart/path-util": "^2.3"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"guzzlehttp/guzzle": "^7.3",
|
"guzzlehttp/guzzle": "^7.3",
|
||||||
|
326
composer.lock
generated
326
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "6dfa0e018cef496d86d54f6d5fc3d429",
|
"content-hash": "3653bf66c6f4317fd1d594fc93291ff1",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "barnabywalters/mf-cleaner",
|
"name": "barnabywalters/mf-cleaner",
|
||||||
@ -887,6 +887,193 @@
|
|||||||
"source": "https://github.com/ralouphie/getallheaders/tree/develop"
|
"source": "https://github.com/ralouphie/getallheaders/tree/develop"
|
||||||
},
|
},
|
||||||
"time": "2019-03-08T08:55:37+00:00"
|
"time": "2019-03-08T08:55:37+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/polyfill-ctype",
|
||||||
|
"version": "v1.23.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||||
|
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
||||||
|
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.1"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-ctype": "For best performance"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-main": "1.23-dev"
|
||||||
|
},
|
||||||
|
"thanks": {
|
||||||
|
"name": "symfony/polyfill",
|
||||||
|
"url": "https://github.com/symfony/polyfill"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Ctype\\": ""
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"bootstrap.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Gert de Pagter",
|
||||||
|
"email": "BackEndTea@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony polyfill for ctype functions",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"compatibility",
|
||||||
|
"ctype",
|
||||||
|
"polyfill",
|
||||||
|
"portable"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.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": "2021-02-19T12:13:01+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "webmozart/assert",
|
||||||
|
"version": "1.10.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/webmozarts/assert.git",
|
||||||
|
"reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
|
||||||
|
"reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2 || ^8.0",
|
||||||
|
"symfony/polyfill-ctype": "^1.8"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"phpstan/phpstan": "<0.12.20",
|
||||||
|
"vimeo/psalm": "<4.6.1 || 4.6.2"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^8.5.13"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.10-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Webmozart\\Assert\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Bernhard Schussek",
|
||||||
|
"email": "bschussek@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Assertions to validate method input/output with nice error messages.",
|
||||||
|
"keywords": [
|
||||||
|
"assert",
|
||||||
|
"check",
|
||||||
|
"validate"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/webmozarts/assert/issues",
|
||||||
|
"source": "https://github.com/webmozarts/assert/tree/1.10.0"
|
||||||
|
},
|
||||||
|
"time": "2021-03-09T10:59:23+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "webmozart/path-util",
|
||||||
|
"version": "2.3.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/webmozart/path-util.git",
|
||||||
|
"reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
|
||||||
|
"reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.3",
|
||||||
|
"webmozart/assert": "~1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^4.6",
|
||||||
|
"sebastian/version": "^1.0.1"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "2.3-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Webmozart\\PathUtil\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Bernhard Schussek",
|
||||||
|
"email": "bschussek@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/webmozart/path-util/issues",
|
||||||
|
"source": "https://github.com/webmozart/path-util/tree/2.3.0"
|
||||||
|
},
|
||||||
|
"time": "2015-12-17T08:42:14+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
@ -3004,85 +3191,6 @@
|
|||||||
],
|
],
|
||||||
"time": "2020-09-28T06:39:44+00:00"
|
"time": "2020-09-28T06:39:44+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "symfony/polyfill-ctype",
|
|
||||||
"version": "v1.23.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
|
||||||
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
|
||||||
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.1"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"ext-ctype": "For best performance"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-main": "1.23-dev"
|
|
||||||
},
|
|
||||||
"thanks": {
|
|
||||||
"name": "symfony/polyfill",
|
|
||||||
"url": "https://github.com/symfony/polyfill"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Ctype\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"bootstrap.php"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Gert de Pagter",
|
|
||||||
"email": "BackEndTea@gmail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Symfony polyfill for ctype functions",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"keywords": [
|
|
||||||
"compatibility",
|
|
||||||
"ctype",
|
|
||||||
"polyfill",
|
|
||||||
"portable"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.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": "2021-02-19T12:13:01+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "theseer/tokenizer",
|
"name": "theseer/tokenizer",
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
@ -3132,64 +3240,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2020-07-12T23:59:07+00:00"
|
"time": "2020-07-12T23:59:07+00:00"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "webmozart/assert",
|
|
||||||
"version": "1.10.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/webmozarts/assert.git",
|
|
||||||
"reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
|
|
||||||
"reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": "^7.2 || ^8.0",
|
|
||||||
"symfony/polyfill-ctype": "^1.8"
|
|
||||||
},
|
|
||||||
"conflict": {
|
|
||||||
"phpstan/phpstan": "<0.12.20",
|
|
||||||
"vimeo/psalm": "<4.6.1 || 4.6.2"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"phpunit/phpunit": "^8.5.13"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.10-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Webmozart\\Assert\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Bernhard Schussek",
|
|
||||||
"email": "bschussek@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Assertions to validate method input/output with nice error messages.",
|
|
||||||
"keywords": [
|
|
||||||
"assert",
|
|
||||||
"check",
|
|
||||||
"validate"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/webmozarts/assert/issues",
|
|
||||||
"source": "https://github.com/webmozarts/assert/tree/1.10.0"
|
|
||||||
},
|
|
||||||
"time": "2021-03-09T10:59:23+00:00"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"aliases": [],
|
"aliases": [],
|
||||||
|
@ -25,6 +25,7 @@ use Taproot\IndieAuth\Callback\DefaultAuthorizationForm;
|
|||||||
* Specification: https://indieauth.spec.indieweb.org/
|
* Specification: https://indieauth.spec.indieweb.org/
|
||||||
* Error responses: https://www.rfc-editor.org/rfc/rfc6749.html#section-5.2
|
* Error responses: https://www.rfc-editor.org/rfc/rfc6749.html#section-5.2
|
||||||
* indieweb/indieauth-client: https://github.com/indieweb/indieauth-client-php
|
* indieweb/indieauth-client: https://github.com/indieweb/indieauth-client-php
|
||||||
|
* Existing implementation with various validation functions and links to relevant spec portions: https://github.com/Zegnat/php-mindee/blob/development/index.php
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class Server {
|
class Server {
|
||||||
@ -55,8 +56,6 @@ class Server {
|
|||||||
|
|
||||||
protected string $secret;
|
protected string $secret;
|
||||||
|
|
||||||
protected int $tokenLength;
|
|
||||||
|
|
||||||
public function __construct(array $config) {
|
public function __construct(array $config) {
|
||||||
$config = array_merge([
|
$config = array_merge([
|
||||||
'csrfMiddleware' => null,
|
'csrfMiddleware' => null,
|
||||||
@ -67,14 +66,8 @@ class Server {
|
|||||||
'httpGetWithEffectiveUrl' => null,
|
'httpGetWithEffectiveUrl' => null,
|
||||||
'authorizationForm' => new DefaultAuthorizationForm(),
|
'authorizationForm' => new DefaultAuthorizationForm(),
|
||||||
'exceptionTemplatePath' => __DIR__ . '/../templates/default_exception_response.html.php',
|
'exceptionTemplatePath' => __DIR__ . '/../templates/default_exception_response.html.php',
|
||||||
'tokenLength' => 64
|
|
||||||
], $config);
|
], $config);
|
||||||
|
|
||||||
if (!is_int($config['tokenLength'])) {
|
|
||||||
throw new Exception("\$config['tokenLength'] must be an int!");
|
|
||||||
}
|
|
||||||
$this->tokenLength = $config['tokenLength'];
|
|
||||||
|
|
||||||
if (!is_string($config['exceptionTemplatePath'])) {
|
if (!is_string($config['exceptionTemplatePath'])) {
|
||||||
throw new Exception("\$config['secret'] must be a string (path).");
|
throw new Exception("\$config['secret'] must be a string (path).");
|
||||||
}
|
}
|
||||||
@ -282,7 +275,6 @@ class Server {
|
|||||||
'code_challenge' => $queryParams['code_challenge'],
|
'code_challenge' => $queryParams['code_challenge'],
|
||||||
'code_challenge_method' => $queryParams['code_challenge_method'],
|
'code_challenge_method' => $queryParams['code_challenge_method'],
|
||||||
'requested_scope' => $queryParams['scope'] ?? '',
|
'requested_scope' => $queryParams['scope'] ?? '',
|
||||||
'code' => generateRandomString($this->tokenLength)
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Pass it to the auth code customisation callback.
|
// Pass it to the auth code customisation callback.
|
||||||
|
31
src/Storage/Token.php
Normal file
31
src/Storage/Token.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Taproot\IndieAuth\Storage;
|
||||||
|
|
||||||
|
use JsonSerializable;
|
||||||
|
|
||||||
|
class Token implements JsonSerializable {
|
||||||
|
protected string $key;
|
||||||
|
protected array $data;
|
||||||
|
|
||||||
|
public function __construct(string $key, array $data) {
|
||||||
|
$this->key = $key;
|
||||||
|
$this->data = $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getData(): array {
|
||||||
|
return $this->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getKey(): string {
|
||||||
|
return $this->key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __toString() {
|
||||||
|
return $this->key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function jsonSerialize() {
|
||||||
|
return $this->data;
|
||||||
|
}
|
||||||
|
}
|
@ -5,11 +5,11 @@ namespace Taproot\IndieAuth\Storage;
|
|||||||
// TODO: document.
|
// TODO: document.
|
||||||
|
|
||||||
interface TokenStorageInterface {
|
interface TokenStorageInterface {
|
||||||
public function cleanUp($ttl=null): int;
|
public function createAuthCode(array $data): ?Token;
|
||||||
|
|
||||||
public function get(string $key): ?array;
|
public function exchangeAuthCodeForAccessToken(string $code): ?Token;
|
||||||
|
|
||||||
public function put(string $key, array $data): bool;
|
public function revokeAccessToken(string $token);
|
||||||
|
|
||||||
public function delete(string $key): bool;
|
public function getAccessToken(string $token): ?Token;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user