Jake Vanderwerf
2026-09-18 a6413da67a4579866f0fd0323ddb23a7b6b9654a
inc/integrations/OAuth.php
@@ -58,6 +58,7 @@
   function addOAuthActions():void
   {
      if ($this->isSetUp()) {
      $actions = [
         [
            'name'      => 'Connect to Service',
@@ -67,6 +68,7 @@
         ],
         [
            'name'      => 'Disconnect from Service',
               'label'     => 'Disconnect',
            'icon'      => 'plugs-disconnected',
            'action' => [$this, 'handleOAuthDisconnect']
         ],
@@ -80,6 +82,7 @@
         $this->addAction($a['name'], $a['action'], $a['slug']??null, $a['icon']??null, $a['label']??null);
      }
   }
   }
      public function hasOAuthCredentials(?int $userID = null):bool
      {
         if ($userID !== $this->userID) {
@@ -109,7 +112,7 @@
      public function revokeOAuth():bool
      {
         if (empty($this->oauth['revoke'])) {
         if (empty($this->oauth->getRevoke())) {
            error_log('No revoke url set for '.$this->service_name);
            return false;
         }
@@ -117,7 +120,7 @@
         if (empty($credentials['access_token'])) {
            error_log('Could not send revoke request, no access_token for '.$this->service_name);
         } else {
            $response = $this->postOAuthRequest($this->oauth['revoke'], [
            $response = $this->postOAuthRequest($this->oauth->getRevoke(), [
               'body'   => [
                  'token'  => $credentials['access_token']
               ]
@@ -328,18 +331,21 @@
      $credentials = $this->loadCredentials();
      $hasCredentials = $this->hasValidOAuth();
      $returnURL = $this->getReturnURL();
      if ($hasCredentials) {
      if (!$this->isSetUp()) {
         return '';
      }
      if (!$hasCredentials) {
         return sprintf(
         '<div class="oauth-connect">
            <h3>Connect to your %s account</h3>
            <a href="%s" class="btn jvb-oauth-connect" data-service="%s">%s Authorize Connection</a>',
            <a href="%s" class="btn jvb-oauth-connect" data-service="%s">%s Authorize Connection</a>
            </div>',
            $this->title,
            $this->getOAuthURL($returnURL),
            esc_attr($this->service_name),
            $this->outputIcon($this->icon)
         );
      }
      } else {
      $form = sprintf(
         '<details open>
         <summary>Connected Account
@@ -364,9 +370,10 @@
      if (method_exists($this, 'renderOAuthConnectedOptions')) {
         $form .= $this->renderOAuthConnectedOptions();
      }
      $form .= '</details';
         $form .= '</details>';
      return $form;
   }
   }
   /**
    * @return string Outputs additional information after the basic OAuth connection
@@ -380,7 +387,7 @@
   {
      $credentials = $this->loadCredentials();
      if (empty($this->oauth['authorize'])) {
      if (empty($this->oauth->getAuthorize())) {
         $this->logError('getOAuthUrl', 'OAuth authorize URL not configured');
         return '';
      }
@@ -418,7 +425,7 @@
         $params = $this->addOAuthParams($params);
      }
      return $this->oauth['authorize'] . '?' . http_build_query($params);
      return $this->oauth->getAuthorize() . '?' . http_build_query($params);
   }
   protected function getRedirectUri():string