Skip to content

Commit 7518929

Browse files
committed
Splitted the 'examples' folder into 'v1' and 'v2'
1 parent 7a23779 commit 7518929

35 files changed

+2097
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Custom Web Resource
2+
3+
This is an example to show how to make a simple custom resource base on the web. It gets a web content as its own content.
4+
5+
The folder `ts` and the folder `js` are the same thing. The `js` folder display the example in JavaScript while the `ts` display the example in TypeScript.
6+
7+
## Usage
8+
9+
### Execute
10+
11+
```bash
12+
node index.js
13+
```
14+
15+
### Tests
16+
17+
```bash
18+
npm tst
19+
```
20+
21+
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
const webFsManager = require('./js/fsManager.js'),
2+
webFile = require('./js/resource.js'),
3+
webdav = require('webdav-server'),
4+
zlib = require('zlib'),
5+
fs = require('fs');
6+
7+
const server = new webdav.WebDAVServer({
8+
port: 1900,
9+
autoSave: {
10+
treeFilePath: './data.json',
11+
tempTreeFilePath: './data.tmp.json'
12+
},
13+
autoLoad: {
14+
treeFilePath: './data.json',
15+
fsManagers: [
16+
new webdav.RootFSManager(),
17+
new webFsManager.WebFSManager(),
18+
new webdav.VirtualFSManager()
19+
]
20+
}
21+
});
22+
23+
server.autoLoad((e) => {
24+
if(e)
25+
{
26+
server.addResourceTree([
27+
new webFile.WebFile('http://unlicense.org/UNLICENSE', 'license.txt'),
28+
new webFile.WebFile('https://github.com/OpenMarshal/npm-WebDAV-Server', 'webdav-server-github.html'),
29+
new webFile.WebFile('http://www.stuffedcupcakes.com/wp-content/uploads/2013/05/Chocolate-Overload.jpg', 'chocolate.jpg')
30+
], (e) => {
31+
if(e) throw e;
32+
33+
run();
34+
});
35+
}
36+
else
37+
run();
38+
})
39+
40+
function run()
41+
{
42+
server.start((s) => {
43+
console.log('Server started on port ' + s.address().port + '.');
44+
});
45+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
const webdav = require('webdav-server'),
2+
webFile = require('./resource.js');
3+
4+
module.exports.WebFSManager = function()
5+
{
6+
const fsManager = { };
7+
fsManager.uid = 'WebFSManager_1.0.0';
8+
9+
fsManager.serialize = function(resource, obj)
10+
{
11+
return {
12+
dateCreation: resource.dateCreation,
13+
dateLastModified: resource.dateLastModified,
14+
properties: resource.properties,
15+
webUrl: resource.webUrl,
16+
fileName: resource.fileName,
17+
refreshTimeoutMS: resource.refreshTimeoutMS
18+
};
19+
}
20+
21+
fsManager.unserialize = function(data, obj)
22+
{
23+
const rs = new webFile.WebFile(data.webUrl, data.fileName, data.refreshTimeoutMS);
24+
rs.dateCreation = data.dateCreation;
25+
rs.dateLastModified = data.dateLastModified;
26+
rs.properties = data.properties;
27+
return rs;
28+
}
29+
30+
fsManager.newResource = function(fullPath, name, type, parent)
31+
{
32+
throw webdav.Errors.InvalidOperation;
33+
}
34+
35+
return fsManager;
36+
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
"use strict";
2+
const webdav = require('webdav-server'),
3+
request = require('request'),
4+
webFSManager = require('./fsManager.js');
5+
6+
module.exports.WebFile = function(webUrl, fileName, refreshTimeoutMs = 10000)
7+
{
8+
const stdRes = new webdav.StandardResource(null, new webFSManager.WebFSManager());
9+
10+
stdRes.refreshTimeoutMs = refreshTimeoutMs;
11+
stdRes.lenUpdateTime = 0;
12+
stdRes.fileName = fileName;
13+
stdRes.webUrl = webUrl;
14+
stdRes.len = -1;
15+
16+
stdRes.openReadStream = function()
17+
{
18+
let size = 0;
19+
const stream = request.get(this.webUrl);
20+
stream.on('data', (chunk) => {
21+
size = chunk.length;
22+
})
23+
stream.on('end', () => {
24+
this.len = size;
25+
this.lenUpdateTime = Date.now();
26+
})
27+
stream.end();
28+
return stream;
29+
};
30+
31+
stdRes.create = function(callback)
32+
{
33+
callback();
34+
};
35+
36+
stdRes.delete = function(callback)
37+
{
38+
webdav.StandardResource.standardRemoveFromParent(this, callback);
39+
}
40+
41+
stdRes.moveTo = function(parent, newName, overwrite, callback)
42+
{
43+
webdav.StandardResource.standardMoveTo(this, parent, newName, overwrite, callback);
44+
}
45+
46+
stdRes.rename = function(newName, callback)
47+
{
48+
const oldname = this.fileName;
49+
this.fileName = newName;
50+
callback(null, oldname, newName);
51+
}
52+
53+
stdRes.write = function(targetSource, callback)
54+
{
55+
callback(webdav.Errors.InvalidOperation);
56+
}
57+
58+
stdRes.read = function(targetSource, callback)
59+
{
60+
callback(null, this.openReadStream());
61+
}
62+
63+
stdRes.mimeType = function(targetSource, callback)
64+
{
65+
webdav.StandardResource.standardMimeType(this, targetSource, callback);
66+
}
67+
68+
stdRes.size = function(targetSource, callback)
69+
{
70+
if(this.len >= 0 && Date.now() - this.lenUpdateTime < this.refreshTimeoutMs)
71+
{
72+
callback(null, this.len);
73+
return;
74+
}
75+
76+
const stream = this.openReadStream();
77+
stream.on('end', () => callback(null, this.len));
78+
}
79+
80+
stdRes.webName = function(callback)
81+
{
82+
callback(null, this.fileName);
83+
}
84+
85+
stdRes.type = function(callback)
86+
{
87+
callback(null, webdav.ResourceType.File);
88+
}
89+
90+
stdRes.addChild = function(resource, callback)
91+
{
92+
callback(webdav.Errors.InvalidOperation);
93+
}
94+
stdRes.removeChild = function(resource, callback)
95+
{
96+
callback(webdav.Errors.InvalidOperation);
97+
}
98+
stdRes.getChildren = function(callback)
99+
{
100+
callback(webdav.Errors.InvalidOperation);
101+
}
102+
103+
104+
return stdRes;
105+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "customwebresource",
3+
"version": "1.0.0",
4+
"description": "Example to show how to make a simple custom resource base on the web. It gets a web content as its own content.",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "node test.js"
8+
},
9+
"author": "Adrien Castex <[email protected]>",
10+
"license": "Unlicense",
11+
"dependencies": {
12+
"webdav-server": "^1.8.2"
13+
}
14+
}

examples/v1/customWebResource/test.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const webFile = require('./js/resource.js'),
2+
webdav = require('webdav-server');
3+
4+
new webdav.ResourceTester({
5+
canHaveVirtualFolderChildren: false,
6+
canHaveVirtualFileChildren: false,
7+
canGetLastModifiedDate: true,
8+
canGetCreationDate: true,
9+
canRemoveChildren: false,
10+
canHaveChildren: false,
11+
canGetChildren: false,
12+
canGetMimeType: true,
13+
canBeCreated: true,
14+
canBeDeleted: true,
15+
canBeRenamed: true,
16+
canGetSize: true,
17+
canBeMoved: true,
18+
canWrite: false,
19+
canRead: true,
20+
canLock: true
21+
},
22+
// For each battery of tests, create the resource to test
23+
// willCreate : A value of true means you must not call the '.create(...)' method because it will be tested
24+
(willCreate, cb) => cb(new webFile.WebFile('http://unlicense.org/UNLICENSE', 'test.txt'))
25+
).run((results) => {
26+
27+
// Display the results of the tests
28+
console.log(results.all.isValid ? 'Tests passed!' : 'Tests failed!');
29+
if(results.all.errors)
30+
for(const value of results.all.errors)
31+
console.log(value.toString());
32+
});
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { SerializedObject, FSManager, Errors, IResource, ResourceType } from 'webdav-server'
2+
import { WebFile } from './Resource'
3+
4+
export class WebFSManager implements FSManager
5+
{
6+
uid : string = 'WebFSManager_1.0.0';
7+
8+
serialize(resource : any, obj : SerializedObject) : object
9+
{
10+
return {
11+
dateCreation: resource.dateCreation,
12+
dateLastModified: resource.dateLastModified,
13+
properties: resource.properties,
14+
webUrl: resource.webUrl,
15+
fileName: resource.fileName,
16+
refreshTimeoutMS: resource.refreshTimeoutMS
17+
};
18+
}
19+
20+
unserialize(data : any, obj : SerializedObject) : IResource
21+
{
22+
const rs = new WebFile(data.webUrl, data.fileName, data.refreshTimeoutMS);
23+
rs.dateCreation = data.dateCreation;
24+
rs.dateLastModified = data.dateLastModified;
25+
rs.properties = data.properties;
26+
return rs;
27+
}
28+
29+
newResource(fullPath : string, name : string, type : ResourceType, parent : IResource) : IResource
30+
{
31+
throw Errors.InvalidOperation;
32+
}
33+
}

0 commit comments

Comments
 (0)