Skip to content

Commit

Permalink
Refactor auth*
Browse files Browse the repository at this point in the history
  • Loading branch information
geovanisouza92 committed Jun 18, 2017
1 parent 8205a2a commit c42faa3
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 19 deletions.
17 changes: 15 additions & 2 deletions aws/api.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,28 @@
'use strict'

const adapter = require('aws-serverless-express')
const middleware = require('aws-serverless-express/middleware')
const apiFactory = require('../lib/api')
const repoFactory = require('./dynamodb_repo')

// Build a concrete repository (DynamoDB as storage)
const repo = repoFactory()

const middlewares = [
middleware.eventContext(),
/* get userId from event */ (req, res, next) => {
try {
req.userId = req.apiGateway.event.requestContext.authorizer.sub
} catch (err) {
req.userId = null
console.warn(err.stack || err)
}
next()
}
]

// Create a server for a API instance
const userIdGetter = req => req.requestContext.authorizer.claims.sub
const server = adapter.createServer(apiFactory(repo, userIdGetter))
const server = adapter.createServer(apiFactory(repo, middlewares))

module.exports.handler = (event, context, callback) => {
// NOTE: aws-serverless-express uses context.succeed, but AWS already
Expand Down
13 changes: 8 additions & 5 deletions aws/authorization.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,12 @@ module.exports.handler = (event, context, callback) => {
const token = event.authorizationToken && event.authorizationToken.split(' ')[1]

// Verify token
if (authorization.isValid(token)) {
callback(null, generatePolicy('user', 'Allow', event.methodArn))
} else {
callback(null, generatePolicy('user', 'Deny', event.methodArn))
}
const effect = authorization.isValid(token)
? 'Allow'
: 'Deny'

const policy = generatePolicy('user', effect, event.methodArn)
policy.context = authorization.getSession(token)

callback(null, policy)
}
14 changes: 2 additions & 12 deletions lib/api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,10 @@
const express = require('express')
const bodyParser = require('body-parser')

function apiFactory (repo, userIdGetter) {
function apiFactory (repo, middlewares) {
const api = express()
api.use(bodyParser.json())
api.use(/* get userId from request */ (req, res, next) => {
var userId = null
try {
userId = userIdGetter(req)
} catch (err) {
console.warn(err.stack || err)
}

req.userId = userId
next()
})
middlewares.forEach(m => api.use(m))

// Create
api.post('/n/', (req, res) => {
Expand Down
5 changes: 5 additions & 0 deletions lib/auth/authorization.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,8 @@ module.exports.isValid = token => {
return false
}
}

module.exports.getSession = token => {
if (!token) return {}
return jwt.decode(token)
}

0 comments on commit c42faa3

Please sign in to comment.