aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/Controller/AppPasswordController.php5
-rw-r--r--core/Controller/AutoCompleteController.php2
-rw-r--r--core/Controller/AvatarController.php7
-rw-r--r--core/Controller/CSRFTokenController.php2
-rw-r--r--core/Controller/ClientFlowLoginController.php5
-rw-r--r--core/Controller/ClientFlowLoginV2Controller.php8
-rw-r--r--core/Controller/CollaborationResourcesController.php8
-rw-r--r--core/Controller/ContactsMenuController.php3
-rw-r--r--core/Controller/CssController.php2
-rw-r--r--core/Controller/ErrorController.php3
-rw-r--r--core/Controller/GuestAvatarController.php3
-rw-r--r--core/Controller/HoverCardController.php2
-rw-r--r--core/Controller/JsController.php2
-rw-r--r--core/Controller/LoginController.php5
-rw-r--r--core/Controller/LostController.php4
-rw-r--r--core/Controller/NavigationController.php3
-rw-r--r--core/Controller/OCJSController.php2
-rw-r--r--core/Controller/OCMController.php2
-rw-r--r--core/Controller/OCSController.php5
-rw-r--r--core/Controller/PreviewController.php3
-rw-r--r--core/Controller/ProfileApiController.php2
-rw-r--r--core/Controller/ProfilePageController.php2
-rw-r--r--core/Controller/RecommendedAppsController.php2
-rw-r--r--core/Controller/ReferenceApiController.php6
-rw-r--r--core/Controller/ReferenceController.php2
-rw-r--r--core/Controller/SearchController.php2
-rw-r--r--core/Controller/TextProcessingApiController.php6
-rw-r--r--core/Controller/TextToImageApiController.php7
-rw-r--r--core/Controller/TranslationApiController.php3
-rw-r--r--core/Controller/TwoFactorChallengeController.php7
-rw-r--r--core/Controller/UnifiedSearchController.php3
-rw-r--r--core/Controller/UnsupportedBrowserController.php2
-rw-r--r--core/Controller/UserController.php2
-rw-r--r--core/Controller/WalledGardenController.php2
-rw-r--r--core/Controller/WebAuthnController.php3
-rw-r--r--core/Controller/WellKnownController.php2
-rw-r--r--core/Controller/WhatsNewController.php3
-rw-r--r--core/Controller/WipeController.php3
-rw-r--r--core/openapi.json4372
-rw-r--r--core/routes.php133
40 files changed, 2321 insertions, 2319 deletions
diff --git a/core/Controller/AppPasswordController.php b/core/Controller/AppPasswordController.php
index 2575729fe85..11aca8ef329 100644
--- a/core/Controller/AppPasswordController.php
+++ b/core/Controller/AppPasswordController.php
@@ -33,6 +33,7 @@ use OC\Authentication\Token\IProvider;
use OC\Authentication\Token\IToken;
use OC\User\Session;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\UseSession;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSForbiddenException;
@@ -74,6 +75,7 @@ class AppPasswordController extends \OCP\AppFramework\OCSController {
*
* 200: App password returned
*/
+ #[ApiRoute(verb: 'GET', url: '/getapppassword', root: '/core')]
public function getAppPassword(): DataResponse {
// We do not allow the creation of new tokens if this is an app password
if ($this->session->exists('app_password')) {
@@ -125,6 +127,7 @@ class AppPasswordController extends \OCP\AppFramework\OCSController {
*
* 200: App password deleted successfully
*/
+ #[ApiRoute(verb: 'DELETE', url: '/apppassword', root: '/core')]
public function deleteAppPassword(): DataResponse {
if (!$this->session->exists('app_password')) {
throw new OCSForbiddenException('no app password in use');
@@ -152,6 +155,7 @@ class AppPasswordController extends \OCP\AppFramework\OCSController {
*
* 200: App password returned
*/
+ #[ApiRoute(verb: 'POST', url: '/apppassword/rotate', root: '/core')]
public function rotateAppPassword(): DataResponse {
if (!$this->session->exists('app_password')) {
throw new OCSForbiddenException('no app password in use');
@@ -187,6 +191,7 @@ class AppPasswordController extends \OCP\AppFramework\OCSController {
* 403: Password confirmation failed
*/
#[UseSession]
+ #[ApiRoute(verb: 'PUT', url: '/apppassword/confirm', root: '/core')]
public function confirmUserPassword(string $password): DataResponse {
$loginName = $this->userSession->getLoginName();
$loginResult = $this->userManager->checkPassword($loginName, $password);
diff --git a/core/Controller/AutoCompleteController.php b/core/Controller/AutoCompleteController.php
index c873603fd0e..20170546ce5 100644
--- a/core/Controller/AutoCompleteController.php
+++ b/core/Controller/AutoCompleteController.php
@@ -32,6 +32,7 @@ namespace OC\Core\Controller;
use OCA\Core\ResponseDefinitions;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\Collaboration\AutoComplete\AutoCompleteEvent;
@@ -72,6 +73,7 @@ class AutoCompleteController extends OCSController {
*
* 200: Autocomplete results returned
*/
+ #[ApiRoute(verb: 'GET', url: '/autocomplete/get', root: '/core')]
public function get(string $search, ?string $itemType, ?string $itemId, ?string $sorter = null, array $shareTypes = [IShare::TYPE_USER], int $limit = 10): DataResponse {
// if enumeration/user listings are disabled, we'll receive an empty
// result from search() – thus nothing else to do here.
diff --git a/core/Controller/AvatarController.php b/core/Controller/AvatarController.php
index 32858b52612..03f59fd6439 100644
--- a/core/Controller/AvatarController.php
+++ b/core/Controller/AvatarController.php
@@ -34,6 +34,7 @@ namespace OC\Core\Controller;
use OC\AppFramework\Utility\TimeFactory;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\DataDisplayResponse;
use OCP\AppFramework\Http\FileDisplayResponse;
use OCP\AppFramework\Http\JSONResponse;
@@ -82,6 +83,7 @@ class AvatarController extends Controller {
* 200: Avatar returned
* 404: Avatar not found
*/
+ #[FrontpageRoute(verb: 'GET', url: '/avatar/{userId}/{size}/dark')]
public function getAvatarDark(string $userId, int $size) {
if ($size <= 64) {
if ($size !== 64) {
@@ -128,6 +130,7 @@ class AvatarController extends Controller {
* 200: Avatar returned
* 404: Avatar not found
*/
+ #[FrontpageRoute(verb: 'GET', url: '/avatar/{userId}/{size}')]
public function getAvatar(string $userId, int $size) {
if ($size <= 64) {
if ($size !== 64) {
@@ -161,6 +164,7 @@ class AvatarController extends Controller {
/**
* @NoAdminRequired
*/
+ #[FrontpageRoute(verb: 'POST', url: '/avatar/')]
public function postAvatar(?string $path = null): JSONResponse {
$files = $this->request->getUploadedFile('files');
@@ -283,6 +287,7 @@ class AvatarController extends Controller {
/**
* @NoAdminRequired
*/
+ #[FrontpageRoute(verb: 'DELETE', url: '/avatar/')]
public function deleteAvatar(): JSONResponse {
try {
$avatar = $this->avatarManager->getAvatar($this->userId);
@@ -299,6 +304,7 @@ class AvatarController extends Controller {
*
* @return JSONResponse|DataDisplayResponse
*/
+ #[FrontpageRoute(verb: 'GET', url: '/avatar/tmp')]
public function getTmpAvatar() {
$tmpAvatar = $this->cache->get('tmpAvatar');
if (is_null($tmpAvatar)) {
@@ -325,6 +331,7 @@ class AvatarController extends Controller {
/**
* @NoAdminRequired
*/
+ #[FrontpageRoute(verb: 'POST', url: '/avatar/cropped')]
public function postCroppedAvatar(?array $crop = null): JSONResponse {
if (is_null($crop)) {
return new JSONResponse(['data' => ['message' => $this->l10n->t("No crop data provided")]],
diff --git a/core/Controller/CSRFTokenController.php b/core/Controller/CSRFTokenController.php
index 046d809702c..13ea0011146 100644
--- a/core/Controller/CSRFTokenController.php
+++ b/core/Controller/CSRFTokenController.php
@@ -30,6 +30,7 @@ namespace OC\Core\Controller;
use OC\Security\CSRF\CsrfTokenManager;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IRequest;
@@ -49,6 +50,7 @@ class CSRFTokenController extends Controller {
* @NoCSRFRequired
* @PublicPage
*/
+ #[FrontpageRoute(verb: 'GET', url: '/csrftoken')]
public function index(): JSONResponse {
if (!$this->request->passesStrictCookieCheck()) {
return new JSONResponse([], Http::STATUS_FORBIDDEN);
diff --git a/core/Controller/ClientFlowLoginController.php b/core/Controller/ClientFlowLoginController.php
index d6e381b3674..76079e710e3 100644
--- a/core/Controller/ClientFlowLoginController.php
+++ b/core/Controller/ClientFlowLoginController.php
@@ -41,6 +41,7 @@ use OCA\OAuth2\Db\AccessTokenMapper;
use OCA\OAuth2\Db\ClientMapper;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\Attribute\UseSession;
use OCP\AppFramework\Http\Response;
@@ -113,6 +114,7 @@ class ClientFlowLoginController extends Controller {
* @NoCSRFRequired
*/
#[UseSession]
+ #[FrontpageRoute(verb: 'GET', url: '/login/flow')]
public function showAuthPickerPage(string $clientIdentifier = '', string $user = '', int $direct = 0): StandaloneTemplateResponse {
$clientName = $this->getClientName();
$client = null;
@@ -180,6 +182,7 @@ class ClientFlowLoginController extends Controller {
* @NoSameSiteCookieRequired
*/
#[UseSession]
+ #[FrontpageRoute(verb: 'GET', url: '/login/flow/grant')]
public function grantPage(string $stateToken = '',
string $clientIdentifier = '',
int $direct = 0): StandaloneTemplateResponse {
@@ -232,6 +235,7 @@ class ClientFlowLoginController extends Controller {
* @return Http\RedirectResponse|Response
*/
#[UseSession]
+ #[FrontpageRoute(verb: 'POST', url: '/login/flow')]
public function generateAppPassword(string $stateToken,
string $clientIdentifier = '') {
if (!$this->isValidToken($stateToken)) {
@@ -323,6 +327,7 @@ class ClientFlowLoginController extends Controller {
/**
* @PublicPage
*/
+ #[FrontpageRoute(verb: 'POST', url: '/login/flow/apptoken')]
public function apptokenRedirect(string $stateToken, string $user, string $password): Response {
if (!$this->isValidToken($stateToken)) {
return $this->stateTokenForbiddenResponse();
diff --git a/core/Controller/ClientFlowLoginV2Controller.php b/core/Controller/ClientFlowLoginV2Controller.php
index f5bd2d216dd..19c1f9ce251 100644
--- a/core/Controller/ClientFlowLoginV2Controller.php
+++ b/core/Controller/ClientFlowLoginV2Controller.php
@@ -33,6 +33,7 @@ use OC\Core\Service\LoginFlowV2Service;
use OCA\Core\ResponseDefinitions;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\Attribute\UseSession;
use OCP\AppFramework\Http\JSONResponse;
@@ -84,6 +85,7 @@ class ClientFlowLoginV2Controller extends Controller {
* 200: Login flow credentials returned
* 404: Login flow not found or completed
*/
+ #[FrontpageRoute(verb: 'POST', url: '/login/v2/poll')]
public function poll(string $token): JSONResponse {
try {
$creds = $this->loginFlowV2Service->poll($token);
@@ -100,6 +102,7 @@ class ClientFlowLoginV2Controller extends Controller {
*/
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
#[UseSession]
+ #[FrontpageRoute(verb: 'GET', url: '/login/v2/flow/{token}')]
public function landing(string $token, $user = ''): Response {
if (!$this->loginFlowV2Service->startLoginFlow($token)) {
return $this->loginTokenForbiddenResponse();
@@ -118,6 +121,7 @@ class ClientFlowLoginV2Controller extends Controller {
*/
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
#[UseSession]
+ #[FrontpageRoute(verb: 'GET', url: '/login/v2/flow')]
public function showAuthPickerPage($user = ''): StandaloneTemplateResponse {
try {
$flow = $this->getFlowByLoginToken();
@@ -152,6 +156,7 @@ class ClientFlowLoginV2Controller extends Controller {
*/
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
#[UseSession]
+ #[FrontpageRoute(verb: 'GET', url: '/login/v2/grant')]
public function grantPage(?string $stateToken): StandaloneTemplateResponse {
if ($stateToken === null) {
return $this->stateTokenMissingResponse();
@@ -187,6 +192,7 @@ class ClientFlowLoginV2Controller extends Controller {
/**
* @PublicPage
*/
+ #[FrontpageRoute(verb: 'POST', url: '/login/v2/apptoken')]
public function apptokenRedirect(?string $stateToken, string $user, string $password) {
if ($stateToken === null) {
return $this->stateTokenMissingResponse();
@@ -234,6 +240,7 @@ class ClientFlowLoginV2Controller extends Controller {
* @NoAdminRequired
*/
#[UseSession]
+ #[FrontpageRoute(verb: 'POST', url: '/login/v2/grant')]
public function generateAppPassword(?string $stateToken): Response {
if ($stateToken === null) {
return $this->stateTokenMissingResponse();
@@ -291,6 +298,7 @@ class ClientFlowLoginV2Controller extends Controller {
*
* 200: Login flow init returned
*/
+ #[FrontpageRoute(verb: 'POST', url: '/login/v2')]
public function init(): JSONResponse {
// Get client user agent
$userAgent = $this->request->getHeader('USER_AGENT');
diff --git a/core/Controller/CollaborationResourcesController.php b/core/Controller/CollaborationResourcesController.php
index e1389309c15..9d7d7148468 100644
--- a/core/Controller/CollaborationResourcesController.php
+++ b/core/Controller/CollaborationResourcesController.php
@@ -32,6 +32,7 @@ namespace OC\Core\Controller;
use Exception;
use OCA\Core\ResponseDefinitions;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\Collaboration\Resources\CollectionException;
@@ -84,6 +85,7 @@ class CollaborationResourcesController extends OCSController {
* 200: Collection returned
* 404: Collection not found
*/
+ #[ApiRoute(verb: 'GET', url: '/resources/collections/{collectionId}', root: '/collaboration')]
public function listCollection(int $collectionId): DataResponse {
try {
$collection = $this->getCollection($collectionId);
@@ -105,6 +107,7 @@ class CollaborationResourcesController extends OCSController {
* 200: Collections returned
* 404: Collection not found
*/
+ #[ApiRoute(verb: 'GET', url: '/resources/collections/search/{filter}', root: '/collaboration')]
public function searchCollections(string $filter): DataResponse {
try {
$collections = $this->manager->searchCollections($this->userSession->getUser(), $filter);
@@ -128,6 +131,7 @@ class CollaborationResourcesController extends OCSController {
* 200: Collection returned
* 404: Collection not found or resource inaccessible
*/
+ #[ApiRoute(verb: 'POST', url: '/resources/collections/{collectionId}', root: '/collaboration')]
public function addResource(int $collectionId, string $resourceType, string $resourceId): DataResponse {
try {
$collection = $this->getCollection($collectionId);
@@ -162,6 +166,7 @@ class CollaborationResourcesController extends OCSController {
* 200: Collection returned
* 404: Collection or resource not found
*/
+ #[ApiRoute(verb: 'DELETE', url: '/resources/collections/{collectionId}', root: '/collaboration')]
public function removeResource(int $collectionId, string $resourceType, string $resourceId): DataResponse {
try {
$collection = $this->getCollection($collectionId);
@@ -192,6 +197,7 @@ class CollaborationResourcesController extends OCSController {
* 200: Collections returned
* 404: Resource not accessible
*/
+ #[ApiRoute(verb: 'GET', url: '/resources/{resourceType}/{resourceId}', root: '/collaboration')]
public function getCollectionsByResource(string $resourceType, string $resourceId): DataResponse {
try {
$resource = $this->manager->getResourceForUser($resourceType, $resourceId, $this->userSession->getUser());
@@ -220,6 +226,7 @@ class CollaborationResourcesController extends OCSController {
* 400: Creating collection is not possible
* 404: Resource inaccessible
*/
+ #[ApiRoute(verb: 'POST', url: '/resources/{baseResourceType}/{baseResourceId}', root: '/collaboration')]
public function createCollectionOnResource(string $baseResourceType, string $baseResourceId, string $name): DataResponse {
if (!isset($name[0]) || isset($name[64])) {
return new DataResponse([], Http::STATUS_BAD_REQUEST);
@@ -253,6 +260,7 @@ class CollaborationResourcesController extends OCSController {
* 200: Collection returned
* 404: Collection not found
*/
+ #[ApiRoute(verb: 'PUT', url: '/resources/collections/{collectionId}', root: '/collaboration')]
public function renameCollection(int $collectionId, string $collectionName): DataResponse {
try {
$collection = $this->getCollection($collectionId);
diff --git a/core/Controller/ContactsMenuController.php b/core/Controller/ContactsMenuController.php
index 7b8f2e50aa5..e70349970a3 100644
--- a/core/Controller/ContactsMenuController.php
+++ b/core/Controller/ContactsMenuController.php
@@ -28,6 +28,7 @@ use Exception;
use OC\Contacts\ContactsMenu\Manager;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IRequest;
use OCP\IUserSession;
@@ -47,6 +48,7 @@ class ContactsMenuController extends Controller {
* @return \JsonSerializable[]
* @throws Exception
*/
+ #[FrontpageRoute(verb: 'POST', url: '/contactsmenu/contacts')]
public function index(?string $filter = null): array {
return $this->manager->getEntries($this->userSession->getUser(), $filter);
}
@@ -57,6 +59,7 @@ class ContactsMenuController extends Controller {
* @return JSONResponse|\JsonSerializable
* @throws Exception
*/
+ #[FrontpageRoute(verb: 'POST', url: '/contactsmenu/findOne')]
public function findOne(int $shareType, string $shareWith) {
$contact = $this->manager->findOne($this->userSession->getUser(), $shareType, $shareWith);
diff --git a/core/Controller/CssController.php b/core/Controller/CssController.php
index 6d123093661..3fd0c524b06 100644
--- a/core/Controller/CssController.php
+++ b/core/Controller/CssController.php
@@ -34,6 +34,7 @@ namespace OC\Core\Controller;
use OC\Files\AppData\Factory;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\FileDisplayResponse;
use OCP\AppFramework\Http\NotFoundResponse;
@@ -69,6 +70,7 @@ class CssController extends Controller {
* @param string $appName css folder name
* @return FileDisplayResponse|NotFoundResponse
*/
+ #[FrontpageRoute(verb: 'GET', url: '/css/{appName}/{fileName}')]
public function getCss(string $fileName, string $appName): Response {
try {
$folder = $this->appData->getFolder($appName);
diff --git a/core/Controller/ErrorController.php b/core/Controller/ErrorController.php
index 0bc9e605e13..040b75be87b 100644
--- a/core/Controller/ErrorController.php
+++ b/core/Controller/ErrorController.php
@@ -28,6 +28,7 @@ declare(strict_types=1);
namespace OC\Core\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\TemplateResponse;
@@ -37,6 +38,7 @@ class ErrorController extends \OCP\AppFramework\Controller {
* @PublicPage
* @NoCSRFRequired
*/
+ #[FrontpageRoute(verb: 'GET', url: 'error/403')]
public function error403(): TemplateResponse {
$response = new TemplateResponse(
'core',
@@ -52,6 +54,7 @@ class ErrorController extends \OCP\AppFramework\Controller {
* @PublicPage
* @NoCSRFRequired
*/
+ #[FrontpageRoute(verb: 'GET', url: 'error/404')]
public function error404(): TemplateResponse {
$response = new TemplateResponse(
'core',
diff --git a/core/Controller/GuestAvatarController.php b/core/Controller/GuestAvatarController.php
index 3270a1f7f5a..5e6f2438dd6 100644
--- a/core/Controller/GuestAvatarController.php
+++ b/core/Controller/GuestAvatarController.php
@@ -25,6 +25,7 @@ namespace OC\Core\Controller;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\FileDisplayResponse;
use OCP\AppFramework\Http\Response;
use OCP\IAvatarManager;
@@ -61,6 +62,7 @@ class GuestAvatarController extends Controller {
* 200: Custom avatar returned
* 201: Avatar returned
*/
+ #[FrontpageRoute(verb: 'GET', url: '/avatar/guest/{guestName}/{size}')]
public function getAvatar(string $guestName, string $size, ?bool $darkTheme = false) {
$size = (int) $size;
$darkTheme = $darkTheme ?? false;
@@ -113,6 +115,7 @@ class GuestAvatarController extends Controller {
* 200: Custom avatar returned
* 201: Avatar returned
*/
+ #[FrontpageRoute(verb: 'GET', url: '/avatar/guest/{guestName}/{size}/dark')]
public function getAvatarDark(string $guestName, string $size) {
return $this->getAvatar($guestName, $size, true);
}
diff --git a/core/Controller/HoverCardController.php b/core/Controller/HoverCardController.php
index ac1b809ba0c..705d506057a 100644
--- a/core/Controller/HoverCardController.php
+++ b/core/Controller/HoverCardController.php
@@ -28,6 +28,7 @@ namespace OC\Core\Controller;
use OC\Contacts\ContactsMenu\Manager;
use OCA\Core\ResponseDefinitions;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\DataResponse;
use OCP\IRequest;
use OCP\IUserSession;
@@ -56,6 +57,7 @@ class HoverCardController extends \OCP\AppFramework\OCSController {
* 200: Account details returned
* 404: Account not found
*/
+ #[ApiRoute(verb: 'GET', url: '/v1/{userId}', root: '/hovercard')]
public function getUser(string $userId): DataResponse {
$contact = $this->manager->findOne($this->userSession->getUser(), IShare::TYPE_USER, $userId);
diff --git a/core/Controller/JsController.php b/core/Controller/JsController.php
index 213231eb854..1f504e05ed0 100644
--- a/core/Controller/JsController.php
+++ b/core/Controller/JsController.php
@@ -34,6 +34,7 @@ namespace OC\Core\Controller;
use OC\Files\AppData\Factory;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\FileDisplayResponse;
use OCP\AppFramework\Http\NotFoundResponse;
@@ -69,6 +70,7 @@ class JsController extends Controller {
* @param string $appName js folder name
* @return FileDisplayResponse|NotFoundResponse
*/
+ #[FrontpageRoute(verb: 'GET', url: '/js/{appName}/{fileName}')]
public function getJs(string $fileName, string $appName): Response {
try {
$folder = $this->appData->getFolder($appName);
diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php
index 9e5eab4fece..e8c08f134be 100644
--- a/core/Controller/LoginController.php
+++ b/core/Controller/LoginController.php
@@ -43,6 +43,7 @@ use OC\User\Session;
use OC_App;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\Attribute\UseSession;
@@ -91,6 +92,7 @@ class LoginController extends Controller {
* @return RedirectResponse
*/
#[UseSession]
+ #[FrontpageRoute(verb: 'GET', url: '/logout')]
public function logout() {
$loginToken = $this->request->getCookie('nc_token');
if (!is_null($loginToken)) {
@@ -127,6 +129,7 @@ class LoginController extends Controller {
*/
#[UseSession]
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
+ #[FrontpageRoute(verb: 'GET', url: '/login')]
public function showLoginForm(string $user = null, string $redirect_url = null): Http\Response {
if ($this->userSession->isLoggedIn()) {
return new RedirectResponse($this->urlGenerator->linkToDefaultPageUrl());
@@ -276,6 +279,7 @@ class LoginController extends Controller {
*/
#[UseSession]
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
+ #[FrontpageRoute(verb: 'POST', url: '/login')]
public function tryLogin(Chain $loginChain,
string $user = '',
string $password = '',
@@ -370,6 +374,7 @@ class LoginController extends Controller {
*/
#[UseSession]
#[NoCSRFRequired]
+ #[FrontpageRoute(verb: 'POST', url: '/login/confirm')]
public function confirmPassword(string $password): DataResponse {
$loginName = $this->userSession->getLoginName();
$loginResult = $this->userManager->checkPassword($loginName, $password);
diff --git a/core/Controller/LostController.php b/core/Controller/LostController.php
index 2a0d374b552..8e9a9e0f0de 100644
--- a/core/Controller/LostController.php
+++ b/core/Controller/LostController.php
@@ -44,6 +44,7 @@ use OC\Core\Exception\ResetPasswordException;
use OC\Security\RateLimiting\Exception\RateLimitExceededException;
use OC\Security\RateLimiting\Limiter;
use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\TemplateResponse;
@@ -108,6 +109,7 @@ class LostController extends Controller {
* @BruteForceProtection(action=passwordResetEmail)
* @AnonRateThrottle(limit=10, period=300)
*/
+ #[FrontpageRoute(verb: 'GET', url: '/lostpassword/reset/form/{token}/{userId}')]
public function resetform(string $token, string $userId): TemplateResponse {
try {
$this->checkPasswordResetToken($token, $userId);
@@ -172,6 +174,7 @@ class LostController extends Controller {
* @BruteForceProtection(action=passwordResetEmail)
* @AnonRateThrottle(limit=10, period=300)
*/
+ #[FrontpageRoute(verb: 'POST', url: '/lostpassword/email')]
public function email(string $user): JSONResponse {
if ($this->config->getSystemValue('lost_password_link', '') !== '') {
return new JSONResponse($this->error($this->l10n->t('Password reset is disabled')));
@@ -205,6 +208,7 @@ class LostController extends Controller {
* @BruteForceProtection(action=passwordResetEmail)
* @AnonRateThrottle(limit=10, period=300)
*/
+ #[FrontpageRoute(verb: 'POST', url: '/lostpassword/set/{token}/{userId}')]
public function setPassword(string $token, string $userId, string $password, bool $proceed): JSONResponse {
if ($this->encryptionManager->isEnabled() && !$proceed) {
$encryptionModules = $this->encryptionManager->getEncryptionModules();
diff --git a/core/Controller/NavigationController.php b/core/Controller/NavigationController.php
index 0996b41042e..7b651e6ec70 100644
--- a/core/Controller/NavigationController.php
+++ b/core/Controller/NavigationController.php
@@ -25,6 +25,7 @@ namespace OC\Core\Controller;
use OCA\Core\ResponseDefinitions;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\INavigationManager;
@@ -56,6 +57,7 @@ class NavigationController extends OCSController {
* 200: Apps navigation returned
* 304: No apps navigation changed
*/
+ #[ApiRoute(verb: 'GET', url: '/navigation/apps', root: '/core')]
public function getAppsNavigation(bool $absolute = false): DataResponse {
$navigation = $this->navigationManager->getAll();
if ($absolute) {
@@ -83,6 +85,7 @@ class NavigationController extends OCSController {
* 200: Apps navigation returned
* 304: No apps navigation changed
*/
+ #[ApiRoute(verb: 'GET', url: '/navigation/settings', root: '/core')]
public function getSettingsNavigation(bool $absolute = false): DataResponse {
$navigation = $this->navigationManager->getAll('settings');
if ($absolute) {
diff --git a/core/Controller/OCJSController.php b/core/Controller/OCJSController.php
index e9093439125..dbb203e827f 100644
--- a/core/Controller/OCJSController.php
+++ b/core/Controller/OCJSController.php
@@ -34,6 +34,7 @@ use OC\Template\JSConfigHelper;
use OCP\App\IAppManager;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\DataDisplayResponse;
use OCP\Defaults;
@@ -87,6 +88,7 @@ class OCJSController extends Controller {
* @NoTwoFactorRequired
* @PublicPage
*/
+ #[FrontpageRoute(verb: 'GET', url: '/core/js/oc.js')]
public function getConfig(): DataDisplayResponse {
$data = $this->helper->getConfig();
diff --git a/core/Controller/OCMController.php b/core/Controller/OCMController.php
index 03a8c0d8e4f..4fa03e67c4f 100644
--- a/core/Controller/OCMController.php
+++ b/core/Controller/OCMController.php
@@ -29,6 +29,7 @@ namespace OC\Core\Controller;
use Exception;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\DataResponse;
use OCP\Capabilities\ICapability;
use OCP\IConfig;
@@ -64,6 +65,7 @@ class OCMController extends Controller {
* 200: OCM Provider details returned
* 500: OCM not supported
*/
+ #[FrontpageRoute(verb: 'GET', url: '/ocm-provider/')]
public function discovery(): DataResponse {
try {
$cap = Server::get(
diff --git a/core/Controller/OCSController.php b/core/Controller/OCSController.php
index b0ab867f8d8..c6ddc23717d 100644
--- a/core/Controller/OCSController.php
+++ b/core/Controller/OCSController.php
@@ -31,6 +31,7 @@ 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\OpenAPI;
use OCP\AppFramework\Http\DataResponse;
use OCP\IRequest;
@@ -53,6 +54,7 @@ class OCSController extends \OCP\AppFramework\OCSController {
* @PublicPage
*/
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
+ #[ApiRoute(verb: 'GET', url: '/config', root: '')]
public function getConfig(): DataResponse {
$data = [
'version' => '1.7',
@@ -74,6 +76,7 @@ class OCSController extends \OCP\AppFramework\OCSController {
*
* 200: Capabilities returned
*/
+ #[ApiRoute(verb: 'GET', url: '/capabilities', root: '/cloud')]
public function getCapabilities(): DataResponse {
$result = [];
[$major, $minor, $micro] = \OCP\Util::getVersion();
@@ -102,6 +105,7 @@ class OCSController extends \OCP\AppFramework\OCSController {
* @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)) {
@@ -123,6 +127,7 @@ class OCSController extends \OCP\AppFramework\OCSController {
* @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);
diff --git a/core/Controller/PreviewController.php b/core/Controller/PreviewController.php
index 7adec03814c..34c21bd3ecb 100644
--- a/core/Controller/PreviewController.php
+++ b/core/Controller/PreviewController.php
@@ -30,6 +30,7 @@ namespace OC\Core\Controller;
use OCA\Files_Sharing\SharedStorage;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Http\FileDisplayResponse;
use OCP\AppFramework\Http\RedirectResponse;
@@ -74,6 +75,7 @@ class PreviewController extends Controller {
* 403: Getting preview is not allowed
* 404: Preview not found
*/
+ #[FrontpageRoute(verb: 'GET', url: '/core/preview.png')]
public function getPreview(
string $file = '',
int $x = 32,
@@ -117,6 +119,7 @@ class PreviewController extends Controller {
* 403: Getting preview is not allowed
* 404: Preview not found
*/
+ #[FrontpageRoute(verb: 'GET', url: '/core/preview')]
public function getPreviewByFileId(
int $fileId = -1,
int $x = 32,
diff --git a/core/Controller/ProfileApiController.php b/core/Controller/ProfileApiController.php
index 7a11e5f93c1..7cba0593c1f 100644
--- a/core/Controller/ProfileApiController.php
+++ b/core/Controller/ProfileApiController.php
@@ -30,6 +30,7 @@ namespace OC\Core\Controller;
use OC\Core\Db\ProfileConfigMapper;
use OC\Profile\ProfileManager;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSBadRequestException;
use OCP\AppFramework\OCS\OCSForbiddenException;
@@ -68,6 +69,7 @@ class ProfileApiController extends OCSController {
*
* 200: Visibility updated successfully
*/
+ #[ApiRoute(verb: 'PUT', url: '/{targetUserId}', root: '/profile')]
public function setVisibility(string $targetUserId, string $paramId, string $visibility): DataResponse {
$requestingUser = $this->userSession->getUser();
$targetUser = $this->userManager->get($targetUserId);
diff --git a/core/Controller/ProfilePageController.php b/core/Controller/ProfilePageController.php
index eb5b0aa4c0a..c3a33d6bbda 100644
--- a/core/Controller/ProfilePageController.php
+++ b/core/Controller/ProfilePageController.php
@@ -29,6 +29,7 @@ namespace OC\Core\Controller;
use OC\Profile\ProfileManager;
use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Services\IInitialState;
@@ -65,6 +66,7 @@ class ProfilePageController extends Controller {
* @NoAdminRequired
* @NoSubAdminRequired
*/
+ #[FrontpageRoute(verb: 'GET', url: '/u/{targetUserId}')]
public function index(string $targetUserId): TemplateResponse {
$profileNotFoundTemplate = new TemplateResponse(
'core',
diff --git a/core/Controller/RecommendedAppsController.php b/core/Controller/RecommendedAppsController.php
index 59e40f56f73..5d4749e1e83 100644
--- a/core/Controller/RecommendedAppsController.php
+++ b/core/Controller/RecommendedAppsController.php
@@ -27,6 +27,7 @@ declare(strict_types=1);
namespace OC\Core\Controller;
use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\Response;
use OCP\AppFramework\Http\StandaloneTemplateResponse;
@@ -48,6 +49,7 @@ class RecommendedAppsController extends Controller {
* @NoCSRFRequired
* @return Response
*/
+ #[FrontpageRoute(verb: 'GET', url: '/core/apps/recommended')]
public function index(): Response {
$defaultPageUrl = $this->urlGenerator->linkToDefaultPageUrl();
$this->initialStateService->provideInitialState('core', 'defaultPageUrl', $defaultPageUrl);
diff --git a/core/Controller/ReferenceApiController.php b/core/Controller/ReferenceApiController.php
index 384011f8020..854c15cb985 100644
--- a/core/Controller/ReferenceApiController.php
+++ b/core/Controller/ReferenceApiController.php
@@ -27,6 +27,7 @@ namespace OC\Core\Controller;
use OCA\Core\ResponseDefinitions;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\DataResponse;
use OCP\Collaboration\Reference\IDiscoverableReferenceProvider;
use OCP\Collaboration\Reference\IReferenceManager;
@@ -59,6 +60,7 @@ class ReferenceApiController extends \OCP\AppFramework\OCSController {
*
* 200: References returned
*/
+ #[ApiRoute(verb: 'POST', url: '/extract', root: '/references')]
public function extract(string $text, bool $resolve = false, int $limit = 1): DataResponse {
$references = $this->referenceManager->extractReferences($text);
@@ -87,6 +89,7 @@ class ReferenceApiController extends \OCP\AppFramework\OCSController {
*
* 200: Reference returned
*/
+ #[ApiRoute(verb: 'GET', url: '/resolve', root: '/references')]
public function resolveOne(string $reference): DataResponse {
/** @var ?CoreReference $resolvedReference */
$resolvedReference = $this->referenceManager->resolveReference(trim($reference))?->jsonSerialize();
@@ -107,6 +110,7 @@ class ReferenceApiController extends \OCP\AppFramework\OCSController {
*
* 200: References returned
*/
+ #[ApiRoute(verb: 'POST', url: '/resolve', root: '/references')]
public function resolve(array $references, int $limit = 1): DataResponse {
$result = [];
$index = 0;
@@ -132,6 +136,7 @@ class ReferenceApiController extends \OCP\AppFramework\OCSController {
*
* 200: Providers returned
*/
+ #[ApiRoute(verb: 'GET', url: '/providers', root: '/references')]
public function getProvidersInfo(): DataResponse {
$providers = $this->referenceManager->getDiscoverableProviders();
$jsonProviders = array_map(static function (IDiscoverableReferenceProvider $provider) {
@@ -151,6 +156,7 @@ class ReferenceApiController extends \OCP\AppFramework\OCSController {
*
* 200: Provider touched
*/
+ #[ApiRoute(verb: 'PUT', url: '/provider/{providerId}', root: '/references')]
public function touchProvider(string $providerId, ?int $timestamp = null): DataResponse {
if ($this->userId !== null) {
$success = $this->referenceManager->touchProvider($this->userId, $providerId, $timestamp);
diff --git a/core/Controller/ReferenceController.php b/core/Controller/ReferenceController.php
index 8d1ff7f86d2..8874978037f 100644
--- a/core/Controller/ReferenceController.php
+++ b/core/Controller/ReferenceController.php
@@ -27,6 +27,7 @@ namespace OC\Core\Controller;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\DataDownloadResponse;
use OCP\AppFramework\Http\DataResponse;
use OCP\Collaboration\Reference\IReferenceManager;
@@ -57,6 +58,7 @@ class ReferenceController extends Controller {
* 200: Preview returned
* 404: Reference not found
*/
+ #[FrontpageRoute(verb: 'GET', url: '/core/references/preview/{referenceId}')]
public function preview(string $referenceId): DataDownloadResponse|DataResponse {
$reference = $this->referenceManager->getReferenceByCacheKey($referenceId);
diff --git a/core/Controller/SearchController.php b/core/Controller/SearchController.php
index f839c16e8da..ccea067ae2c 100644
--- a/core/Controller/SearchController.php
+++ b/core/Controller/SearchController.php
@@ -27,6 +27,7 @@ declare(strict_types=1);
namespace OC\Core\Controller;
use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IRequest;
use OCP\ISearch;
@@ -46,6 +47,7 @@ class SearchController extends Controller {
/**
* @NoAdminRequired
*/
+ #[FrontpageRoute(verb: 'GET', url: '/core/search')]
public function search(string $query, array $inApps = [], int $page = 1, int $size = 30): JSONResponse {
$results = $this->searcher->searchPaged($query, $inApps, $page, $size);
diff --git a/core/Controller/TextProcessingApiController.php b/core/Controller/TextProcessingApiController.php
index cbba7e976b0..6ba98f99f51 100644
--- a/core/Controller/TextProcessingApiController.php
+++ b/core/Controller/TextProcessingApiController.php
@@ -30,6 +30,7 @@ use InvalidArgumentException;
use OCA\Core\ResponseDefinitions;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\AnonRateLimit;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\PublicPage;
use OCP\AppFramework\Http\Attribute\UserRateLimit;
@@ -72,6 +73,7 @@ class TextProcessingApiController extends \OCP\AppFramework\OCSController {
* 200: Task types returned
*/
#[PublicPage]
+ #[ApiRoute(verb: 'GET', url: '/tasktypes', root: '/textprocessing')]
public function taskTypes(): DataResponse {
$typeClasses = $this->textProcessingManager->getAvailableTaskTypes();
$types = [];
@@ -113,6 +115,7 @@ class TextProcessingApiController extends \OCP\AppFramework\OCSController {
#[PublicPage]
#[UserRateLimit(limit: 20, period: 120)]
#[AnonRateLimit(limit: 5, period: 120)]
+ #[ApiRoute(verb: 'POST', url: '/schedule', root: '/textprocessing')]
public function schedule(string $input, string $type, string $appId, string $identifier = ''): DataResponse {
try {
$task = new Task($type, $input, $appId, $this->userId, $identifier);
@@ -150,6 +153,7 @@ class TextProcessingApiController extends \OCP\AppFramework\OCSController {
* 404: Task not found
*/
#[PublicPage]
+ #[ApiRoute(verb: 'GET', url: '/task/{id}', root: '/textprocessing')]
public function getTask(int $id): DataResponse {
try {
$task = $this->textProcessingManager->getUserTask($id, $this->userId);
@@ -177,6 +181,7 @@ class TextProcessingApiController extends \OCP\AppFramework\OCSController {
* 404: Task not found
*/
#[NoAdminRequired]
+ #[ApiRoute(verb: 'DELETE', url: '/task/{id}', root: '/textprocessing')]
public function deleteTask(int $id): DataResponse {
try {
$task = $this->textProcessingManager->getUserTask($id, $this->userId);
@@ -207,6 +212,7 @@ class TextProcessingApiController extends \OCP\AppFramework\OCSController {
* 200: Task list returned
*/
#[NoAdminRequired]
+ #[ApiRoute(verb: 'GET', url: '/tasks/app/{appId}', root: '/textprocessing')]
public function listTasksByApp(string $appId, ?string $identifier = null): DataResponse {
try {
$tasks = $this->textProcessingManager->getUserTasksByApp($this->userId, $appId, $identifier);
diff --git a/core/Controller/TextToImageApiController.php b/core/Controller/TextToImageApiController.php
index 9d97a538750..8dd21e90664 100644
--- a/core/Controller/TextToImageApiController.php
+++ b/core/Controller/TextToImageApiController.php
@@ -30,6 +30,7 @@ use OC\Files\AppData\AppData;
use OCA\Core\ResponseDefinitions;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\AnonRateLimit;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\BruteForceProtection;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\PublicPage;
@@ -69,6 +70,7 @@ class TextToImageApiController extends \OCP\AppFramework\OCSController {
* 200: Returns availability status
*/
#[PublicPage]
+ #[ApiRoute(verb: 'GET', url: '/is_available', root: '/text2image')]
public function isAvailable(): DataResponse {
return new DataResponse([
'isAvailable' => $this->textToImageManager->hasProviders(),
@@ -91,6 +93,7 @@ class TextToImageApiController extends \OCP\AppFramework\OCSController {
#[PublicPage]
#[UserRateLimit(limit: 20, period: 120)]
#[AnonRateLimit(limit: 5, period: 120)]
+ #[ApiRoute(verb: 'POST', url: '/schedule', root: '/text2image')]
public function schedule(string $input, string $appId, string $identifier = '', int $numberOfImages = 8): DataResponse {
$task = new Task($input, $appId, $numberOfImages, $this->userId, $identifier);
try {
@@ -125,6 +128,7 @@ class TextToImageApiController extends \OCP\AppFramework\OCSController {
*/
#[PublicPage]
#[BruteForceProtection(action: 'text2image')]
+ #[ApiRoute(verb: 'GET', url: '/task/{id}', root: '/text2image')]
public function getTask(int $id): DataResponse {
try {
$task = $this->textToImageManager->getUserTask($id, $this->userId);
@@ -156,6 +160,7 @@ class TextToImageApiController extends \OCP\AppFramework\OCSController {
*/
#[PublicPage]
#[BruteForceProtection(action: 'text2image')]
+ #[ApiRoute(verb: 'GET', url: '/task/{id}/image/{index}', root: '/text2image')]
public function getImage(int $id, int $index): DataResponse|FileDisplayResponse {
try {
$task = $this->textToImageManager->getUserTask($id, $this->userId);
@@ -195,6 +200,7 @@ class TextToImageApiController extends \OCP\AppFramework\OCSController {
*/
#[NoAdminRequired]
#[BruteForceProtection(action: 'text2image')]
+ #[ApiRoute(verb: 'DELETE', url: '/task/{id}', root: '/text2image')]
public function deleteTask(int $id): DataResponse {
try {
$task = $this->textToImageManager->getUserTask($id, $this->userId);
@@ -228,6 +234,7 @@ class TextToImageApiController extends \OCP\AppFramework\OCSController {
*/
#[NoAdminRequired]
#[AnonRateLimit(limit: 5, period: 120)]
+ #[ApiRoute(verb: 'GET', url: '/tasks/app/{appId}', root: '/text2image')]
public function listTasksByApp(string $appId, ?string $identifier = null): DataResponse {
try {
$tasks = $this->textToImageManager->getUserTasksByApp($this->userId, $appId, $identifier);
diff --git a/core/Controller/TranslationApiController.php b/core/Controller/TranslationApiController.php
index c4f3c8e855e..4cc0ec95ca1 100644
--- a/core/Controller/TranslationApiController.php
+++ b/core/Controller/TranslationApiController.php
@@ -29,6 +29,7 @@ namespace OC\Core\Controller;
use InvalidArgumentException;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\DataResponse;
use OCP\IL10N;
use OCP\IRequest;
@@ -55,6 +56,7 @@ class TranslationApiController extends \OCP\AppFramework\OCSController {
*
* 200: Supported languages returned
*/
+ #[ApiRoute(verb: 'GET', url: '/languages', root: '/translation')]
public function languages(): DataResponse {
return new DataResponse([
'languages' => array_map(fn ($lang) => $lang->jsonSerialize(), $this->translationManager->getLanguages()),
@@ -78,6 +80,7 @@ class TranslationApiController extends \OCP\AppFramework\OCSController {
* 400: Language not detected or unable to translate
* 412: Translating is not possible
*/
+ #[ApiRoute(verb: 'POST', url: '/translate', root: '/translation')]
public function translate(string $text, ?string $fromLanguage, string $toLanguage): DataResponse {
try {
$translation = $this->translationManager->translate($text, $fromLanguage, $toLanguage);
diff --git a/core/Controller/TwoFactorChallengeController.php b/core/Controller/TwoFactorChallengeController.php
index bc25121034b..7152078c338 100644
--- a/core/Controller/TwoFactorChallengeController.php
+++ b/core/Controller/TwoFactorChallengeController.php
@@ -29,6 +29,7 @@ namespace OC\Core\Controller;
use OC\Authentication\TwoFactorAuth\Manager;
use OC_User;
use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\Attribute\UseSession;
use OCP\AppFramework\Http\RedirectResponse;
@@ -89,6 +90,7 @@ class TwoFactorChallengeController extends Controller {
* @param string $redirect_url
* @return StandaloneTemplateResponse
*/
+ #[FrontpageRoute(verb: 'GET', url: '/login/selectchallenge')]
public function selectChallenge($redirect_url) {
$user = $this->userSession->getUser();
$providerSet = $this->twoFactorManager->getProviderSet($user);
@@ -117,6 +119,7 @@ class TwoFactorChallengeController extends Controller {
* @return StandaloneTemplateResponse|RedirectResponse
*/
#[UseSession]
+ #[FrontpageRoute(verb: 'GET', url: '/login/challenge/{challengeProviderId}')]
public function showChallenge($challengeProviderId, $redirect_url) {
$user = $this->userSession->getUser();
$providerSet = $this->twoFactorManager->getProviderSet($user);
@@ -171,6 +174,7 @@ class TwoFactorChallengeController extends Controller {
* @return RedirectResponse
*/
#[UseSession]
+ #[FrontpageRoute(verb: 'POST', url: '/login/challenge/{challengeProviderId}')]
public function solveChallenge($challengeProviderId, $challenge, $redirect_url = null) {
$user = $this->userSession->getUser();
$provider = $this->twoFactorManager->getProvider($user, $challengeProviderId);
@@ -208,6 +212,7 @@ class TwoFactorChallengeController extends Controller {
* @NoAdminRequired
* @NoCSRFRequired
*/
+ #[FrontpageRoute(verb: 'GET', url: 'login/setupchallenge')]
public function setupProviders(): StandaloneTemplateResponse {
$user = $this->userSession->getUser();
$setupProviders = $this->twoFactorManager->getLoginSetupProviders($user);
@@ -224,6 +229,7 @@ class TwoFactorChallengeController extends Controller {
* @NoAdminRequired
* @NoCSRFRequired
*/
+ #[FrontpageRoute(verb: 'GET', url: 'login/setupchallenge/{providerId}')]
public function setupProvider(string $providerId) {
$user = $this->userSession->getUser();
$providers = $this->twoFactorManager->getLoginSetupProviders($user);
@@ -257,6 +263,7 @@ class TwoFactorChallengeController extends Controller {
*
* @todo handle the extreme edge case of an invalid provider ID and redirect to the provider selection page
*/
+ #[FrontpageRoute(verb: 'POST', url: 'login/setupchallenge/{providerId}')]
public function confirmProviderSetup(string $providerId) {
return new RedirectResponse($this->urlGenerator->linkToRoute(
'core.TwoFactorChallenge.showChallenge',
diff --git a/core/Controller/UnifiedSearchController.php b/core/Controller/UnifiedSearchController.php
index 9754515603c..469c6c6ed7b 100644
--- a/core/Controller/UnifiedSearchController.php
+++ b/core/Controller/UnifiedSearchController.php
@@ -34,6 +34,7 @@ use OC\Search\SearchQuery;
use OC\Search\UnsupportedFilter;
use OCA\Core\ResponseDefinitions;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\IRequest;
@@ -69,6 +70,7 @@ class UnifiedSearchController extends OCSController {
*
* 200: Providers returned
*/
+ #[ApiRoute(verb: 'GET', url: '/providers', root: '/search')]
public function getProviders(string $from = ''): DataResponse {
[$route, $parameters] = $this->getRouteInformation($from);
@@ -99,6 +101,7 @@ class UnifiedSearchController extends OCSController {
* 200: Search entries returned
* 400: Searching is not possible
*/
+ #[ApiRoute(verb: 'GET', url: '/providers/{providerId}/search', root: '/search')]
public function search(
string $providerId,
// Unused parameter for OpenAPI spec generator
diff --git a/core/Controller/UnsupportedBrowserController.php b/core/Controller/UnsupportedBrowserController.php
index 4f096d44092..dfcff8df381 100644
--- a/core/Controller/UnsupportedBrowserController.php
+++ b/core/Controller/UnsupportedBrowserController.php
@@ -28,6 +28,7 @@ declare(strict_types=1);
namespace OC\Core\Controller;
use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\Response;
use OCP\AppFramework\Http\TemplateResponse;
@@ -46,6 +47,7 @@ class UnsupportedBrowserController extends Controller {
*
* @return Response
*/
+ #[FrontpageRoute(verb: 'GET', url: 'unsupported')]
public function index(): Response {
Util::addScript('core', 'unsupported-browser');
Util::addStyle('core', 'icons');
diff --git a/core/Controller/UserController.php b/core/Controller/UserController.php
index f8dbc1af027..c941a80e53d 100644
--- a/core/Controller/UserController.php
+++ b/core/Controller/UserController.php
@@ -25,6 +25,7 @@
namespace OC\Core\Controller;
use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IRequest;
use OCP\IUserManager;
@@ -47,6 +48,7 @@ class UserController extends Controller {
*
* @return JSONResponse
*/
+ #[FrontpageRoute(verb: 'POST', url: '/displaynames')]
public function getDisplayNames($users) {
$result = [];
diff --git a/core/Controller/WalledGardenController.php b/core/Controller/WalledGardenController.php
index 2ae91135b1d..e5d8edd9083 100644
--- a/core/Controller/WalledGardenController.php
+++ b/core/Controller/WalledGardenController.php
@@ -26,6 +26,7 @@ namespace OC\Core\Controller;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\Response;
@@ -35,6 +36,7 @@ class WalledGardenController extends Controller {
* @PublicPage
* @NoCSRFRequired
*/
+ #[FrontpageRoute(verb: 'GET', url: '/204')]
public function get(): Response {
$resp = new Response();
$resp->setStatus(Http::STATUS_NO_CONTENT);
diff --git a/core/Controller/WebAuthnController.php b/core/Controller/WebAuthnController.php
index 08a6b36d276..70034f08fcc 100644
--- a/core/Controller/WebAuthnController.php
+++ b/core/Controller/WebAuthnController.php
@@ -33,6 +33,7 @@ use OC\Authentication\WebAuthn\Manager;
use OC\URLGenerator;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\UseSession;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IRequest;
@@ -62,6 +63,7 @@ class WebAuthnController extends Controller {
* @PublicPage
*/
#[UseSession]
+ #[FrontpageRoute(verb: 'POST', url: 'login/webauthn/start')]
public function startAuthentication(string $loginName): JSONResponse {
$this->logger->debug('Starting WebAuthn login');
@@ -86,6 +88,7 @@ class WebAuthnController extends Controller {
* @PublicPage
*/
#[UseSession]
+ #[FrontpageRoute(verb: 'POST', url: 'login/webauthn/finish')]
public function finishAuthentication(string $data): JSONResponse {
$this->logger->debug('Validating WebAuthn login');
diff --git a/core/Controller/WellKnownController.php b/core/Controller/WellKnownController.php
index 896d216308d..0e6b7ee3ef8 100644
--- a/core/Controller/WellKnownController.php
+++ b/core/Controller/WellKnownController.php
@@ -29,6 +29,7 @@ namespace OC\Core\Controller;
use OC\Http\WellKnown\RequestManager;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\Response;
@@ -49,6 +50,7 @@ class WellKnownController extends Controller {
*
* @return Response
*/
+ #[FrontpageRoute(verb: 'GET', url: '.well-known/{service}')]
public function handle(string $service): Response {
$response = $this->requestManager->process(
$service,
diff --git a/core/Controller/WhatsNewController.php b/core/Controller/WhatsNewController.php
index 2d48f3cc485..ab107cd115d 100644
--- a/core/Controller/WhatsNewController.php
+++ b/core/Controller/WhatsNewController.php
@@ -29,6 +29,7 @@ use OC\Security\IdentityProof\Manager;
use OC\Updater\ChangesCheck;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\DataResponse;
use OCP\Defaults;
use OCP\IConfig;
@@ -63,6 +64,7 @@ class WhatsNewController extends OCSController {
* 200: Changes returned
* 204: No changes
*/
+ #[ApiRoute(verb: 'GET', url: '/whatsnew', root: '/core')]
public function get():DataResponse {
$user = $this->userSession->getUser();
if ($user === null) {
@@ -110,6 +112,7 @@ class WhatsNewController extends OCSController {
*
* 200: Changes dismissed
*/
+ #[ApiRoute(verb: 'POST', url: '/whatsnew', root: '/core')]
public function dismiss(string $version):DataResponse {
$user = $this->userSession->getUser();
if ($user === null) {
diff --git a/core/Controller/WipeController.php b/core/Controller/WipeController.php
index c18b74e4b96..3e486003668 100644
--- a/core/Controller/WipeController.php
+++ b/core/Controller/WipeController.php
@@ -29,6 +29,7 @@ namespace OC\Core\Controller;
use OC\Authentication\Token\RemoteWipe;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\JSONResponse;
use OCP\Authentication\Exceptions\InvalidTokenException;
use OCP\IRequest;
@@ -58,6 +59,7 @@ class WipeController extends Controller {
* 200: Device should be wiped
* 404: Device should not be wiped
*/
+ #[FrontpageRoute(verb: 'POST', url: '/core/wipe/check')]
public function checkWipe(string $token): JSONResponse {
try {
if ($this->remoteWipe->start($token)) {
@@ -89,6 +91,7 @@ class WipeController extends Controller {
* 200: Wipe finished successfully
* 404: Device should not be wiped
*/
+ #[FrontpageRoute(verb: 'POST', url: '/core/wipe/success')]
public function wipeDone(string $token): JSONResponse {
try {
if ($this->remoteWipe->finish($token)) {
diff --git a/core/openapi.json b/core/openapi.json
index 931f680f075..2c6b5f28ef2 100644
--- a/core/openapi.json
+++ b/core/openapi.json
@@ -639,827 +639,14 @@
}
},
"paths": {
- "/index.php/avatar/{userId}/{size}/dark": {
- "get": {
- "operationId": "avatar-get-avatar-dark",
- "summary": "Get the dark avatar",
- "tags": [
- "avatar"
- ],
- "security": [
- {},
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "userId",
- "in": "path",
- "description": "ID of the user",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "size",
- "in": "path",
- "description": "Size of the avatar",
- "required": true,
- "schema": {
- "type": "integer",
- "format": "int64"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Avatar returned",
- "headers": {
- "X-NC-IsCustomAvatar": {
- "schema": {
- "type": "integer",
- "format": "int64"
- }
- }
- },
- "content": {
- "*/*": {
- "schema": {
- "type": "string",
- "format": "binary"
- }
- }
- }
- },
- "404": {
- "description": "Avatar not found",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- }
- }
- }
- },
- "/index.php/avatar/{userId}/{size}": {
- "get": {
- "operationId": "avatar-get-avatar",
- "summary": "Get the avatar",
- "tags": [
- "avatar"
- ],
- "security": [
- {},
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "userId",
- "in": "path",
- "description": "ID of the user",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "size",
- "in": "path",
- "description": "Size of the avatar",
- "required": true,
- "schema": {
- "type": "integer",
- "format": "int64"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Avatar returned",
- "headers": {
- "X-NC-IsCustomAvatar": {
- "schema": {
- "type": "integer",
- "format": "int64"
- }
- }
- },
- "content": {
- "*/*": {
- "schema": {
- "type": "string",
- "format": "binary"
- }
- }
- }
- },
- "404": {
- "description": "Avatar not found",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- }
- }
- }
- },
- "/index.php/avatar/guest/{guestName}/{size}/dark": {
- "get": {
- "operationId": "guest_avatar-get-avatar-dark",
- "summary": "Returns a dark guest avatar image response",
- "tags": [
- "guest_avatar"
- ],
- "security": [
- {},
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "guestName",
- "in": "path",
- "description": "The guest name, e.g. \"Albert\"",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "size",
- "in": "path",
- "description": "The desired avatar size, e.g. 64 for 64x64px",
- "required": true,
- "schema": {
- "type": "string"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Custom avatar returned",
- "content": {
- "*/*": {
- "schema": {
- "type": "string",
- "format": "binary"
- }
- }
- }
- },
- "201": {
- "description": "Avatar returned",
- "content": {
- "*/*": {
- "schema": {
- "type": "string",
- "format": "binary"
- }
- }
- }
- },
- "500": {
- "description": ""
- }
- }
- }
- },
- "/index.php/avatar/guest/{guestName}/{size}": {
- "get": {
- "operationId": "guest_avatar-get-avatar",
- "summary": "Returns a guest avatar image response",
- "tags": [
- "guest_avatar"
- ],
- "security": [
- {},
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "darkTheme",
- "in": "query",
- "description": "Return dark avatar",
- "schema": {
- "type": "integer",
- "nullable": true,
- "default": 0,
- "enum": [
- 0,
- 1
- ]
- }
- },
- {
- "name": "guestName",
- "in": "path",
- "description": "The guest name, e.g. \"Albert\"",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "size",
- "in": "path",
- "description": "The desired avatar size, e.g. 64 for 64x64px",
- "required": true,
- "schema": {
- "type": "string"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Custom avatar returned",
- "content": {
- "*/*": {
- "schema": {
- "type": "string",
- "format": "binary"
- }
- }
- }
- },
- "201": {
- "description": "Avatar returned",
- "content": {
- "*/*": {
- "schema": {
- "type": "string",
- "format": "binary"
- }
- }
- }
- },
- "500": {
- "description": ""
- }
- }
- }
- },
- "/index.php/login/confirm": {
- "post": {
- "operationId": "login-confirm-password",
- "summary": "Confirm the user password",
- "tags": [
- "login"
- ],
- "security": [
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "password",
- "in": "query",
- "description": "The password of the user",
- "required": true,
- "schema": {
- "type": "string"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Password confirmation succeeded",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "lastLogin"
- ],
- "properties": {
- "lastLogin": {
- "type": "integer",
- "format": "int64"
- }
- }
- }
- }
- }
- },
- "403": {
- "description": "Password confirmation failed",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- }
- }
- }
- },
- "/index.php/login/v2/poll": {
- "post": {
- "operationId": "client_flow_login_v2-poll",
- "summary": "Poll the login flow credentials",
- "tags": [
- "client_flow_login_v2"
- ],
- "security": [
- {},
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "token",
- "in": "query",
- "description": "Token of the flow",
- "required": true,
- "schema": {
- "type": "string"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Login flow credentials returned",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/LoginFlowV2Credentials"
- }
- }
- }
- },
- "404": {
- "description": "Login flow not found or completed",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- }
- }
- }
- },
- "/index.php/login/v2": {
- "post": {
- "operationId": "client_flow_login_v2-init",
- "summary": "Init a login flow",
- "tags": [
- "client_flow_login_v2"
- ],
- "security": [
- {},
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "responses": {
- "200": {
- "description": "Login flow init returned",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/LoginFlowV2"
- }
- }
- }
- }
- }
- }
- },
- "/index.php/core/preview": {
- "get": {
- "operationId": "preview-get-preview-by-file-id",
- "summary": "Get a preview by file ID",
- "tags": [
- "preview"
- ],
- "security": [
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "fileId",
- "in": "query",
- "description": "ID of the file",
- "schema": {
- "type": "integer",
- "format": "int64",
- "default": -1
- }
- },
- {
- "name": "x",
- "in": "query",
- "description": "Width of the preview",
- "schema": {
- "type": "integer",
- "format": "int64",
- "default": 32
- }
- },
- {
- "name": "y",
- "in": "query",
- "description": "Height of the preview",
- "schema": {
- "type": "integer",
- "format": "int64",
- "default": 32
- }
- },
- {
- "name": "a",
- "in": "query",
- "description": "Whether to not crop the preview",
- "schema": {
- "type": "integer",
- "default": 0,
- "enum": [
- 0,
- 1
- ]
- }
- },
- {
- "name": "forceIcon",
- "in": "query",
- "description": "Force returning an icon",
- "schema": {
- "type": "integer",
- "default": 1,
- "enum": [
- 0,
- 1
- ]
- }
- },
- {
- "name": "mode",
- "in": "query",
- "description": "How to crop the image",
- "schema": {
- "type": "string",
- "default": "fill"
- }
- },
- {
- "name": "mimeFallback",
- "in": "query",
- "description": "Whether to fallback to the mime icon if no preview is available",
- "schema": {
- "type": "integer",
- "default": 0,
- "enum": [
- 0,
- 1
- ]
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Preview returned",
- "content": {
- "*/*": {
- "schema": {
- "type": "string",
- "format": "binary"
- }
- }
- }
- },
- "400": {
- "description": "Getting preview is not possible",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- },
- "403": {
- "description": "Getting preview is not allowed",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- },
- "404": {
- "description": "Preview not found",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- },
- "303": {
- "description": "Redirect to the mime icon url if mimeFallback is true",
- "headers": {
- "Location": {
- "schema": {
- "type": "string"
- }
- }
- }
- }
- }
- }
- },
- "/index.php/core/preview.png": {
- "get": {
- "operationId": "preview-get-preview",
- "summary": "Get a preview by file path",
- "tags": [
- "preview"
- ],
- "security": [
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "file",
- "in": "query",
- "description": "Path of the file",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "x",
- "in": "query",
- "description": "Width of the preview",
- "schema": {
- "type": "integer",
- "format": "int64",
- "default": 32
- }
- },
- {
- "name": "y",
- "in": "query",
- "description": "Height of the preview",
- "schema": {
- "type": "integer",
- "format": "int64",
- "default": 32
- }
- },
- {
- "name": "a",
- "in": "query",
- "description": "Whether to not crop the preview",
- "schema": {
- "type": "integer",
- "default": 0,
- "enum": [
- 0,
- 1
- ]
- }
- },
- {
- "name": "forceIcon",
- "in": "query",
- "description": "Force returning an icon",
- "schema": {
- "type": "integer",
- "default": 1,
- "enum": [
- 0,
- 1
- ]
- }
- },
- {
- "name": "mode",
- "in": "query",
- "description": "How to crop the image",
- "schema": {
- "type": "string",
- "default": "fill"
- }
- },
- {
- "name": "mimeFallback",
- "in": "query",
- "description": "Whether to fallback to the mime icon if no preview is available",
- "schema": {
- "type": "integer",
- "default": 0,
- "enum": [
- 0,
- 1
- ]
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Preview returned",
- "content": {
- "*/*": {
- "schema": {
- "type": "string",
- "format": "binary"
- }
- }
- }
- },
- "400": {
- "description": "Getting preview is not possible",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- },
- "403": {
- "description": "Getting preview is not allowed",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- },
- "404": {
- "description": "Preview not found",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- },
- "303": {
- "description": "Redirect to the mime icon url if mimeFallback is true",
- "headers": {
- "Location": {
- "schema": {
- "type": "string"
- }
- }
- }
- }
- }
- }
- },
- "/index.php/core/references/preview/{referenceId}": {
+ "/ocs/v2.php/core/getapppassword": {
"get": {
- "operationId": "reference-preview",
- "summary": "Get a preview for a reference",
- "tags": [
- "reference"
- ],
- "security": [
- {},
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "referenceId",
- "in": "path",
- "description": "the reference cache key",
- "required": true,
- "schema": {
- "type": "string"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Preview returned",
- "content": {
- "*/*": {
- "schema": {
- "type": "string",
- "format": "binary"
- }
- }
- }
- },
- "404": {
- "description": "Reference not found",
- "content": {
- "application/json": {
- "schema": {
- "type": "string"
- }
- }
- }
- }
- }
- }
- },
- "/index.php/core/wipe/check": {
- "post": {
- "operationId": "wipe-check-wipe",
- "summary": "Check if the device should be wiped",
- "tags": [
- "wipe"
- ],
- "security": [
- {},
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "token",
- "in": "query",
- "description": "App password",
- "required": true,
- "schema": {
- "type": "string"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Device should be wiped",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "wipe"
- ],
- "properties": {
- "wipe": {
- "type": "boolean"
- }
- }
- }
- }
- }
- },
- "404": {
- "description": "Device should not be wiped",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- }
- }
- }
- },
- "/index.php/core/wipe/success": {
- "post": {
- "operationId": "wipe-wipe-done",
- "summary": "Finish the wipe",
+ "operationId": "app_password-get-app-password",
+ "summary": "Create app password",
"tags": [
- "wipe"
+ "app_password"
],
"security": [
- {},
{
"bearer_auth": []
},
@@ -1469,113 +656,46 @@
],
"parameters": [
{
- "name": "token",
- "in": "query",
- "description": "App password",
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
"required": true,
"schema": {
- "type": "string"
+ "type": "boolean",
+ "default": true
}
}
],
"responses": {
"200": {
- "description": "Wipe finished successfully",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- },
- "404": {
- "description": "Device should not be wiped",
- "content": {
- "application/json": {
- "schema": {}
- }
- }
- }
- }
- }
- },
- "/index.php/ocm-provider": {
- "get": {
- "operationId": "ocm-discovery",
- "summary": "generate a OCMProvider with local data and send it as DataResponse. This replaces the old PHP file ocm-provider/index.php",
- "tags": [
- "ocm"
- ],
- "security": [
- {},
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "responses": {
- "200": {
- "description": "OCM Provider details returned",
- "headers": {
- "X-NEXTCLOUD-OCM-PROVIDERS": {
- "schema": {
- "type": "boolean",
- "enum": [
- true
- ]
- }
- }
- },
+ "description": "App password returned",
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
- "enabled",
- "apiVersion",
- "endPoint",
- "resourceTypes"
+ "ocs"
],
"properties": {
- "enabled": {
- "type": "boolean"
- },
- "apiVersion": {
- "type": "string"
- },
- "endPoint": {
- "type": "string"
- },
- "resourceTypes": {
- "type": "array",
- "items": {
- "type": "object",
- "required": [
- "name",
- "shareTypes",
- "protocols"
- ],
- "properties": {
- "name": {
- "type": "string"
- },
- "shareTypes": {
- "type": "array",
- "items": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "apppassword"
+ ],
+ "properties": {
+ "apppassword": {
"type": "string"
}
- },
- "protocols": {
- "type": "object",
- "required": [
- "webdav"
- ],
- "properties": {
- "webdav": {
- "type": "string"
- }
- }
}
}
}
@@ -1585,20 +705,12 @@
}
}
},
- "500": {
- "description": "OCM not supported",
+ "403": {
+ "description": "Creating app password is not allowed",
"content": {
- "application/json": {
+ "text/plain": {
"schema": {
- "type": "object",
- "required": [
- "message"
- ],
- "properties": {
- "message": {
- "type": "string"
- }
- }
+ "type": "string"
}
}
}
@@ -1606,15 +718,14 @@
}
}
},
- "/ocs/v2.php/cloud/capabilities": {
- "get": {
- "operationId": "ocs-get-capabilities",
- "summary": "Get the capabilities",
+ "/ocs/v2.php/core/apppassword": {
+ "delete": {
+ "operationId": "app_password-delete-app-password",
+ "summary": "Delete app password",
"tags": [
- "ocs"
+ "app_password"
],
"security": [
- {},
{
"bearer_auth": []
},
@@ -1636,7 +747,7 @@
],
"responses": {
"200": {
- "description": "Capabilities returned",
+ "description": "App password deleted successfully",
"content": {
"application/json": {
"schema": {
@@ -1655,71 +766,33 @@
"meta": {
"$ref": "#/components/schemas/OCSMeta"
},
- "data": {
- "type": "object",
- "required": [
- "version",
- "capabilities"
- ],
- "properties": {
- "version": {
- "type": "object",
- "required": [
- "major",
- "minor",
- "micro",
- "string",
- "edition",
- "extendedSupport"
- ],
- "properties": {
- "major": {
- "type": "integer",
- "format": "int64"
- },
- "minor": {
- "type": "integer",
- "format": "int64"
- },
- "micro": {
- "type": "integer",
- "format": "int64"
- },
- "string": {
- "type": "string"
- },
- "edition": {
- "type": "string"
- },
- "extendedSupport": {
- "type": "boolean"
- }
- }
- },
- "capabilities": {
- "type": "object",
- "additionalProperties": {
- "type": "object"
- }
- }
- }
- }
+ "data": {}
}
}
}
}
}
}
+ },
+ "403": {
+ "description": "Deleting app password is not allowed",
+ "content": {
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
}
}
}
},
- "/ocs/v2.php/core/navigation/apps": {
- "get": {
- "operationId": "navigation-get-apps-navigation",
- "summary": "Get the apps navigation",
+ "/ocs/v2.php/core/apppassword/rotate": {
+ "post": {
+ "operationId": "app_password-rotate-app-password",
+ "summary": "Rotate app password",
"tags": [
- "navigation"
+ "app_password"
],
"security": [
{
@@ -1731,19 +804,6 @@
],
"parameters": [
{
- "name": "absolute",
- "in": "query",
- "description": "Rewrite URLs to absolute ones",
- "schema": {
- "type": "integer",
- "default": 0,
- "enum": [
- 0,
- 1
- ]
- }
- },
- {
"name": "OCS-APIRequest",
"in": "header",
"description": "Required to be true for the API request to pass",
@@ -1756,7 +816,7 @@
],
"responses": {
"200": {
- "description": "Apps navigation returned",
+ "description": "App password returned",
"content": {
"application/json": {
"schema": {
@@ -1776,9 +836,14 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NavigationEntry"
+ "type": "object",
+ "required": [
+ "apppassword"
+ ],
+ "properties": {
+ "apppassword": {
+ "type": "string"
+ }
}
}
}
@@ -1788,30 +853,12 @@
}
}
},
- "304": {
- "description": "No apps navigation changed",
+ "403": {
+ "description": "Rotating app password is not allowed",
"content": {
- "application/json": {
+ "text/plain": {
"schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {}
- }
- }
- }
+ "type": "string"
}
}
}
@@ -1819,12 +866,12 @@
}
}
},
- "/ocs/v2.php/core/navigation/settings": {
- "get": {
- "operationId": "navigation-get-settings-navigation",
- "summary": "Get the settings navigation",
+ "/ocs/v2.php/core/apppassword/confirm": {
+ "put": {
+ "operationId": "app_password-confirm-user-password",
+ "summary": "Confirm the user password",
"tags": [
- "navigation"
+ "app_password"
],
"security": [
{
@@ -1836,16 +883,12 @@
],
"parameters": [
{
- "name": "absolute",
+ "name": "password",
"in": "query",
- "description": "Rewrite URLs to absolute ones",
+ "description": "The password of the user",
+ "required": true,
"schema": {
- "type": "integer",
- "default": 0,
- "enum": [
- 0,
- 1
- ]
+ "type": "string"
}
},
{
@@ -1861,7 +904,7 @@
],
"responses": {
"200": {
- "description": "Apps navigation returned",
+ "description": "Password confirmation succeeded",
"content": {
"application/json": {
"schema": {
@@ -1881,9 +924,15 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NavigationEntry"
+ "type": "object",
+ "required": [
+ "lastLogin"
+ ],
+ "properties": {
+ "lastLogin": {
+ "type": "integer",
+ "format": "int64"
+ }
}
}
}
@@ -1893,8 +942,8 @@
}
}
},
- "304": {
- "description": "No apps navigation changed",
+ "403": {
+ "description": "Password confirmation failed",
"content": {
"application/json": {
"schema": {
@@ -2047,441 +1096,12 @@
}
}
},
- "/ocs/v2.php/core/whatsnew": {
- "get": {
- "operationId": "whats_new-get",
- "summary": "Get the changes",
- "tags": [
- "whats_new"
- ],
- "security": [
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "OCS-APIRequest",
- "in": "header",
- "description": "Required to be true for the API request to pass",
- "required": true,
- "schema": {
- "type": "boolean",
- "default": true
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Changes returned",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "object",
- "required": [
- "changelogURL",
- "product",
- "version"
- ],
- "properties": {
- "changelogURL": {
- "type": "string"
- },
- "product": {
- "type": "string"
- },
- "version": {
- "type": "string"
- },
- "whatsNew": {
- "type": "object",
- "required": [
- "regular",
- "admin"
- ],
- "properties": {
- "regular": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "admin": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "204": {
- "description": "No changes",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {}
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "post": {
- "operationId": "whats_new-dismiss",
- "summary": "Dismiss the changes",
- "tags": [
- "whats_new"
- ],
- "security": [
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "version",
- "in": "query",
- "description": "Version to dismiss the changes for",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "OCS-APIRequest",
- "in": "header",
- "description": "Required to be true for the API request to pass",
- "required": true,
- "schema": {
- "type": "boolean",
- "default": true
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Changes dismissed",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {}
- }
- }
- }
- }
- }
- }
- },
- "500": {
- "description": "",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
- }
- }
- }
- }
- }
- }
- },
- "/ocs/v2.php/core/getapppassword": {
+ "/ocs/v2.php/collaboration/resources/collections/{collectionId}": {
"get": {
- "operationId": "app_password-get-app-password",
- "summary": "Create app password",
- "tags": [
- "app_password"
- ],
- "security": [
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "OCS-APIRequest",
- "in": "header",
- "description": "Required to be true for the API request to pass",
- "required": true,
- "schema": {
- "type": "boolean",
- "default": true
- }
- }
- ],
- "responses": {
- "200": {
- "description": "App password returned",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "object",
- "required": [
- "apppassword"
- ],
- "properties": {
- "apppassword": {
- "type": "string"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "403": {
- "description": "Creating app password is not allowed",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
- }
- }
- }
- }
- }
- }
- },
- "/ocs/v2.php/core/apppassword/rotate": {
- "post": {
- "operationId": "app_password-rotate-app-password",
- "summary": "Rotate app password",
- "tags": [
- "app_password"
- ],
- "security": [
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "OCS-APIRequest",
- "in": "header",
- "description": "Required to be true for the API request to pass",
- "required": true,
- "schema": {
- "type": "boolean",
- "default": true
- }
- }
- ],
- "responses": {
- "200": {
- "description": "App password returned",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "object",
- "required": [
- "apppassword"
- ],
- "properties": {
- "apppassword": {
- "type": "string"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "403": {
- "description": "Rotating app password is not allowed",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
- }
- }
- }
- }
- }
- }
- },
- "/ocs/v2.php/core/apppassword": {
- "delete": {
- "operationId": "app_password-delete-app-password",
- "summary": "Delete app password",
- "tags": [
- "app_password"
- ],
- "security": [
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "OCS-APIRequest",
- "in": "header",
- "description": "Required to be true for the API request to pass",
- "required": true,
- "schema": {
- "type": "boolean",
- "default": true
- }
- }
- ],
- "responses": {
- "200": {
- "description": "App password deleted successfully",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {}
- }
- }
- }
- }
- }
- }
- },
- "403": {
- "description": "Deleting app password is not allowed",
- "content": {
- "text/plain": {
- "schema": {
- "type": "string"
- }
- }
- }
- }
- }
- }
- },
- "/ocs/v2.php/core/apppassword/confirm": {
- "put": {
- "operationId": "app_password-confirm-user-password",
- "summary": "Confirm the user password",
+ "operationId": "collaboration_resources-list-collection",
+ "summary": "Get a collection",
"tags": [
- "app_password"
+ "collaboration_resources"
],
"security": [
{
@@ -2493,12 +1113,13 @@
],
"parameters": [
{
- "name": "password",
- "in": "query",
- "description": "The password of the user",
+ "name": "collectionId",
+ "in": "path",
+ "description": "ID of the collection",
"required": true,
"schema": {
- "type": "string"
+ "type": "integer",
+ "format": "int64"
}
},
{
@@ -2514,7 +1135,7 @@
],
"responses": {
"200": {
- "description": "Password confirmation succeeded",
+ "description": "Collection returned",
"content": {
"application/json": {
"schema": {
@@ -2534,16 +1155,7 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "type": "object",
- "required": [
- "lastLogin"
- ],
- "properties": {
- "lastLogin": {
- "type": "integer",
- "format": "int64"
- }
- }
+ "$ref": "#/components/schemas/Collection"
}
}
}
@@ -2552,8 +1164,8 @@
}
}
},
- "403": {
- "description": "Password confirmation failed",
+ "404": {
+ "description": "Collection not found",
"content": {
"application/json": {
"schema": {
@@ -2579,98 +1191,9 @@
}
}
}
- }
- }
- }
- },
- "/ocs/v2.php/hovercard/v1/{userId}": {
- "get": {
- "operationId": "hover_card-get-user",
- "summary": "Get the account details for a hovercard",
- "tags": [
- "hover_card"
- ],
- "security": [
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "userId",
- "in": "path",
- "description": "ID of the user",
- "required": true,
- "schema": {
- "type": "string"
- }
},
- {
- "name": "OCS-APIRequest",
- "in": "header",
- "description": "Required to be true for the API request to pass",
- "required": true,
- "schema": {
- "type": "boolean",
- "default": true
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Account details returned",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "object",
- "required": [
- "userId",
- "displayName",
- "actions"
- ],
- "properties": {
- "userId": {
- "type": "string"
- },
- "displayName": {
- "type": "string"
- },
- "actions": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/ContactsAction"
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "404": {
- "description": "Account not found",
+ "500": {
+ "description": "",
"content": {
"application/json": {
"schema": {
@@ -2698,12 +1221,10 @@
}
}
}
- }
- },
- "/ocs/v2.php/collaboration/resources/collections/search/{filter}": {
- "get": {
- "operationId": "collaboration_resources-search-collections",
- "summary": "Search for collections",
+ },
+ "post": {
+ "operationId": "collaboration_resources-add-resource",
+ "summary": "Add a resource to a collection",
"tags": [
"collaboration_resources"
],
@@ -2717,106 +1238,23 @@
],
"parameters": [
{
- "name": "filter",
- "in": "path",
- "description": "Filter collections",
+ "name": "resourceType",
+ "in": "query",
+ "description": "Name of the resource",
"required": true,
"schema": {
"type": "string"
}
},
{
- "name": "OCS-APIRequest",
- "in": "header",
- "description": "Required to be true for the API request to pass",
+ "name": "resourceId",
+ "in": "query",
+ "description": "ID of the resource",
"required": true,
"schema": {
- "type": "boolean",
- "default": true
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Collections returned",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/Collection"
- }
- }
- }
- }
- }
- }
- }
+ "type": "string"
}
},
- "404": {
- "description": "Collection not found",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {}
- }
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "/ocs/v2.php/collaboration/resources/collections/{collectionId}": {
- "get": {
- "operationId": "collaboration_resources-list-collection",
- "summary": "Get a collection",
- "tags": [
- "collaboration_resources"
- ],
- "security": [
- {
- "bearer_auth": []
- },
- {
- "basic_auth": []
- }
- ],
- "parameters": [
{
"name": "collectionId",
"in": "path",
@@ -2870,7 +1308,7 @@
}
},
"404": {
- "description": "Collection not found",
+ "description": "Collection not found or resource inaccessible",
"content": {
"application/json": {
"schema": {
@@ -2927,9 +1365,9 @@
}
}
},
- "put": {
- "operationId": "collaboration_resources-rename-collection",
- "summary": "Rename a collection",
+ "delete": {
+ "operationId": "collaboration_resources-remove-resource",
+ "summary": "Remove a resource from a collection",
"tags": [
"collaboration_resources"
],
@@ -2943,9 +1381,18 @@
],
"parameters": [
{
- "name": "collectionName",
+ "name": "resourceType",
"in": "query",
- "description": "New name",
+ "description": "Name of the resource",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "resourceId",
+ "in": "query",
+ "description": "ID of the resource",
"required": true,
"schema": {
"type": "string"
@@ -3004,7 +1451,7 @@
}
},
"404": {
- "description": "Collection not found",
+ "description": "Collection or resource not found",
"content": {
"application/json": {
"schema": {
@@ -3061,9 +1508,9 @@
}
}
},
- "post": {
- "operationId": "collaboration_resources-add-resource",
- "summary": "Add a resource to a collection",
+ "put": {
+ "operationId": "collaboration_resources-rename-collection",
+ "summary": "Rename a collection",
"tags": [
"collaboration_resources"
],
@@ -3077,18 +1524,9 @@
],
"parameters": [
{
- "name": "resourceType",
- "in": "query",
- "description": "Name of the resource",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "resourceId",
+ "name": "collectionName",
"in": "query",
- "description": "ID of the resource",
+ "description": "New name",
"required": true,
"schema": {
"type": "string"
@@ -3147,7 +1585,7 @@
}
},
"404": {
- "description": "Collection not found or resource inaccessible",
+ "description": "Collection not found",
"content": {
"application/json": {
"schema": {
@@ -3203,10 +1641,12 @@
}
}
}
- },
- "delete": {
- "operationId": "collaboration_resources-remove-resource",
- "summary": "Remove a resource from a collection",
+ }
+ },
+ "/ocs/v2.php/collaboration/resources/collections/search/{filter}": {
+ "get": {
+ "operationId": "collaboration_resources-search-collections",
+ "summary": "Search for collections",
"tags": [
"collaboration_resources"
],
@@ -3220,31 +1660,12 @@
],
"parameters": [
{
- "name": "resourceType",
- "in": "query",
- "description": "Name of the resource",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "resourceId",
- "in": "query",
- "description": "ID of the resource",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "collectionId",
+ "name": "filter",
"in": "path",
- "description": "ID of the collection",
+ "description": "Filter collections",
"required": true,
"schema": {
- "type": "integer",
- "format": "int64"
+ "type": "string"
}
},
{
@@ -3260,7 +1681,7 @@
],
"responses": {
"200": {
- "description": "Collection returned",
+ "description": "Collections returned",
"content": {
"application/json": {
"schema": {
@@ -3280,7 +1701,10 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "$ref": "#/components/schemas/Collection"
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Collection"
+ }
}
}
}
@@ -3290,35 +1714,7 @@
}
},
"404": {
- "description": "Collection or resource not found",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {}
- }
- }
- }
- }
- }
- }
- },
- "500": {
- "description": "",
+ "description": "Collection not found",
"content": {
"application/json": {
"schema": {
@@ -3630,12 +2026,12 @@
}
}
},
- "/ocs/v2.php/references/resolve": {
+ "/ocs/v2.php/hovercard/v1/{userId}": {
"get": {
- "operationId": "reference_api-resolve-one",
- "summary": "Resolve a reference",
+ "operationId": "hover_card-get-user",
+ "summary": "Get the account details for a hovercard",
"tags": [
- "reference_api"
+ "hover_card"
],
"security": [
{
@@ -3647,9 +2043,9 @@
],
"parameters": [
{
- "name": "reference",
- "in": "query",
- "description": "Reference to resolve",
+ "name": "userId",
+ "in": "path",
+ "description": "ID of the user",
"required": true,
"schema": {
"type": "string"
@@ -3668,7 +2064,7 @@
],
"responses": {
"200": {
- "description": "Reference returned",
+ "description": "Account details returned",
"content": {
"application/json": {
"schema": {
@@ -3690,14 +2086,21 @@
"data": {
"type": "object",
"required": [
- "references"
+ "userId",
+ "displayName",
+ "actions"
],
"properties": {
- "references": {
- "type": "object",
- "additionalProperties": {
- "$ref": "#/components/schemas/Reference",
- "nullable": true
+ "userId": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "actions": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ContactsAction"
}
}
}
@@ -3708,14 +2111,44 @@
}
}
}
+ },
+ "404": {
+ "description": "Account not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
+ }
+ }
+ }
}
}
- },
- "post": {
- "operationId": "reference_api-resolve",
- "summary": "Resolve multiple references",
+ }
+ },
+ "/ocs/v2.php/core/navigation/apps": {
+ "get": {
+ "operationId": "navigation-get-apps-navigation",
+ "summary": "Get the apps navigation",
"tags": [
- "reference_api"
+ "navigation"
],
"security": [
{
@@ -3727,25 +2160,16 @@
],
"parameters": [
{
- "name": "references[]",
- "in": "query",
- "description": "References to resolve",
- "required": true,
- "schema": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- {
- "name": "limit",
+ "name": "absolute",
"in": "query",
- "description": "Maximum amount of references to resolve",
+ "description": "Rewrite URLs to absolute ones",
"schema": {
"type": "integer",
- "format": "int64",
- "default": 1
+ "default": 0,
+ "enum": [
+ 0,
+ 1
+ ]
}
},
{
@@ -3761,7 +2185,7 @@
],
"responses": {
"200": {
- "description": "References returned",
+ "description": "Apps navigation returned",
"content": {
"application/json": {
"schema": {
@@ -3781,18 +2205,9 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "type": "object",
- "required": [
- "references"
- ],
- "properties": {
- "references": {
- "type": "object",
- "additionalProperties": {
- "$ref": "#/components/schemas/Reference",
- "nullable": true
- }
- }
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NavigationEntry"
}
}
}
@@ -3801,16 +2216,44 @@
}
}
}
+ },
+ "304": {
+ "description": "No apps navigation changed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
+ }
+ }
+ }
}
}
}
},
- "/ocs/v2.php/references/extract": {
- "post": {
- "operationId": "reference_api-extract",
- "summary": "Extract references from a text",
+ "/ocs/v2.php/core/navigation/settings": {
+ "get": {
+ "operationId": "navigation-get-settings-navigation",
+ "summary": "Get the settings navigation",
"tags": [
- "reference_api"
+ "navigation"
],
"security": [
{
@@ -3822,18 +2265,9 @@
],
"parameters": [
{
- "name": "text",
- "in": "query",
- "description": "Text to extract from",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "resolve",
+ "name": "absolute",
"in": "query",
- "description": "Resolve the references",
+ "description": "Rewrite URLs to absolute ones",
"schema": {
"type": "integer",
"default": 0,
@@ -3844,16 +2278,6 @@
}
},
{
- "name": "limit",
- "in": "query",
- "description": "Maximum amount of references to extract",
- "schema": {
- "type": "integer",
- "format": "int64",
- "default": 1
- }
- },
- {
"name": "OCS-APIRequest",
"in": "header",
"description": "Required to be true for the API request to pass",
@@ -3866,7 +2290,7 @@
],
"responses": {
"200": {
- "description": "References returned",
+ "description": "Apps navigation returned",
"content": {
"application/json": {
"schema": {
@@ -3886,18 +2310,9 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "type": "object",
- "required": [
- "references"
- ],
- "properties": {
- "references": {
- "type": "object",
- "additionalProperties": {
- "$ref": "#/components/schemas/Reference",
- "nullable": true
- }
- }
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NavigationEntry"
}
}
}
@@ -3906,40 +2321,9 @@
}
}
}
- }
- }
- }
- },
- "/ocs/v2.php/references/providers": {
- "get": {
- "operationId": "reference_api-get-providers-info",
- "summary": "Get the providers",
- "tags": [
- "reference_api"
- ],
- "security": [
- {
- "bearer_auth": []
},
- {
- "basic_auth": []
- }
- ],
- "parameters": [
- {
- "name": "OCS-APIRequest",
- "in": "header",
- "description": "Required to be true for the API request to pass",
- "required": true,
- "schema": {
- "type": "boolean",
- "default": true
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Providers returned",
+ "304": {
+ "description": "No apps navigation changed",
"content": {
"application/json": {
"schema": {
@@ -3958,12 +2342,7 @@
"meta": {
"$ref": "#/components/schemas/OCSMeta"
},
- "data": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/ReferenceProvider"
- }
- }
+ "data": {}
}
}
}
@@ -3974,14 +2353,15 @@
}
}
},
- "/ocs/v2.php/references/provider/{providerId}": {
- "put": {
- "operationId": "reference_api-touch-provider",
- "summary": "Touch a provider",
+ "/ocs/v2.php/cloud/capabilities": {
+ "get": {
+ "operationId": "ocs-get-capabilities",
+ "summary": "Get the capabilities",
"tags": [
- "reference_api"
+ "ocs"
],
"security": [
+ {},
{
"bearer_auth": []
},
@@ -3991,25 +2371,6 @@
],
"parameters": [
{
- "name": "timestamp",
- "in": "query",
- "description": "Timestamp of the last usage",
- "schema": {
- "type": "integer",
- "format": "int64",
- "nullable": true
- }
- },
- {
- "name": "providerId",
- "in": "path",
- "description": "ID of the provider",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
"name": "OCS-APIRequest",
"in": "header",
"description": "Required to be true for the API request to pass",
@@ -4022,7 +2383,7 @@
],
"responses": {
"200": {
- "description": "Provider touched",
+ "description": "Capabilities returned",
"content": {
"application/json": {
"schema": {
@@ -4044,11 +2405,49 @@
"data": {
"type": "object",
"required": [
- "success"
+ "version",
+ "capabilities"
],
"properties": {
- "success": {
- "type": "boolean"
+ "version": {
+ "type": "object",
+ "required": [
+ "major",
+ "minor",
+ "micro",
+ "string",
+ "edition",
+ "extendedSupport"
+ ],
+ "properties": {
+ "major": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "minor": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "micro": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "string": {
+ "type": "string"
+ },
+ "edition": {
+ "type": "string"
+ },
+ "extendedSupport": {
+ "type": "boolean"
+ }
+ }
+ },
+ "capabilities": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object"
+ }
}
}
}
@@ -4178,12 +2577,12 @@
}
}
},
- "/ocs/v2.php/search/providers": {
- "get": {
- "operationId": "unified_search-get-providers",
- "summary": "Get the providers for unified search",
+ "/ocs/v2.php/references/extract": {
+ "post": {
+ "operationId": "reference_api-extract",
+ "summary": "Extract references from a text",
"tags": [
- "unified_search"
+ "reference_api"
],
"security": [
{
@@ -4195,12 +2594,35 @@
],
"parameters": [
{
- "name": "from",
+ "name": "text",
"in": "query",
- "description": "the url the user is currently at",
+ "description": "Text to extract from",
+ "required": true,
"schema": {
- "type": "string",
- "default": ""
+ "type": "string"
+ }
+ },
+ {
+ "name": "resolve",
+ "in": "query",
+ "description": "Resolve the references",
+ "schema": {
+ "type": "integer",
+ "default": 0,
+ "enum": [
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "description": "Maximum amount of references to extract",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "default": 1
}
},
{
@@ -4216,7 +2638,7 @@
],
"responses": {
"200": {
- "description": "Providers returned",
+ "description": "References returned",
"content": {
"application/json": {
"schema": {
@@ -4236,9 +2658,18 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/UnifiedSearchProvider"
+ "type": "object",
+ "required": [
+ "references"
+ ],
+ "properties": {
+ "references": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/components/schemas/Reference",
+ "nullable": true
+ }
+ }
}
}
}
@@ -4251,13 +2682,12 @@
}
}
},
- "/ocs/v2.php/search/providers/{providerId}/search": {
+ "/ocs/v2.php/references/resolve": {
"get": {
- "operationId": "unified_search-search",
- "summary": "Launch a search for a specific search provider.",
- "description": "Additional filters are available for each provider. Send a request to /providers endpoint to list providers with their available filters.",
+ "operationId": "reference_api-resolve-one",
+ "summary": "Resolve a reference",
"tags": [
- "unified_search"
+ "reference_api"
],
"security": [
{
@@ -4269,64 +2699,9 @@
],
"parameters": [
{
- "name": "term",
- "in": "query",
- "description": "Term to search",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "sortOrder",
- "in": "query",
- "description": "Order of entries",
- "schema": {
- "type": "integer",
- "format": "int64",
- "nullable": true
- }
- },
- {
- "name": "limit",
- "in": "query",
- "description": "Maximum amount of entries",
- "schema": {
- "type": "integer",
- "format": "int64",
- "nullable": true
- }
- },
- {
- "name": "cursor",
- "in": "query",
- "description": "Offset for searching",
- "schema": {
- "nullable": true,
- "oneOf": [
- {
- "type": "integer",
- "format": "int64"
- },
- {
- "type": "string"
- }
- ]
- }
- },
- {
- "name": "from",
+ "name": "reference",
"in": "query",
- "description": "The current user URL",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "providerId",
- "in": "path",
- "description": "ID of the provider",
+ "description": "Reference to resolve",
"required": true,
"schema": {
"type": "string"
@@ -4345,7 +2720,7 @@
],
"responses": {
"200": {
- "description": "Search entries returned",
+ "description": "Reference returned",
"content": {
"application/json": {
"schema": {
@@ -4365,7 +2740,19 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "$ref": "#/components/schemas/UnifiedSearchResult"
+ "type": "object",
+ "required": [
+ "references"
+ ],
+ "properties": {
+ "references": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/components/schemas/Reference",
+ "nullable": true
+ }
+ }
+ }
}
}
}
@@ -4373,9 +2760,60 @@
}
}
}
+ }
+ }
+ },
+ "post": {
+ "operationId": "reference_api-resolve",
+ "summary": "Resolve multiple references",
+ "tags": [
+ "reference_api"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
},
- "400": {
- "description": "Searching is not possible",
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "references[]",
+ "in": "query",
+ "description": "References to resolve",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "description": "Maximum amount of references to resolve",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "default": 1
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "References returned",
"content": {
"application/json": {
"schema": {
@@ -4395,7 +2833,19 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "type": "string"
+ "type": "object",
+ "required": [
+ "references"
+ ],
+ "properties": {
+ "references": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/components/schemas/Reference",
+ "nullable": true
+ }
+ }
+ }
}
}
}
@@ -4407,15 +2857,14 @@
}
}
},
- "/ocs/v2.php/translation/languages": {
+ "/ocs/v2.php/references/providers": {
"get": {
- "operationId": "translation_api-languages",
- "summary": "Get the list of supported languages",
+ "operationId": "reference_api-get-providers-info",
+ "summary": "Get the providers",
"tags": [
- "translation_api"
+ "reference_api"
],
"security": [
- {},
{
"bearer_auth": []
},
@@ -4437,7 +2886,7 @@
],
"responses": {
"200": {
- "description": "Supported languages returned",
+ "description": "Providers returned",
"content": {
"application/json": {
"schema": {
@@ -4457,41 +2906,9 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "type": "object",
- "required": [
- "languages",
- "languageDetection"
- ],
- "properties": {
- "languages": {
- "type": "array",
- "items": {
- "type": "object",
- "required": [
- "from",
- "fromLabel",
- "to",
- "toLabel"
- ],
- "properties": {
- "from": {
- "type": "string"
- },
- "fromLabel": {
- "type": "string"
- },
- "to": {
- "type": "string"
- },
- "toLabel": {
- "type": "string"
- }
- }
- }
- },
- "languageDetection": {
- "type": "boolean"
- }
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ReferenceProvider"
}
}
}
@@ -4504,15 +2921,14 @@
}
}
},
- "/ocs/v2.php/translation/translate": {
- "post": {
- "operationId": "translation_api-translate",
- "summary": "Translate a text",
+ "/ocs/v2.php/references/provider/{providerId}": {
+ "put": {
+ "operationId": "reference_api-touch-provider",
+ "summary": "Touch a provider",
"tags": [
- "translation_api"
+ "reference_api"
],
"security": [
- {},
{
"bearer_auth": []
},
@@ -4522,27 +2938,19 @@
],
"parameters": [
{
- "name": "text",
- "in": "query",
- "description": "Text to be translated",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "fromLanguage",
+ "name": "timestamp",
"in": "query",
- "description": "Language to translate from",
+ "description": "Timestamp of the last usage",
"schema": {
- "type": "string",
+ "type": "integer",
+ "format": "int64",
"nullable": true
}
},
{
- "name": "toLanguage",
- "in": "query",
- "description": "Language to translate to",
+ "name": "providerId",
+ "in": "path",
+ "description": "ID of the provider",
"required": true,
"schema": {
"type": "string"
@@ -4561,134 +2969,7 @@
],
"responses": {
"200": {
- "description": "Translated text returned",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "object",
- "required": [
- "text",
- "from"
- ],
- "properties": {
- "text": {
- "type": "string"
- },
- "from": {
- "type": "string",
- "nullable": true
- }
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "400": {
- "description": "Language not detected or unable to translate",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "object",
- "required": [
- "message"
- ],
- "properties": {
- "message": {
- "type": "string"
- },
- "from": {
- "type": "string",
- "nullable": true
- }
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "412": {
- "description": "Translating is not possible",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "required": [
- "ocs"
- ],
- "properties": {
- "ocs": {
- "type": "object",
- "required": [
- "meta",
- "data"
- ],
- "properties": {
- "meta": {
- "$ref": "#/components/schemas/OCSMeta"
- },
- "data": {
- "type": "object",
- "required": [
- "message"
- ],
- "properties": {
- "message": {
- "type": "string"
- },
- "from": {
- "type": "string",
- "nullable": true
- }
- }
- }
- }
- }
- }
- }
- }
- }
- },
- "500": {
- "description": "",
+ "description": "Provider touched",
"content": {
"application/json": {
"schema": {
@@ -4710,15 +2991,11 @@
"data": {
"type": "object",
"required": [
- "message"
+ "success"
],
"properties": {
- "message": {
- "type": "string"
- },
- "from": {
- "type": "string",
- "nullable": true
+ "success": {
+ "type": "boolean"
}
}
}
@@ -6307,6 +4584,1729 @@
}
}
},
+ "/ocs/v2.php/translation/languages": {
+ "get": {
+ "operationId": "translation_api-languages",
+ "summary": "Get the list of supported languages",
+ "tags": [
+ "translation_api"
+ ],
+ "security": [
+ {},
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Supported languages returned",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "languages",
+ "languageDetection"
+ ],
+ "properties": {
+ "languages": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "from",
+ "fromLabel",
+ "to",
+ "toLabel"
+ ],
+ "properties": {
+ "from": {
+ "type": "string"
+ },
+ "fromLabel": {
+ "type": "string"
+ },
+ "to": {
+ "type": "string"
+ },
+ "toLabel": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "languageDetection": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/ocs/v2.php/translation/translate": {
+ "post": {
+ "operationId": "translation_api-translate",
+ "summary": "Translate a text",
+ "tags": [
+ "translation_api"
+ ],
+ "security": [
+ {},
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "text",
+ "in": "query",
+ "description": "Text to be translated",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "fromLanguage",
+ "in": "query",
+ "description": "Language to translate from",
+ "schema": {
+ "type": "string",
+ "nullable": true
+ }
+ },
+ {
+ "name": "toLanguage",
+ "in": "query",
+ "description": "Language to translate to",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Translated text returned",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "text",
+ "from"
+ ],
+ "properties": {
+ "text": {
+ "type": "string"
+ },
+ "from": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Language not detected or unable to translate",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "from": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "412": {
+ "description": "Translating is not possible",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "from": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "from": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/ocs/v2.php/search/providers": {
+ "get": {
+ "operationId": "unified_search-get-providers",
+ "summary": "Get the providers for unified search",
+ "tags": [
+ "unified_search"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "from",
+ "in": "query",
+ "description": "the url the user is currently at",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Providers returned",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UnifiedSearchProvider"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/ocs/v2.php/search/providers/{providerId}/search": {
+ "get": {
+ "operationId": "unified_search-search",
+ "summary": "Launch a search for a specific search provider.",
+ "description": "Additional filters are available for each provider. Send a request to /providers endpoint to list providers with their available filters.",
+ "tags": [
+ "unified_search"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "term",
+ "in": "query",
+ "description": "Term to search",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "name": "sortOrder",
+ "in": "query",
+ "description": "Order of entries",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "description": "Maximum amount of entries",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true
+ }
+ },
+ {
+ "name": "cursor",
+ "in": "query",
+ "description": "Offset for searching",
+ "schema": {
+ "nullable": true,
+ "oneOf": [
+ {
+ "type": "integer",
+ "format": "int64"
+ },
+ {
+ "type": "string"
+ }
+ ]
+ }
+ },
+ {
+ "name": "from",
+ "in": "query",
+ "description": "The current user URL",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "name": "providerId",
+ "in": "path",
+ "description": "ID of the provider",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Search entries returned",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "$ref": "#/components/schemas/UnifiedSearchResult"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Searching is not possible",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/ocs/v2.php/core/whatsnew": {
+ "get": {
+ "operationId": "whats_new-get",
+ "summary": "Get the changes",
+ "tags": [
+ "whats_new"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Changes returned",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "changelogURL",
+ "product",
+ "version"
+ ],
+ "properties": {
+ "changelogURL": {
+ "type": "string"
+ },
+ "product": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ },
+ "whatsNew": {
+ "type": "object",
+ "required": [
+ "regular",
+ "admin"
+ ],
+ "properties": {
+ "regular": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "admin": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "204": {
+ "description": "No changes",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "operationId": "whats_new-dismiss",
+ "summary": "Dismiss the changes",
+ "tags": [
+ "whats_new"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "version",
+ "in": "query",
+ "description": "Version to dismiss the changes for",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Changes dismissed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "",
+ "content": {
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/index.php/avatar/{userId}/{size}/dark": {
+ "get": {
+ "operationId": "avatar-get-avatar-dark",
+ "summary": "Get the dark avatar",
+ "tags": [
+ "avatar"
+ ],
+ "security": [
+ {},
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "userId",
+ "in": "path",
+ "description": "ID of the user",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "size",
+ "in": "path",
+ "description": "Size of the avatar",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Avatar returned",
+ "headers": {
+ "X-NC-IsCustomAvatar": {
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ },
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Avatar not found",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
+ "/index.php/avatar/{userId}/{size}": {
+ "get": {
+ "operationId": "avatar-get-avatar",
+ "summary": "Get the avatar",
+ "tags": [
+ "avatar"
+ ],
+ "security": [
+ {},
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "userId",
+ "in": "path",
+ "description": "ID of the user",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "size",
+ "in": "path",
+ "description": "Size of the avatar",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Avatar returned",
+ "headers": {
+ "X-NC-IsCustomAvatar": {
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ },
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Avatar not found",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
+ "/index.php/login/v2/poll": {
+ "post": {
+ "operationId": "client_flow_login_v2-poll",
+ "summary": "Poll the login flow credentials",
+ "tags": [
+ "client_flow_login_v2"
+ ],
+ "security": [
+ {},
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "token",
+ "in": "query",
+ "description": "Token of the flow",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Login flow credentials returned",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/LoginFlowV2Credentials"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Login flow not found or completed",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
+ "/index.php/login/v2": {
+ "post": {
+ "operationId": "client_flow_login_v2-init",
+ "summary": "Init a login flow",
+ "tags": [
+ "client_flow_login_v2"
+ ],
+ "security": [
+ {},
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Login flow init returned",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/LoginFlowV2"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/index.php/avatar/guest/{guestName}/{size}": {
+ "get": {
+ "operationId": "guest_avatar-get-avatar",
+ "summary": "Returns a guest avatar image response",
+ "tags": [
+ "guest_avatar"
+ ],
+ "security": [
+ {},
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "darkTheme",
+ "in": "query",
+ "description": "Return dark avatar",
+ "schema": {
+ "type": "integer",
+ "nullable": true,
+ "default": 0,
+ "enum": [
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "guestName",
+ "in": "path",
+ "description": "The guest name, e.g. \"Albert\"",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "size",
+ "in": "path",
+ "description": "The desired avatar size, e.g. 64 for 64x64px",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Custom avatar returned",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ }
+ },
+ "201": {
+ "description": "Avatar returned",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": ""
+ }
+ }
+ }
+ },
+ "/index.php/avatar/guest/{guestName}/{size}/dark": {
+ "get": {
+ "operationId": "guest_avatar-get-avatar-dark",
+ "summary": "Returns a dark guest avatar image response",
+ "tags": [
+ "guest_avatar"
+ ],
+ "security": [
+ {},
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "guestName",
+ "in": "path",
+ "description": "The guest name, e.g. \"Albert\"",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "size",
+ "in": "path",
+ "description": "The desired avatar size, e.g. 64 for 64x64px",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Custom avatar returned",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ }
+ },
+ "201": {
+ "description": "Avatar returned",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": ""
+ }
+ }
+ }
+ },
+ "/index.php/login/confirm": {
+ "post": {
+ "operationId": "login-confirm-password",
+ "summary": "Confirm the user password",
+ "tags": [
+ "login"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "password",
+ "in": "query",
+ "description": "The password of the user",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Password confirmation succeeded",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "lastLogin"
+ ],
+ "properties": {
+ "lastLogin": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "Password confirmation failed",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
+ "/index.php/ocm-provider": {
+ "get": {
+ "operationId": "ocm-discovery",
+ "summary": "generate a OCMProvider with local data and send it as DataResponse. This replaces the old PHP file ocm-provider/index.php",
+ "tags": [
+ "ocm"
+ ],
+ "security": [
+ {},
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OCM Provider details returned",
+ "headers": {
+ "X-NEXTCLOUD-OCM-PROVIDERS": {
+ "schema": {
+ "type": "boolean",
+ "enum": [
+ true
+ ]
+ }
+ }
+ },
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "enabled",
+ "apiVersion",
+ "endPoint",
+ "resourceTypes"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "apiVersion": {
+ "type": "string"
+ },
+ "endPoint": {
+ "type": "string"
+ },
+ "resourceTypes": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "name",
+ "shareTypes",
+ "protocols"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "shareTypes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "protocols": {
+ "type": "object",
+ "required": [
+ "webdav"
+ ],
+ "properties": {
+ "webdav": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "OCM not supported",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/index.php/core/preview.png": {
+ "get": {
+ "operationId": "preview-get-preview",
+ "summary": "Get a preview by file path",
+ "tags": [
+ "preview"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "file",
+ "in": "query",
+ "description": "Path of the file",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "name": "x",
+ "in": "query",
+ "description": "Width of the preview",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "default": 32
+ }
+ },
+ {
+ "name": "y",
+ "in": "query",
+ "description": "Height of the preview",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "default": 32
+ }
+ },
+ {
+ "name": "a",
+ "in": "query",
+ "description": "Whether to not crop the preview",
+ "schema": {
+ "type": "integer",
+ "default": 0,
+ "enum": [
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "forceIcon",
+ "in": "query",
+ "description": "Force returning an icon",
+ "schema": {
+ "type": "integer",
+ "default": 1,
+ "enum": [
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "mode",
+ "in": "query",
+ "description": "How to crop the image",
+ "schema": {
+ "type": "string",
+ "default": "fill"
+ }
+ },
+ {
+ "name": "mimeFallback",
+ "in": "query",
+ "description": "Whether to fallback to the mime icon if no preview is available",
+ "schema": {
+ "type": "integer",
+ "default": 0,
+ "enum": [
+ 0,
+ 1
+ ]
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Preview returned",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Getting preview is not possible",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "403": {
+ "description": "Getting preview is not allowed",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "404": {
+ "description": "Preview not found",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "303": {
+ "description": "Redirect to the mime icon url if mimeFallback is true",
+ "headers": {
+ "Location": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/index.php/core/preview": {
+ "get": {
+ "operationId": "preview-get-preview-by-file-id",
+ "summary": "Get a preview by file ID",
+ "tags": [
+ "preview"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "fileId",
+ "in": "query",
+ "description": "ID of the file",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "default": -1
+ }
+ },
+ {
+ "name": "x",
+ "in": "query",
+ "description": "Width of the preview",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "default": 32
+ }
+ },
+ {
+ "name": "y",
+ "in": "query",
+ "description": "Height of the preview",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "default": 32
+ }
+ },
+ {
+ "name": "a",
+ "in": "query",
+ "description": "Whether to not crop the preview",
+ "schema": {
+ "type": "integer",
+ "default": 0,
+ "enum": [
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "forceIcon",
+ "in": "query",
+ "description": "Force returning an icon",
+ "schema": {
+ "type": "integer",
+ "default": 1,
+ "enum": [
+ 0,
+ 1
+ ]
+ }
+ },
+ {
+ "name": "mode",
+ "in": "query",
+ "description": "How to crop the image",
+ "schema": {
+ "type": "string",
+ "default": "fill"
+ }
+ },
+ {
+ "name": "mimeFallback",
+ "in": "query",
+ "description": "Whether to fallback to the mime icon if no preview is available",
+ "schema": {
+ "type": "integer",
+ "default": 0,
+ "enum": [
+ 0,
+ 1
+ ]
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Preview returned",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Getting preview is not possible",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "403": {
+ "description": "Getting preview is not allowed",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "404": {
+ "description": "Preview not found",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "303": {
+ "description": "Redirect to the mime icon url if mimeFallback is true",
+ "headers": {
+ "Location": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/index.php/core/references/preview/{referenceId}": {
+ "get": {
+ "operationId": "reference-preview",
+ "summary": "Get a preview for a reference",
+ "tags": [
+ "reference"
+ ],
+ "security": [
+ {},
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "referenceId",
+ "in": "path",
+ "description": "the reference cache key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Preview returned",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Reference not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/index.php/core/wipe/check": {
+ "post": {
+ "operationId": "wipe-check-wipe",
+ "summary": "Check if the device should be wiped",
+ "tags": [
+ "wipe"
+ ],
+ "security": [
+ {},
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "token",
+ "in": "query",
+ "description": "App password",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Device should be wiped",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "wipe"
+ ],
+ "properties": {
+ "wipe": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Device should not be wiped",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
+ "/index.php/core/wipe/success": {
+ "post": {
+ "operationId": "wipe-wipe-done",
+ "summary": "Finish the wipe",
+ "tags": [
+ "wipe"
+ ],
+ "security": [
+ {},
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "token",
+ "in": "query",
+ "description": "App password",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Wipe finished successfully",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "404": {
+ "description": "Device should not be wiped",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
"/status.php": {
"get": {
"operationId": "get-status",
diff --git a/core/routes.php b/core/routes.php
index 9f8bc5c2c1e..4397f8473db 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -35,139 +35,6 @@ declare(strict_types=1);
*
*/
-use OC\Core\Application;
-
-/** @var Application $application */
-$application = \OC::$server->query(Application::class);
-$application->registerRoutes($this, [
- 'routes' => [
- ['name' => 'lost#email', 'url' => '/lostpassword/email', 'verb' => 'POST'],
- ['name' => 'lost#resetform', 'url' => '/lostpassword/reset/form/{token}/{userId}', 'verb' => 'GET'],
- ['name' => 'lost#setPassword', 'url' => '/lostpassword/set/{token}/{userId}', 'verb' => 'POST'],
- ['name' => 'ProfilePage#index', 'url' => '/u/{targetUserId}', 'verb' => 'GET'],
- ['name' => 'user#getDisplayNames', 'url' => '/displaynames', 'verb' => 'POST'],
- ['name' => 'avatar#getAvatarDark', 'url' => '/avatar/{userId}/{size}/dark', 'verb' => 'GET'],
- ['name' => 'avatar#getAvatar', 'url' => '/avatar/{userId}/{size}', 'verb' => 'GET'],
- ['name' => 'avatar#deleteAvatar', 'url' => '/avatar/', 'verb' => 'DELETE'],
- ['name' => 'avatar#postCroppedAvatar', 'url' => '/avatar/cropped', 'verb' => 'POST'],
- ['name' => 'avatar#getTmpAvatar', 'url' => '/avatar/tmp', 'verb' => 'GET'],
- ['name' => 'avatar#postAvatar', 'url' => '/avatar/', 'verb' => 'POST'],
- ['name' => 'GuestAvatar#getAvatarDark', 'url' => '/avatar/guest/{guestName}/{size}/dark', 'verb' => 'GET'],
- ['name' => 'GuestAvatar#getAvatar', 'url' => '/avatar/guest/{guestName}/{size}', 'verb' => 'GET'],
- ['name' => 'CSRFToken#index', 'url' => '/csrftoken', 'verb' => 'GET'],
- ['name' => 'login#tryLogin', 'url' => '/login', 'verb' => 'POST'],
- ['name' => 'login#confirmPassword', 'url' => '/login/confirm', 'verb' => 'POST'],
- ['name' => 'login#showLoginForm', 'url' => '/login', 'verb' => 'GET'],
- ['name' => 'login#logout', 'url' => '/logout', 'verb' => 'GET'],
-
- // Original login flow used by all clients
- ['name' => 'ClientFlowLogin#showAuthPickerPage', 'url' => '/login/flow', 'verb' => 'GET'],
- ['name' => 'ClientFlowLogin#generateAppPassword', 'url' => '/login/flow', 'verb' => 'POST'],
- ['name' => 'ClientFlowLogin#grantPage', 'url' => '/login/flow/grant', 'verb' => 'GET'],
- ['name' => 'ClientFlowLogin#apptokenRedirect', 'url' => '/login/flow/apptoken', 'verb' => 'POST'],
-
- // NG login flow used by desktop client in case of Kerberos/fancy 2fa (smart cards for example)
- ['name' => 'ClientFlowLoginV2#poll', 'url' => '/login/v2/poll', 'verb' => 'POST'],
- ['name' => 'ClientFlowLoginV2#showAuthPickerPage', 'url' => '/login/v2/flow', 'verb' => 'GET'],
- ['name' => 'ClientFlowLoginV2#landing', 'url' => '/login/v2/flow/{token}', 'verb' => 'GET'],
- ['name' => 'ClientFlowLoginV2#grantPage', 'url' => '/login/v2/grant', 'verb' => 'GET'],
- ['name' => 'ClientFlowLoginV2#generateAppPassword', 'url' => '/login/v2/grant', 'verb' => 'POST'],
- ['name' => 'ClientFlowLoginV2#init', 'url' => '/login/v2', 'verb' => 'POST'],
- ['name' => 'ClientFlowLoginV2#apptokenRedirect', 'url' => '/login/v2/apptoken', 'verb' => 'POST'],
- ['name' => 'TwoFactorChallenge#selectChallenge', 'url' => '/login/selectchallenge', 'verb' => 'GET'],
- ['name' => 'TwoFactorChallenge#showChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'GET'],
- ['name' => 'TwoFactorChallenge#solveChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'POST'],
- ['name' => 'TwoFactorChallenge#setupProviders', 'url' => 'login/setupchallenge', 'verb' => 'GET'],
- ['name' => 'TwoFactorChallenge#setupProvider', 'url' => 'login/setupchallenge/{providerId}', 'verb' => 'GET'],
- ['name' => 'TwoFactorChallenge#confirmProviderSetup', 'url' => 'login/setupchallenge/{providerId}', 'verb' => 'POST'],
- ['name' => 'OCJS#getConfig', 'url' => '/core/js/oc.js', 'verb' => 'GET'],
- ['name' => 'Preview#getPreviewByFileId', 'url' => '/core/preview', 'verb' => 'GET'],
- ['name' => 'Preview#getPreview', 'url' => '/core/preview.png', 'verb' => 'GET'],
- ['name' => 'RecommendedApps#index', 'url' => '/core/apps/recommended', 'verb' => 'GET'],
- ['name' => 'Reference#preview', 'url' => '/core/references/preview/{referenceId}', 'verb' => 'GET'],
- ['name' => 'Css#getCss', 'url' => '/css/{appName}/{fileName}', 'verb' => 'GET'],
- ['name' => 'Js#getJs', 'url' => '/js/{appName}/{fileName}', 'verb' => 'GET'],
- ['name' => 'contactsMenu#index', 'url' => '/contactsmenu/contacts', 'verb' => 'POST'],
- ['name' => 'contactsMenu#findOne', 'url' => '/contactsmenu/findOne', 'verb' => 'POST'],
- ['name' => 'WalledGarden#get', 'url' => '/204', 'verb' => 'GET'],
- ['name' => 'Search#search', 'url' => '/core/search', 'verb' => 'GET'],
- ['name' => 'Wipe#checkWipe', 'url' => '/core/wipe/check', 'verb' => 'POST'],
- ['name' => 'Wipe#wipeDone', 'url' => '/core/wipe/success', 'verb' => 'POST'],
-
- // Logins for passwordless auth
- ['name' => 'WebAuthn#startAuthentication', 'url' => 'login/webauthn/start', 'verb' => 'POST'],
- ['name' => 'WebAuthn#finishAuthentication', 'url' => 'login/webauthn/finish', 'verb' => 'POST'],
-
- ['name' => 'Error#error404', 'url' => 'error/404'],
- ['name' => 'Error#error403', 'url' => 'error/403'],
-
- // Well known requests https://tools.ietf.org/html/rfc5785
- ['name' => 'WellKnown#handle', 'url' => '.well-known/{service}'],
-
- // OCM Provider requests https://github.com/cs3org/OCM-API
- ['name' => 'OCM#discovery', 'url' => '/ocm-provider/'],
-
- // Unsupported browser
- ['name' => 'UnsupportedBrowser#index', 'url' => 'unsupported'],
- ],
- 'ocs' => [
- ['root' => '/cloud', 'name' => 'OCS#getCapabilities', 'url' => '/capabilities', 'verb' => 'GET'],
- ['root' => '', 'name' => 'OCS#getConfig', 'url' => '/config', 'verb' => 'GET'],
- ['root' => '/person', 'name' => 'OCS#personCheck', 'url' => '/check', 'verb' => 'POST'],
- ['root' => '/identityproof', 'name' => 'OCS#getIdentityProof', 'url' => '/key/{cloudId}', 'verb' => 'GET'],
- ['root' => '/core', 'name' => 'Navigation#getAppsNavigation', 'url' => '/navigation/apps', 'verb' => 'GET'],
- ['root' => '/core', 'name' => 'Navigation#getSettingsNavigation', 'url' => '/navigation/settings', 'verb' => 'GET'],
- ['root' => '/core', 'name' => 'AutoComplete#get', 'url' => '/autocomplete/get', 'verb' => 'GET'],
- ['root' => '/core', 'name' => 'WhatsNew#get', 'url' => '/whatsnew', 'verb' => 'GET'],
- ['root' => '/core', 'name' => 'WhatsNew#dismiss', 'url' => '/whatsnew', 'verb' => 'POST'],
- ['root' => '/core', 'name' => 'AppPassword#getAppPassword', 'url' => '/getapppassword', 'verb' => 'GET'],
- ['root' => '/core', 'name' => 'AppPassword#rotateAppPassword', 'url' => '/apppassword/rotate', 'verb' => 'POST'],
- ['root' => '/core', 'name' => 'AppPassword#deleteAppPassword', 'url' => '/apppassword', 'verb' => 'DELETE'],
- ['root' => '/core', 'name' => 'AppPassword#confirmUserPassword', 'url' => '/apppassword/confirm', 'verb' => 'PUT'],
-
- ['root' => '/hovercard', 'name' => 'HoverCard#getUser', 'url' => '/v1/{userId}', 'verb' => 'GET'],
-
- ['root' => '/collaboration', 'name' => 'CollaborationResources#searchCollections', 'url' => '/resources/collections/search/{filter}', 'verb' => 'GET'],
- ['root' => '/collaboration', 'name' => 'CollaborationResources#listCollection', 'url' => '/resources/collections/{collectionId}', 'verb' => 'GET'],
- ['root' => '/collaboration', 'name' => 'CollaborationResources#renameCollection', 'url' => '/resources/collections/{collectionId}', 'verb' => 'PUT'],
- ['root' => '/collaboration', 'name' => 'CollaborationResources#addResource', 'url' => '/resources/collections/{collectionId}', 'verb' => 'POST'],
-
- ['root' => '/collaboration', 'name' => 'CollaborationResources#removeResource', 'url' => '/resources/collections/{collectionId}', 'verb' => 'DELETE'],
- ['root' => '/collaboration', 'name' => 'CollaborationResources#getCollectionsByResource', 'url' => '/resources/{resourceType}/{resourceId}', 'verb' => 'GET'],
- ['root' => '/collaboration', 'name' => 'CollaborationResources#createCollectionOnResource', 'url' => '/resources/{baseResourceType}/{baseResourceId}', 'verb' => 'POST'],
-
- ['root' => '/references', 'name' => 'ReferenceApi#resolveOne', 'url' => '/resolve', 'verb' => 'GET'],
- ['root' => '/references', 'name' => 'ReferenceApi#extract', 'url' => '/extract', 'verb' => 'POST'],
- ['root' => '/references', 'name' => 'ReferenceApi#resolve', 'url' => '/resolve', 'verb' => 'POST'],
- ['root' => '/references', 'name' => 'ReferenceApi#getProvidersInfo', 'url' => '/providers', 'verb' => 'GET'],
- ['root' => '/references', 'name' => 'ReferenceApi#touchProvider', 'url' => '/provider/{providerId}', 'verb' => 'PUT'],
-
- ['root' => '/profile', 'name' => 'ProfileApi#setVisibility', 'url' => '/{targetUserId}', 'verb' => 'PUT'],
-
- // Unified search
- ['root' => '/search', 'name' => 'UnifiedSearch#getProviders', 'url' => '/providers', 'verb' => 'GET'],
- ['root' => '/search', 'name' => 'UnifiedSearch#search', 'url' => '/providers/{providerId}/search', 'verb' => 'GET'],
-
- ['root' => '/translation', 'name' => 'TranslationApi#languages', 'url' => '/languages', 'verb' => 'GET'],
- ['root' => '/translation', 'name' => 'TranslationApi#translate', 'url' => '/translate', 'verb' => 'POST'],
-
- ['root' => '/textprocessing', 'name' => 'TextProcessingApi#taskTypes', 'url' => '/tasktypes', 'verb' => 'GET'],
- ['root' => '/textprocessing', 'name' => 'TextProcessingApi#schedule', 'url' => '/schedule', 'verb' => 'POST'],
- ['root' => '/textprocessing', 'name' => 'TextProcessingApi#getTask', 'url' => '/task/{id}', 'verb' => 'GET'],
- ['root' => '/textprocessing', 'name' => 'TextProcessingApi#deleteTask', 'url' => '/task/{id}', 'verb' => 'DELETE'],
- ['root' => '/textprocessing', 'name' => 'TextProcessingApi#listTasksByApp', 'url' => '/tasks/app/{appId}', 'verb' => 'GET'],
-
- ['root' => '/text2image', 'name' => 'TextToImageApi#isAvailable', 'url' => '/is_available', 'verb' => 'GET'],
- ['root' => '/text2image', 'name' => 'TextToImageApi#schedule', 'url' => '/schedule', 'verb' => 'POST'],
- ['root' => '/text2image', 'name' => 'TextToImageApi#getTask', 'url' => '/task/{id}', 'verb' => 'GET'],
- ['root' => '/text2image', 'name' => 'TextToImageApi#getImage', 'url' => '/task/{id}/image/{index}', 'verb' => 'GET'],
- ['root' => '/text2image', 'name' => 'TextToImageApi#deleteTask', 'url' => '/task/{id}', 'verb' => 'DELETE'],
- ['root' => '/text2image', 'name' => 'TextToImageApi#listTasksByApp', 'url' => '/tasks/app/{appId}', 'verb' => 'GET'],
- ],
-]);
-
-// Post installation check
-
/** @var $this OCP\Route\IRouter */
// Core ajax actions
// Routing