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
+
+