. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Authentication\Login; use Espo\Core\Api\Request; use Espo\Core\Authentication\ConfigDataProvider; use Espo\Core\Authentication\HeaderKey; /** * @internal */ class MethodResolver { public function __construct( private ConfigDataProvider $configDataProvider, ) {} public function resolve(Request $request): ?string { if ($request->hasHeader(HeaderKey::AUTHORIZATION)) { return null; } $paramsList = $this->configDataProvider->getLoginMetadataParamsList(); $paramsList = array_filter($paramsList, fn ($it) => $it->isApi()); usort($paramsList, function (MetadataParams $a, MetadataParams $b) { return ($b->getCredentialsHeaderScheme() !== null) <=> ($a->getCredentialsHeaderScheme() !== null); }); $paramsList = array_filter($paramsList, function ($params) use ($request): bool { $headerName = $params->getCredentialsHeader(); if (!$headerName || !$request->hasHeader($headerName)) { return false; } $headerValue = $request->getHeader($headerName) ?? ''; $scheme = $params->getCredentialsHeaderScheme(); if ($scheme !== null && !str_starts_with($headerValue, $scheme . ' ')) { return false; } return true; }); $paramsList = array_values($paramsList); if (count($paramsList)) { return $paramsList[0]->getMethod(); } return null; } }