]>
git.immae.eu Git - perso/Immae/Projets/Nodejs/Surfer.git/blob - server.js
6 var express
= require('express'),
7 morgan
= require('morgan'),
8 passport
= require('passport'),
9 path
= require('path'),
11 compression
= require('compression'),
12 session
= require('express-session'),
13 bodyParser
= require('body-parser'),
14 cookieParser
= require('cookie-parser'),
15 lastMile
= require('connect-lastmile'),
16 HttpError
= require('connect-lastmile').HttpError
,
17 HttpSuccess
= require('connect-lastmile').HttpSuccess
,
18 multipart
= require('./src/multipart'),
19 mkdirp
= require('mkdirp'),
20 auth
= require('./src/auth.js'),
21 serveIndex
= require('serve-index'),
22 files
= require('./src/files.js')(path
.resolve(__dirname
, process
.argv
[2] || 'files'));
25 const ROOT_FOLDER
= path
.resolve(__dirname
, process
.argv
[2] || 'files');
26 const CONFIG_FILE
= path
.resolve(__dirname
, process
.argv
[3] || '.config.json');
28 // Ensure the root folder exists
29 mkdirp
.sync(ROOT_FOLDER
);
32 folderListingEnabled: false
35 function getSettings(req
, res
, next
) {
36 res
.send({ folderListingEnabled: !!config
.folderListingEnabled
});
39 function setSettings(req
, res
, next
) {
40 if (typeof req
.body
.folderListingEnabled
=== 'undefined') return next(new HttpError(400, 'missing folderListingEnabled boolean'));
42 config
.folderListingEnabled
= !!req
.body
.folderListingEnabled
;
44 fs
.writeFile(CONFIG_FILE
, JSON
.stringify(config
), function (error
) {
45 if (error
) return next(new HttpError(500, 'unable to save settings'));
47 next(new HttpSuccess(201, {}));
51 // Load the config file
53 console
.log(`Using config file: ${CONFIG_FILE}`);
54 config
= require(CONFIG_FILE
);
56 if (e
.code
=== 'MODULE_NOT_FOUND') console
.log(`Config file ${CONFIG_FILE} not found`);
57 else console
.log(`Cannot load config file ${CONFIG_FILE}`, e
);
60 if (typeof config
.folderListingEnabled
=== 'undefined') config
.folderListingEnabled
= true;
62 // Setup the express server and routes
64 var router
= new express
.Router();
66 var multipart
= multipart({ maxFieldsSize: 2 * 1024, limit: '512mb', timeout: 3 * 60 * 1000 });
68 router
.post ('/api/login', auth
.login
);
69 router
.post ('/api/logout', auth
.verify
, auth
.logout
);
70 router
.get ('/api/settings', auth
.verify
, getSettings
);
71 router
.put ('/api/settings', auth
.verify
, setSettings
);
72 router
.get ('/api/profile', auth
.verify
, auth
.getProfile
);
73 router
.get ('/api/files/*', auth
.verify
, files
.get);
74 router
.post ('/api/files/*', auth
.verify
, multipart
, files
.post
);
75 router
.put ('/api/files/*', auth
.verify
, files
.put
);
76 router
.delete('/api/files/*', auth
.verify
, files
.del
);
77 router
.get ('/api/healthcheck', function (req
, res
) { res
.status(200).send(); });
79 app
.use(morgan('dev'));
80 app
.use(compression());
81 app
.use('/api', bodyParser
.json());
82 app
.use('/api', bodyParser
.urlencoded({ extended: false, limit: '100mb' }));
83 app
.use('/api', cookieParser());
84 app
.use('/api', session({ secret: 'surfin surfin', resave: false, saveUninitialized: false }));
85 app
.use('/api', passport
.initialize());
86 app
.use('/api', passport
.session());
88 app
.use('/_admin', express
.static(__dirname
+ '/frontend'));
89 app
.use('/', express
.static(ROOT_FOLDER
));
90 app
.use('/', function welcomePage(req
, res
, next
) {
91 if (config
.folderListingEnabled
|| req
.path
!== '/') return next();
92 res
.status(200).sendFile(path
.join(__dirname
, '/frontend/welcome.html'));
94 app
.use('/', function (req
, res
, next
) {
95 if (config
.folderListingEnabled
) return next();
96 res
.sendFile(__dirname
+ '/frontend/404.html');
98 app
.use('/', serveIndex(ROOT_FOLDER
, { icons: true }));
101 var server
= app
.listen(3000, function () {
102 var host
= server
.address().address
;
103 var port
= server
.address().port
;
105 console
.log('Surfer listening on http://%s:%s', host
, port
);
106 console
.log('Using base path', ROOT_FOLDER
);