refactor(astrolabe): add PHP property types to fix Psalm errors

Add explicit property type declarations to IdpTokenRefresher,
CredentialsController, OAuthController, and McpServerClient classes.
This improves type safety and allows Psalm to properly infer types,
eliminating MissingPropertyType and many MixedMethodCall errors.

Also adds IClient import where needed and validates getSystemValue
returns to ensure string types before use.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Chris Coutinho
2026-01-17 21:24:56 +01:00
co-authored by Claude Opus 4.5
parent 737f10f190
commit f0ade4ad28
5 changed files with 71 additions and 326 deletions
@@ -23,13 +23,13 @@ use Psr\Log\LoggerInterface;
* Handles storing and validating app passwords for multi-user BasicAuth mode. * Handles storing and validating app passwords for multi-user BasicAuth mode.
*/ */
class CredentialsController extends Controller { class CredentialsController extends Controller {
private $tokenStorage; private McpTokenStorage $tokenStorage;
private $userSession; private IUserSession $userSession;
private $logger; private LoggerInterface $logger;
private $config; private IConfig $config;
private $client; private McpServerClient $client;
private $httpClientService; private IClientService $httpClientService;
private $urlGenerator; private IURLGenerator $urlGenerator;
public function __construct( public function __construct(
string $appName, string $appName,
+10 -9
View File
@@ -12,6 +12,7 @@ use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired; use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\RedirectResponse; use OCP\AppFramework\Http\RedirectResponse;
use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Http\TemplateResponse;
use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService; use OCP\Http\Client\IClientService;
use OCP\IConfig; use OCP\IConfig;
use OCP\IL10N; use OCP\IL10N;
@@ -32,15 +33,15 @@ use Psr\Log\LoggerInterface;
* - Confidential clients: PKCE + client_secret (defense in depth) * - Confidential clients: PKCE + client_secret (defense in depth)
*/ */
class OAuthController extends Controller { class OAuthController extends Controller {
private $config; private IConfig $config;
private $session; private ISession $session;
private $userSession; private IUserSession $userSession;
private $urlGenerator; private IURLGenerator $urlGenerator;
private $tokenStorage; private McpTokenStorage $tokenStorage;
private $logger; private LoggerInterface $logger;
private $l; private IL10N $l;
private $httpClient; private IClient $httpClient;
private $client; private McpServerClient $client;
public function __construct( public function __construct(
string $appName, string $appName,
+8 -4
View File
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace OCA\Astrolabe\Service; namespace OCA\Astrolabe\Service;
use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService; use OCP\Http\Client\IClientService;
use OCP\IConfig; use OCP\IConfig;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@@ -18,10 +19,10 @@ use Psr\Log\LoggerInterface;
* Public clients without client_secret cannot refresh tokens. * Public clients without client_secret cannot refresh tokens.
*/ */
class IdpTokenRefresher { class IdpTokenRefresher {
private $config; private IConfig $config;
private $httpClient; private IClient $httpClient;
private $logger; private LoggerInterface $logger;
private $mcpServerClient; private McpServerClient $mcpServerClient;
public function __construct( public function __construct(
IConfig $config, IConfig $config,
@@ -56,6 +57,9 @@ class IdpTokenRefresher {
private function getNextcloudBaseUrl(): string { private function getNextcloudBaseUrl(): string {
// Check for explicit internal URL config (for custom container setups) // Check for explicit internal URL config (for custom container setups)
$internalUrl = $this->config->getSystemValue('astrolabe_internal_url', ''); $internalUrl = $this->config->getSystemValue('astrolabe_internal_url', '');
if (!is_string($internalUrl)) {
$internalUrl = '';
}
if (!empty($internalUrl)) { if (!empty($internalUrl)) {
// Validate URL format // Validate URL format
if (!filter_var($internalUrl, FILTER_VALIDATE_URL)) { if (!filter_var($internalUrl, FILTER_VALIDATE_URL)) {
+7 -5
View File
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace OCA\Astrolabe\Service; namespace OCA\Astrolabe\Service;
use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService; use OCP\Http\Client\IClientService;
use OCP\IConfig; use OCP\IConfig;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@@ -16,10 +17,10 @@ use Psr\Log\LoggerInterface;
* for all management operations. * for all management operations.
*/ */
class McpServerClient { class McpServerClient {
private $httpClient; private IClient $httpClient;
private $config; private IConfig $config;
private $logger; private LoggerInterface $logger;
private $baseUrl; private string $baseUrl;
public function __construct( public function __construct(
IClientService $clientService, IClientService $clientService,
@@ -31,7 +32,8 @@ class McpServerClient {
$this->logger = $logger; $this->logger = $logger;
// Get MCP server configuration from Nextcloud config // 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';
} }
/** /**
+39 -301
View File
@@ -84,19 +84,8 @@
</UnusedClass> </UnusedClass>
</file> </file>
<file src="lib/Controller/CredentialsController.php"> <file src="lib/Controller/CredentialsController.php">
<MissingPropertyType>
<code><![CDATA[$client]]></code>
<code><![CDATA[$config]]></code>
<code><![CDATA[$httpClientService]]></code>
<code><![CDATA[$logger]]></code>
<code><![CDATA[$tokenStorage]]></code>
<code><![CDATA[$urlGenerator]]></code>
<code><![CDATA[$userSession]]></code>
</MissingPropertyType>
<MixedArgument> <MixedArgument>
<code><![CDATA[$mcpServerUrl]]></code> <code><![CDATA[$mcpServerUrl]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$userId]]></code>
</MixedArgument> </MixedArgument>
<MixedArrayAccess> <MixedArrayAccess>
<code><![CDATA[$body['error']]]></code> <code><![CDATA[$body['error']]]></code>
@@ -105,67 +94,11 @@
<MixedAssignment> <MixedAssignment>
<code><![CDATA[$body]]></code> <code><![CDATA[$body]]></code>
<code><![CDATA[$error]]></code> <code><![CDATA[$error]]></code>
<code><![CDATA[$hasAccess]]></code>
<code><![CDATA[$hasAccess]]></code>
<code><![CDATA[$httpClient]]></code>
<code><![CDATA[$httpClient]]></code>
<code><![CDATA[$mcpServerUrl]]></code> <code><![CDATA[$mcpServerUrl]]></code>
<code><![CDATA[$provisionedAt]]></code>
<code><![CDATA[$provisionedAt]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$statusCode]]></code>
<code><![CDATA[$statusCode]]></code>
<code><![CDATA[$syncType]]></code>
<code><![CDATA[$syncType]]></code>
<code><![CDATA[$user]]></code>
<code><![CDATA[$user]]></code>
<code><![CDATA[$user]]></code>
<code><![CDATA[$userId]]></code>
<code><![CDATA[$userId]]></code>
<code><![CDATA[$userId]]></code>
</MixedAssignment> </MixedAssignment>
<MixedMethodCall> <PossiblyInvalidArgument>
<code><![CDATA[debug]]></code> <code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[debug]]></code> </PossiblyInvalidArgument>
<code><![CDATA[debug]]></code>
<code><![CDATA[deleteBackgroundSyncPassword]]></code>
<code><![CDATA[deleteUserToken]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[getBackgroundSyncProvisionedAt]]></code>
<code><![CDATA[getBackgroundSyncProvisionedAt]]></code>
<code><![CDATA[getBackgroundSyncType]]></code>
<code><![CDATA[getBackgroundSyncType]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getStatusCode]]></code>
<code><![CDATA[getStatusCode]]></code>
<code><![CDATA[getSystemValue]]></code>
<code><![CDATA[getUID]]></code>
<code><![CDATA[getUID]]></code>
<code><![CDATA[getUID]]></code>
<code><![CDATA[getUser]]></code>
<code><![CDATA[getUser]]></code>
<code><![CDATA[getUser]]></code>
<code><![CDATA[hasBackgroundSyncAccess]]></code>
<code><![CDATA[hasBackgroundSyncAccess]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[newClient]]></code>
<code><![CDATA[newClient]]></code>
<code><![CDATA[post]]></code>
<code><![CDATA[storeBackgroundSyncPassword]]></code>
<code><![CDATA[warning]]></code>
<code><![CDATA[warning]]></code>
<code><![CDATA[warning]]></code>
<code><![CDATA[warning]]></code>
</MixedMethodCall>
<RiskyTruthyFalsyComparison> <RiskyTruthyFalsyComparison>
<code><![CDATA[$body['success'] ?? false]]></code> <code><![CDATA[$body['success'] ?? false]]></code>
</RiskyTruthyFalsyComparison> </RiskyTruthyFalsyComparison>
@@ -174,36 +107,19 @@
</UnusedClass> </UnusedClass>
</file> </file>
<file src="lib/Controller/OAuthController.php"> <file src="lib/Controller/OAuthController.php">
<MissingPropertyType>
<code><![CDATA[$client]]></code>
<code><![CDATA[$config]]></code>
<code><![CDATA[$httpClient]]></code>
<code><![CDATA[$l]]></code>
<code><![CDATA[$logger]]></code>
<code><![CDATA[$session]]></code>
<code><![CDATA[$tokenStorage]]></code>
<code><![CDATA[$urlGenerator]]></code>
<code><![CDATA[$userSession]]></code>
</MissingPropertyType>
<MixedArgument> <MixedArgument>
<code><![CDATA[$authEndpoint]]></code> <code><![CDATA[$authEndpoint]]></code>
<code><![CDATA[$codeVerifier]]></code> <code><![CDATA[$codeVerifier]]></code>
<code><![CDATA[$externalBaseUrl]]></code> <code><![CDATA[$discoveryUrl]]></code>
<code><![CDATA[$discoveryUrl]]></code>
<code><![CDATA[$internalBaseUrl]]></code> <code><![CDATA[$internalBaseUrl]]></code>
<code><![CDATA[$mcpServerUrl]]></code> <code><![CDATA[$mcpServerUrl]]></code>
<code><![CDATA[$mcpServerUrl]]></code> <code><![CDATA[$mcpServerUrl]]></code>
<code><![CDATA[$response->getBody()]]></code> <code><![CDATA[$tokenData['access_token']]]></code>
<code><![CDATA[$response->getBody()]]></code> <code><![CDATA[$tokenData['refresh_token'] ?? '']]></code>
<code><![CDATA[$responseBody]]></code> <code><![CDATA[$tokenEndpoint]]></code>
<code><![CDATA[$statusResponse->getBody()]]></code> <code><![CDATA[$userId]]></code>
<code><![CDATA[$statusResponse->getBody()]]></code> <code><![CDATA[time() + ($tokenData['expires_in'] ?? 3600)]]></code>
<code><![CDATA[$this->urlGenerator->linkToRoute('settings.PersonalSettings.index', [
'section' => 'astrolabe',
'error' => urlencode($e->getMessage())
])]]></code>
<code><![CDATA[$this->urlGenerator->linkToRoute('settings.PersonalSettings.index', ['section' => 'astrolabe'])]]></code>
<code><![CDATA[$this->urlGenerator->linkToRoute('settings.PersonalSettings.index', ['section' => 'astrolabe'])]]></code>
<code><![CDATA[$this->urlGenerator->linkToRoute('settings.PersonalSettings.index', ['section' => 'astrolabe'])]]></code>
</MixedArgument> </MixedArgument>
<MixedArrayAccess> <MixedArrayAccess>
<code><![CDATA[$discovery['authorization_endpoint']]]></code> <code><![CDATA[$discovery['authorization_endpoint']]]></code>
@@ -226,116 +142,35 @@
<code><![CDATA[$discovery]]></code> <code><![CDATA[$discovery]]></code>
<code><![CDATA[$discoveryUrl]]></code> <code><![CDATA[$discoveryUrl]]></code>
<code><![CDATA[$discoveryUrl]]></code> <code><![CDATA[$discoveryUrl]]></code>
<code><![CDATA[$externalBaseUrl]]></code>
<code><![CDATA[$mcpServerPublicUrl]]></code> <code><![CDATA[$mcpServerPublicUrl]]></code>
<code><![CDATA[$mcpServerUrl]]></code> <code><![CDATA[$mcpServerUrl]]></code>
<code><![CDATA[$mcpServerUrl]]></code> <code><![CDATA[$mcpServerUrl]]></code>
<code><![CDATA[$postData['client_secret']]]></code> <code><![CDATA[$postData['client_secret']]]></code>
<code><![CDATA[$redirectUri]]></code>
<code><![CDATA[$redirectUri]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$responseBody]]></code>
<code><![CDATA[$statusData]]></code> <code><![CDATA[$statusData]]></code>
<code><![CDATA[$statusData]]></code> <code><![CDATA[$statusData]]></code>
<code><![CDATA[$statusResponse]]></code>
<code><![CDATA[$statusResponse]]></code>
<code><![CDATA[$storedState]]></code> <code><![CDATA[$storedState]]></code>
<code><![CDATA[$tokenData]]></code> <code><![CDATA[$tokenData]]></code>
<code><![CDATA[$tokenEndpoint]]></code> <code><![CDATA[$tokenEndpoint]]></code>
<code><![CDATA[$user]]></code>
<code><![CDATA[$user]]></code>
<code><![CDATA[$userId]]></code>
<code><![CDATA[$userId]]></code> <code><![CDATA[$userId]]></code>
</MixedAssignment> </MixedAssignment>
<MixedInferredReturnType> <MixedInferredReturnType>
<code><![CDATA[array]]></code> <code><![CDATA[array]]></code>
</MixedInferredReturnType> </MixedInferredReturnType>
<MixedMethodCall>
<code><![CDATA[deleteUserToken]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[getAbsoluteURL]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getClientId]]></code>
<code><![CDATA[getClientId]]></code>
<code><![CDATA[getStatusCode]]></code>
<code><![CDATA[getSystemValue]]></code>
<code><![CDATA[getSystemValue]]></code>
<code><![CDATA[getSystemValue]]></code>
<code><![CDATA[getSystemValue]]></code>
<code><![CDATA[getSystemValue]]></code>
<code><![CDATA[getUID]]></code>
<code><![CDATA[getUID]]></code>
<code><![CDATA[getUID]]></code>
<code><![CDATA[getUID]]></code>
<code><![CDATA[getUser]]></code>
<code><![CDATA[getUser]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[linkToRoute]]></code>
<code><![CDATA[linkToRoute]]></code>
<code><![CDATA[linkToRoute]]></code>
<code><![CDATA[linkToRoute]]></code>
<code><![CDATA[linkToRouteAbsolute]]></code>
<code><![CDATA[linkToRouteAbsolute]]></code>
<code><![CDATA[post]]></code>
<code><![CDATA[remove]]></code>
<code><![CDATA[remove]]></code>
<code><![CDATA[remove]]></code>
<code><![CDATA[remove]]></code>
<code><![CDATA[remove]]></code>
<code><![CDATA[remove]]></code>
<code><![CDATA[set]]></code>
<code><![CDATA[set]]></code>
<code><![CDATA[set]]></code>
<code><![CDATA[storeUserToken]]></code>
<code><![CDATA[t]]></code>
<code><![CDATA[t]]></code>
</MixedMethodCall>
<MixedOperand> <MixedOperand>
<code><![CDATA[$authEndpoint]]></code> <code><![CDATA[$authEndpoint]]></code>
<code><![CDATA[$tokenData['expires_in'] ?? 3600]]></code> <code><![CDATA[$tokenData['expires_in'] ?? 3600]]></code>
<code><![CDATA[$user->getUID()]]></code>
<code><![CDATA[$user->getUID()]]></code>
</MixedOperand> </MixedOperand>
<MixedReturnStatement> <MixedReturnStatement>
<code><![CDATA[$tokenData]]></code> <code><![CDATA[$tokenData]]></code>
</MixedReturnStatement> </MixedReturnStatement>
<PossiblyInvalidArgument>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$responseBody]]></code>
<code><![CDATA[$responseBody]]></code>
<code><![CDATA[$statusResponse->getBody()]]></code>
<code><![CDATA[$statusResponse->getBody()]]></code>
</PossiblyInvalidArgument>
<RiskyTruthyFalsyComparison> <RiskyTruthyFalsyComparison>
<code><![CDATA[$error]]></code> <code><![CDATA[$error]]></code>
</RiskyTruthyFalsyComparison> </RiskyTruthyFalsyComparison>
@@ -400,18 +235,10 @@
</RiskyTruthyFalsyComparison> </RiskyTruthyFalsyComparison>
</file> </file>
<file src="lib/Service/IdpTokenRefresher.php"> <file src="lib/Service/IdpTokenRefresher.php">
<MissingPropertyType>
<code><![CDATA[$config]]></code>
<code><![CDATA[$httpClient]]></code>
<code><![CDATA[$logger]]></code>
<code><![CDATA[$mcpServerClient]]></code>
</MissingPropertyType>
<MixedArgument> <MixedArgument>
<code><![CDATA[$discoveryResponse->getBody()]]></code> <code><![CDATA[$discoveryUrl]]></code>
<code><![CDATA[$internalUrl]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$statusResponse->getBody()]]></code>
<code><![CDATA[$tokenData]]></code> <code><![CDATA[$tokenData]]></code>
<code><![CDATA[$tokenEndpoint]]></code>
</MixedArgument> </MixedArgument>
<MixedArrayAccess> <MixedArrayAccess>
<code><![CDATA[$discovery['token_endpoint']]]></code> <code><![CDATA[$discovery['token_endpoint']]]></code>
@@ -421,70 +248,37 @@
<MixedAssignment> <MixedAssignment>
<code><![CDATA[$clientSecret]]></code> <code><![CDATA[$clientSecret]]></code>
<code><![CDATA[$discovery]]></code> <code><![CDATA[$discovery]]></code>
<code><![CDATA[$discoveryResponse]]></code>
<code><![CDATA[$discoveryUrl]]></code> <code><![CDATA[$discoveryUrl]]></code>
<code><![CDATA[$internalUrl]]></code> <code><![CDATA[$internalUrl]]></code>
<code><![CDATA[$mcpServerUrl]]></code> <code><![CDATA[$mcpServerUrl]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$statusData]]></code> <code><![CDATA[$statusData]]></code>
<code><![CDATA[$statusResponse]]></code>
<code><![CDATA[$tokenData]]></code> <code><![CDATA[$tokenData]]></code>
<code><![CDATA[$tokenEndpoint]]></code> <code><![CDATA[$tokenEndpoint]]></code>
</MixedAssignment> </MixedAssignment>
<MixedInferredReturnType> <MixedInferredReturnType>
<code><![CDATA[array|null]]></code> <code><![CDATA[array|null]]></code>
</MixedInferredReturnType> </MixedInferredReturnType>
<MixedMethodCall>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getClientId]]></code>
<code><![CDATA[getSystemValue]]></code>
<code><![CDATA[getSystemValue]]></code>
<code><![CDATA[getSystemValue]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[info]]></code>
<code><![CDATA[post]]></code>
<code><![CDATA[warning]]></code>
</MixedMethodCall>
<MixedOperand> <MixedOperand>
<code><![CDATA[$mcpServerUrl]]></code> <code><![CDATA[$mcpServerUrl]]></code>
</MixedOperand> </MixedOperand>
<MixedReturnStatement> <MixedReturnStatement>
<code><![CDATA[$tokenData]]></code> <code><![CDATA[$tokenData]]></code>
</MixedReturnStatement> </MixedReturnStatement>
<PossiblyInvalidArgument>
<code><![CDATA[$discoveryResponse->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$statusResponse->getBody()]]></code>
</PossiblyInvalidArgument>
<PossiblyUnusedMethod> <PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code> <code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod> </PossiblyUnusedMethod>
</file> </file>
<file src="lib/Service/McpServerClient.php"> <file src="lib/Service/McpServerClient.php">
<MissingPropertyType>
<code><![CDATA[$baseUrl]]></code>
<code><![CDATA[$config]]></code>
<code><![CDATA[$httpClient]]></code>
<code><![CDATA[$logger]]></code>
</MissingPropertyType>
<MixedArgument> <MixedArgument>
<code><![CDATA[$clientId]]></code> <code><![CDATA[$clientId]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
</MixedArgument> </MixedArgument>
<MixedAssignment> <MixedAssignment>
<code><![CDATA[$baseUrl]]></code>
<code><![CDATA[$clientId]]></code> <code><![CDATA[$clientId]]></code>
<code><![CDATA[$data]]></code> <code><![CDATA[$data]]></code>
<code><![CDATA[$data]]></code> <code><![CDATA[$data]]></code>
@@ -497,17 +291,6 @@
<code><![CDATA[$data]]></code> <code><![CDATA[$data]]></code>
<code><![CDATA[$data]]></code> <code><![CDATA[$data]]></code>
<code><![CDATA[$data]]></code> <code><![CDATA[$data]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
<code><![CDATA[$response]]></code>
</MixedAssignment> </MixedAssignment>
<MixedInferredReturnType> <MixedInferredReturnType>
<code><![CDATA[array]]></code> <code><![CDATA[array]]></code>
@@ -582,61 +365,7 @@
<code><![CDATA[array{success?: bool, error?: string}]]></code> <code><![CDATA[array{success?: bool, error?: string}]]></code>
<code><![CDATA[array{success?: bool, message?: string, error?: string}]]></code> <code><![CDATA[array{success?: bool, message?: string, error?: string}]]></code>
<code><![CDATA[string]]></code> <code><![CDATA[string]]></code>
<code><![CDATA[string]]></code>
</MixedInferredReturnType> </MixedInferredReturnType>
<MixedMethodCall>
<code><![CDATA[debug]]></code>
<code><![CDATA[delete]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[error]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[get]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getBody]]></code>
<code><![CDATA[getStatusCode]]></code>
<code><![CDATA[getSystemValue]]></code>
<code><![CDATA[getSystemValue]]></code>
<code><![CDATA[post]]></code>
<code><![CDATA[post]]></code>
<code><![CDATA[post]]></code>
<code><![CDATA[post]]></code>
<code><![CDATA[warning]]></code>
</MixedMethodCall>
<MixedOperand>
<code><![CDATA[$this->baseUrl]]></code>
<code><![CDATA[$this->baseUrl]]></code>
<code><![CDATA[$this->baseUrl]]></code>
<code><![CDATA[$this->baseUrl]]></code>
<code><![CDATA[$this->baseUrl]]></code>
<code><![CDATA[$this->baseUrl]]></code>
<code><![CDATA[$this->baseUrl]]></code>
<code><![CDATA[$this->baseUrl]]></code>
<code><![CDATA[$this->baseUrl]]></code>
<code><![CDATA[$this->baseUrl]]></code>
<code><![CDATA[$this->baseUrl]]></code>
</MixedOperand>
<MixedReturnStatement> <MixedReturnStatement>
<code><![CDATA[$data]]></code> <code><![CDATA[$data]]></code>
<code><![CDATA[$data]]></code> <code><![CDATA[$data]]></code>
@@ -649,12 +378,23 @@
<code><![CDATA[$data]]></code> <code><![CDATA[$data]]></code>
<code><![CDATA[$data]]></code> <code><![CDATA[$data]]></code>
<code><![CDATA[$data]]></code> <code><![CDATA[$data]]></code>
<code><![CDATA[$this->baseUrl]]></code>
<code><![CDATA[$this->config->getSystemValue('mcp_server_public_url', $this->baseUrl)]]></code> <code><![CDATA[$this->config->getSystemValue('mcp_server_public_url', $this->baseUrl)]]></code>
</MixedReturnStatement> </MixedReturnStatement>
<PossiblyInvalidArgument>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
<code><![CDATA[$response->getBody()]]></code>
</PossiblyInvalidArgument>
<PossiblyUnusedMethod> <PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code> <code><![CDATA[__construct]]></code>
<code><![CDATA[getClientId]]></code>
<code><![CDATA[isServerReachable]]></code> <code><![CDATA[isServerReachable]]></code>
</PossiblyUnusedMethod> </PossiblyUnusedMethod>
</file> </file>
@@ -686,8 +426,6 @@
</MixedReturnStatement> </MixedReturnStatement>
<PossiblyUnusedMethod> <PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code> <code><![CDATA[__construct]]></code>
<code><![CDATA[deleteBackgroundSyncPassword]]></code>
<code><![CDATA[storeBackgroundSyncPassword]]></code>
</PossiblyUnusedMethod> </PossiblyUnusedMethod>
<RiskyTruthyFalsyComparison> <RiskyTruthyFalsyComparison>
<code><![CDATA[!$token]]></code> <code><![CDATA[!$token]]></code>