mirror of
https://github.com/nextcloud/app_api.git
synced 2026-01-13 20:19:21 +00:00
Added miscellaneous OCS method to get current Nextcloud instance base_url. <img width="883" alt="image" src="https://github.com/user-attachments/assets/42b98354-eabd-4fd4-b75b-fed6e49dd627"> --------- Signed-off-by: Andrey Borysenko <andrey18106x@gmail.com>
139 lines
3.9 KiB
PHP
139 lines
3.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace OCA\AppAPI\Controller;
|
|
|
|
use OCA\AppAPI\AppInfo\Application;
|
|
use OCA\AppAPI\Service\AppAPIService;
|
|
|
|
use OCA\AppAPI\Service\ExAppService;
|
|
use OCP\AppFramework\Http;
|
|
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
|
|
use OCP\AppFramework\Http\DataResponse;
|
|
use OCP\AppFramework\OCS\OCSBadRequestException;
|
|
use OCP\AppFramework\OCSController;
|
|
use OCP\IRequest;
|
|
use OCP\IURLGenerator;
|
|
|
|
class OCSExAppController extends OCSController {
|
|
protected $request;
|
|
|
|
public function __construct(
|
|
IRequest $request,
|
|
private readonly AppAPIService $service,
|
|
private readonly ExAppService $exAppService,
|
|
private readonly IURLGenerator $urlGenerator,
|
|
) {
|
|
parent::__construct(Application::APP_ID, $request);
|
|
|
|
$this->request = $request;
|
|
}
|
|
|
|
#[NoCSRFRequired]
|
|
public function getExAppsList(string $list = 'enabled'): DataResponse {
|
|
if (!in_array($list, ['all', 'enabled'])) {
|
|
return new DataResponse([], Http::STATUS_BAD_REQUEST);
|
|
}
|
|
return new DataResponse($this->exAppService->getExAppsList($list), Http::STATUS_OK);
|
|
}
|
|
|
|
#[NoCSRFRequired]
|
|
public function getExApp(string $appId): DataResponse {
|
|
$exApp = $this->exAppService->getExApp($appId);
|
|
if (!$exApp) {
|
|
return new DataResponse([], Http::STATUS_NOT_FOUND);
|
|
}
|
|
return new DataResponse($this->exAppService->formatExAppInfo($exApp), Http::STATUS_OK);
|
|
}
|
|
|
|
#[NoCSRFRequired]
|
|
public function getNextcloudUrl(): DataResponse {
|
|
return new DataResponse([
|
|
'base_url' => $this->urlGenerator->getBaseUrl(),
|
|
], Http::STATUS_OK);
|
|
}
|
|
|
|
/**
|
|
* @throws OCSBadRequestException
|
|
*/
|
|
#[NoCSRFRequired]
|
|
public function setExAppEnabled(string $appId, int $enabled): DataResponse {
|
|
$exApp = $this->exAppService->getExApp($appId);
|
|
if (!$exApp) {
|
|
return new DataResponse([], Http::STATUS_NOT_FOUND);
|
|
}
|
|
|
|
if (filter_var($enabled, FILTER_VALIDATE_BOOL)) {
|
|
if ($exApp->getEnabled()) {
|
|
throw new OCSBadRequestException('ExApp already enabled');
|
|
}
|
|
if (!$this->service->enableExApp($exApp)) {
|
|
throw new OCSBadRequestException('Failed to enable ExApp');
|
|
}
|
|
} else {
|
|
if (!$exApp->getEnabled()) {
|
|
throw new OCSBadRequestException('ExApp already disabled');
|
|
}
|
|
if (!$this->service->disableExApp($exApp)) {
|
|
throw new OCSBadRequestException('Failed to disable ExApp');
|
|
}
|
|
}
|
|
|
|
return new DataResponse();
|
|
}
|
|
|
|
#[NoCSRFRequired]
|
|
public function requestToExApp(
|
|
string $appId,
|
|
string $route,
|
|
?string $userId = null,
|
|
string $method = 'POST',
|
|
array $params = [],
|
|
array $options = [],
|
|
): DataResponse {
|
|
$exApp = $this->exAppService->getExApp($appId);
|
|
if ($exApp === null) {
|
|
return new DataResponse(['error' => sprintf('ExApp `%s` not found', $appId)]);
|
|
}
|
|
$response = $this->service->requestToExApp($exApp, $route, $userId, $method, $params, $options, $this->request);
|
|
if (is_array($response) && isset($response['error'])) {
|
|
return new DataResponse($response, Http::STATUS_BAD_REQUEST);
|
|
}
|
|
return new DataResponse([
|
|
'status_code' => $response->getStatusCode(),
|
|
'headers' => $response->getHeaders(),
|
|
'body' => $response->getBody(),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* TODO: remove later
|
|
*
|
|
* @deprecated since AppAPI 3.0.0
|
|
*/
|
|
#[NoCSRFRequired]
|
|
public function aeRequestToExApp(
|
|
string $appId,
|
|
string $route,
|
|
?string $userId = null,
|
|
string $method = 'POST',
|
|
array $params = [],
|
|
array $options = [],
|
|
): DataResponse {
|
|
$exApp = $this->exAppService->getExApp($appId);
|
|
if ($exApp === null) {
|
|
return new DataResponse(['error' => sprintf('ExApp `%s` not found', $appId)]);
|
|
}
|
|
$response = $this->service->requestToExApp($exApp, $route, $userId, $method, $params, $options, $this->request);
|
|
if (is_array($response) && isset($response['error'])) {
|
|
return new DataResponse($response, Http::STATUS_BAD_REQUEST);
|
|
}
|
|
return new DataResponse([
|
|
'status_code' => $response->getStatusCode(),
|
|
'headers' => $response->getHeaders(),
|
|
'body' => $response->getBody(),
|
|
]);
|
|
}
|
|
}
|