Classes

Bubble size = executable lines. Hover for details, click to navigate.

0% 20% 40% 60% 80% 100% 0 50 100 150 Line Coverage (%) Cyclomatic Complexity phpMyFAQ\Auth\AuthWebAuthn — Coverage: 68.9% | Lines: 228 | Complexity: 82 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator — Coverage: 87.2% | Lines: 172 | Complexity: 96 phpMyFAQ\Auth\AuthKeycloak — Coverage: 92.2% | Lines: 154 | Complexity: 65 phpMyFAQ\Auth\AuthLdap — Coverage: 91.3% | Lines: 138 | Complexity: 50 phpMyFAQ\Auth\OAuth2\AuthorizationServer — Coverage: 70.3% | Lines: 128 | Complexity: 33 phpMyFAQ\Auth\AuthDatabase — Coverage: 89.3% | Lines: 84 | Complexity: 26 phpMyFAQ\Auth\EntraId\OAuth — Coverage: 95.1% | Lines: 81 | Complexity: 27 phpMyFAQ\Auth\ApiKeyAuthenticator — Coverage: 90.2% | Lines: 61 | Complexity: 20 phpMyFAQ\Auth\Oidc\OidcClient — Coverage: 100.0% | Lines: 59 | Complexity: 17 phpMyFAQ\Auth\WebAuthn\PublicKeyConverter — Coverage: 56.1% | Lines: 57 | Complexity: 38 phpMyFAQ\Auth\AuthEntraId — Coverage: 80.0% | Lines: 55 | Complexity: 14 phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository — Coverage: 100.0% | Lines: 47 | Complexity: 15 phpMyFAQ\Auth\OAuth2\ResourceServer — Coverage: 76.7% | Lines: 43 | Complexity: 20 phpMyFAQ\Auth\EntraId\JwksProvider — Coverage: 95.0% | Lines: 40 | Complexity: 18 phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository — Coverage: 100.0% | Lines: 38 | Complexity: 10 phpMyFAQ\Auth\OAuth2\Repository\ClientRepository — Coverage: 97.4% | Lines: 38 | Complexity: 13 phpMyFAQ\Auth\AuthSso — Coverage: 94.4% | Lines: 36 | Complexity: 18 phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory — Coverage: 93.9% | Lines: 33 | Complexity: 16 phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository — Coverage: 100.0% | Lines: 28 | Complexity: 7 phpMyFAQ\Auth\Oidc\OidcDiscoveryDocument — Coverage: 100.0% | Lines: 26 | Complexity: 9 phpMyFAQ\Auth\Oidc\OidcPkceGenerator — Coverage: 100.0% | Lines: 23 | Complexity: 8 phpMyFAQ\Auth\OAuth2\Repository\UserRepository — Coverage: 18.2% | Lines: 22 | Complexity: 8 phpMyFAQ\Auth\AuthChain — Coverage: 100.0% | Lines: 21 | Complexity: 9 phpMyFAQ\Auth\EntraId\EntraIdSession — Coverage: 95.2% | Lines: 21 | Complexity: 11 phpMyFAQ\Auth\Oidc\OidcDiscoveryService — Coverage: 100.0% | Lines: 21 | Complexity: 6 phpMyFAQ\Auth\AuthHttp — Coverage: 100.0% | Lines: 18 | Complexity: 10 phpMyFAQ\Auth\OAuth2\Repository\ScopeRepository — Coverage: 94.4% | Lines: 18 | Complexity: 5 phpMyFAQ\Auth\Oidc\OidcSession — Coverage: 100.0% | Lines: 15 | Complexity: 7 phpMyFAQ\Auth\PasswordHasher — Coverage: 100.0% | Lines: 11 | Complexity: 8 phpMyFAQ\Auth\WebAuthn\WebAuthnUser — Coverage: 100.0% | Lines: 9 | Complexity: 6 phpMyFAQ\Auth\OAuth2\Entity\ClientEntity — Coverage: 100.0% | Lines: 6 | Complexity: 5 phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Auth\Oidc\OidcClientConfig — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcProviderConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1

 

Sorted by descending CRAP (Change Risk Anti-Patterns) index.

Class CRAP Coverage
phpMyFAQ\Auth\AuthWebAuthn285.0568.9%
phpMyFAQ\Auth\WebAuthn\PublicKeyConverter159.8356.1%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator115.2987.2%
phpMyFAQ\Auth\AuthKeycloak67.0092.2%
phpMyFAQ\Auth\OAuth2\AuthorizationServer61.4970.3%
phpMyFAQ\Auth\AuthLdap51.6491.3%
phpMyFAQ\Auth\OAuth2\Repository\UserRepository43.0518.2%
phpMyFAQ\Auth\EntraId\OAuth2795.1%
phpMyFAQ\Auth\AuthDatabase26.8389.3%
phpMyFAQ\Auth\OAuth2\ResourceServer25.0376.7%
phpMyFAQ\Auth\ApiKeyAuthenticator20.3890.2%
phpMyFAQ\Auth\AuthSso18.0694.4%
phpMyFAQ\Auth\EntraId\JwksProvider1895.0%
phpMyFAQ\Auth\Oidc\OidcClient17100.0%
phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory16.0693.9%
phpMyFAQ\Auth\AuthEntraId15.5780.0%
phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository15100.0%
phpMyFAQ\Auth\OAuth2\Repository\ClientRepository1397.4%
phpMyFAQ\Auth\EntraId\EntraIdSession1195.2%
phpMyFAQ\Auth\AuthHttp10100.0%
phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository10100.0%
phpMyFAQ\Auth\AuthChain9100.0%
phpMyFAQ\Auth\Oidc\OidcDiscoveryDocument9100.0%
phpMyFAQ\Auth\Oidc\OidcPkceGenerator8100.0%
phpMyFAQ\Auth\PasswordHasher8100.0%
phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository7100.0%
phpMyFAQ\Auth\Oidc\OidcSession7100.0%
phpMyFAQ\Auth\Oidc\OidcDiscoveryService6100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser6100.0%
phpMyFAQ\Auth\OAuth2\Entity\ClientEntity5100.0%
phpMyFAQ\Auth\OAuth2\Repository\ScopeRepository5.0094.4%
phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository3100.0%
phpMyFAQ\Auth\Oidc\OidcClientConfig2100.0%
phpMyFAQ\Auth\Oidc\OidcProviderConfig1100.0%
phpMyFAQ\Auth\AuthException0100.0%
phpMyFAQ\Auth\OAuth2\Entity\AccessTokenEntity0100.0%
phpMyFAQ\Auth\OAuth2\Entity\AuthCodeEntity0100.0%
phpMyFAQ\Auth\OAuth2\Entity\RefreshTokenEntity0100.0%
phpMyFAQ\Auth\OAuth2\Entity\ScopeEntity0100.0%
phpMyFAQ\Auth\OAuth2\Entity\UserEntity0100.0%

Methods

Bubble size = executable lines. Hover for details, click to navigate.

0% 20% 40% 60% 80% 100% 0 10 20 30 40 Line Coverage (%) Cyclomatic Complexity phpMyFAQ\Auth\AuthWebAuthn::register — Coverage: 16.2% | Lines: 68 | Complexity: 31 phpMyFAQ\Auth\AuthWebAuthn::authenticate — Coverage: 80.6% | Lines: 62 | Complexity: 27 phpMyFAQ\Auth\WebAuthn\PublicKeyConverter::fromCoseToPkcs — Coverage: 49.0% | Lines: 49 | Complexity: 35 phpMyFAQ\Auth\AuthWebAuthn::prepareChallengeForRegistration — Coverage: 100.0% | Lines: 48 | Complexity: 2 phpMyFAQ\Auth\AuthLdap::checkCredentials — Coverage: 84.4% | Lines: 45 | Complexity: 19 phpMyFAQ\Auth\AuthKeycloak::create — Coverage: 100.0% | Lines: 40 | Complexity: 6 phpMyFAQ\Auth\OAuth2\AuthorizationServer::completeAuthorization — Coverage: 40.0% | Lines: 40 | Complexity: 7 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::validateClaims — Coverage: 97.5% | Lines: 40 | Complexity: 31 phpMyFAQ\Auth\ApiKeyAuthenticator::authenticate — Coverage: 94.7% | Lines: 38 | Complexity: 6 phpMyFAQ\Auth\AuthKeycloak::assignUserToGroups — Coverage: 86.1% | Lines: 36 | Complexity: 12 phpMyFAQ\Auth\OAuth2\AuthorizationServer::issueToken — Coverage: 61.1% | Lines: 36 | Complexity: 8 phpMyFAQ\Auth\AuthLdap::create — Coverage: 100.0% | Lines: 32 | Complexity: 8 phpMyFAQ\Auth\AuthWebAuthn::prepareForLogin — Coverage: 96.9% | Lines: 32 | Complexity: 8 phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::create — Coverage: 96.4% | Lines: 28 | Complexity: 8 phpMyFAQ\Auth\EntraId\OAuth::getOAuthToken — Coverage: 92.6% | Lines: 27 | Complexity: 5 phpMyFAQ\Auth\EntraId\OAuth::setToken — Coverage: 100.0% | Lines: 27 | Complexity: 9 phpMyFAQ\Auth\OAuth2\AuthorizationServer::buildLeagueAuthorizationServer — Coverage: 100.0% | Lines: 25 | Complexity: 3 phpMyFAQ\Auth\Oidc\OidcDiscoveryDocument::fromArray — Coverage: 100.0% | Lines: 25 | Complexity: 8 phpMyFAQ\Auth\AuthDatabase::checkCredentials — Coverage: 91.7% | Lines: 24 | Complexity: 10 phpMyFAQ\Auth\OAuth2\Repository\ClientRepository::getClientEntity — Coverage: 95.8% | Lines: 24 | Complexity: 5 phpMyFAQ\Auth\OAuth2\ResourceServer::authenticate — Coverage: 58.3% | Lines: 24 | Complexity: 9 phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::persistNewAccessToken — Coverage: 100.0% | Lines: 22 | Complexity: 6 phpMyFAQ\Auth\OAuth2\Repository\UserRepository::getUserEntityByUserCredentials — Coverage: 18.2% | Lines: 22 | Complexity: 8 phpMyFAQ\Auth\EntraId\JwksProvider::loadJwks — Coverage: 100.0% | Lines: 21 | Complexity: 11 phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::persistNewAuthCode — Coverage: 100.0% | Lines: 21 | Complexity: 5 phpMyFAQ\Auth\AuthEntraId::authorize — Coverage: 100.0% | Lines: 20 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcDiscoveryService::discover — Coverage: 100.0% | Lines: 20 | Complexity: 5 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::createPemFromJwk — Coverage: 94.4% | Lines: 18 | Complexity: 4 phpMyFAQ\Auth\AuthChain::authenticate — Coverage: 100.0% | Lines: 17 | Complexity: 5 phpMyFAQ\Auth\AuthLdap::assignUserToGroups — Coverage: 100.0% | Lines: 17 | Complexity: 6 phpMyFAQ\Auth\OAuth2\Repository\ScopeRepository::getScopeEntityByIdentifier — Coverage: 94.1% | Lines: 17 | Complexity: 4 phpMyFAQ\Auth\AuthDatabase::create — Coverage: 87.5% | Lines: 16 | Complexity: 4 phpMyFAQ\Auth\AuthKeycloak::extractRoleNames — Coverage: 87.5% | Lines: 16 | Complexity: 10 phpMyFAQ\Auth\Oidc\OidcClient::exchangeAuthorizationCode — Coverage: 100.0% | Lines: 16 | Complexity: 4 phpMyFAQ\Auth\AuthDatabase::update — Coverage: 86.7% | Lines: 15 | Complexity: 4 phpMyFAQ\Auth\Oidc\OidcClient::decodeJsonResponse — Coverage: 100.0% | Lines: 15 | Complexity: 5 phpMyFAQ\Auth\AuthDatabase::delete — Coverage: 85.7% | Lines: 14 | Complexity: 4 phpMyFAQ\Auth\OAuth2\Repository\ClientRepository::validateClient — Coverage: 100.0% | Lines: 14 | Complexity: 8 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::validateSignature — Coverage: 85.7% | Lines: 14 | Complexity: 6 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::findKey — Coverage: 57.1% | Lines: 14 | Complexity: 9 phpMyFAQ\Auth\AuthEntraId::createOAuthChallenge — Coverage: 100.0% | Lines: 13 | Complexity: 4 phpMyFAQ\Auth\OAuth2\AuthorizationServer::toPsr7Request — Coverage: 100.0% | Lines: 13 | Complexity: 3 phpMyFAQ\Auth\OAuth2\ResourceServer::toPsr7Request — Coverage: 100.0% | Lines: 13 | Complexity: 3 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::validate — Coverage: 100.0% | Lines: 13 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::fetchJwks — Coverage: 69.2% | Lines: 13 | Complexity: 5 phpMyFAQ\Auth\AuthEntraId::create — Coverage: 16.7% | Lines: 12 | Complexity: 2 phpMyFAQ\Auth\AuthKeycloak::getGroupMapping — Coverage: 75.0% | Lines: 12 | Complexity: 6 phpMyFAQ\Auth\Oidc\OidcPkceGenerator::generateChallenge — Coverage: 100.0% | Lines: 12 | Complexity: 4 phpMyFAQ\Auth\AuthLdap::connect — Coverage: 100.0% | Lines: 11 | Complexity: 2 phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::isAccessTokenRevoked — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::isAuthCodeRevoked — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::persistNewRefreshToken — Coverage: 100.0% | Lines: 11 | Complexity: 2 phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::isRefreshTokenRevoked — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Auth\Oidc\OidcClient::buildAuthorizationUrl — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcPkceGenerator::generateVerifier — Coverage: 100.0% | Lines: 11 | Complexity: 4 phpMyFAQ\Auth\AuthKeycloak::checkCredentials — Coverage: 100.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Auth\AuthLdap::__construct — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Auth\AuthSso::checkCredentials — Coverage: 100.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Auth\EntraId\EntraIdSession::setCookie — Coverage: 100.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Auth\EntraId\JwksProvider::writeCache — Coverage: 90.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Auth\EntraId\OAuth::refreshToken — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcClient::buildLogoutUrl — Coverage: 100.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::decodeSegment — Coverage: 90.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Auth\AuthSso::create — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::getNewToken — Coverage: 100.0% | Lines: 9 | Complexity: 5 phpMyFAQ\Auth\AuthDatabase::isValidLogin — Coverage: 87.5% | Lines: 8 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::isValidAudience — Coverage: 75.0% | Lines: 8 | Complexity: 7 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::audienceMatches — Coverage: 75.0% | Lines: 8 | Complexity: 6 phpMyFAQ\Auth\WebAuthn\PublicKeyConverter::publicKeyToPem — Coverage: 100.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Auth\ApiKeyAuthenticator::hasRequiredScopes — Coverage: 85.7% | Lines: 7 | Complexity: 2 phpMyFAQ\Auth\AuthHttp::checkCredentials — Coverage: 100.0% | Lines: 7 | Complexity: 4 phpMyFAQ\Auth\AuthKeycloak::getDisplayName — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Auth\AuthLdap::isValidLogin — Coverage: 42.9% | Lines: 7 | Complexity: 3 phpMyFAQ\Auth\OAuth2\AuthorizationServer::parseInterval — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Length — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Auth\ApiKeyAuthenticator::isNotExpired — Coverage: 83.3% | Lines: 6 | Complexity: 4 phpMyFAQ\Auth\ApiKeyAuthenticator::parseScopes — Coverage: 66.7% | Lines: 6 | Complexity: 4 phpMyFAQ\Auth\AuthHttp::create — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::redactIdentifier — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Auth\EntraId\JwksProvider::__construct — Coverage: 83.3% | Lines: 6 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcClient::fetchUserInfo — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::base64UrlDecode — Coverage: 83.3% | Lines: 6 | Complexity: 2 phpMyFAQ\Auth\AuthKeycloak::createUser — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\AuthKeycloak::createMediumPermission — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\AuthLdap::createUser — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\AuthLdap::createMediumPermission — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\AuthSso::createLdapAuth — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\AuthSso::createUser — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::revokeAccessToken — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::revokeAuthCode — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::revokeRefreshToken — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Integer — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\Oidc\OidcSession::getAuthorizationState — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Auth\AuthDatabase::rehash — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::shouldAssignGroups — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Auth\AuthKeycloak::shouldSynchronizeGroupsOnLogin — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Auth\AuthLdap::extractGroupNameFromDn — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Auth\AuthSso::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Auth\AuthWebAuthn::decodeSignedClientData — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Auth\EntraId\EntraIdSession::setCurrentSessionKey — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::splitToken — Coverage: 100.0% | Lines: 4 | Complexity: 5 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::normalizeKey — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Auth\AuthDatabase::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Auth\AuthEntraId::isValidLogin — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth\AuthWebAuthn::getUserFromSession — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth\AuthWebAuthn::idList — Coverage: 66.7% | Lines: 3 | Complexity: 3 phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::buildDiscoveryUrl — Coverage: 66.7% | Lines: 3 | Complexity: 3 phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::supportsGrantType — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::getCurrentTimestamp — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcSession::setAuthorizationState — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcSession::clearAuthorizationState — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Auth\PasswordHasher::verify — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth\PasswordHasher::needsRehash — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth\ApiKeyAuthenticator::getAuthenticatedUserId — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth\AuthEntraId::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\AuthEntraId::checkCredentials — Coverage: 50.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\AuthHttp::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::findUser — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth\AuthWebAuthn::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\AuthWebAuthn::storeUserInSession — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\EntraIdSession::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\EntraIdSession::getCurrentSessionKey — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth\EntraId\EntraIdSession::getCookie — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\JwksProvider::getKeys — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::setJwksProvider — Coverage: 0.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::clearToken — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::setRefreshToken — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::setAccessToken — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\OAuth2\AuthorizationServer::isEnabled — Coverage: 100.0% | Lines: 2 | Complexity: 4 phpMyFAQ\Auth\OAuth2\AuthorizationServer::getConfigString — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth\OAuth2\ResourceServer::isEnabled — Coverage: 100.0% | Lines: 2 | Complexity: 4 phpMyFAQ\Auth\OAuth2\ResourceServer::getConfigString — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth\PasswordHasher::legacyHash — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\WebAuthn\WebAuthnUser::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\WebAuthn\WebAuthnUser::setName — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\WebAuthn\WebAuthnUser::setWebAuthnKeys — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\ApiKeyAuthenticator::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\ApiKeyAuthenticator::getAuthenticatedApiKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthChain::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthChain::setOAuth2Authenticator — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthChain::getAuthenticatedUserId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthChain::getAuthSource — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthEntraId::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthEntraId::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthEntraId::logout — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthHttp::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthHttp::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthHttp::isValidLogin — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Auth\AuthKeycloak::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::isValidLogin — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Auth\AuthKeycloak::getEmail — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::getSubject — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::toBool — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthLdap::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthLdap::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthSso::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthSso::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthSso::isValidLogin — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Auth\AuthWebAuthn::setAppId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthWebAuthn::byteString — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Auth\AuthWebAuthn::arrayToString — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthWebAuthn::stringToArray — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\EntraIdSession::createCurrentSessionKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\JwksProvider::cacheFile — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::errorMessage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::getToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::getEntraIdSession — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::getRefreshToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::getAccessToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::getName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::getMail — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::toBool — Coverage: 100.0% | Lines: 1 | Complexity: 4 phpMyFAQ\Auth\OAuth2\AuthorizationServer::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\AuthorizationServer::setTokenIssuer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\AuthorizationServer::setAuthorizationCompleter — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::setName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::setRedirectUri — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::setConfidential — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository::db — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository::table — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::getNewAuthCode — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::getNewRefreshToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\ScopeRepository::finalizeScopes — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\ResourceServer::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\ResourceServer::setTokenValidator — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcClient::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcClientConfig::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcClientConfig::getScopesAsString — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcDiscoveryDocument::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcDiscoveryService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Sequence — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1ObjectIdentifier — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Null — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1BitString — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcProviderConfig::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcSession::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcSession::setIdToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcSession::getIdToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcSession::clearIdToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\PasswordHasher::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\PasswordHasher::hash — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\PasswordHasher::isLegacyHash — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\WebAuthn\WebAuthnUser::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\WebAuthn\WebAuthnUser::getName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\WebAuthn\WebAuthnUser::getWebAuthnKeys — Coverage: 100.0% | Lines: 1 | Complexity: 1

 

Sorted by descending CRAP (Change Risk Anti-Patterns) index.

Method CRAP Coverage
phpMyFAQ\Auth\AuthWebAuthn::register597.0116.2%
phpMyFAQ\Auth\WebAuthn\PublicKeyConverter::fromCoseToPkcs197.6949.0%
phpMyFAQ\Auth\OAuth2\Repository\UserRepository::getUserEntityByUserCredentials43.0518.2%
phpMyFAQ\Auth\AuthWebAuthn::authenticate32.2980.6%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::validateClaims3197.5%
phpMyFAQ\Auth\AuthLdap::checkCredentials20.3684.4%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::completeAuthorization17.5840.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::findKey15.3857.1%
phpMyFAQ\Auth\OAuth2\ResourceServer::authenticate14.8658.3%
phpMyFAQ\Auth\AuthKeycloak::assignUserToGroups12.3986.1%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::issueToken11.7661.1%
phpMyFAQ\Auth\EntraId\JwksProvider::loadJwks11100.0%
phpMyFAQ\Auth\AuthKeycloak::extractRoleNames10.2087.5%
phpMyFAQ\Auth\AuthDatabase::checkCredentials10.0691.7%
phpMyFAQ\Auth\EntraId\OAuth::setToken9100.0%
phpMyFAQ\Auth\AuthLdap::create8100.0%
phpMyFAQ\Auth\AuthWebAuthn::prepareForLogin896.9%
phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::create896.4%
phpMyFAQ\Auth\OAuth2\Repository\ClientRepository::validateClient8100.0%
phpMyFAQ\Auth\Oidc\OidcDiscoveryDocument::fromArray8100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::isValidAudience7.7775.0%
phpMyFAQ\Auth\AuthKeycloak::getGroupMapping6.5675.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::audienceMatches6.5675.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::validateSignature6.1085.7%
phpMyFAQ\Auth\ApiKeyAuthenticator::authenticate6.0194.7%
phpMyFAQ\Auth\AuthKeycloak::create6100.0%
phpMyFAQ\Auth\AuthLdap::assignUserToGroups6100.0%
phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::persistNewAccessToken6100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::fetchJwks5.7369.2%
phpMyFAQ\Auth\EntraId\OAuth::getOAuthToken5.0192.6%
phpMyFAQ\Auth\AuthChain::authenticate5100.0%
phpMyFAQ\Auth\AuthKeycloak::checkCredentials5100.0%
phpMyFAQ\Auth\AuthSso::checkCredentials5100.0%
phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::getNewToken5100.0%
phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::persistNewAuthCode5100.0%
phpMyFAQ\Auth\OAuth2\Repository\ClientRepository::getClientEntity595.8%
phpMyFAQ\Auth\Oidc\OidcClient::buildLogoutUrl5100.0%
phpMyFAQ\Auth\Oidc\OidcClient::decodeJsonResponse5100.0%
phpMyFAQ\Auth\Oidc\OidcDiscoveryService::discover5100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::splitToken5100.0%
phpMyFAQ\Auth\AuthLdap::isValidLogin4.6842.9%
phpMyFAQ\Auth\ApiKeyAuthenticator::parseScopes4.5966.7%
phpMyFAQ\Auth\AuthEntraId::create4.3116.7%
phpMyFAQ\Auth\ApiKeyAuthenticator::isNotExpired4.0783.3%
phpMyFAQ\Auth\AuthDatabase::delete4.0585.7%
phpMyFAQ\Auth\AuthDatabase::update4.0486.7%
phpMyFAQ\Auth\AuthDatabase::create4.0387.5%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::decodeSegment4.0290.0%
phpMyFAQ\Auth\AuthEntraId::createOAuthChallenge4100.0%
phpMyFAQ\Auth\AuthHttp::checkCredentials4100.0%
phpMyFAQ\Auth\EntraId\EntraIdSession::setCookie4100.0%
phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::toBool4100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::isEnabled4100.0%
phpMyFAQ\Auth\OAuth2\Repository\ScopeRepository::getScopeEntityByIdentifier4.0094.1%
phpMyFAQ\Auth\OAuth2\ResourceServer::isEnabled4100.0%
phpMyFAQ\Auth\Oidc\OidcClient::exchangeAuthorizationCode4100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::createPemFromJwk4.0094.4%
phpMyFAQ\Auth\Oidc\OidcPkceGenerator::generateVerifier4100.0%
phpMyFAQ\Auth\Oidc\OidcPkceGenerator::generateChallenge4100.0%
phpMyFAQ\Auth\AuthWebAuthn::idList3.3366.7%
phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::buildDiscoveryUrl3.3366.7%
phpMyFAQ\Auth\AuthKeycloak::createUser3.0780.0%
phpMyFAQ\Auth\AuthKeycloak::createMediumPermission3.0780.0%
phpMyFAQ\Auth\AuthLdap::createMediumPermission3.0780.0%
phpMyFAQ\Auth\AuthSso::createLdapAuth3.0780.0%
phpMyFAQ\Auth\AuthSso::createUser3.0780.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Integer3.0780.0%
phpMyFAQ\Auth\EntraId\JwksProvider::writeCache3.0190.0%
phpMyFAQ\Auth\AuthKeycloak::getDisplayName3100.0%
phpMyFAQ\Auth\AuthKeycloak::redactIdentifier3100.0%
phpMyFAQ\Auth\AuthLdap::createUser3100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::buildLeagueAuthorizationServer3100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::parseInterval3100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::toPsr7Request3100.0%
phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::isAccessTokenRevoked3100.0%
phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::isAuthCodeRevoked3100.0%
phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::isRefreshTokenRevoked3100.0%
phpMyFAQ\Auth\OAuth2\ResourceServer::toPsr7Request3100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Length3100.0%
phpMyFAQ\Auth\WebAuthn\PublicKeyConverter::publicKeyToPem3100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::getCurrentTimestamp2.1566.7%
phpMyFAQ\Auth\EntraId\EntraIdSession::setCurrentSessionKey2.0675.0%
phpMyFAQ\Auth\EntraId\JwksProvider::__construct2.0283.3%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::base64UrlDecode2.0283.3%
phpMyFAQ\Auth\ApiKeyAuthenticator::hasRequiredScopes2.0185.7%
phpMyFAQ\Auth\AuthDatabase::isValidLogin2.0187.5%
phpMyFAQ\Auth\ApiKeyAuthenticator::getAuthenticatedUserId2100.0%
phpMyFAQ\Auth\AuthEntraId::isValidLogin2100.0%
phpMyFAQ\Auth\AuthHttp::isValidLogin2100.0%
phpMyFAQ\Auth\AuthKeycloak::isValidLogin2100.0%
phpMyFAQ\Auth\AuthKeycloak::findUser2100.0%
phpMyFAQ\Auth\AuthKeycloak::shouldAssignGroups2100.0%
phpMyFAQ\Auth\AuthKeycloak::shouldSynchronizeGroupsOnLogin2100.0%
phpMyFAQ\Auth\AuthLdap::__construct2100.0%
phpMyFAQ\Auth\AuthLdap::extractGroupNameFromDn2100.0%
phpMyFAQ\Auth\AuthLdap::connect2100.0%
phpMyFAQ\Auth\AuthSso::create2100.0%
phpMyFAQ\Auth\AuthSso::isValidLogin2100.0%
phpMyFAQ\Auth\AuthWebAuthn::prepareChallengeForRegistration2100.0%
phpMyFAQ\Auth\AuthWebAuthn::getUserFromSession2100.0%
phpMyFAQ\Auth\AuthWebAuthn::decodeSignedClientData2100.0%
phpMyFAQ\Auth\AuthWebAuthn::byteString2100.0%
phpMyFAQ\Auth\EntraId\EntraIdSession::getCurrentSessionKey2100.0%
phpMyFAQ\Auth\EntraId\OAuth::setJwksProvider20.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::getConfigString2100.0%
phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::supportsGrantType2100.0%
phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::persistNewRefreshToken2100.0%
phpMyFAQ\Auth\OAuth2\ResourceServer::getConfigString2100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::validate2100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::normalizeKey2100.0%
phpMyFAQ\Auth\PasswordHasher::verify2100.0%
phpMyFAQ\Auth\PasswordHasher::needsRehash2100.0%
phpMyFAQ\Auth\AuthEntraId::checkCredentials1.1250.0%
phpMyFAQ\Auth\ApiKeyAuthenticator::__construct1100.0%
phpMyFAQ\Auth\ApiKeyAuthenticator::getAuthenticatedApiKey1100.0%
phpMyFAQ\Auth\AuthChain::__construct1100.0%
phpMyFAQ\Auth\AuthChain::setOAuth2Authenticator1100.0%
phpMyFAQ\Auth\AuthChain::getAuthenticatedUserId1100.0%
phpMyFAQ\Auth\AuthChain::getAuthSource1100.0%
phpMyFAQ\Auth\AuthDatabase::__construct1100.0%
phpMyFAQ\Auth\AuthDatabase::rehash1100.0%
phpMyFAQ\Auth\AuthEntraId::__construct1100.0%
phpMyFAQ\Auth\AuthEntraId::update1100.0%
phpMyFAQ\Auth\AuthEntraId::delete1100.0%
phpMyFAQ\Auth\AuthEntraId::authorize1100.0%
phpMyFAQ\Auth\AuthEntraId::logout1100.0%
phpMyFAQ\Auth\AuthHttp::__construct1100.0%
phpMyFAQ\Auth\AuthHttp::create1100.0%
phpMyFAQ\Auth\AuthHttp::update1100.0%
phpMyFAQ\Auth\AuthHttp::delete1100.0%
phpMyFAQ\Auth\AuthKeycloak::__construct1100.0%
phpMyFAQ\Auth\AuthKeycloak::update1100.0%
phpMyFAQ\Auth\AuthKeycloak::delete1100.0%
phpMyFAQ\Auth\AuthKeycloak::getEmail1100.0%
phpMyFAQ\Auth\AuthKeycloak::getSubject1100.0%
phpMyFAQ\Auth\AuthKeycloak::toBool1100.0%
phpMyFAQ\Auth\AuthLdap::update1100.0%
phpMyFAQ\Auth\AuthLdap::delete1100.0%
phpMyFAQ\Auth\AuthSso::__construct1100.0%
phpMyFAQ\Auth\AuthSso::update1100.0%
phpMyFAQ\Auth\AuthSso::delete1100.0%
phpMyFAQ\Auth\AuthWebAuthn::__construct1100.0%
phpMyFAQ\Auth\AuthWebAuthn::storeUserInSession1100.0%
phpMyFAQ\Auth\AuthWebAuthn::setAppId1100.0%
phpMyFAQ\Auth\AuthWebAuthn::arrayToString1100.0%
phpMyFAQ\Auth\AuthWebAuthn::stringToArray1100.0%
phpMyFAQ\Auth\EntraId\EntraIdSession::__construct1100.0%
phpMyFAQ\Auth\EntraId\EntraIdSession::createCurrentSessionKey1100.0%
phpMyFAQ\Auth\EntraId\EntraIdSession::getCookie1100.0%
phpMyFAQ\Auth\EntraId\JwksProvider::getKeys1100.0%
phpMyFAQ\Auth\EntraId\JwksProvider::cacheFile1100.0%
phpMyFAQ\Auth\EntraId\OAuth::__construct1100.0%
phpMyFAQ\Auth\EntraId\OAuth::errorMessage1100.0%
phpMyFAQ\Auth\EntraId\OAuth::refreshToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::getToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::clearToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::getEntraIdSession1100.0%
phpMyFAQ\Auth\EntraId\OAuth::getRefreshToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::setRefreshToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::getAccessToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::setAccessToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::getName1100.0%
phpMyFAQ\Auth\EntraId\OAuth::getMail1100.0%
phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::__construct1100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::__construct1100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::setTokenIssuer1100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::setAuthorizationCompleter1100.0%
phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::setName1100.0%
phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::setRedirectUri1100.0%
phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::setConfidential1100.0%
phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository::__construct1100.0%
phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository::db1100.0%
phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository::table1100.0%
phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::revokeAccessToken1100.0%
phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::getNewAuthCode1100.0%
phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::revokeAuthCode1100.0%
phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::getNewRefreshToken1100.0%
phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::revokeRefreshToken1100.0%
phpMyFAQ\Auth\OAuth2\Repository\ScopeRepository::finalizeScopes1100.0%
phpMyFAQ\Auth\OAuth2\ResourceServer::__construct1100.0%
phpMyFAQ\Auth\OAuth2\ResourceServer::setTokenValidator1100.0%
phpMyFAQ\Auth\Oidc\OidcClient::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcClient::buildAuthorizationUrl1100.0%
phpMyFAQ\Auth\Oidc\OidcClient::fetchUserInfo1100.0%
phpMyFAQ\Auth\Oidc\OidcClientConfig::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcClientConfig::getScopesAsString1100.0%
phpMyFAQ\Auth\Oidc\OidcDiscoveryDocument::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcDiscoveryService::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Sequence1100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1ObjectIdentifier1100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Null1100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1BitString1100.0%
phpMyFAQ\Auth\Oidc\OidcProviderConfig::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::setAuthorizationState1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::getAuthorizationState1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::clearAuthorizationState1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::setIdToken1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::getIdToken1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::clearIdToken1100.0%
phpMyFAQ\Auth\PasswordHasher::__construct1100.0%
phpMyFAQ\Auth\PasswordHasher::hash1100.0%
phpMyFAQ\Auth\PasswordHasher::isLegacyHash1100.0%
phpMyFAQ\Auth\PasswordHasher::legacyHash1100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser::getId1100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser::setId1100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser::getName1100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser::setName1100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser::getWebAuthnKeys1100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser::setWebAuthnKeys1100.0%