Skip to content
This repository was archived by the owner on Oct 24, 2023. It is now read-only.

Commit d93a455

Browse files
author
Jens Schulze
committed
feat: support client instantiation with preconfigured bearer token
Closes #359
1 parent 67ce5ae commit d93a455

File tree

4 files changed

+70
-2
lines changed

4 files changed

+70
-2
lines changed

src/Core/Client/OAuth/Manager.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ protected function getCacheAdapter()
9292
public function getToken()
9393
{
9494
$scope = $this->getConfig()->getScope();
95+
if ($this->getConfig()->getGrantType() == Config::GRANT_TYPE_BEARER_TOKEN) {
96+
return new Token($this->getConfig()->getBearerToken(), null, $scope);
97+
}
9598
if ($token = $this->getCacheToken()) {
9699
return new Token($token, null, $scope);
97100
}
@@ -113,6 +116,8 @@ public function refreshToken()
113116
}
114117

115118
switch ($grantType) {
119+
case Config::GRANT_TYPE_BEARER_TOKEN:
120+
return new Token($this->getConfig()->getBearerToken(), null, $scope);
116121
case Config::GRANT_TYPE_PASSWORD:
117122
$user = $this->getConfig()->getUsername();
118123
$password = $this->getConfig()->getPassword();

src/Core/Config.php

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,15 @@ class Config implements ContextAwareInterface
6969
const USER_NAME = 'username';
7070
const PASSWORD = 'password';
7171
const REFRESH_TOKEN = 'refresh_token';
72+
const BEARER_TOKEN = 'bearer_token';
7273
const ANONYMOUS_ID = 'anonymous_id';
7374
const GRANT_TYPE = 'grant_type';
7475

7576
const GRANT_TYPE_CLIENT = 'client_credentials';
7677
const GRANT_TYPE_PASSWORD = 'password';
7778
const GRANT_TYPE_REFRESH = 'refresh_token';
7879
const GRANT_TYPE_ANONYMOUS = 'anonymous_token';
80+
const GRANT_TYPE_BEARER_TOKEN = 'bearer_token';
7981

8082
/**
8183
* @var string
@@ -138,6 +140,11 @@ class Config implements ContextAwareInterface
138140
*/
139141
protected $refreshToken;
140142

143+
/**
144+
* @var string
145+
*/
146+
protected $bearerToken;
147+
141148
/**
142149
* @var string
143150
*/
@@ -358,11 +365,11 @@ public function setApiUrl($apiUrl)
358365
*/
359366
public function check()
360367
{
361-
if (is_null($this->getClientId())) {
368+
if (is_null($this->getClientId()) && $this->getGrantType() !== self::GRANT_TYPE_BEARER_TOKEN) {
362369
throw new InvalidArgumentException(Message::NO_CLIENT_ID);
363370
}
364371

365-
if (is_null($this->getClientSecret())) {
372+
if (is_null($this->getClientSecret()) && $this->getGrantType() !== self::GRANT_TYPE_BEARER_TOKEN) {
366373
throw new InvalidArgumentException(Message::NO_CLIENT_SECRET);
367374
}
368375

@@ -674,4 +681,22 @@ public function setClientOptions(array $clientOptions)
674681
$this->clientOptions = $clientOptions;
675682
return $this;
676683
}
684+
685+
/**
686+
* @return string
687+
*/
688+
public function getBearerToken()
689+
{
690+
return $this->bearerToken;
691+
}
692+
693+
/**
694+
* @param string $bearerToken
695+
* @return Config
696+
*/
697+
public function setBearerToken($bearerToken)
698+
{
699+
$this->bearerToken = $bearerToken;
700+
return $this;
701+
}
677702
}

tests/unit/Client/OAuth/ManagerTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,24 @@ public function testToken()
100100
$this->assertSame($manager->getConfig()->getScope(), $manager->getToken()->getScope());
101101
}
102102

103+
public function testGrantTypeBearerToken()
104+
{
105+
$config = Config::fromArray([
106+
Config::BEARER_TOKEN => 'abdef',
107+
Config::PROJECT => 'project',
108+
Config::GRANT_TYPE => Config::GRANT_TYPE_BEARER_TOKEN
109+
]);
110+
111+
$manager = new Manager($config);
112+
$this->assertInstanceOf(Token::class, $manager->getToken());
113+
$this->assertSame($manager->getConfig()->getScope(), $manager->getToken()->getScope());
114+
$this->assertSame('abdef', $manager->getToken()->getToken());
115+
116+
$this->assertInstanceOf(Token::class, $manager->refreshToken());
117+
$this->assertSame($manager->getConfig()->getScope(), $manager->refreshToken()->getScope());
118+
$this->assertSame('abdef', $manager->refreshToken()->getToken());
119+
}
120+
103121
public function testScope()
104122
{
105123
$config = Config::fromArray([

tests/unit/ConfigTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public function testSetCredentialsOnly()
2525
unset($testConfig[Config::OAUTH_URL]);
2626
unset($testConfig[Config::API_URL]);
2727
$config = Config::fromArray($testConfig);
28+
$config->check();
2829
$this->assertInstanceOf(Config::class, $config);
2930

3031
$this->assertEquals($testConfig[Config::CLIENT_ID], $config->getClientId());
@@ -34,6 +35,25 @@ public function testSetCredentialsOnly()
3435
$this->assertEquals('https://api.sphere.io', $config->getApiUrl());
3536
}
3637

38+
public function testSetBearerTokenOnly()
39+
{
40+
$testConfig = $this->getConfig();
41+
$testConfig[Config::BEARER_TOKEN] = 'abcdef';
42+
$testConfig[Config::GRANT_TYPE] = Config::GRANT_TYPE_BEARER_TOKEN;
43+
unset($testConfig[Config::OAUTH_URL]);
44+
unset($testConfig[Config::CLIENT_ID]);
45+
unset($testConfig[Config::CLIENT_SECRET]);
46+
unset($testConfig[Config::API_URL]);
47+
$config = Config::fromArray($testConfig);
48+
$config->check();
49+
$this->assertInstanceOf(Config::class, $config);
50+
51+
$this->assertEquals($testConfig[Config::BEARER_TOKEN], $config->getBearerToken());
52+
$this->assertEquals('https://auth.sphere.io/oauth/token', $config->getOauthUrl());
53+
$this->assertEquals($testConfig[Config::PROJECT], $config->getProject());
54+
$this->assertEquals('https://api.sphere.io', $config->getApiUrl());
55+
}
56+
3757
public function testFromArray()
3858
{
3959
$testConfig = $this->getConfig();

0 commit comments

Comments
 (0)