/
server.coffee
98 lines (88 loc) · 3.31 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
#!/usr/bin/env coffee
####################################
# Coffeescript-naked (Barry Teoh / @nolim1t on github/twitter)
####################################
# DESCRIPTION
# This is a boilerplate coffeescript server to save time creating backends because
# sometimes parse or stackmob just does not cut it!
#
# Or you want to create some processing logic before the mobile client is served.
#
####################################
# Lets set up the port (on heroku or foreman it looks for an environment variable because these web servers are abstracted out)
port = process.env.PORT || 3000
# Need express and express-validator (you should always sanitize any inputs)
express = require 'express'
expressValidator = require 'express-validator'
expresshelper = require './server_helper.coffee'
# awesomesauce http framework
request = require 'request'
# Generating guids
uuid = require 'node-uuid'
bodyParser = require 'body-parser'
cookieParser = require 'cookie-parser'
logger = require 'morgan'
session = require 'express-session'
serveStatic = require 'serve-static'
# Lets start the show
app = express()
app.use logger('dev')
app.use bodyParser.urlencoded({ extended: true })
app.use bodyParser.json()
app.use cookieParser()
# Load the middleware (server_helper.coffee)
# Pro-tip: You can build out a fully dynamic API from this
app.use expresshelper.headermiddleware
app.use expressValidator
app.set 'view engine', 'jade'
app.set 'views', './views'
# Directory called static
app.use express.static(__dirname + '/static')
app.use session({ secret: "Please change this secret", resave: true, saveUninitialized: true})
app.use '/api/1', require('./sampleroutes.coffee')(express.Router()) # Example on how to use the routing
##########
# If you got any other URL handlers you can put it here.
# Just to get you started, I've put in a default
##########
app.get '/', (req, res) ->
error_code = 200
res.render('default', {title: "nothing to see here"})
# foursquare callback
app.get '/your-4sq-callback-here', (req, res) ->
if req.query != undefined
if req.query['code'] != undefined
foursquare.auth.accesstoken req.query['code'], (cb) ->
if cb.status == 'ok'
mongo.dbhandler (db) ->
collection = db.collection 'users'
query = {foursquareid: cb.id}
collection.findOne query, (qerr, qfound) ->
if not qerr
if qfound == undefined
# No record! Create lets make one
record = {}
record.foursquareid = cb.id
record.accesstoken = cb.access_token
record.profile = cb.profile.contact
collection.save record, (saveerr, saverecord) ->
if not saveerr
res.render('allset', {title: "You're all set!", alreadyConnected: false})
else
res.send('Something broke', 500)
else
collection.update query, {accesstoken: cb.access_token, foursquareid: cb.id, profile: cb.profile.contact}, (errupdate, updatedprofile) -> console.log updatedprofile
res.render('allset', {title: "You're all set!", alreadyConnected: true})
else
res.send('Something broke', 500)
else
res.send('Incorrect parameters', 400)
else
res.send('Invalid', 400)
# General 404 Not Found
app.get '*', (req, res) ->
error_code = 404
res.send('Not found', error_code)
########
# Fin
console.log 'Started server on port ' + port
app.listen port