Skip to content

Commit ffa8b55

Browse files
committed
adding create-server and create-app to simplify the code structure
1 parent b2694dc commit ffa8b55

18 files changed

Lines changed: 287 additions & 284 deletions

bin/ldnode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ argv.live = !argv.noLive;
108108

109109
// Set up debug environment
110110
process.env.DEBUG = argv.verbose ? 'ldnode:*' : false;
111-
var debug = require('../lib/logging').server;
111+
var debug = require('../lib/debug').server;
112112

113113
// Set up port
114114
argv.port = argv.port || 3456;

index.js

Lines changed: 2 additions & 226 deletions
Original file line numberDiff line numberDiff line change
@@ -1,230 +1,6 @@
1-
/*jslint node: true*/
21
"use strict";
32

4-
// Third-party dependencies
5-
var express = require('express');
6-
var app = express();
7-
var getRawBody = require('raw-body');
8-
var expressWs = require('express-ws');
9-
var fs = require('fs');
10-
var responseTime = require('response-time'); // Add X-Response-Time headers
11-
var path = require('path');
12-
var session = require('express-session');
13-
var http = require('http');
14-
var https = require('https');
15-
var request = require('request');
16-
var uuid = require('node-uuid');
17-
var cors = require('cors');
18-
19-
// ldnode dependencies
20-
var acl = require('./lib/acl');
21-
var metadata = require('./lib/metadata');
22-
var header = require('./lib/header');
23-
var LDP = require('./lib/ldp');
24-
var login = require('./lib/login');
25-
var parse = require('./lib/parse');
26-
var debug = require('./lib/logging');
27-
28-
// Request handlers
29-
var getHandler = require('./lib/handlers/get.js');
30-
var postHandler = require('./lib/handlers/post.js');
31-
var putHandler = require('./lib/handlers/put.js');
32-
var deleteHandler = require('./lib/handlers/delete.js');
33-
var patchHandler = require('./lib/handlers/patch.js');
34-
35-
// Error page handler
36-
var errorHandler = require('./lib/handlers/error.js');
37-
38-
// Setting up cors
39-
var corsSettings = cors({
40-
methods: [
41-
'OPTIONS', 'HEAD', 'GET',
42-
'PATCH', 'POST', 'PUT', 'DELETE'
43-
],
44-
exposedHeaders: 'User, Location, Link, Vary, Last-Modified, Content-Length',
45-
credentials: true,
46-
maxAge: 1728000,
47-
origin: true
48-
});
49-
50-
function ldnode (argv) {
51-
var ldp = new LDP(argv);
52-
var app = express();
53-
54-
// Setting options as local variable
55-
app.locals.ldp = ldp;
56-
57-
// Session
58-
app.use(session({
59-
secret: ldp.secret || uuid.v1(),
60-
saveUninitialized: false,
61-
resave: false
62-
}));
63-
64-
// Adding proxy
65-
if (ldp.proxy) {
66-
proxy(app, ldp.proxy);
67-
}
68-
69-
// Setting up routes
70-
app.use('/', routes());
71-
72-
// Setup Express app
73-
if (ldp.live) {
74-
ws(app);
75-
}
76-
77-
debug.server("Router attached to " + ldp.mount);
78-
79-
return app;
80-
}
81-
82-
function createServer(argv) {
83-
var app = express();
84-
var ldpApp = ldnode(argv);
85-
var ldp = ldpApp.locals.ldp;
86-
app.use(ldp.mount, ldpApp);
87-
88-
if (ldp && (ldp.webid || ldp.key || ldp.cert) ) {
89-
debug.settings("SSL Private Key path: " + ldp.key);
90-
debug.settings("SSL Certificate path: " + ldp.cert);
91-
92-
if (!ldp.cert && !ldp.key) {
93-
throw new Error("Missing SSL cert and SSL key to enable WebID");
94-
}
95-
96-
if (!ldp.key && ldp.cert) {
97-
throw new Error("Missing path for SSL key");
98-
}
99-
100-
if (!ldp.cert && ldp.key) {
101-
throw new Error("Missing path for SSL cert");
102-
}
103-
104-
var key;
105-
try {
106-
key = fs.readFileSync(ldp.key);
107-
} catch(e) {
108-
throw new Error("Can't find SSL key in " + ldp.key);
109-
}
110-
111-
var cert;
112-
try {
113-
cert = fs.readFileSync(ldp.cert);
114-
} catch(e) {
115-
throw new Error("Can't find SSL cert in " + ldp.cert);
116-
}
117-
118-
var credentials = {
119-
key: key,
120-
cert: cert,
121-
requestCert: true
122-
};
123-
124-
debug.settings("Private Key: " + credentials.key);
125-
debug.settings("Certificate: " + credentials.cert);
126-
127-
return https.createServer(credentials, app);
128-
}
129-
130-
return app;
131-
}
132-
133-
function proxy (app, path) {
134-
debug.settings('XSS Proxy listening to ' + path);
135-
app.get(
136-
path,
137-
cors({
138-
methods: ['GET'],
139-
exposedHeaders: 'User, Location, Link, Vary, Last-Modified, Content-Length',
140-
credentials: true,
141-
maxAge: 1728000,
142-
origin: true
143-
}),
144-
function (req, res) {
145-
debug.settings('originalUrl: ' + req.originalUrl);
146-
var uri = req.query.uri;
147-
if (!uri) {
148-
return res
149-
.status(400)
150-
.send("Proxy has no uri param ");
151-
}
152-
153-
debug.settings('Proxy destination URI: ' + uri);
154-
request.get(uri).pipe(res);
155-
});
156-
}
157-
158-
function routes () {
159-
var router = express.Router('/');
160-
161-
// Add Link headers
162-
router.use(header.linksHandler);
163-
164-
// Setting CORS
165-
router.use(corsSettings);
166-
167-
router.use('/*', function(req, res, next) {
168-
getRawBody(req,
169-
{
170-
length: req.headers['content-length'],
171-
encoding: 'utf-8' // typer.parse(req.headers['content-type']).parameters.charset
172-
},
173-
function(err, string) {
174-
if (err) {
175-
return next(err);
176-
}
177-
req.text = string;
178-
next();
179-
});
180-
});
181-
182-
router.use('/*', login.loginHandler);
183-
184-
//ACL handlers
185-
router.get("/*", acl.allowReadHandler);
186-
router.head("/*", acl.allowReadHandler);
187-
router.post("/*", acl.allowAppendThenWriteHandler);
188-
router.patch("/*", acl.allowAppendThenWriteHandler);
189-
router.put("/*", acl.allowAppendThenWriteHandler);
190-
router.delete("/*", acl.allowWriteHandler);
191-
192-
// Convert json-ld and nquads to turtle
193-
router.use('/*', parse.parseHandler);
194-
195-
// Add response time
196-
router.use(responseTime());
197-
198-
// HTTP methods handlers
199-
router.get('/*', getHandler.handler);
200-
router.head('/*', getHandler.headHandler);
201-
router.put('/*', putHandler.handler);
202-
router.delete('/*', deleteHandler.handler);
203-
router.post('/*', postHandler.handler);
204-
router.patch('/*', patchHandler.handler);
205-
206-
//Error handling
207-
router.use(errorHandler.handler);
208-
return router;
209-
}
210-
211-
function ws (app) {
212-
expressWs(app);
213-
app.mountpath = ''; // needs to be set for addSocketRoute aka .ws()
214-
// was options.pathFilter
215-
app.ws('/', function(socket, res) {
216-
debug.subscription("incoming on " + socket.path);
217-
socket.on('message', function(msg) {
218-
debug.subscription("message = " + msg);
219-
// subscribeToChanges(socket, res);
220-
});
221-
});
222-
}
223-
224-
ldnode.proxy = proxy;
225-
ldnode.ws = ws;
226-
ldnode.routes = routes;
227-
ldnode.createServer = createServer;
3+
var ldnode = require('./lib/create-app');
4+
ldnode.createServer = require('./lib/create-server');
2285

2296
module.exports = ldnode;
230-

lib/acl.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ var S = require('string');
99
var url = require('url');
1010
var async = require('async');
1111

12-
var debug = require('./logging').ACL;
12+
var debug = require('./debug').ACL;
1313
var utils = require('./utils.js');
1414
var ns = require('./vocab/ns.js').ns;
1515
var rdfVocab = require('./vocab/rdf.js');

lib/create-app.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
module.exports = createApp;
2+
3+
var express = require('express');
4+
var expressWs = require('express-ws');
5+
var session = require('express-session');
6+
var uuid = require('node-uuid');
7+
var cors = require('cors');
8+
9+
var debug = require('./debug');
10+
var LDP = require('./ldp');
11+
var LdpMiddleware = require('./ldp-middleware');
12+
13+
var proxy = require('./handlers/proxy')
14+
15+
var corsSettings = cors({
16+
methods: [
17+
'OPTIONS', 'HEAD', 'GET',
18+
'PATCH', 'POST', 'PUT', 'DELETE'
19+
],
20+
exposedHeaders: 'User, Location, Link, Vary, Last-Modified, Content-Length',
21+
credentials: true,
22+
maxAge: 1728000,
23+
origin: true
24+
});
25+
26+
function ws (app) {
27+
expressWs(app);
28+
app.mountpath = ''; // needs to be set for addSocketRoute aka .ws()
29+
// was options.pathFilter
30+
app.ws('/', function(socket, res) {
31+
debug.subscription("incoming on " + socket.path);
32+
socket.on('message', function(msg) {
33+
debug.subscription("message = " + msg);
34+
// subscribeToChanges(socket, res);
35+
});
36+
});
37+
}
38+
39+
function createApp (argv) {
40+
var ldp = new LDP(argv);
41+
var app = express();
42+
43+
// Setting options as local variable
44+
app.locals.ldp = ldp;
45+
46+
// Session
47+
app.use(session({
48+
secret: ldp.secret || uuid.v1(),
49+
saveUninitialized: false,
50+
resave: false
51+
}));
52+
53+
// Adding proxy
54+
if (ldp.proxy) {
55+
proxy(app, ldp.proxy);
56+
}
57+
58+
// Setting up routes
59+
app.use('/', LdpMiddleware(corsSettings));
60+
61+
// Setup Express app
62+
if (ldp.live) {
63+
ws(app);
64+
}
65+
66+
return app;
67+
}

lib/create-server.js

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
module.exports = createServer;
2+
3+
var express = require('express');
4+
var fs = require('fs');
5+
var https = require('https');
6+
7+
var debug = require('./debug');
8+
var createApp = require('./create-app');
9+
10+
function createServer(argv) {
11+
var app = express();
12+
var ldpApp = createApp(argv);
13+
var ldp = ldpApp.locals.ldp;
14+
15+
// Mount path
16+
var mount = argv.mount || '/';
17+
// Removing ending '/'
18+
if (mount.length > 1 &&
19+
mount[mount.length - 1] === '/') {
20+
mount = mount.slice(0, -1);
21+
}
22+
23+
app.use(mount, ldpApp);
24+
debug.settings('mount: ' + mount);
25+
26+
if (ldp && (ldp.webid || argv.key || argv.cert) ) {
27+
debug.settings("SSL Private Key path: " + argv.key);
28+
debug.settings("SSL Certificate path: " + argv.cert);
29+
30+
if (!argv.cert && !argv.key) {
31+
throw new Error("Missing SSL cert and SSL key to enable WebID");
32+
}
33+
34+
if (!argv.key && argv.cert) {
35+
throw new Error("Missing path for SSL key");
36+
}
37+
38+
if (!argv.cert && argv.key) {
39+
throw new Error("Missing path for SSL cert");
40+
}
41+
42+
var key;
43+
try {
44+
key = fs.readFileSync(argv.key);
45+
} catch(e) {
46+
throw new Error("Can't find SSL key in " + argv.key);
47+
}
48+
49+
var cert;
50+
try {
51+
cert = fs.readFileSync(argv.cert);
52+
} catch(e) {
53+
throw new Error("Can't find SSL cert in " + argv.cert);
54+
}
55+
56+
var credentials = {
57+
key: key,
58+
cert: cert,
59+
requestCert: true
60+
};
61+
62+
debug.settings("Certificate: " + credentials.cert);
63+
64+
return https.createServer(credentials, app);
65+
}
66+
67+
return app;
68+
}
File renamed without changes.

lib/handlers/delete.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"use strict";
33

44
var fs = require('fs');
5-
var debug = require('../logging').handlers;
5+
var debug = require('../debug').handlers;
66
var utils = require('../utils.js');
77
var metadata = require('../metadata.js');
88

0 commit comments

Comments
 (0)