ChatHistory behaved like controller already, renamed.
This commit is contained in:
		@@ -8,19 +8,23 @@ const getAllHistory = (req, res) => {
 | 
			
		||||
 | 
			
		||||
  return history(page, limit)
 | 
			
		||||
    .then(messages => res.json(messages))
 | 
			
		||||
    .catch(error =>  res.status(500).json({
 | 
			
		||||
      message: error.message,
 | 
			
		||||
      success: false
 | 
			
		||||
    }));
 | 
			
		||||
    .catch(error =>
 | 
			
		||||
      res.status(500).json({
 | 
			
		||||
        message: error.message,
 | 
			
		||||
        success: false
 | 
			
		||||
      })
 | 
			
		||||
    );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const deleteHistory = (req, res) => {
 | 
			
		||||
  return clearHistory()
 | 
			
		||||
    .then(message => res.json(message))
 | 
			
		||||
    .catch(error => res.status(500).json({
 | 
			
		||||
      message: error.message,
 | 
			
		||||
      success: false
 | 
			
		||||
    }));
 | 
			
		||||
    .catch(error =>
 | 
			
		||||
      res.status(500).json({
 | 
			
		||||
        message: error.message,
 | 
			
		||||
        success: false
 | 
			
		||||
      })
 | 
			
		||||
    );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
							
								
								
									
										49
									
								
								api/controllers/userController.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								api/controllers/userController.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const userRepository = require(path.join(__dirname, "../user"));
 | 
			
		||||
 | 
			
		||||
function register(req, res, next) {
 | 
			
		||||
  const { username, password } = req.body;
 | 
			
		||||
 | 
			
		||||
  return userRepository
 | 
			
		||||
    .register(username, password)
 | 
			
		||||
    .then(user => userRepository.login(req, user))
 | 
			
		||||
    .then(_ =>
 | 
			
		||||
      res.send({
 | 
			
		||||
        messsage: `Bruker registrert. Velkommen ${username}`,
 | 
			
		||||
        success: true
 | 
			
		||||
      })
 | 
			
		||||
    )
 | 
			
		||||
    .catch(error => {
 | 
			
		||||
      const { statusCode, message } = error;
 | 
			
		||||
 | 
			
		||||
      return res.status(statusCode || 500).send({
 | 
			
		||||
        message: message || "Unable to sign in with given username and passowrd",
 | 
			
		||||
        success: false
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const login = (req, res, next) => {
 | 
			
		||||
  return userRepository
 | 
			
		||||
    .authenticate(req)
 | 
			
		||||
    .then(user => userRepository.login(req, user))
 | 
			
		||||
    .then(user => {
 | 
			
		||||
      res.send({
 | 
			
		||||
        message: `Velkommen ${user.username}`,
 | 
			
		||||
        success: true
 | 
			
		||||
      });
 | 
			
		||||
    })
 | 
			
		||||
    .catch(error => {
 | 
			
		||||
      const { statusCode, message } = error;
 | 
			
		||||
 | 
			
		||||
      return res.status(statusCode || 500).send({
 | 
			
		||||
        message: message || "Unable to sign in with given username and passowrd",
 | 
			
		||||
        success: false
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  register,
 | 
			
		||||
  login
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										103
									
								
								api/user.js
									
									
									
									
									
								
							
							
						
						
									
										103
									
								
								api/user.js
									
									
									
									
									
								
							@@ -1,42 +1,86 @@
 | 
			
		||||
const passport = require("passport");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const User = require(path.join(__dirname, "/schemas/User"));
 | 
			
		||||
const router = require("express").Router();
 | 
			
		||||
 | 
			
		||||
const register = (req, res, next) => {
 | 
			
		||||
  User.register(
 | 
			
		||||
    new User({ username: req.body.username }),
 | 
			
		||||
    req.body.password,
 | 
			
		||||
    function(err) {
 | 
			
		||||
      if (err) {
 | 
			
		||||
        if (err.name == "UserExistsError")
 | 
			
		||||
          res.status(409).send({ success: false, message: err.message })
 | 
			
		||||
        else if (err.name == "MissingUsernameError" || err.name == "MissingPasswordError")
 | 
			
		||||
          res.status(400).send({ success: false, message: err.message })
 | 
			
		||||
        return next(err);
 | 
			
		||||
      }
 | 
			
		||||
class UserExistsError extends Error {
 | 
			
		||||
  constructor(message = "Username already exists.") {
 | 
			
		||||
    super(message);
 | 
			
		||||
    this.name = "UserExists";
 | 
			
		||||
    this.statusCode = 409;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
      return res.status(200).send({ message: "Bruker registrert. Velkommen " + req.body.username, success: true })
 | 
			
		||||
     }
 | 
			
		||||
  );
 | 
			
		||||
class MissingUsernameError extends Error {
 | 
			
		||||
  constructor(message = "No username given.") {
 | 
			
		||||
    super(message);
 | 
			
		||||
    this.name = "MissingUsernameError";
 | 
			
		||||
    this.statusCode = 400;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class MissingPasswordError extends Error {
 | 
			
		||||
  constructor(message = "No password given.") {
 | 
			
		||||
    super(message);
 | 
			
		||||
    this.name = "MissingPasswordError";
 | 
			
		||||
    this.statusCode = 400;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class IncorrectUserCredentialsError extends Error {
 | 
			
		||||
  constructor(message = "Incorrect username or password") {
 | 
			
		||||
    super(message);
 | 
			
		||||
    this.name = "IncorrectUserCredentialsError";
 | 
			
		||||
    this.statusCode = 404;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function userAuthenticationErrorHandler(err) {
 | 
			
		||||
  if (err.name == "UserExistsError") {
 | 
			
		||||
    throw new UserExistsError(err.message);
 | 
			
		||||
  } else if (err.name == "MissingUsernameError") {
 | 
			
		||||
    throw new MissingUsernameError(err.message);
 | 
			
		||||
  } else if (err.name == "MissingPasswordError") {
 | 
			
		||||
    throw new MissingPasswordError(err.message);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  throw err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const register = (username, password) => {
 | 
			
		||||
  return User.register(new User({ username: username }), password).catch(userAuthenticationErrorHandler);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const login = (req, res, next) => {
 | 
			
		||||
  passport.authenticate("local", function(err, user, info) {
 | 
			
		||||
    if (err) {
 | 
			
		||||
      if (err.name == "MissingUsernameError" || err.name == "MissingPasswordError")
 | 
			
		||||
        return res.status(400).send({ message: err.message, success: false })
 | 
			
		||||
      return next(err);
 | 
			
		||||
    }
 | 
			
		||||
const authenticate = req => {
 | 
			
		||||
  return new Promise((resolve, reject) => {
 | 
			
		||||
    const { username, password } = req.body;
 | 
			
		||||
 | 
			
		||||
    if (!user) return res.status(404).send({ message: "Incorrect username or password", success: false })
 | 
			
		||||
    if (username == undefined) throw new MissingUsernameError();
 | 
			
		||||
    if (password == undefined) throw new MissingPasswordError();
 | 
			
		||||
 | 
			
		||||
    req.logIn(user, (err) => {
 | 
			
		||||
      if (err) { return next(err) }
 | 
			
		||||
    passport.authenticate("local", function(err, user, info) {
 | 
			
		||||
      if (err) {
 | 
			
		||||
        reject(err);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return res.status(200).send({ message: "Velkommen " + user.username, success: true })
 | 
			
		||||
    })
 | 
			
		||||
  })(req, res, next);
 | 
			
		||||
      if (!user) {
 | 
			
		||||
        reject(new IncorrectUserCredentialsError());
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      resolve(user);
 | 
			
		||||
    })(req);
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const login = (req, user) => {
 | 
			
		||||
  return new Promise((resolve, reject) => {
 | 
			
		||||
    req.logIn(user, err => {
 | 
			
		||||
      if (err) {
 | 
			
		||||
        reject(err);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      resolve(user);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const logout = (req, res) => {
 | 
			
		||||
@@ -46,6 +90,7 @@ const logout = (req, res) => {
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  register,
 | 
			
		||||
  authenticate,
 | 
			
		||||
  login,
 | 
			
		||||
  logout
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user