<title>Code Coverage for /Users/barnabywalters/Documents/Programming/taproot/indieauth/src/Callback/SingleUserPasswordAuthenticationCallback.php</title>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="38 tests cover line 81"data-content="<ul><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidConfigRaisesException</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testUnauthenticatedRequestReturnsAuthenticationResponse</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkHeaderRedirectUri</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkElementRedirectUri</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorOnNonIndieauthRequest</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><liclass="c
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 82"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testThrowsExceptionIfSecretIsTooShort</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="82"href="#82">82</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="keyword">throw</span><spanclass="default"> </span><spanclass="keyword">new</span><spanclass="default"> </span><spanclass="default">BadMethodCallException</span><spanclass="keyword">(</span><spanclass="default">"\$secret must be a string with a minimum length of 64 characters."</span><spanclass="keyword">)</span><spanclass="keyword">;</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="37 tests cover line 88"data-content="<ul><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidConfigRaisesException</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testUnauthenticatedRequestReturnsAuthenticationResponse</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkHeaderRedirectUri</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkElementRedirectUri</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorOnNonIndieauthRequest</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><liclass="c
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 89"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testThrowsExceptionIfUserDataHasNoMeKey</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="89"href="#89">89</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="keyword">throw</span><spanclass="default"> </span><spanclass="keyword">new</span><spanclass="default"> </span><spanclass="default">BadMethodCallException</span><spanclass="keyword">(</span><spanclass="default">'The $user array MUST contain a “me” key, the value which must be the user’s canonical URL as a string.'</span><spanclass="keyword">)</span><spanclass="keyword">;</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="36 tests cover line 94"data-content="<ul><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidConfigRaisesException</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationEndpointReturnsErrorOnMissingParameter</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testRequestsMissingBothPkceParametersReturnsError</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthorizationRequestWithInvalidClientIdOrRedirectUriShowsErrorToUser</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidStateCodeChallengeOrScopeReturnErrorRedirects</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testHandlesValidAndInvalidMeUrlsCorrectly</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testUnauthenticatedRequestReturnsAuthenticationResponse</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsServerErrorIfAuthenticationResultHasNoMeKey</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnErrorIfFetchingClientIdThrowsException</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdWithNoParsedRedirectUris</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfRedirectUriDoesntMatchClientIdOrParsedRedirectUris</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdSufficientlyMatchesRedirectUri</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkHeaderRedirectUri</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsAuthorizationFormIfClientIdExactlyMatchesParsedLinkElementRedirectUri</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testFindsFirstHAppExactlyMatchingClientId</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasNoHash</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsErrorIfApprovalRequestHasInvalidHash</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testValidApprovalRequestIsHandledCorrectly</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testReturnsInternalServerErrorIfAuthCodeCannotBeStored</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfCodeParameterIsMissing</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorsIfParametersAreMissing</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testExchangeFlowsReturnErrorOnInvalidParameters</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeFailsForTokensWithInvalidScope</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testAuthEndpointTokenExchangeReturnsCorrectResponseForValidRequest</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorOnNonIndieauthRequest</li><liclass="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testTokenEndpointReturnsErrorIfAccessCodeGrantsNoScopes</li><liclass="c
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 95"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testThrowsExceptionIfHashedPasswordIsInvalid</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="95"href="#95">95</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="keyword">throw</span><spanclass="default"> </span><spanclass="keyword">new</span><spanclass="default"> </span><spanclass="default">BadMethodCallException</span><spanclass="keyword">(</span><spanclass="default">'The provided $hashedPassword was not a valid hash created by the password_hash() function.'</span><spanclass="keyword">)</span><spanclass="keyword">;</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 110"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testReturnsUserDataOnResponseWithValidHashCookie</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="110"href="#110">110</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="keyword">return</span><spanclass="default"> </span><spanclass="default">$this</span><spanclass="default">-></span><spanclass="default">user</span><spanclass="keyword">;</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 116"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testReturnsCookieRedirectOnAuthenticatedRequest</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="116"href="#116">116</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="default">$response</span><spanclass="default"> </span><spanclass="keyword">=</span><spanclass="default"> </span><spanclass="keyword">new</span><spanclass="default"> </span><spanclass="default">Response</span><spanclass="keyword">(</span><spanclass="default">302</span><spanclass="keyword">,</span><spanclass="default"> </span><spanclass="keyword">[</span><spanclass="default">'Location'</span><spanclass="default"> </span><spanclass="default">=></span><spanclass="default"> </span><spanclass="default">$formAction</span><spanclass="keyword">]</span><spanclass="keyword">)</span><spanclass="keyword">;</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 119"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testReturnsCookieRedirectOnAuthenticatedRequest</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="119"href="#119">119</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="default">$response</span><spanclass="default"> </span><spanclass="keyword">=</span><spanclass="default"> </span><spanclass="default">FigCookies\FigResponseCookies</span><spanclass="default">::</span><spanclass="default">set</span><spanclass="keyword">(</span><spanclass="default">$response</span><spanclass="keyword">,</span><spanclass="default"> </span><spanclass="default">FigCookies\SetCookie</span><spanclass="default">::</span><spanclass="default">create</span><spanclass="keyword">(</span><spanclass="default">self</span><spanclass="default">::</span><spanclass="default">LOGIN_HASH_COOKIE</span><spanclass="keyword">)</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 120"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testReturnsCookieRedirectOnAuthenticatedRequest</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="120"href="#120">120</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="default">-></span><spanclass="default">withValue</span><spanclass="keyword">(</span><spanclass="default">hash_hmac</span><spanclass="keyword">(</span><spanclass="default">'SHA256'</span><spanclass="keyword">,</span><spanclass="default"> </span><spanclass="default">json_encode</span><spanclass="keyword">(</span><spanclass="default">$this</span><spanclass="default">-></span><spanclass="default">user</span><spanclass="keyword">)</span><spanclass="keyword">,</span><spanclass="default"> </span><spanclass="default">$this</span><spanclass="default">-></span><spanclass="default">secret</span><spanclass="keyword">)</span><spanclass="keyword">)</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 121"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testReturnsCookieRedirectOnAuthenticatedRequest</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="121"href="#121">121</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="default">-></span><spanclass="default">withMaxAge</span><spanclass="keyword">(</span><spanclass="default">$this</span><spanclass="default">-></span><spanclass="default">ttl</span><spanclass="keyword">)</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 122"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testReturnsCookieRedirectOnAuthenticatedRequest</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="122"href="#122">122</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="default">-></span><spanclass="default">withSecure</span><spanclass="keyword">(</span><spanclass="default">$request</span><spanclass="default">-></span><spanclass="default">getUri</span><spanclass="keyword">(</span><spanclass="keyword">)</span><spanclass="default">-></span><spanclass="default">getScheme</span><spanclass="keyword">(</span><spanclass="keyword">)</span><spanclass="default"> </span><spanclass="default">==</span><spanclass="default"> </span><spanclass="default">'https'</span><spanclass="keyword">)</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 123"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testReturnsCookieRedirectOnAuthenticatedRequest</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="123"href="#123">123</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="default">-></span><spanclass="default">withDomain</span><spanclass="keyword">(</span><spanclass="default">$request</span><spanclass="default">-></span><spanclass="default">getUri</span><spanclass="keyword">(</span><spanclass="keyword">)</span><spanclass="default">-></span><spanclass="default">getHost</span><spanclass="keyword">(</span><spanclass="keyword">)</span><spanclass="keyword">)</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 126"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testReturnsCookieRedirectOnAuthenticatedRequest</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="126"href="#126">126</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="keyword">return</span><spanclass="default"> </span><spanclass="default">$response</span><spanclass="keyword">;</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 130"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testShowsAuthenticationFormOnUnauthenticatedRequest</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="130"href="#130">130</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="keyword">return</span><spanclass="default"> </span><spanclass="keyword">new</span><spanclass="default"> </span><spanclass="default">Response</span><spanclass="keyword">(</span><spanclass="default">200</span><spanclass="keyword">,</span><spanclass="default"> </span><spanclass="keyword">[</span><spanclass="default">'content-type'</span><spanclass="default"> </span><spanclass="default">=></span><spanclass="default"> </span><spanclass="default">'text/html'</span><spanclass="keyword">]</span><spanclass="keyword">,</span><spanclass="default"> </span><spanclass="default">renderTemplate</span><spanclass="keyword">(</span><spanclass="default">$this</span><spanclass="default">-></span><spanclass="default">formTemplate</span><spanclass="keyword">,</span><spanclass="default"> </span><spanclass="keyword">[</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 131"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testShowsAuthenticationFormOnUnauthenticatedRequest</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="131"href="#131">131</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="default">'formAction'</span><spanclass="default"> </span><spanclass="default">=></span><spanclass="default"> </span><spanclass="default">$formAction</span><spanclass="keyword">,</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 132"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testShowsAuthenticationFormOnUnauthenticatedRequest</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="132"href="#132">132</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="default">'request'</span><spanclass="default"> </span><spanclass="default">=></span><spanclass="default"> </span><spanclass="default">$request</span><spanclass="keyword">,</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 133"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\SingleUserPasswordAuthenticationCallbackTest::testShowsAuthenticationFormOnUnauthenticatedRequest</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="133"href="#133">133</a></td><tdclass="col-11 codeLine"><spanclass="default"> </span><spanclass="default">'csrfFormElement'</span><spanclass="default"> </span><spanclass="default">=></span><spanclass="default"> </span><spanclass="default">'<input type="hidden" name="'</span><spanclass="default"> </span><spanclass="keyword">.</span><spanclass="default"> </span><spanclass="default">htmlentities</span><spanclass="keyword">(</span><spanclass="default">$this</span><spanclass="default">-></span><spanclass="default">csrfKey</span><spanclass="keyword">)</span><spanclass="default"> </span><spanclass="keyword">.</span><spanclass="default"> </span><spanclass="default">'" value="'</span><spanclass="default"> </span><spanclass="keyword">.</span><spanclass="default"> </span><spanclass="default">htmlentities</span><spanclass="keyword">(</span><spanclass="default">$request</span><spanclass="default">-></span><spanclass="default">getAttribute</span><spanclass="keyword">(</span><spanclass="default">$this</span><spanclass="default">-></span><spanclass="default">csrfKey</span><spanclass="keyword">)</span><spanclass="keyword">)</span><spanclass="default"> </span><spanclass="keyword">.</span><spanclass="default"> </span><spanclass="default">'" />'</span></td></tr>
<trclass="covered-by-large-tests popin d-flex"><tddata-title="1 test covers line 136"data-content="<ul><li class="covered-by-large-tests">Taproot\IndieAuth\Test\ServerTest::testInvalidConfigRaisesException</li></ul>"data-placement="top"data-html="true"class="col-1 text-right"><aid="136"href="#136">136</a></td><tdclass="col-11 codeLine"><spanclass="keyword">}</span></td></tr>
<small>Generated by <ahref="https://github.com/sebastianbergmann/php-code-coverage"target="_top">php-code-coverage 9.2.6</a> using <ahref="https://secure.php.net/"target="_top">PHP 8.0.7</a> with <ahref="https://xdebug.org/">Xdebug 3.0.4</a> and <ahref="https://phpunit.de/">PHPUnit 9.5.5</a> at Thu Jun 24 11:32:05 UTC 2021.</small>