]>
Commit | Line | Data |
---|---|---|
ca2d3b4d JZ |
1 | #!/usr/bin/env node |
2 | ||
3 | 'use strict'; | |
4 | ||
fb372a32 | 5 | |
ca2d3b4d JZ |
6 | var express = require('express'), |
7 | morgan = require('morgan'), | |
591ad40c | 8 | passport = require('passport'), |
8c3ae071 | 9 | path = require('path'), |
ca2d3b4d | 10 | compression = require('compression'), |
591ad40c | 11 | session = require('express-session'), |
ca2d3b4d | 12 | bodyParser = require('body-parser'), |
591ad40c | 13 | cookieParser = require('cookie-parser'), |
ca2d3b4d JZ |
14 | lastMile = require('connect-lastmile'), |
15 | multipart = require('./src/multipart'), | |
7bb99aff | 16 | mkdirp = require('mkdirp'), |
591ad40c | 17 | auth = require('./src/auth.js'), |
490f71d7 | 18 | serveIndex = require('serve-index'), |
fb372a32 | 19 | files = require('./src/files.js')(path.resolve(__dirname, process.argv[2] || 'files')); |
ca2d3b4d JZ |
20 | |
21 | var app = express(); | |
22 | var router = new express.Router(); | |
23 | ||
24 | var multipart = multipart({ maxFieldsSize: 2 * 1024, limit: '512mb', timeout: 3 * 60 * 1000 }); | |
25 | ||
4a27fce7 JZ |
26 | router.post ('/api/login', auth.login); |
27 | router.post ('/api/logout', auth.verify, auth.logout); | |
28 | router.get ('/api/profile', auth.verify, auth.getProfile); | |
3d716d9e | 29 | router.get ('/api/files/*', auth.verify, files.get); |
e628921a JZ |
30 | router.post ('/api/files/*', auth.verify, multipart, files.post); |
31 | router.put ('/api/files/*', auth.verify, files.put); | |
3d716d9e | 32 | router.delete('/api/files/*', auth.verify, files.del); |
1a8d99e4 | 33 | router.get ('/api/healthcheck', function (req, res) { res.status(200).send(); }); |
ca2d3b4d | 34 | |
9f18a84b | 35 | // welcome screen in case / does not serve up any file yet |
e4ad4c42 JZ |
36 | function welcomePage(req, res, next) { |
37 | if (req.path !== '/') return next(); | |
38 | ||
39 | res.status(200).sendFile(path.join(__dirname, '/frontend/welcome.html')); | |
40 | } | |
41 | // router.get('/', function (req, res) { res.status(200).sendFile(path.join(__dirname, '/frontend/welcome.html')); }); | |
c10e69bf | 42 | |
490f71d7 JZ |
43 | var rootFolder = path.resolve(__dirname, process.argv[2] || 'files'); |
44 | ||
ca2d3b4d JZ |
45 | app.use(morgan('dev')); |
46 | app.use(compression()); | |
74c0064c JZ |
47 | app.use('/api', bodyParser.json()); |
48 | app.use('/api', bodyParser.urlencoded({ extended: false, limit: '100mb' })); | |
49 | app.use('/api', cookieParser()); | |
50 | app.use('/api', session({ secret: 'surfin surfin', resave: false, saveUninitialized: false })); | |
51 | app.use('/api', passport.initialize()); | |
52 | app.use('/api', passport.session()); | |
ca2d3b4d | 53 | app.use(router); |
74c0064c JZ |
54 | app.use('/_admin', express.static(__dirname + '/frontend')); |
55 | app.use('/', express.static(rootFolder)); | |
e4ad4c42 | 56 | app.use('/', welcomePage); |
74c0064c | 57 | app.use('/', serveIndex(rootFolder, { icons: true })); |
ca2d3b4d JZ |
58 | app.use(lastMile()); |
59 | ||
60 | var server = app.listen(3000, function () { | |
61 | var host = server.address().address; | |
62 | var port = server.address().port; | |
63 | ||
7bb99aff JZ |
64 | var basePath = path.resolve(__dirname, process.argv[2] || 'files'); |
65 | mkdirp.sync(basePath); | |
66 | ||
ca2d3b4d | 67 | console.log('Surfer listening at http://%s:%s', host, port); |
7bb99aff | 68 | console.log('Using base path', basePath); |
5c6f8c0a | 69 | }); |