Fixed issue preventing auth form scopes from being stored
I forgot that PHP’s POST body parsing strips the required trailing [] from names.
This commit is contained in:
parent
87bfe33443
commit
d6594beebe
@ -163,7 +163,7 @@
|
|||||||
<h4>Legend</h4>
|
<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><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>
|
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
<a title="Back to the top" id="toplink" href="#">
|
<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>
|
<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>
|
||||||
|
@ -279,7 +279,7 @@
|
|||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="87" href="#87">87</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="87" href="#87">87</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="88" href="#88">88</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">transformAuthorizationCode</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="default"> </span><span class="keyword">array</span><span class="default"> </span><span class="default">$code</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="keyword">array</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="88" href="#88">88</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">transformAuthorizationCode</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="default"> </span><span class="keyword">array</span><span class="default"> </span><span class="default">$code</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="keyword">array</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="89" href="#89">89</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Add any granted scopes from the form to the code.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="89" href="#89">89</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Add any granted scopes from the form to the code.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 90" data-content="<ul><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::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="90" href="#90">90</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$grantedScopes</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$request</span><span class="default">-></span><span class="default">getParsedBody</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">[</span><span class="default">'taproot_indieauth_server_scope[]'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </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="3 tests cover line 90" data-content="<ul><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::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="90" href="#90">90</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$grantedScopes</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$request</span><span class="default">-></span><span class="default">getParsedBody</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">[</span><span class="default">'taproot_indieauth_server_scope'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="keyword">[</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="91" href="#91">91</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="91" href="#91">91</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="92" href="#92">92</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// This default implementation naievely accepts any scopes it receives from the form.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="92" href="#92">92</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// This default implementation naievely accepts any scopes it receives from the form.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="93" href="#93">93</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// You may wish to perform some sort of validation.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="93" href="#93">93</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// You may wish to perform some sort of validation.</span></td></tr>
|
||||||
@ -305,7 +305,7 @@
|
|||||||
<h4>Legend</h4>
|
<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><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>
|
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
<a title="Back to the top" id="toplink" href="#">
|
<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>
|
<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
@ -136,7 +136,7 @@
|
|||||||
<footer>
|
<footer>
|
||||||
<hr/>
|
<hr/>
|
||||||
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
@ -223,7 +223,7 @@ $(document).ready(function() {
|
|||||||
chart.yAxis.axisLabel('Cyclomatic Complexity');
|
chart.yAxis.axisLabel('Cyclomatic Complexity');
|
||||||
|
|
||||||
d3.select('#classComplexity svg')
|
d3.select('#classComplexity svg')
|
||||||
.datum(getComplexityData([[100,6,"<a href=\"DefaultAuthorizationForm.php.html#35\">Taproot\\IndieAuth\\Callback\\DefaultAuthorizationForm<\/a>"],[100,9,"<a href=\"SingleUserPasswordAuthenticationCallback.php.html#46\">Taproot\\IndieAuth\\Callback\\SingleUserPasswordAuthenticationCallback<\/a>"]], 'Class Complexity'))
|
.datum(getComplexityData([[100,6,"<a href=\"DefaultAuthorizationForm.php.html#35\">Taproot\\IndieAuth\\Callback\\DefaultAuthorizationForm<\/a>"],[100,9,"<a href=\"SingleUserPasswordAuthenticationCallback.php.html#47\">Taproot\\IndieAuth\\Callback\\SingleUserPasswordAuthenticationCallback<\/a>"]], 'Class Complexity'))
|
||||||
.transition()
|
.transition()
|
||||||
.duration(500)
|
.duration(500)
|
||||||
.call(chart);
|
.call(chart);
|
||||||
@ -247,7 +247,7 @@ $(document).ready(function() {
|
|||||||
chart.yAxis.axisLabel('Method Complexity');
|
chart.yAxis.axisLabel('Method Complexity');
|
||||||
|
|
||||||
d3.select('#methodComplexity svg')
|
d3.select('#methodComplexity svg')
|
||||||
.datum(getComplexityData([[100,1,"<a href=\"DefaultAuthorizationForm.php.html#49\">Taproot\\IndieAuth\\Callback\\DefaultAuthorizationForm::__construct<\/a>"],[100,3,"<a href=\"DefaultAuthorizationForm.php.html#55\">Taproot\\IndieAuth\\Callback\\DefaultAuthorizationForm::showForm<\/a>"],[100,1,"<a href=\"DefaultAuthorizationForm.php.html#88\">Taproot\\IndieAuth\\Callback\\DefaultAuthorizationForm::transformAuthorizationCode<\/a>"],[100,1,"<a href=\"DefaultAuthorizationForm.php.html#102\">Taproot\\IndieAuth\\Callback\\DefaultAuthorizationForm::setLogger<\/a>"],[100,4,"<a href=\"SingleUserPasswordAuthenticationCallback.php.html#68\">Taproot\\IndieAuth\\Callback\\SingleUserPasswordAuthenticationCallback::__construct<\/a>"],[100,5,"<a href=\"SingleUserPasswordAuthenticationCallback.php.html#89\">Taproot\\IndieAuth\\Callback\\SingleUserPasswordAuthenticationCallback::__invoke<\/a>"]], 'Method Complexity'))
|
.datum(getComplexityData([[100,1,"<a href=\"DefaultAuthorizationForm.php.html#49\">Taproot\\IndieAuth\\Callback\\DefaultAuthorizationForm::__construct<\/a>"],[100,3,"<a href=\"DefaultAuthorizationForm.php.html#55\">Taproot\\IndieAuth\\Callback\\DefaultAuthorizationForm::showForm<\/a>"],[100,1,"<a href=\"DefaultAuthorizationForm.php.html#88\">Taproot\\IndieAuth\\Callback\\DefaultAuthorizationForm::transformAuthorizationCode<\/a>"],[100,1,"<a href=\"DefaultAuthorizationForm.php.html#102\">Taproot\\IndieAuth\\Callback\\DefaultAuthorizationForm::setLogger<\/a>"],[100,4,"<a href=\"SingleUserPasswordAuthenticationCallback.php.html#69\">Taproot\\IndieAuth\\Callback\\SingleUserPasswordAuthenticationCallback::__construct<\/a>"],[100,5,"<a href=\"SingleUserPasswordAuthenticationCallback.php.html#90\">Taproot\\IndieAuth\\Callback\\SingleUserPasswordAuthenticationCallback::__invoke<\/a>"]], 'Method Complexity'))
|
||||||
.transition()
|
.transition()
|
||||||
.duration(500)
|
.duration(500)
|
||||||
.call(chart);
|
.call(chart);
|
||||||
|
@ -152,7 +152,7 @@
|
|||||||
<span class="success"><strong>High</strong>: 90% to 100%</span>
|
<span class="success"><strong>High</strong>: 90% to 100%</span>
|
||||||
</p>
|
</p>
|
||||||
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
@ -326,7 +326,7 @@
|
|||||||
<h4>Legend</h4>
|
<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><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>
|
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
<a title="Back to the top" id="toplink" href="#">
|
<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>
|
<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>
|
||||||
|
@ -180,7 +180,7 @@
|
|||||||
<h4>Legend</h4>
|
<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><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>
|
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
<a title="Back to the top" id="toplink" href="#">
|
<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>
|
<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>
|
||||||
|
@ -324,7 +324,7 @@
|
|||||||
<h4>Legend</h4>
|
<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><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>
|
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
<a title="Back to the top" id="toplink" href="#">
|
<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>
|
<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>
|
||||||
|
@ -157,7 +157,7 @@
|
|||||||
<h4>Legend</h4>
|
<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><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>
|
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
<a title="Back to the top" id="toplink" href="#">
|
<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>
|
<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>
|
<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><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>
|
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
<a title="Back to the top" id="toplink" href="#">
|
<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>
|
<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>
|
<footer>
|
||||||
<hr/>
|
<hr/>
|
||||||
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
@ -195,7 +195,7 @@
|
|||||||
<span class="success"><strong>High</strong>: 90% to 100%</span>
|
<span class="success"><strong>High</strong>: 90% to 100%</span>
|
||||||
</p>
|
</p>
|
||||||
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
@ -61,13 +61,13 @@
|
|||||||
<td class="warning small"><div align="right">4 / 5</div></td>
|
<td class="warning small"><div align="right">4 / 5</div></td>
|
||||||
<td class="warning small"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></td>
|
<td class="warning small"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></td>
|
||||||
<td class="success big"> <div class="progress">
|
<td class="success big"> <div class="progress">
|
||||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="96.69" aria-valuemin="0" aria-valuemax="100" style="width: 96.69%">
|
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="96.70" aria-valuemin="0" aria-valuemax="100" style="width: 96.70%">
|
||||||
<span class="sr-only">96.69% covered (success)</span>
|
<span class="sr-only">96.70% covered (success)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="success small"><div align="right">96.69%</div></td>
|
<td class="success small"><div align="right">96.70%</div></td>
|
||||||
<td class="success small"><div align="right">263 / 272</div></td>
|
<td class="success small"><div align="right">264 / 273</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
@ -90,13 +90,13 @@
|
|||||||
<td class="warning small"><div align="right">4 / 5</div></td>
|
<td class="warning small"><div align="right">4 / 5</div></td>
|
||||||
<td class="warning small">105</td>
|
<td class="warning small">105</td>
|
||||||
<td class="success big"> <div class="progress">
|
<td class="success big"> <div class="progress">
|
||||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="96.69" aria-valuemin="0" aria-valuemax="100" style="width: 96.69%">
|
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="96.70" aria-valuemin="0" aria-valuemax="100" style="width: 96.70%">
|
||||||
<span class="sr-only">96.69% covered (success)</span>
|
<span class="sr-only">96.70% covered (success)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="success small"><div align="right">96.69%</div></td>
|
<td class="success small"><div align="right">96.70%</div></td>
|
||||||
<td class="success small"><div align="right">263 / 272</div></td>
|
<td class="success small"><div align="right">264 / 273</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
@ -151,19 +151,19 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="danger small"><div align="right">0.00%</div></td>
|
<td class="danger small"><div align="right">0.00%</div></td>
|
||||||
<td class="danger small"><div align="right">0 / 1</div></td>
|
<td class="danger small"><div align="right">0 / 1</div></td>
|
||||||
<td class="danger small">67.70</td>
|
<td class="danger small">67.69</td>
|
||||||
<td class="success big"> <div class="progress">
|
<td class="success big"> <div class="progress">
|
||||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="94.61" aria-valuemin="0" aria-valuemax="100" style="width: 94.61%">
|
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="94.64" aria-valuemin="0" aria-valuemax="100" style="width: 94.64%">
|
||||||
<span class="sr-only">94.61% covered (success)</span>
|
<span class="sr-only">94.64% covered (success)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="success small"><div align="right">94.61%</div></td>
|
<td class="success small"><div align="right">94.64%</div></td>
|
||||||
<td class="success small"><div align="right">158 / 167</div></td>
|
<td class="success small"><div align="right">159 / 168</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="success" colspan="4"> <a href="#720"><abbr title="handleTokenEndpointRequest(Psr\Http\Message\ServerRequestInterface $request): Psr\Http\Message\ResponseInterface">handleTokenEndpointRequest</abbr></a></td>
|
<td class="success" colspan="4"> <a href="#721"><abbr title="handleTokenEndpointRequest(Psr\Http\Message\ServerRequestInterface $request): Psr\Http\Message\ResponseInterface">handleTokenEndpointRequest</abbr></a></td>
|
||||||
<td class="success big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">100.00% covered (success)</span>
|
||||||
@ -184,7 +184,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="success" colspan="4"> <a href="#824"><abbr title="handleException(Taproot\IndieAuth\IndieAuthException $exception): Psr\Http\Message\ResponseInterface">handleException</abbr></a></td>
|
<td class="success" colspan="4"> <a href="#825"><abbr title="handleException(Taproot\IndieAuth\IndieAuthException $exception): Psr\Http\Message\ResponseInterface">handleException</abbr></a></td>
|
||||||
<td class="success big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">100.00% covered (success)</span>
|
||||||
@ -829,237 +829,238 @@
|
|||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="617" href="#617">617</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="617" href="#617">617</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="618" href="#618">618</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Pass it to the auth code customisation callback.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="618" href="#618">618</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Pass it to the auth code customisation callback.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 619" data-content="<ul><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::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="619" href="#619">619</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">$this</span><span class="default">-></span><span class="default">authorizationForm</span><span class="default">-></span><span class="default">transformAuthorizationCode</span><span class="keyword">(</span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="default">$code</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 619" data-content="<ul><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::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="619" href="#619">619</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">$this</span><span class="default">-></span><span class="default">authorizationForm</span><span class="default">-></span><span class="default">transformAuthorizationCode</span><span class="keyword">(</span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="default">$code</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="620" href="#620">620</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 620" data-content="<ul><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::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="620" href="#620">620</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">info</span><span class="keyword">(</span><span class="default">"Creating an authorization code:"</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'data'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$code</span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="621" href="#621">621</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Store the authorization code.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="621" href="#621">621</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 622" data-content="<ul><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::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="622" href="#622">622</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$authCode</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">tokenStorage</span><span class="default">-></span><span class="default">createAuthCode</span><span class="keyword">(</span><span class="default">$code</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="622" href="#622">622</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Store the authorization code.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 623" data-content="<ul><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::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="623" href="#623">623</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="default">is_null</span><span class="keyword">(</span><span class="default">$authCode</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="3 tests cover line 623" data-content="<ul><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::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="623" href="#623">623</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$authCode</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">tokenStorage</span><span class="default">-></span><span class="default">createAuthCode</span><span class="keyword">(</span><span class="default">$code</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="624" href="#624">624</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If saving the authorization code failed silently, there isn’t much we can do about it,</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 624" data-content="<ul><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::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="624" href="#624">624</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="default">is_null</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">)</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="625" href="#625">625</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// but should at least log and return an error.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="625" href="#625">625</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If saving the authorization code failed silently, there isn’t much we can do about it,</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 626" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="626" href="#626">626</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"Saving the authorization code failed and returned false without raising an exception."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="626" href="#626">626</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// but should at least log and return an error.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 627" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="627" href="#627">627</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INTERNAL_ERROR_REDIRECT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 627" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="627" href="#627">627</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"Saving the authorization code failed and returned false without raising an exception."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="628" href="#628">628</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="1 test covers line 628" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="628" href="#628">628</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INTERNAL_ERROR_REDIRECT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="629" href="#629">629</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="629" href="#629">629</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="630" href="#630">630</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Return a redirect to the client app.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="630" href="#630">630</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 631" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="631" href="#631">631</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">302</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="631" href="#631">631</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Return a redirect to the client app.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 632" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="632" href="#632">632</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'Location'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">appendQueryParams</span><span class="keyword">(</span><span class="default">$queryParams</span><span class="keyword">[</span><span class="default">'redirect_uri'</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="2 tests cover line 632" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="632" href="#632">632</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">302</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="2 tests cover line 633" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="633" href="#633">633</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'code'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$authCode</span><span class="keyword">,</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 633" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="633" href="#633">633</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'Location'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">appendQueryParams</span><span class="keyword">(</span><span class="default">$queryParams</span><span class="keyword">[</span><span class="default">'redirect_uri'</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="2 tests cover line 634" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="634" href="#634">634</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'state'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$code</span><span class="keyword">[</span><span class="default">'state'</span><span class="keyword">]</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 634" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="634" href="#634">634</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'code'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$authCode</span><span class="keyword">,</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="635" href="#635">635</a></td><td class="col-11 codeLine"><span class="default"> </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="2 tests cover line 635" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="635" href="#635">635</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'state'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$code</span><span class="keyword">[</span><span class="default">'state'</span><span class="keyword">]</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 636" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="636" href="#636">636</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'Cache-control'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'no-cache'</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="636" href="#636">636</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">,</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="637" href="#637">637</a></td><td class="col-11 codeLine"><span class="default"> </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="2 tests cover line 637" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="637" href="#637">637</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'Cache-control'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'no-cache'</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="638" href="#638">638</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="638" href="#638">638</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="639" href="#639">639</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="639" href="#639">639</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="640" href="#640">640</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Otherwise, the user is authenticated and needs to authorize the client app + choose scopes.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="640" href="#640">640</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="641" href="#641">641</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="641" href="#641">641</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Otherwise, the user is authenticated and needs to authorize the client app + choose scopes.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="642" href="#642">642</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Fetch the client_id URL to find information about the client to present to the user.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="642" href="#642">642</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="643" href="#643">643</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// TODO: in order to comply with https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2.1,</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="643" href="#643">643</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Fetch the client_id URL to find information about the client to present to the user.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="644" href="#644">644</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// it may be necessary to do this before returning any other kind of error response, as, per</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="644" href="#644">644</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// TODO: in order to comply with https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2.1,</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="645" href="#645">645</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// the spec, errors should only be shown to the user if the client_id and redirect_uri parameters</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="645" href="#645">645</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// it may be necessary to do this before returning any other kind of error response, as, per</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="646" href="#646">646</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// are missing or invalid. Otherwise, they should be sent back to the client with an error</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="646" href="#646">646</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// the spec, errors should only be shown to the user if the client_id and redirect_uri parameters</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="647" href="#647">647</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// redirect response.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="647" href="#647">647</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// are missing or invalid. Otherwise, they should be sent back to the client with an error</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 648" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</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></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="648" href="#648">648</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="default">is_null</span><span class="keyword">(</span><span class="default">$clientIdResponse</span><span class="keyword">)</span><span class="default"> </span><span class="default">||</span><span class="default"> </span><span class="default">is_null</span><span class="keyword">(</span><span class="default">$clientIdEffectiveUrl</span><span class="keyword">)</span><span class="default"> </span><span class="default">||</span><span class="default"> </span><span class="default">is_null</span><span class="keyword">(</span><span class="default">$clientIdMf2</span><span class="keyword">)</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="648" href="#648">648</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// redirect response.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="649" href="#649">649</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">try</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 649" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</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></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="649" href="#649">649</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="default">is_null</span><span class="keyword">(</span><span class="default">$clientIdResponse</span><span class="keyword">)</span><span class="default"> </span><span class="default">||</span><span class="default"> </span><span class="default">is_null</span><span class="keyword">(</span><span class="default">$clientIdEffectiveUrl</span><span class="keyword">)</span><span class="default"> </span><span class="default">||</span><span class="default"> </span><span class="default">is_null</span><span class="keyword">(</span><span class="default">$clientIdMf2</span><span class="keyword">)</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="650" href="#650">650</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">/** @var ResponseInterface $clientIdResponse */</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="650" href="#650">650</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">try</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 651" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="651" href="#651">651</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">list</span><span class="keyword">(</span><span class="default">$clientIdResponse</span><span class="keyword">,</span><span class="default"> </span><span class="default">$clientIdEffectiveUrl</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">call_user_func</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">httpGetWithEffectiveUrl</span><span class="keyword">,</span><span class="default"> </span><span class="default">$queryParams</span><span class="keyword">[</span><span class="default">'client_id'</span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="651" href="#651">651</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">/** @var ResponseInterface $clientIdResponse */</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 652" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="652" href="#652">652</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$clientIdMf2</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">Mf2</span><span class="default">\</span><span class="default">parse</span><span class="keyword">(</span><span class="default">(string)</span><span class="default"> </span><span class="default">$clientIdResponse</span><span class="default">-></span><span class="default">getBody</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="default">$clientIdEffectiveUrl</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 652" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="652" href="#652">652</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">list</span><span class="keyword">(</span><span class="default">$clientIdResponse</span><span class="keyword">,</span><span class="default"> </span><span class="default">$clientIdEffectiveUrl</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">call_user_func</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">httpGetWithEffectiveUrl</span><span class="keyword">,</span><span class="default"> </span><span class="default">$queryParams</span><span class="keyword">[</span><span class="default">'client_id'</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="1 test covers line 653" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="653" href="#653">653</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">catch</span><span class="default"> </span><span class="keyword">(</span><span class="default">ClientExceptionInterface</span><span class="default"> </span><span class="keyword">|</span><span class="default"> </span><span class="default">RequestExceptionInterface</span><span class="default"> </span><span class="keyword">|</span><span class="default"> </span><span class="default">NetworkExceptionInterface</span><span class="default"> </span><span class="default">$e</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="2 tests cover line 653" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="653" href="#653">653</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$clientIdMf2</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">Mf2</span><span class="default">\</span><span class="default">parse</span><span class="keyword">(</span><span class="default">(string)</span><span class="default"> </span><span class="default">$clientIdResponse</span><span class="default">-></span><span class="default">getBody</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="default">$clientIdEffectiveUrl</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 654" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="654" href="#654">654</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"Caught an HTTP exception while trying to fetch the client_id. Returning an error response."</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="1 test covers line 654" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="654" href="#654">654</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">catch</span><span class="default"> </span><span class="keyword">(</span><span class="default">ClientExceptionInterface</span><span class="default"> </span><span class="keyword">|</span><span class="default"> </span><span class="default">RequestExceptionInterface</span><span class="default"> </span><span class="keyword">|</span><span class="default"> </span><span class="default">NetworkExceptionInterface</span><span class="default"> </span><span class="default">$e</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="1 test covers line 655" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="655" href="#655">655</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'client_id'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$queryParams</span><span class="keyword">[</span><span class="default">'client_id'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 655" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="655" href="#655">655</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"Caught an HTTP exception while trying to fetch the client_id. Returning an error response."</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="1 test covers line 656" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="656" href="#656">656</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'exception'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$e</span><span class="default">-></span><span class="default">__toString</span><span class="keyword">(</span><span class="keyword">)</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 656" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="656" href="#656">656</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'client_id'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$queryParams</span><span class="keyword">[</span><span class="default">'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="657" href="#657">657</a></td><td class="col-11 codeLine"><span class="default"> </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="1 test covers line 657" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="657" href="#657">657</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'exception'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$e</span><span class="default">-></span><span class="default">__toString</span><span class="keyword">(</span><span class="keyword">)</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="658" href="#658">658</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="658" href="#658">658</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="659" href="#659">659</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// At this point in the flow, we’ve already guaranteed that the redirect_uri is valid,</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="659" href="#659">659</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="660" href="#660">660</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// so in theory we should report these errors by redirecting there.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="660" href="#660">660</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// At this point in the flow, we’ve already guaranteed that the redirect_uri is valid,</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 661" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="661" href="#661">661</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INTERNAL_ERROR_REDIRECT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="default">$e</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="661" href="#661">661</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// so in theory we should report these errors by redirecting there.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 662" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="662" href="#662">662</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">catch</span><span class="default"> </span><span class="keyword">(</span><span class="default">Exception</span><span class="default"> </span><span class="default">$e</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="1 test covers line 662" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="662" href="#662">662</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INTERNAL_ERROR_REDIRECT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="default">$e</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 663" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="663" href="#663">663</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"Caught an unknown exception while trying to fetch the client_id. Returning an error response."</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="1 test covers line 663" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="663" href="#663">663</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">catch</span><span class="default"> </span><span class="keyword">(</span><span class="default">Exception</span><span class="default"> </span><span class="default">$e</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="1 test covers line 664" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="664" href="#664">664</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'exception'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$e</span><span class="default">-></span><span class="default">__toString</span><span class="keyword">(</span><span class="keyword">)</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 664" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="664" href="#664">664</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"Caught an unknown exception while trying to fetch the client_id. Returning an error response."</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="665" href="#665">665</a></td><td class="col-11 codeLine"><span class="default"> </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="1 test covers line 665" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="665" href="#665">665</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'exception'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$e</span><span class="default">-></span><span class="default">__toString</span><span class="keyword">(</span><span class="keyword">)</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="666" href="#666">666</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="666" href="#666">666</a></td><td class="col-11 codeLine"><span class="default"> </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="1 test covers line 667" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="667" href="#667">667</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INTERNAL_ERROR_REDIRECT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="default">$e</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="667" href="#667">667</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="668" href="#668">668</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="1 test covers line 668" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="668" href="#668">668</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INTERNAL_ERROR_REDIRECT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="default">$e</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="669" href="#669">669</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="669" href="#669">669</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="670" href="#670">670</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="670" href="#670">670</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="671" href="#671">671</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Search for an h-app with u-url matching the client_id.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="671" href="#671">671</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 672" data-content="<ul><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></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="672" href="#672">672</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$clientHApps</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">M</span><span class="default">\</span><span class="default">findMicroformatsByProperty</span><span class="keyword">(</span><span class="default">M</span><span class="default">\</span><span class="default">findMicroformatsByType</span><span class="keyword">(</span><span class="default">$clientIdMf2</span><span class="keyword">,</span><span class="default"> </span><span class="default">'h-app'</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="default">'url'</span><span class="keyword">,</span><span class="default"> </span><span class="default">$queryParams</span><span class="keyword">[</span><span class="default">'client_id'</span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="672" href="#672">672</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Search for an h-app with u-url matching the client_id.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 673" data-content="<ul><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></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="673" href="#673">673</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$clientHApp</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="keyword">empty</span><span class="keyword">(</span><span class="default">$clientHApps</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">?</span><span class="default"> </span><span class="default">null</span><span class="default"> </span><span class="keyword">:</span><span class="default"> </span><span class="default">$clientHApps</span><span class="keyword">[</span><span class="default">0</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 673" data-content="<ul><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></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="673" href="#673">673</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$clientHApps</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">M</span><span class="default">\</span><span class="default">findMicroformatsByProperty</span><span class="keyword">(</span><span class="default">M</span><span class="default">\</span><span class="default">findMicroformatsByType</span><span class="keyword">(</span><span class="default">$clientIdMf2</span><span class="keyword">,</span><span class="default"> </span><span class="default">'h-app'</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="default">'url'</span><span class="keyword">,</span><span class="default"> </span><span class="default">$queryParams</span><span class="keyword">[</span><span class="default">'client_id'</span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="674" href="#674">674</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 674" data-content="<ul><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></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="674" href="#674">674</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$clientHApp</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="keyword">empty</span><span class="keyword">(</span><span class="default">$clientHApps</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">?</span><span class="default"> </span><span class="default">null</span><span class="default"> </span><span class="keyword">:</span><span class="default"> </span><span class="default">$clientHApps</span><span class="keyword">[</span><span class="default">0</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="675" href="#675">675</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Present the authorization UI.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="675" href="#675">675</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 676" data-content="<ul><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></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="676" href="#676">676</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">authorizationForm</span><span class="default">-></span><span class="default">showForm</span><span class="keyword">(</span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="default">$authenticationResult</span><span class="keyword">,</span><span class="default"> </span><span class="default">$authenticationRedirect</span><span class="keyword">,</span><span class="default"> </span><span class="default">$clientHApp</span><span class="keyword">)</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="676" href="#676">676</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Present the authorization UI.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 677" data-content="<ul><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></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="677" href="#677">677</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">-></span><span class="default">withAddedHeader</span><span class="keyword">(</span><span class="default">'Cache-control'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'no-cache'</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 677" data-content="<ul><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></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="677" href="#677">677</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">authorizationForm</span><span class="default">-></span><span class="default">showForm</span><span class="keyword">(</span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="default">$authenticationResult</span><span class="keyword">,</span><span class="default"> </span><span class="default">$authenticationRedirect</span><span class="keyword">,</span><span class="default"> </span><span class="default">$clientHApp</span><span class="keyword">)</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="678" href="#678">678</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="4 tests cover line 678" data-content="<ul><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></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="678" href="#678">678</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">-></span><span class="default">withAddedHeader</span><span class="keyword">(</span><span class="default">'Cache-control'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'no-cache'</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="679" href="#679">679</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="679" href="#679">679</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="680" href="#680">680</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="680" href="#680">680</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="681" href="#681">681</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If the request isn’t an IndieAuth Authorization or Code-redeeming request, it’s either an invalid</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="681" href="#681">681</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="682" href="#682">682</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// request or something to do with a custom auth handler (e.g. sending a one-time code in an email.)</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="682" href="#682">682</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If the request isn’t an IndieAuth Authorization or Code-redeeming request, it’s either an invalid</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 683" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</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="683" href="#683">683</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$nonIndieAuthRequestResult</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">call_user_func</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">handleNonIndieAuthRequest</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="683" href="#683">683</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// request or something to do with a custom auth handler (e.g. sending a one-time code in an email.)</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 684" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</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="684" href="#684">684</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="default">$nonIndieAuthRequestResult</span><span class="default"> </span><span class="keyword">instanceof</span><span class="default"> </span><span class="default">ResponseInterface</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="3 tests cover line 684" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</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="684" href="#684">684</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$nonIndieAuthRequestResult</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">call_user_func</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">handleNonIndieAuthRequest</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 685" data-content="<ul><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="685" href="#685">685</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$nonIndieAuthRequestResult</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 685" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</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="685" href="#685">685</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="default">$nonIndieAuthRequestResult</span><span class="default"> </span><span class="keyword">instanceof</span><span class="default"> </span><span class="default">ResponseInterface</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="686" href="#686">686</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">else</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 686" data-content="<ul><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="686" href="#686">686</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$nonIndieAuthRequestResult</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="687" href="#687">687</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// In this code path we have not validated the redirect_uri, so show a regular error page</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="687" href="#687">687</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">else</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="688" href="#688">688</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// rather than returning a redirect error.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="688" href="#688">688</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// In this code path we have not validated the redirect_uri, so show a regular error page</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 689" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</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="689" href="#689">689</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INTERNAL_ERROR</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="689" href="#689">689</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// rather than returning a redirect error.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="690" href="#690">690</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="2 tests cover line 690" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</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="690" href="#690">690</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INTERNAL_ERROR</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="14 tests cover line 691" 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="691" href="#691">691</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">catch</span><span class="default"> </span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default"> </span><span class="default">$e</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="691" href="#691">691</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="692" href="#692">692</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// All IndieAuthExceptions will already have been logged.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="14 tests cover line 692" 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="692" href="#692">692</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">catch</span><span class="default"> </span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default"> </span><span class="default">$e</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 693" 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="693" href="#693">693</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">handleException</span><span class="keyword">(</span><span class="default">$e</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="693" href="#693">693</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// All IndieAuthExceptions will already have been logged.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 694" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="694" href="#694">694</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">catch</span><span class="default"> </span><span class="keyword">(</span><span class="default">Exception</span><span class="default"> </span><span class="default">$e</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 694" 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="694" href="#694">694</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">handleException</span><span class="keyword">(</span><span class="default">$e</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="695" href="#695">695</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Unknown exceptions will not have been logged; do so now.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 695" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="695" href="#695">695</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">catch</span><span class="default"> </span><span class="keyword">(</span><span class="default">Exception</span><span class="default"> </span><span class="default">$e</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="1 test covers line 696" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="696" href="#696">696</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="string">"</span><span class="string">Caught unknown exception: </span><span class="string">{</span><span class="string">$e</span><span class="keyword">}</span><span class="string">"</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="696" href="#696">696</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Unknown exceptions will not have been logged; do so now.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 697" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="697" href="#697">697</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">handleException</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">0</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="default">$e</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="1 test covers line 697" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="697" href="#697">697</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="string">"</span><span class="string">Caught unknown exception: </span><span class="string">{</span><span class="string">$e</span><span class="keyword">}</span><span class="string">"</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="698" href="#698">698</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="1 test covers line 698" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="698" href="#698">698</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">handleException</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">0</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="default">$e</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="22 tests cover line 699" 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::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="699" href="#699">699</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span><span class="default"> </span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="699" href="#699">699</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="700" href="#700">700</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="22 tests cover line 700" 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::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="700" href="#700">700</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span><span class="default"> </span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="701" href="#701">701</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="701" href="#701">701</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="702" href="#702">702</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="702" href="#702">702</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="703" href="#703">703</a></td><td class="col-11 codeLine"><span class="comment"> * Handle Token Endpoint Request</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="703" href="#703">703</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="704" href="#704">704</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="704" href="#704">704</a></td><td class="col-11 codeLine"><span class="comment"> * Handle Token Endpoint Request</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="705" href="#705">705</a></td><td class="col-11 codeLine"><span class="comment"> * Handles requests to the IndieAuth token endpoint. The logical flow can be summarised as follows:</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="705" href="#705">705</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="706" href="#706">706</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="706" href="#706">706</a></td><td class="col-11 codeLine"><span class="comment"> * Handles requests to the IndieAuth token endpoint. The logical flow can be summarised as follows:</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="707" href="#707">707</a></td><td class="col-11 codeLine"><span class="comment"> * * Check that the request is a code redeeming request. Return an error if not.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="707" href="#707">707</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="708" href="#708">708</a></td><td class="col-11 codeLine"><span class="comment"> * * Ensure that all required parameters are present. Return an error if not.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="708" href="#708">708</a></td><td class="col-11 codeLine"><span class="comment"> * * Check that the request is a code redeeming request. Return an error if not.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="709" href="#709">709</a></td><td class="col-11 codeLine"><span class="comment"> * * Attempt to exchange the `code` parameter for an access token. Return an error if it fails.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="709" href="#709">709</a></td><td class="col-11 codeLine"><span class="comment"> * * Ensure that all required parameters are present. Return an error if not.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="710" href="#710">710</a></td><td class="col-11 codeLine"><span class="comment"> * * Make sure the client_id and redirect_uri request parameters match those stored in the auth code. If not, revoke the access token and return an error.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="710" href="#710">710</a></td><td class="col-11 codeLine"><span class="comment"> * * Attempt to exchange the `code` parameter for an access token. Return an error if it fails.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="711" href="#711">711</a></td><td class="col-11 codeLine"><span class="comment"> * * Make sure the provided code_verifier hashes to the code_challenge stored in the auth code. If not, revoke the access token and return an error.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="711" href="#711">711</a></td><td class="col-11 codeLine"><span class="comment"> * * Make sure the client_id and redirect_uri request parameters match those stored in the auth code. If not, revoke the access token and return an error.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="712" href="#712">712</a></td><td class="col-11 codeLine"><span class="comment"> * * Make sure the granted scope stored in the auth code is not empty. If it is, revoke the access token and return an error.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="712" href="#712">712</a></td><td class="col-11 codeLine"><span class="comment"> * * Make sure the provided code_verifier hashes to the code_challenge stored in the auth code. If not, revoke the access token and return an error.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="713" href="#713">713</a></td><td class="col-11 codeLine"><span class="comment"> * * Otherwise, return a success response containing information about the issued access token.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="713" href="#713">713</a></td><td class="col-11 codeLine"><span class="comment"> * * Make sure the granted scope stored in the auth code is not empty. If it is, revoke the access token and return an error.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="714" href="#714">714</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="714" href="#714">714</a></td><td class="col-11 codeLine"><span class="comment"> * * Otherwise, return a success response containing information about the issued access token.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="715" href="#715">715</a></td><td class="col-11 codeLine"><span class="comment"> * This method must NOT be CSRF-protected as it accepts external requests from client apps.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="715" href="#715">715</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="716" href="#716">716</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="716" href="#716">716</a></td><td class="col-11 codeLine"><span class="comment"> * This method must NOT be CSRF-protected as it accepts external requests from client apps.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="717" href="#717">717</a></td><td class="col-11 codeLine"><span class="comment"> * @param ServerRequestInterface $request</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="717" href="#717">717</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="718" href="#718">718</a></td><td class="col-11 codeLine"><span class="comment"> * @return ResponseInterface</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="718" href="#718">718</a></td><td class="col-11 codeLine"><span class="comment"> * @param ServerRequestInterface $request</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="719" href="#719">719</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="719" href="#719">719</a></td><td class="col-11 codeLine"><span class="comment"> * @return ResponseInterface</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="720" href="#720">720</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">handleTokenEndpointRequest</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=" d-flex"><td class="col-1 text-right"><a id="720" href="#720">720</a></td><td class="col-11 codeLine"><span class="comment"> */</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 721" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</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::testTokenEndpointReturnsErrorOnNonIndieauthRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="721" href="#721">721</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="default">isIndieAuthAuthorizationCodeRedeemingRequest</span><span class="keyword">(</span><span class="default">$request</span><span class="keyword">)</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="721" href="#721">721</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">handleTokenEndpointRequest</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="7 tests cover line 722" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="722" href="#722">722</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">info</span><span class="keyword">(</span><span class="default">'Handling a request to redeem an authorization code for profile information.'</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 722" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</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::testTokenEndpointReturnsErrorOnNonIndieauthRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="722" href="#722">722</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="default">isIndieAuthAuthorizationCodeRedeemingRequest</span><span class="keyword">(</span><span class="default">$request</span><span class="keyword">)</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="723" href="#723">723</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="7 tests cover line 723" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="723" href="#723">723</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">info</span><span class="keyword">(</span><span class="default">'Handling a request to redeem an authorization code for an access token.'</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="7 tests cover line 724" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="724" href="#724">724</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$bodyParams</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$request</span><span class="default">-></span><span class="default">getParsedBody</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="724" href="#724">724</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="725" href="#725">725</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="7 tests cover line 725" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="725" href="#725">725</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$bodyParams</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$request</span><span class="default">-></span><span class="default">getParsedBody</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="7 tests cover line 726" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="726" href="#726">726</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="keyword">isset</span><span class="keyword">(</span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">'code'</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=" d-flex"><td class="col-1 text-right"><a id="726" href="#726">726</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 727" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="727" href="#727">727</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">warning</span><span class="keyword">(</span><span class="default">'The exchange request was missing the code parameter. Returning an error response.'</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="7 tests cover line 727" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="727" href="#727">727</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="keyword">isset</span><span class="keyword">(</span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">'code'</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="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 728" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="728" href="#728">728</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'content-type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'application/json'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="keyword">[</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 728" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="728" href="#728">728</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">warning</span><span class="keyword">(</span><span class="default">'The exchange request was missing the code parameter. Returning an error response.'</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 729" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="729" href="#729">729</a></td><td class="col-11 codeLine"><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></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 729" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="729" href="#729">729</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'content-type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'application/json'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="keyword">[</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="730" href="#730">730</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error_description'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'The code parameter was missing.'</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 730" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="730" href="#730">730</a></td><td class="col-11 codeLine"><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></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="731" href="#731">731</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="731" href="#731">731</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error_description'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'The code parameter was missing.'</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="732" href="#732">732</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="732" href="#732">732</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="733" href="#733">733</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="733" href="#733">733</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="734" href="#734">734</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Attempt to internally exchange the provided auth code for an access token.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="734" href="#734">734</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="735" href="#735">735</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// We do this before anything else so that the auth code is invalidated as soon as the request starts,</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="735" href="#735">735</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Attempt to internally exchange the provided auth code for an access token.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="736" href="#736">736</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// and the resulting access token is revoked if we encounter an error. This ends up providing a simpler</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="736" href="#736">736</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// We do this before anything else so that the auth code is invalidated as soon as the request starts,</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="737" href="#737">737</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// and more flexible interface for TokenStorage implementors.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="737" href="#737">737</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// and the resulting access token is revoked if we encounter an error. This ends up providing a simpler</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="738" href="#738">738</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">try</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="738" href="#738">738</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// and more flexible interface for TokenStorage implementors.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="739" href="#739">739</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Call the token exchange method, passing in a callback which performs additional validation</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="739" href="#739">739</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">try</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="740" href="#740">740</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// on the auth code before it gets exchanged.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="740" href="#740">740</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Call the token exchange method, passing in a callback which performs additional validation</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="6 tests cover line 741" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="741" href="#741">741</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$tokenData</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">tokenStorage</span><span class="default">-></span><span class="default">exchangeAuthCodeForAccessToken</span><span class="keyword">(</span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">'code'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="keyword">array</span><span class="default"> </span><span class="default">$authCode</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">use</span><span class="default"> </span><span class="keyword">(</span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="default">$bodyParams</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="741" href="#741">741</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// on the auth code before it gets exchanged.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="742" href="#742">742</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Verify that all required parameters are included.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="6 tests cover line 742" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="742" href="#742">742</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$tokenData</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">tokenStorage</span><span class="default">-></span><span class="default">exchangeAuthCodeForAccessToken</span><span class="keyword">(</span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">'code'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="keyword">array</span><span class="default"> </span><span class="default">$authCode</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">use</span><span class="default"> </span><span class="keyword">(</span><span class="default">$request</span><span class="keyword">,</span><span class="default"> </span><span class="default">$bodyParams</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 743" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="743" href="#743">743</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$requiredParameters</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">requirePkce</span><span class="default"> </span><span class="default">or</span><span class="default"> </span><span class="keyword">!</span><span class="keyword">empty</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">[</span><span class="default">'code_challenge'</span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">?</span><span class="default"> </span><span class="keyword">[</span><span class="default">'client_id'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'redirect_uri'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'code_verifier'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">:</span><span class="default"> </span><span class="keyword">[</span><span class="default">'client_id'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'redirect_uri'</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="743" href="#743">743</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Verify that all required parameters are included.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="6 tests cover line 744" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="744" href="#744">744</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$missingRequiredParameters</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">array_filter</span><span class="keyword">(</span><span class="default">$requiredParameters</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">$p</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">use</span><span class="default"> </span><span class="keyword">(</span><span class="default">$bodyParams</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 744" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="744" href="#744">744</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$requiredParameters</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">requirePkce</span><span class="default"> </span><span class="default">or</span><span class="default"> </span><span class="keyword">!</span><span class="keyword">empty</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">[</span><span class="default">'code_challenge'</span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">?</span><span class="default"> </span><span class="keyword">[</span><span class="default">'client_id'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'redirect_uri'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'code_verifier'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">:</span><span class="default"> </span><span class="keyword">[</span><span class="default">'client_id'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'redirect_uri'</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="6 tests cover line 745" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="745" href="#745">745</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">!</span><span class="default">array_key_exists</span><span class="keyword">(</span><span class="default">$p</span><span class="keyword">,</span><span class="default"> </span><span class="default">$bodyParams</span><span class="keyword">)</span><span class="default"> </span><span class="default">||</span><span class="default"> </span><span class="keyword">empty</span><span class="keyword">(</span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">$p</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="6 tests cover line 745" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="745" href="#745">745</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$missingRequiredParameters</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">array_filter</span><span class="keyword">(</span><span class="default">$requiredParameters</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">$p</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">use</span><span class="default"> </span><span class="keyword">(</span><span class="default">$bodyParams</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 746" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="746" href="#746">746</a></td><td class="col-11 codeLine"><span class="default"> </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="6 tests cover line 746" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="746" href="#746">746</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">!</span><span class="default">array_key_exists</span><span class="keyword">(</span><span class="default">$p</span><span class="keyword">,</span><span class="default"> </span><span class="default">$bodyParams</span><span class="keyword">)</span><span class="default"> </span><span class="default">||</span><span class="default"> </span><span class="keyword">empty</span><span class="keyword">(</span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">$p</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="6 tests cover line 747" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="747" href="#747">747</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="keyword">empty</span><span class="keyword">(</span><span class="default">$missingRequiredParameters</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 747" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="747" href="#747">747</a></td><td class="col-11 codeLine"><span class="default"> </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="1 test covers line 748" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="748" href="#748">748</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">warning</span><span class="keyword">(</span><span class="default">'The exchange request was missing required parameters. Returning an error response.'</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'missing'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$missingRequiredParameters</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="6 tests cover line 748" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="748" href="#748">748</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="keyword">empty</span><span class="keyword">(</span><span class="default">$missingRequiredParameters</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="1 test covers line 749" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="749" href="#749">749</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INVALID_REQUEST</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 749" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="749" href="#749">749</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">warning</span><span class="keyword">(</span><span class="default">'The exchange request was missing required parameters. Returning an error response.'</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'missing'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$missingRequiredParameters</span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="750" href="#750">750</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="1 test covers line 750" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="750" href="#750">750</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INVALID_REQUEST</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="751" href="#751">751</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="751" href="#751">751</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="752" href="#752">752</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Verify that it was issued for the same client_id and redirect_uri</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="752" href="#752">752</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 753" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="753" href="#753">753</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="default">$authCode</span><span class="keyword">[</span><span class="default">'client_id'</span><span class="keyword">]</span><span class="default"> </span><span class="default">!==</span><span class="default"> </span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">'client_id'</span><span class="keyword">]</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="753" href="#753">753</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Verify that it was issued for the same client_id and redirect_uri</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 754" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="754" href="#754">754</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">||</span><span class="default"> </span><span class="default">$authCode</span><span class="keyword">[</span><span class="default">'redirect_uri'</span><span class="keyword">]</span><span class="default"> </span><span class="default">!==</span><span class="default"> </span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">'redirect_uri'</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="5 tests cover line 754" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="754" href="#754">754</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="default">$authCode</span><span class="keyword">[</span><span class="default">'client_id'</span><span class="keyword">]</span><span class="default"> </span><span class="default">!==</span><span class="default"> </span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">'client_id'</span><span class="keyword">]</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 755" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="755" href="#755">755</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"The provided client_id and/or redirect_uri did not match those stored in the token."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 755" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="755" href="#755">755</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">||</span><span class="default"> </span><span class="default">$authCode</span><span class="keyword">[</span><span class="default">'redirect_uri'</span><span class="keyword">]</span><span class="default"> </span><span class="default">!==</span><span class="default"> </span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">'redirect_uri'</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="1 test covers line 756" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="756" href="#756">756</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INVALID_GRANT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 756" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="756" href="#756">756</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"The provided client_id and/or redirect_uri did not match those stored in the token."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="757" href="#757">757</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="1 test covers line 757" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="757" href="#757">757</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INVALID_GRANT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="758" href="#758">758</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="758" href="#758">758</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="759" href="#759">759</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If the auth code was requested with no code_challenge, but the exchange request provides a </span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="759" href="#759">759</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="760" href="#760">760</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// code_verifier, return an error.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="760" href="#760">760</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If the auth code was requested with no code_challenge, but the exchange request provides a </span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 761" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="761" href="#761">761</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="keyword">empty</span><span class="keyword">(</span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">'code_verifier'</span><span class="keyword">]</span><span class="keyword">)</span><span class="default"> </span><span class="default">&&</span><span class="default"> </span><span class="keyword">empty</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">[</span><span class="default">'code_challenge'</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=" d-flex"><td class="col-1 text-right"><a id="761" href="#761">761</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// code_verifier, return an error.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 762" data-content="<ul><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="762" href="#762">762</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"A code_verifier was provided when trying to exchange an auth code requested without a code_challenge."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 762" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="762" href="#762">762</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="keyword">empty</span><span class="keyword">(</span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">'code_verifier'</span><span class="keyword">]</span><span class="keyword">)</span><span class="default"> </span><span class="default">&&</span><span class="default"> </span><span class="keyword">empty</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">[</span><span class="default">'code_challenge'</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="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 763" data-content="<ul><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="763" href="#763">763</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INVALID_GRANT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 763" data-content="<ul><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="763" href="#763">763</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"A code_verifier was provided when trying to exchange an auth code requested without a code_challenge."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="764" href="#764">764</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="1 test covers line 764" data-content="<ul><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="764" href="#764">764</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INVALID_GRANT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="765" href="#765">765</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="765" href="#765">765</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="4 tests cover line 766" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="766" href="#766">766</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="default">$this</span><span class="default">-></span><span class="default">requirePkce</span><span class="default"> </span><span class="default">or</span><span class="default"> </span><span class="keyword">!</span><span class="keyword">empty</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">[</span><span class="default">'code_challenge'</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=" d-flex"><td class="col-1 text-right"><a id="766" href="#766">766</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="767" href="#767">767</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Check that the supplied code_verifier hashes to the stored code_challenge</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 767" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="767" href="#767">767</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="default">$this</span><span class="default">-></span><span class="default">requirePkce</span><span class="default"> </span><span class="default">or</span><span class="default"> </span><span class="keyword">!</span><span class="keyword">empty</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">[</span><span class="default">'code_challenge'</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=" d-flex"><td class="col-1 text-right"><a id="768" href="#768">768</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// TODO: support method = plain as well as S256.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="768" href="#768">768</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Check that the supplied code_verifier hashes to the stored code_challenge</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 769" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="769" href="#769">769</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">hash_equals</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">[</span><span class="default">'code_challenge'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">generatePKCECodeChallenge</span><span class="keyword">(</span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">'code_verifier'</span><span class="keyword">]</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=" d-flex"><td class="col-1 text-right"><a id="769" href="#769">769</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// TODO: support method = plain as well as S256.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 770" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="770" href="#770">770</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"The provided code_verifier did not hash to the stored code_challenge"</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 770" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="770" href="#770">770</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">hash_equals</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">[</span><span class="default">'code_challenge'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">generatePKCECodeChallenge</span><span class="keyword">(</span><span class="default">$bodyParams</span><span class="keyword">[</span><span class="default">'code_verifier'</span><span class="keyword">]</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="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 771" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="771" href="#771">771</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INVALID_GRANT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 771" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="771" href="#771">771</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"The provided code_verifier did not hash to the stored code_challenge"</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="772" href="#772">772</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="1 test covers line 772" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="772" href="#772">772</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INVALID_GRANT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="773" href="#773">773</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="773" href="#773">773</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="774" href="#774">774</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="774" href="#774">774</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="775" href="#775">775</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Check that scope is not empty.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="775" href="#775">775</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 776" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="776" href="#776">776</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">empty</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">[</span><span class="default">'scope'</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=" d-flex"><td class="col-1 text-right"><a id="776" href="#776">776</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Check that scope is not empty.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 777" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="777" href="#777">777</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"An exchange request for a token with an empty scope was sent to the token endpoint."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 777" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="777" href="#777">777</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">empty</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">[</span><span class="default">'scope'</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="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 778" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="778" href="#778">778</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INVALID_GRANT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 778" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="778" href="#778">778</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"An exchange request for a token with an empty scope was sent to the token endpoint."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="779" href="#779">779</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="1 test covers line 779" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="779" href="#779">779</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">create</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INVALID_GRANT</span><span class="keyword">,</span><span class="default"> </span><span class="default">$request</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="6 tests cover line 780" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="780" href="#780">780</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="780" href="#780">780</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="4 tests cover line 781" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</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="781" href="#781">781</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">catch</span><span class="default"> </span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default"> </span><span class="default">$e</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 781" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="781" href="#781">781</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="782" href="#782">782</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If an exception was thrown, return a corresponding error response.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 782" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</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="782" href="#782">782</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">catch</span><span class="default"> </span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default"> </span><span class="default">$e</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="4 tests cover line 783" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</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="783" href="#783">783</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'content-type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'application/json'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="keyword">[</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="783" href="#783">783</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If an exception was thrown, return a corresponding error response.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 784" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</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="784" href="#784">784</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$e</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">'error'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 784" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</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="784" href="#784">784</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'content-type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'application/json'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="keyword">[</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 785" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</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="785" href="#785">785</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error_description'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$e</span><span class="default">-></span><span class="default">getMessage</span><span class="keyword">(</span><span class="keyword">)</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 785" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</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="785" href="#785">785</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$e</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">'error'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="786" href="#786">786</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</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="4 tests cover line 786" data-content="<ul><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::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</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="786" href="#786">786</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error_description'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$e</span><span class="default">-></span><span class="default">getMessage</span><span class="keyword">(</span><span class="keyword">)</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="787" href="#787">787</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="787" href="#787">787</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="788" href="#788">788</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="788" href="#788">788</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="3 tests cover line 789" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="789" href="#789">789</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="default">is_null</span><span class="keyword">(</span><span class="default">$tokenData</span><span class="keyword">)</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="789" href="#789">789</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 790" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="790" href="#790">790</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">'Attempting to exchange an auth code for a token resulted in null.'</span><span class="keyword">,</span><span class="default"> </span><span class="default">$bodyParams</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 790" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="790" href="#790">790</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="default">is_null</span><span class="keyword">(</span><span class="default">$tokenData</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="1 test covers line 791" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="791" href="#791">791</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'content-type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'application/json'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="keyword">[</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 791" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="791" href="#791">791</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">'Attempting to exchange an auth code for a token resulted in null.'</span><span class="keyword">,</span><span class="default"> </span><span class="default">$bodyParams</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 792" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="792" href="#792">792</a></td><td class="col-11 codeLine"><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></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 792" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="792" href="#792">792</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'content-type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'application/json'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="keyword">[</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="793" href="#793">793</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error_description'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'The provided credentials were not valid.'</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 793" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="793" href="#793">793</a></td><td class="col-11 codeLine"><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></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="794" href="#794">794</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="794" href="#794">794</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error_description'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'The provided credentials were not valid.'</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="795" href="#795">795</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="795" href="#795">795</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="796" href="#796">796</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="796" href="#796">796</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="797" href="#797">797</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// TODO: return an error if the token doesn’t contain a me key.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="797" href="#797">797</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="798" href="#798">798</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="798" href="#798">798</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// TODO: return an error if the token doesn’t contain a me key.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="799" href="#799">799</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If everything checked out, return {"me": "https://example.com"} response</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="799" href="#799">799</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 800" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="800" href="#800">800</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">200</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="800" href="#800">800</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If everything checked out, return {"me": "https://example.com"} response</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 801" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="801" href="#801">801</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'content-type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'application/json'</span><span class="keyword">,</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 801" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="801" href="#801">801</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">200</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="802" href="#802">802</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'cache-control'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'no-store'</span><span class="keyword">,</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 802" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="802" href="#802">802</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'content-type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'application/json'</span><span class="keyword">,</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 803" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="803" href="#803">803</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="default">array_merge</span><span class="keyword">(</span><span class="keyword">[</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="803" href="#803">803</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'cache-control'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'no-store'</span><span class="keyword">,</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="804" href="#804">804</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Ensure that the token_type key is present, if tokenStorage doesn’t include it.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 804" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="804" href="#804">804</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="default">array_merge</span><span class="keyword">(</span><span class="keyword">[</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 805" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="805" href="#805">805</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'token_type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Bearer'</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="805" href="#805">805</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Ensure that the token_type key is present, if tokenStorage doesn’t include it.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 806" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="806" href="#806">806</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">array_filter</span><span class="keyword">(</span><span class="default">$tokenData</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$k</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="2 tests cover line 806" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="806" href="#806">806</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'token_type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Bearer'</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="807" href="#807">807</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// We should be able to trust the return data from tokenStorage, but there’s no harm in</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 807" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="807" href="#807">807</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">array_filter</span><span class="keyword">(</span><span class="default">$tokenData</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$k</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="808" href="#808">808</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// preventing code_challenges from leaking, per OAuth2.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="808" href="#808">808</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// We should be able to trust the return data from tokenStorage, but there’s no harm in</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 809" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="809" href="#809">809</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">!</span><span class="default">in_array</span><span class="keyword">(</span><span class="default">$k</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'code_challenge'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'code_challenge_method'</span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="809" href="#809">809</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// preventing code_challenges from leaking, per OAuth2.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 810" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="810" href="#810">810</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">,</span><span class="default"> </span><span class="default">ARRAY_FILTER_USE_KEY</span><span class="keyword">)</span><span class="keyword">)</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="2 tests cover line 810" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="810" href="#810">810</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">!</span><span class="default">in_array</span><span class="keyword">(</span><span class="default">$k</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'code_challenge'</span><span class="keyword">,</span><span class="default"> </span><span class="default">'code_challenge_method'</span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="811" href="#811">811</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="2 tests cover line 811" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="811" href="#811">811</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">,</span><span class="default"> </span><span class="default">ARRAY_FILTER_USE_KEY</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="812" href="#812">812</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="812" href="#812">812</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="1 test covers line 813" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorOnNonIndieauthRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="813" href="#813">813</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'content-type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'application/json'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="keyword">[</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="813" href="#813">813</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 814" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorOnNonIndieauthRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="814" href="#814">814</a></td><td class="col-11 codeLine"><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></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 814" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorOnNonIndieauthRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="814" href="#814">814</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">400</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'content-type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'application/json'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="keyword">[</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="815" href="#815">815</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error_description'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Request to token endpoint was not a valid code exchange request.'</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 815" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorOnNonIndieauthRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="815" href="#815">815</a></td><td class="col-11 codeLine"><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></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="816" href="#816">816</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="816" href="#816">816</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error_description'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'Request to token endpoint was not a valid code exchange request.'</span></td></tr>
|
||||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="817" href="#817">817</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="817" href="#817">817</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="818" href="#818">818</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="818" href="#818">818</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="819" href="#819">819</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="819" href="#819">819</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="820" href="#820">820</a></td><td class="col-11 codeLine"><span class="comment"> * Handle Exception</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="820" href="#820">820</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="821" href="#821">821</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="821" href="#821">821</a></td><td class="col-11 codeLine"><span class="comment"> * Handle Exception</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="822" href="#822">822</a></td><td class="col-11 codeLine"><span class="comment"> * Turns an instance of `IndieAuthException` into an appropriate instance of `ResponseInterface`.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="822" href="#822">822</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="823" href="#823">823</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="823" href="#823">823</a></td><td class="col-11 codeLine"><span class="comment"> * Turns an instance of `IndieAuthException` into an appropriate instance of `ResponseInterface`.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="824" href="#824">824</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">protected</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">handleException</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default"> </span><span class="default">$exception</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=" d-flex"><td class="col-1 text-right"><a id="824" href="#824">824</a></td><td class="col-11 codeLine"><span class="comment"> */</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="14 tests cover line 825" 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="825" href="#825">825</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$exceptionData</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$exception</span><span class="default">-></span><span class="default">getInfo</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="825" href="#825">825</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">protected</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">handleException</span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default"> </span><span class="default">$exception</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=" d-flex"><td class="col-1 text-right"><a id="826" href="#826">826</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="14 tests cover line 826" 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="826" href="#826">826</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$exceptionData</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$exception</span><span class="default">-></span><span class="default">getInfo</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="14 tests cover line 827" 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="827" href="#827">827</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="default">$exceptionData</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">302</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="827" href="#827">827</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="828" href="#828">828</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// This exception is handled by redirecting to the redirect_uri with error parameters.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="14 tests cover line 828" 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="828" href="#828">828</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="default">$exceptionData</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">302</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="829" href="#829">829</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$redirectQueryParams</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="829" href="#829">829</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// This exception is handled by redirecting to the redirect_uri with error parameters.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 830" 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::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</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::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::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="830" href="#830">830</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$exceptionData</span><span class="keyword">[</span><span class="default">'error'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">'invalid_request'</span><span class="keyword">,</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="830" href="#830">830</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$redirectQueryParams</span><span class="default"> </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="9 tests cover line 831" 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::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</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::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::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="831" href="#831">831</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error_description'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">(string)</span><span class="default"> </span><span class="default">$exception</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 831" 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::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</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::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::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="831" href="#831">831</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$exceptionData</span><span class="keyword">[</span><span class="default">'error'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">'invalid_request'</span><span class="keyword">,</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="832" href="#832">832</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 832" 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::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</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::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::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="832" href="#832">832</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'error_description'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">(string)</span><span class="default"> </span><span class="default">$exception</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="833" href="#833">833</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="833" href="#833">833</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="834" href="#834">834</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If the state parameter was valid, include it in the error redirect.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="834" href="#834">834</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 835" 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::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</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::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::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="835" href="#835">835</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="default">$exception</span><span class="default">-></span><span class="default">getCode</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="default">!==</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INVALID_STATE</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="835" href="#835">835</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If the state parameter was valid, include it in the error redirect.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 836" 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::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</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::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::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="836" href="#836">836</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$redirectQueryParams</span><span class="keyword">[</span><span class="default">'state'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$exception</span><span class="default">-></span><span class="default">getRequest</span><span class="keyword">(</span><span class="keyword">)</span><span class="default">-></span><span class="default">getQueryParams</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">[</span><span class="default">'state'</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 836" 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::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</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::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::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="836" href="#836">836</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="default">$exception</span><span class="default">-></span><span class="default">getCode</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="default">!==</span><span class="default"> </span><span class="default">IndieAuthException</span><span class="default">::</span><span class="default">INVALID_STATE</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="837" href="#837">837</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="9 tests cover line 837" 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::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</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::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::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="837" href="#837">837</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$redirectQueryParams</span><span class="keyword">[</span><span class="default">'state'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$exception</span><span class="default">-></span><span class="default">getRequest</span><span class="keyword">(</span><span class="keyword">)</span><span class="default">-></span><span class="default">getQueryParams</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">[</span><span class="default">'state'</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="838" href="#838">838</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="838" href="#838">838</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="9 tests cover line 839" 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::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</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::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::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="839" href="#839">839</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">$exceptionData</span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="keyword">]</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="839" href="#839">839</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 840" 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::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</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::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::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="840" href="#840">840</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'Location'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">appendQueryParams</span><span class="keyword">(</span><span class="default">(string)</span><span class="default"> </span><span class="default">$exception</span><span class="default">-></span><span class="default">getRequest</span><span class="keyword">(</span><span class="keyword">)</span><span class="default">-></span><span class="default">getQueryParams</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">[</span><span class="default">'redirect_uri'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">$redirectQueryParams</span><span class="keyword">)</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 840" 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::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</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::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::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="840" href="#840">840</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">$exceptionData</span><span class="keyword">[</span><span class="default">'statusCode'</span><span class="keyword">]</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="841" href="#841">841</a></td><td class="col-11 codeLine"><span class="default"> </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="9 tests cover line 841" 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::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</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::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::testBackCompatNonPkceRequestMustLackBothPkceParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="841" href="#841">841</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'Location'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">appendQueryParams</span><span class="keyword">(</span><span class="default">(string)</span><span class="default"> </span><span class="default">$exception</span><span class="default">-></span><span class="default">getRequest</span><span class="keyword">(</span><span class="keyword">)</span><span class="default">-></span><span class="default">getQueryParams</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">[</span><span class="default">'redirect_uri'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">$redirectQueryParams</span><span class="keyword">)</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="842" href="#842">842</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">else</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="842" href="#842">842</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="843" href="#843">843</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// This exception should be shown to the user.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="843" href="#843">843</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">else</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 844" 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="844" href="#844">844</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">$exception</span><span class="default">-></span><span class="default">getStatusCode</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'content-type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'text/html'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">renderTemplate</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">exceptionTemplatePath</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="844" href="#844">844</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// This exception should be shown to the user.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="6 tests cover line 845" 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="845" href="#845">845</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'request'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$exception</span><span class="default">-></span><span class="default">getRequest</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="6 tests cover line 845" 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="845" href="#845">845</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="keyword">new</span><span class="default"> </span><span class="default">Response</span><span class="keyword">(</span><span class="default">$exception</span><span class="default">-></span><span class="default">getStatusCode</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">[</span><span class="default">'content-type'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">'text/html'</span><span class="keyword">]</span><span class="keyword">,</span><span class="default"> </span><span class="default">renderTemplate</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">exceptionTemplatePath</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 846" 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="846" href="#846">846</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'exception'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$exception</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="6 tests cover line 846" 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="846" href="#846">846</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'request'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$exception</span><span class="default">-></span><span class="default">getRequest</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">,</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="847" href="#847">847</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</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="6 tests cover line 847" 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="847" href="#847">847</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'exception'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$exception</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="848" href="#848">848</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="848" href="#848">848</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</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="849" href="#849">849</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="849" href="#849">849</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="850" href="#850">850</a></td><td class="col-11 codeLine"><span class="keyword">}</span></td></tr>
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="850" href="#850">850</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="851" href="#851">851</a></td><td class="col-11 codeLine"><span class="keyword">}</span></td></tr>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -1070,7 +1071,7 @@
|
|||||||
<h4>Legend</h4>
|
<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><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>
|
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
<a title="Back to the top" id="toplink" href="#">
|
<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>
|
<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>
|
||||||
|
@ -52,23 +52,23 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="danger small"><div align="right">0.00%</div></td>
|
<td class="danger small"><div align="right">0.00%</div></td>
|
||||||
<td class="danger small"><div align="right">0 / 1</div></td>
|
<td class="danger small"><div align="right">0 / 1</div></td>
|
||||||
|
<td class="danger big"> <div class="progress">
|
||||||
|
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="46.15" aria-valuemin="0" aria-valuemax="100" style="width: 46.15%">
|
||||||
|
<span class="sr-only">46.15% covered (danger)</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td class="danger small"><div align="right">46.15%</div></td>
|
||||||
|
<td class="danger small"><div align="right">6 / 13</div></td>
|
||||||
|
<td class="danger small"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></td>
|
||||||
<td class="warning big"> <div class="progress">
|
<td class="warning big"> <div class="progress">
|
||||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="53.85" aria-valuemin="0" aria-valuemax="100" style="width: 53.85%">
|
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="84.87" aria-valuemin="0" aria-valuemax="100" style="width: 84.87%">
|
||||||
<span class="sr-only">53.85% covered (warning)</span>
|
<span class="sr-only">84.87% covered (warning)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="warning small"><div align="right">53.85%</div></td>
|
<td class="warning small"><div align="right">84.87%</div></td>
|
||||||
<td class="warning small"><div align="right">7 / 13</div></td>
|
<td class="warning small"><div align="right">101 / 119</div></td>
|
||||||
<td class="warning small"><abbr title="Change Risk Anti-Patterns (CRAP) Index">CRAP</abbr></td>
|
|
||||||
<td class="success big"> <div class="progress">
|
|
||||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="92.31" aria-valuemin="0" aria-valuemax="100" style="width: 92.31%">
|
|
||||||
<span class="sr-only">92.31% covered (success)</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td class="success small"><div align="right">92.31%</div></td>
|
|
||||||
<td class="success small"><div align="right">96 / 104</div></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
@ -81,23 +81,23 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="danger small"><div align="right">0.00%</div></td>
|
<td class="danger small"><div align="right">0.00%</div></td>
|
||||||
<td class="danger small"><div align="right">0 / 1</div></td>
|
<td class="danger small"><div align="right">0 / 1</div></td>
|
||||||
|
<td class="danger big"> <div class="progress">
|
||||||
|
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="46.15" aria-valuemin="0" aria-valuemax="100" style="width: 46.15%">
|
||||||
|
<span class="sr-only">46.15% covered (danger)</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td class="danger small"><div align="right">46.15%</div></td>
|
||||||
|
<td class="danger small"><div align="right">6 / 13</div></td>
|
||||||
|
<td class="danger small">53.32</td>
|
||||||
<td class="warning big"> <div class="progress">
|
<td class="warning big"> <div class="progress">
|
||||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="53.85" aria-valuemin="0" aria-valuemax="100" style="width: 53.85%">
|
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="84.87" aria-valuemin="0" aria-valuemax="100" style="width: 84.87%">
|
||||||
<span class="sr-only">53.85% covered (warning)</span>
|
<span class="sr-only">84.87% covered (warning)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="warning small"><div align="right">53.85%</div></td>
|
<td class="warning small"><div align="right">84.87%</div></td>
|
||||||
<td class="warning small"><div align="right">7 / 13</div></td>
|
<td class="warning small"><div align="right">101 / 119</div></td>
|
||||||
<td class="warning small">46.96</td>
|
|
||||||
<td class="success big"> <div class="progress">
|
|
||||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="92.31" aria-valuemin="0" aria-valuemax="100" style="width: 92.31%">
|
|
||||||
<span class="sr-only">92.31% covered (success)</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td class="success small"><div align="right">92.31%</div></td>
|
|
||||||
<td class="success small"><div align="right">96 / 104</div></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
@ -152,19 +152,19 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="danger small"><div align="right">0.00%</div></td>
|
<td class="danger small"><div align="right">0.00%</div></td>
|
||||||
<td class="danger small"><div align="right">0 / 1</div></td>
|
<td class="danger small"><div align="right">0 / 1</div></td>
|
||||||
<td class="danger small">3.03</td>
|
<td class="danger small">3.02</td>
|
||||||
<td class="warning big"> <div class="progress">
|
<td class="warning big"> <div class="progress">
|
||||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="85.71" aria-valuemin="0" aria-valuemax="100" style="width: 85.71%">
|
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="87.50" aria-valuemin="0" aria-valuemax="100" style="width: 87.50%">
|
||||||
<span class="sr-only">85.71% covered (warning)</span>
|
<span class="sr-only">87.50% covered (warning)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="warning small"><div align="right">85.71%</div></td>
|
<td class="warning small"><div align="right">87.50%</div></td>
|
||||||
<td class="warning small"><div align="right">6 / 7</div></td>
|
<td class="warning small"><div align="right">7 / 8</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="danger" colspan="4"> <a href="#82"><abbr title="exchangeAuthCodeForAccessToken(string $code, callable $validateAuthCode): ?array">exchangeAuthCodeForAccessToken</abbr></a></td>
|
<td class="danger" colspan="4"> <a href="#86"><abbr title="exchangeAuthCodeForAccessToken(string $code, callable $validateAuthCode): ?array">exchangeAuthCodeForAccessToken</abbr></a></td>
|
||||||
<td class="danger big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">0.00% covered (danger)</span>
|
||||||
@ -173,40 +173,40 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="danger small"><div align="right">0.00%</div></td>
|
<td class="danger small"><div align="right">0.00%</div></td>
|
||||||
<td class="danger small"><div align="right">0 / 1</div></td>
|
<td class="danger small"><div align="right">0 / 1</div></td>
|
||||||
<td class="danger small">11.04</td>
|
<td class="danger small">12.44</td>
|
||||||
<td class="success big"> <div class="progress">
|
<td class="warning big"> <div class="progress">
|
||||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="92.86" aria-valuemin="0" aria-valuemax="100" style="width: 92.86%">
|
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="77.14" aria-valuemin="0" aria-valuemax="100" style="width: 77.14%">
|
||||||
<span class="sr-only">92.86% covered (success)</span>
|
<span class="sr-only">77.14% covered (warning)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="success small"><div align="right">92.86%</div></td>
|
<td class="warning small"><div align="right">77.14%</div></td>
|
||||||
<td class="success small"><div align="right">26 / 28</div></td>
|
<td class="warning small"><div align="right">27 / 35</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="success" colspan="4"> <a href="#147"><abbr title="getAccessToken(string $token): ?array">getAccessToken</abbr></a></td>
|
<td class="danger" colspan="4"> <a href="#161"><abbr title="getAccessToken(string $token): ?array">getAccessToken</abbr></a></td>
|
||||||
<td class="success big"> <div class="progress">
|
<td class="danger 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%">
|
<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">100.00% covered (success)</span>
|
<span class="sr-only">0.00% covered (danger)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="success small"><div align="right">100.00%</div></td>
|
<td class="danger small"><div align="right">0.00%</div></td>
|
||||||
<td class="success small"><div align="right">1 / 1</div></td>
|
<td class="danger small"><div align="right">0 / 1</div></td>
|
||||||
<td class="success small">5</td>
|
<td class="danger small">6.20</td>
|
||||||
<td class="success big"> <div class="progress">
|
<td class="warning 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%">
|
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="63.64" aria-valuemin="0" aria-valuemax="100" style="width: 63.64%">
|
||||||
<span class="sr-only">100.00% covered (success)</span>
|
<span class="sr-only">63.64% covered (warning)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="success small"><div align="right">100.00%</div></td>
|
<td class="warning small"><div align="right">63.64%</div></td>
|
||||||
<td class="success small"><div align="right">5 / 5</div></td>
|
<td class="warning small"><div align="right">7 / 11</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="success" colspan="4"> <a href="#163"><abbr title="revokeAccessToken(string $token): bool">revokeAccessToken</abbr></a></td>
|
<td class="success" colspan="4"> <a href="#186"><abbr title="revokeAccessToken(string $token): bool">revokeAccessToken</abbr></a></td>
|
||||||
<td class="success big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">100.00% covered (success)</span>
|
||||||
@ -223,11 +223,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="success small"><div align="right">100.00%</div></td>
|
<td class="success small"><div align="right">100.00%</div></td>
|
||||||
<td class="success small"><div align="right">1 / 1</div></td>
|
<td class="success small"><div align="right">2 / 2</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="success" colspan="4"> <a href="#169"><abbr title="deleteExpiredTokens(): int">deleteExpiredTokens</abbr></a></td>
|
<td class="success" colspan="4"> <a href="#193"><abbr title="deleteExpiredTokens(): int">deleteExpiredTokens</abbr></a></td>
|
||||||
<td class="success big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">100.00% covered (success)</span>
|
||||||
@ -248,7 +248,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="danger" colspan="4"> <a href="#197"><abbr title="get(string $key): ?array">get</abbr></a></td>
|
<td class="danger" colspan="4"> <a href="#221"><abbr title="get(string $key): ?array">get</abbr></a></td>
|
||||||
<td class="danger big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">0.00% covered (danger)</span>
|
||||||
@ -269,7 +269,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="success" colspan="4"> <a href="#219"><abbr title="put(string $key, array $data): bool">put</abbr></a></td>
|
<td class="success" colspan="4"> <a href="#243"><abbr title="put(string $key, array $data): bool">put</abbr></a></td>
|
||||||
<td class="success big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">100.00% covered (success)</span>
|
||||||
@ -290,7 +290,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="danger" colspan="4"> <a href="#228"><abbr title="delete(string $key, $observeLock): bool">delete</abbr></a></td>
|
<td class="danger" colspan="4"> <a href="#252"><abbr title="delete(string $key, $observeLock): bool">delete</abbr></a></td>
|
||||||
<td class="danger big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">0.00% covered (danger)</span>
|
||||||
@ -311,7 +311,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="success" colspan="4"> <a href="#242"><abbr title="getPath(string $key): string">getPath</abbr></a></td>
|
<td class="success" colspan="4"> <a href="#266"><abbr title="getPath(string $key): string">getPath</abbr></a></td>
|
||||||
<td class="success big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">100.00% covered (success)</span>
|
||||||
@ -332,7 +332,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="danger" colspan="4"> <a href="#247"><abbr title="withLock(string $path, string $mode, callable $callback)">withLock</abbr></a></td>
|
<td class="danger" colspan="4"> <a href="#271"><abbr title="withLock(string $path, string $mode, callable $callback)">withLock</abbr></a></td>
|
||||||
<td class="danger big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">0.00% covered (danger)</span>
|
||||||
@ -353,7 +353,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="success" colspan="4"> <a href="#271"><abbr title="hash(string $token): string">hash</abbr></a></td>
|
<td class="success" colspan="4"> <a href="#295"><abbr title="hash(string $token): string">hash</abbr></a></td>
|
||||||
<td class="success big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">100.00% covered (success)</span>
|
||||||
@ -447,212 +447,236 @@
|
|||||||
<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="comment">// TokenStorageInterface Methods.</span></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="comment">// TokenStorageInterface Methods.</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="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="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">createAuthCode</span><span class="keyword">(</span><span class="keyword">array</span><span class="default"> </span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="keyword">?</span><span class="default">string</span><span class="default"> </span><span class="keyword">{</span></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="keyword">public</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">createAuthCode</span><span class="keyword">(</span><span class="keyword">array</span><span class="default"> </span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="keyword">?</span><span class="default">string</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 69" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="69" href="#69">69</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$authCode</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">generateRandomString</span><span class="keyword">(</span><span class="default">self</span><span class="default">::</span><span class="default">TOKEN_LENGTH</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 69" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="69" href="#69">69</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">info</span><span class="keyword">(</span><span class="default">"Creating authorization code."</span><span class="keyword">,</span><span class="default"> </span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 70" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="70" href="#70">70</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$accessToken</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">hash</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 70" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="70" href="#70">70</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$authCode</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">generateRandomString</span><span class="keyword">(</span><span class="default">self</span><span class="default">::</span><span class="default">TOKEN_LENGTH</span><span class="keyword">)</span><span class="keyword">;</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"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 71" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="71" href="#71">71</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$accessToken</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">hash</span><span class="keyword">(</span><span class="default">$authCode</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 72" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="72" href="#72">72</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">array_key_exists</span><span class="keyword">(</span><span class="default">'valid_until'</span><span class="keyword">,</span><span class="default"> </span><span class="default">$data</span><span class="keyword">)</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="72" href="#72">72</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 73" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="73" href="#73">73</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">time</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">+</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">authCodeTtl</span><span class="keyword">;</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="default"> </span><span class="comment">// TODO: valid_until should be expire_after(? — look up), and should not be set here,</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="default"> </span><span class="keyword">}</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="default"> </span><span class="comment">// as it applies only to access tokens, not auth codes! Auth code TTL should always be </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></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="comment">// the default.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 76" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="76" href="#76">76</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">$this</span><span class="default">-></span><span class="default">put</span><span class="keyword">(</span><span class="default">$accessToken</span><span class="keyword">,</span><span class="default"> </span><span class="default">$data</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="9 tests cover line 76" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="76" href="#76">76</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">array_key_exists</span><span class="keyword">(</span><span class="default">'valid_until'</span><span class="keyword">,</span><span class="default"> </span><span class="default">$data</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="77" href="#77">77</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 77" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="77" href="#77">77</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">time</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">+</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">authCodeTtl</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" 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="78" href="#78">78</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="9 tests cover line 79" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="79" href="#79">79</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$authCode</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"><span class="default"> </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="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 80" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="80" href="#80">80</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">$this</span><span class="default">-></span><span class="default">put</span><span class="keyword">(</span><span class="default">$accessToken</span><span class="keyword">,</span><span class="default"> </span><span class="default">$data</span><span class="keyword">)</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="81" href="#81">81</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="danger d-flex"><td 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">null</span><span class="keyword">;</span></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">exchangeAuthCodeForAccessToken</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$code</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">callable</span><span class="default"> </span><span class="default">$validateAuthCode</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="keyword">?</span><span class="keyword">array</span><span class="default"> </span><span class="keyword">{</span></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">}</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="default"> </span><span class="comment">// Hash the auth code to get the theoretical matching access token filename.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 83" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="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">$authCode</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 84" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="84" href="#84">84</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$accessToken</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">hash</span><span class="keyword">(</span><span class="default">$code</span><span class="keyword">)</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"></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"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="86" href="#86">86</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Prevent the token file from being read, modified or deleted while we’re working with it.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="86" href="#86">86</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">exchangeAuthCodeForAccessToken</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$code</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">callable</span><span class="default"> </span><span class="default">$validateAuthCode</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="keyword">?</span><span class="keyword">array</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="87" href="#87">87</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// r+ to allow reading and writing, but to make sure we don’t create the file if it doesn’t </span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="87" href="#87">87</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Hash the auth code to get the theoretical matching access token filename.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="88" href="#88">88</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// already exist.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 88" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="88" href="#88">88</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$accessToken</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">hash</span><span class="keyword">(</span><span class="default">$code</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 89" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="89" href="#89">89</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">withLock</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">getPath</span><span class="keyword">(</span><span class="default">$accessToken</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="default">'r+'</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">use</span><span class="default"> </span><span class="keyword">(</span><span class="default">$accessToken</span><span class="keyword">,</span><span class="default"> </span><span class="default">$validateAuthCode</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="89" href="#89">89</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="90" href="#90">90</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Read the file contents.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="90" href="#90">90</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Prevent the token file from being read, modified or deleted while we’re working with it.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 91" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="91" href="#91">91</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$fileContents</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">''</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="91" href="#91">91</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// r+ to allow reading and writing, but to make sure we don’t create the file if it doesn’t </span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 92" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="92" href="#92">92</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">while</span><span class="default"> </span><span class="keyword">(</span><span class="default">$d</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">fread</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">1024</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="default">$fileContents</span><span class="default"> </span><span class="default">.=</span><span class="default"> </span><span class="default">$d</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="92" href="#92">92</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// already exist.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="93" href="#93">93</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 93" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="93" href="#93">93</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">withLock</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">getPath</span><span class="keyword">(</span><span class="default">$accessToken</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="default">'r+'</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">use</span><span class="default"> </span><span class="keyword">(</span><span class="default">$accessToken</span><span class="keyword">,</span><span class="default"> </span><span class="default">$validateAuthCode</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="8 tests cover line 94" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="94" href="#94">94</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">json_decode</span><span class="keyword">(</span><span class="default">$fileContents</span><span class="keyword">,</span><span class="default"> </span><span class="default">true</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="94" href="#94">94</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Read the file contents.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="95" href="#95">95</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 95" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="95" href="#95">95</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$fileContents</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">''</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 96" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="96" href="#96">96</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">is_array</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</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="8 tests cover line 96" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="96" href="#96">96</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">while</span><span class="default"> </span><span class="keyword">(</span><span class="default">$d</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">fread</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">1024</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="default">$fileContents</span><span class="default"> </span><span class="default">.=</span><span class="default"> </span><span class="default">$d</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="97" href="#97">97</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="97" href="#97">97</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="98" href="#98">98</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Make sure the auth code hasn’t already been redeemed.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 98" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="98" href="#98">98</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">json_decode</span><span class="keyword">(</span><span class="default">$fileContents</span><span class="keyword">,</span><span class="default"> </span><span class="default">true</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 99" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="99" href="#99">99</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="default">$data</span><span class="keyword">[</span><span class="default">'exchanged_at'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</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="99" href="#99">99</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="100" href="#100">100</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 100" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="100" href="#100">100</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">is_array</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="101" href="#101">101</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Make sure the auth code isn’t expired.</span></td></tr>
|
<tr class="danger d-flex"><td class="col-1 text-right"><a id="101" href="#101">101</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">'Authoriazation Code data could not be parsed as a JSON object.'</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 102" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="102" href="#102">102</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">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">0</span><span class="keyword">)</span><span class="default"> </span><span class="keyword"><</span><span class="default"> </span><span class="default">time</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</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="102" href="#102">102</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span><span class="default"> </span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="103" href="#103">103</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="103" href="#103">103</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="104" href="#104">104</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// The auth code is valid as far as we know, pass it to the validation callback passed from the</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="104" href="#104">104</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="105" href="#105">105</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Server.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="105" href="#105">105</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Make sure the auth code hasn’t already been redeemed.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="106" href="#106">106</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">try</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 106" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="106" href="#106">106</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="default">$data</span><span class="keyword">[</span><span class="default">'exchanged_at'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">false</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="8 tests cover line 107" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="107" href="#107">107</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$validateAuthCode</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="danger d-flex"><td class="col-1 text-right"><a id="107" href="#107">107</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"This authorization code has already been exchanged."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 108" data-content="<ul><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::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="108" href="#108">108</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">catch</span><span class="default"> </span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default"> </span><span class="default">$e</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="108" href="#108">108</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="109" href="#109">109</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If there was an issue with the auth code, delete it before bubbling the exception</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="109" href="#109">109</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="110" href="#110">110</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// up to the Server for handling. We currently have a lock on the file path, so pass</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="110" href="#110">110</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="111" href="#111">111</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// false to $observeLock to prevent a deadlock.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="111" href="#111">111</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Make sure the auth code isn’t expired.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 112" data-content="<ul><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::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="112" href="#112">112</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">delete</span><span class="keyword">(</span><span class="default">$accessToken</span><span class="keyword">,</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 112" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="112" href="#112">112</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">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">0</span><span class="keyword">)</span><span class="default"> </span><span class="keyword"><</span><span class="default"> </span><span class="default">time</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="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 113" data-content="<ul><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::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="113" href="#113">113</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">$e</span><span class="keyword">;</span></td></tr>
|
<tr class="danger d-flex"><td class="col-1 text-right"><a id="113" href="#113">113</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"This authorization code has expired."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="114" href="#114">114</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
<tr class="danger d-flex"><td class="col-1 text-right"><a id="114" href="#114">114</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="115" href="#115">115</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="115" href="#115">115</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="116" href="#116">116</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If the access token is valid, mark it as redeemed and set a new expiry time.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="116" href="#116">116</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 117" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="117" href="#117">117</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'exchanged_at'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">time</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="117" href="#117">117</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// The auth code is valid as far as we know, pass it to the validation callback passed from the</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="118" href="#118">118</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="118" href="#118">118</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Server.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 119" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="119" href="#119">119</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="default">is_int</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">[</span><span class="default">'_access_token_ttl'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">null</span><span class="keyword">)</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="119" href="#119">119</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">try</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="120" href="#120">120</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// This access token has a custom TTL, use that.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 120" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="120" href="#120">120</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$validateAuthCode</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="danger d-flex"><td class="col-1 text-right"><a id="121" href="#121">121</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">time</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">+</span><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'_access_code_ttl'</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 121" data-content="<ul><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::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="121" href="#121">121</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">catch</span><span class="default"> </span><span class="keyword">(</span><span class="default">IndieAuthException</span><span class="default"> </span><span class="default">$e</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="3 tests cover line 122" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="122" href="#122">122</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">elseif</span><span class="default"> </span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">accessTokenTtl</span><span class="default"> </span><span class="default">==</span><span class="default"> </span><span class="default">0</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="122" href="#122">122</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If there was an issue with the auth code, delete it before bubbling the exception</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="123" href="#123">123</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// The token should be valid until explicitly revoked.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="123" href="#123">123</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// up to the Server for handling. We currently have a lock on the file path, so pass</span></td></tr>
|
||||||
<tr class="danger d-flex"><td class="col-1 text-right"><a id="124" href="#124">124</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="124" href="#124">124</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// false to $observeLock to prevent a deadlock.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="125" href="#125">125</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">else</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 125" data-content="<ul><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::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="125" href="#125">125</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">info</span><span class="keyword">(</span><span class="default">"Deleting authorization code, as it failed the Server-level validation."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="126" href="#126">126</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Use the default TTL.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 126" data-content="<ul><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::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="126" href="#126">126</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">delete</span><span class="keyword">(</span><span class="default">$accessToken</span><span class="keyword">,</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 127" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="127" href="#127">127</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">time</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">+</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">accessTokenTtl</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 127" data-content="<ul><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::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="127" href="#127">127</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">throw</span><span class="default"> </span><span class="default">$e</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="128" href="#128">128</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="128" href="#128">128</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="129" href="#129">129</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="129" href="#129">129</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="130" href="#130">130</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Write the new file contents, truncating afterwards in case the new data is shorter than the old data.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="130" href="#130">130</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If the access token is valid, mark it as redeemed and set a new expiry time.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 131" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="131" href="#131">131</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$jsonData</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 131" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="131" href="#131">131</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'exchanged_at'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">time</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="3 tests cover line 132" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="132" href="#132">132</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="default">rewind</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="default"> </span><span class="default">===</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</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="132" href="#132">132</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 133" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="133" href="#133">133</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="default">fwrite</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">$jsonData</span><span class="keyword">)</span><span class="default"> </span><span class="default">===</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</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="3 tests cover line 133" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="133" href="#133">133</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="default">is_int</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">[</span><span class="default">'_access_token_ttl'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">null</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="3 tests cover line 134" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="134" href="#134">134</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="default">ftruncate</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">strlen</span><span class="keyword">(</span><span class="default">$jsonData</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="default">===</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</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="134" href="#134">134</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// This access token has a custom TTL, use that.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="135" href="#135">135</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="danger d-flex"><td class="col-1 text-right"><a id="135" href="#135">135</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">time</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">+</span><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'_access_code_ttl'</span><span class="keyword">]</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="136" href="#136">136</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Return the OAuth2-compatible access token data to the Server for passing onto</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 136" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="136" href="#136">136</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">elseif</span><span class="default"> </span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">accessTokenTtl</span><span class="default"> </span><span class="default">==</span><span class="default"> </span><span class="default">0</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="137" href="#137">137</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// the client app. Passed via array_filter to remove the scope key if scope is null.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="137" href="#137">137</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// The token should be valid until explicitly revoked.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 138" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="138" href="#138">138</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">array_filter</span><span class="keyword">(</span><span class="keyword">[</span></td></tr>
|
<tr class="danger d-flex"><td class="col-1 text-right"><a id="138" href="#138">138</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 139" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="139" href="#139">139</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'access_token'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$accessToken</span><span class="keyword">,</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="139" href="#139">139</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">else</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 140" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="140" href="#140">140</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'scope'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'scope'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">null</span><span class="keyword">,</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="140" href="#140">140</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Use the default TTL.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 141" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="141" href="#141">141</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'me'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'me'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 141" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="141" href="#141">141</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">time</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">+</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">accessTokenTtl</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 142" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="142" href="#142">142</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'profile'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'profile'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">null</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="142" href="#142">142</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="143" href="#143">143</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="143" href="#143">143</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 144" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="144" href="#144">144</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="144" href="#144">144</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Write the new file contents, truncating afterwards in case the new data is shorter than the old data.</span></td></tr>
|
||||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="145" href="#145">145</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="3 tests cover line 145" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="145" href="#145">145</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$jsonData</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="146" href="#146">146</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 146" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="146" href="#146">146</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="default">rewind</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="default"> </span><span class="default">===</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</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="147" href="#147">147</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">getAccessToken</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$token</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="keyword">?</span><span class="keyword">array</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 147" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="147" href="#147">147</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="default">fwrite</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">$jsonData</span><span class="keyword">)</span><span class="default"> </span><span class="default">===</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</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="1 test covers line 148" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="148" href="#148">148</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">get</span><span class="keyword">(</span><span class="default">$token</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 148" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="148" href="#148">148</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="default">ftruncate</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">strlen</span><span class="keyword">(</span><span class="default">$jsonData</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="default">===</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</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="149" href="#149">149</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="149" href="#149">149</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 150" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="150" href="#150">150</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">is_array</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</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="150" href="#150">150</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Return the OAuth2-compatible access token data to the Server for passing onto</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="151" href="#151">151</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="151" href="#151">151</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// the client app. Passed via array_filter to remove the scope key if scope is null.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="152" href="#152">152</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Check that this is a redeemed access token.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 152" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="152" href="#152">152</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">array_filter</span><span class="keyword">(</span><span class="keyword">[</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 153" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="153" href="#153">153</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">$data</span><span class="keyword">[</span><span class="default">'exchanged_at'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="default"> </span><span class="default">===</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</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="3 tests cover line 153" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="153" href="#153">153</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'access_token'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$accessToken</span><span class="keyword">,</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="154" href="#154">154</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 154" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="154" href="#154">154</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'scope'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'scope'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">null</span><span class="keyword">,</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="155" href="#155">155</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Check that the access token is still valid. valid_until=null means it should live until</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 155" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="155" href="#155">155</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'me'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'me'</span><span class="keyword">]</span><span class="keyword">,</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="156" href="#156">156</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// explicitly revoked.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 156" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="156" href="#156">156</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">'profile'</span><span class="default"> </span><span class="default">=></span><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'profile'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">null</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 157" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="157" href="#157">157</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="default">is_int</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="keyword">)</span><span class="default"> </span><span class="default">&&</span><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword"><</span><span class="default"> </span><span class="default">time</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</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="157" href="#157">157</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">]</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="158" href="#158">158</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="8 tests cover line 158" data-content="<ul><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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="158" href="#158">158</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="159" href="#159">159</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// The token is valid!</span></td></tr>
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="159" href="#159">159</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="1 test covers line 160" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="160" href="#160">160</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$data</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="160" href="#160">160</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="161" href="#161">161</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="161" href="#161">161</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">getAccessToken</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$token</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="keyword">?</span><span class="keyword">array</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="162" href="#162">162</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 162" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="162" href="#162">162</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">get</span><span class="keyword">(</span><span class="default">$token</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="163" href="#163">163</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">revokeAccessToken</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$token</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">bool</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="163" href="#163">163</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 164" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="164" href="#164">164</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">delete</span><span class="keyword">(</span><span class="default">$token</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 164" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="164" href="#164">164</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">is_array</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="165" href="#165">165</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="1 test covers line 165" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="165" href="#165">165</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"The access token could not be parsed as a JSON object."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="166" href="#166">166</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 166" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="166" href="#166">166</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="167" href="#167">167</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Implementation-Specifc Methods.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="167" href="#167">167</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="168" href="#168">168</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="168" href="#168">168</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="169" href="#169">169</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">deleteExpiredTokens</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">int</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="169" href="#169">169</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Check that this is a redeemed access token.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 170" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="170" href="#170">170</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$deleted</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="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 170" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="170" href="#170">170</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">$data</span><span class="keyword">[</span><span class="default">'exchanged_at'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="default"> </span><span class="default">===</span><span class="default"> </span><span class="default">false</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="171" href="#171">171</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="danger d-flex"><td class="col-1 text-right"><a id="171" href="#171">171</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"This authorization code has not yet been exchanged for an access token."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 172" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="172" href="#172">172</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">foreach</span><span class="default"> </span><span class="keyword">(</span><span class="keyword">new</span><span class="default"> </span><span class="default">DirectoryIterator</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">path</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">as</span><span class="default"> </span><span class="default">$fileInfo</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="172" href="#172">172</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 173" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="173" href="#173">173</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="default">$fileInfo</span><span class="default">-></span><span class="default">isFile</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="default">&&</span><span class="default"> </span><span class="default">$fileInfo</span><span class="default">-></span><span class="default">getExtension</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="default">==</span><span class="default"> </span><span class="default">'json'</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="173" href="#173">173</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="174" href="#174">174</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Only delete files which we can lock.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="174" href="#174">174</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 175" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="175" href="#175">175</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$successfullyDeleted</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">withLock</span><span class="keyword">(</span><span class="default">$fileInfo</span><span class="default">-></span><span class="default">getPathname</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="default">'r'</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">use</span><span class="default"> </span><span class="keyword">(</span><span class="default">$fileInfo</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="175" href="#175">175</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Check that the access token is still valid. valid_until=null means it should live until</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="176" href="#176">176</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Read the file, check expiry date! Only unlink if file is expired.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="176" href="#176">176</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// explicitly revoked.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 177" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="177" href="#177">177</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$fileContents</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">''</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 177" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="177" href="#177">177</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="default">is_int</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="keyword">)</span><span class="default"> </span><span class="default">&&</span><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword"><</span><span class="default"> </span><span class="default">time</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="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 178" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="178" href="#178">178</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">while</span><span class="default"> </span><span class="keyword">(</span><span class="default">$d</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">fread</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">1024</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="default">$fileContents</span><span class="default"> </span><span class="default">.=</span><span class="default"> </span><span class="default">$d</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="178" href="#178">178</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">error</span><span class="keyword">(</span><span class="default">"This access token has expired."</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="179" href="#179">179</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="danger d-flex"><td class="col-1 text-right"><a id="179" href="#179">179</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 180" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="180" href="#180">180</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">json_decode</span><span class="keyword">(</span><span class="default">$fileContents</span><span class="keyword">,</span><span class="default"> </span><span class="default">true</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="180" href="#180">180</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="181" href="#181">181</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="181" href="#181">181</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 182" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="182" href="#182">182</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">is_array</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</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="182" href="#182">182</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// The token is valid!</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="183" href="#183">183</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 183" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="183" href="#183">183</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$data</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="184" href="#184">184</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If valid_until is a valid time, and is in the past, delete the token.</span></td></tr>
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="184" href="#184">184</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="1 test covers line 185" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="185" href="#185">185</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="default">is_int</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">null</span><span class="keyword">)</span><span class="default"> </span><span class="default">&&</span><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword"><</span><span class="default"> </span><span class="default">time</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=" d-flex"><td class="col-1 text-right"><a id="185" href="#185">185</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 186" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="186" href="#186">186</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">unlink</span><span class="keyword">(</span><span class="default">$fileInfo</span><span class="default">-></span><span class="default">getPathname</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="186" href="#186">186</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">revokeAccessToken</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$token</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">bool</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="187" href="#187">187</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="1 test covers line 187" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="187" href="#187">187</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">logger</span><span class="default">-></span><span class="default">info</span><span class="keyword">(</span><span class="string">"</span><span class="string">Deleting access token </span><span class="string">{</span><span class="string">$token</span><span class="keyword">}</span><span class="string">"</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 188" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="188" href="#188">188</a></td><td class="col-11 codeLine"><span class="default"> </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="1 test covers line 188" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="188" href="#188">188</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">delete</span><span class="keyword">(</span><span class="default">$token</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="189" href="#189">189</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="189" href="#189">189</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="1 test covers line 190" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="190" href="#190">190</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="default">$successfullyDeleted</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="default">$deleted</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="190" href="#190">190</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="191" href="#191">191</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="191" href="#191">191</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Implementation-Specifc Methods.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="192" href="#192">192</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="192" href="#192">192</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="193" href="#193">193</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="193" href="#193">193</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">deleteExpiredTokens</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">int</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 194" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="194" href="#194">194</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$deleted</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 194" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="194" href="#194">194</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$deleted</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="warning d-flex"><td class="col-1 text-right"><a id="195" href="#195">195</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="195" href="#195">195</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="196" href="#196">196</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 196" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="196" href="#196">196</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">foreach</span><span class="default"> </span><span class="keyword">(</span><span class="keyword">new</span><span class="default"> </span><span class="default">DirectoryIterator</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">path</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">as</span><span class="default"> </span><span class="default">$fileInfo</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="197" href="#197">197</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">get</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$key</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="keyword">?</span><span class="keyword">array</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 197" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="197" href="#197">197</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="default">$fileInfo</span><span class="default">-></span><span class="default">isFile</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="default">&&</span><span class="default"> </span><span class="default">$fileInfo</span><span class="default">-></span><span class="default">getExtension</span><span class="keyword">(</span><span class="keyword">)</span><span class="default"> </span><span class="default">==</span><span class="default"> </span><span class="default">'json'</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="4 tests cover line 198" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="198" href="#198">198</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$path</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">getPath</span><span class="keyword">(</span><span class="default">$key</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="198" href="#198">198</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Only delete files which we can lock.</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="199" href="#199">199</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 199" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="199" href="#199">199</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$successfullyDeleted</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">withLock</span><span class="keyword">(</span><span class="default">$fileInfo</span><span class="default">-></span><span class="default">getPathname</span><span class="keyword">(</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="default">'r'</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">use</span><span class="default"> </span><span class="keyword">(</span><span class="default">$fileInfo</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="4 tests cover line 200" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="200" href="#200">200</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">file_exists</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">)</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="200" href="#200">200</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Read the file, check expiry date! Only unlink if file is expired.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="3 tests cover line 201" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="201" href="#201">201</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 201" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="201" href="#201">201</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$fileContents</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">''</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="202" href="#202">202</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="1 test covers line 202" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="202" href="#202">202</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">while</span><span class="default"> </span><span class="keyword">(</span><span class="default">$d</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">fread</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">1024</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="default">$fileContents</span><span class="default"> </span><span class="default">.=</span><span class="default"> </span><span class="default">$d</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="203" href="#203">203</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="203" href="#203">203</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 204" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="204" href="#204">204</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">withLock</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">,</span><span class="default"> </span><span class="default">'r'</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">$fp</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="1 test covers line 204" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="204" href="#204">204</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$data</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">json_decode</span><span class="keyword">(</span><span class="default">$fileContents</span><span class="keyword">,</span><span class="default"> </span><span class="default">true</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 205" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="205" href="#205">205</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$fileContents</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">''</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="205" href="#205">205</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 206" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="206" href="#206">206</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">while</span><span class="default"> </span><span class="keyword">(</span><span class="default">$data</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">fread</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">1024</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="1 test covers line 206" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="206" href="#206">206</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">is_array</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="keyword">return</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="4 tests cover line 207" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="207" href="#207">207</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$fileContents</span><span class="default"> </span><span class="default">.=</span><span class="default"> </span><span class="default">$data</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="207" href="#207">207</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="208" href="#208">208</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="208" href="#208">208</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// If valid_until is a valid time, and is in the past, delete the token.</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 209" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="209" href="#209">209</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$result</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">json_decode</span><span class="keyword">(</span><span class="default">$fileContents</span><span class="keyword">,</span><span class="default"> </span><span class="default">true</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 209" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="209" href="#209">209</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="default">is_int</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="default">??</span><span class="default"> </span><span class="default">null</span><span class="keyword">)</span><span class="default"> </span><span class="default">&&</span><span class="default"> </span><span class="default">$data</span><span class="keyword">[</span><span class="default">'valid_until'</span><span class="keyword">]</span><span class="default"> </span><span class="keyword"><</span><span class="default"> </span><span class="default">time</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=" d-flex"><td class="col-1 text-right"><a id="210" href="#210">210</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 210" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="210" href="#210">210</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">unlink</span><span class="keyword">(</span><span class="default">$fileInfo</span><span class="default">-></span><span class="default">getPathname</span><span class="keyword">(</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="4 tests cover line 211" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="211" href="#211">211</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="default">is_array</span><span class="keyword">(</span><span class="default">$result</span><span class="keyword">)</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="211" href="#211">211</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="4 tests cover line 212" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="212" href="#212">212</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$result</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 212" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="212" href="#212">212</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="213" href="#213">213</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="213" href="#213">213</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="214" href="#214">214</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 214" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="214" href="#214">214</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="default">$successfullyDeleted</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span><span class="default"> </span><span class="default">$deleted</span><span class="default">++</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="215" href="#215">215</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="215" href="#215">215</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="4 tests cover line 216" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="216" href="#216">216</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="216" href="#216">216</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
||||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="217" href="#217">217</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="217" href="#217">217</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="218" href="#218">218</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="1 test covers line 218" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="218" href="#218">218</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$deleted</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="219" href="#219">219</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">put</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$key</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">array</span><span class="default"> </span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">bool</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="219" href="#219">219</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="220" href="#220">220</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Ensure that the containing folder exists.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="220" href="#220">220</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 221" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="221" href="#221">221</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">@</span><span class="default">mkdir</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">path</span><span class="keyword">,</span><span class="default"> </span><span class="default">0777</span><span class="keyword">,</span><span class="default"> </span><span class="default">true</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="221" href="#221">221</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">get</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$key</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="keyword">?</span><span class="keyword">array</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="222" href="#222">222</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 222" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="222" href="#222">222</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$path</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">getPath</span><span class="keyword">(</span><span class="default">$key</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 223" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="223" href="#223">223</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">withLock</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">getPath</span><span class="keyword">(</span><span class="default">$key</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="default">'w'</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">use</span><span class="default"> </span><span class="keyword">(</span><span class="default">$data</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="223" href="#223">223</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 224" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="224" href="#224">224</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">fwrite</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="default">!==</span><span class="default"> </span><span class="default">false</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 224" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="224" href="#224">224</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">file_exists</span><span class="keyword">(</span><span class="default">$path</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="11 tests cover line 225" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="225" href="#225">225</a></td><td class="col-11 codeLine"><span class="default"> </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="3 tests cover line 225" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="225" href="#225">225</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="226" href="#226">226</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="226" href="#226">226</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="227" href="#227">227</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="227" href="#227">227</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="228" href="#228">228</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">delete</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$key</span><span class="keyword">,</span><span class="default"> </span><span class="default">$observeLock</span><span class="keyword">=</span><span class="default">true</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">bool</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 228" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="228" href="#228">228</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">withLock</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">,</span><span class="default"> </span><span class="default">'r'</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">$fp</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="7 tests cover line 229" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</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::testTokenEndpointReturnsAccessTokenOnValidRequest</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="229" href="#229">229</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$path</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">getPath</span><span class="keyword">(</span><span class="default">$key</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 229" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="229" href="#229">229</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$fileContents</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">''</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="7 tests cover line 230" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</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::testTokenEndpointReturnsAccessTokenOnValidRequest</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="230" href="#230">230</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="default">file_exists</span><span class="keyword">(</span><span class="default">$path</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="4 tests cover line 230" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="230" href="#230">230</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">while</span><span class="default"> </span><span class="keyword">(</span><span class="default">$data</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">fread</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">1024</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="7 tests cover line 231" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</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::testTokenEndpointReturnsAccessTokenOnValidRequest</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="231" href="#231">231</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="default">$observeLock</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="4 tests cover line 231" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="231" href="#231">231</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$fileContents</span><span class="default"> </span><span class="default">.=</span><span class="default"> </span><span class="default">$data</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 232" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="232" href="#232">232</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">withLock</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">,</span><span class="default"> </span><span class="default">'r'</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">use</span><span class="default"> </span><span class="keyword">(</span><span class="default">$path</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="232" href="#232">232</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="2 tests cover line 233" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="233" href="#233">233</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">unlink</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 233" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="233" href="#233">233</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$result</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">json_decode</span><span class="keyword">(</span><span class="default">$fileContents</span><span class="keyword">,</span><span class="default"> </span><span class="default">true</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 234" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="234" href="#234">234</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="234" href="#234">234</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="235" href="#235">235</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">else</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 235" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="235" href="#235">235</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="default">is_array</span><span class="keyword">(</span><span class="default">$result</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="5 tests cover line 236" data-content="<ul><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::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="236" href="#236">236</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">unlink</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="4 tests cover line 236" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="236" href="#236">236</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$result</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="237" href="#237">237</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="237" href="#237">237</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="238" href="#238">238</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="238" href="#238">238</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class="danger d-flex"><td class="col-1 text-right"><a id="239" href="#239">239</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">false</span><span class="keyword">;</span></td></tr>
|
<tr class="danger d-flex"><td class="col-1 text-right"><a id="239" href="#239">239</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="240" href="#240">240</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="4 tests cover line 240" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="240" href="#240">240</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="241" href="#241">241</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="241" href="#241">241</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="242" href="#242">242</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">getPath</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$key</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">string</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="242" href="#242">242</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="243" href="#243">243</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// TODO: ensure that the calculated path is a child of $this->path.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="243" href="#243">243</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">put</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$key</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">array</span><span class="default"> </span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">bool</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 244" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="244" href="#244">244</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">path</span><span class="default"> </span><span class="keyword">.</span><span class="default"> </span><span class="string">"</span><span class="string">$key</span><span class="string">.json</span><span class="string">"</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="244" href="#244">244</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Ensure that the containing folder exists.</span></td></tr>
|
||||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="245" href="#245">245</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="11 tests cover line 245" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="245" href="#245">245</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">@</span><span class="default">mkdir</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">path</span><span class="keyword">,</span><span class="default"> </span><span class="default">0777</span><span class="keyword">,</span><span class="default"> </span><span class="default">true</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="246" href="#246">246</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="246" href="#246">246</a></td><td class="col-11 codeLine"><span class="default"> </span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="247" href="#247">247</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">protected</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">withLock</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$path</span><span class="keyword">,</span><span class="default"> </span><span class="default">string</span><span class="default"> </span><span class="default">$mode</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">callable</span><span class="default"> </span><span class="default">$callback</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="11 tests cover line 247" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="247" href="#247">247</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">withLock</span><span class="keyword">(</span><span class="default">$this</span><span class="default">-></span><span class="default">getPath</span><span class="keyword">(</span><span class="default">$key</span><span class="keyword">)</span><span class="keyword">,</span><span class="default"> </span><span class="default">'w'</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">use</span><span class="default"> </span><span class="keyword">(</span><span class="default">$data</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="11 tests cover line 248" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="248" href="#248">248</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$fp</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="keyword">@</span><span class="default">fopen</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">,</span><span class="default"> </span><span class="default">$mode</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 248" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="248" href="#248">248</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">fwrite</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">json_encode</span><span class="keyword">(</span><span class="default">$data</span><span class="keyword">)</span><span class="keyword">)</span><span class="default"> </span><span class="default">!==</span><span class="default"> </span><span class="default">false</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="249" href="#249">249</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 249" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="249" href="#249">249</a></td><td class="col-11 codeLine"><span class="default"> </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="11 tests cover line 250" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="250" href="#250">250</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="default">$fp</span><span class="default"> </span><span class="default">===</span><span class="default"> </span><span class="default">false</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="250" href="#250">250</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="1 test covers line 251" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="251" href="#251">251</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="251" href="#251">251</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="252" href="#252">252</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="252" href="#252">252</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">delete</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$key</span><span class="keyword">,</span><span class="default"> </span><span class="default">$observeLock</span><span class="keyword">=</span><span class="default">true</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">bool</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="253" href="#253">253</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="7 tests cover line 253" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</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::testTokenEndpointReturnsAccessTokenOnValidRequest</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="253" href="#253">253</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$path</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">getPath</span><span class="keyword">(</span><span class="default">$key</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="254" href="#254">254</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Wait for a lock.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="7 tests cover line 254" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</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::testTokenEndpointReturnsAccessTokenOnValidRequest</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="254" href="#254">254</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="default">file_exists</span><span class="keyword">(</span><span class="default">$path</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="11 tests cover line 255" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="255" href="#255">255</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="default">flock</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">LOCK_EX</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="7 tests cover line 255" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</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::testTokenEndpointReturnsAccessTokenOnValidRequest</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="255" href="#255">255</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="default">$observeLock</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="11 tests cover line 256" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="256" href="#256">256</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$return</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 256" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="256" href="#256">256</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">withLock</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">,</span><span class="default"> </span><span class="default">'r'</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="default"> </span><span class="keyword">use</span><span class="default"> </span><span class="keyword">(</span><span class="default">$path</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="257" href="#257">257</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">try</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 257" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="257" href="#257">257</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">unlink</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="258" href="#258">258</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Perform whatever action on the file pointer.</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="2 tests cover line 258" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="258" href="#258">258</a></td><td class="col-11 codeLine"><span class="default"> </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="11 tests cover line 259" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="259" href="#259">259</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$return</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$callback</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="259" href="#259">259</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">else</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 260" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="260" href="#260">260</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">finally</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="5 tests cover line 260" data-content="<ul><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::testBackCompatAuthCodeWithoutPkceCannotBeExchangedWithCodeVerifierBothExchangeEndpoints</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="260" href="#260">260</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">unlink</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="261" href="#261">261</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Regardless of what happens, release the lock.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="261" href="#261">261</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="11 tests cover line 262" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="262" href="#262">262</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">flock</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">LOCK_UN</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="262" href="#262">262</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="11 tests cover line 263" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="263" href="#263">263</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">fclose</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="danger d-flex"><td class="col-1 text-right"><a id="263" href="#263">263</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">false</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="264" href="#264">264</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="264" href="#264">264</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="11 tests cover line 265" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="265" href="#265">265</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$return</span><span class="keyword">;</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="265" href="#265">265</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="266" href="#266">266</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="266" href="#266">266</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">getPath</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$key</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">string</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="267" href="#267">267</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// It wasn’t possible to get a lock.</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="267" href="#267">267</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// TODO: ensure that the calculated path is a child of $this->path.</span></td></tr>
|
||||||
<tr class="danger d-flex"><td class="col-1 text-right"><a id="268" href="#268">268</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 268" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="268" href="#268">268</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">path</span><span class="default"> </span><span class="keyword">.</span><span class="default"> </span><span class="string">"</span><span class="string">$key</span><span class="string">.json</span><span class="string">"</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="269" href="#269">269</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span></td></tr>
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="269" href="#269">269</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="270" href="#270">270</a></td><td class="col-11 codeLine"></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="270" href="#270">270</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="271" href="#271">271</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">protected</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">hash</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$token</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">string</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="271" href="#271">271</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">protected</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">withLock</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$path</span><span class="keyword">,</span><span class="default"> </span><span class="default">string</span><span class="default"> </span><span class="default">$mode</span><span class="keyword">,</span><span class="default"> </span><span class="keyword">callable</span><span class="default"> </span><span class="default">$callback</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="9 tests cover line 272" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="272" href="#272">272</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">hash_hmac</span><span class="keyword">(</span><span class="default">'sha256'</span><span class="keyword">,</span><span class="default"> </span><span class="default">$token</span><span class="keyword">,</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">secret</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 272" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="272" href="#272">272</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$fp</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="keyword">@</span><span class="default">fopen</span><span class="keyword">(</span><span class="default">$path</span><span class="keyword">,</span><span class="default"> </span><span class="default">$mode</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
<tr class="warning d-flex"><td class="col-1 text-right"><a id="273" href="#273">273</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="273" href="#273">273</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
<tr class=" d-flex"><td class="col-1 text-right"><a id="274" href="#274">274</a></td><td class="col-11 codeLine"><span class="keyword">}</span></td></tr>
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 274" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="274" href="#274">274</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="default">$fp</span><span class="default"> </span><span class="default">===</span><span class="default"> </span><span class="default">false</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="1 test covers line 275" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li></ul>" data-placement="top" data-html="true" class="col-1 text-right"><a id="275" href="#275">275</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
||||||
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="276" href="#276">276</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="277" href="#277">277</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="278" href="#278">278</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Wait for a lock.</span></td></tr>
|
||||||
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 279" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="279" href="#279">279</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="default">flock</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">LOCK_EX</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="11 tests cover line 280" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="280" href="#280">280</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$return</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
||||||
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="281" href="#281">281</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">try</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="282" href="#282">282</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Perform whatever action on the file pointer.</span></td></tr>
|
||||||
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 283" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="283" href="#283">283</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">$return</span><span class="default"> </span><span class="keyword">=</span><span class="default"> </span><span class="default">$callback</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 284" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="284" href="#284">284</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">}</span><span class="default"> </span><span class="keyword">finally</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="285" href="#285">285</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// Regardless of what happens, release the lock.</span></td></tr>
|
||||||
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 286" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="286" href="#286">286</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">flock</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">,</span><span class="default"> </span><span class="default">LOCK_UN</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="11 tests cover line 287" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="287" href="#287">287</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="default">fclose</span><span class="keyword">(</span><span class="default">$fp</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="288" href="#288">288</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="11 tests cover line 289" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCrud</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\FilesystemJsonStorageTest::testCleanUp</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="289" href="#289">289</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">$return</span><span class="keyword">;</span></td></tr>
|
||||||
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="290" href="#290">290</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="291" href="#291">291</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="comment">// It wasn’t possible to get a lock.</span></td></tr>
|
||||||
|
<tr class="danger d-flex"><td class="col-1 text-right"><a id="292" href="#292">292</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">null</span><span class="keyword">;</span></td></tr>
|
||||||
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="293" href="#293">293</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="294" href="#294">294</a></td><td class="col-11 codeLine"></td></tr>
|
||||||
|
<tr class=" d-flex"><td class="col-1 text-right"><a id="295" href="#295">295</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">protected</span><span class="default"> </span><span class="keyword">function</span><span class="default"> </span><span class="default">hash</span><span class="keyword">(</span><span class="default">string</span><span class="default"> </span><span class="default">$token</span><span class="keyword">)</span><span class="keyword">:</span><span class="default"> </span><span class="default">string</span><span class="default"> </span><span class="keyword">{</span></td></tr>
|
||||||
|
<tr class="covered-by-large-tests popin d-flex"><td data-title="9 tests cover line 296" data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</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::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsAccessTokenOnValidRequest</li><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testBackCompatRequestsWithoutPkceWorkCorrectlyWithBothExchangeFlows</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="296" href="#296">296</a></td><td class="col-11 codeLine"><span class="default"> </span><span class="keyword">return</span><span class="default"> </span><span class="default">hash_hmac</span><span class="keyword">(</span><span class="default">'sha256'</span><span class="keyword">,</span><span class="default"> </span><span class="default">$token</span><span class="keyword">,</span><span class="default"> </span><span class="default">$this</span><span class="default">-></span><span class="default">secret</span><span class="keyword">)</span><span class="keyword">;</span></td></tr>
|
||||||
|
<tr class="warning d-flex"><td class="col-1 text-right"><a id="297" href="#297">297</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="298" href="#298">298</a></td><td class="col-11 codeLine"><span class="keyword">}</span></td></tr>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -663,7 +687,7 @@
|
|||||||
<h4>Legend</h4>
|
<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><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>
|
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
<a title="Back to the top" id="toplink" href="#">
|
<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>
|
<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>
|
||||||
|
@ -79,7 +79,7 @@
|
|||||||
<h4>Legend</h4>
|
<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><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>
|
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
<a title="Back to the top" id="toplink" href="#">
|
<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>
|
<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>
|
<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><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>
|
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
<a title="Back to the top" id="toplink" href="#">
|
<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>
|
<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>
|
||||||
|
@ -58,6 +58,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
<tr><td><a href="FilesystemJsonStorage.php.html#26">Taproot\IndieAuth\Storage\FilesystemJsonStorage</a></td><td class="text-right">84%</td></tr>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -74,6 +75,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
<tr><td><a href="FilesystemJsonStorage.php.html#26">Taproot\IndieAuth\Storage\FilesystemJsonStorage</a></td><td class="text-right">53</td></tr>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -111,9 +113,11 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
<tr><td><a href="FilesystemJsonStorage.php.html#161"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::getAccessToken">getAccessToken</abbr></a></td><td class="text-right">63%</td></tr>
|
||||||
|
<tr><td><a href="FilesystemJsonStorage.php.html#86"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::exchangeAuthCodeForAccessToken">exchangeAuthCodeForAccessToken</abbr></a></td><td class="text-right">77%</td></tr>
|
||||||
<tr><td><a href="FilesystemJsonStorage.php.html#40"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::__construct">__construct</abbr></a></td><td class="text-right">81%</td></tr>
|
<tr><td><a href="FilesystemJsonStorage.php.html#40"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::__construct">__construct</abbr></a></td><td class="text-right">81%</td></tr>
|
||||||
<tr><td><a href="FilesystemJsonStorage.php.html#68"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::createAuthCode">createAuthCode</abbr></a></td><td class="text-right">85%</td></tr>
|
<tr><td><a href="FilesystemJsonStorage.php.html#68"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::createAuthCode">createAuthCode</abbr></a></td><td class="text-right">87%</td></tr>
|
||||||
<tr><td><a href="FilesystemJsonStorage.php.html#228"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::delete">delete</abbr></a></td><td class="text-right">87%</td></tr>
|
<tr><td><a href="FilesystemJsonStorage.php.html#252"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::delete">delete</abbr></a></td><td class="text-right">87%</td></tr>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -130,9 +134,11 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
<tr><td><a href="FilesystemJsonStorage.php.html#86"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::exchangeAuthCodeForAccessToken">exchangeAuthCodeForAccessToken</abbr></a></td><td class="text-right">12</td></tr>
|
||||||
|
<tr><td><a href="FilesystemJsonStorage.php.html#161"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::getAccessToken">getAccessToken</abbr></a></td><td class="text-right">6</td></tr>
|
||||||
<tr><td><a href="FilesystemJsonStorage.php.html#40"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::__construct">__construct</abbr></a></td><td class="text-right">3</td></tr>
|
<tr><td><a href="FilesystemJsonStorage.php.html#40"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::__construct">__construct</abbr></a></td><td class="text-right">3</td></tr>
|
||||||
<tr><td><a href="FilesystemJsonStorage.php.html#68"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::createAuthCode">createAuthCode</abbr></a></td><td class="text-right">3</td></tr>
|
<tr><td><a href="FilesystemJsonStorage.php.html#68"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::createAuthCode">createAuthCode</abbr></a></td><td class="text-right">3</td></tr>
|
||||||
<tr><td><a href="FilesystemJsonStorage.php.html#228"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::delete">delete</abbr></a></td><td class="text-right">3</td></tr>
|
<tr><td><a href="FilesystemJsonStorage.php.html#252"><abbr title="Taproot\IndieAuth\Storage\FilesystemJsonStorage::delete">delete</abbr></a></td><td class="text-right">3</td></tr>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -142,7 +148,7 @@
|
|||||||
<footer>
|
<footer>
|
||||||
<hr/>
|
<hr/>
|
||||||
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
@ -161,7 +167,7 @@ $(document).ready(function() {
|
|||||||
.yAxis.tickFormat(d3.format('d'));
|
.yAxis.tickFormat(d3.format('d'));
|
||||||
|
|
||||||
d3.select('#classCoverageDistribution svg')
|
d3.select('#classCoverageDistribution svg')
|
||||||
.datum(getCoverageDistributionData([0,0,0,0,0,0,0,0,0,0,1,0], "Class Coverage"))
|
.datum(getCoverageDistributionData([0,0,0,0,0,0,0,0,0,1,0,0], "Class Coverage"))
|
||||||
.transition().duration(500).call(chart);
|
.transition().duration(500).call(chart);
|
||||||
|
|
||||||
nv.utils.windowResize(chart.update);
|
nv.utils.windowResize(chart.update);
|
||||||
@ -179,7 +185,7 @@ $(document).ready(function() {
|
|||||||
.yAxis.tickFormat(d3.format('d'));
|
.yAxis.tickFormat(d3.format('d'));
|
||||||
|
|
||||||
d3.select('#methodCoverageDistribution svg')
|
d3.select('#methodCoverageDistribution svg')
|
||||||
.datum(getCoverageDistributionData([0,0,0,0,0,0,0,0,0,3,3,7], "Method Coverage"))
|
.datum(getCoverageDistributionData([0,0,0,0,0,0,0,1,1,3,2,6], "Method Coverage"))
|
||||||
.transition().duration(500).call(chart);
|
.transition().duration(500).call(chart);
|
||||||
|
|
||||||
nv.utils.windowResize(chart.update);
|
nv.utils.windowResize(chart.update);
|
||||||
@ -229,7 +235,7 @@ $(document).ready(function() {
|
|||||||
chart.yAxis.axisLabel('Cyclomatic Complexity');
|
chart.yAxis.axisLabel('Cyclomatic Complexity');
|
||||||
|
|
||||||
d3.select('#classComplexity svg')
|
d3.select('#classComplexity svg')
|
||||||
.datum(getComplexityData([[92.3076923076923,46,"<a href=\"FilesystemJsonStorage.php.html#26\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage<\/a>"]], 'Class Complexity'))
|
.datum(getComplexityData([[84.87394957983193,46,"<a href=\"FilesystemJsonStorage.php.html#26\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage<\/a>"]], 'Class Complexity'))
|
||||||
.transition()
|
.transition()
|
||||||
.duration(500)
|
.duration(500)
|
||||||
.call(chart);
|
.call(chart);
|
||||||
@ -253,7 +259,7 @@ $(document).ready(function() {
|
|||||||
chart.yAxis.axisLabel('Method Complexity');
|
chart.yAxis.axisLabel('Method Complexity');
|
||||||
|
|
||||||
d3.select('#methodComplexity svg')
|
d3.select('#methodComplexity svg')
|
||||||
.datum(getComplexityData([[81.81818181818183,3,"<a href=\"FilesystemJsonStorage.php.html#40\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::__construct<\/a>"],[100,1,"<a href=\"FilesystemJsonStorage.php.html#62\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::setLogger<\/a>"],[85.71428571428571,3,"<a href=\"FilesystemJsonStorage.php.html#68\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::createAuthCode<\/a>"],[92.85714285714286,11,"<a href=\"FilesystemJsonStorage.php.html#82\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::exchangeAuthCodeForAccessToken<\/a>"],[100,5,"<a href=\"FilesystemJsonStorage.php.html#147\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::getAccessToken<\/a>"],[100,1,"<a href=\"FilesystemJsonStorage.php.html#163\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::revokeAccessToken<\/a>"],[100,9,"<a href=\"FilesystemJsonStorage.php.html#169\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::deleteExpiredTokens<\/a>"],[91.66666666666666,4,"<a href=\"FilesystemJsonStorage.php.html#197\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::get<\/a>"],[100,1,"<a href=\"FilesystemJsonStorage.php.html#219\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::put<\/a>"],[87.5,3,"<a href=\"FilesystemJsonStorage.php.html#228\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::delete<\/a>"],[100,1,"<a href=\"FilesystemJsonStorage.php.html#242\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::getPath<\/a>"],[90.9090909090909,3,"<a href=\"FilesystemJsonStorage.php.html#247\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::withLock<\/a>"],[100,1,"<a href=\"FilesystemJsonStorage.php.html#271\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::hash<\/a>"]], 'Method Complexity'))
|
.datum(getComplexityData([[81.81818181818183,3,"<a href=\"FilesystemJsonStorage.php.html#40\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::__construct<\/a>"],[100,1,"<a href=\"FilesystemJsonStorage.php.html#62\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::setLogger<\/a>"],[87.5,3,"<a href=\"FilesystemJsonStorage.php.html#68\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::createAuthCode<\/a>"],[77.14285714285715,11,"<a href=\"FilesystemJsonStorage.php.html#86\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::exchangeAuthCodeForAccessToken<\/a>"],[63.63636363636363,5,"<a href=\"FilesystemJsonStorage.php.html#161\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::getAccessToken<\/a>"],[100,1,"<a href=\"FilesystemJsonStorage.php.html#186\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::revokeAccessToken<\/a>"],[100,9,"<a href=\"FilesystemJsonStorage.php.html#193\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::deleteExpiredTokens<\/a>"],[91.66666666666666,4,"<a href=\"FilesystemJsonStorage.php.html#221\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::get<\/a>"],[100,1,"<a href=\"FilesystemJsonStorage.php.html#243\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::put<\/a>"],[87.5,3,"<a href=\"FilesystemJsonStorage.php.html#252\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::delete<\/a>"],[100,1,"<a href=\"FilesystemJsonStorage.php.html#266\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::getPath<\/a>"],[90.9090909090909,3,"<a href=\"FilesystemJsonStorage.php.html#271\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::withLock<\/a>"],[100,1,"<a href=\"FilesystemJsonStorage.php.html#295\">Taproot\\IndieAuth\\Storage\\FilesystemJsonStorage::hash<\/a>"]], 'Method Complexity'))
|
||||||
.transition()
|
.transition()
|
||||||
.duration(500)
|
.duration(500)
|
||||||
.call(chart);
|
.call(chart);
|
||||||
|
@ -43,23 +43,23 @@
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="success">Total</td>
|
<td class="warning">Total</td>
|
||||||
<td class="success big"> <div class="progress">
|
|
||||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="92.31" aria-valuemin="0" aria-valuemax="100" style="width: 92.31%">
|
|
||||||
<span class="sr-only">92.31% covered (success)</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td class="success small"><div align="right">92.31%</div></td>
|
|
||||||
<td class="success small"><div align="right">96 / 104</div></td>
|
|
||||||
<td class="warning big"> <div class="progress">
|
<td class="warning big"> <div class="progress">
|
||||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="53.85" aria-valuemin="0" aria-valuemax="100" style="width: 53.85%">
|
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="84.87" aria-valuemin="0" aria-valuemax="100" style="width: 84.87%">
|
||||||
<span class="sr-only">53.85% covered (warning)</span>
|
<span class="sr-only">84.87% covered (warning)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="warning small"><div align="right">53.85%</div></td>
|
<td class="warning small"><div align="right">84.87%</div></td>
|
||||||
<td class="warning small"><div align="right">7 / 13</div></td>
|
<td class="warning small"><div align="right">101 / 119</div></td>
|
||||||
|
<td class="danger big"> <div class="progress">
|
||||||
|
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="46.15" aria-valuemin="0" aria-valuemax="100" style="width: 46.15%">
|
||||||
|
<span class="sr-only">46.15% covered (danger)</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td class="danger small"><div align="right">46.15%</div></td>
|
||||||
|
<td class="danger small"><div align="right">6 / 13</div></td>
|
||||||
<td class="danger big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">0.00% covered (danger)</span>
|
||||||
@ -71,23 +71,23 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="success"><img src="../phpunit_icons/file-code.svg" class="octicon" /><a href="FilesystemJsonStorage.php.html">FilesystemJsonStorage.php</a></td>
|
<td class="warning"><img src="../phpunit_icons/file-code.svg" class="octicon" /><a href="FilesystemJsonStorage.php.html">FilesystemJsonStorage.php</a></td>
|
||||||
<td class="success big"> <div class="progress">
|
|
||||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="92.31" aria-valuemin="0" aria-valuemax="100" style="width: 92.31%">
|
|
||||||
<span class="sr-only">92.31% covered (success)</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td class="success small"><div align="right">92.31%</div></td>
|
|
||||||
<td class="success small"><div align="right">96 / 104</div></td>
|
|
||||||
<td class="warning big"> <div class="progress">
|
<td class="warning big"> <div class="progress">
|
||||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="53.85" aria-valuemin="0" aria-valuemax="100" style="width: 53.85%">
|
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="84.87" aria-valuemin="0" aria-valuemax="100" style="width: 84.87%">
|
||||||
<span class="sr-only">53.85% covered (warning)</span>
|
<span class="sr-only">84.87% covered (warning)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="warning small"><div align="right">53.85%</div></td>
|
<td class="warning small"><div align="right">84.87%</div></td>
|
||||||
<td class="warning small"><div align="right">7 / 13</div></td>
|
<td class="warning small"><div align="right">101 / 119</div></td>
|
||||||
|
<td class="danger big"> <div class="progress">
|
||||||
|
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="46.15" aria-valuemin="0" aria-valuemax="100" style="width: 46.15%">
|
||||||
|
<span class="sr-only">46.15% covered (danger)</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td class="danger small"><div align="right">46.15%</div></td>
|
||||||
|
<td class="danger small"><div align="right">6 / 13</div></td>
|
||||||
<td class="danger big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">0.00% covered (danger)</span>
|
||||||
@ -137,7 +137,7 @@
|
|||||||
<span class="success"><strong>High</strong>: 90% to 100%</span>
|
<span class="success"><strong>High</strong>: 90% to 100%</span>
|
||||||
</p>
|
</p>
|
||||||
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
File diff suppressed because one or more lines are too long
@ -687,7 +687,7 @@
|
|||||||
<h4>Legend</h4>
|
<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><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>
|
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
<a title="Back to the top" id="toplink" href="#">
|
<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>
|
<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>
|
||||||
|
@ -44,21 +44,21 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="success">Total</td>
|
<td class="success">Total</td>
|
||||||
<td class="success big"> <div class="progress">
|
<td class="success big"> <div class="progress">
|
||||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="95.59" aria-valuemin="0" aria-valuemax="100" style="width: 95.59%">
|
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="94.00" aria-valuemin="0" aria-valuemax="100" style="width: 94.00%">
|
||||||
<span class="sr-only">95.59% covered (success)</span>
|
<span class="sr-only">94.00% covered (success)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="success small"><div align="right">95.59%</div></td>
|
<td class="success small"><div align="right">94.00%</div></td>
|
||||||
<td class="success small"><div align="right">542 / 567</div></td>
|
<td class="success small"><div align="right">548 / 583</div></td>
|
||||||
<td class="warning big"> <div class="progress">
|
<td class="warning big"> <div class="progress">
|
||||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="75.44" aria-valuemin="0" aria-valuemax="100" style="width: 75.44%">
|
<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">75.44% covered (warning)</span>
|
<span class="sr-only">73.68% covered (warning)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="warning small"><div align="right">75.44%</div></td>
|
<td class="warning small"><div align="right">73.68%</div></td>
|
||||||
<td class="warning small"><div align="right">43 / 57</div></td>
|
<td class="warning small"><div align="right">42 / 57</div></td>
|
||||||
<td class="danger big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">44.44% covered (danger)</span>
|
||||||
@ -126,23 +126,23 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="success"><img src="phpunit_icons/file-directory.svg" class="octicon" /><a href="Storage/index.html">Storage</a></td>
|
<td class="warning"><img src="phpunit_icons/file-directory.svg" class="octicon" /><a href="Storage/index.html">Storage</a></td>
|
||||||
<td class="success big"> <div class="progress">
|
|
||||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="92.31" aria-valuemin="0" aria-valuemax="100" style="width: 92.31%">
|
|
||||||
<span class="sr-only">92.31% covered (success)</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td class="success small"><div align="right">92.31%</div></td>
|
|
||||||
<td class="success small"><div align="right">96 / 104</div></td>
|
|
||||||
<td class="warning big"> <div class="progress">
|
<td class="warning big"> <div class="progress">
|
||||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="53.85" aria-valuemin="0" aria-valuemax="100" style="width: 53.85%">
|
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="84.87" aria-valuemin="0" aria-valuemax="100" style="width: 84.87%">
|
||||||
<span class="sr-only">53.85% covered (warning)</span>
|
<span class="sr-only">84.87% covered (warning)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="warning small"><div align="right">53.85%</div></td>
|
<td class="warning small"><div align="right">84.87%</div></td>
|
||||||
<td class="warning small"><div align="right">7 / 13</div></td>
|
<td class="warning small"><div align="right">101 / 119</div></td>
|
||||||
|
<td class="danger big"> <div class="progress">
|
||||||
|
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="46.15" aria-valuemin="0" aria-valuemax="100" style="width: 46.15%">
|
||||||
|
<span class="sr-only">46.15% covered (danger)</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td class="danger small"><div align="right">46.15%</div></td>
|
||||||
|
<td class="danger small"><div align="right">6 / 13</div></td>
|
||||||
<td class="danger big"> <div class="progress">
|
<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%">
|
<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>
|
<span class="sr-only">0.00% covered (danger)</span>
|
||||||
@ -184,13 +184,13 @@
|
|||||||
<tr>
|
<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"><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">
|
<td class="success big"> <div class="progress">
|
||||||
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="96.69" aria-valuemin="0" aria-valuemax="100" style="width: 96.69%">
|
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="96.70" aria-valuemin="0" aria-valuemax="100" style="width: 96.70%">
|
||||||
<span class="sr-only">96.69% covered (success)</span>
|
<span class="sr-only">96.70% covered (success)</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="success small"><div align="right">96.69%</div></td>
|
<td class="success small"><div align="right">96.70%</div></td>
|
||||||
<td class="success small"><div align="right">263 / 272</div></td>
|
<td class="success small"><div align="right">264 / 273</div></td>
|
||||||
<td class="warning big"> <div class="progress">
|
<td class="warning big"> <div class="progress">
|
||||||
<div class="progress-bar bg-warning" role="progressbar" aria-valuenow="80.00" aria-valuemin="0" aria-valuemax="100" style="width: 80.00%">
|
<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>
|
<span class="sr-only">80.00% covered (warning)</span>
|
||||||
@ -245,7 +245,7 @@
|
|||||||
<span class="success"><strong>High</strong>: 90% to 100%</span>
|
<span class="success"><strong>High</strong>: 90% to 100%</span>
|
||||||
</p>
|
</p>
|
||||||
<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 Fri Jun 18 14:09:49 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 Fri Jun 18 14:43:22 UTC 2021.</small>
|
||||||
</p>
|
</p>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
@ -87,7 +87,7 @@ class DefaultAuthorizationForm implements AuthorizationFormInterface, LoggerAwar
|
|||||||
|
|
||||||
public function transformAuthorizationCode(ServerRequestInterface $request, array $code): array {
|
public function transformAuthorizationCode(ServerRequestInterface $request, array $code): array {
|
||||||
// Add any granted scopes from the form to the code.
|
// Add any granted scopes from the form to the code.
|
||||||
$grantedScopes = $request->getParsedBody()['taproot_indieauth_server_scope[]'] ?? [];
|
$grantedScopes = $request->getParsedBody()['taproot_indieauth_server_scope'] ?? [];
|
||||||
|
|
||||||
// This default implementation naievely accepts any scopes it receives from the form.
|
// This default implementation naievely accepts any scopes it receives from the form.
|
||||||
// You may wish to perform some sort of validation.
|
// You may wish to perform some sort of validation.
|
||||||
|
@ -554,7 +554,7 @@ EOT
|
|||||||
'scope' => 'create',
|
'scope' => 'create',
|
||||||
'redirect_uri' => 'https://app.example.com/indieauth?client_redirect_query_string_param=value'
|
'redirect_uri' => 'https://app.example.com/indieauth?client_redirect_query_string_param=value'
|
||||||
], [
|
], [
|
||||||
'taproot_indieauth_server_scope[]' => $grantedScopes
|
'taproot_indieauth_server_scope' => $grantedScopes
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$res = $s->handleAuthorizationEndpointRequest($req);
|
$res = $s->handleAuthorizationEndpointRequest($req);
|
||||||
@ -924,7 +924,7 @@ EOT
|
|||||||
// Build a valid, hashed request without either PKCE parameter. This takes some faffing around
|
// Build a valid, hashed request without either PKCE parameter. This takes some faffing around
|
||||||
// due to the supposedly elegant immutable Request objects.
|
// due to the supposedly elegant immutable Request objects.
|
||||||
$req = $this->getApprovalRequest(true, true, null, [
|
$req = $this->getApprovalRequest(true, true, null, [
|
||||||
'taproot_indieauth_server_scope[]' => ['profile']
|
'taproot_indieauth_server_scope' => ['profile']
|
||||||
]);
|
]);
|
||||||
$params = $req->getQueryParams();
|
$params = $req->getQueryParams();
|
||||||
unset($params['code_challenge']);
|
unset($params['code_challenge']);
|
||||||
|
Reference in New Issue
Block a user