using System.Web.Mvc; using Neo.LegitimateLicences.UserConsole.Models; using System; using System.Collections.Generic; using Neo.Afx.Admin.Security; using Neo.Afx.Utilities; using Neo.Afx.Common; using Neo.Afx.Admin.Wf; using Neo.Afx.Mvc; using Neo.LegitimateLicences.Common; using System.Linq; using Neo.LegitimateLicences.Common.Helpers; using Neo.Afx.Services.Reports; using Neo.LegitimateLicences.UserConsole.Controllers; using Neo.LegitimateLicences.Data.Models; using System.Configuration; using DPUruNet; using Neo.Afx.ViewModels; using Neo.Afx.Services.Integration; namespace Neo.LegitimateLicences.UserConsole.Controllers { [Authorize] public class UserConsoleController : Neo.LegitimateLicences.Common.ControllerBase { private const long _entityID = 1; private const long _documentStoreLocationID = 3; #region Action Results #region Console public ActionResult Console(long userID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var model = new ConsoleModel { UserID = userID, DocumentStoreLocationID = _documentStoreLocationID }; ViewBag.Controller = "Console"; ViewBag.Page = "Console"; return View("Console", model); } #endregion #region UserDetails public ActionResult UserDetails(long UserID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var model = new UserDetailsModel { UserID = UserID, User = database.GetUser(UserID, Profile.UserID), Lookups = GetLookups() }; if (model.User != null) { model.Name = model.User.KnownAs; model.Email = model.User.Email; } ViewBag.Controller = "User Details"; ViewBag.Page = "User Details"; return View("UserDetails", model); } #endregion #region Settings public ActionResult Settings(long UserID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.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.SecurableEnum.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var roles = database.GetRoles().Where(a => a.RoleID != 2).ToList(); 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.SecurableEnum.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; model.HasFingerprint = user.FingerprintTemplate != null && user.FingerprintTemplate.Length > 0; } } 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.SecurableEnum.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.SecurableEnum.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.SecurableEnum.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, value.Cell, value.OfficeLocationID.Value, value.UserProfileDocID, 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.SecurableEnum.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.SecurableEnum.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.SecurableEnum.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.SecurableEnum.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(List fingerPrints, long userID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var errorMessage = ""; List preenrollmentFmds = new List(); foreach (var fingerPrint in fingerPrints) { byte[] bytes = Convert.FromBase64String(fingerPrint); var fmd = Importer.ImportFmd(bytes, Constants.Formats.Fmd.DP_PRE_REGISTRATION, Constants.Formats.Fmd.DP_PRE_REGISTRATION); preenrollmentFmds.Add(fmd.Data); } DataResult resultEnrollment = DPUruNet.Enrollment.CreateEnrollmentFmd(Constants.Formats.Fmd.DP_REGISTRATION, preenrollmentFmds); if (resultEnrollment.ResultCode == Constants.ResultCode.DP_SUCCESS) { try { database.SaveUserFingerPrint(resultEnrollment.Data.Bytes, 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.SecurableEnum.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.SecurableEnum.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 #region SaveFingerprintRequestToken [HttpPost] public JsonResult SaveFingerprintRequestToken(long userID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new SecurityDatabase(); var messageDb = new Neo.Afx.Services.Correspondence.CorrespondenceDatabase(); var errorMessage = ""; { try { var user = database.GetUserByID(userID); DateTime expiryDate = DateTime.UtcNow; string token = Guid.NewGuid().ToString(); database.SaveUserFingerPrintRequest(userID, true, Profile.UserID); } catch (Exception ex) { errorMessage = ExceptionHelper.GetInnermostMessage(ex); } } var results = new { ErrorMessage = errorMessage }; return Json(results, JsonSerializerOptions.None); } #endregion #endregion #region GetLookups public List GetLookups() { var lookups = new List(); var integrationStore = new SqlIntegrationStore(); try { integrationStore.Open(); lookups.Add(new LookupList("OfficeLocations", integrationStore.GetDataEntities("OfficeLocations", string.Empty).OrderBy(a => a.Title))); } finally { integrationStore.Close(); } return lookups; } #endregion } }