Files
cms_thermo_active/Step.Database/Controllers/UsersController.cs
T
2018-06-19 12:54:49 +02:00

144 lines
4.9 KiB
C#

using Step.Model.DatabaseModels;
using Step.Model.DTOModels;
using System;
using System.Globalization;
using System.Linq;
using System.Web.Helpers;
using static Step.Config.ServerConfig;
using static Step.Model.Constants;
namespace Step.Database.Controllers
{
public class UsersController : IDisposable
{
private DatabaseContext dbCtx;
public UsersController()
{
// Initialize database context
dbCtx = new DatabaseContext();
}
public void Dispose()
{
// Clear database context
dbCtx.Dispose();
}
public void Create(string username, string password, string firstName, string lastName, CultureInfo language)
{
UserModel user = CreateUserModel(username, password, firstName, lastName, language);
// Add to database
dbCtx.Users.Add(user);
// Commit changes
dbCtx.SaveChanges();
}
public static UserModel CreateUserModel(int id, string username, string password, string firstName, string lastName, CultureInfo language)
{
// Create a new user model with params
return new UserModel()
{
UserId = id,
Username = username,
Password = Crypto.HashPassword(password),
FirstName = firstName,
LastName = lastName,
SecurityStamp = Guid.NewGuid().ToString(),
Language = language
};
}
public static UserModel CreateUserModel(string username, string password, string firstName, string lastName, CultureInfo language)
{
return CreateUserModel(0, username, password, firstName, lastName, language);
}
public DTOUserModel GetUserInfo(int userId)
{
// Find user by Id with Role object included
UserModel userDatabaseModel = dbCtx.Users.Where(u => u.UserId == userId).FirstOrDefault();
DTORoleModel roleModel = null;
// Find user role through machineUser table
using (MachinesUsersController machinesUsersControler = new MachinesUsersController())
{
roleModel = machinesUsersControler.GetUserRoleData(MachineConfig.MachineId, userId);
}
return new DTOUserModel() // Return DTOUserModel
{
Id = userDatabaseModel.UserId,
Username = userDatabaseModel.Username,
FirstName = userDatabaseModel.FirstName,
LastName = userDatabaseModel.LastName,
Language = userDatabaseModel.Language,
Role = roleModel
};
}
public UserModel FindById(int id)
{
// Find user by Id with Role object included
return dbCtx.Users.Where(u => u.UserId == id).FirstOrDefault();
}
private UserModel FindByUsername(string username)
{
// Find user by Id with Role object included
return dbCtx.Users.Where(u => u.Username == username).FirstOrDefault();
}
public UserModel FindByUsernameAndPassword(string username, string password)
{
// Find if username exists
UserModel user = FindByUsername(username);
if (user != null)
{
// Check if the passwords match
if (Crypto.VerifyHashedPassword(user.Password, password) != true)
{
return null;
}
}
return user;
}
public void CreateCmsDefaultUserIfNotExists(int machineId, string username, string password, string name, string lastname, CultureInfo info, ROLE_IDS roleId)
{
// Find if there is a cms standard user
UserModel user = FindByUsername(username);
if (user == null)
{
// If not exist add new user
user = dbCtx.Users.Add(
CreateUserModel(username, password, name, lastname, info)
);
// Commit changes
dbCtx.SaveChanges();
}
// Add user to local machine users if not exists
using (MachinesUsersController machinesUsersController = new MachinesUsersController())
{
MachineUserModel machineUser = machinesUsersController.FindByUserId(machineId, user.UserId);
if (machineUser == null)
machinesUsersController.Create(machineId, user.UserId, (int)roleId);
}
}
public void ChangeUserLanguage(int userId, CultureInfo newLanguage)
{
UserModel user = FindById(userId);
if (user != null)
{
user.Language = newLanguage;
dbCtx.SaveChanges();
}
}
}
}