diff --git a/Step.Database/Controllers/MachineController.cs b/Step.Database/Controllers/MachineController.cs
index b1d09b51..6898a9a3 100644
--- a/Step.Database/Controllers/MachineController.cs
+++ b/Step.Database/Controllers/MachineController.cs
@@ -37,7 +37,7 @@ namespace Step.Database.Controllers
.SingleOrDefault();
}
- public MachineModel Create( string uniqueId)
+ public MachineModel Create ( string uniqueId)
{
MachineModel machine= new MachineModel()
{
diff --git a/Step.Database/Controllers/MachinesUsersController.cs b/Step.Database/Controllers/MachinesUsersController.cs
index 2c469e46..2be52201 100644
--- a/Step.Database/Controllers/MachinesUsersController.cs
+++ b/Step.Database/Controllers/MachinesUsersController.cs
@@ -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
+ };
}
}
}
diff --git a/Step.Database/Controllers/UsersController.cs b/Step.Database/Controllers/UsersController.cs
index 3775fd16..c1c7d25b 100644
--- a/Step.Database/Controllers/UsersController.cs
+++ b/Step.Database/Controllers/UsersController.cs
@@ -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();
+ }
}
}
}
diff --git a/Step.Database/DatabaseContext.cs b/Step.Database/DatabaseContext.cs
index 6be06eb3..e10e45e0 100644
--- a/Step.Database/DatabaseContext.cs
+++ b/Step.Database/DatabaseContext.cs
@@ -107,7 +107,7 @@ namespace Step.Database
MachineConfig = machineController.Create(uniqueId);
using (UsersController usersController = new UsersController())
{
- usersController.CreateCmsDefaultUserIfNotExists();
+ usersController.CreateCmsDefaultUserIfNotExists(MachineConfig.MachineId);
}
}
}
diff --git a/Step.Model/DTOModels/DTORoleModel.cs b/Step.Model/DTOModels/DTORoleModel.cs
new file mode 100644
index 00000000..54f29811
--- /dev/null
+++ b/Step.Model/DTOModels/DTORoleModel.cs
@@ -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;
+ }
+}
diff --git a/Step.Model/DTOModels/DTOUserModel.cs b/Step.Model/DTOModels/DTOUserModel.cs
index 2ea571cd..ed06ee87 100644
--- a/Step.Model/DTOModels/DTOUserModel.cs
+++ b/Step.Model/DTOModels/DTOUserModel.cs
@@ -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; }
}
}
diff --git a/Step.Model/Step.Model.csproj b/Step.Model/Step.Model.csproj
index 201fd7a5..18359031 100644
--- a/Step.Model/Step.Model.csproj
+++ b/Step.Model/Step.Model.csproj
@@ -76,6 +76,7 @@
DTOLanguageModel.cs.d.ts
+
diff --git a/Step/Controllers/WebApi/UserController.cs b/Step/Controllers/WebApi/UserController.cs
index adf72a30..e90f621b 100644
--- a/Step/Controllers/WebApi/UserController.cs
+++ b/Step/Controllers/WebApi/UserController.cs
@@ -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();
}
}
}