Implemented, tested non-PKCE flow. Fixes #1
This commit is contained in:
parent
ce541c3607
commit
1af270b42f
@ -150,6 +150,7 @@
|
||||
self::INVALID_SCOPE => ['statusCode' => 302, 'name' => 'Invalid scope Parameter', 'error' => 'invalid_request'],
|
||||
self::INVALID_GRANT => ['statusCode' => 400, 'name' => 'The provided credentials were not valid.', 'error' => 'invalid_grant'],
|
||||
self::INVALID_REQUEST => ['statusCode' => 400, 'name' => 'Invalid Request', 'error' => 'invalid_request'],
|
||||
self::INVALID_REQUEST_REDIRECT => ['statusCode' => 302, 'name' => 'Invalid Request', 'error' => 'invalid_request'],
|
||||
] </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
@ -215,6 +216,13 @@
|
||||
<span>
|
||||
= 13 </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
<dt class="phpdocumentor-table-of-contents__entry -constant -public">
|
||||
<a href="classes/Taproot-IndieAuth-IndieAuthException.html#constant_INVALID_REQUEST_REDIRECT">INVALID_REQUEST_REDIRECT</a>
|
||||
<span>
|
||||
= 14 </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
<dt class="phpdocumentor-table-of-contents__entry -constant -public">
|
||||
@ -374,7 +382,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/IndieAuthException.php"><a href="files/src-indieauthexception.html"><abbr title="src/IndieAuthException.php">IndieAuthException.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">25</span>
|
||||
<span class="phpdocumentor-element-found-in__line">26</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -398,6 +406,7 @@
|
||||
self::INVALID_SCOPE => ['statusCode' => 302, 'name' => 'Invalid scope Parameter', 'error' => 'invalid_request'],
|
||||
self::INVALID_GRANT => ['statusCode' => 400, 'name' => 'The provided credentials were not valid.', 'error' => 'invalid_grant'],
|
||||
self::INVALID_REQUEST => ['statusCode' => 400, 'name' => 'Invalid Request', 'error' => 'invalid_request'],
|
||||
self::INVALID_REQUEST_REDIRECT => ['statusCode' => 302, 'name' => 'Invalid Request', 'error' => 'invalid_request'],
|
||||
]</span>
|
||||
</code>
|
||||
|
||||
@ -630,6 +639,31 @@
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
<article class="phpdocumentor-element -constant -public ">
|
||||
<h4 class="phpdocumentor-element__name" id="constant_INVALID_REQUEST_REDIRECT">
|
||||
INVALID_REQUEST_REDIRECT
|
||||
<a href="classes/Taproot-IndieAuth-IndieAuthException.html#constant_INVALID_REQUEST_REDIRECT" class="headerlink"><i class="fas fa-link"></i></a>
|
||||
</h4>
|
||||
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/IndieAuthException.php"><a href="files/src-indieauthexception.html"><abbr title="src/IndieAuthException.php">IndieAuthException.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">24</span>
|
||||
</aside>
|
||||
|
||||
|
||||
<code class="phpdocumentor-signature phpdocumentor-code ">
|
||||
<span class="phpdocumentor-signature__visibility">public</span>
|
||||
<span class="phpdocumentor-signature__type">mixed</span>
|
||||
<span class="phpdocumentor-signature__name">INVALID_REQUEST_REDIRECT</span>
|
||||
= <span class="phpdocumentor-signature__default-value">14</span>
|
||||
</code>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
<article class="phpdocumentor-element -constant -public ">
|
||||
<h4 class="phpdocumentor-element__name" id="constant_INVALID_SCOPE">
|
||||
@ -705,7 +739,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/IndieAuthException.php"><a href="files/src-indieauthexception.html"><abbr title="src/IndieAuthException.php">IndieAuthException.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">43</span>
|
||||
<span class="phpdocumentor-element-found-in__line">45</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -739,7 +773,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/IndieAuthException.php"><a href="files/src-indieauthexception.html"><abbr title="src/IndieAuthException.php">IndieAuthException.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">45</span>
|
||||
<span class="phpdocumentor-element-found-in__line">47</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -795,7 +829,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/IndieAuthException.php"><a href="files/src-indieauthexception.html"><abbr title="src/IndieAuthException.php">IndieAuthException.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">60</span>
|
||||
<span class="phpdocumentor-element-found-in__line">62</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -827,7 +861,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/IndieAuthException.php"><a href="files/src-indieauthexception.html"><abbr title="src/IndieAuthException.php">IndieAuthException.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">64</span>
|
||||
<span class="phpdocumentor-element-found-in__line">66</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -859,7 +893,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/IndieAuthException.php"><a href="files/src-indieauthexception.html"><abbr title="src/IndieAuthException.php">IndieAuthException.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">80</span>
|
||||
<span class="phpdocumentor-element-found-in__line">82</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -891,7 +925,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/IndieAuthException.php"><a href="files/src-indieauthexception.html"><abbr title="src/IndieAuthException.php">IndieAuthException.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">56</span>
|
||||
<span class="phpdocumentor-element-found-in__line">58</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -923,7 +957,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/IndieAuthException.php"><a href="files/src-indieauthexception.html"><abbr title="src/IndieAuthException.php">IndieAuthException.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">75</span>
|
||||
<span class="phpdocumentor-element-found-in__line">77</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Trust Query Params</p>
|
||||
|
@ -275,6 +275,13 @@ documentation for both handling methods for further documentation about them.</p
|
||||
<span>
|
||||
: <abbr title="\Psr\Log\LoggerInterface">LoggerInterface</abbr> </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
<dt class="phpdocumentor-table-of-contents__entry -property -protected">
|
||||
<a href="classes/Taproot-IndieAuth-Server.html#property_requirePkce">$requirePkce</a>
|
||||
<span>
|
||||
: bool </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
<dt class="phpdocumentor-table-of-contents__entry -property -protected">
|
||||
@ -714,6 +721,36 @@ documentation for both handling methods for further documentation about them.</p
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
<article
|
||||
class="
|
||||
phpdocumentor-element
|
||||
-property
|
||||
-protected
|
||||
"
|
||||
>
|
||||
<h4 class="phpdocumentor-element__name" id="property_requirePkce">
|
||||
$requirePkce
|
||||
<a href="classes/Taproot-IndieAuth-Server.html#property_requirePkce" class="headerlink"><i class="fas fa-link"></i></a>
|
||||
<span class="phpdocumentor-element__modifiers">
|
||||
</span>
|
||||
</h4>
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/Server.php"><a href="files/src-server.html"><abbr title="src/Server.php">Server.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">124</span>
|
||||
</aside>
|
||||
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility">protected</span>
|
||||
<span class="phpdocumentor-signature__type">bool</span>
|
||||
<span class="phpdocumentor-signature__name">$requirePkce</span>
|
||||
</code>
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
<article
|
||||
class="
|
||||
@ -795,7 +832,7 @@ documentation for both handling methods for further documentation about them.</p
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/Server.php"><a href="files/src-server.html"><abbr title="src/Server.php">Server.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">191</span>
|
||||
<span class="phpdocumentor-element-found-in__line">193</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Constructor</p>
|
||||
@ -912,7 +949,7 @@ as the logger for any objects passed in config which implement <code class="pret
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/Server.php"><a href="files/src-server.html"><abbr title="src/Server.php">Server.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">286</span>
|
||||
<span class="phpdocumentor-element-found-in__line">291</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -944,7 +981,7 @@ as the logger for any objects passed in config which implement <code class="pret
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/Server.php"><a href="files/src-server.html"><abbr title="src/Server.php">Server.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">325</span>
|
||||
<span class="phpdocumentor-element-found-in__line">330</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Handle Authorization Endpoint Request</p>
|
||||
@ -1019,7 +1056,7 @@ error behaviour, one way to do so is to subclass <code class="prettyprint">Serve
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/Server.php"><a href="files/src-server.html"><abbr title="src/Server.php">Server.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">685</span>
|
||||
<span class="phpdocumentor-element-found-in__line">712</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Handle Token Endpoint Request</p>
|
||||
@ -1075,7 +1112,7 @@ error behaviour, one way to do so is to subclass <code class="prettyprint">Serve
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/Server.php"><a href="files/src-server.html"><abbr title="src/Server.php">Server.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">780</span>
|
||||
<span class="phpdocumentor-element-found-in__line">816</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Handle Exception</p>
|
||||
|
@ -163,7 +163,7 @@
|
||||
<h4>Legend</h4>
|
||||
<p><span class="success"><strong>Executed</strong></span><span class="danger"><strong>Not Executed</strong></span><span class="warning"><strong>Dead Code</strong></span></p>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
<a title="Back to the top" id="toplink" href="#">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M12 11L6 5l-6 6h12z"/></svg>
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -136,7 +136,7 @@
|
||||
<footer>
|
||||
<hr/>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
@ -152,7 +152,7 @@
|
||||
<span class="success"><strong>High</strong>: 90% to 100%</span>
|
||||
</p>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
@ -100,7 +100,7 @@
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="danger" colspan="4"> <a href="#45"><abbr title="create(int $code, Psr\Http\Message\ServerRequestInterface $request, ?Throwable $previous): self">create</abbr></a></td>
|
||||
<td class="danger" colspan="4"> <a href="#47"><abbr title="create(int $code, Psr\Http\Message\ServerRequestInterface $request, ?Throwable $previous): self">create</abbr></a></td>
|
||||
<td class="danger big"> <div class="progress">
|
||||
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
|
||||
<span class="sr-only">0.00% covered (danger)</span>
|
||||
@ -121,7 +121,7 @@
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="success" colspan="4"> <a href="#56"><abbr title="getStatusCode()">getStatusCode</abbr></a></td>
|
||||
<td class="success" colspan="4"> <a href="#58"><abbr title="getStatusCode()">getStatusCode</abbr></a></td>
|
||||
<td class="success big"> <div class="progress">
|
||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
|
||||
<span class="sr-only">100.00% covered (success)</span>
|
||||
@ -142,7 +142,7 @@
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="danger" colspan="4"> <a href="#60"><abbr title="getExplanation()">getExplanation</abbr></a></td>
|
||||
<td class="danger" colspan="4"> <a href="#62"><abbr title="getExplanation()">getExplanation</abbr></a></td>
|
||||
<td class="danger big"> <div class="progress">
|
||||
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
|
||||
<span class="sr-only">0.00% covered (danger)</span>
|
||||
@ -163,7 +163,7 @@
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="success" colspan="4"> <a href="#64"><abbr title="getInfo()">getInfo</abbr></a></td>
|
||||
<td class="success" colspan="4"> <a href="#66"><abbr title="getInfo()">getInfo</abbr></a></td>
|
||||
<td class="success big"> <div class="progress">
|
||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
|
||||
<span class="sr-only">100.00% covered (success)</span>
|
||||
@ -184,7 +184,7 @@
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="danger" colspan="4"> <a href="#75"><abbr title="trustQueryParams()">trustQueryParams</abbr></a></td>
|
||||
<td class="danger" colspan="4"> <a href="#77"><abbr title="trustQueryParams()">trustQueryParams</abbr></a></td>
|
||||
<td class="danger big"> <div class="progress">
|
||||
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
|
||||
<span class="sr-only">0.00% covered (danger)</span>
|
||||
@ -205,7 +205,7 @@
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="success" colspan="4"> <a href="#80"><abbr title="getRequest()">getRequest</abbr></a></td>
|
||||
<td class="success" colspan="4"> <a href="#82"><abbr title="getRequest()">getRequest</abbr></a></td>
|
||||
<td class="success big"> <div class="progress">
|
||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="100.00" aria-valuemin="0" aria-valuemax="100" style="width: 100.00%">
|
||||
<span class="sr-only">100.00% covered (success)</span>
|
||||
@ -254,66 +254,68 @@
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="21" href="#21">21</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">const</span><span class="default"> </span><span class="default">INVALID_SCOPE</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">11</span><span class="keyword">;</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="22" href="#22">22</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">const</span><span class="default"> </span><span class="default">INVALID_GRANT</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">12</span><span class="keyword">;</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="23" href="#23">23</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">const</span><span class="default"> </span><span class="default">INVALID_REQUEST</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">13</span><span class="keyword">;</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="24" href="#24">24</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="25" href="#25">25</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">const</span><span class="default"> </span><span class="default">EXC_INFO</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="keyword">[</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="26" href="#26">26</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INTERNAL_ERROR</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">500</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Internal Server Error'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'explanation'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'An internal server error occurred.'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="27" href="#27">27</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INTERNAL_ERROR_REDIRECT</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Internal Server Error'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'internal_error'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="28" href="#28">28</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">AUTHENTICATION_CALLBACK_MISSING_ME_PARAM</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Internal Server Error'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'internal_error'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="29" href="#29">29</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">AUTHORIZATION_APPROVAL_REQUEST_MISSING_HASH</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Request Missing Hash'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'internal_error'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="30" href="#30">30</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">AUTHORIZATION_APPROVAL_REQUEST_INVALID_HASH</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Request Hash Invalid'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'internal_error'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="31" href="#31">31</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// TODO: should this one be a 500 because it’s an internal server error, or a 400 because the client_id was likely invalid? Is anyone ever going to notice, or care?</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="32" href="#32">32</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">HTTP_EXCEPTION_FETCHING_CLIENT_ID</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">500</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Error Fetching Client App URL'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'explanation'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Fetching the client app (client_id) failed.'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="33" href="#33">33</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INTERNAL_EXCEPTION_FETCHING_CLIENT_ID</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">500</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Internal Error fetching client app URI'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'explanation'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Fetching the client app (client_id) failed due to an internal error.'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="34" href="#34">34</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_REDIRECT_URI</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid Client App Redirect URI'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'explanation'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'The client app redirect URI (redirect_uri) either was not a valid URI, did not sufficiently match client_id, or did not exactly match any redirect URIs parsed from fetching the client_id.'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="35" href="#35">35</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_CLIENT_ID</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid Client Identifier URI'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'explanation'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'The Client Identifier was not valid.'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="36" href="#36">36</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_STATE</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid state Parameter'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'invalid_request'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="37" href="#37">37</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_CODE_CHALLENGE</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid code_challenge Parameter'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'invalid_request'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="38" href="#38">38</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_SCOPE</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid scope Parameter'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'invalid_request'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="39" href="#39">39</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_GRANT</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'The provided credentials were not valid.'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'invalid_grant'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="40" href="#40">40</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_REQUEST</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid Request'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'invalid_request'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="41" href="#41">41</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="42" href="#42">42</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="43" href="#43">43</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">protected</span><span class="default"> </span><span class="default">ServerRequestInterface</span><span class="default"> </span><span class="default">$request</span><span class="keyword">;</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="24" href="#24">24</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">const</span><span class="default"> </span><span class="default">INVALID_REQUEST_REDIRECT</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">14</span><span class="keyword">;</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="25" href="#25">25</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="26" href="#26">26</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">const</span><span class="default"> </span><span class="default">EXC_INFO</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="keyword">[</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="27" href="#27">27</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INTERNAL_ERROR</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">500</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Internal Server Error'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'explanation'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'An internal server error occurred.'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="28" href="#28">28</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INTERNAL_ERROR_REDIRECT</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Internal Server Error'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'internal_error'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="29" href="#29">29</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">AUTHENTICATION_CALLBACK_MISSING_ME_PARAM</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Internal Server Error'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'internal_error'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="30" href="#30">30</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">AUTHORIZATION_APPROVAL_REQUEST_MISSING_HASH</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Request Missing Hash'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'internal_error'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="31" href="#31">31</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">AUTHORIZATION_APPROVAL_REQUEST_INVALID_HASH</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Request Hash Invalid'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'internal_error'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="32" href="#32">32</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// TODO: should this one be a 500 because it’s an internal server error, or a 400 because the client_id was likely invalid? Is anyone ever going to notice, or care?</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="33" href="#33">33</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">HTTP_EXCEPTION_FETCHING_CLIENT_ID</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">500</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Error Fetching Client App URL'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'explanation'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Fetching the client app (client_id) failed.'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="34" href="#34">34</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INTERNAL_EXCEPTION_FETCHING_CLIENT_ID</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">500</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Internal Error fetching client app URI'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'explanation'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Fetching the client app (client_id) failed due to an internal error.'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="35" href="#35">35</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_REDIRECT_URI</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid Client App Redirect URI'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'explanation'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'The client app redirect URI (redirect_uri) either was not a valid URI, did not sufficiently match client_id, or did not exactly match any redirect URIs parsed from fetching the client_id.'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="36" href="#36">36</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_CLIENT_ID</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid Client Identifier URI'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'explanation'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'The Client Identifier was not valid.'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="37" href="#37">37</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_STATE</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid state Parameter'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'invalid_request'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="38" href="#38">38</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_CODE_CHALLENGE</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid code_challenge Parameter'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'invalid_request'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="39" href="#39">39</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_SCOPE</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid scope Parameter'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'invalid_request'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="40" href="#40">40</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_GRANT</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'The provided credentials were not valid.'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'invalid_grant'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="41" href="#41">41</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_REQUEST</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid Request'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'invalid_request'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="42" href="#42">42</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">INVALID_REQUEST_REDIRECT</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">302</span><span class="keyword">,</span><span class="default"> </span><span class="default">'name'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Invalid Request'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'invalid_request'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="43" href="#43">43</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="44" href="#44">44</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="45" href="#45">45</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">static</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">create</span><span class="keyword">(</span><span class="default">int</span><span class="default"> </span><span class="default">$code</span><span class="keyword">,</span><span class="default"> </span><span class="default">ServerRequestInterface</span><span class="default"> </span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">?</span><span class="default">Throwable</span><span class="default"> </span><span class="default">$previous</span><span class="keyword">=</span><span class="default">null</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">self</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="46" href="#46">46</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Only accept known codes. Default to 0 (generic internal error) on an unrecognised code.</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="15 tests cover line 47" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="47" href="#47">47</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">if</span><span class="default"> </span><span class="keyword">(</span><span class="keyword">!</span><span class="default">in_array</span><span class="keyword">(</span><span class="default">$code</span><span class="keyword">,</span><span class="default"> </span><span class="default">array_keys</span><span class="keyword">(</span><span class="default">self</span><span class="default">::</span><span class="default">EXC_INFO</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="danger d-flex"><td class="col-1 text-right"><a id="48" href="#48">48</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$code</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">0</span><span class="keyword">;</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="49" href="#49">49</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="15 tests cover line 50" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="50" href="#50">50</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$message</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">EXC_INFO</span><span class="keyword">[</span><span class="default">$code</span><span class="keyword">]</span><span class="keyword">[</span><span class="default">'name'</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="15 tests cover line 51" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="51" href="#51">51</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$e</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">self</span><span class="keyword">(</span><span class="default">$message</span><span class="keyword">,</span><span class="default"> </span><span class="default">$code</span><span class="keyword">,</span><span class="default"> </span><span class="default">$previous</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="15 tests cover line 52" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="52" href="#52">52</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$e</span><span class="default">-></span><span class="default">request</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$request</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="15 tests cover line 53" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="53" href="#53">53</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$e</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="54" href="#54">54</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="55" href="#55">55</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="56" href="#56">56</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">getStatusCode</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="6 tests cover line 57" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="57" href="#57">57</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">getInfo</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">500</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="58" href="#58">58</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="59" href="#59">59</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="60" href="#60">60</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">getExplanation</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="danger d-flex"><td class="col-1 text-right"><a id="61" href="#61">61</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">getInfo</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">[</span><span class="default">'explanation'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">'An unknown error occured.'</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="62" href="#62">62</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="63" href="#63">63</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="64" href="#64">64</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">getInfo</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="15 tests cover line 65" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="65" href="#65">65</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">EXC_INFO</span><span class="keyword">[</span><span class="default">$this</span><span class="default">-></span><span class="default">code</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">EXC_INFO</span><span class="keyword">[</span><span class="default">self</span><span class="default">::</span><span class="default">INTERNAL_ERROR</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="66" href="#66">66</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="67" href="#67">67</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="68" href="#68">68</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">/**</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="69" href="#69">69</a></td><td class="col-11 codeLine"><span class="comment"> * Trust Query Params</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="70" href="#70">70</a></td><td class="col-11 codeLine"><span class="comment"> * </span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="71" href="#71">71</a></td><td class="col-11 codeLine"><span class="comment"> * Only useful on authorization form submission requests. If this returns false,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="72" href="#72">72</a></td><td class="col-11 codeLine"><span class="comment"> * the client_id and/or request_uri have likely been tampered with, and the error</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="73" href="#73">73</a></td><td class="col-11 codeLine"><span class="comment"> * page SHOULD NOT offer the user a link to them.</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="74" href="#74">74</a></td><td class="col-11 codeLine"><span class="comment"> */</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="75" href="#75">75</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">trustQueryParams</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="danger d-flex"><td class="col-1 text-right"><a id="76" href="#76">76</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">code</span><span class="default"> </span><span class="default">==</span><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">AUTHORIZATION_APPROVAL_REQUEST_INVALID_HASH</span></td></tr>
|
||||
<tr class="danger d-flex"><td class="col-1 text-right"><a id="77" href="#77">77</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">||</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">code</span><span class="default"> </span><span class="default">==</span><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">AUTHORIZATION_APPROVAL_REQUEST_MISSING_HASH</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="78" href="#78">78</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="79" href="#79">79</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="80" href="#80">80</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">getRequest</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="12 tests cover line 81" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="81" href="#81">81</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">request</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="82" href="#82">82</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="83" href="#83">83</a></td><td class="col-11 codeLine"><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="45" href="#45">45</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">protected</span><span class="default"> </span><span class="default">ServerRequestInterface</span><span class="default"> </span><span class="default">$request</span><span class="keyword">;</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="46" href="#46">46</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="47" href="#47">47</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">static</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">create</span><span class="keyword">(</span><span class="default">int</span><span class="default"> </span><span class="default">$code</span><span class="keyword">,</span><span class="default"> </span><span class="default">ServerRequestInterface</span><span class="default"> </span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">?</span><span class="default">Throwable</span><span class="default"> </span><span class="default">$previous</span><span class="keyword">=</span><span class="default">null</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">self</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="48" href="#48">48</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Only accept known codes. Default to 0 (generic internal error) on an unrecognised code.</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="19 tests cover line 49" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatNonPkceRequestMustLackBothPkceParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="49" href="#49">49</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">if</span><span class="default"> </span><span class="keyword">(</span><span class="keyword">!</span><span class="default">in_array</span><span class="keyword">(</span><span class="default">$code</span><span class="keyword">,</span><span class="default"> </span><span class="default">array_keys</span><span class="keyword">(</span><span class="default">self</span><span class="default">::</span><span class="default">EXC_INFO</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="danger d-flex"><td class="col-1 text-right"><a id="50" href="#50">50</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$code</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">0</span><span class="keyword">;</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="51" href="#51">51</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="19 tests cover line 52" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatNonPkceRequestMustLackBothPkceParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="52" href="#52">52</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$message</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">EXC_INFO</span><span class="keyword">[</span><span class="default">$code</span><span class="keyword">]</span><span class="keyword">[</span><span class="default">'name'</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="19 tests cover line 53" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatNonPkceRequestMustLackBothPkceParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="53" href="#53">53</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$e</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">self</span><span class="keyword">(</span><span class="default">$message</span><span class="keyword">,</span><span class="default"> </span><span class="default">$code</span><span class="keyword">,</span><span class="default"> </span><span class="default">$previous</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="19 tests cover line 54" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatNonPkceRequestMustLackBothPkceParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="54" href="#54">54</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$e</span><span class="default">-></span><span class="default">request</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$request</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="19 tests cover line 55" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatNonPkceRequestMustLackBothPkceParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="55" href="#55">55</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$e</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="56" href="#56">56</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="57" href="#57">57</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="58" href="#58">58</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">getStatusCode</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="6 tests cover line 59" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="59" href="#59">59</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">getInfo</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">500</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="60" href="#60">60</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="61" href="#61">61</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="62" href="#62">62</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">getExplanation</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="danger d-flex"><td class="col-1 text-right"><a id="63" href="#63">63</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">getInfo</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">[</span><span class="default">'explanation'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">'An unknown error occured.'</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="64" href="#64">64</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="65" href="#65">65</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="66" href="#66">66</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">getInfo</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="19 tests cover line 67" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatNonPkceRequestMustLackBothPkceParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="67" href="#67">67</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">EXC_INFO</span><span class="keyword">[</span><span class="default">$this</span><span class="default">-></span><span class="default">code</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">EXC_INFO</span><span class="keyword">[</span><span class="default">self</span><span class="default">::</span><span class="default">INTERNAL_ERROR</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="68" href="#68">68</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="69" href="#69">69</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="70" href="#70">70</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">/**</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="71" href="#71">71</a></td><td class="col-11 codeLine"><span class="comment"> * Trust Query Params</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="72" href="#72">72</a></td><td class="col-11 codeLine"><span class="comment"> * </span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="73" href="#73">73</a></td><td class="col-11 codeLine"><span class="comment"> * Only useful on authorization form submission requests. If this returns false,</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="74" href="#74">74</a></td><td class="col-11 codeLine"><span class="comment"> * the client_id and/or request_uri have likely been tampered with, and the error</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="75" href="#75">75</a></td><td class="col-11 codeLine"><span class="comment"> * page SHOULD NOT offer the user a link to them.</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="76" href="#76">76</a></td><td class="col-11 codeLine"><span class="comment"> */</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="77" href="#77">77</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">trustQueryParams</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="danger d-flex"><td class="col-1 text-right"><a id="78" href="#78">78</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">code</span><span class="default"> </span><span class="default">==</span><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">AUTHORIZATION_APPROVAL_REQUEST_INVALID_HASH</span></td></tr>
|
||||
<tr class="danger d-flex"><td class="col-1 text-right"><a id="79" href="#79">79</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">||</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">code</span><span class="default"> </span><span class="default">==</span><span class="default"> </span><span class="default">self</span><span class="default">::</span><span class="default">AUTHORIZATION_APPROVAL_REQUEST_MISSING_HASH</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="80" href="#80">80</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="81" href="#81">81</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="82" href="#82">82</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">getRequest</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="14 tests cover line 83" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="83" href="#83">83</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">request</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="84" href="#84">84</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="85" href="#85">85</a></td><td class="col-11 codeLine"><span class="keyword">}</span></td></tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
@ -324,7 +326,7 @@
|
||||
<h4>Legend</h4>
|
||||
<p><span class="success"><strong>Executed</strong></span><span class="danger"><strong>Not Executed</strong></span><span class="warning"><strong>Dead Code</strong></span></p>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
<a title="Back to the top" id="toplink" href="#">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M12 11L6 5l-6 6h12z"/></svg>
|
||||
|
@ -162,12 +162,12 @@
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="12" href="#12">12</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">protected</span><span class="default"> </span><span class="keyword">array</span><span class="default"> </span><span class="default">$args</span><span class="keyword">;</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="13" href="#13">13</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="14" href="#14">14</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">__construct</span><span class="keyword">(</span><span class="keyword">callable</span><span class="default"> </span><span class="default">$callable</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="20 tests cover line 15" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\DoubleSubmitCookieCsrfMiddlewareTest::testPassesThroughNonWriteRequestsAddingAttribute</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testUnauthenticatedRequestReturnsAuthenticationResponse</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkHeaderRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkElementRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testResponseReturnedFromNonIndieAuthRequestHandler</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="15" href="#15">15</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">callable</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$callable</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="20 tests cover line 16" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\DoubleSubmitCookieCsrfMiddlewareTest::testPassesThroughNonWriteRequestsAddingAttribute</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testUnauthenticatedRequestReturnsAuthenticationResponse</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkHeaderRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkElementRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testResponseReturnedFromNonIndieAuthRequestHandler</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="16" href="#16">16</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">args</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">array_slice</span><span class="keyword">(</span><span class="default">func_get_args</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="default">1</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="20 tests cover line 17" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\DoubleSubmitCookieCsrfMiddlewareTest::testPassesThroughNonWriteRequestsAddingAttribute</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testUnauthenticatedRequestReturnsAuthenticationResponse</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkHeaderRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkElementRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testResponseReturnedFromNonIndieAuthRequestHandler</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="17" href="#17">17</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="23 tests cover line 15" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\DoubleSubmitCookieCsrfMiddlewareTest::testPassesThroughNonWriteRequestsAddingAttribute</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testUnauthenticatedRequestReturnsAuthenticationResponse</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkHeaderRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkElementRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testResponseReturnedFromNonIndieAuthRequestHandler</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="15" href="#15">15</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">callable</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$callable</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="23 tests cover line 16" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\DoubleSubmitCookieCsrfMiddlewareTest::testPassesThroughNonWriteRequestsAddingAttribute</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testUnauthenticatedRequestReturnsAuthenticationResponse</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkHeaderRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkElementRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testResponseReturnedFromNonIndieAuthRequestHandler</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="16" href="#16">16</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">args</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">array_slice</span><span class="keyword">(</span><span class="default">func_get_args</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="default">1</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="23 tests cover line 17" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\DoubleSubmitCookieCsrfMiddlewareTest::testPassesThroughNonWriteRequestsAddingAttribute</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testUnauthenticatedRequestReturnsAuthenticationResponse</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkHeaderRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkElementRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testResponseReturnedFromNonIndieAuthRequestHandler</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="17" href="#17">17</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="18" href="#18">18</a></td><td class="col-11 codeLine"></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="19" href="#19">19</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">handle</span><span class="keyword">(</span><span class="default">ServerRequestInterface</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">ResponseInterface</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="20 tests cover line 20" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\DoubleSubmitCookieCsrfMiddlewareTest::testPassesThroughNonWriteRequestsAddingAttribute</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testUnauthenticatedRequestReturnsAuthenticationResponse</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkHeaderRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkElementRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testResponseReturnedFromNonIndieAuthRequestHandler</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="20" href="#20">20</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">call_user_func_array</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">callable</span><span class="keyword">,</span><span class="default"> </span><span class="default">array_merge</span><span class="keyword">(</span><span class="keyword">[</span><span class="default">$request</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">args</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="23 tests cover line 20" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\DoubleSubmitCookieCsrfMiddlewareTest::testPassesThroughNonWriteRequestsAddingAttribute</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testUnauthenticatedRequestReturnsAuthenticationResponse</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkHeaderRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkElementRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testNonIndieAuthRequestWithDefaultHandlerReturnsError</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testResponseReturnedFromNonIndieAuthRequestHandler</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="20" href="#20">20</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">call_user_func_array</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">callable</span><span class="keyword">,</span><span class="default"> </span><span class="default">array_merge</span><span class="keyword">(</span><span class="keyword">[</span><span class="default">$request</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">args</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="21" href="#21">21</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="22" href="#22">22</a></td><td class="col-11 codeLine"><span class="keyword">}</span></td></tr>
|
||||
|
||||
@ -180,7 +180,7 @@
|
||||
<h4>Legend</h4>
|
||||
<p><span class="success"><strong>Executed</strong></span><span class="danger"><strong>Not Executed</strong></span><span class="warning"><strong>Dead Code</strong></span></p>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
<a title="Back to the top" id="toplink" href="#">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M12 11L6 5l-6 6h12z"/></svg>
|
||||
|
File diff suppressed because one or more lines are too long
@ -157,7 +157,7 @@
|
||||
<h4>Legend</h4>
|
||||
<p><span class="success"><strong>Executed</strong></span><span class="danger"><strong>Not Executed</strong></span><span class="warning"><strong>Dead Code</strong></span></p>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
<a title="Back to the top" id="toplink" href="#">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M12 11L6 5l-6 6h12z"/></svg>
|
||||
|
@ -177,7 +177,7 @@
|
||||
<h4>Legend</h4>
|
||||
<p><span class="success"><strong>Executed</strong></span><span class="danger"><strong>Not Executed</strong></span><span class="warning"><strong>Dead Code</strong></span></p>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
<a title="Back to the top" id="toplink" href="#">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M12 11L6 5l-6 6h12z"/></svg>
|
||||
|
@ -138,7 +138,7 @@
|
||||
<footer>
|
||||
<hr/>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
@ -195,7 +195,7 @@
|
||||
<span class="success"><strong>High</strong>: 90% to 100%</span>
|
||||
</p>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -79,7 +79,7 @@
|
||||
<h4>Legend</h4>
|
||||
<p><span class="success"><strong>Executed</strong></span><span class="danger"><strong>Not Executed</strong></span><span class="warning"><strong>Dead Code</strong></span></p>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
<a title="Back to the top" id="toplink" href="#">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M12 11L6 5l-6 6h12z"/></svg>
|
||||
|
@ -235,7 +235,7 @@
|
||||
<h4>Legend</h4>
|
||||
<p><span class="success"><strong>Executed</strong></span><span class="danger"><strong>Not Executed</strong></span><span class="warning"><strong>Dead Code</strong></span></p>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
<a title="Back to the top" id="toplink" href="#">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M12 11L6 5l-6 6h12z"/></svg>
|
||||
|
@ -142,7 +142,7 @@
|
||||
<footer>
|
||||
<hr/>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
@ -137,7 +137,7 @@
|
||||
<span class="success"><strong>High</strong>: 90% to 100%</span>
|
||||
</p>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -44,21 +44,21 @@
|
||||
<tr>
|
||||
<td class="success">Total</td>
|
||||
<td class="success big"> <div class="progress">
|
||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="94.62" aria-valuemin="0" aria-valuemax="100" style="width: 94.62%">
|
||||
<span class="sr-only">94.62% covered (success)</span>
|
||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="95.48" aria-valuemin="0" aria-valuemax="100" style="width: 95.48%">
|
||||
<span class="sr-only">95.48% covered (success)</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="success small"><div align="right">94.62%</div></td>
|
||||
<td class="success small"><div align="right">510 / 539</div></td>
|
||||
<td class="success small"><div align="right">95.48%</div></td>
|
||||
<td class="success small"><div align="right">528 / 553</div></td>
|
||||
<td class="warning big"> <div class="progress">
|
||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="73.68" aria-valuemin="0" aria-valuemax="100" style="width: 73.68%">
|
||||
<span class="sr-only">73.68% covered (warning)</span>
|
||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="75.44" aria-valuemin="0" aria-valuemax="100" style="width: 75.44%">
|
||||
<span class="sr-only">75.44% covered (warning)</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="warning small"><div align="right">73.68%</div></td>
|
||||
<td class="warning small"><div align="right">42 / 57</div></td>
|
||||
<td class="warning small"><div align="right">75.44%</div></td>
|
||||
<td class="warning small"><div align="right">43 / 57</div></td>
|
||||
<td class="danger big"> <div class="progress">
|
||||
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="44.44" aria-valuemin="0" aria-valuemax="100" style="width: 44.44%">
|
||||
<span class="sr-only">44.44% covered (danger)</span>
|
||||
@ -184,21 +184,21 @@
|
||||
<tr>
|
||||
<td class="success"><img src="phpunit_icons/file-code.svg" class="octicon" /><a href="Server.php.html">Server.php</a></td>
|
||||
<td class="success big"> <div class="progress">
|
||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="94.98" aria-valuemin="0" aria-valuemax="100" style="width: 94.98%">
|
||||
<span class="sr-only">94.98% covered (success)</span>
|
||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="96.69" aria-valuemin="0" aria-valuemax="100" style="width: 96.69%">
|
||||
<span class="sr-only">96.69% covered (success)</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="success small"><div align="right">94.98%</div></td>
|
||||
<td class="success small"><div align="right">246 / 259</div></td>
|
||||
<td class="success small"><div align="right">96.69%</div></td>
|
||||
<td class="success small"><div align="right">263 / 272</div></td>
|
||||
<td class="warning big"> <div class="progress">
|
||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="60.00" aria-valuemin="0" aria-valuemax="100" style="width: 60.00%">
|
||||
<span class="sr-only">60.00% covered (warning)</span>
|
||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="80.00" aria-valuemin="0" aria-valuemax="100" style="width: 80.00%">
|
||||
<span class="sr-only">80.00% covered (warning)</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="warning small"><div align="right">60.00%</div></td>
|
||||
<td class="warning small"><div align="right">3 / 5</div></td>
|
||||
<td class="warning small"><div align="right">80.00%</div></td>
|
||||
<td class="warning small"><div align="right">4 / 5</div></td>
|
||||
<td class="danger big"> <div class="progress">
|
||||
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="0.00" aria-valuemin="0" aria-valuemax="100" style="width: 0.00%">
|
||||
<span class="sr-only">0.00% covered (danger)</span>
|
||||
@ -212,13 +212,13 @@
|
||||
<tr>
|
||||
<td class="success"><img src="phpunit_icons/file-code.svg" class="octicon" /><a href="functions.php.html">functions.php</a></td>
|
||||
<td class="success big"> <div class="progress">
|
||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="97.59" aria-valuemin="0" aria-valuemax="100" style="width: 97.59%">
|
||||
<span class="sr-only">97.59% covered (success)</span>
|
||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="97.62" aria-valuemin="0" aria-valuemax="100" style="width: 97.62%">
|
||||
<span class="sr-only">97.62% covered (success)</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="success small"><div align="right">97.59%</div></td>
|
||||
<td class="success small"><div align="right">81 / 83</div></td>
|
||||
<td class="success small"><div align="right">97.62%</div></td>
|
||||
<td class="success small"><div align="right">82 / 84</div></td>
|
||||
<td class="warning big"> <div class="progress">
|
||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="88.89" aria-valuemin="0" aria-valuemax="100" style="width: 88.89%">
|
||||
<span class="sr-only">88.89% covered (warning)</span>
|
||||
@ -245,7 +245,7 @@
|
||||
<span class="success"><strong>High</strong>: 90% to 100%</span>
|
||||
</p>
|
||||
<p>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Wed Jun 16 21:41:10 UTC 2021.</small>
|
||||
<small>Generated by <a href="https://github.com/sebastianbergmann/php-code-coverage" target="_top">php-code-coverage 9.2.6</a> using <a href="https://secure.php.net/" target="_top">PHP 7.4.19</a> with <a href="https://xdebug.org/">Xdebug 3.0.4</a> and <a href="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 17 22:38:11 UTC 2021.</small>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
@ -91,21 +91,21 @@
|
||||
<dt class="phpdocumentor-table-of-contents__entry -function -">
|
||||
<a href="namespaces/taproot-indieauth.html#function_generateRandomString">generateRandomString()</a>
|
||||
<span>
|
||||
: mixed </span>
|
||||
: string </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
<dt class="phpdocumentor-table-of-contents__entry -function -">
|
||||
<a href="namespaces/taproot-indieauth.html#function_generateRandomPrintableAsciiString">generateRandomPrintableAsciiString()</a>
|
||||
<span>
|
||||
: mixed </span>
|
||||
: string </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
<dt class="phpdocumentor-table-of-contents__entry -function -">
|
||||
<a href="namespaces/taproot-indieauth.html#function_generatePKCECodeChallenge">generatePKCECodeChallenge()</a>
|
||||
<span>
|
||||
: mixed </span>
|
||||
: string </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
@ -161,7 +161,7 @@
|
||||
<dt class="phpdocumentor-table-of-contents__entry -function -">
|
||||
<a href="namespaces/taproot-indieauth.html#function_appendQueryParams">appendQueryParams()</a>
|
||||
<span>
|
||||
: mixed </span>
|
||||
: string </span>
|
||||
</dt>
|
||||
<dd>Append Query Parameters</dd>
|
||||
|
||||
@ -238,14 +238,14 @@
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">generateRandomString</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">mixed </span><span class="phpdocumentor-signature__argument__name">$numBytes</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">mixed</span></code>
|
||||
<span class="phpdocumentor-signature__name">generateRandomString</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">int </span><span class="phpdocumentor-signature__argument__name">$numBytes</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string</span></code>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-argument-list__heading">Parameters</h5>
|
||||
<dl class="phpdocumentor-argument-list">
|
||||
<dt class="phpdocumentor-argument-list__entry">
|
||||
<span class="phpdocumentor-signature__argument__name">$numBytes</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">mixed</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">int</span>
|
||||
</dt>
|
||||
<dd class="phpdocumentor-argument-list__definition">
|
||||
|
||||
@ -270,7 +270,7 @@
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">generateRandomPrintableAsciiString</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">int </span><span class="phpdocumentor-signature__argument__name">$length</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">mixed</span></code>
|
||||
<span class="phpdocumentor-signature__name">generateRandomPrintableAsciiString</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">int </span><span class="phpdocumentor-signature__argument__name">$length</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string</span></code>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-argument-list__heading">Parameters</h5>
|
||||
@ -302,14 +302,14 @@
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">generatePKCECodeChallenge</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">mixed </span><span class="phpdocumentor-signature__argument__name">$plaintext</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">mixed</span></code>
|
||||
<span class="phpdocumentor-signature__name">generatePKCECodeChallenge</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$plaintext</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string</span></code>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-argument-list__heading">Parameters</h5>
|
||||
<dl class="phpdocumentor-argument-list">
|
||||
<dt class="phpdocumentor-argument-list__entry">
|
||||
<span class="phpdocumentor-signature__argument__name">$plaintext</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">mixed</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">string</span>
|
||||
</dt>
|
||||
<dd class="phpdocumentor-argument-list__definition">
|
||||
|
||||
@ -366,7 +366,7 @@
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">hashAuthorizationRequestParameters</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type"><abbr title="\Psr\Http\Message\ServerRequestInterface">ServerRequestInterface</abbr> </span><span class="phpdocumentor-signature__argument__name">$request</span></span><span class="phpdocumentor-signature__argument"><span>, </span><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$secret</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">string|null </span><span class="phpdocumentor-signature__argument__name">$algo</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">null</span><span> ]</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">array<string|int, mixed>|null </span><span class="phpdocumentor-signature__argument__name">$hashedParameters</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">null</span><span> ]</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string|null</span></code>
|
||||
<span class="phpdocumentor-signature__name">hashAuthorizationRequestParameters</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type"><abbr title="\Psr\Http\Message\ServerRequestInterface">ServerRequestInterface</abbr> </span><span class="phpdocumentor-signature__argument__name">$request</span></span><span class="phpdocumentor-signature__argument"><span>, </span><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$secret</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">string|null </span><span class="phpdocumentor-signature__argument__name">$algo</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">null</span><span> ]</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">array<string|int, mixed>|null </span><span class="phpdocumentor-signature__argument__name">$hashedParameters</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">null</span><span> ]</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">bool </span><span class="phpdocumentor-signature__argument__name">$requirePkce</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">true</span><span> ]</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string|null</span></code>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-argument-list__heading">Parameters</h5>
|
||||
@ -398,6 +398,13 @@
|
||||
= <span class="phpdocumentor-signature__argument__default-value">null</span> </dt>
|
||||
<dd class="phpdocumentor-argument-list__definition">
|
||||
|
||||
</dd>
|
||||
<dt class="phpdocumentor-argument-list__entry">
|
||||
<span class="phpdocumentor-signature__argument__name">$requirePkce</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">bool</span>
|
||||
= <span class="phpdocumentor-signature__argument__default-value">true</span> </dt>
|
||||
<dd class="phpdocumentor-argument-list__definition">
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
@ -413,7 +420,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">60</span>
|
||||
<span class="phpdocumentor-element-found-in__line">64</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -445,7 +452,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">66</span>
|
||||
<span class="phpdocumentor-element-found-in__line">70</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -484,7 +491,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">72</span>
|
||||
<span class="phpdocumentor-element-found-in__line">76</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -516,7 +523,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">78</span>
|
||||
<span class="phpdocumentor-element-found-in__line">82</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -548,7 +555,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">86</span>
|
||||
<span class="phpdocumentor-element-found-in__line">90</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -594,14 +601,14 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">110</span>
|
||||
<span class="phpdocumentor-element-found-in__line">114</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Append Query Parameters</p>
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">appendQueryParams</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$uri</span></span><span class="phpdocumentor-signature__argument"><span>, </span><span class="phpdocumentor-signature__argument__return-type">array<string|int, mixed> </span><span class="phpdocumentor-signature__argument__name">$queryParams</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">mixed</span></code>
|
||||
<span class="phpdocumentor-signature__name">appendQueryParams</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$uri</span></span><span class="phpdocumentor-signature__argument"><span>, </span><span class="phpdocumentor-signature__argument__return-type">array<string|int, mixed> </span><span class="phpdocumentor-signature__argument__name">$queryParams</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string</span></code>
|
||||
|
||||
<section class="phpdocumentor-description"><p>Converts <code class="prettyprint">$queryParams</code> into a query string, then checks <code class="prettyprint">$uri</code> for an
|
||||
existing query string. Then appends the newly generated query string
|
||||
@ -638,7 +645,7 @@ with either ? or & as appropriate.</p>
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">127</span>
|
||||
<span class="phpdocumentor-element-found-in__line">134</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Try setLogger</p>
|
||||
@ -670,6 +677,30 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
</dl>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-tag-list__heading" id="tags">
|
||||
Tags
|
||||
<a href="#tags" class="headerlink"><i class="fas fa-link"></i></a>
|
||||
</h5>
|
||||
<dl class="phpdocumentor-tag-list">
|
||||
<dt class="phpdocumentor-tag-list__entry">
|
||||
<span class="phpdocumentor-tag__name">psalm-suppress</span>
|
||||
</dt>
|
||||
<dd class="phpdocumentor-tag-list__definition">
|
||||
|
||||
<section class="phpdocumentor-description"><p>MissingReturnType</p>
|
||||
</section>
|
||||
|
||||
</dd>
|
||||
<dt class="phpdocumentor-tag-list__entry">
|
||||
<span class="phpdocumentor-tag__name">psalm-suppress</span>
|
||||
</dt>
|
||||
<dd class="phpdocumentor-tag-list__definition">
|
||||
|
||||
<section class="phpdocumentor-description"><p>MissingParamType</p>
|
||||
</section>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
</article>
|
||||
@ -681,7 +712,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">134</span>
|
||||
<span class="phpdocumentor-element-found-in__line">141</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -720,7 +751,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">159</span>
|
||||
<span class="phpdocumentor-element-found-in__line">166</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Check if a provided string matches the IndieAuth criteria for a Client Identifier.</p>
|
||||
@ -771,7 +802,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">183</span>
|
||||
<span class="phpdocumentor-element-found-in__line">190</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Check if a provided string matches the IndieAuth criteria for a User Profile URL.</p>
|
||||
@ -822,7 +853,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">202</span>
|
||||
<span class="phpdocumentor-element-found-in__line">209</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">OAuth 2.0 limits what values are valid for state.</p>
|
||||
@ -872,7 +903,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">211</span>
|
||||
<span class="phpdocumentor-element-found-in__line">218</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">IndieAuth requires PKCE. This implementation supports only S256 for hashing.</p>
|
||||
@ -921,7 +952,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">219</span>
|
||||
<span class="phpdocumentor-element-found-in__line">226</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">OAuth 2.0 limits what values are valid for scope.</p>
|
||||
|
@ -290,6 +290,11 @@ Search.appendIndex(
|
||||
"name": "INVALID_REQUEST",
|
||||
"summary": "",
|
||||
"url": "classes/Taproot-IndieAuth-IndieAuthException.html#constant_INVALID_REQUEST"
|
||||
}, {
|
||||
"fqsen": "\\Taproot\\IndieAuth\\IndieAuthException\u003A\u003AINVALID_REQUEST_REDIRECT",
|
||||
"name": "INVALID_REQUEST_REDIRECT",
|
||||
"summary": "",
|
||||
"url": "classes/Taproot-IndieAuth-IndieAuthException.html#constant_INVALID_REQUEST_REDIRECT"
|
||||
}, {
|
||||
"fqsen": "\\Taproot\\IndieAuth\\IndieAuthException\u003A\u003AEXC_INFO",
|
||||
"name": "EXC_INFO",
|
||||
@ -535,6 +540,11 @@ Search.appendIndex(
|
||||
"name": "secret",
|
||||
"summary": "",
|
||||
"url": "classes/Taproot-IndieAuth-Server.html#property_secret"
|
||||
}, {
|
||||
"fqsen": "\\Taproot\\IndieAuth\\Server\u003A\u003A\u0024requirePkce",
|
||||
"name": "requirePkce",
|
||||
"summary": "",
|
||||
"url": "classes/Taproot-IndieAuth-Server.html#property_requirePkce"
|
||||
}, {
|
||||
"fqsen": "\\Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage",
|
||||
"name": "FilesystemJsonStorage",
|
||||
|
@ -115,21 +115,21 @@
|
||||
<dt class="phpdocumentor-table-of-contents__entry -function -">
|
||||
<a href="namespaces/taproot-indieauth.html#function_generateRandomString">generateRandomString()</a>
|
||||
<span>
|
||||
: mixed </span>
|
||||
: string </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
<dt class="phpdocumentor-table-of-contents__entry -function -">
|
||||
<a href="namespaces/taproot-indieauth.html#function_generateRandomPrintableAsciiString">generateRandomPrintableAsciiString()</a>
|
||||
<span>
|
||||
: mixed </span>
|
||||
: string </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
<dt class="phpdocumentor-table-of-contents__entry -function -">
|
||||
<a href="namespaces/taproot-indieauth.html#function_generatePKCECodeChallenge">generatePKCECodeChallenge()</a>
|
||||
<span>
|
||||
: mixed </span>
|
||||
: string </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
@ -185,7 +185,7 @@
|
||||
<dt class="phpdocumentor-table-of-contents__entry -function -">
|
||||
<a href="namespaces/taproot-indieauth.html#function_appendQueryParams">appendQueryParams()</a>
|
||||
<span>
|
||||
: mixed </span>
|
||||
: string </span>
|
||||
</dt>
|
||||
<dd>Append Query Parameters</dd>
|
||||
|
||||
@ -261,14 +261,14 @@
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">generateRandomString</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">mixed </span><span class="phpdocumentor-signature__argument__name">$numBytes</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">mixed</span></code>
|
||||
<span class="phpdocumentor-signature__name">generateRandomString</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">int </span><span class="phpdocumentor-signature__argument__name">$numBytes</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string</span></code>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-argument-list__heading">Parameters</h5>
|
||||
<dl class="phpdocumentor-argument-list">
|
||||
<dt class="phpdocumentor-argument-list__entry">
|
||||
<span class="phpdocumentor-signature__argument__name">$numBytes</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">mixed</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">int</span>
|
||||
</dt>
|
||||
<dd class="phpdocumentor-argument-list__definition">
|
||||
|
||||
@ -293,7 +293,7 @@
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">generateRandomPrintableAsciiString</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">int </span><span class="phpdocumentor-signature__argument__name">$length</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">mixed</span></code>
|
||||
<span class="phpdocumentor-signature__name">generateRandomPrintableAsciiString</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">int </span><span class="phpdocumentor-signature__argument__name">$length</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string</span></code>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-argument-list__heading">Parameters</h5>
|
||||
@ -325,14 +325,14 @@
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">generatePKCECodeChallenge</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">mixed </span><span class="phpdocumentor-signature__argument__name">$plaintext</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">mixed</span></code>
|
||||
<span class="phpdocumentor-signature__name">generatePKCECodeChallenge</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$plaintext</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string</span></code>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-argument-list__heading">Parameters</h5>
|
||||
<dl class="phpdocumentor-argument-list">
|
||||
<dt class="phpdocumentor-argument-list__entry">
|
||||
<span class="phpdocumentor-signature__argument__name">$plaintext</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">mixed</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">string</span>
|
||||
</dt>
|
||||
<dd class="phpdocumentor-argument-list__definition">
|
||||
|
||||
@ -389,7 +389,7 @@
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">hashAuthorizationRequestParameters</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type"><abbr title="\Psr\Http\Message\ServerRequestInterface">ServerRequestInterface</abbr> </span><span class="phpdocumentor-signature__argument__name">$request</span></span><span class="phpdocumentor-signature__argument"><span>, </span><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$secret</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">string|null </span><span class="phpdocumentor-signature__argument__name">$algo</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">null</span><span> ]</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">array<string|int, mixed>|null </span><span class="phpdocumentor-signature__argument__name">$hashedParameters</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">null</span><span> ]</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string|null</span></code>
|
||||
<span class="phpdocumentor-signature__name">hashAuthorizationRequestParameters</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type"><abbr title="\Psr\Http\Message\ServerRequestInterface">ServerRequestInterface</abbr> </span><span class="phpdocumentor-signature__argument__name">$request</span></span><span class="phpdocumentor-signature__argument"><span>, </span><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$secret</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">string|null </span><span class="phpdocumentor-signature__argument__name">$algo</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">null</span><span> ]</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">array<string|int, mixed>|null </span><span class="phpdocumentor-signature__argument__name">$hashedParameters</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">null</span><span> ]</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">bool </span><span class="phpdocumentor-signature__argument__name">$requirePkce</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">true</span><span> ]</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string|null</span></code>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-argument-list__heading">Parameters</h5>
|
||||
@ -421,6 +421,13 @@
|
||||
= <span class="phpdocumentor-signature__argument__default-value">null</span> </dt>
|
||||
<dd class="phpdocumentor-argument-list__definition">
|
||||
|
||||
</dd>
|
||||
<dt class="phpdocumentor-argument-list__entry">
|
||||
<span class="phpdocumentor-signature__argument__name">$requirePkce</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">bool</span>
|
||||
= <span class="phpdocumentor-signature__argument__default-value">true</span> </dt>
|
||||
<dd class="phpdocumentor-argument-list__definition">
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
@ -436,7 +443,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">60</span>
|
||||
<span class="phpdocumentor-element-found-in__line">64</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -468,7 +475,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">66</span>
|
||||
<span class="phpdocumentor-element-found-in__line">70</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -507,7 +514,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">72</span>
|
||||
<span class="phpdocumentor-element-found-in__line">76</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -539,7 +546,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">78</span>
|
||||
<span class="phpdocumentor-element-found-in__line">82</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -571,7 +578,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">86</span>
|
||||
<span class="phpdocumentor-element-found-in__line">90</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -617,14 +624,14 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">110</span>
|
||||
<span class="phpdocumentor-element-found-in__line">114</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Append Query Parameters</p>
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">appendQueryParams</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$uri</span></span><span class="phpdocumentor-signature__argument"><span>, </span><span class="phpdocumentor-signature__argument__return-type">array<string|int, mixed> </span><span class="phpdocumentor-signature__argument__name">$queryParams</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">mixed</span></code>
|
||||
<span class="phpdocumentor-signature__name">appendQueryParams</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$uri</span></span><span class="phpdocumentor-signature__argument"><span>, </span><span class="phpdocumentor-signature__argument__return-type">array<string|int, mixed> </span><span class="phpdocumentor-signature__argument__name">$queryParams</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string</span></code>
|
||||
|
||||
<section class="phpdocumentor-description"><p>Converts <code class="prettyprint">$queryParams</code> into a query string, then checks <code class="prettyprint">$uri</code> for an
|
||||
existing query string. Then appends the newly generated query string
|
||||
@ -661,7 +668,7 @@ with either ? or & as appropriate.</p>
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">127</span>
|
||||
<span class="phpdocumentor-element-found-in__line">134</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Try setLogger</p>
|
||||
@ -693,6 +700,30 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
</dl>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-tag-list__heading" id="tags">
|
||||
Tags
|
||||
<a href="#tags" class="headerlink"><i class="fas fa-link"></i></a>
|
||||
</h5>
|
||||
<dl class="phpdocumentor-tag-list">
|
||||
<dt class="phpdocumentor-tag-list__entry">
|
||||
<span class="phpdocumentor-tag__name">psalm-suppress</span>
|
||||
</dt>
|
||||
<dd class="phpdocumentor-tag-list__definition">
|
||||
|
||||
<section class="phpdocumentor-description"><p>MissingReturnType</p>
|
||||
</section>
|
||||
|
||||
</dd>
|
||||
<dt class="phpdocumentor-tag-list__entry">
|
||||
<span class="phpdocumentor-tag__name">psalm-suppress</span>
|
||||
</dt>
|
||||
<dd class="phpdocumentor-tag-list__definition">
|
||||
|
||||
<section class="phpdocumentor-description"><p>MissingParamType</p>
|
||||
</section>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
</article>
|
||||
@ -704,7 +735,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">134</span>
|
||||
<span class="phpdocumentor-element-found-in__line">141</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -743,7 +774,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">159</span>
|
||||
<span class="phpdocumentor-element-found-in__line">166</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Check if a provided string matches the IndieAuth criteria for a Client Identifier.</p>
|
||||
@ -794,7 +825,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">183</span>
|
||||
<span class="phpdocumentor-element-found-in__line">190</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Check if a provided string matches the IndieAuth criteria for a User Profile URL.</p>
|
||||
@ -845,7 +876,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">202</span>
|
||||
<span class="phpdocumentor-element-found-in__line">209</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">OAuth 2.0 limits what values are valid for state.</p>
|
||||
@ -895,7 +926,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">211</span>
|
||||
<span class="phpdocumentor-element-found-in__line">218</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">IndieAuth requires PKCE. This implementation supports only S256 for hashing.</p>
|
||||
@ -944,7 +975,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">219</span>
|
||||
<span class="phpdocumentor-element-found-in__line">226</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">OAuth 2.0 limits what values are valid for scope.</p>
|
||||
|
@ -122,21 +122,21 @@
|
||||
<dt class="phpdocumentor-table-of-contents__entry -function -">
|
||||
<a href="namespaces/taproot-indieauth.html#function_generateRandomString">generateRandomString()</a>
|
||||
<span>
|
||||
: mixed </span>
|
||||
: string </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
<dt class="phpdocumentor-table-of-contents__entry -function -">
|
||||
<a href="namespaces/taproot-indieauth.html#function_generateRandomPrintableAsciiString">generateRandomPrintableAsciiString()</a>
|
||||
<span>
|
||||
: mixed </span>
|
||||
: string </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
<dt class="phpdocumentor-table-of-contents__entry -function -">
|
||||
<a href="namespaces/taproot-indieauth.html#function_generatePKCECodeChallenge">generatePKCECodeChallenge()</a>
|
||||
<span>
|
||||
: mixed </span>
|
||||
: string </span>
|
||||
</dt>
|
||||
<dd></dd>
|
||||
|
||||
@ -192,7 +192,7 @@
|
||||
<dt class="phpdocumentor-table-of-contents__entry -function -">
|
||||
<a href="namespaces/taproot-indieauth.html#function_appendQueryParams">appendQueryParams()</a>
|
||||
<span>
|
||||
: mixed </span>
|
||||
: string </span>
|
||||
</dt>
|
||||
<dd>Append Query Parameters</dd>
|
||||
|
||||
@ -268,14 +268,14 @@
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">generateRandomString</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">mixed </span><span class="phpdocumentor-signature__argument__name">$numBytes</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">mixed</span></code>
|
||||
<span class="phpdocumentor-signature__name">generateRandomString</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">int </span><span class="phpdocumentor-signature__argument__name">$numBytes</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string</span></code>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-argument-list__heading">Parameters</h5>
|
||||
<dl class="phpdocumentor-argument-list">
|
||||
<dt class="phpdocumentor-argument-list__entry">
|
||||
<span class="phpdocumentor-signature__argument__name">$numBytes</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">mixed</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">int</span>
|
||||
</dt>
|
||||
<dd class="phpdocumentor-argument-list__definition">
|
||||
|
||||
@ -300,7 +300,7 @@
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">generateRandomPrintableAsciiString</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">int </span><span class="phpdocumentor-signature__argument__name">$length</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">mixed</span></code>
|
||||
<span class="phpdocumentor-signature__name">generateRandomPrintableAsciiString</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">int </span><span class="phpdocumentor-signature__argument__name">$length</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string</span></code>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-argument-list__heading">Parameters</h5>
|
||||
@ -332,14 +332,14 @@
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">generatePKCECodeChallenge</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">mixed </span><span class="phpdocumentor-signature__argument__name">$plaintext</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">mixed</span></code>
|
||||
<span class="phpdocumentor-signature__name">generatePKCECodeChallenge</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$plaintext</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string</span></code>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-argument-list__heading">Parameters</h5>
|
||||
<dl class="phpdocumentor-argument-list">
|
||||
<dt class="phpdocumentor-argument-list__entry">
|
||||
<span class="phpdocumentor-signature__argument__name">$plaintext</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">mixed</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">string</span>
|
||||
</dt>
|
||||
<dd class="phpdocumentor-argument-list__definition">
|
||||
|
||||
@ -396,7 +396,7 @@
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">hashAuthorizationRequestParameters</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type"><abbr title="\Psr\Http\Message\ServerRequestInterface">ServerRequestInterface</abbr> </span><span class="phpdocumentor-signature__argument__name">$request</span></span><span class="phpdocumentor-signature__argument"><span>, </span><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$secret</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">string|null </span><span class="phpdocumentor-signature__argument__name">$algo</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">null</span><span> ]</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">array<string|int, mixed>|null </span><span class="phpdocumentor-signature__argument__name">$hashedParameters</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">null</span><span> ]</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string|null</span></code>
|
||||
<span class="phpdocumentor-signature__name">hashAuthorizationRequestParameters</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type"><abbr title="\Psr\Http\Message\ServerRequestInterface">ServerRequestInterface</abbr> </span><span class="phpdocumentor-signature__argument__name">$request</span></span><span class="phpdocumentor-signature__argument"><span>, </span><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$secret</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">string|null </span><span class="phpdocumentor-signature__argument__name">$algo</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">null</span><span> ]</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">array<string|int, mixed>|null </span><span class="phpdocumentor-signature__argument__name">$hashedParameters</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">null</span><span> ]</span></span><span class="phpdocumentor-signature__argument"><span>[</span><span>, </span><span class="phpdocumentor-signature__argument__return-type">bool </span><span class="phpdocumentor-signature__argument__name">$requirePkce</span><span> = </span><span class="phpdocumentor-signature__argument__default-value">true</span><span> ]</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string|null</span></code>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-argument-list__heading">Parameters</h5>
|
||||
@ -428,6 +428,13 @@
|
||||
= <span class="phpdocumentor-signature__argument__default-value">null</span> </dt>
|
||||
<dd class="phpdocumentor-argument-list__definition">
|
||||
|
||||
</dd>
|
||||
<dt class="phpdocumentor-argument-list__entry">
|
||||
<span class="phpdocumentor-signature__argument__name">$requirePkce</span>
|
||||
: <span class="phpdocumentor-signature__argument__return-type">bool</span>
|
||||
= <span class="phpdocumentor-signature__argument__default-value">true</span> </dt>
|
||||
<dd class="phpdocumentor-argument-list__definition">
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
@ -443,7 +450,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">60</span>
|
||||
<span class="phpdocumentor-element-found-in__line">64</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -475,7 +482,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">66</span>
|
||||
<span class="phpdocumentor-element-found-in__line">70</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -514,7 +521,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">72</span>
|
||||
<span class="phpdocumentor-element-found-in__line">76</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -546,7 +553,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">78</span>
|
||||
<span class="phpdocumentor-element-found-in__line">82</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -578,7 +585,7 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">86</span>
|
||||
<span class="phpdocumentor-element-found-in__line">90</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -624,14 +631,14 @@
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">110</span>
|
||||
<span class="phpdocumentor-element-found-in__line">114</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Append Query Parameters</p>
|
||||
|
||||
<code class="phpdocumentor-code phpdocumentor-signature ">
|
||||
<span class="phpdocumentor-signature__visibility"></span>
|
||||
<span class="phpdocumentor-signature__name">appendQueryParams</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$uri</span></span><span class="phpdocumentor-signature__argument"><span>, </span><span class="phpdocumentor-signature__argument__return-type">array<string|int, mixed> </span><span class="phpdocumentor-signature__argument__name">$queryParams</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">mixed</span></code>
|
||||
<span class="phpdocumentor-signature__name">appendQueryParams</span><span>(</span><span class="phpdocumentor-signature__argument"><span class="phpdocumentor-signature__argument__return-type">string </span><span class="phpdocumentor-signature__argument__name">$uri</span></span><span class="phpdocumentor-signature__argument"><span>, </span><span class="phpdocumentor-signature__argument__return-type">array<string|int, mixed> </span><span class="phpdocumentor-signature__argument__name">$queryParams</span></span><span>)</span><span> : </span><span class="phpdocumentor-signature__response_type">string</span></code>
|
||||
|
||||
<section class="phpdocumentor-description"><p>Converts <code class="prettyprint">$queryParams</code> into a query string, then checks <code class="prettyprint">$uri</code> for an
|
||||
existing query string. Then appends the newly generated query string
|
||||
@ -668,7 +675,7 @@ with either ? or & as appropriate.</p>
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">127</span>
|
||||
<span class="phpdocumentor-element-found-in__line">134</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Try setLogger</p>
|
||||
@ -700,6 +707,30 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
</dl>
|
||||
|
||||
|
||||
<h5 class="phpdocumentor-tag-list__heading" id="tags">
|
||||
Tags
|
||||
<a href="#tags" class="headerlink"><i class="fas fa-link"></i></a>
|
||||
</h5>
|
||||
<dl class="phpdocumentor-tag-list">
|
||||
<dt class="phpdocumentor-tag-list__entry">
|
||||
<span class="phpdocumentor-tag__name">psalm-suppress</span>
|
||||
</dt>
|
||||
<dd class="phpdocumentor-tag-list__definition">
|
||||
|
||||
<section class="phpdocumentor-description"><p>MissingReturnType</p>
|
||||
</section>
|
||||
|
||||
</dd>
|
||||
<dt class="phpdocumentor-tag-list__entry">
|
||||
<span class="phpdocumentor-tag__name">psalm-suppress</span>
|
||||
</dt>
|
||||
<dd class="phpdocumentor-tag-list__definition">
|
||||
|
||||
<section class="phpdocumentor-description"><p>MissingParamType</p>
|
||||
</section>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
</article>
|
||||
@ -711,7 +742,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">134</span>
|
||||
<span class="phpdocumentor-element-found-in__line">141</span>
|
||||
</aside>
|
||||
|
||||
|
||||
@ -750,7 +781,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">159</span>
|
||||
<span class="phpdocumentor-element-found-in__line">166</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Check if a provided string matches the IndieAuth criteria for a Client Identifier.</p>
|
||||
@ -801,7 +832,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">183</span>
|
||||
<span class="phpdocumentor-element-found-in__line">190</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">Check if a provided string matches the IndieAuth criteria for a User Profile URL.</p>
|
||||
@ -852,7 +883,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">202</span>
|
||||
<span class="phpdocumentor-element-found-in__line">209</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">OAuth 2.0 limits what values are valid for state.</p>
|
||||
@ -902,7 +933,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">211</span>
|
||||
<span class="phpdocumentor-element-found-in__line">218</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">IndieAuth requires PKCE. This implementation supports only S256 for hashing.</p>
|
||||
@ -951,7 +982,7 @@ to <code class="prettyprint">$logger</code>. Returns <code class="prettyprint">$
|
||||
<aside class="phpdocumentor-element-found-in">
|
||||
<abbr class="phpdocumentor-element-found-in__file" title="src/functions.php"><a href="files/src-functions.html"><abbr title="src/functions.php">functions.php</abbr></a></abbr>
|
||||
:
|
||||
<span class="phpdocumentor-element-found-in__line">219</span>
|
||||
<span class="phpdocumentor-element-found-in__line">226</span>
|
||||
</aside>
|
||||
|
||||
<p class="phpdocumentor-summary">OAuth 2.0 limits what values are valid for scope.</p>
|
||||
|
@ -21,6 +21,7 @@ class IndieAuthException extends Exception {
|
||||
const INVALID_SCOPE = 11;
|
||||
const INVALID_GRANT = 12;
|
||||
const INVALID_REQUEST = 13;
|
||||
const INVALID_REQUEST_REDIRECT = 14;
|
||||
|
||||
const EXC_INFO = [
|
||||
self::INTERNAL_ERROR => ['statusCode' => 500, 'name' => 'Internal Server Error', 'explanation' => 'An internal server error occurred.'],
|
||||
@ -38,6 +39,7 @@ class IndieAuthException extends Exception {
|
||||
self::INVALID_SCOPE => ['statusCode' => 302, 'name' => 'Invalid scope Parameter', 'error' => 'invalid_request'],
|
||||
self::INVALID_GRANT => ['statusCode' => 400, 'name' => 'The provided credentials were not valid.', 'error' => 'invalid_grant'],
|
||||
self::INVALID_REQUEST => ['statusCode' => 400, 'name' => 'Invalid Request', 'error' => 'invalid_request'],
|
||||
self::INVALID_REQUEST_REDIRECT => ['statusCode' => 302, 'name' => 'Invalid Request', 'error' => 'invalid_request'],
|
||||
];
|
||||
|
||||
protected ServerRequestInterface $request;
|
||||
|
@ -121,6 +121,8 @@ class Server {
|
||||
|
||||
protected string $secret;
|
||||
|
||||
protected bool $requirePkce;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
@ -197,8 +199,11 @@ class Server {
|
||||
'httpGetWithEffectiveUrl' => null,
|
||||
'authorizationForm' => new DefaultAuthorizationForm(),
|
||||
'exceptionTemplatePath' => __DIR__ . '/../templates/default_exception_response.html.php',
|
||||
'requirePKCE' => true,
|
||||
], $config);
|
||||
|
||||
$this->requirePkce = $config['requirePKCE'];
|
||||
|
||||
if (!is_string($config['exceptionTemplatePath'])) {
|
||||
throw new BadMethodCallException("\$config['exceptionTemplatePath'] must be a string (path).");
|
||||
}
|
||||
@ -348,7 +353,7 @@ class Server {
|
||||
// on the auth code before it gets exchanged.
|
||||
$tokenData = $this->tokenStorage->exchangeAuthCodeForAccessToken($bodyParams['code'], function (array $authCode) use ($request, $bodyParams) {
|
||||
// Verify that all required parameters are included.
|
||||
$requiredParameters = ['client_id', 'redirect_uri', 'code_verifier'];
|
||||
$requiredParameters = ($this->requirePkce or !empty($authCode['code_challenge'])) ? ['client_id', 'redirect_uri', 'code_verifier'] : ['client_id', 'redirect_uri'];
|
||||
$missingRequiredParameters = array_filter($requiredParameters, function ($p) use ($bodyParams) {
|
||||
return !array_key_exists($p, $bodyParams) || empty($bodyParams[$p]);
|
||||
});
|
||||
@ -364,13 +369,22 @@ class Server {
|
||||
throw IndieAuthException::create(IndieAuthException::INVALID_GRANT, $request);
|
||||
}
|
||||
|
||||
// Check that the supplied code_verifier hashes to the stored code_challenge
|
||||
// TODO: support method = plain as well as S256.
|
||||
if (!hash_equals($authCode['code_challenge'], generatePKCECodeChallenge($bodyParams['code_verifier']))) {
|
||||
$this->logger->error("The provided code_verifier did not hash to the stored code_challenge");
|
||||
// If the auth code was requested with no code_challenge, but the exchange request provides a
|
||||
// code_verifier, return an error.
|
||||
if (!empty($bodyParams['code_verifier']) && empty($authCode['code_challenge'])) {
|
||||
$this->logger->error("A code_verifier was provided when trying to exchange an auth code requested without a code_challenge.");
|
||||
throw IndieAuthException::create(IndieAuthException::INVALID_GRANT, $request);
|
||||
}
|
||||
|
||||
if ($this->requirePkce or !empty($authCode['code_challenge'])) {
|
||||
// Check that the supplied code_verifier hashes to the stored code_challenge
|
||||
// TODO: support method = plain as well as S256.
|
||||
if (!hash_equals($authCode['code_challenge'], generatePKCECodeChallenge($bodyParams['code_verifier']))) {
|
||||
$this->logger->error("The provided code_verifier did not hash to the stored code_challenge");
|
||||
throw IndieAuthException::create(IndieAuthException::INVALID_GRANT, $request);
|
||||
}
|
||||
}
|
||||
|
||||
// Check that this token either grants at most the profile scope.
|
||||
$requestedScopes = array_filter(explode(' ', $authCode['scope'] ?? ''));
|
||||
if (!empty($requestedScopes) && $requestedScopes != ['profile']) {
|
||||
@ -441,7 +455,7 @@ class Server {
|
||||
// How most errors are handled depends on whether or not the request has a valid redirect_uri. In
|
||||
// order to know that, we need to also validate, fetch and parse the client_id.
|
||||
// If the request lacks a hash, or if the provided hash was invalid, perform the validation.
|
||||
$currentRequestHash = hashAuthorizationRequestParameters($request, $this->secret);
|
||||
$currentRequestHash = hashAuthorizationRequestParameters($request, $this->secret, null, null, $this->requirePkce);
|
||||
if (!isset($queryParams[self::HASH_QUERY_STRING_KEY]) or is_null($currentRequestHash) or !hash_equals($currentRequestHash, $queryParams[self::HASH_QUERY_STRING_KEY])) {
|
||||
|
||||
// All we need to know at this stage is whether the redirect_uri is valid. If it
|
||||
@ -502,22 +516,29 @@ class Server {
|
||||
$this->logger->warning("The state provided in an authorization request was not valid.", $queryParams);
|
||||
throw IndieAuthException::create(IndieAuthException::INVALID_STATE, $request);
|
||||
}
|
||||
|
||||
// Validate code_challenge parameter.
|
||||
if (!isset($queryParams['code_challenge']) or !isValidCodeChallenge($queryParams['code_challenge'])) {
|
||||
$this->logger->warning("The code_challenge provided in an authorization request was not valid.", $queryParams);
|
||||
throw IndieAuthException::create(IndieAuthException::INVALID_CODE_CHALLENGE, $request);
|
||||
}
|
||||
|
||||
if (!isset($queryParams['code_challenge_method']) or !in_array($queryParams['code_challenge_method'], ['S256', 'plain'])) {
|
||||
$this->logger->error("The code_challenge_method parameter was missing or invalid.", $queryParams);
|
||||
throw IndieAuthException::create(IndieAuthException::INVALID_CODE_CHALLENGE, $request);
|
||||
}
|
||||
|
||||
// From now on, any redirect error responses should include the state parameter.
|
||||
// This is handled automatically in `handleException()` and is only noted here
|
||||
// for reference.
|
||||
|
||||
// If either PKCE parameter is present, validate both.
|
||||
if (isset($queryParams['code_challenge']) or isset($queryParams['code_challenge_method'])) {
|
||||
if (!isset($queryParams['code_challenge']) or !isValidCodeChallenge($queryParams['code_challenge'])) {
|
||||
$this->logger->warning("The code_challenge provided in an authorization request was not valid.", $queryParams);
|
||||
throw IndieAuthException::create(IndieAuthException::INVALID_CODE_CHALLENGE, $request);
|
||||
}
|
||||
|
||||
if (!isset($queryParams['code_challenge_method']) or !in_array($queryParams['code_challenge_method'], ['S256', 'plain'])) {
|
||||
$this->logger->error("The code_challenge_method parameter was missing or invalid.", $queryParams);
|
||||
throw IndieAuthException::create(IndieAuthException::INVALID_CODE_CHALLENGE, $request);
|
||||
}
|
||||
} else {
|
||||
// If neither PKCE parameter is defined, and PKCE is required, throw an error. Otherwise, proceed.
|
||||
if ($this->requirePkce) {
|
||||
$this->logger->warning("PKCE is required, and both code_challenge and code_challenge_method were missing.");
|
||||
throw IndieAuthException::create(IndieAuthException::INVALID_REQUEST_REDIRECT, $request);
|
||||
}
|
||||
}
|
||||
|
||||
// Validate the scope parameter, if provided.
|
||||
if (array_key_exists('scope', $queryParams) && !isValidScope($queryParams['scope'])) {
|
||||
$this->logger->warning("The scope provided in an authorization request was not valid.", $queryParams);
|
||||
@ -535,8 +556,9 @@ class Server {
|
||||
|
||||
// Build a URL containing the indieauth authorization request parameters, hashing them
|
||||
// to protect them from being changed.
|
||||
// Make a hash of the protected indieauth-specific parameters.
|
||||
$hash = hashAuthorizationRequestParameters($request, $this->secret);
|
||||
// Make a hash of the protected indieauth-specific parameters. If PKCE is in use, include
|
||||
// the PKCE parameters in the hash. Otherwise, leave them out.
|
||||
$hash = hashAuthorizationRequestParameters($request, $this->secret, null, null, $this->requirePkce);
|
||||
// Operate on a copy of $queryParams, otherwise requests will always have a valid hash!
|
||||
$redirectQueryParams = $queryParams;
|
||||
$redirectQueryParams[self::HASH_QUERY_STRING_KEY] = $hash;
|
||||
@ -566,7 +588,7 @@ class Server {
|
||||
throw IndieAuthException::create(IndieAuthException::AUTHORIZATION_APPROVAL_REQUEST_MISSING_HASH, $request);
|
||||
}
|
||||
|
||||
$expectedHash = hashAuthorizationRequestParameters($request, $this->secret);
|
||||
$expectedHash = hashAuthorizationRequestParameters($request, $this->secret, null, null, $this->requirePkce);
|
||||
if (!isset($queryParams[self::HASH_QUERY_STRING_KEY]) or is_null($expectedHash) or !hash_equals($expectedHash, $queryParams[self::HASH_QUERY_STRING_KEY])) {
|
||||
$this->logger->warning("The hash provided in the URL was invalid!", [
|
||||
'expected' => $expectedHash,
|
||||
@ -580,8 +602,8 @@ class Server {
|
||||
'client_id' => $queryParams['client_id'],
|
||||
'redirect_uri' => $queryParams['redirect_uri'],
|
||||
'state' => $queryParams['state'],
|
||||
'code_challenge' => $queryParams['code_challenge'],
|
||||
'code_challenge_method' => $queryParams['code_challenge_method'],
|
||||
'code_challenge' => $queryParams['code_challenge'] ?? null,
|
||||
'code_challenge_method' => $queryParams['code_challenge_method'] ?? null,
|
||||
'requested_scope' => $queryParams['scope'] ?? '',
|
||||
]);
|
||||
|
||||
@ -710,7 +732,7 @@ class Server {
|
||||
// on the auth code before it gets exchanged.
|
||||
$tokenData = $this->tokenStorage->exchangeAuthCodeForAccessToken($bodyParams['code'], function (array $authCode) use ($request, $bodyParams) {
|
||||
// Verify that all required parameters are included.
|
||||
$requiredParameters = ['client_id', 'redirect_uri', 'code_verifier'];
|
||||
$requiredParameters = ($this->requirePkce or !empty($authCode['code_challenge'])) ? ['client_id', 'redirect_uri', 'code_verifier'] : ['client_id', 'redirect_uri'];
|
||||
$missingRequiredParameters = array_filter($requiredParameters, function ($p) use ($bodyParams) {
|
||||
return !array_key_exists($p, $bodyParams) || empty($bodyParams[$p]);
|
||||
});
|
||||
@ -726,13 +748,22 @@ class Server {
|
||||
throw IndieAuthException::create(IndieAuthException::INVALID_GRANT, $request);
|
||||
}
|
||||
|
||||
// Check that the supplied code_verifier hashes to the stored code_challenge
|
||||
// TODO: support method = plain as well as S256.
|
||||
if (!hash_equals($authCode['code_challenge'], generatePKCECodeChallenge($bodyParams['code_verifier']))) {
|
||||
$this->logger->error("The provided code_verifier did not hash to the stored code_challenge");
|
||||
// If the auth code was requested with no code_challenge, but the exchange request provides a
|
||||
// code_verifier, return an error.
|
||||
if (!empty($bodyParams['code_verifier']) && empty($authCode['code_challenge'])) {
|
||||
$this->logger->error("A code_verifier was provided when trying to exchange an auth code requested without a code_challenge.");
|
||||
throw IndieAuthException::create(IndieAuthException::INVALID_GRANT, $request);
|
||||
}
|
||||
|
||||
if ($this->requirePkce or !empty($authCode['code_challenge'])) {
|
||||
// Check that the supplied code_verifier hashes to the stored code_challenge
|
||||
// TODO: support method = plain as well as S256.
|
||||
if (!hash_equals($authCode['code_challenge'], generatePKCECodeChallenge($bodyParams['code_verifier']))) {
|
||||
$this->logger->error("The provided code_verifier did not hash to the stored code_challenge");
|
||||
throw IndieAuthException::create(IndieAuthException::INVALID_GRANT, $request);
|
||||
}
|
||||
}
|
||||
|
||||
// Check that scope is not empty.
|
||||
if (empty($authCode['scope'])) {
|
||||
$this->logger->error("An exchange request for a token with an empty scope was sent to the token endpoint.");
|
||||
|
@ -42,11 +42,15 @@ function base64_urlencode(string $string): string {
|
||||
return rtrim(strtr(base64_encode($string), '+/', '-_'), '=');
|
||||
}
|
||||
|
||||
function hashAuthorizationRequestParameters(ServerRequestInterface $request, string $secret, ?string $algo=null, ?array $hashedParameters=null): ?string {
|
||||
$hashedParameters = $hashedParameters ?? ['client_id', 'redirect_uri', 'code_challenge', 'code_challenge_method'];
|
||||
function hashAuthorizationRequestParameters(ServerRequestInterface $request, string $secret, ?string $algo=null, ?array $hashedParameters=null, bool $requirePkce=true): ?string {
|
||||
$queryParams = $request->getQueryParams();
|
||||
|
||||
if (is_null($hashedParameters)) {
|
||||
$hashedParameters = ($requirePkce or isset($queryParams['code_challenge'])) ? ['client_id', 'redirect_uri', 'code_challenge', 'code_challenge_method'] : ['client_id', 'redirect_uri'];
|
||||
}
|
||||
|
||||
$algo = $algo ?? 'sha256';
|
||||
|
||||
$queryParams = $request->getQueryParams();
|
||||
$data = '';
|
||||
foreach ($hashedParameters as $key) {
|
||||
if (!isset($queryParams[$key])) {
|
||||
|
@ -168,6 +168,18 @@ class ServerTest extends TestCase {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function testRequestsMissingBothPkceParametersReturnsError() {
|
||||
$s = $this->getDefaultServer();
|
||||
$req = $this->getIARequest();
|
||||
$qp = $req->getQueryParams();
|
||||
unset($qp['code_challenge']);
|
||||
unset($qp['code_challenge_method']);
|
||||
$req = $req->withQueryParams($qp);
|
||||
|
||||
$res = $s->handleAuthorizationEndpointRequest($req);
|
||||
$this->assertEquals(302, $res->getStatusCode());
|
||||
}
|
||||
|
||||
public function testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser() {
|
||||
$testCases = [
|
||||
@ -305,7 +317,7 @@ class ServerTest extends TestCase {
|
||||
Server::HANDLE_AUTHENTICATION_REQUEST => function (ServerRequestInterface $request, string $formAction): array {
|
||||
return ['me' => 'https://me.example.com'];
|
||||
},
|
||||
'httpGetWithEffectiveUrl' => function ($url): array {
|
||||
'httpGetWithEffectiveUrl' => function (string $url): array {
|
||||
// An empty response suffices for this test.
|
||||
return [
|
||||
new Response(200, ['content-type' => 'text/html'], '' ),
|
||||
@ -388,7 +400,7 @@ EOT
|
||||
Server::HANDLE_AUTHENTICATION_REQUEST => function (ServerRequestInterface $request, string $formAction): array {
|
||||
return ['me' => 'https://me.example.com'];
|
||||
},
|
||||
'httpGetWithEffectiveUrl' => function ($url): array {
|
||||
'httpGetWithEffectiveUrl' => function (string $url): array {
|
||||
return [
|
||||
new Response(200, [
|
||||
'content-type' => 'text/html',
|
||||
@ -417,7 +429,7 @@ EOT
|
||||
Server::HANDLE_AUTHENTICATION_REQUEST => function (ServerRequestInterface $request, string $formAction): array {
|
||||
return ['me' => 'https://me.example.com'];
|
||||
},
|
||||
'httpGetWithEffectiveUrl' => function ($url): array {
|
||||
'httpGetWithEffectiveUrl' => function (string $url): array {
|
||||
return [
|
||||
new Response(200, ['content-type' => 'text/html'],
|
||||
'<link rel="redirect_uri another_rel" href="https://link-element.example.com/auth" />'
|
||||
@ -447,7 +459,7 @@ EOT
|
||||
Server::HANDLE_AUTHENTICATION_REQUEST => function (ServerRequestInterface $request, string $formAction) {
|
||||
return ['me' => 'https://me.example.com'];
|
||||
},
|
||||
'httpGetWithEffectiveUrl' => function ($url) use ($correctHAppPhoto, $correctHAppName, $correctHAppUrl) {
|
||||
'httpGetWithEffectiveUrl' => function (string $url) use ($correctHAppPhoto, $correctHAppName, $correctHAppUrl): array {
|
||||
return [
|
||||
new Response(200, ['content-type' => 'text/html'],
|
||||
<<<EOT
|
||||
@ -602,7 +614,7 @@ EOT
|
||||
* Test Authorization Token Exchange Requests
|
||||
*/
|
||||
|
||||
public function testExchangeFlowsReturnErrorsIfParametersAreMissing() {
|
||||
public function testExchangeFlowsReturnErrorsIfCodeParameterIsMissing() {
|
||||
$s = $this->getDefaultServer();
|
||||
|
||||
$req = (new ServerRequest('POST', 'https://example.com'))->withParsedBody([
|
||||
@ -620,6 +632,34 @@ EOT
|
||||
$this->assertEquals('invalid_request', $tokenEndpointJson['error']);
|
||||
}
|
||||
|
||||
public function testExchangeFlowsReturnErrorsIfParametersAreMissing() {
|
||||
$s = $this->getDefaultServer();
|
||||
|
||||
foreach ([
|
||||
[$s, 'handleAuthorizationEndpointRequest'],
|
||||
[$s, 'handleTokenEndpointRequest']
|
||||
] as $exchangeEndpoint) {
|
||||
$authCode = $s->getTokenStorage()->createAuthCode([
|
||||
'client_id' => 'https://client.example.com/',
|
||||
'redirect_uri' => 'https://client.example.com/auth',
|
||||
'code_challenge' => generatePKCECodeChallenge(generateRandomString(32)),
|
||||
'state' => '12345',
|
||||
'code_challenge_method' => 'S256',
|
||||
'scope' => 'create update'
|
||||
]);
|
||||
|
||||
$req = (new ServerRequest('POST', 'https://example.com'))->withParsedBody([
|
||||
'grant_type' => 'authorization_code',
|
||||
'code' => $authCode
|
||||
]);
|
||||
|
||||
$res = $exchangeEndpoint($req);
|
||||
$this->assertEquals(400, $res->getStatusCode());
|
||||
$resJson = json_decode((string) $res->getBody(), true);
|
||||
$this->assertEquals('invalid_request', $resJson['error']);
|
||||
}
|
||||
}
|
||||
|
||||
public function testExchangeFlowsReturnErrorOnInvalidParameters() {
|
||||
$s = $this->getDefaultServer();
|
||||
$storage = new FilesystemJsonStorage(TOKEN_STORAGE_PATH, SERVER_SECRET);
|
||||
@ -859,6 +899,146 @@ EOT
|
||||
|
||||
$this->assertEquals($responseBody, (string) $res->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Backwards-compatibility
|
||||
*/
|
||||
|
||||
public function testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows() {
|
||||
$s = $this->getDefaultServer([
|
||||
Server::HANDLE_AUTHENTICATION_REQUEST => function (ServerRequestInterface $request) {
|
||||
return ['me' => 'https://me.example.com/'];
|
||||
},
|
||||
'httpGetWithEffectiveUrl' => function ($url): array {
|
||||
return [new Response(200, ['content-type' => 'text/html'], ''), $url ];
|
||||
},
|
||||
'requirePKCE' => false
|
||||
]);
|
||||
|
||||
foreach ([
|
||||
'Auth Endpoint Exchange' => [$s, 'handleAuthorizationEndpointRequest'],
|
||||
'Token Endpoint Exchange' => [$s, 'handleTokenEndpointRequest']
|
||||
] as $testCase => $handleExchangeRequestEndpoint) {
|
||||
// Clean up the test environment.
|
||||
$this->setUp();
|
||||
// Build a valid, hashed request without either PKCE parameter. This takes some faffing around
|
||||
// due to the supposedly elegant immutable Request objects.
|
||||
$req = $this->getApprovalRequest(true, true, null, [
|
||||
'taproot_indieauth_server_scope[]' => ['profile']
|
||||
]);
|
||||
$params = $req->getQueryParams();
|
||||
unset($params['code_challenge']);
|
||||
unset($params['code_challenge_method']);
|
||||
$req = $req->withQueryParams($params);
|
||||
$hash = hashAuthorizationRequestParameters($req, SERVER_SECRET, null, null, false);
|
||||
$params[Server::HASH_QUERY_STRING_KEY] = $hash;
|
||||
$req = $req->withQueryParams($params);
|
||||
|
||||
$res = $s->handleAuthorizationEndpointRequest($req);
|
||||
|
||||
$this->assertEquals(302, $res->getStatusCode(), $testCase);
|
||||
parse_str(parse_url($res->getHeaderLine('location'), PHP_URL_QUERY), $redirectQueryParams);
|
||||
$this->assertArrayNotHasKey('error', $redirectQueryParams, "$testCase");
|
||||
$this->assertNotNull($redirectQueryParams['code'], $testCase);
|
||||
|
||||
// Now check that the token exchange works.
|
||||
// Build
|
||||
$req = (new ServerRequest('POST', 'https://example.com'))->withParsedBody([
|
||||
'grant_type' => 'authorization_code',
|
||||
'code' => $redirectQueryParams['code'],
|
||||
'client_id' => $params['client_id'],
|
||||
'redirect_uri' => $params['redirect_uri']
|
||||
]);
|
||||
|
||||
$res = $handleExchangeRequestEndpoint($req);
|
||||
$resJson = json_decode((string) $res->getBody(), true);
|
||||
$this->assertEquals(200, $res->getStatusCode(), "$testCase");
|
||||
$this->assertIsArray($resJson, $testCase);
|
||||
$this->assertArrayNotHasKey('error', $resJson, $testCase);
|
||||
$this->assertEquals('https://me.example.com/', $resJson['me'], $testCase);
|
||||
if ($testCase == 'Token Endpoint Exchange') {
|
||||
$this->assertArrayHasKey('access_token', $resJson, $testCase);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function testBackCompatNonPkceRequestMustLackBothPkceParameters() {
|
||||
$s = $this->getDefaultServer([
|
||||
Server::HANDLE_AUTHENTICATION_REQUEST => function (ServerRequestInterface $request) {
|
||||
return ['me' => 'https://me.example.com/'];
|
||||
},
|
||||
'httpGetWithEffectiveUrl' => function ($url): array {
|
||||
return [new Response(200, ['content-type' => 'text/html'], ''), $url ];
|
||||
},
|
||||
'requirePKCE' => false
|
||||
]);
|
||||
|
||||
// Build a valid, hashed request without either PKCE parameter. This takes some faffing around
|
||||
// due to the supposedly elegant immutable Request objects.
|
||||
$req = $this->getIARequest();
|
||||
$params = $req->getQueryParams();
|
||||
unset($params['code_challenge']);
|
||||
$req = $req->withQueryParams($params);
|
||||
|
||||
$res = $s->handleAuthorizationEndpointRequest($req);
|
||||
|
||||
$this->assertEquals(302, $res->getStatusCode());
|
||||
parse_str(parse_url($res->getHeaderLine('location'), PHP_URL_QUERY), $redirectQueryParams);
|
||||
$this->assertEquals('invalid_request', $redirectQueryParams['error']);
|
||||
}
|
||||
|
||||
public function testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints() {
|
||||
$s = $this->getDefaultServer([
|
||||
Server::HANDLE_AUTHENTICATION_REQUEST => function (ServerRequestInterface $request) {
|
||||
return ['me' => 'https://me.example.com/'];
|
||||
},
|
||||
'httpGetWithEffectiveUrl' => function ($url): array {
|
||||
return [new Response(200, ['content-type' => 'text/html'], ''), $url ];
|
||||
},
|
||||
'requirePKCE' => false
|
||||
]);
|
||||
|
||||
foreach ([
|
||||
'Auth Endpoint Exchange' => [$s, 'handleAuthorizationEndpointRequest'],
|
||||
'Token Endpoint Exchange' => [$s, 'handleTokenEndpointRequest']
|
||||
] as $testCase => $handleExchangeRequestEndpoint) {
|
||||
// Clean up the test environment.
|
||||
$this->setUp();
|
||||
$storage = new FilesystemJsonStorage(TOKEN_STORAGE_PATH, SERVER_SECRET);
|
||||
|
||||
// Create an auth code without PKCE
|
||||
$authCodeData = [
|
||||
'client_id' => 'https://client.example.com/',
|
||||
'redirect_uri' => 'https://client.example.com/auth',
|
||||
'code_challenge' => null,
|
||||
'state' => '12345',
|
||||
'code_challenge_method' => null,
|
||||
'scope' => 'create update profile',
|
||||
'me' => 'https://me.example.com/',
|
||||
'profile' => [
|
||||
'name' => 'Me'
|
||||
]
|
||||
];
|
||||
$authCode = $storage->createAuthCode($authCodeData);
|
||||
|
||||
// Now check that the token exchange works.
|
||||
// Build
|
||||
$req = (new ServerRequest('POST', 'https://example.com'))->withParsedBody([
|
||||
'grant_type' => 'authorization_code',
|
||||
'code' => $authCode,
|
||||
'client_id' => $authCodeData['client_id'],
|
||||
'redirect_uri' => $authCodeData['redirect_uri'],
|
||||
'code_verifier' => 'There is no valid value for this parameter, its mere presence should trigger an error.'
|
||||
]);
|
||||
|
||||
$res = $handleExchangeRequestEndpoint($req);
|
||||
$resJson = json_decode((string) $res->getBody(), true);
|
||||
$this->assertEquals(400, $res->getStatusCode(), "$testCase");
|
||||
$this->assertIsArray($resJson, $testCase);
|
||||
$this->assertArrayHasKey('error', $resJson, $testCase);
|
||||
$this->assertEquals('invalid_grant', $resJson['error'], $testCase);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user