Examples [v2] - OpenMarshal/npm-WebDAV-Server GitHub Wiki
You can find more examples here.
Using the physical file system to map a physical folder
// TypeScript
import { v2 as webdav } from 'webdav-server'
// Javascript
const webdav = require('webdav-server').v2;
const server = new webdav.WebDAVServer();
server.setFileSystem('/physicalFolder', new webdav.PhysicalFileSystem('/my/path/to/the/folder'), (success) => {
server.start(() => console.log('READY'));
})
User system and user rights
// TypeScript
import { v2 as webdav } from 'webdav-server'
// Javascript
const webdav = require('webdav-server').v2;
// User manager (tells who are the users)
const userManager = new webdav.SimpleUserManager();
const user = userManager.addUser('username', 'password', false);
// Privilege manager (tells which users can access which files/folders)
const privilegeManager = new webdav.SimplePathPrivilegeManager();
privilegeManager.setRights(user, '/', [ 'all' ]);
const server = new webdav.WebDAVServer({
// HTTP Digest authentication with the realm 'Default realm'
httpAuthentication: new webdav.HTTPDigestAuthentication(userManager, 'Default realm'),
privilegeManager: privilegeManager
});
server.start(() => console.log('READY'));
Simple auto-save/load
// TypeScript
import { v2 as webdav } from 'webdav-server'
// Javascript
const webdav = require('webdav-server').v2;
const server = new webdav.WebDAVServer({
autoSave: { // Will automatically save the changes in the 'data.json' file
treeFilePath: 'data.json'
}
});
// Try to load the 'data.json' file
server.autoLoad((e) => {
if(e)
{ // Couldn't load the 'data.json' (file is not accessible or it has invalid content)
server.rootFileSystem().addSubTree(server.createExternalContext(), {
'folder1': { // /folder1
'file1.txt': webdav.ResourceType.File, // /folder1/file1.txt
'file2.txt': webdav.ResourceType.File // /folder1/file2.txt
},
'file0.txt': webdav.ResourceType.File // /file0.txt
})
}
server.start(() => console.log('READY'));
})
Auto-save
const webdav = require('webdav-server');
const server = new webdav.WebDAVServer({
isVerbose: true,
autoSave: {
treeFilePath: 'data.json',
tempTreeFilePath: 'data.tmp.json',
onSaveError: () => {
console.log('SAVE ERROR');
},
streamProvider: (stream, cb) => {
cb(stream.pipe(zlib.createGzip())); // useless because the argument 'stream' is already a GZip stream
}
}
});
server.start(() => console.log('READY'));
Home-made loading
const webdav = require('webdav-server'),
zlib = require('zlib'),
fs = require('fs');
const server = new webdav.WebDAVServer(/* [...] */);
const stream = zlib.createGunzip();
try
{
fs.createReadStream('data.json').pipe(stream);
let data = '';
stream.on('data', (chunk) => {
data += chunk.toString();
})
stream.on('end', () => {
this.server.load(JSON.parse(data), [
new webdav.RootFSManager(),
// [...]
], e => {
if(e) throw e;
server.start(() => console.log('READY'));
})
})
stream.on('error', () => {
console.log('Could not load.');
server.start(() => console.log('READY'));
})
}
catch(ex)
{
console.log('Could not load.');
server.start(() => console.log('READY'));
}
Resource tree creation
// TypeScript
import { v2 as webdav } from 'webdav-server'
// Javascript
const webdav = require('webdav-server').v2;
const server = new webdav.WebDAVServer();
server.rootFileSystem().addSubTree(server.createExternalContext(), {
'folder1': { // /folder1
'file1.txt': webdav.ResourceType.File, // /folder1/file1.txt
'file2.txt': webdav.ResourceType.File // /folder1/file2.txt
},
'file0.txt': webdav.ResourceType.File // /file0.txt
})
server.start(() => console.log('READY'));