forked from unrealsolver/gomel-stud-contest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.coffee
76 lines (63 loc) · 1.71 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
koa = require 'koa'
serve = require 'koa-static'
koaBody = do require 'koa-bodyparser'
passport = require 'koa-passport'
json = require 'koa-json'
validate = require 'koa-validate'
path = require 'path'
config = require 'config'
router = require './routes'
views = require 'koa-views'
http = require 'http'
socket = require 'socket.io'
cookie = require 'cookie'
session = require 'koa-session'
db = require './database'
app = koa()
httpServer = http.createServer app.callback()
io = socket httpServer
app.use json()
app.use koaBody
app.use validate()
app.keys = ['contest']
app.use(views path.join(__dirname, '/views') , {
extension: 'jade'
})
db.createConnection()
require './auth'
app.use passport.initialize()
app.use passport.session()
app.use (next) ->
try
yield next
catch error
console.log error
this.status = error.status || 500
yield this.render 'error', {
errorStatus: error.status,
errorMessage: error.message
}
app.use (next) ->
this.state.user = this.req.user
yield next
router(app)
app.use serve(path.join __dirname, '/dist' )
io.use (socket, next) ->
handShakeData = socket.request
if handShakeData.headers.cookie && handShakeData.headers.cookie.indexOf('koa:sess') > -1
cookieData = cookie.parse(handShakeData.headers.cookie)['koa:sess']
parsedUser = JSON.parse(new Buffer(cookieData, 'base64'))
if parsedUser.passport.user is undefined
next new Error('Not authorized')
return
handShakeData.user = parsedUser.passport.user
next()
else
next new Error('Not authorized')
require('./socket')(io)
app.use (next) ->
yield this.render 'error', {
errorStatus: 404,
errorMessage: 'The page not found'
}
httpServer.listen config.get('port')