|
1 | | -/*jslint node: true*/ |
2 | 1 | "use strict"; |
3 | 2 |
|
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(path, corsSettings, function (req, res) { |
136 | | - debug.settings('originalUrl: ' + req.originalUrl); |
137 | | - var uri = req.query.uri; |
138 | | - if (!uri) { |
139 | | - return res |
140 | | - .status(400) |
141 | | - .send("Proxy has no uri param "); |
142 | | - } |
143 | | - |
144 | | - debug.settings('Proxy destination URI: ' + uri); |
145 | | - request.get(uri).pipe(res); |
146 | | - }); |
147 | | -} |
148 | | - |
149 | | -function routes () { |
150 | | - var router = express.Router('/'); |
151 | | - |
152 | | - // Add Link headers |
153 | | - router.use(header.linksHandler); |
154 | | - |
155 | | - // Setting CORS |
156 | | - router.use(corsSettings); |
157 | | - |
158 | | - router.use('/*', function(req, res, next) { |
159 | | - getRawBody(req, |
160 | | - { |
161 | | - length: req.headers['content-length'], |
162 | | - encoding: 'utf-8' // typer.parse(req.headers['content-type']).parameters.charset |
163 | | - }, |
164 | | - function(err, string) { |
165 | | - if (err) { |
166 | | - return next(err); |
167 | | - } |
168 | | - req.text = string; |
169 | | - next(); |
170 | | - }); |
171 | | - }); |
172 | | - |
173 | | - router.use('/*', login.loginHandler); |
174 | | - |
175 | | - //ACL handlers |
176 | | - router.get("/*", acl.allow('Read')); |
177 | | - router.head("/*", acl.allow('Read')); |
178 | | - router.post("/*", acl.allow('Append')); |
179 | | - router.patch("/*", acl.allow('Append')); |
180 | | - router.put("/*", acl.allow('Append')); |
181 | | - router.delete("/*", acl.allow('Write')); |
182 | | - |
183 | | - // Convert json-ld and nquads to turtle |
184 | | - router.use('/*', parse.parseHandler); |
185 | | - |
186 | | - // Add response time |
187 | | - router.use(responseTime()); |
188 | | - |
189 | | - // HTTP methods handlers |
190 | | - router.get('/*', getHandler.handler); |
191 | | - router.head('/*', getHandler.headHandler); |
192 | | - router.put('/*', putHandler.handler); |
193 | | - router.delete('/*', deleteHandler.handler); |
194 | | - router.post('/*', postHandler.handler); |
195 | | - router.patch('/*', patchHandler.handler); |
196 | | - |
197 | | - //Error handling |
198 | | - router.use(errorHandler.handler); |
199 | | - return router; |
200 | | -} |
201 | | - |
202 | | -function ws (app) { |
203 | | - expressWs(app); |
204 | | - app.mountpath = ''; // needs to be set for addSocketRoute aka .ws() |
205 | | - // was options.pathFilter |
206 | | - app.ws('/', function(socket, res) { |
207 | | - debug.subscription("incoming on " + socket.path); |
208 | | - socket.on('message', function(msg) { |
209 | | - debug.subscription("message = " + msg); |
210 | | - // subscribeToChanges(socket, res); |
211 | | - }); |
212 | | - }); |
213 | | -} |
214 | | - |
215 | | -ldnode.proxy = proxy; |
216 | | -ldnode.ws = ws; |
217 | | -ldnode.routes = routes; |
218 | | -ldnode.createServer = createServer; |
| 3 | +var ldnode = require('./lib/create-app'); |
| 4 | +ldnode.createServer = require('./lib/create-server'); |
219 | 5 |
|
220 | 6 | module.exports = ldnode; |
221 | | - |
0 commit comments