mirror of
https://github.com/nextcloud/server.git
synced 2026-06-10 01:00:50 -04:00
Merge pull request #50573 from nextcloud/backport/50292/stable31
[stable31] Fix opening federated shares
This commit is contained in:
commit
07e61b0dbc
8 changed files with 88 additions and 35 deletions
|
|
@ -330,7 +330,7 @@ export default defineComponent({
|
|||
* @param fileId File to open
|
||||
*/
|
||||
handleOpenFile(fileId: number|null) {
|
||||
if (fileId === null || this.openFileId === fileId) {
|
||||
if (fileId === null) {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -275,7 +275,7 @@ describe('SharingService share to Node mapping', () => {
|
|||
tags: [TAG_FAVORITE],
|
||||
}
|
||||
|
||||
const remoteFile = {
|
||||
const remoteFileAccepted = {
|
||||
mimetype: 'text/markdown',
|
||||
mtime: 1688721600,
|
||||
permissions: 19,
|
||||
|
|
@ -294,6 +294,25 @@ describe('SharingService share to Node mapping', () => {
|
|||
accepted: true,
|
||||
}
|
||||
|
||||
const remoteFilePending = {
|
||||
mimetype: 'text/markdown',
|
||||
mtime: 1688721600,
|
||||
permissions: 19,
|
||||
type: 'file',
|
||||
file_id: 1234,
|
||||
id: 4,
|
||||
share_type: ShareType.User,
|
||||
parent: null,
|
||||
remote: 'http://exampe.com',
|
||||
remote_id: '12345',
|
||||
share_token: 'share-token',
|
||||
name: '/test.md',
|
||||
mountpoint: '/shares/test.md',
|
||||
owner: 'owner-uid',
|
||||
user: 'sharee-uid',
|
||||
accepted: false,
|
||||
}
|
||||
|
||||
const tempExternalFile = {
|
||||
id: 65,
|
||||
share_type: 0,
|
||||
|
|
@ -369,33 +388,64 @@ describe('SharingService share to Node mapping', () => {
|
|||
expect(folder.attributes.favorite).toBe(1)
|
||||
})
|
||||
|
||||
test('Remote file', async () => {
|
||||
axios.get.mockReturnValueOnce(Promise.resolve({
|
||||
data: {
|
||||
ocs: {
|
||||
data: [remoteFile],
|
||||
describe('Remote file', () => {
|
||||
test('Accepted', async () => {
|
||||
axios.get.mockReturnValueOnce(Promise.resolve({
|
||||
data: {
|
||||
ocs: {
|
||||
data: [remoteFileAccepted],
|
||||
},
|
||||
},
|
||||
},
|
||||
}))
|
||||
}))
|
||||
|
||||
const shares = await getContents(false, true, false, false)
|
||||
const shares = await getContents(false, true, false, false)
|
||||
|
||||
expect(axios.get).toHaveBeenCalledTimes(1)
|
||||
expect(shares.contents).toHaveLength(1)
|
||||
expect(axios.get).toHaveBeenCalledTimes(1)
|
||||
expect(shares.contents).toHaveLength(1)
|
||||
|
||||
const file = shares.contents[0] as File
|
||||
expect(file).toBeInstanceOf(File)
|
||||
expect(file.fileid).toBe(1234)
|
||||
expect(file.source).toBe('http://nextcloud.local/remote.php/dav/files/test/shares/test.md')
|
||||
expect(file.owner).toBe('owner-uid')
|
||||
expect(file.mime).toBe('text/markdown')
|
||||
expect(file.mtime?.getTime()).toBe(remoteFile.mtime * 1000)
|
||||
// not available for remote shares
|
||||
expect(file.size).toBe(undefined)
|
||||
expect(file.permissions).toBe(0)
|
||||
expect(file.root).toBe('/files/test')
|
||||
expect(file.attributes).toBeInstanceOf(Object)
|
||||
expect(file.attributes.favorite).toBe(0)
|
||||
const file = shares.contents[0] as File
|
||||
expect(file).toBeInstanceOf(File)
|
||||
expect(file.fileid).toBe(1234)
|
||||
expect(file.source).toBe('http://nextcloud.local/remote.php/dav/files/test/shares/test.md')
|
||||
expect(file.owner).toBe('owner-uid')
|
||||
expect(file.mime).toBe('text/markdown')
|
||||
expect(file.mtime?.getTime()).toBe(remoteFileAccepted.mtime * 1000)
|
||||
// not available for remote shares
|
||||
expect(file.size).toBe(undefined)
|
||||
expect(file.permissions).toBe(19)
|
||||
expect(file.root).toBe('/files/test')
|
||||
expect(file.attributes).toBeInstanceOf(Object)
|
||||
expect(file.attributes.favorite).toBe(0)
|
||||
})
|
||||
|
||||
test('Pending', async () => {
|
||||
axios.get.mockReturnValueOnce(Promise.resolve({
|
||||
data: {
|
||||
ocs: {
|
||||
data: [remoteFilePending],
|
||||
},
|
||||
},
|
||||
}))
|
||||
|
||||
const shares = await getContents(false, true, false, false)
|
||||
|
||||
expect(axios.get).toHaveBeenCalledTimes(1)
|
||||
expect(shares.contents).toHaveLength(1)
|
||||
|
||||
const file = shares.contents[0] as File
|
||||
expect(file).toBeInstanceOf(File)
|
||||
expect(file.fileid).toBe(1234)
|
||||
expect(file.source).toBe('http://nextcloud.local/remote.php/dav/files/test/shares/test.md')
|
||||
expect(file.owner).toBe('owner-uid')
|
||||
expect(file.mime).toBe('text/markdown')
|
||||
expect(file.mtime?.getTime()).toBe(remoteFilePending.mtime * 1000)
|
||||
// not available for remote shares
|
||||
expect(file.size).toBe(undefined)
|
||||
expect(file.permissions).toBe(0)
|
||||
expect(file.root).toBe('/files/test')
|
||||
expect(file.attributes).toBeInstanceOf(Object)
|
||||
expect(file.attributes.favorite).toBe(0)
|
||||
})
|
||||
})
|
||||
|
||||
test('External temp file', async () => {
|
||||
|
|
|
|||
|
|
@ -40,9 +40,12 @@ const ocsEntryToNode = async function(ocsEntry: any): Promise<Folder | File | nu
|
|||
ocsEntry.file_target = ocsEntry.name
|
||||
}
|
||||
|
||||
// Need to set permissions to NONE for federated shares
|
||||
ocsEntry.item_permissions = Permission.NONE
|
||||
ocsEntry.permissions = Permission.NONE
|
||||
// If the share is not accepted yet we don't know which permissions it will have
|
||||
if (!ocsEntry.accepted) {
|
||||
// Need to set permissions to NONE for federated shares
|
||||
ocsEntry.item_permissions = Permission.NONE
|
||||
ocsEntry.permissions = Permission.NONE
|
||||
}
|
||||
|
||||
ocsEntry.uid_owner = ocsEntry.owner
|
||||
// TODO: have the real display name stored somewhere
|
||||
|
|
|
|||
2
dist/18-18.js.map
vendored
2
dist/18-18.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/files-main.js
vendored
4
dist/files-main.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files-main.js.map
vendored
2
dist/files-main.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/files_sharing-init.js
vendored
4
dist/files_sharing-init.js
vendored
File diff suppressed because one or more lines are too long
2
dist/files_sharing-init.js.map
vendored
2
dist/files_sharing-init.js.map
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue