Beispiel #1
0
        public async Task <ActionResult> GetUsersActivated()
        {
            if (Request.Cookies.AllKeys.Contains("token"))
            {
                _apiHttpClient.Token = Request.Cookies["token"].Value;
            }

            var license = await LicenseMapper.GetLicense();

            var(users, roles, languages, teams) = await _applicationUsersService.GetUsersAndRolesAndLanguages();

            var model = new ActivatedUsersViewModel
            {
                ActivatedUsers = license.UsersPool
                                 .Where(userId => users.Any(_ => _.UserId == userId))
                                 .Select(userId => users.Single(_ => _.UserId == userId))
                                 .Select(user => new UserViewModel
                {
                    UserId   = user.UserId,
                    FullName = user.FullName
                }).ToList()
            };

            return(PartialView(model));
        }
Beispiel #2
0
        public async Task LicenseMapper_get_non_existing_with_fallback()
        {
            var licenseMapper = new LicenseMapper(new FileUtilities());
            var licenseType   = await licenseMapper.GetLicenseType("juba", "fallback");

            Assert.AreEqual("fallback", licenseType);
        }
Beispiel #3
0
        public async Task LicenseMapper_get_existing()
        {
            var licenseMapper = new LicenseMapper(new FileUtilities());
            var licenseType   = await licenseMapper.GetLicenseType("https://opensource.org/licenses/mit-license.php");

            Assert.AreEqual("MIT", licenseType);
        }
Beispiel #4
0
        public async Task <ActionResult> GetEmailTemplate(string name, string company, string email)
        {
            if (Request.Cookies.AllKeys.Contains("token"))
            {
                _apiHttpClient.Token = Request.Cookies["token"].Value;
            }

            var sys           = _systemInformationService.GetBasicInformation();
            var systemInfoStr = LocalizedStrings.GetStringFormat("Web_Controller_License_TextTemplate_SystemInfos",
                                                                 LocalizedStrings.GetString("Web_Controller_License_TextTemplate_MachineName"),
                                                                 sys.MachineName,
                                                                 LocalizedStrings.GetString("Web_Controller_License_TextTemplate_OperatingSystem"),
                                                                 string.Format("{0} {1} {2}", sys.OperatingSystem, sys.OperatingSystemArchitecture, sys.OperatingSystemVersion),
                                                                 LocalizedStrings.GetString("Web_Controller_License_TextTemplate_Language"),
                                                                 sys.OperatingSystemLanguage.ToString(),
                                                                 LocalizedStrings.GetString("Web_Controller_License_TextTemplate_SystemManufacturer"),
                                                                 sys.Manufacturer,
                                                                 LocalizedStrings.GetString("Web_Controller_License_TextTemplate_SystemModel"),
                                                                 sys.Model,
                                                                 LocalizedStrings.GetString("Web_Controller_License_TextTemplate_Processors"),
                                                                 sys.Processors != null ? string.Join("|", sys.Processors) : null,
                                                                 LocalizedStrings.GetString("Web_Controller_License_TextTemplate_Memory"),
                                                                 string.Format("{0} MB", (int)(sys.Memory / 1048576d)),
                                                                 LocalizedStrings.GetString("Web_Controller_License_TextTemplate_AvailableOSMemory"),
                                                                 string.Format("{0} MB", (int)(sys.OSVisibleMemory / 1024d)));

            if (sys.VideoControllers != null)
            {
                foreach (var vc in sys.VideoControllers)
                {
                    if (!string.IsNullOrEmpty(vc.Resolution))
                    {
                        systemInfoStr += string.Format("\r\n{0}: {1}, {2}", LocalizedStrings.GetString("Web_Controller_License_TextTemplate_VideoController"), vc.Name, vc.Resolution);
                    }
                }
            }

            var version = Assembly.GetExecutingAssembly().FullName
                          .Split(',')
                          .Single(_ => _.Contains("Version="))
                          .Split('=')
                          .Last();

            var productLicense = await LicenseMapper.GetLicense();

            var content = string.Format(LocalizedStrings.GetString("Web_Controller_License_TextTemplate"),
                                        name,
                                        company,
                                        email,
                                        await LicenseMapper.GetMachineHash(),
                                        //On n'affiche plus le statut TrialVersion, on Licensed à la place.
                                        string.Format("{0} - {1}", productLicense.Status == WebLicenseStatus.TrialVersion ? WebLicenseStatus.Licensed : productLicense.Status, LocalizedStrings.GetStringFormat(productLicense.StatusReason, productLicense.StatusReasonParams?.Select(_ => _.ToString()).ToArray())),
                                        version,
                                        systemInfoStr
                                        );

            return(Content(content));
        }
Beispiel #5
0
        public async Task <ActionResult> DeleteLicense()
        {
            if (Request.Cookies.AllKeys.Contains("token"))
            {
                _apiHttpClient.Token = Request.Cookies["token"].Value;
            }

            await LicenseMapper.SetLicense(null);

            return(new HttpStatusCodeResult(HttpStatusCode.OK));
        }
Beispiel #6
0
        public async Task <ActionResult> SaveUserInfo(string name, string company, string email)
        {
            if (Request.Cookies.AllKeys.Contains("token"))
            {
                _apiHttpClient.Token = Request.Cookies["token"].Value;
            }

            await LicenseMapper.SetUserInformation(name, company, email);

            return(new HttpStatusCodeResult(HttpStatusCode.OK));
        }
Beispiel #7
0
        public async Task ExportToExcel(string GridModel, string gridId, int id, string process, int?userId)
        {
            ExcelExport    exp = new ExcelExport();
            GridProperties obj = (GridProperties)Syncfusion.JavaScript.Utils.DeserializeToModel(typeof(GridProperties), GridModel);

            //Clear if there are any filter columns
            //syncfusion bug in exporting while in filter mode
            obj.FilterSettings.FilteredColumns.Clear();
            grid  = gridId;
            count = 0;
            var usersRolesLanguages = await _applicationUsersService.GetUsersAndRolesAndLanguages();

            var users     = new List <User>();
            var userPools = await LicenseMapper.GetUserPools();

            users = usersRolesLanguages.Users.Where(u => userPools.Any(p => p == u.UserId)).ToList();

            if (gridId == "Qualification")
            {
                var lastTrainingPublications = await _prepareService.GetLastPublications((int)PublishModeEnum.Formation);

                var lastEvaluationPublications = await _prepareService.GetLastPublications((int)PublishModeEnum.Evaluation);

                var qualificationManageViewModel = await QualificationMapper.ToQualificationManageViewModel(lastTrainingPublications, lastEvaluationPublications, users, userId);

                var dataSource = qualificationManageViewModel.Qualifications.ToList();
                qualificationViewModelData = qualificationManageViewModel.Qualifications.ToList();
                var currentDate = DateTime.Today.ToShortDateString().Replace("/", "-");
                obj.Columns[10].Field        = "Result";
                obj.ServerExcelQueryCellInfo = QueryCellInfo;
                exp.Export(obj, dataSource, LocalizedStrings.GetString("Qualification") + " " + currentDate + ".xlsx", ExcelVersion.Excel2013, false, false, "flat-saffron");
            }
            if (gridId == "QualificationDetail")
            {
                var qualification = await _prepareService.GetQualification(id);

                // Retrieve all the action of the publication
                var actionSorted = qualification.Publication.PublishedActions.Distinct()
                                   .OrderBy(a => a.WBSParts, new WBSPartsComparer())
                                   .ToList();

                var qualificationSteps   = GetQualificationStepAndChilds(qualification, actionSorted);
                var trainingPublications = await _prepareService.GetTrainingPublications(new[] { qualification.PublicationId });

                var qualificationManageViewModel = QualificationMapper.ToQualificationViewModel(qualification, qualificationSteps, users, trainingPublications);
                var dataSource = qualificationManageViewModel.Steps.ToList();
                qualificationStepViewModelData = qualificationManageViewModel.Steps.ToList();
                var currentDate = DateTime.Today.ToShortDateString().Replace("/", "-");
                obj.Columns[5].Field         = HeadersHelper.IsQualified;
                obj.ServerExcelQueryCellInfo = QueryCellInfo;
                exp.Export(obj, dataSource, LocalizedStrings.GetString("QualificationDetail") + " " + process + " " + currentDate + ".xlsx", ExcelVersion.Excel2013, false, false, "flat-saffron");
            }
        }
Beispiel #8
0
        public async Task <JsonResult> CheckExpiredLicenseToNavigate(string targetAddress)
        {
            var redirect = await LicenseMapper.CheckLicenseStatus(WebLicenseStatus.OverageOfUsers, WebLicenseStatus.NotFound);

            if (targetAddress != null)
            {
                if (targetAddress.Contains("User") && await LicenseMapper.CheckLicenseStatus() != true)
                {
                    redirect = false;
                }
            }

            return(Json(new { redirect = redirect }, JsonRequestBehavior.AllowGet));
        }
Beispiel #9
0
        public async Task <ActionResult> GetUserWithIds(List <int> ids)
        {
            var usersRolesLanguages = await _applicationUsersService.GetUsersAndRolesAndLanguages();

            var userPools = await LicenseMapper.GetUserPools();

            var data = usersRolesLanguages.Users.Where(u => userPools.Any(p => p == u.UserId)).Select(
                u => new { Fullname = u.FullName, u.Username, u.UserId, IsChecked = ids != null ? ids.Contains(u.UserId) : false }
                ).ToList();

            var jsonSerializer = new JavaScriptSerializer();

            return(Json(jsonSerializer.Serialize(data)));
        }
Beispiel #10
0
        /// <summary>
        /// Mapping users and roles to view model
        /// </summary>
        /// <returns></returns>
        private async Task <UserManageViewModel> GetData()
        {
            var license = await LicenseMapper.GetLicense();

            ViewBag.ActivatedUsersCount = license?.UsersPool?.Count ?? 0;
            ViewBag.ActivatedUsersMax   = license?.NumberOfUsers ?? 0;

            var(Users, Roles, Languages, Teams) = await _applicationUsersService.GetUsersAndRolesAndLanguages();

            UserManageViewModel userManageModel = new UserManageViewModel();
            var users = Users.Select(u =>
            {
                var rolesInfo = GetRolesForUser(u, Roles);
                return(new UserViewModel
                {
                    UserId = u.UserId,
                    DefaultLanguageCode = u.DefaultLanguageCode,
                    Username = u.Username,
                    Firstname = u.Firstname,
                    Name = u.Name,
                    Email = u.Email,
                    PhoneNumber = u.PhoneNumber,
                    Roles = rolesInfo.Item1,
                    RolesId = rolesInfo.Item2,
                    Tenured = u.Tenured,
                    TenuredDisplay = u.Tenured.HasValue? u.Tenured.Value? LocalizedStrings.GetString("Tenant") : LocalizedStrings.GetString("Interim") : "",
                    Teams = u.Teams.Select(t => t.Name).ToList(),
                    IsActive = license?.UsersPool?.Contains(u.UserId) == true ? true : false
                });
            });
            var allRoles = Roles.ToList();
            var roleList = allRoles.Select(r => new RoleViewModel
            {
                RoleCode   = r.RoleCode,
                ShortLabel = r.ShortLabel
            });
            var allLanguages = Languages.ToList();
            var languageList = allLanguages.Select(l => new LanguageViewModel
            {
                LanguageCode = l.LanguageCode,
                Label        = l.Label
            });

            userManageModel.RolesViewModel = roleList.ToList();
            userManageModel.UsersViewModel = users.ToList();

            userManageModel.LanguagesViewModel = languageList.ToList();
            return(userManageModel);
        }
Beispiel #11
0
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            ITraceManager traceManager = DependencyResolver.Current.GetService(typeof(ITraceManager)) as ITraceManager;

            try
            {
                IAuthenticationService authenticationService = DependencyResolver.Current.GetService(typeof(IAuthenticationService)) as IAuthenticationService;
                ISecurityContext       securityContext       = DependencyResolver.Current.GetService(typeof(ISecurityContext)) as ISecurityContext;
                ILocalizationManager   localizationManager   = DependencyResolver.Current.GetService(typeof(ILocalizationManager)) as ILocalizationManager;

                if (securityContext == null)
                {
                    traceManager.TraceWarning($"Security context can be retrieve from Unity. Skipping ..");
                    return;
                }

                /*IPrincipal principal = filterContext.HttpContext.User;
                 * ClaimsIdentity identity = principal?.Identity as ClaimsIdentity;
                 * string username = identity?.Name;
                 * if (string.IsNullOrEmpty(username))
                 * {
                 *  traceManager.TraceWarning($"Claim username not found. Skipping ..");
                 *  return;
                 * }*/

                var user = JwtTokenProvider.GetUserModel(filterContext.HttpContext.Request.Cookies["token"].Value);
                securityContext.CurrentUser = new SecurityUser(new User
                {
                    Username  = user.Username,
                    Firstname = user.Firstname,
                    Name      = user.Name,
                    RoleCodes = user.Roles.ToList()
                });
                localizationManager.CurrentCulture = new CultureInfo(JwtTokenProvider.GetUserModelCurrentLanguage(filterContext.HttpContext.Request.Cookies["token"].Value));

                filterContext.Controller.ViewBag.LicenseExpired = Task.Run(() => LicenseMapper.CheckLicenseIsExpired()).Result;

                //Refresh cookie if not idle
                filterContext.HttpContext.Response.SetAuthorizationCookie(user);

                //traceManager.TraceDebug($"Current user set to {username} inside security context");

                base.OnActionExecuting(filterContext);
            }
            catch (Exception ex)
            {
                traceManager.TraceError(ex, $"Error while setting action context...");
            }
        }
Beispiel #12
0
        /// <summary>
        /// Delete user information
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public async Task <ActionResult> DeleteUser(int key)
        {
            if (Request.Cookies.AllKeys.Contains("token"))
            {
                _apiHttpClient.Token = Request.Cookies["token"].Value;
            }

            try
            {
                var(Users, Roles, Languages, Teams) = await _applicationUsersService.GetUsersAndRolesAndLanguages();

                var userDelete = Users.FirstOrDefault(u => u.UserId == key);
                if (userDelete != null)
                {
                    var license = await LicenseMapper.GetLicense();

                    if (license.UsersPool.Any(u => u == key))
                    {
                        //Delete user from License userpool
                        license.UsersPool.Remove(key);
                        await CancelAndDisableUserRelatedActivity(new List <int> {
                            key
                        });

                        await LicenseMapper.SetLicense(license);
                    }

                    userDelete.IsDeleted = true;
                    userDelete.MarkAsDeleted();

                    IEnumerable <User> editUser = new[] { userDelete };
                    await _applicationUsersService.SaveUsers(editUser);
                }
                var users = await GetData();

                return(Json(users, JsonRequestBehavior.AllowGet));
            }
            catch (InvalidOperationException ex)
            {
                var message = LocalizedStrings.GetString("UnableUsedUserDelete");
                _traceManager.TraceError(ex, message);
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, message));
            }
            catch (Exception ex)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
        }
Beispiel #13
0
        public async Task <ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var(users, roles, languages, teams) = await _applicationUsersService.GetUsersAndRolesAndLanguages();

            var userModel = new JWT.UserModel();
            var user      = users.FirstOrDefault(_ => _.Username == model.Username);

            if (user != null)
            {
                userModel = user.ToUserModel();
                if (!await LicenseMapper.CheckUserCanAccess(userModel))
                {
                    ModelState.AddModelError("", LocalizedStrings.GetString("VM_Authentication_Message_NotAuthorized"));
                    return(View(model));
                }
            }

            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, change to shouldLockout: true
            var result = await SignInManager.PasswordSignInAsync(model.Username, model.Password, model.RememberMe, shouldLockout : false);

            switch (result)
            {
            case SignInStatus.Success:
                userModel.RememberMe = model.RememberMe;
                Response.SetAuthorizationCookie(userModel);
                return(RedirectToLocal(returnUrl));

            case SignInStatus.LockedOut:
                return(View("Lockout"));

            case SignInStatus.RequiresVerification:
                return(RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }));

            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Login ou password incorrect");
                return(View(model));
            }
        }
Beispiel #14
0
        public async Task <LicenseViewModel> GetData()
        {
            if (Request.Cookies.AllKeys.Contains("token"))
            {
                _apiHttpClient.Token = Request.Cookies["token"].Value;
            }

            var model = new LicenseViewModel
            {
                //Prepare LicenseInfo
                LicenseInfo = new LicenseInfoViewModel
                {
                    ActivatedUsers = new List <UserViewModel>()
                }
            };

            //User information
            var userProvider = await LicenseMapper.GetUserInformation();

            if (userProvider != null)
            {
                model.LicenseInfo.Name    = userProvider.Username;
                model.LicenseInfo.Company = userProvider.Company;
                model.LicenseInfo.Email   = userProvider.Email;
            }

            var license = await LicenseMapper.GetLicense();

            if (license.Status != WebLicenseStatus.NotFound && license.Status != WebLicenseStatus.MachineHashMismatch)
            {
                model.LicenseFile                            = license;
                model.LicenseInfo.LicenseFile                = license;
                model.LicenseInfo.LicenseMaxActivateUser     = license.NumberOfUsers;
                model.LicenseInfo.LicenseTotalActivatedUsers = license.UsersPool.Count;
                model.LicenseInfo.ExpiredDate                = license.ActivationDate.AddDays(license.TrialDays);

                model.LicenseInfo.Status       = license.Status;
                model.LicenseInfo.StatusReason = license.StatusReason;

                //To display license information
                if ((model.LicenseInfo.Status != WebLicenseStatus.Licensed && DateTime.Now > model.LicenseInfo.ExpiredDate) || model.LicenseInfo.Status == WebLicenseStatus.Expired)
                {
                    model.LicenseInfo.LicenseInformation = LocalizedStrings.GetString("Web_Controller_License_InfoLicenseExpired");
                }
                else if (license.Status == WebLicenseStatus.OverageOfUsers)
                {
                    model.LicenseInfo.LicenseInformation = LocalizedStrings.GetString("Web_Controller_License_InfoOverageOfUsers");
                }
                else
                {
                    model.LicenseInfo.LicenseInformation = LocalizedStrings.GetString("Web_Controller_License_InfoLicenseValid");
                }

                if (model.LicenseInfo.LicenseTotalActivatedUsers != 0)
                {
                    //collect activated users
                    var usersRolesLanguages = await _applicationUsersService.GetUsersAndRolesAndLanguages();

                    var users = usersRolesLanguages.Users;
                    model.LicenseInfo.ActivatedUsers = license.UsersPool
                                                       .Where(userId => users.Any(_ => _.UserId == userId))
                                                       .Select(userId => users.Single(_ => _.UserId == userId))
                                                       .Select(user => new UserViewModel
                    {
                        UserId   = user.UserId,
                        FullName = user.FullName
                    }).ToList();
                }
            }

            model.LicenseInfo.IDMachine = await LicenseMapper.GetMachineHash();

            model.LicenseInfo.Status       = license.Status;
            model.LicenseInfo.StatusReason = LocalizedStrings.GetStringFormat(license.StatusReason, license.StatusReasonParams?.Select(_ => _.ToString()).ToArray());

            //Email to kprocess
            model.LicenseInfo.EmailTarget = ActivationConstants.KProcessEmail;

            return(model);
        }
Beispiel #15
0
        public async Task <ActionResult> SaveDefault()
        {
            if (Request.Cookies.AllKeys.Contains("token"))
            {
                _apiHttpClient.Token = Request.Cookies["token"].Value;
            }

            HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;
            var uploadedLicenseFile = System.Web.HttpContext.Current.Request.Files["uploadLicense"];

            var name    = System.Web.HttpContext.Current.Request.Headers["name"];
            var company = System.Web.HttpContext.Current.Request.Headers["company"];
            var email   = System.Web.HttpContext.Current.Request.Headers["email"];
            await LicenseMapper.SetUserInformation(name, company, email);

            ProductLicenseInfo licenseInfo = null;

            try
            {
                using (System.IO.StreamReader reader = new System.IO.StreamReader(uploadedLicenseFile.InputStream))
                {
                    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ProductLicenseInfo));
                    licenseInfo = (ProductLicenseInfo)serializer.Deserialize(reader);
                }
            }
            catch (Exception e)
            {
                _traceManager.TraceError(e, e.Message);
                HttpContext.Response.StatusDescription = $"{HttpStatusCode.BadRequest}";
                return(Content(LocalizedStrings.GetString("Web_Controller_License_CantCheckLicense")));
            }

            try
            {
                WebProductLicense license = await LicenseMapper.ActivateLicense(licenseInfo);

                if (license.Status == WebLicenseStatus.OverageOfUsers)
                {
                    HttpContext.Response.StatusDescription = $"{HttpStatusCode.ExpectationFailed}";
                    return(Content(LocalizedStrings.GetStringFormat(license.StatusReason, license.StatusReasonParams?.Select(_ => _.ToString()).ToArray())));
                }
                // Comment this part if you want to be able to save a expired license
                if (license.Status != WebLicenseStatus.Licensed && license.Status != WebLicenseStatus.TrialVersion)
                {
                    HttpContext.Response.StatusDescription = $"{HttpStatusCode.Forbidden}";
                    return(Content(LocalizedStrings.GetStringFormat(license.StatusReason, license.StatusReasonParams?.Select(_ => _.ToString()).ToArray())));
                }

                //First initialize of license, set UserPool to current Admin
                if (license.UsersPool.Count == 0)
                {
                    //Get current user id - Admin
                    var adminId = int.Parse(System.Web.HttpContext.Current.User.Identity.GetUserId());
                    license.UsersPool.Add(adminId);
                }
                await LicenseMapper.SetLicense(license);

                // TODO : Update license infos from the secured storage
            }
            catch (Exception e)
            {
                _traceManager.TraceError(e, e.Message);
                HttpContext.Response.StatusDescription = $"{HttpStatusCode.BadRequest}";
                return(Content(LocalizedStrings.GetString("Web_Controller_License_LicenseInvalid")));
            }

            HttpContext.Response.StatusDescription = $"{HttpStatusCode.OK}";
            return(Content($"{HttpStatusCode.OK}"));
        }
Beispiel #16
0
        public async Task <ActionResult> UpdateUserStatus(List <int> userIds, bool status)
        {
            if (Request.Cookies.AllKeys.Contains("token"))
            {
                _apiHttpClient.Token = Request.Cookies["token"].Value;
            }

            try
            {
                var license = await LicenseMapper.GetLicense();

                if (license.Status == WebLicenseStatus.NotFound)
                {
                    return(Json(new { Success = false, message = LocalizedStrings.GetString("Web_Controller_User_LicenseDoesntExist") }, JsonRequestBehavior.AllowGet));
                }
                else if (license.Status == WebLicenseStatus.MachineHashMismatch)
                {
                    return(Json(new { Success = false, message = LocalizedStrings.GetString("Web_Controller_User_LicenseMismatchesMachine") }, JsonRequestBehavior.AllowGet));
                }
                //Check user maximum limit
                if (status == true)
                {
                    if (license.UsersPool.Count >= license.NumberOfUsers)
                    {
                        return(Json(new { Success = false, message = LocalizedStrings.GetString("Web_Controller_User_OverageOfUsers") }, JsonRequestBehavior.AllowGet));
                    }
                }
                //Admin cannot deactivate his own Active status
                if (status == false && userIds.Any(u => u == int.Parse(System.Web.HttpContext.Current.User.Identity.GetUserId())))
                {
                    return(Json(new { Success = false, message = LocalizedStrings.GetString("Web_Controller_User_CantSelfDeactivate") }, JsonRequestBehavior.AllowGet));
                }

                if (status)
                {
                    foreach (var id in userIds)
                    {
                        license.UsersPool.Add(id);
                    }
                }
                else
                {
                    await CancelAndDisableUserRelatedActivity(userIds);

                    foreach (var id in userIds)
                    {
                        license.UsersPool.Remove(id);
                    }
                }

                await LicenseMapper.SetLicense(license);

                var users = await GetData();

                var updateUsers = users.UsersViewModel;

                return(Json(new { Success = true, Users = updateUsers, activatedCount = license.UsersPool.Count() }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                var message = string.Join(" | ", ModelState.Values
                                          .SelectMany(v => v.Errors)
                                          .Select(e => e.ErrorMessage));
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message));
            }
        }