diff --git a/lib/dav/dav.ts b/lib/dav/dav.ts
index 8279a5d9..728612d2 100644
--- a/lib/dav/dav.ts
+++ b/lib/dav/dav.ts
@@ -20,7 +20,7 @@
* along with this program. If not, see .
*
*/
-import type { DAVResultResponseProps, FileStat, Response, ResponseDataDetailed, WebDAVClient } from 'webdav'
+import type { DAVResultResponseProps, FileStat, ResponseDataDetailed, WebDAVClient } from 'webdav'
import type { Node } from '../files/node'
import { File } from '../files/file'
@@ -29,10 +29,9 @@ import { NodeData } from '../files/nodeData'
import { davParsePermissions } from './davPermissions'
import { davGetFavoritesReport } from './davProperties'
-import { getCurrentUser, getRequestToken } from '@nextcloud/auth'
+import { getCurrentUser, getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'
import { generateRemoteUrl } from '@nextcloud/router'
-import { createClient, getPatcher, RequestOptions } from 'webdav'
-import { request } from 'webdav/dist/node/request.js'
+import { createClient, getPatcher } from 'webdav'
/**
* Nextcloud DAV result response
@@ -59,11 +58,24 @@ export const davRemoteURL = generateRemoteUrl('dav')
* @param remoteURL The DAV server remote URL
*/
export const davGetClient = function(remoteURL = davRemoteURL) {
- const client = createClient(remoteURL, {
- headers: {
- requesttoken: getRequestToken() || '',
- },
- })
+ const client = createClient(remoteURL)
+
+ /**
+ * Set headers for DAV requests
+ * @param token CSRF token
+ */
+ function setHeaders(token: string | null) {
+ client.setHeaders({
+ // Add this so the server knows it is an request from the browser
+ 'X-Requested-With': 'XMLHttpRequest',
+ // Inject user auth
+ requesttoken: token ?? '',
+ })
+ }
+
+ // refresh headers when request token changes
+ onRequestTokenUpdate(setHeaders)
+ setHeaders(getRequestToken())
/**
* Allow to override the METHOD to support dav REPORT
@@ -71,16 +83,18 @@ export const davGetClient = function(remoteURL = davRemoteURL) {
* @see https://github.com/perry-mitchell/webdav-client/blob/8d9694613c978ce7404e26a401c39a41f125f87f/source/request.ts
*/
const patcher = getPatcher()
- // https://github.com/perry-mitchell/hot-patcher/issues/6
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
- patcher.patch('request', (options: RequestOptions): Promise => {
- if (options.headers?.method) {
- options.method = options.headers.method
- delete options.headers.method
+ // https://github.com/perry-mitchell/hot-patcher/issues/6
+ patcher.patch('fetch', (url: string, options: RequestInit): Promise => {
+ const headers = options.headers as Record
+ if (headers?.method) {
+ options.method = headers.method
+ delete headers.method
}
- return request(options)
+ return fetch(url, options)
})
+
return client
}