I have been programming a middleware for my small application that verifies if an authentication header is present and verifies the HMAC present in it. I would like to know what I could optimize in this set of code. Any tips are appreciated.
const validator = require('validator'),
crypto = require('crypto'),
data = require('../database.js'),
error = require('../utils/error.js')
const auth = function() {
return function(req, res, next) {
if(!req.authenticationHeaderExists) {
res.json(error.INVALID_AUTH_HEADER)
return
}
const authHeader = req.get('authentication').split(':')
const user = authHeader[0]
const userProvidedDigest = authHeader[1]
if(!validator.isAlphanumeric(user)) {
res.json(error.INVALID_USER)
return
}
data.findOne({ user: user }, function processResults(err, docs) {
if(err) {
req.log.error(err)
res.json(error.AN_ERROR_OCCURRED)
return
}
if(docs == null) {
res.json(error.USER_NOT_FOUND)
return
}
const date = new Date()
const formattedDate = date.getUTCFullYear().toString() + date.getUTCMonth().toString() + date.getUTCDate().toString() + date.getUTCHours().toString() + date.getUTCMinutes().toString()
const serverGeneratedDigest = crypto.createHmac('sha256', docs.secretkey).update(formattedDate + req.method + req.url).digest('hex').toString('utf8')
if(userProvidedDigest != serverGeneratedDigest) {
res.json(error.INVALID_DIGEST)
return
}
next()
})
}
}
module.exports = auth