Added an button to connect the oauth providers from WebUI

This commit is contained in:
Jan Böhmer 2023-07-16 03:18:33 +02:00
parent c203de082e
commit f7648e3311
6 changed files with 28 additions and 4 deletions

View file

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

View file

@ -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;

View file

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