diff --git a/third_party/astrolabe/lib/Controller/CredentialsController.php b/third_party/astrolabe/lib/Controller/CredentialsController.php
index 2ba87ff..4d414a2 100644
--- a/third_party/astrolabe/lib/Controller/CredentialsController.php
+++ b/third_party/astrolabe/lib/Controller/CredentialsController.php
@@ -23,13 +23,13 @@ use Psr\Log\LoggerInterface;
* Handles storing and validating app passwords for multi-user BasicAuth mode.
*/
class CredentialsController extends Controller {
- private $tokenStorage;
- private $userSession;
- private $logger;
- private $config;
- private $client;
- private $httpClientService;
- private $urlGenerator;
+ private McpTokenStorage $tokenStorage;
+ private IUserSession $userSession;
+ private LoggerInterface $logger;
+ private IConfig $config;
+ private McpServerClient $client;
+ private IClientService $httpClientService;
+ private IURLGenerator $urlGenerator;
public function __construct(
string $appName,
diff --git a/third_party/astrolabe/lib/Controller/OAuthController.php b/third_party/astrolabe/lib/Controller/OAuthController.php
index b6698b2..aa21811 100644
--- a/third_party/astrolabe/lib/Controller/OAuthController.php
+++ b/third_party/astrolabe/lib/Controller/OAuthController.php
@@ -12,6 +12,7 @@ use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\RedirectResponse;
use OCP\AppFramework\Http\TemplateResponse;
+use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService;
use OCP\IConfig;
use OCP\IL10N;
@@ -32,15 +33,15 @@ use Psr\Log\LoggerInterface;
* - Confidential clients: PKCE + client_secret (defense in depth)
*/
class OAuthController extends Controller {
- private $config;
- private $session;
- private $userSession;
- private $urlGenerator;
- private $tokenStorage;
- private $logger;
- private $l;
- private $httpClient;
- private $client;
+ private IConfig $config;
+ private ISession $session;
+ private IUserSession $userSession;
+ private IURLGenerator $urlGenerator;
+ private McpTokenStorage $tokenStorage;
+ private LoggerInterface $logger;
+ private IL10N $l;
+ private IClient $httpClient;
+ private McpServerClient $client;
public function __construct(
string $appName,
diff --git a/third_party/astrolabe/lib/Service/IdpTokenRefresher.php b/third_party/astrolabe/lib/Service/IdpTokenRefresher.php
index f35179d..682e105 100644
--- a/third_party/astrolabe/lib/Service/IdpTokenRefresher.php
+++ b/third_party/astrolabe/lib/Service/IdpTokenRefresher.php
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace OCA\Astrolabe\Service;
+use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService;
use OCP\IConfig;
use Psr\Log\LoggerInterface;
@@ -18,10 +19,10 @@ use Psr\Log\LoggerInterface;
* Public clients without client_secret cannot refresh tokens.
*/
class IdpTokenRefresher {
- private $config;
- private $httpClient;
- private $logger;
- private $mcpServerClient;
+ private IConfig $config;
+ private IClient $httpClient;
+ private LoggerInterface $logger;
+ private McpServerClient $mcpServerClient;
public function __construct(
IConfig $config,
@@ -56,6 +57,9 @@ class IdpTokenRefresher {
private function getNextcloudBaseUrl(): string {
// Check for explicit internal URL config (for custom container setups)
$internalUrl = $this->config->getSystemValue('astrolabe_internal_url', '');
+ if (!is_string($internalUrl)) {
+ $internalUrl = '';
+ }
if (!empty($internalUrl)) {
// Validate URL format
if (!filter_var($internalUrl, FILTER_VALIDATE_URL)) {
diff --git a/third_party/astrolabe/lib/Service/McpServerClient.php b/third_party/astrolabe/lib/Service/McpServerClient.php
index 2338135..4316ed9 100644
--- a/third_party/astrolabe/lib/Service/McpServerClient.php
+++ b/third_party/astrolabe/lib/Service/McpServerClient.php
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace OCA\Astrolabe\Service;
+use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService;
use OCP\IConfig;
use Psr\Log\LoggerInterface;
@@ -16,10 +17,10 @@ use Psr\Log\LoggerInterface;
* for all management operations.
*/
class McpServerClient {
- private $httpClient;
- private $config;
- private $logger;
- private $baseUrl;
+ private IClient $httpClient;
+ private IConfig $config;
+ private LoggerInterface $logger;
+ private string $baseUrl;
public function __construct(
IClientService $clientService,
@@ -31,7 +32,8 @@ class McpServerClient {
$this->logger = $logger;
// Get MCP server configuration from Nextcloud config
- $this->baseUrl = $this->config->getSystemValue('mcp_server_url', 'http://localhost:8000');
+ $baseUrl = $this->config->getSystemValue('mcp_server_url', 'http://localhost:8000');
+ $this->baseUrl = is_string($baseUrl) ? $baseUrl : 'http://localhost:8000';
}
/**
diff --git a/third_party/astrolabe/psalm-baseline.xml b/third_party/astrolabe/psalm-baseline.xml
index 8cd76ea..cf66cc8 100644
--- a/third_party/astrolabe/psalm-baseline.xml
+++ b/third_party/astrolabe/psalm-baseline.xml
@@ -84,19 +84,8 @@
-
-
-
-
-
-
-
-
-
- getBody()]]>
-
@@ -105,67 +94,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ getBody()]]>
+
@@ -174,36 +107,19 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
- getBody()]]>
- getBody()]]>
-
- getBody()]]>
- getBody()]]>
- urlGenerator->linkToRoute('settings.PersonalSettings.index', [
- 'section' => 'astrolabe',
- 'error' => urlencode($e->getMessage())
- ])]]>
- urlGenerator->linkToRoute('settings.PersonalSettings.index', ['section' => 'astrolabe'])]]>
- urlGenerator->linkToRoute('settings.PersonalSettings.index', ['section' => 'astrolabe'])]]>
- urlGenerator->linkToRoute('settings.PersonalSettings.index', ['section' => 'astrolabe'])]]>
+
+
+
+
+
@@ -226,116 +142,35 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- getUID()]]>
- getUID()]]>
+
+ getBody()]]>
+ getBody()]]>
+
+
+ getBody()]]>
+ getBody()]]>
+
@@ -400,18 +235,10 @@
-
-
-
-
-
-
- getBody()]]>
-
- getBody()]]>
- getBody()]]>
+
+
@@ -421,70 +248,37 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ getBody()]]>
+ getBody()]]>
+ getBody()]]>
+
-
-
-
-
-
-
- getBody()]]>
- getBody()]]>
- getBody()]]>
- getBody()]]>
- getBody()]]>
- getBody()]]>
- getBody()]]>
- getBody()]]>
- getBody()]]>
- getBody()]]>
- getBody()]]>
+
@@ -497,17 +291,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -582,61 +365,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- baseUrl]]>
- baseUrl]]>
- baseUrl]]>
- baseUrl]]>
- baseUrl]]>
- baseUrl]]>
- baseUrl]]>
- baseUrl]]>
- baseUrl]]>
- baseUrl]]>
- baseUrl]]>
-
@@ -649,12 +378,23 @@
- baseUrl]]>
config->getSystemValue('mcp_server_public_url', $this->baseUrl)]]>
+
+ getBody()]]>
+ getBody()]]>
+ getBody()]]>
+ getBody()]]>
+ getBody()]]>
+ getBody()]]>
+ getBody()]]>
+ getBody()]]>
+ getBody()]]>
+ getBody()]]>
+ getBody()]]>
+
-
@@ -686,8 +426,6 @@
-
-