From 67d73bce563d5d0ce2e3c2ab1ca9d3c61c8829ec Mon Sep 17 00:00:00 2001
From: Christina Toegl <toegl@tugraz.at>
Date: Wed, 6 Apr 2022 15:22:15 +0200
Subject: [PATCH] Add full webdav url to recents requests

---
 .../src/nextcloud-file-picker.js              | 30 ++++++++++++++-----
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/packages/file-handling/src/nextcloud-file-picker.js b/packages/file-handling/src/nextcloud-file-picker.js
index 4be1df78..4b963d06 100644
--- a/packages/file-handling/src/nextcloud-file-picker.js
+++ b/packages/file-handling/src/nextcloud-file-picker.js
@@ -26,6 +26,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
         this.auth = {};
         this.authUrl = '';
         this.webDavUrl = '';
+        this.fullWebDavUrl  = '';
         this.nextcloudName = 'Nextcloud';
         this.nextcloudFileURL = '';
         this.loginWindow = null;
@@ -95,6 +96,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
             auth: {type: Object},
             authUrl: {type: String, attribute: 'auth-url'},
             webDavUrl: {type: String, attribute: 'web-dav-url'},
+            fullWebDavUrl: {type: String, attribute: false},
             nextcloudFileURL: {type: String, attribute: 'nextcloud-file-url'},
             nextcloudName: {type: String, attribute: 'nextcloud-name'},
             isPickerActive: {type: Boolean, attribute: false},
@@ -492,7 +494,8 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
             for (let key of Object.keys(localStorage)) {
                 if (
                     key.includes('nextcloud-webdav-username-') ||
-                    key.includes('nextcloud-webdav-password-')
+                    key.includes('nextcloud-webdav-password-') || 
+                    key.includes('nextcloud-webdav-url-')
                 ) {
                     localStorage.removeItem(key);
                 }
@@ -507,7 +510,8 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
             this.storeSession &&
             sessionId &&
             localStorage.getItem('nextcloud-webdav-username-' + publicId) &&
-            localStorage.getItem('nextcloud-webdav-password-' + publicId)
+            localStorage.getItem('nextcloud-webdav-password-' + publicId) &&
+            localStorage.getItem('nextcloud-webdav-url-' + publicId)
         ) {
             try {
                 const userName = await decrypt(
@@ -518,6 +522,10 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                     sessionId,
                     localStorage.getItem('nextcloud-webdav-password-' + publicId)
                 );
+                this.fullWebDavUrl = await decrypt(
+                    sessionId,
+                    localStorage.getItem('nextcloud-webdav-url-' + publicId)
+                );
                 this.webDavClient = createClient(this.webDavUrl + '/' + userName, {
                     username: userName,
                     password: password,
@@ -530,6 +538,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
             } catch (e) {
                 localStorage.removeItem('nextcloud-webdav-username-' + publicId);
                 localStorage.removeItem('nextcloud-webdav-password-' + publicId);
+                localStorage.removeItem('nextcloud-webdav-url-' + publicId)
                 return;
             }
         }
@@ -603,6 +612,8 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                     }
                 );
 
+                this.fullWebDavUrl = data.webdavUrl;
+
                 if (
                     this.storeSession &&
                     this.isLoggedIn() &&
@@ -615,11 +626,13 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                     if (sessionId) {
                         const encrytedName = await encrypt(sessionId, data.loginName);
                         const encrytedToken = await encrypt(sessionId, data.token);
+                        const encryptedUrl = await encrypt(sessionId, data.webdavUrl);
                         localStorage.setItem('nextcloud-webdav-username-' + publicId, encrytedName);
                         localStorage.setItem(
                             'nextcloud-webdav-password-' + publicId,
                             encrytedToken
                         );
+                        localStorage.setItem('nextcloud-webdav-url-' + publicId, encryptedUrl);
                     }
                 }
 
@@ -947,9 +960,9 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                     '           </d:select>' +
                     '           <d:from>' +
                     '               <d:scope>' +
-                    '                   <d:href>/files/' +
-                    this.userName +
-                    '/</d:href>' +
+                    '                   <d:href>' +
+                    this.fullWebDavUrl +
+                    '</d:href>' +
                     '                   <d:depth>infinity</d:depth>' +
                     '               </d:scope>' +
                     '           </d:from>' +
@@ -1110,9 +1123,9 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
                     '           </d:select>' +
                     '           <d:from>' +
                     '               <d:scope>' +
-                    '                   <d:href>/files/' +
-                    this.userName +
-                    '/</d:href>' +
+                    '                   <d:href>' +
+                    this.fullWebDavUrl  +
+                    '</d:href>' +
                     '                   <d:depth>infinity</d:depth>' +
                     '               </d:scope>' +
                     '           </d:from>' +
@@ -2111,6 +2124,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
             const publicId = this.auth['person-id'];
             localStorage.removeItem('nextcloud-webdav-username' + publicId);
             localStorage.removeItem('nextcloud-webdav-password' + publicId);
+            localStorage.removeItem('nextcloud-webdav-url-' + publicId)
         }
     }
 
-- 
GitLab