-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathserver.coffee
108 lines (82 loc) · 2.64 KB
/
server.coffee
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
97
98
99
100
101
102
103
104
105
106
107
108
fs = require('fs')
path = require('path')
mongoose = require('mongoose')
express = require('express')
bodyParser = require('body-parser')
resin = require('resin-sdk')
config = require('./config')
passport = require('passport')
LocalStrategy = require('passport-local').Strategy
bcrypt = require('bcrypt-nodejs')
session = require('express-session')
mongooseURL = process.env.MONGOLAB_URI or process.env.MONGOHQ_URL or 'mongodb://localhost/parallellocalypse'
mongoose.connect mongooseURL, (err) ->
if err
throw err
console.log('Connected to MongoDB')
mongoose.plugin(require('mongoose-paginate'))
token = config.token
resin.auth.loginWithToken token, (err) ->
throw err if err?
console.log('Authenticated with Resin')
port = process.env.PORT or 8080
passport.serializeUser (user, done) ->
done(null, user)
passport.deserializeUser (user, done) ->
done(null, user)
passport.use 'admin', new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
}, (req, email, password, done) ->
if email != config.admin.email or password != config.admin.password
return done(null, false)
user = {
type: 'admin'
email
}
return done(null, user)
)
passport.use 'device', new LocalStrategy({
usernameField: 'macAddress',
passwordField: 'secret',
passReqToCallback: true
}, (req, macAddress, secret, done) ->
if !bcrypt.compareSync(macAddress + config.device.secret, secret)
return done(null, false)
user = {
type: 'device'
}
return done(null, user)
)
app = express()
app.use(bodyParser())
app.use (req, res, next) ->
console.log('%s %s', req.method, req.url)
next()
if process.env.NODE_ENV == 'production'
app.use(express.static(__dirname + '/build'))
else
swig = require('swig')
viewsDir = __dirname + '/views'
app.engine('swig', swig.renderFile)
app.set('view engine', 'swig')
app.set('views', viewsDir)
pages = fs.readdirSync("#{viewsDir}/pages").map (fileName) ->
path.basename(fileName, '.swig')
pages.forEach (page) ->
app.get "/#{page}.html", (req, res) ->
res.render("pages/#{page}")
app.get '/', (req, res) ->
res.render('pages/index')
app.use(express.static(__dirname + '/public'))
app.use(session({ secret: 'themostamazingsupercomputer' }))
app.use(passport.initialize())
app.use(passport.session())
app.use('/', require('./controllers/auth_controller').router(passport))
app.use('/api/', require('./controllers/devices_controller')(passport))
app.use('/api/', require('./controllers/download_controller'))
app.use('/api/', require('./controllers/work_controller'))
app.use('/api/', require('./controllers/images_controller'))
app.listen port, ->
console.log("Server listening on port #{port}")