Skip to content
This repository has been archived by the owner on Jan 22, 2021. It is now read-only.

Commit

Permalink
Add in express-jwt and jsonwebtoken for handling client sessions
Browse files Browse the repository at this point in the history
  • Loading branch information
stayradiated committed Feb 18, 2014
1 parent 72a45d1 commit 0be883b
Show file tree
Hide file tree
Showing 14 changed files with 57 additions and 99 deletions.
4 changes: 3 additions & 1 deletion package.json
Expand Up @@ -40,7 +40,9 @@
"redis": "0.10.x",
"hiredis": "0.1.x",
"log_": "0.0.2",
"urlsafe-base64": "0.0.2"
"urlsafe-base64": "0.0.2",
"express-jwt": "~0.1.2",
"jsonwebtoken": "~0.1.0"
},
"devDependencies": {
"supertest": "0.9.x",
Expand Down
34 changes: 0 additions & 34 deletions source/core/controllers/auth.coffee
Expand Up @@ -7,9 +7,6 @@ ERR_BAD_PASS = 'err_bad_pass'
ERR_BAD_EMAIL = 'err_bad_email'
ERR_BAD_NAME = 'err_bad_name'

TOKEN_LENGTH = 64


# -----------------------------------------------------------------------------
# Auth Controller
# -----------------------------------------------------------------------------
Expand Down Expand Up @@ -92,35 +89,4 @@ auth =
crypto.hash(pass).then (password) ->
user.update { password }

###
* Generate a password reset token for a user
*
* - email (string) : the email of the user
* > token
###

# Generate a reset password token for the user
createResetToken: (email) ->
Promise.all([
crypto.randomToken(TOKEN_LENGTH)
Users.search(email)
]).spread (token, user) ->
db.reset.create(user.id, token)


###
* Create a login token for a user
*
* - id (int) : The user id
* > token
####

createTicket: (id) ->
crypto.randomToken(TOKEN_LENGTH).then (token) ->
db.login.create(id, token).return(token)

useTicket: (token) ->
db.login.exists(ticket).then (exists) ->
console.log 'something...'

module.exports = auth
3 changes: 1 addition & 2 deletions source/core/controllers/database.coffee
Expand Up @@ -8,8 +8,7 @@ sequence = require('../utils/sequence')

# Tables
tables = [
'user', 'list', 'task', 'pref',
'ticket', 'reset', 'list_tasks',
'user', 'list', 'task', 'pref', 'list_tasks',
'time_task', 'time_list', 'time_pref'
].map (table) ->
require '../tables/' + table
Expand Down
1 change: 0 additions & 1 deletion source/core/models/user.coffee
Expand Up @@ -52,7 +52,6 @@ class User
db.user.destroy(@id, true).return(true)



# -----------------------------------------------------------------------------
# Users Controller
# -----------------------------------------------------------------------------
Expand Down
43 changes: 0 additions & 43 deletions source/core/tables/reset.coffee

This file was deleted.

4 changes: 4 additions & 0 deletions source/core/tables/user.coffee
Expand Up @@ -4,6 +4,10 @@ class User extends Table

table: 'user'
column: 'id'
columns: [
'id', 'name', 'email', 'password', 'pro',
'created_at', 'reset_password_token', 'reset_password_sent_at'
]

###
* Setup
Expand Down
4 changes: 2 additions & 2 deletions source/index.coffee
@@ -1,7 +1,7 @@
config = require('./config')
server = require('./server/index')
core = require('./core/index')
log = require('./shared/log')('Foreman', 'green')
log = require('log_')('Foreman', 'green')


# -----------------------------------------------------------------------------
Expand Down Expand Up @@ -33,4 +33,4 @@ startNitro = ->
# EXPORTS
# -----------------------------------------------------------------------------

module.exports = startNitro
module.exports = startNitro
2 changes: 1 addition & 1 deletion source/server/controllers/page.coffee
@@ -1,4 +1,4 @@
folder = './pages/'
folder = './source/server/pages/'
extension = '.html'

page = (name) ->
Expand Down
8 changes: 8 additions & 0 deletions source/server/controllers/router.coffee
@@ -1,7 +1,9 @@
express = require('express')
cors = require('cors')
log = require('log_')('Router', 'magenta')
jwt = require('express-jwt')

app = express()

app.configure ->

Expand All @@ -12,11 +14,16 @@ app.configure ->
# Allow Cross-Origin Resource Sharing
app.use cors()

# Protect api
app.use '/api', jwt(secret: 'secret')


# -----------------------------------------------------------------------------
# Routes
# -----------------------------------------------------------------------------

routes = [
'api'
'login'
'register'
'reset'
Expand All @@ -36,4 +43,5 @@ for route in routes
log 'POST', path.url
app[path.type] path.url, path.handler


module.exports = app
2 changes: 1 addition & 1 deletion source/server/index.coffee
@@ -1,4 +1,4 @@
log = require('log_')('Server', blue)
log = require('log_')('Server', 'blue')
router = require('./controllers/router')
socket = require('./controllers/socket')

Expand Down
2 changes: 1 addition & 1 deletion source/server/routes/404.coffee
@@ -1,4 +1,4 @@
page = require '../utils/page'
page = require('../controllers/page')

module.exports = [

Expand Down
24 changes: 24 additions & 0 deletions source/server/routes/api.coffee
@@ -0,0 +1,24 @@
jwt = require('jsonwebtoken')

# -----------------------------------------------------------------------------
# Login
# -----------------------------------------------------------------------------

api = (req, res) ->

console.log req.user

# ->
# user: <id>
# exp: <expiry timestamp>
# iat: <issued at timestamp>

res.end()

module.exports = [

type: 'post'
url: '/api/protected'
handler: api

]
13 changes: 9 additions & 4 deletions source/server/routes/login.coffee
@@ -1,5 +1,6 @@
core = require('../../core/api')
Log = require('log_')('Route -> Login', 'green')
jwt = require('jsonwebtoken')
log = require('log_')('Route -> Login', 'green')

# -----------------------------------------------------------------------------
# Login
Expand All @@ -11,14 +12,18 @@ login = (req, res) ->
email: req.body.email.toLowerCase()
password: req.body.password

console.log user

core.auth.login(user.email, user.password)
.then (id) ->
req.session.passport = user: id
res.send(id)

token = jwt.sign({ user: id }, 'secret', expiresInMinutes: 20)
res.send { token }

.catch (err) ->
log.warn err
res.status(401)
res.send(err)
.done()

module.exports = [

Expand Down
12 changes: 3 additions & 9 deletions source/server/routes/reset.coffee
@@ -1,12 +1,6 @@
Auth = require '../controllers/auth'
Users = require '../controllers/users'
Mail = require '../controllers/mail'
db = require '../controllers/query'
page = require '../utils/page'
Log = require '../utils/log'
config = require '../config'

log = Log 'Route -> Reset', 'yellow'
core = require('../../core/api')
config = require('../../config')
log = require('log_')('Route -> Reset', 'yellow')

# -----------------------------------------------------------------------------
# Reset Password
Expand Down

0 comments on commit 0be883b

Please sign in to comment.