From 2e7c569e2a15327151f250b0614d8299065f2848 Mon Sep 17 00:00:00 2001 From: jld3103 Date: Wed, 22 Mar 2023 09:09:34 +0100 Subject: [PATCH 1/2] spec_templates: Skip unsupported types --- packages/spec_templates/lib/method_parameter.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/spec_templates/lib/method_parameter.dart b/packages/spec_templates/lib/method_parameter.dart index 75859975..1e3e1eae 100644 --- a/packages/spec_templates/lib/method_parameter.dart +++ b/packages/spec_templates/lib/method_parameter.dart @@ -75,6 +75,10 @@ class MethodParameter { if (type == 'array') { return 'array'; } + if (type == 'Chain') { + // Unsupported + return null; + } throw Exception( 'Could not infer OpenAPI type from type "$type" for parameter "$name" of method "$methodName" in controller "$controllerName"', From f9ddb3dda18cf8d93bbe5da83cecb87b93953361 Mon Sep 17 00:00:00 2001 From: jld3103 Date: Wed, 22 Mar 2023 09:09:57 +0100 Subject: [PATCH 2/2] Update nextcloud server and notifications to 26.0.0 --- external/nextcloud-notifications | 2 +- external/nextcloud-server | 2 +- packages/neon/lib/src/blocs/user_status.dart | 4 +- .../nextcloud/lib/src/nextcloud.openapi.dart | 71 +++++- .../lib/src/nextcloud.openapi.g.dart | 37 +++ .../nextcloud/lib/src/nextcloud.openapi.json | 35 ++- .../nextcloud/lib/src/version_supported.dart | 2 +- packages/nextcloud/test/core.dart | 8 +- packages/nextcloud/test/notes.dart | 2 +- packages/nextcloud/test/user_status.dart | 18 +- packages/nextcloud/test/webdav.dart | 4 +- specs/core.json | 2 +- specs/notifications.json | 2 +- specs/provisioning_api.json | 10 +- specs/templates/appinfo_core.xml | 2 +- specs/templates/core.json | 236 +++++++++++++++--- specs/templates/notifications.json | 2 +- specs/templates/provisioning_api.json | 2 +- specs/templates/user_status.json | 2 +- specs/user_status.json | 27 +- tool/Dockerfile.dev | 2 +- 21 files changed, 407 insertions(+), 65 deletions(-) diff --git a/external/nextcloud-notifications b/external/nextcloud-notifications index 6205c303..a380eabe 160000 --- a/external/nextcloud-notifications +++ b/external/nextcloud-notifications @@ -1 +1 @@ -Subproject commit 6205c303497c8245415ade86be5122a7e33b01d6 +Subproject commit a380eabe8b369a7103d1f529c82d6b44dce4f6a6 diff --git a/external/nextcloud-server b/external/nextcloud-server index 0c867141..62cfd3b4 160000 --- a/external/nextcloud-server +++ b/external/nextcloud-server @@ -1 +1 @@ -Subproject commit 0c86714144f50a66e845e9ef80d4cd7e6918a4f5 +Subproject commit 62cfd3b4c9ff4d8cdbbe6dcc8b63a1085bb94e3d diff --git a/packages/neon/lib/src/blocs/user_status.dart b/packages/neon/lib/src/blocs/user_status.dart index bda89ae8..3df6d1e9 100644 --- a/packages/neon/lib/src/blocs/user_status.dart +++ b/packages/neon/lib/src/blocs/user_status.dart @@ -38,10 +38,10 @@ class UserStatusBloc extends InteractiveBloc implements UserStatusBlocEvents, Us final isAway = _platform.canUseWindowManager && (!(await windowManager.isFocused()) || !(await windowManager.isVisible())); try { - final status = await _account.client.userStatus.heartbeat( + final response = await _account.client.userStatus.heartbeat( status: isAway ? NextcloudUserStatusType.away : NextcloudUserStatusType.online, ); - userStatus.add(Result.success(status)); + userStatus.add(Result.success(response.ocs.data)); } catch (e) { if (e is NextcloudApiException && e.statusCode == 204) { return; diff --git a/packages/nextcloud/lib/src/nextcloud.openapi.dart b/packages/nextcloud/lib/src/nextcloud.openapi.dart index 85305639..aaae4c24 100644 --- a/packages/nextcloud/lib/src/nextcloud.openapi.dart +++ b/packages/nextcloud/lib/src/nextcloud.openapi.dart @@ -1684,7 +1684,7 @@ class NextcloudUserStatusClient { throw NextcloudApiException.fromResponse(response); // coverage:ignore-line } - Future heartbeat({required NextcloudUserStatusType status}) async { + Future heartbeat({required NextcloudUserStatusType status}) async { var path = '/ocs/v2.php/apps/user_status/api/v1/heartbeat'; final queryParameters = {}; final headers = { @@ -1699,7 +1699,7 @@ class NextcloudUserStatusClient { body, ); if (response.statusCode == 200) { - return NextcloudUserStatusStatus.fromJson( + return NextcloudUserStatusHeartbeat.fromJson( json.decode(utf8.decode(response.body) as String) as Map); } throw NextcloudApiException.fromResponse(response); // coverage:ignore-line @@ -4708,6 +4708,8 @@ class NextcloudProvisioningApiUserDetails { required this.biographyScope, required this.profileEnabled, required this.profileEnabledScope, + required this.fediverse, + required this.fediverseScope, required this.groups, required this.language, required this.locale, @@ -4794,6 +4796,10 @@ class NextcloudProvisioningApiUserDetails { @JsonKey(name: 'profile_enabledScope') final String profileEnabledScope; + final String fediverse; + + final String fediverseScope; + final List groups; final String language; @@ -5852,6 +5858,56 @@ class NextcloudUserStatusPredefinedStatuses { data == null ? null : json.encode(data.toJson()); } +@JsonSerializable() +class NextcloudUserStatusHeartbeat_Ocs { + NextcloudUserStatusHeartbeat_Ocs({ + required this.meta, + required this.data, + }); + + // coverage:ignore-start + factory NextcloudUserStatusHeartbeat_Ocs.fromJson(Map json) => + _$NextcloudUserStatusHeartbeat_OcsFromJson(json); + // coverage:ignore-end + + // coverage:ignore-start + factory NextcloudUserStatusHeartbeat_Ocs.fromJsonString(String data) => + NextcloudUserStatusHeartbeat_Ocs.fromJson(json.decode(data) as Map); + // coverage:ignore-end + + final NextcloudOCSMeta meta; + + final NextcloudUserStatusStatus data; + + // coverage:ignore-start + Map toJson() => _$NextcloudUserStatusHeartbeat_OcsToJson(this); + // coverage:ignore-end + static String? toJsonString(NextcloudUserStatusHeartbeat_Ocs? data) => + data == null ? null : json.encode(data.toJson()); +} + +@JsonSerializable() +class NextcloudUserStatusHeartbeat { + NextcloudUserStatusHeartbeat({required this.ocs}); + + // coverage:ignore-start + factory NextcloudUserStatusHeartbeat.fromJson(Map json) => + _$NextcloudUserStatusHeartbeatFromJson(json); + // coverage:ignore-end + + // coverage:ignore-start + factory NextcloudUserStatusHeartbeat.fromJsonString(String data) => + NextcloudUserStatusHeartbeat.fromJson(json.decode(data) as Map); + // coverage:ignore-end + + final NextcloudUserStatusHeartbeat_Ocs ocs; + + // coverage:ignore-start + Map toJson() => _$NextcloudUserStatusHeartbeatToJson(this); + // coverage:ignore-end + static String? toJsonString(NextcloudUserStatusHeartbeat? data) => data == null ? null : json.encode(data.toJson()); +} + @JsonSerializable() class NextcloudNotificationsNotificationDecryptedSubject { NextcloudNotificationsNotificationDecryptedSubject({ @@ -6496,6 +6552,13 @@ final _deserializers = { NextcloudUserStatusPredefinedStatus.fromJson(data as Map), List: (final data) => (data as List).map((final e) => NextcloudUserStatusPredefinedStatus.fromJson(e as Map)).toList(), + NextcloudUserStatusHeartbeat: (final data) => NextcloudUserStatusHeartbeat.fromJson(data as Map), + List: (final data) => + (data as List).map((final e) => NextcloudUserStatusHeartbeat.fromJson(e as Map)).toList(), + NextcloudUserStatusHeartbeat_Ocs: (final data) => + NextcloudUserStatusHeartbeat_Ocs.fromJson(data as Map), + List: (final data) => + (data as List).map((final e) => NextcloudUserStatusHeartbeat_Ocs.fromJson(e as Map)).toList(), NextcloudNotificationsNotificationDecryptedSubject: (final data) => NextcloudNotificationsNotificationDecryptedSubject.fromJson(data as Map), List: (final data) => (data as List) @@ -6794,6 +6857,10 @@ final _serializers = { List: (final data) => data.map((final e) => e.toJson()).toList(), NextcloudUserStatusPredefinedStatus: (final data) => data.toJson(), List: (final data) => data.map((final e) => e.toJson()).toList(), + NextcloudUserStatusHeartbeat: (final data) => data.toJson(), + List: (final data) => data.map((final e) => e.toJson()).toList(), + NextcloudUserStatusHeartbeat_Ocs: (final data) => data.toJson(), + List: (final data) => data.map((final e) => e.toJson()).toList(), NextcloudNotificationsNotificationDecryptedSubject: (final data) => data.toJson(), List: (final data) => data.map((final e) => e.toJson()).toList(), }; diff --git a/packages/nextcloud/lib/src/nextcloud.openapi.g.dart b/packages/nextcloud/lib/src/nextcloud.openapi.g.dart index 42a11ef2..fa737453 100644 --- a/packages/nextcloud/lib/src/nextcloud.openapi.g.dart +++ b/packages/nextcloud/lib/src/nextcloud.openapi.g.dart @@ -1826,6 +1826,8 @@ NextcloudProvisioningApiUserDetails _$NextcloudProvisioningApiUserDetailsFromJso 'biographyScope', 'profile_enabled', 'profile_enabledScope', + 'fediverse', + 'fediverseScope', 'groups', 'language', 'locale', @@ -1867,6 +1869,8 @@ NextcloudProvisioningApiUserDetails _$NextcloudProvisioningApiUserDetailsFromJso biographyScope: json['biographyScope'] as String, profileEnabled: json['profile_enabled'] as String, profileEnabledScope: json['profile_enabledScope'] as String, + fediverse: json['fediverse'] as String, + fediverseScope: json['fediverseScope'] as String, groups: (json['groups'] as List).map((e) => e as String).toList(), language: json['language'] as String, locale: json['locale'] as String, @@ -1911,6 +1915,8 @@ Map _$NextcloudProvisioningApiUserDetailsToJson(NextcloudProvis 'biographyScope': instance.biographyScope, 'profile_enabled': instance.profileEnabled, 'profile_enabledScope': instance.profileEnabledScope, + 'fediverse': instance.fediverse, + 'fediverseScope': instance.fediverseScope, 'groups': instance.groups, 'language': instance.language, 'locale': instance.locale, @@ -2423,6 +2429,37 @@ Map _$NextcloudUserStatusPredefinedStatusesToJson(NextcloudUser 'ocs': instance.ocs.toJson(), }; +NextcloudUserStatusHeartbeat_Ocs _$NextcloudUserStatusHeartbeat_OcsFromJson(Map json) { + $checkKeys( + json, + allowedKeys: const ['meta', 'data'], + ); + return NextcloudUserStatusHeartbeat_Ocs( + meta: NextcloudOCSMeta.fromJson(json['meta'] as Map), + data: NextcloudUserStatusStatus.fromJson(json['data'] as Map), + ); +} + +Map _$NextcloudUserStatusHeartbeat_OcsToJson(NextcloudUserStatusHeartbeat_Ocs instance) => + { + 'meta': instance.meta.toJson(), + 'data': instance.data.toJson(), + }; + +NextcloudUserStatusHeartbeat _$NextcloudUserStatusHeartbeatFromJson(Map json) { + $checkKeys( + json, + allowedKeys: const ['ocs'], + ); + return NextcloudUserStatusHeartbeat( + ocs: NextcloudUserStatusHeartbeat_Ocs.fromJson(json['ocs'] as Map), + ); +} + +Map _$NextcloudUserStatusHeartbeatToJson(NextcloudUserStatusHeartbeat instance) => { + 'ocs': instance.ocs.toJson(), + }; + NextcloudNotificationsNotificationDecryptedSubject _$NextcloudNotificationsNotificationDecryptedSubjectFromJson( Map json) { $checkKeys( diff --git a/packages/nextcloud/lib/src/nextcloud.openapi.json b/packages/nextcloud/lib/src/nextcloud.openapi.json index 4a6eca5e..06c77abe 100644 --- a/packages/nextcloud/lib/src/nextcloud.openapi.json +++ b/packages/nextcloud/lib/src/nextcloud.openapi.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "Nextcloud", - "version": "25.0.4", + "version": "26.0.0", "description": "All supported Nextcloud APIs in one", "license": { "name": "agpl", @@ -1532,6 +1532,8 @@ "biographyScope", "profile_enabled", "profile_enabledScope", + "fediverse", + "fediverseScope", "groups", "language", "locale", @@ -1667,6 +1669,12 @@ "profile_enabledScope": { "type": "string" }, + "fediverse": { + "type": "string" + }, + "fediverseScope": { + "type": "string" + }, "groups": { "type": "array", "items": { @@ -1956,6 +1964,29 @@ "$ref": "#/components/schemas/UserStatusType" } } + }, + "UserStatusHeartbeat": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/UserStatusStatus" + } + } + } + } } }, "securitySchemes": { @@ -4076,7 +4107,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserStatusStatus" + "$ref": "#/components/schemas/UserStatusHeartbeat" } } } diff --git a/packages/nextcloud/lib/src/version_supported.dart b/packages/nextcloud/lib/src/version_supported.dart index 6ccc4410..5ed050c5 100644 --- a/packages/nextcloud/lib/src/version_supported.dart +++ b/packages/nextcloud/lib/src/version_supported.dart @@ -4,7 +4,7 @@ part of '../nextcloud.dart'; extension CoreVersionSupported on NextcloudCoreClient { /// Checks if the app on the server is supported by the client Future isSupported([final NextcloudCoreServerCapabilities_Ocs_Data? capabilities]) async => - (capabilities ?? (await getCapabilities()).ocs.data).version.major == 25; + (capabilities ?? (await getCapabilities()).ocs.data).version.major == 26; } // ignore: public_member_api_docs diff --git a/packages/nextcloud/test/core.dart b/packages/nextcloud/test/core.dart index 7eecfb40..c2023b89 100644 --- a/packages/nextcloud/test/core.dart +++ b/packages/nextcloud/test/core.dart @@ -27,8 +27,8 @@ Future run(final DockerImage image) async { expect(status.installed, true); expect(status.maintenance, false); expect(status.needsDbUpgrade, false); - expect(status.version, startsWith('25.0.4')); - expect(status.versionstring, '25.0.4'); + expect(status.version, startsWith('26.0.0')); + expect(status.versionstring, '26.0.0'); expect(status.edition, ''); expect(status.productname, 'Nextcloud'); expect(status.extendedSupport, false); @@ -36,8 +36,8 @@ Future run(final DockerImage image) async { test('Get capabilities', () async { final capabilities = await client.core.getCapabilities(); - expect(capabilities.ocs.data.version.major.toString(), '25'); - expect(capabilities.ocs.data.version.string, '25.0.4'); + expect(capabilities.ocs.data.version.major.toString(), '26'); + expect(capabilities.ocs.data.version.string, '26.0.0'); expect(capabilities.ocs.data.capabilities.theming!.name, 'Nextcloud'); expect(capabilities.ocs.data.capabilities.theming!.url, 'https://nextcloud.com'); expect(capabilities.ocs.data.capabilities.theming!.slogan, 'a safe home for all your data'); diff --git a/packages/nextcloud/test/notes.dart b/packages/nextcloud/test/notes.dart index 9d33801b..9dcd2f2f 100644 --- a/packages/nextcloud/test/notes.dart +++ b/packages/nextcloud/test/notes.dart @@ -116,7 +116,7 @@ Future run(final DockerImage image) async { final response = await client.notes.getSettings(); expect(response.notesPath, 'Notes'); expect(response.fileSuffix, '.md'); - expect(response.noteMode, NextcloudNotesSettings_NoteMode.edit); + expect(response.noteMode, NextcloudNotesSettings_NoteMode.rich); }); test('Update settings', () async { diff --git a/packages/nextcloud/test/user_status.dart b/packages/nextcloud/test/user_status.dart index 727a251a..5d5bc8ea 100644 --- a/packages/nextcloud/test/user_status.dart +++ b/packages/nextcloud/test/user_status.dart @@ -165,15 +165,15 @@ Future run(final DockerImage image) async { test('Heartbeat', () async { final response = await client.userStatus.heartbeat(status: NextcloudUserStatusType.online); - expect(response.userId, 'user1'); - expect(response.message, null); - expect(response.messageId, null); - expect(response.messageIsPredefined, false); - expect(response.icon, null); - expect(response.clearAt.userStatusClearAt, null); - expect(response.clearAt.$int, null); - expect(response.status, NextcloudUserStatusType.online); - expect(response.statusIsUserDefined, false); + expect(response.ocs.data.userId, 'user1'); + expect(response.ocs.data.message, null); + expect(response.ocs.data.messageId, null); + expect(response.ocs.data.messageIsPredefined, false); + expect(response.ocs.data.icon, null); + expect(response.ocs.data.clearAt.userStatusClearAt, null); + expect(response.ocs.data.clearAt.$int, null); + expect(response.ocs.data.status, NextcloudUserStatusType.online); + expect(response.ocs.data.statusIsUserDefined, false); }); }); } diff --git a/packages/nextcloud/test/webdav.dart b/packages/nextcloud/test/webdav.dart index e76e471d..6403b501 100644 --- a/packages/nextcloud/test/webdav.dart +++ b/packages/nextcloud/test/webdav.dart @@ -45,7 +45,7 @@ Future run(final DockerImage image) async { WebDavProps.ocSize.name, }, ); - expect(files, hasLength(7)); + expect(files, hasLength(8)); final file = files.singleWhere((final f) => f.name == 'Nextcloud.png'); expect(file.hasPreview, isTrue); expect(file.mimeType, 'image/png'); @@ -83,7 +83,7 @@ Future run(final DockerImage image) async { WebDavProps.ocSize.name, }, ); - expect(files, hasLength(9)); + expect(files, hasLength(10)); final pngFile = files.singleWhere((final f) => f.name == 'test.png'); final txtFile = files.singleWhere((final f) => f.name == 'test.txt'); expect(pngFile.size, pngBytes.lengthInBytes); diff --git a/specs/core.json b/specs/core.json index 29717c08..26a49645 100644 --- a/specs/core.json +++ b/specs/core.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "Core", - "version": "25.0.4", + "version": "26.0.0", "description": "Core functionality of Nextcloud", "license": { "name": "agpl", diff --git a/specs/notifications.json b/specs/notifications.json index b2ca5faf..6edaf15c 100644 --- a/specs/notifications.json +++ b/specs/notifications.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "Notifications", - "version": "2.13.1", + "version": "2.14.0", "description": "This app provides a backend and frontend for the notification API available in Nextcloud.", "license": { "name": "agpl", diff --git a/specs/provisioning_api.json b/specs/provisioning_api.json index 42d3a3a3..c409e897 100644 --- a/specs/provisioning_api.json +++ b/specs/provisioning_api.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "Provisioning API", - "version": "1.15.0", + "version": "1.16.0", "description": "This application enables a set of APIs that external systems can use to manage users, groups and apps.", "license": { "name": "agpl", @@ -131,6 +131,8 @@ "biographyScope", "profile_enabled", "profile_enabledScope", + "fediverse", + "fediverseScope", "groups", "language", "locale", @@ -266,6 +268,12 @@ "profile_enabledScope": { "type": "string" }, + "fediverse": { + "type": "string" + }, + "fediverseScope": { + "type": "string" + }, "groups": { "type": "array", "items": { diff --git a/specs/templates/appinfo_core.xml b/specs/templates/appinfo_core.xml index a7573c89..6ab01f32 100644 --- a/specs/templates/appinfo_core.xml +++ b/specs/templates/appinfo_core.xml @@ -4,6 +4,6 @@ Core Core functionality of Nextcloud - 25.0.4 + 26.0.0 agpl diff --git a/specs/templates/core.json b/specs/templates/core.json index 295da1af..c7ab973d 100644 --- a/specs/templates/core.json +++ b/specs/templates/core.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "Core", - "version": "25.0.4", + "version": "26.0.0", "description": "Core functionality of Nextcloud", "license": { "name": "agpl", @@ -521,19 +521,29 @@ ], "parameters": [ { - "name": "user", + "name": "loginChain", "in": "query", "required": true, "schema": { - "type": "string" + "type": "TODO" + } + }, + { + "name": "user", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "" } }, { "name": "password", "in": "query", - "required": true, + "required": false, "schema": { - "type": "string" + "type": "string", + "default": "" } }, { @@ -920,7 +930,7 @@ { "name": "stateToken", "in": "query", - "required": true, + "required": false, "schema": { "type": "string" } @@ -948,7 +958,7 @@ { "name": "stateToken", "in": "query", - "required": true, + "required": false, "schema": { "type": "string" } @@ -998,7 +1008,7 @@ { "name": "stateToken", "in": "query", - "required": true, + "required": false, "schema": { "type": "string" } @@ -1775,6 +1785,46 @@ } } }, + "/core/error/404": { + "get": { + "operationId": "error-error404-TODO", + "tags": [ + "core" + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/core/error/403": { + "get": { + "operationId": "error-error403-TODO", + "tags": [ + "core" + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, "/core/.well-known/{service}": { "parameters": [ { @@ -1805,6 +1855,26 @@ } } }, + "/core/unsupported": { + "get": { + "operationId": "unsupportedbrowser-index-TODO", + "tags": [ + "core" + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, "/ocs/v2.php/core/capabilities": { "get": { "operationId": "ocs-getcapabilities-TODO", @@ -2548,10 +2618,42 @@ } } }, - "/ocs/v2.php/core/{targetUserId}": { + "/ocs/v2.php/core/providers": { + "get": { + "operationId": "unifiedsearch-getproviders-TODO", + "tags": [ + "core" + ], + "parameters": [ + { + "name": "from", + "in": "query", + "description": "the url the user is currently at", + "required": false, + "schema": { + "type": "string", + "default": "" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/ocs/v2.php/core/provider/{providerId}": { "parameters": [ { - "name": "targetUserId", + "name": "providerId", "in": "path", "required": true, "schema": { @@ -2560,25 +2662,17 @@ } ], "put": { - "operationId": "profileapi-setvisibility-TODO", + "operationId": "referenceapi-touchprovider-TODO", "tags": [ "core" ], "parameters": [ { - "name": "paramId", - "in": "query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "visibility", + "name": "timestamp", "in": "query", - "required": true, + "required": false, "schema": { - "type": "string" + "type": "integer" } } ], @@ -2596,21 +2690,37 @@ } } }, - "/ocs/v2.php/core/providers": { - "get": { - "operationId": "unifiedsearch-getproviders-TODO", + "/ocs/v2.php/core/{targetUserId}": { + "parameters": [ + { + "name": "targetUserId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "put": { + "operationId": "profileapi-setvisibility-TODO", "tags": [ "core" ], "parameters": [ { - "name": "from", + "name": "paramId", "in": "query", - "description": "the url the user is currently at", - "required": false, + "required": true, "schema": { - "type": "string", - "default": "" + "type": "string" + } + }, + { + "name": "visibility", + "in": "query", + "required": true, + "schema": { + "type": "string" } } ], @@ -2701,6 +2811,72 @@ } } } + }, + "/ocs/v2.php/core/languages": { + "get": { + "operationId": "translationapi-languages-TODO", + "tags": [ + "core" + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/ocs/v2.php/core/translate": { + "post": { + "operationId": "translationapi-translate-TODO", + "tags": [ + "core" + ], + "parameters": [ + { + "name": "text", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fromLanguage", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "toLanguage", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } } } } \ No newline at end of file diff --git a/specs/templates/notifications.json b/specs/templates/notifications.json index 25a03f66..d672e45c 100644 --- a/specs/templates/notifications.json +++ b/specs/templates/notifications.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "Notifications", - "version": "2.13.1", + "version": "2.14.0", "description": "This app provides a backend and frontend for the notification API available in Nextcloud.", "license": { "name": "agpl", diff --git a/specs/templates/provisioning_api.json b/specs/templates/provisioning_api.json index 731538a4..153765d1 100644 --- a/specs/templates/provisioning_api.json +++ b/specs/templates/provisioning_api.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "Provisioning API", - "version": "1.15.0", + "version": "1.16.0", "description": "This application enables a set of APIs that external systems can use to manage users, groups and apps.", "license": { "name": "agpl", diff --git a/specs/templates/user_status.json b/specs/templates/user_status.json index 233c6705..309553e8 100644 --- a/specs/templates/user_status.json +++ b/specs/templates/user_status.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "User status", - "version": "1.5.0", + "version": "1.6.0", "description": "User status", "license": { "name": "agpl", diff --git a/specs/user_status.json b/specs/user_status.json index 41f0ecfe..c2fb99a5 100644 --- a/specs/user_status.json +++ b/specs/user_status.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "User status", - "version": "1.5.0", + "version": "1.6.0", "description": "User status", "license": { "name": "agpl", @@ -331,6 +331,29 @@ "$ref": "#/components/schemas/Type" } } + }, + "Heartbeat": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Status" + } + } + } + } } }, "securitySchemes": { @@ -580,7 +603,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Status" + "$ref": "#/components/schemas/Heartbeat" } } } diff --git a/tool/Dockerfile.dev b/tool/Dockerfile.dev index 0a7b9a53..ffa2aac5 100644 --- a/tool/Dockerfile.dev +++ b/tool/Dockerfile.dev @@ -1,4 +1,4 @@ -FROM nextcloud:25.0.4 +FROM nextcloud:26.0.0 WORKDIR /usr/src/nextcloud RUN chown -R www-data:www-data . USER www-data