using System; using System.Globalization; using System.Linq; using System.Web.Helpers; using Step.Model.DatabaseModels; using Step.Model.DTOModels; 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, int roleId, CultureInfo language) { UserModel user = CreateUserModel(username, password, firstName, lastName, roleId, 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, int roleId, CultureInfo language) { // Create a new user model with params return new UserModel() { UserId = id, Username = username, Password = Crypto.HashPassword(password), FirstName = firstName, LastName = lastName, RoleId = roleId, SecurityStamp = Guid.NewGuid().ToString(), Language = language }; } public static UserModel CreateUserModel(string username, string password, string firstName, string lastName, int roleId, CultureInfo language) { return CreateUserModel(0, username, password, firstName, lastName, roleId, language); } public DTOUserModel GetUserInfo(int id) { // Find user by Id with Role object included UserModel userDatabaseModel = dbCtx.Users.Include("Role").Where(u => u.UserId == id).FirstOrDefault(); return new DTOUserModel() { Id = userDatabaseModel.UserId, Username = userDatabaseModel.Username, FirstName = userDatabaseModel.FirstName, LastName = userDatabaseModel.LastName, Language = userDatabaseModel.Language, RoleId = userDatabaseModel.RoleId }; } public UserModel FindById(int id) { // Find user by Id with Role object included return dbCtx.Users.Include("Role").Where(u => u.UserId == id).FirstOrDefault(); } private UserModel FindByUsername(string username) { // Find user by Id with Role object included return dbCtx.Users.Include("Role").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; } } }