diff options
Diffstat (limited to 'core/Controller/OCSController.php')
-rw-r--r-- | core/Controller/OCSController.php | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/core/Controller/OCSController.php b/core/Controller/OCSController.php new file mode 100644 index 00000000000..fb0280479c4 --- /dev/null +++ b/core/Controller/OCSController.php @@ -0,0 +1,119 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OC\Core\Controller; + +use OC\CapabilitiesManager; +use OC\Security\IdentityProof\Manager; +use OCP\AppFramework\Http; +use OCP\AppFramework\Http\Attribute\ApiRoute; +use OCP\AppFramework\Http\Attribute\BruteForceProtection; +use OCP\AppFramework\Http\Attribute\OpenAPI; +use OCP\AppFramework\Http\Attribute\PublicPage; +use OCP\AppFramework\Http\DataResponse; +use OCP\IRequest; +use OCP\IUserManager; +use OCP\IUserSession; +use OCP\ServerVersion; +use OCP\Util; + +class OCSController extends \OCP\AppFramework\OCSController { + public function __construct( + string $appName, + IRequest $request, + private CapabilitiesManager $capabilitiesManager, + private IUserSession $userSession, + private IUserManager $userManager, + private Manager $keyManager, + private ServerVersion $serverVersion, + ) { + parent::__construct($appName, $request); + } + + #[PublicPage] + #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] + #[ApiRoute(verb: 'GET', url: '/config', root: '')] + public function getConfig(): DataResponse { + $data = [ + 'version' => '1.7', + 'website' => 'Nextcloud', + 'host' => $this->request->getServerHost(), + 'contact' => '', + 'ssl' => 'false', + ]; + + return new DataResponse($data); + } + + /** + * Get the capabilities + * + * @return DataResponse<Http::STATUS_OK, array{version: array{major: int, minor: int, micro: int, string: string, edition: '', extendedSupport: bool}, capabilities: array<string, mixed>}, array{}> + * + * 200: Capabilities returned + */ + #[PublicPage] + #[ApiRoute(verb: 'GET', url: '/capabilities', root: '/cloud')] + public function getCapabilities(): DataResponse { + $result = []; + $result['version'] = [ + 'major' => $this->serverVersion->getMajorVersion(), + 'minor' => $this->serverVersion->getMinorVersion(), + 'micro' => $this->serverVersion->getPatchVersion(), + 'string' => $this->serverVersion->getVersionString(), + 'edition' => '', + 'extendedSupport' => Util::hasExtendedSupport() + ]; + + if ($this->userSession->isLoggedIn()) { + $result['capabilities'] = $this->capabilitiesManager->getCapabilities(); + } else { + $result['capabilities'] = $this->capabilitiesManager->getCapabilities(true); + } + + $response = new DataResponse($result); + $response->setETag(md5(json_encode($result))); + return $response; + } + + #[PublicPage] + #[BruteForceProtection(action: 'login')] + #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] + #[ApiRoute(verb: 'POST', url: '/check', root: '/person')] + public function personCheck(string $login = '', string $password = ''): DataResponse { + if ($login !== '' && $password !== '') { + if ($this->userManager->checkPassword($login, $password)) { + return new DataResponse([ + 'person' => [ + 'personid' => $login + ] + ]); + } + + $response = new DataResponse([], 102); + $response->throttle(); + return $response; + } + return new DataResponse([], 101); + } + + #[PublicPage] + #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] + #[ApiRoute(verb: 'GET', url: '/key/{cloudId}', root: '/identityproof')] + public function getIdentityProof(string $cloudId): DataResponse { + $userObject = $this->userManager->get($cloudId); + + if ($userObject !== null) { + $key = $this->keyManager->getKey($userObject); + $data = [ + 'public' => $key->getPublic(), + ]; + return new DataResponse($data); + } + + return new DataResponse(['Account not found'], 404); + } +} |