|
42 | 42 | use OCP\IRequest; |
43 | 43 | use OCP\Security\ICrypto; |
44 | 44 | use OCP\Security\ISecureRandom; |
| 45 | +use Psr\Log\LoggerInterface; |
45 | 46 |
|
46 | 47 | class OauthApiController extends Controller { |
47 | | - /** @var AccessTokenMapper */ |
48 | | - private $accessTokenMapper; |
49 | | - /** @var ClientMapper */ |
50 | | - private $clientMapper; |
51 | | - /** @var ICrypto */ |
52 | | - private $crypto; |
53 | | - /** @var TokenProvider */ |
54 | | - private $tokenProvider; |
55 | | - /** @var ISecureRandom */ |
56 | | - private $secureRandom; |
57 | | - /** @var ITimeFactory */ |
58 | | - private $time; |
59 | | - /** @var Throttler */ |
60 | | - private $throttler; |
61 | | - |
62 | | - public function __construct(string $appName, |
63 | | - IRequest $request, |
64 | | - ICrypto $crypto, |
65 | | - AccessTokenMapper $accessTokenMapper, |
66 | | - ClientMapper $clientMapper, |
67 | | - TokenProvider $tokenProvider, |
68 | | - ISecureRandom $secureRandom, |
69 | | - ITimeFactory $time, |
70 | | - Throttler $throttler) { |
| 48 | + |
| 49 | + public function __construct( |
| 50 | + string $appName, |
| 51 | + IRequest $request, |
| 52 | + private ICrypto $crypto, |
| 53 | + private AccessTokenMapper $accessTokenMapper, |
| 54 | + private ClientMapper $clientMapper, |
| 55 | + private TokenProvider $tokenProvider, |
| 56 | + private ISecureRandom $secureRandom, |
| 57 | + private ITimeFactory $time, |
| 58 | + private LoggerInterface $logger, |
| 59 | + private Throttler $throttler |
| 60 | + ) { |
71 | 61 | parent::__construct($appName, $request); |
72 | | - $this->crypto = $crypto; |
73 | | - $this->accessTokenMapper = $accessTokenMapper; |
74 | | - $this->clientMapper = $clientMapper; |
75 | | - $this->tokenProvider = $tokenProvider; |
76 | | - $this->secureRandom = $secureRandom; |
77 | | - $this->time = $time; |
78 | | - $this->throttler = $throttler; |
79 | 62 | } |
80 | 63 |
|
81 | 64 | /** |
@@ -124,8 +107,16 @@ public function getToken($grant_type, $code, $refresh_token, $client_id, $client |
124 | 107 | $client_secret = $this->request->server['PHP_AUTH_PW']; |
125 | 108 | } |
126 | 109 |
|
| 110 | + try { |
| 111 | + $storedClientSecret = $this->crypto->decrypt($client->getSecret()); |
| 112 | + } catch (\Exception $e) { |
| 113 | + $this->logger->error('OAuth client secret decryption error', ['exception' => $e]); |
| 114 | + return new JSONResponse([ |
| 115 | + 'error' => 'invalid_client', |
| 116 | + ], Http::STATUS_BAD_REQUEST); |
| 117 | + } |
127 | 118 | // The client id and secret must match. Else we don't provide an access token! |
128 | | - if ($client->getClientIdentifier() !== $client_id || $client->getSecret() !== $client_secret) { |
| 119 | + if ($client->getClientIdentifier() !== $client_id || $storedClientSecret !== $client_secret) { |
129 | 120 | return new JSONResponse([ |
130 | 121 | 'error' => 'invalid_client', |
131 | 122 | ], Http::STATUS_BAD_REQUEST); |
|
0 commit comments