Files
cms_thermo_active/Step/Controllers/WebApi/UserController.cs
T
Lucio Maranta fb908a8903 Refactor constants and functionality name
Added signalR override management
Fix head configuration
2018-03-15 14:46:14 +01:00

100 lines
3.9 KiB
C#

using Microsoft.AspNet.SignalR;
using Step.Controllers.SignalR;
using Step.Database.Controllers;
using Step.Model.DatabaseModels;
using System;
using System.Globalization;
using System.Linq;
using System.Security.Claims;
using System.Web.Http;
using static Step.Model.Constants;
using static Step.Utils.LanguageController;
namespace Step.Controllers.WebApi
{
[RoutePrefix("api/user")]
public class UserController : ApiController
{
[Route("logout"), HttpPost]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.WRITE)]
public IHttpActionResult Logout()
{
var identity = User.Identity as ClaimsIdentity;
// Find user id from the bearer token
var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).SingleOrDefault();
if (userId == null)
return Unauthorized();
// Find machine id from the bearer token
var machineId = identity.Claims.Where(c => c.Type == MACHINE_ID_KEY).SingleOrDefault();
if (machineId == null)
return Unauthorized();
using (SessionsController sessionsController = new SessionsController())
{
// Delete all the user session on the machine
sessionsController.DeleteSessionsByUserAndMachineId(Convert.ToInt32(machineId.Value), Convert.ToInt32(userId.Value));
}
// Send to the clients the id of the disconnected user
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
context.Clients.All.logout(new { id = userId.Value });
return Ok();
}
[Route("register"), HttpPost]
public IHttpActionResult CreateUser(UserModel model)
{
UsersController users = new UsersController();
users.Create(model.Username, model.Password, model.FirstName, model.LastName, model.Language);
return Ok();
}
[Route("info"), HttpGet]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.READ)]
public IHttpActionResult UserInfo()
{
var identity = User.Identity as ClaimsIdentity;
// Find user id from the bearer token
var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).SingleOrDefault();
if (userId == null)
return Unauthorized();
using (UsersController usersController = new UsersController())
{
return Ok(usersController.GetUserInfo(Convert.ToInt32(userId.Value)));
}
}
[Route("language"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, 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();
// Find if language is Available in the server directory
if (!LanguageIsAvailable(newLanguage))
return NotFound();
using (UsersController usersController = new UsersController())
{
// Update database with new language
usersController.ChangeUserLanguage(Convert.ToInt32(userId.Value), CultureInfo.CreateSpecificCulture(newLanguage));
return Ok();
}
}
}
}