diff --git a/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php b/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php index b22b18d6..f8e968e1 100644 --- a/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php +++ b/src/Services/InfoProviderSystem/Providers/DigikeyProvider.php @@ -36,7 +36,7 @@ class DigikeyProvider implements InfoProviderInterface private readonly HttpClientInterface $digikeyClient; - public function __construct(HttpClientInterface $httpClient, private readonly OAuthTokenManager $authTokenManager, string $currency, string $clientId) + public function __construct(HttpClientInterface $httpClient, private readonly OAuthTokenManager $authTokenManager, string $currency, private readonly string $clientId) { //Create the HTTP client with some default options $this->digikeyClient = $httpClient->withOptions([ @@ -57,6 +57,7 @@ class DigikeyProvider implements InfoProviderInterface 'name' => 'DigiKey', 'description' => 'This provider uses the DigiKey API to search for parts.', 'url' => 'https://www.digikey.com/', + 'oauth_app_name' => self::OAUTH_APP_NAME, ]; } @@ -78,7 +79,8 @@ class DigikeyProvider implements InfoProviderInterface public function isActive(): bool { - return true; + //The client ID has to be set and a token has to be available (user clicked connect) + return !empty($this->clientId) && $this->authTokenManager->hasToken(self::OAUTH_APP_NAME); } public function searchByKeyword(string $keyword): array diff --git a/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php b/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php index 61f79274..30821bad 100644 --- a/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php +++ b/src/Services/InfoProviderSystem/Providers/InfoProviderInterface.php @@ -38,8 +38,9 @@ interface InfoProviderInterface * - logo?: The logo of the provider (e.g. "digikey.png") * - url?: The url of the provider (e.g. "https://www.digikey.com") * - disabled_help?: A help text which is shown when the provider is disabled, explaining how to enable it + * - oauth_app_name?: The name of the OAuth app which is used for authentication (e.g. "ip_digikey_oauth"). If this is set a connect button will be shown * - * @phpstan-return array{ name: string, description?: string, logo?: string, url?: string, disabled_help?: string } + * @phpstan-return array{ name: string, description?: string, logo?: string, url?: string, disabled_help?: string, oauth_app_name?: string } */ public function getProviderInfo(): array; diff --git a/src/Services/OAuth/OAuthTokenManager.php b/src/Services/OAuth/OAuthTokenManager.php index 1e76c8d0..bf4dcaa1 100644 --- a/src/Services/OAuth/OAuthTokenManager.php +++ b/src/Services/OAuth/OAuthTokenManager.php @@ -74,6 +74,16 @@ final class OAuthTokenManager return $this->entityManager->getRepository(OAuthToken::class)->findOneBy(['name' => $app_name]); } + /** + * Checks if a token for the given app name is existing + * @param string $app_name + * @return bool + */ + public function hasToken(string $app_name): bool + { + return $this->getToken($app_name) !== null; + } + /** * This function refreshes the token for the given app name. The new token is saved to the database * The app_name must be registered in the knpu_oauth2_client.yaml diff --git a/templates/info_providers/providers.macro.html.twig b/templates/info_providers/providers.macro.html.twig index 4f8dc3b8..7304806a 100644 --- a/templates/info_providers/providers.macro.html.twig +++ b/templates/info_providers/providers.macro.html.twig @@ -30,6 +30,10 @@ {{ capability.translationKey|trans }} {% endfor %} + {% if provider.providerInfo.oauth_app_name is defined and provider.providerInfo.oauth_app_name is not empty %} +
+ {% trans %}oauth_client.connect.btn{% endtrans %} + {% endif %} {% if provider.active == false %} @@ -42,7 +46,6 @@ {% endif %} - {% endif %} diff --git a/templates/info_providers/search/part_search.html.twig b/templates/info_providers/search/part_search.html.twig index 91f5cc70..1556530b 100644 --- a/templates/info_providers/search/part_search.html.twig +++ b/templates/info_providers/search/part_search.html.twig @@ -11,6 +11,8 @@ {% block card_content %} + All info providers + {{ form(form) }} {% if results is not null %} diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 049480e5..9e92eb7f 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -11495,5 +11495,11 @@ Please note, that you can not impersonate a disabled user. If you try you will g Created by Information provider + + + oauth_client.connect.btn + Connect OAuth + +