TripleParity/docks-api

View on GitHub
routes/users.js

Summary

Maintainability
A
0 mins
Test Coverage
let express = require('express');
let router = new express.Router();
const UserManager = require('../lib/user_manager');
const db = require('../lib/db');

const userManager = new UserManager(db);

/**
 * GET list of users
 */
router.get('/', function(req, res, next) {
  userManager
    .getAllUsers()
    .then((users) => {
      let result = [];

      for (let i = 0; i < users.length; i++) {
        if ('username' in users[i]) {
          result.push({
            username: users[i].username,
            twofactorenabled: users[i].twofactorenabled,
            twofactorconfirmed: users[i].twofactorconfirmed,
          });
        }
      }

      res.status(200).send({data: result});
    })
    .catch((err) => {
      res.status(500).send(err);
    });
});

/**
 * Create new user
 */
router.post('/', function(req, res, next) {
  userManager
    .getUserByUsername(req.body.username)
    .then((user) => {
      if (user === null) {
        userManager
          .createUser(req.body.username, req.body.password)
          .then((newUser) => {
            console.log('Created user "' + newUser.username + '"');
            res.status(200).send();
          })
          .catch((err) => {
            console.err(err);
            res.status(500).send();
          });
      } else {
        console.log('Username "' + user.username + '" already exists');
        res.status(409).send();
      }
    })
    .catch((err) => {
      console.err(err);
      res.status(500).send();
    });
});

/**
 * UPDATE user 2FA status
 */
router.put('/:username/2fa', function(req, res, next) {
  userManager
    .updateTwoFactorStatus(req.params.username, req.body.status)
    .then((result) => {
      if (result === true) {
        res.status(200).send();
      } else {
        res.status(404).send();
      }
    })
    .catch((err) => {
      console.err(err);
      res.status(500).send();
    });
});

/**
 * GET user 2FA status
 */
router.get('/:username/2fa', function(req, res, next) {
  userManager
    .getUserByUsername()
    .then((user) => {
      let result = {};
      if (user !== null) {
        result.status = user.twofactorenabled;
      }
      res.status(200).send({data: result});
    })
    .catch((err) => {
      res.status(500).send(err);
    });
});

/**
 * Update user
 */
router.put('/:username', function(req, res, next) {
  // TODO(egeldenhuys): Check if user exists before more complicated updates

  if ('password' in req.body) {
    userManager
      .changePassword(req.params.username, req.body.password)
      .then((result) => {
        if (result === true) {
          res.status(200).send();
        } else {
          res.status(404).send();
        }
      })
      .catch((err) => {
        console.err(err);
        res.status(500).send();
      });
  }
});

/**
 * DELETE user
 */
router.delete('/:username', function(req, res, next) {
  userManager
    .removeUser(req.params.username)
    .then((result) => {
      if (result === true) {
        res.status(200).send();
      } else {
        res.status(404).send();
      }
    })
    .catch((err) => {
      console.err(err);
      res.status(500).send();
    });
});

module.exports = router;