From 3c6500d25ee64603f2dc78d939c229885ee643c6 Mon Sep 17 00:00:00 2001 From: Julien Veyssier Date: Mon, 4 Nov 2024 11:15:17 +0100 Subject: [PATCH 1/2] test token exchange Signed-off-by: Julien Veyssier --- lib/Controller/ConfigController.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/Controller/ConfigController.php b/lib/Controller/ConfigController.php index 3e3bf02b..51c3c2f3 100644 --- a/lib/Controller/ConfigController.php +++ b/lib/Controller/ConfigController.php @@ -13,6 +13,8 @@ use OCA\Github\Reference\GithubIssuePrReferenceProvider; use OCA\Github\Service\GithubAPIService; use OCA\Github\Service\SecretService; +use OCA\UserOIDC\Event\ExchangedTokenRequestedEvent; +use OCA\UserOIDC\Exception\TokenExchangeFailedException; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Attribute\NoAdminRequired; @@ -22,6 +24,7 @@ use OCP\AppFramework\Http\RedirectResponse; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Services\IInitialState; +use OCP\EventDispatcher\IEventDispatcher; use OCP\IConfig; use OCP\IL10N; @@ -43,6 +46,8 @@ public function __construct( private GithubAPIService $githubAPIService, private SecretService $secretService, private GithubIssuePrReferenceProvider $githubIssuePrReferenceProvider, + private IEventDispatcher $eventDispatcher, + private LoggerInterface $logger, private ?string $userId, ) { parent::__construct($appName, $request); @@ -57,6 +62,25 @@ public function __construct( */ #[NoAdminRequired] public function setConfig(array $values): DataResponse { + if (class_exists('OCA\UserOIDC\Event\ExchangedTokenRequestedEvent')) { + $event = new ExchangedTokenRequestedEvent('exchange'); + try { + $this->eventDispatcher->dispatchTyped($event); + } catch (TokenExchangeFailedException $e) { + $this->logger->debug('----- GITHUB [TokenService] FAILED to exchange token: ' . $e->getMessage()); + } + $token = $event->getToken(); + if ($token !== null) { + $this->logger->debug('----- GITHUB [TokenService] we have a token that expires in ' . $token->getExpiresInFromNow()); + return new DataResponse($token->jsonSerialize()); + } else { + $this->logger->debug('----- GITHUB [TokenService] Event has not been caught'); + } + } else { + $this->logger->debug('----- GITHUB [TokenService] user_oidc is not installed'); + } + + // revoke the oauth token if needed if (isset($values['token']) && $values['token'] === '') { $tokenType = $this->config->getUserValue($this->userId, Application::APP_ID, 'token_type'); From d0aeb7f16f990cb08374b4da263bf6e5f3e51baa Mon Sep 17 00:00:00 2001 From: Julien Veyssier Date: Mon, 2 Dec 2024 15:47:41 +0100 Subject: [PATCH 2/2] plop Signed-off-by: Julien Veyssier --- lib/Controller/ConfigController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/Controller/ConfigController.php b/lib/Controller/ConfigController.php index 51c3c2f3..3fc2af69 100644 --- a/lib/Controller/ConfigController.php +++ b/lib/Controller/ConfigController.php @@ -63,11 +63,12 @@ public function __construct( #[NoAdminRequired] public function setConfig(array $values): DataResponse { if (class_exists('OCA\UserOIDC\Event\ExchangedTokenRequestedEvent')) { - $event = new ExchangedTokenRequestedEvent('exchange'); + $event = new ExchangedTokenRequestedEvent('exchange2'); try { $this->eventDispatcher->dispatchTyped($event); } catch (TokenExchangeFailedException $e) { $this->logger->debug('----- GITHUB [TokenService] FAILED to exchange token: ' . $e->getMessage()); + $this->logger->debug('----- GITHUB [TokenService] EXCEPTION attributes: ' . $e->getError() . ' ______ ' . $e->getErrorDescription()); } $token = $event->getToken(); if ($token !== null) {