Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\IntegrationsBundle\Auth\Provider\BasicAuth; | |
use GuzzleHttp\Client; | |
use GuzzleHttp\ClientInterface; | |
use Mautic\IntegrationsBundle\Auth\Provider\AuthConfigInterface; | |
use Mautic\IntegrationsBundle\Auth\Provider\AuthCredentialsInterface; | |
use Mautic\IntegrationsBundle\Auth\Provider\AuthProviderInterface; | |
use Mautic\IntegrationsBundle\Exception\PluginNotConfiguredException; | |
/** | |
* Factory for building HTTP clients using basic auth. | |
*/ | |
class HttpFactory implements AuthProviderInterface | |
{ | |
public const NAME = 'basic_auth'; | |
/** | |
* Cache of initialized clients. | |
* | |
* @var Client[] | |
*/ | |
private array $initializedClients = []; | |
public function getAuthType(): string | |
{ | |
return self::NAME; | |
} | |
/** | |
* @param CredentialsInterface|AuthCredentialsInterface $credentials | |
* | |
* @throws PluginNotConfiguredException | |
*/ | |
public function getClient(AuthCredentialsInterface $credentials, ?AuthConfigInterface $config = null): ClientInterface | |
{ | |
if (!$this->credentialsAreConfigured($credentials)) { | |
throw new PluginNotConfiguredException('Username and/or password is missing'); | |
} | |
// Return cached initialized client if there is one. | |
if (!empty($this->initializedClients[$credentials->getUsername()])) { | |
return $this->initializedClients[$credentials->getUsername()]; | |
} | |
$this->initializedClients[$credentials->getUsername()] = new Client( | |
[ | |
'auth' => [ | |
$credentials->getUsername(), | |
$credentials->getPassword(), | |
], | |
] | |
); | |
return $this->initializedClients[$credentials->getUsername()]; | |
} | |
protected function credentialsAreConfigured(CredentialsInterface $credentials): bool | |
{ | |
return $credentials->getUsername() && $credentials->getPassword(); | |
} | |
} | |