A package to start a WebDAV server for a single or multiple Filen accounts.
- Install using NPM
npm install @filen/webdav@latest
- Initialize the server (standalone mode, single user)
// Standalone mode, single user
import { FilenSDK } from "@filen/sdk"
import path from "path"
import os from "os"
import { WebDAVServer } from "@filen/webdav"
// Initialize a SDK instance (optional)
const filen = new FilenSDK({
metadataCache: true,
connectToSocket: true,
tmpPath: path.join(os.tmpdir(), "filen-sdk")
})
await filen.login({
email: "[email protected]",
password: "supersecret123",
twoFactorCode: "123456"
})
const hostname = "127.0.0.1"
const port = 1900
const https = false
const server = new WebDAVServer({
hostname,
port,
https,
user: {
username: "admin",
password: "admin",
sdk: filen
},
authMode: "basic" | "digest"
})
await server.start()
console.log(
`WebDAV server started on ${https ? "https" : "http"}://${hostname === "127.0.0.1" ? "local.webdav.filen.io" : hostname}:${port}`
)
- Initialize the server (proxy mode)
When in proxy mode, the server acts as a local WebDAV gateway for multiple Filen accounts. It accepts Filen login credentials formatted as follows (without the double backticks):
Username: "[email protected]"
Password: "password=yoursecretpassword&twoFactorAuthentication=<RECOVERY_CODE_OR_6_DIGIT_OTP_CODE>"
// You can also leave out the "&twoFactorAuthentication=" part if your account is not protected by 2FA.
Useful for everyone who wants to host a single WebDAV server for multiple accounts/users. Everything still runs client side, keeping the zero-knowledge end-to-end encryption intact.
// Proxy mode, multi user
import { WebDAVServer } from "@filen/webdav"
const hostname = "127.0.0.1"
const port = 1900
const https = false
const server = new WebDAVServer({
hostname,
port,
https,
// Omit the user object
authMode: "basic" // Only basic auth is supported in proxy mode
})
await server.start()
console.log(
`WebDAV server started on ${https ? "https" : "http"}://${hostname === "127.0.0.1" ? "local.webdav.filen.io" : hostname}:${port}`
)
- Initialize the server (cluster mode)
import { FilenSDK } from "@filen/sdk"
import path from "path"
import os from "os"
import { WebDAVServerCluster } from "@filen/webdav"
// Initialize a SDK instance (optional)
const filen = new FilenSDK({
metadataCache: true,
connectToSocket: true,
tmpPath: path.join(os.tmpdir(), "filen-sdk")
})
await filen.login({
email: "[email protected]",
password: "supersecret123",
twoFactorCode: "123456"
})
const hostname = "127.0.0.1"
const port = 1900
const https = false
const server = new WebDAVServerCluster({
hostname,
port,
https,
user: {
username: "admin",
password: "admin",
sdk: filen
},
authMode: "basic" | "digest",
threads: 16 // Number of threads to spawn. Defaults to CPU core count if omitted.
})
await server.start()
console.log(
`WebDAV server cluster started on ${https ? "https" : "http"}://${
hostname === "127.0.0.1" ? "local.webdav.filen.io" : hostname
}:${port}`
)
- Access the server
// MacOS
mount_webdav -S -v 'Filen' http://${hostname}:${port} /mnt/filen
Distributed under the AGPL-3.0 License. See LICENSE for more information.