diff options
author | Maxence Lange <maxence@artificial-owl.com> | 2022-11-21 15:31:44 -0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-21 15:31:44 -0100 |
commit | 72be81700039485ac4ef71fecd62eee969bc4a91 (patch) | |
tree | 8149aca15a5a158f1803e7cd5eebb95381369377 /lib/Controller | |
parent | b1a8d2b52a5d6eab1145f72950cc4644015aed06 (diff) | |
parent | 58ca8655231af322f3ab4c291ad774d6bf960805 (diff) |
Merge pull request #1521 from nextcloud/enh/noid/authorize-deny-popup
confirmation popup
Diffstat (limited to 'lib/Controller')
-rw-r--r-- | lib/Controller/OAuthController.php | 53 |
1 files changed, 43 insertions, 10 deletions
diff --git a/lib/Controller/OAuthController.php b/lib/Controller/OAuthController.php index 7a295649..057641e5 100644 --- a/lib/Controller/OAuthController.php +++ b/lib/Controller/OAuthController.php @@ -45,6 +45,8 @@ use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\Response; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\AppFramework\Services\IInitialState; use OCP\IRequest; use OCP\IURLGenerator; use OCP\IUserSession; @@ -59,6 +61,7 @@ class OAuthController extends Controller { private ClientService $clientService; private ConfigService $configService; private LoggerInterface $logger; + private IInitialState $initialState; public function __construct( IRequest $request, @@ -69,7 +72,8 @@ class OAuthController extends Controller { CacheActorService $cacheActorService, ClientService $clientService, ConfigService $configService, - LoggerInterface $logger + LoggerInterface $logger, + IInitialState $initialState ) { parent::__construct(Application::APP_NAME, $request); @@ -81,6 +85,7 @@ class OAuthController extends Controller { $this->clientService = $clientService; $this->configService = $configService; $this->logger = $logger; + $this->initialState = $initialState; $body = file_get_contents('php://input'); $logger->debug('[OAuthController] input: ' . $body); @@ -173,13 +178,47 @@ class OAuthController extends Controller { string $redirect_uri, string $response_type, string $scope = 'read' + ): Response { + $user = $this->userSession->getUser(); + + // check actor exists + $this->accountService->getActorFromUserId($user->getUID()); + + if ($response_type !== 'code') { + throw new ClientNotFoundException('invalid response type'); + } + + // check client exists in db + $client = $this->clientService->getFromClientId($client_id); + $this->initialState->provideInitialState('appName', $client->getAppName()); + + return new TemplateResponse(Application::APP_NAME, 'oauth2', [ + 'request' => + [ + 'clientId' => $client_id, + 'redirectUri' => $redirect_uri, + 'responseType' => $response_type, + 'scope' => $scope + ] + ]); + } + + + /** + * @NoAdminRequired + */ + public function authorizing( + string $client_id, + string $redirect_uri, + string $response_type, + string $scope = 'read' ): DataResponse { try { $user = $this->userSession->getUser(); $account = $this->accountService->getActorFromUserId($user->getUID()); if ($response_type !== 'code') { - return new DataResponse(['error' => 'invalid_type'], Http::STATUS_BAD_REQUEST); + throw new ClientNotFoundException('invalid response type'); } $client = $this->clientService->getFromClientId($client_id); @@ -205,18 +244,12 @@ class OAuthController extends Controller { // TODO : finalize result if no redirect_url return new DataResponse( - [ - 'code' => $code, - // 'access_token' => '', - // "token_type" => "Bearer", - // "scope" => "read write follow push", - // "created_at" => 1573979017 - ], Http::STATUS_OK + ['code' => $code], Http::STATUS_OK ); } catch (Exception $e) { $this->logger->notice($e->getMessage() . ' ' . get_class($e)); - return new DataResponse(['error' => $e->getMessage()], Http::STATUS_UNAUTHORIZED); + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); } } |