* Refactor and fix machine self-registration into db

+ Added change language API
+ Added Role to user info
This commit is contained in:
Lucio Maranta
2018-01-17 12:35:34 +01:00
parent fa485d902b
commit 53223b0bef
8 changed files with 123 additions and 19 deletions
@@ -37,7 +37,7 @@ namespace Step.Database.Controllers
.SingleOrDefault();
}
public MachineModel Create( string uniqueId)
public MachineModel Create ( string uniqueId)
{
MachineModel machine= new MachineModel()
{
@@ -1,4 +1,5 @@
using Step.Model.DatabaseModels;
using Step.Model.DTOModels;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -22,15 +23,41 @@ namespace Step.Database.Controllers
// Clear database context
dbCtx.Dispose();
}
public MachinesUsersModel FindByUserId(int machineId, int userId)
{
return dbCtx
.MachinesUsers
.Include("Role")
.Include("Role") // TODO Add machine and user info?
.Where(x => x.MachineId == machineId && x.UserId == userId)
.FirstOrDefault();
}
public MachinesUsersModel Create(int machineId, int userId, int roleId)
{
MachinesUsersModel machine = new MachinesUsersModel() { MachineId = machineId, UserId = userId, RoleId = roleId };
dbCtx.MachinesUsers.Add(
machine
);
dbCtx.SaveChanges();
return machine;
}
public DTORoleModel GetUserRole(int machineId, int userId)
{
RoleModel role = dbCtx
.MachinesUsers
.Include("Role")
.Where(x => x.MachineId == machineId && x.UserId == userId)
.FirstOrDefault().Role;
return new DTORoleModel()
{
Id = role.RoleId,
Name = role.Name
};
}
}
}
+37 -11
View File
@@ -5,6 +5,7 @@ using System.Linq;
using System.Web.Helpers;
using Step.Model.DatabaseModels;
using Step.Model.DTOModels;
using static Step.Config.ServerConfig;
namespace Step.Database.Controllers
{
@@ -52,10 +53,16 @@ namespace Step.Database.Controllers
return CreateUserModel(0, username, password, firstName, lastName, language);
}
public DTOUserModel GetUserInfo(int id)
public DTOUserModel GetUserInfo(int userId)
{
// Find user by Id with Role object included
UserModel userDatabaseModel = dbCtx.Users.Where(u => u.UserId == id).FirstOrDefault();
UserModel userDatabaseModel = dbCtx.Users.Where(u => u.UserId == userId).FirstOrDefault();
DTORoleModel roleModel = null;
using (MachinesUsersController machinesUsersControler = new MachinesUsersController())
{
roleModel = machinesUsersControler.GetUserRole(MachineConfig.MachineId, userId);
}
return new DTOUserModel()
{
@@ -64,6 +71,7 @@ namespace Step.Database.Controllers
FirstName = userDatabaseModel.FirstName,
LastName = userDatabaseModel.LastName,
Language = userDatabaseModel.Language,
Role = roleModel
};
}
@@ -96,19 +104,37 @@ namespace Step.Database.Controllers
return user;
}
public void CreateCmsDefaultUserIfNotExists()
public void CreateCmsDefaultUserIfNotExists(int machineId)
{
dbCtx.Users.AddOrUpdate
(
CreateUserModel(1, "cms", "cms", "cms", "cms", new CultureInfo("en"))
UserModel user = FindByUsername("cms");
if (user == null)
{
user = dbCtx.Users.Add(
CreateUserModel("cms", "cms", "cms", "cms", new CultureInfo("en"))
);
dbCtx.MachinesUsers.AddOrUpdate(
new MachinesUsersModel() { MachineId = 1, UserId = 1, RoleId = 1 }
);
// Commit changes
dbCtx.SaveChanges();
}
// Commit changes
dbCtx.SaveChanges();
using (MachinesUsersController machineUserController = new MachinesUsersController())
{
MachinesUsersModel machineUser = machineUserController.FindByUserId(machineId, user.UserId);
if (machineUser == null)
machineUserController.Create(machineId, user.UserId, 1);
}
}
public void ChangeUserLanguage(int userId, CultureInfo newLanguage)
{
UserModel user = FindById(userId);
if(user != null)
{
user.Language = newLanguage;
dbCtx.SaveChanges();
}
}
}
}
+1 -1
View File
@@ -107,7 +107,7 @@ namespace Step.Database
MachineConfig = machineController.Create(uniqueId);
using (UsersController usersController = new UsersController())
{
usersController.CreateCmsDefaultUserIfNotExists();
usersController.CreateCmsDefaultUserIfNotExists(MachineConfig.MachineId);
}
}
}
+14
View File
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Step.Model.DTOModels
{
public class DTORoleModel
{
public int Id;
public string Name;
}
}
+1 -1
View File
@@ -14,6 +14,6 @@ namespace Step.Model.DTOModels
public string FirstName { get; set; }
public string LastName { get; set; }
public CultureInfo Language { get; set; }
public int RoleId { get; set; }
public DTORoleModel Role { get; set; }
}
}
+1
View File
@@ -76,6 +76,7 @@
<LastGenOutput>DTOLanguageModel.cs.d.ts</LastGenOutput>
</Compile>
<Compile Include="DTOModels\DTONcGenericDataModel.cs" />
<Compile Include="DTOModels\DTORoleModel.cs" />
<Compile Include="DTOModels\DTOStartupConfigurationModel.cs" />
<Compile Include="DTOModels\DTOUserModel.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
+38 -2
View File
@@ -5,6 +5,9 @@ using System;
using Step.Model.DatabaseModels;
using System.Security.Claims;
using System.Linq;
using static Step.Utils.LanguageController;
using Step.Model.DTOModels;
using System.Globalization;
namespace Step.Controllers.WebApi
{
@@ -29,9 +32,42 @@ namespace Step.Controllers.WebApi
if (userId == null)
return Unauthorized();
using (UsersController user = new UsersController())
using (UsersController userController = new UsersController())
{
return Ok(user.GetUserInfo(Convert.ToInt32(userId.Value)));
return Ok(userController.GetUserInfo(Convert.ToInt32(userId.Value)));
}
}
[Route("language"), HttpPut]
[WebApiAuthorize(FunctionAccess = "userData", Action = ACTIONS.READ)]
public IHttpActionResult PutUserLanguage([FromBody] dynamic user)
{
// If no body return 400
if (user == null)
return BadRequest();
// Validate user id
var identity = User.Identity as ClaimsIdentity;
var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).SingleOrDefault();
if (userId == null)
return Unauthorized();
// Parse body data and validate language
var newLanguage = (string)user.language;
if (newLanguage == null || !IsValidLanguage(newLanguage))
return BadRequest();
if (!LanguageIsAvailable(newLanguage))
return NotFound();
using (UsersController userController = new UsersController())
{
userController.ChangeUserLanguage(Convert.ToInt32(userId.Value), CultureInfo.CreateSpecificCulture(newLanguage));
return Ok();
}
}
}