using System.Web.Mvc; using Neo.Legitimate.UserConsole.Models; using System; using System.Collections.Generic; using Pilotfish.Afx.Admin.Security; using Pilotfish.Afx.Utilities; using Pilotfish.Afx.Common; using Pilotfish.Afx.Admin.Wf; using Pilotfish.Afx.Mvc; using Neo.Legitimate.Common; using System.Linq; using Neo.Legitimate.Common.Helpers; using Pilotfish.Afx.Services.Reports; using Neo.Legitimate.UserConsole.Controllers; namespace Neo.Legitimate.UserConsole.Controllers { [Authorize] public class UserConsoleController : Neo.Legitimate.Common.ControllerBase { private const long _entityID = 1; #region Action Results #region Default public ActionResult Default(long UserID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var model = new DefaultModel { UserID = UserID, User = database.GetUser(UserID, Profile.UserID) }; if (model.User != null) { model.Name = model.User.KnownAs; model.Email = model.User.Email; } ViewBag.Controller = "User Details"; ViewBag.Page = "User Details"; return View("Default", model); } #endregion #region Settings public ActionResult Settings(long UserID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var model = new SettingsModel { UserID = UserID, Settings = database.GetUserSettings(UserID) }; if (UserID > 0) { var user = database.GetUser(UserID, Profile.UserID); if (user != null) { model.Name = user.KnownAs; model.Email = user.Email; } } ViewBag.Controller = "Settings"; ViewBag.Page = "Settings"; return View("Settings", model); } #endregion #region Roles public ActionResult Roles(long UserID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var roles = database.GetRoles(); var userRoles = database.GetUserRoles(UserID); var roleAndUserCombined = new List(); foreach (var role in roles) { var isSelected = false; foreach (var userRole in userRoles) { if (userRole.RoleID == role.RoleID) { isSelected = true; } } roleAndUserCombined.Add(new RoleAndUserCombined() { Role = role, IsSelected = isSelected }); } var model = new RolesModel { UserID = UserID, UserRoles = roleAndUserCombined }; if (UserID > 0) { var user = database.GetUser(UserID, Profile.UserID); if (user != null) { model.Name = user.KnownAs; model.Email = user.Email; } } ViewBag.Controller = "Roles"; ViewBag.Page = "Roles"; return View("Roles", model); } #endregion #region Security public ActionResult Security(long UserID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var model = new SecurityModel { UserID = UserID }; if (UserID > 0) { var user = database.GetUser(UserID, Profile.UserID); if (user != null) { model.Name = user.KnownAs; model.Email = user.Email; } } ViewBag.Controller = "Security"; ViewBag.Page = "Security"; return View("Security", model); } #endregion #region Buddies public ActionResult Buddies(long UserID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var securityDatabase = new SecurityDatabase(); var workflowDatabase = new AfxAdminWorkflowDatabase(); var model = new BuddiesModel { UserID = UserID, Buddies = securityDatabase.GetUserWorkflowBuddies(UserID), Users = securityDatabase.GetActiveUsers(Profile.UserID), Workflows = workflowDatabase.GetWorkflows() }; if (UserID > 0) { var user = securityDatabase.GetUser(UserID, Profile.UserID); if (user != null) { model.Name = user.KnownAs; model.Email = user.Email; } } ViewBag.Controller = "Buddies"; ViewBag.Page = "Buddies"; return View("Buddies", model); } #endregion #region Activity public ActionResult Activity(long UserID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var securityDatabase = new SecurityDatabase(); var model = new ActivityModel() { UserID = Profile.UserID, SelectedUserID = UserID }; if (UserID > 0) { var user = securityDatabase.GetUser(UserID, Profile.UserID); if (user != null) { model.Name = user.KnownAs; model.Email = user.Email; } } ViewBag.Controller = "Activity"; ViewBag.Page = "Activity"; return View("Activity", model); } #endregion #endregion #region JSON endpoints #region Save [HttpPost] public JsonResult Save(User value) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var errorMessage = ""; try { database.SaveUser(value.UserID, value.KnownAs, value.LastName, value.FirstName, value.Email, value.Email, Profile.UserID); } catch (Exception ex) { errorMessage = ExceptionHelper.GetInnermostMessage(ex); } var results = new { ErrorMessage = errorMessage }; return Json(results, JsonSerializerOptions.None); } #endregion #region ActivateUser [HttpPost] public JsonResult ActivateUser(User value) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var errorMessage = ""; try { database.UpdateUserStatus(Profile.UserID, "", value.UserID, 1 /*Active*/); } catch (Exception ex) { errorMessage = ExceptionHelper.GetInnermostMessage(ex); } var results = new { ErrorMessage = errorMessage }; return Json(results, JsonSerializerOptions.None); } #endregion #region DeActivateUser [HttpPost] public JsonResult DeActivateUser(User value) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var errorMessage = ""; try { database.UpdateUserStatus(Profile.UserID, "", value.UserID, 2 /*Inactive*/); } catch (Exception ex) { errorMessage = ExceptionHelper.GetInnermostMessage(ex); } var results = new { ErrorMessage = errorMessage }; return Json(results, JsonSerializerOptions.None); } #endregion #region SaveSettings [HttpPost] public JsonResult SaveSettings(List settings, long userID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var errorMessage = ""; try { database.SaveUserSetting(settings, userID, Profile.UserID); } catch (Exception ex) { errorMessage = ExceptionHelper.GetInnermostMessage(ex); } var results = new { ErrorMessage = errorMessage }; return Json(results, JsonSerializerOptions.None); } #endregion #region SaveUserRoles [HttpPost] public JsonResult SaveUserRoles(List userRoles, long userID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var errorMessage = ""; try { var roleIDs = ""; foreach (var ur in userRoles) { if (ur.IsSelected) { roleIDs += ur.Role.RoleID + ","; } } if (roleIDs.Length > 0) { roleIDs = roleIDs.Substring(0, roleIDs.Length - 1); } database.SaveUserRoles(userID, roleIDs, Profile.UserID); } catch (Exception ex) { errorMessage = ExceptionHelper.GetInnermostMessage(ex); } var results = new { ErrorMessage = errorMessage }; return Json(results, JsonSerializerOptions.None); } #endregion #region SaveFingerprint [HttpPost] public JsonResult SaveFingerprint(string fingerPrint, long userID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var errorMessage = ""; try { var fingerPrintBytes = StringUtilities.HexStringToByteArray(fingerPrint); database.SaveUserFingerPrint(fingerPrintBytes, userID, Profile.UserID); } catch (Exception ex) { errorMessage = ExceptionHelper.GetInnermostMessage(ex); } var results = new { ErrorMessage = errorMessage }; return Json(results, JsonSerializerOptions.None); } #endregion #region SaveBuddy [HttpPost] public JsonResult SaveBuddy(long workflowID, long buddyUserID, long userID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var errorMessage = ""; try { database.SaveUserWorkflowBuddy(workflowID, userID, buddyUserID, Profile.UserID); } catch (Exception ex) { errorMessage = ExceptionHelper.GetInnermostMessage(ex); } var results = new { ErrorMessage = errorMessage }; return Json(results, JsonSerializerOptions.None); } #endregion #region DeleteBuddy [HttpPost] public JsonResult DeleteBuddy(long workflowID, long buddyUserID, long userID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.Securable.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var errorMessage = ""; try { database.DeleteUserWorkflowBuddy(workflowID, userID, buddyUserID, Profile.UserID); } catch (Exception ex) { errorMessage = ExceptionHelper.GetInnermostMessage(ex); } var results = new { ErrorMessage = errorMessage }; return Json(results, JsonSerializerOptions.None); } #endregion #endregion } }