Repository navigation
Expand file tree
/
Copy pathapp.js
More file actions
executable file
·96 lines (70 loc) · 2.96 KB
/
Copy pathapp.js
File metadata and controls
executable file
·96 lines (70 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/usr/bin/env node
'use strict';
// FIXME should not be there. This is currently needed to work on a dev Cloudron
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
require('supererror')({ splatchError: true });
var express = require('express'),
json = require('body-parser').json,
cors = require('cors'),
multer = require('multer'),
routes = require('./src/routes.js'),
tags = require('./src/tags.js'),
things = require('./src/things.js'),
morgan = require('morgan'),
lastmile = require('connect-lastmile'),
serveStatic = require('serve-static');
var app = express();
var router = new express.Router();
router.del = router.delete;
router.post('/api/things', routes.auth, routes.add);
router.get ('/api/things', routes.auth, routes.getAll);
router.get ('/api/things/:id', routes.auth, routes.get);
router.put ('/api/things/:id', routes.auth, routes.put);
router.del ('/api/things/:id', routes.auth, routes.del);
router.post('/api/things/:id/public', routes.auth, routes.makePublic);
router.post('/api/files', routes.auth, multer().any(), routes.fileAdd);
// FIXME should not be public!!! but is required for thing sharing at the moment
router.get ('/api/files/:identifier', routes.fileGet);
router.get ('/api/share/:shareId', routes.getPublic);
router.get ('/api/tags', routes.auth, routes.getTags);
router.post('/api/settings', routes.auth, routes.settingsSave);
router.get ('/api/settings', routes.auth, routes.settingsGet);
router.get ('/api/export', routes.auth, routes.exportThings);
router.post('/api/import', routes.auth, multer().any(), routes.importThings);
router.post('/api/login', routes.login);
router.get ('/api/logout', routes.auth, routes.logout);
router.get ('/api/profile', routes.auth, routes.profile);
router.get ('/api/healthcheck', routes.healthcheck);
app.use(morgan('dev', { immediate: false, stream: { write: function (str) { console.log(str.slice(0, -1)); } } }));
app.use(serveStatic(__dirname + '/public', { etag: false }));
app.use(cors());
app.use(json({ strict: true, limit: '5mb' }));
app.use(router);
app.use(lastmile());
function exit(error) {
if (error) console.error(error);
process.exit(error ? 1 : 0);
}
function welcomeIfNeeded(callback) {
things.getAll({}, 0, 1, function (error, result) {
if (error) return callback(error);
if (result.length > 0) return callback(null);
things.imp(require(__dirname + '/things.json'), callback);
});
}
routes.init(function (error) {
if (error) exit(error);
welcomeIfNeeded(function (error) {
if (error) exit(error);
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('App listening at http://%s:%s', host, port);
tags.cleanup();
setInterval(tags.cleanup, 1000 * 60);
if (process.env.MAIL_IMAP_SERVER) {
require('./src/mail.js');
}
});
});
});