Skip to content

Commit e3f29bf

Browse files
authored
Merge pull request #822 from nextcloud/artonge/feat/support_e2ee_in_browser
feat: Minimal support E2EE file navigation in browser
2 parents 6eea68a + 51ba7cf commit e3f29bf

File tree

96 files changed

+13158
-9020
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+13158
-9020
lines changed

.eslintrc.js renamed to .eslintrc.cjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
module.exports = {
66
extends: [
7-
'@nextcloud',
7+
"@nextcloud/eslint-config/typescript"
88
],
99
globals: {
1010
appName: true,

LICENSES/0BSD.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Copyright (C) YEAR by AUTHOR EMAIL
2+
3+
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.
4+
5+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

LICENSES/BSD-2-Clause.txt

Lines changed: 0 additions & 9 deletions
This file was deleted.

REUSE.toml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,19 @@ SPDX-FileCopyrightText = "2018 Nextcloud translators <https://www.transifex.com/
4242
SPDX-License-Identifier = "AGPL-3.0-or-later"
4343

4444
[[annotations]]
45-
path = ["img/app.svg", "js/end_to_end_encryption-data_image_svg_xml_*SPDX-FileCopyrightText_202020_20Google_20Inc_20-_20SPDX-*.js"]
45+
path = ["img/app.svg"]
4646
precedence = "aggregate"
4747
SPDX-FileCopyrightText = "2018-2024 Google LLC"
4848
SPDX-License-Identifier = "Apache-2.0"
49+
50+
[[annotations]]
51+
path = ["tsconfig.json"]
52+
precedence = "aggregate"
53+
SPDX-FileCopyrightText = "2024 Nextcloud GmbH and Nextcloud contributors"
54+
SPDX-License-Identifier = "AGPL-3.0-or-later"
55+
56+
[[annotations]]
57+
path = ["js/**.mjs.map"]
58+
precedence = "aggregate"
59+
SPDX-FileCopyrightText = "2019 Nextcloud GmbH and Nextcloud contributors"
60+
SPDX-License-Identifier = "AGPL-3.0-or-later"

__tests__/consts.spec.ts

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
/**
2+
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
3+
* SPDX-License-Identifier: AGPL-3.0-or-later
4+
*/
5+
6+
import { Metadata, PrivateKeyInfo } from '../src/models'
7+
import { base64ToBuffer } from '../src/services/utils'
8+
9+
export const mnemonic = 'farm toilet escape army regular funny board consider same leaf fiction spray'
10+
11+
export const privateKeyInfo: PrivateKeyInfo = {
12+
encryptedPrivateKey: base64ToBuffer('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'),
13+
iv: base64ToBuffer('ZbBpIfMafxwNc9j8'),
14+
salt: base64ToBuffer('vkO93HhyRAj7D/t37u5b+iLDqShwMRMTAcsR8g0TVqriVUiqslGHtw=='),
15+
}
16+
17+
export const metadata: Metadata = {
18+
metadata: {
19+
authenticationTag: '/Jfdn9mViRy7lFJnyaNsnQ==',
20+
ciphertext: 'oND/1RFakDsO3ZkFg/bi9pfu7qvCPz2UlcbF2sT458zfaZ+C2nswnRVjoKVIu70qV1lG7QMlcPd7dRZH8DGGYC8cyKcObIrTUo5i1vidWtXxJrTJwmotnRnzd3jf896Wm37sUld+kaZoyveSYI7x6P9TwdgB2hTvHEraTnKDQXsSDrY7RhxrIyMJnuZKU7DIAC8bBghjXDUF8AHT21RUQq7ILVsmjh575rke0GTskegXX1Qra9UNql6z8lGyN/uF26Hrek7YwKP3ef9VC+cFg5/jozspGjf2DQBsYG6X4+oD03Q0xHmdZ7t7VpAcPhWUJuIBdI+/M229REofdZNbQ0Uj61SolU0r8q/rZjxZ9Ev1zvDVOOyOFGrLJvFiO/6oN+BBywHpI62oLPyX3Z/ZlYkcu5RSZ8mjbJ0=|Rv40Cy2YkO4T2GU0e1ZRkQ==',
21+
nonce: 'Rv40Cy2YkO4T2GU0e1ZRkQ==',
22+
},
23+
users: [
24+
{
25+
certificate: '-----BEGIN CERTIFICATE-----\nMIIDkjCCAnqgAwIBAgIBADANBgkqhkiG9w0BAQsFADBiMQswCQYDVQQGEwJERTEb\nMBkGA1UECAwSQmFkZW4tV3VlcnR0ZW1iZXJnMRIwEAYDVQQHDAlTdHV0dGdhcnQx\nEjAQBgNVBAoMCU5leHRjbG91ZDEOMAwGA1UEAwwFYWRtaW4wHhcNMjQxMjA5MTQw\nNTI2WhcNNDQxMjA0MTQwNTI2WjBiMQswCQYDVQQGEwJERTEbMBkGA1UECAwSQmFk\nZW4tV3VlcnR0ZW1iZXJnMRIwEAYDVQQHDAlTdHV0dGdhcnQxEjAQBgNVBAoMCU5l\neHRjbG91ZDEOMAwGA1UEAwwFYWRtaW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\nggEKAoIBAQCR5e87QtuM8uyh2W+PVPVklS/7xnpYH6QmkwKgK8lNHkrsGFRdaHP0\nx98FbjlVHM/wandZlqKlyspANX57tGUFoR+Ya3ymYkvyrKeFv34WsbBL/3QDS6nT\nNrl40hgsuhAJVl99JfFmJPrHwb9iU8yM89ktWsAa+xhDH9n37vmADJiBjOR7IW1b\nF0xjpwp2+9SDMkWCK5A2WMPIY45waZLJw9PsaiKikhV+n1q00PTnULKSkDuUrENy\nYdqY4MnHs/k70QkTdynyDLS2LUdmMyHEHyyMktiwaRileqrsGsQf2pErD5pKhvcf\nuIhN1g7sNDyOtPtyB1ioX5DGTg6LuhrJAgMBAAGjUzBRMB0GA1UdDgQWBBQgTmjF\nLB/B3VZ6sYYZTXFKGL245TAfBgNVHSMEGDAWgBQgTmjFLB/B3VZ6sYYZTXFKGL24\n5TAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQABg8Sz2rlkG6/x\nc6GxwWr64EaqrAPfPpi6yUg1HfscokrgGjMuj/g0N6OBXNodkAxQAxOYdaI8LuAe\niqjuiJh0tn1u0yxF0cxUqk3EUZsPmF8YRN4cG55z0hTnXJ/9YxCrYQl/LRUmvP8q\nufnJX+CtRLs5oDVpmCJrEc8hA1rEDaeGYZDy+sfOqk3YjpVKR/ETI+AdQ9ubxFhj\nvUzF4gZNbCyLk1ul0QzwNW1aKV920BVMhYnMaYM9Xaume4pn6wuZoD0k7py+tKCe\nXaemHYSvFS1lY4Q8Ih2cacIan6FgxI/jkanCEOxdUcwtSOTocrn6DL2wmkcLm0Ao\nYovd2rO6\n-----END CERTIFICATE-----\n',
26+
encryptedMetadataKey: 'KS9P5Et+i94PAdpTtR9pyyuTlV6/3e3E/Zzwu8ua1j/e6uHUfQDxpXsksgX95Q/Hin0caoYfwwyWVs2/wtdkHttBdjywzcNfz5yDblrdKAYoyeuCavNatA3OuFDJVcMiisiskD6GMz6o3V21ZqpHwTry05dv4jZMs88lzTOLeDJ7bmmv5Pjyfbg8lxk6oW85LJkUku3+szv+kz+as18Pk+Oe1MylLP+Zktw+1Pckem32h19MacefZI/tkZLmdmjPtKNQGqlefeTXHKnIOzykdPjBG9CJ7zS0MPN7nv0ZgXeSoEi6fUHwkzmg8GxGSjLoL6L7BhLxw7Z8YWZ1MAYyCA==',
27+
userId: 'admin',
28+
},
29+
],
30+
version: '2.0',
31+
}
32+
33+
export const metadataInfo = {
34+
counter: 4,
35+
files: {
36+
ad3b12554e0d4364854ae3e21b170152: {
37+
authenticationTag: 'nJHAcpZwSS1BCIkGbmtbNg==',
38+
filename: 'test.txt',
39+
key: 'Hj+q7e53ZeQdHKPyF7FKeg==',
40+
mimetype: 'text/plain',
41+
nonce: 'sqqtY0eRjhuwf+qTv5Kg2g==',
42+
},
43+
},
44+
folders: { fa666d819a6c4315abba421172f0a0b1: 'Test' },
45+
keyChecksums: [
46+
'9a60be9846978884033fcdfb978fbdd428221b20583bca6bfcb425f1b540152a',
47+
],
48+
}
49+
50+
export const encryptedFileContent = 'O13d2Y5O7qYDTerGfZyRwHKWcEktQQiJBm5rWzY='
51+
52+
export const propFindResponse = `<?xml version="1.0"?>
53+
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns"
54+
xmlns:nc="http://nextcloud.org/ns">
55+
<d:response>
56+
<d:href>/remote.php/dav/files/admin/New%20folder/</d:href>
57+
<d:propstat>
58+
<d:prop>
59+
<d:getetag>&quot;675b116c6ef35&quot;</d:getetag>
60+
<d:getlastmodified>Thu, 12 Dec 2024 16:38:04 GMT</d:getlastmodified>
61+
<d:creationdate>1970-01-01T00:00:00+00:00</d:creationdate>
62+
<d:displayname>New folder</d:displayname>
63+
<d:quota-available-bytes>-3</d:quota-available-bytes>
64+
<d:resourcetype>
65+
<d:collection />
66+
</d:resourcetype>
67+
<nc:has-preview>false</nc:has-preview>
68+
<nc:is-encrypted>1</nc:is-encrypted>
69+
<nc:mount-type></nc:mount-type>
70+
<oc:comments-unread>0</oc:comments-unread>
71+
<oc:favorite>0</oc:favorite>
72+
<oc:fileid>89</oc:fileid>
73+
<oc:owner-display-name>admin</oc:owner-display-name>
74+
<oc:owner-id>admin</oc:owner-id>
75+
<oc:permissions>RGDNVCK</oc:permissions>
76+
<oc:size>29</oc:size>
77+
<nc:hidden>false</nc:hidden>
78+
<nc:is-mount-root>false</nc:is-mount-root>
79+
<nc:reminder-due-date></nc:reminder-due-date>
80+
<nc:sharees />
81+
<nc:share-attributes>[]</nc:share-attributes>
82+
<oc:share-types />
83+
<x1:share-permissions xmlns:x1="http://open-collaboration-services.org/ns">31</x1:share-permissions>
84+
<nc:system-tags />
85+
<nc:rich-workspace></nc:rich-workspace>
86+
<nc:rich-workspace-file></nc:rich-workspace-file>
87+
</d:prop>
88+
<d:status>HTTP/1.1 200 OK</d:status>
89+
</d:propstat>
90+
<d:propstat>
91+
<d:prop>
92+
<d:getcontentlength />
93+
<d:getcontenttype />
94+
<nc:metadata-blurhash />
95+
<nc:metadata-files-live-photo />
96+
<nc:note />
97+
</d:prop>
98+
<d:status>HTTP/1.1 404 Not Found</d:status>
99+
</d:propstat>
100+
</d:response>
101+
<d:response>
102+
<d:href>/remote.php/dav/files/admin/New%20folder/ad3b12554e0d4364854ae3e21b170152</d:href>
103+
<d:propstat>
104+
<d:prop>
105+
<d:getcontentlength>29</d:getcontentlength>
106+
<d:getcontenttype>application/octet-stream</d:getcontenttype>
107+
<d:getetag>&quot;f8797cf9677cd6d24d405c97784710dc&quot;</d:getetag>
108+
<d:getlastmodified>Thu, 12 Dec 2024 15:36:40 GMT</d:getlastmodified>
109+
<d:creationdate>1970-01-01T00:00:00+00:00</d:creationdate>
110+
<d:displayname>ad3b12554e0d4364854ae3e21b170152</d:displayname>
111+
<d:resourcetype />
112+
<nc:has-preview>false</nc:has-preview>
113+
<nc:mount-type></nc:mount-type>
114+
<oc:comments-unread>0</oc:comments-unread>
115+
<oc:favorite>0</oc:favorite>
116+
<oc:fileid>237</oc:fileid>
117+
<oc:owner-display-name>admin</oc:owner-display-name>
118+
<oc:owner-id>admin</oc:owner-id>
119+
<oc:permissions>RGDNVW</oc:permissions>
120+
<oc:size>29</oc:size>
121+
<nc:hidden>false</nc:hidden>
122+
<nc:is-mount-root>false</nc:is-mount-root>
123+
<nc:reminder-due-date></nc:reminder-due-date>
124+
<nc:sharees />
125+
<nc:share-attributes>[]</nc:share-attributes>
126+
<oc:share-types />
127+
<x1:share-permissions xmlns:x1="http://open-collaboration-services.org/ns">19</x1:share-permissions>
128+
<nc:system-tags />
129+
</d:prop>
130+
<d:status>HTTP/1.1 200 OK</d:status>
131+
</d:propstat>
132+
<d:propstat>
133+
<d:prop>
134+
<d:quota-available-bytes />
135+
<nc:is-encrypted />
136+
<nc:metadata-blurhash />
137+
<nc:metadata-files-live-photo />
138+
<nc:note />
139+
<nc:rich-workspace />
140+
<nc:rich-workspace-file />
141+
</d:prop>
142+
<d:status>HTTP/1.1 404 Not Found</d:status>
143+
</d:propstat>
144+
</d:response>
145+
<d:response>
146+
<d:href>/remote.php/dav/files/admin/New%20folder/fa666d819a6c4315abba421172f0a0b1/</d:href>
147+
<d:propstat>
148+
<d:prop>
149+
<d:getetag>&quot;675b116ba88f8&quot;</d:getetag>
150+
<d:getlastmodified>Thu, 12 Dec 2024 16:38:03 GMT</d:getlastmodified>
151+
<d:creationdate>1970-01-01T00:00:00+00:00</d:creationdate>
152+
<d:displayname>fa666d819a6c4315abba421172f0a0b1</d:displayname>
153+
<d:quota-available-bytes>-3</d:quota-available-bytes>
154+
<d:resourcetype>
155+
<d:collection />
156+
</d:resourcetype>
157+
<nc:has-preview>false</nc:has-preview>
158+
<nc:is-encrypted>1</nc:is-encrypted>
159+
<nc:mount-type></nc:mount-type>
160+
<oc:comments-unread>0</oc:comments-unread>
161+
<oc:favorite>0</oc:favorite>
162+
<oc:fileid>266</oc:fileid>
163+
<oc:owner-display-name>admin</oc:owner-display-name>
164+
<oc:owner-id>admin</oc:owner-id>
165+
<oc:permissions>RGDNVCK</oc:permissions>
166+
<oc:size>0</oc:size>
167+
<nc:hidden>false</nc:hidden>
168+
<nc:is-mount-root>false</nc:is-mount-root>
169+
<nc:reminder-due-date></nc:reminder-due-date>
170+
<nc:sharees />
171+
<nc:share-attributes>[]</nc:share-attributes>
172+
<oc:share-types />
173+
<x1:share-permissions xmlns:x1="http://open-collaboration-services.org/ns">31</x1:share-permissions>
174+
<nc:system-tags />
175+
<nc:rich-workspace></nc:rich-workspace>
176+
<nc:rich-workspace-file></nc:rich-workspace-file>
177+
</d:prop>
178+
<d:status>HTTP/1.1 200 OK</d:status>
179+
</d:propstat>
180+
<d:propstat>
181+
<d:prop>
182+
<d:getcontentlength />
183+
<d:getcontenttype />
184+
<nc:metadata-blurhash />
185+
<nc:metadata-files-live-photo />
186+
<nc:note />
187+
</d:prop>
188+
<d:status>HTTP/1.1 404 Not Found</d:status>
189+
</d:propstat>
190+
</d:response>
191+
</d:multistatus>`

__tests__/setup-testing-library.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/**
2+
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
3+
* SPDX-License-Identifier: CC0-1.0
4+
*/
5+
import '@testing-library/jest-dom/vitest'
6+
import 'core-js/stable/index.js'
File renamed without changes.

0 commit comments

Comments
 (0)