User Enumeration

Code not vulnerable to a timing attack
app.post('/login', (request, response) => {
  const user = getUser(request.params.username)

  // Calculate the password hash regardless of whether the username exists,
  // so the attacker cannot use timing attacks to detect which users exist
  // in the database.
  const passwordHash = user ? user.hashedPassword : ''

  bcrypt.compare(request.params.password, passwordHash, (error, matched) => {
    if (user && matched) {
      request.session.username = username
      self.redirect('/')
    }
    else {
      response.status(401)
    }
  })
})