Skip to content

A package to start a WebDAV server for a single or multiple Filen accounts

License

Notifications You must be signed in to change notification settings

FilenCloudDienste/filen-webdav

Folders and files

NameName
Last commit message
Last commit date

Latest commit

fb4e23e · Sep 14, 2024

History

92 Commits
Aug 31, 2024
May 28, 2024
Sep 14, 2024
May 28, 2024
Jun 22, 2024
Aug 28, 2024
May 28, 2024
May 28, 2024
May 28, 2024
Sep 9, 2024
May 28, 2024
Sep 14, 2024
Sep 14, 2024
Jun 5, 2024
Sep 4, 2024

Repository files navigation


Filen WebDAV

A package to start a WebDAV server for a single or multiple Filen accounts.

Contributors Forks Stargazers Issues License

Installation

  1. Install using NPM
npm install @filen/webdav@latest
  1. 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}`
)
  1. 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}`
)
  1. 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}`
)
  1. Access the server
// MacOS
mount_webdav -S -v 'Filen' http://${hostname}:${port} /mnt/filen

License

Distributed under the AGPL-3.0 License. See LICENSE for more information.