using System.Web.Http; using static Step.Utils.Constants; using Step.Database.Controllers; 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 { [RoutePrefix("api/user")] public class UserController : ApiController { [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 = "userData", Action = ACTIONS.READ)] public IHttpActionResult UserInfo() { var identity = User.Identity as ClaimsIdentity; var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).SingleOrDefault(); if (userId == null) return Unauthorized(); using (UsersController userController = new UsersController()) { 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(); } } } }