Browse Source

Update nextcloud server and notifications to 26.0.0

pull/218/head
jld3103 2 years ago
parent
commit
f9ddb3dda1
No known key found for this signature in database
GPG Key ID: 9062417B9E8EB7B3
  1. 2
      external/nextcloud-notifications
  2. 2
      external/nextcloud-server
  3. 4
      packages/neon/lib/src/blocs/user_status.dart
  4. 71
      packages/nextcloud/lib/src/nextcloud.openapi.dart
  5. 37
      packages/nextcloud/lib/src/nextcloud.openapi.g.dart
  6. 35
      packages/nextcloud/lib/src/nextcloud.openapi.json
  7. 2
      packages/nextcloud/lib/src/version_supported.dart
  8. 8
      packages/nextcloud/test/core.dart
  9. 2
      packages/nextcloud/test/notes.dart
  10. 18
      packages/nextcloud/test/user_status.dart
  11. 4
      packages/nextcloud/test/webdav.dart
  12. 2
      specs/core.json
  13. 2
      specs/notifications.json
  14. 10
      specs/provisioning_api.json
  15. 2
      specs/templates/appinfo_core.xml
  16. 236
      specs/templates/core.json
  17. 2
      specs/templates/notifications.json
  18. 2
      specs/templates/provisioning_api.json
  19. 2
      specs/templates/user_status.json
  20. 27
      specs/user_status.json
  21. 2
      tool/Dockerfile.dev

2
external/nextcloud-notifications vendored

@ -1 +1 @@
Subproject commit 6205c303497c8245415ade86be5122a7e33b01d6
Subproject commit a380eabe8b369a7103d1f529c82d6b44dce4f6a6

2
external/nextcloud-server vendored

@ -1 +1 @@
Subproject commit 0c86714144f50a66e845e9ef80d4cd7e6918a4f5
Subproject commit 62cfd3b4c9ff4d8cdbbe6dcc8b63a1085bb94e3d

4
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;

71
packages/nextcloud/lib/src/nextcloud.openapi.dart

@ -1684,7 +1684,7 @@ class NextcloudUserStatusClient {
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line
}
Future<NextcloudUserStatusStatus> heartbeat({required NextcloudUserStatusType status}) async {
Future<NextcloudUserStatusHeartbeat> heartbeat({required NextcloudUserStatusType status}) async {
var path = '/ocs/v2.php/apps/user_status/api/v1/heartbeat';
final queryParameters = <String, dynamic>{};
final headers = <String, String>{
@ -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<String, dynamic>);
}
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<String> 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<String, dynamic> json) =>
_$NextcloudUserStatusHeartbeat_OcsFromJson(json);
// coverage:ignore-end
// coverage:ignore-start
factory NextcloudUserStatusHeartbeat_Ocs.fromJsonString(String data) =>
NextcloudUserStatusHeartbeat_Ocs.fromJson(json.decode(data) as Map<String, dynamic>);
// coverage:ignore-end
final NextcloudOCSMeta meta;
final NextcloudUserStatusStatus data;
// coverage:ignore-start
Map<String, dynamic> 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<String, dynamic> json) =>
_$NextcloudUserStatusHeartbeatFromJson(json);
// coverage:ignore-end
// coverage:ignore-start
factory NextcloudUserStatusHeartbeat.fromJsonString(String data) =>
NextcloudUserStatusHeartbeat.fromJson(json.decode(data) as Map<String, dynamic>);
// coverage:ignore-end
final NextcloudUserStatusHeartbeat_Ocs ocs;
// coverage:ignore-start
Map<String, dynamic> 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 = <Type, dynamic Function(dynamic)>{
NextcloudUserStatusPredefinedStatus.fromJson(data as Map<String, dynamic>),
List<NextcloudUserStatusPredefinedStatus>: (final data) =>
(data as List).map((final e) => NextcloudUserStatusPredefinedStatus.fromJson(e as Map<String, dynamic>)).toList(),
NextcloudUserStatusHeartbeat: (final data) => NextcloudUserStatusHeartbeat.fromJson(data as Map<String, dynamic>),
List<NextcloudUserStatusHeartbeat>: (final data) =>
(data as List).map((final e) => NextcloudUserStatusHeartbeat.fromJson(e as Map<String, dynamic>)).toList(),
NextcloudUserStatusHeartbeat_Ocs: (final data) =>
NextcloudUserStatusHeartbeat_Ocs.fromJson(data as Map<String, dynamic>),
List<NextcloudUserStatusHeartbeat_Ocs>: (final data) =>
(data as List).map((final e) => NextcloudUserStatusHeartbeat_Ocs.fromJson(e as Map<String, dynamic>)).toList(),
NextcloudNotificationsNotificationDecryptedSubject: (final data) =>
NextcloudNotificationsNotificationDecryptedSubject.fromJson(data as Map<String, dynamic>),
List<NextcloudNotificationsNotificationDecryptedSubject>: (final data) => (data as List)
@ -6794,6 +6857,10 @@ final _serializers = <Type, dynamic Function(dynamic)>{
List<NextcloudUserStatusPredefinedStatuses_Ocs>: (final data) => data.map((final e) => e.toJson()).toList(),
NextcloudUserStatusPredefinedStatus: (final data) => data.toJson(),
List<NextcloudUserStatusPredefinedStatus>: (final data) => data.map((final e) => e.toJson()).toList(),
NextcloudUserStatusHeartbeat: (final data) => data.toJson(),
List<NextcloudUserStatusHeartbeat>: (final data) => data.map((final e) => e.toJson()).toList(),
NextcloudUserStatusHeartbeat_Ocs: (final data) => data.toJson(),
List<NextcloudUserStatusHeartbeat_Ocs>: (final data) => data.map((final e) => e.toJson()).toList(),
NextcloudNotificationsNotificationDecryptedSubject: (final data) => data.toJson(),
List<NextcloudNotificationsNotificationDecryptedSubject>: (final data) => data.map((final e) => e.toJson()).toList(),
};

37
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<dynamic>).map((e) => e as String).toList(),
language: json['language'] as String,
locale: json['locale'] as String,
@ -1911,6 +1915,8 @@ Map<String, dynamic> _$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<String, dynamic> _$NextcloudUserStatusPredefinedStatusesToJson(NextcloudUser
'ocs': instance.ocs.toJson(),
};
NextcloudUserStatusHeartbeat_Ocs _$NextcloudUserStatusHeartbeat_OcsFromJson(Map<String, dynamic> json) {
$checkKeys(
json,
allowedKeys: const ['meta', 'data'],
);
return NextcloudUserStatusHeartbeat_Ocs(
meta: NextcloudOCSMeta.fromJson(json['meta'] as Map<String, dynamic>),
data: NextcloudUserStatusStatus.fromJson(json['data'] as Map<String, dynamic>),
);
}
Map<String, dynamic> _$NextcloudUserStatusHeartbeat_OcsToJson(NextcloudUserStatusHeartbeat_Ocs instance) =>
<String, dynamic>{
'meta': instance.meta.toJson(),
'data': instance.data.toJson(),
};
NextcloudUserStatusHeartbeat _$NextcloudUserStatusHeartbeatFromJson(Map<String, dynamic> json) {
$checkKeys(
json,
allowedKeys: const ['ocs'],
);
return NextcloudUserStatusHeartbeat(
ocs: NextcloudUserStatusHeartbeat_Ocs.fromJson(json['ocs'] as Map<String, dynamic>),
);
}
Map<String, dynamic> _$NextcloudUserStatusHeartbeatToJson(NextcloudUserStatusHeartbeat instance) => <String, dynamic>{
'ocs': instance.ocs.toJson(),
};
NextcloudNotificationsNotificationDecryptedSubject _$NextcloudNotificationsNotificationDecryptedSubjectFromJson(
Map<String, dynamic> json) {
$checkKeys(

35
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"
}
}
}

2
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<bool> 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

8
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');

2
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 {

18
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);
});
});
}

4
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);

2
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",

2
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",

10
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": {

2
specs/templates/appinfo_core.xml

@ -4,6 +4,6 @@
<name>Core</name>
<summary>Core functionality of Nextcloud</summary>
<description><![CDATA[Core functionality of Nextcloud]]></description>
<version>25.0.4</version>
<version>26.0.0</version>
<licence>agpl</licence>
</info>

236
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": "targetUserId",
"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": "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"
}
}
}
}
}
}
}
}
}

2
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",

2
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",

2
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",

27
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"
}
}
}

2
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

Loading…
Cancel
Save