public static int SendPasswordReminder(string username, string ip) { // place log record TaskManager.StartTask("USER", "SEND_REMINDER", username); TaskManager.WriteParameter("IP", ip); try { // try to get user from database UserInfoInternal user = GetUserInternally(username); if (user == null) { TaskManager.WriteWarning("Account not found"); // Fix for item #273 (NGS-9) //return BusinessErrorCodes.ERROR_USER_NOT_FOUND; return(0); } UserSettings settings = UserController.GetUserSettings(user.UserId, UserSettings.PASSWORD_REMINDER_LETTER); string from = settings["From"]; string cc = settings["CC"]; string subject = settings["Subject"]; string body = user.HtmlMail ? settings["HtmlBody"] : settings["TextBody"]; bool isHtml = user.HtmlMail; MailPriority priority = MailPriority.Normal; if (!String.IsNullOrEmpty(settings["Priority"])) { priority = (MailPriority)Enum.Parse(typeof(MailPriority), settings["Priority"], true); } if (body == null || body == "") { return(BusinessErrorCodes.ERROR_SETTINGS_PASSWORD_LETTER_EMPTY_BODY); } // One Time Password feature user.Password = OneTimePasswordHelper.SetOneTimePassword(user.UserId); // set template context items Hashtable items = new Hashtable(); items["user"] = user; items["Email"] = true; // get reseller details UserInfoInternal reseller = UserController.GetUser(user.OwnerId); if (reseller != null) { items["reseller"] = new UserInfo(reseller); } subject = PackageController.EvaluateTemplate(subject, items); body = PackageController.EvaluateTemplate(body, items); // send message MailHelper.SendMessage(from, user.Email, cc, subject, body, priority, isHtml); return(0); } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public static int AuthenticateUser(string username, string password, string ip) { // start task TaskManager.StartTask("USER", "AUTHENTICATE", username); TaskManager.WriteParameter("IP", ip); try { int result = 0; // try to get user from database UserInfoInternal user = GetUserInternally(username); // check if the user exists if (user == null) { TaskManager.WriteWarning("Wrong username"); return(BusinessErrorCodes.ERROR_USER_WRONG_USERNAME); } // check if the user is disabled if (user.LoginStatus == UserLoginStatus.Disabled) { TaskManager.WriteWarning("User disabled"); return(BusinessErrorCodes.ERROR_USER_ACCOUNT_DISABLED); } // check if the user is locked out if (user.LoginStatus == UserLoginStatus.LockedOut) { TaskManager.WriteWarning("User locked out"); return(BusinessErrorCodes.ERROR_USER_ACCOUNT_LOCKEDOUT); } //Get the password policy UserSettings userSettings = UserController.GetUserSettings(user.UserId, UserSettings.SolidCP_POLICY); int lockOut = -1; if (!string.IsNullOrEmpty(userSettings["PasswordPolicy"])) { string passwordPolicy = userSettings["PasswordPolicy"]; try { // parse settings string[] parts = passwordPolicy.Split(';'); lockOut = Convert.ToInt32(parts[7]); } catch { /* skip */ } } // compare user passwords if ((CryptoUtils.SHA1(user.Password) == password) || (user.Password == password)) { switch (user.OneTimePasswordState) { case OneTimePasswordStates.Active: result = BusinessSuccessCodes.SUCCESS_USER_ONETIMEPASSWORD; OneTimePasswordHelper.FireSuccessAuth(user); break; case OneTimePasswordStates.Expired: if (lockOut >= 0) { DataProvider.UpdateUserFailedLoginAttempt(user.UserId, lockOut, false); } TaskManager.WriteWarning("Expired one time password"); return(BusinessErrorCodes.ERROR_USER_EXPIRED_ONETIMEPASSWORD); break; } } else { if (lockOut >= 0) { DataProvider.UpdateUserFailedLoginAttempt(user.UserId, lockOut, false); } TaskManager.WriteWarning("Wrong password"); return(BusinessErrorCodes.ERROR_USER_WRONG_PASSWORD); } DataProvider.UpdateUserFailedLoginAttempt(user.UserId, lockOut, true); // check status if (user.Status == UserStatus.Cancelled) { TaskManager.WriteWarning("Account cancelled"); return(BusinessErrorCodes.ERROR_USER_ACCOUNT_CANCELLED); } if (user.Status == UserStatus.Pending) { TaskManager.WriteWarning("Account pending"); return(BusinessErrorCodes.ERROR_USER_ACCOUNT_PENDING); } return(result); } catch (Exception ex) { throw TaskManager.WriteError(ex); } finally { TaskManager.CompleteTask(); } }
public int CreateUserAccountInternal(int parentPackageId, string username, string password, int roleId, string firstName, string lastName, string email, string secondaryEmail, bool htmlMail, bool sendAccountLetter, bool createPackage, int planId, bool sendPackageLetter, string domainName, bool tempDomain, bool createWebSite, bool createFtpAccount, string ftpAccountName, bool createMailAccount, string hostName, bool createZoneRecord) { // check account int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive | DemandAccount.IsReseller); if (accountCheck < 0) { return(accountCheck); } // check package int packageCheck = SecurityContext.CheckPackage(parentPackageId, DemandPackage.IsActive); if (packageCheck < 0) { return(packageCheck); } // check if username exists if (UserController.UserExists(username)) { return(BusinessErrorCodes.ERROR_ACCOUNT_WIZARD_USER_EXISTS); } // check if domain exists int checkDomainResult = ServerController.CheckDomain(domainName); if (checkDomainResult < 0) { return(checkDomainResult); } // check if FTP account exists if (String.IsNullOrEmpty(ftpAccountName)) { ftpAccountName = username; } if (FtpServerController.FtpAccountExists(ftpAccountName)) { return(BusinessErrorCodes.ERROR_ACCOUNT_WIZARD_FTP_ACCOUNT_EXISTS); } // load parent package PackageInfo parentPackage = PackageController.GetPackage(parentPackageId); /******************************************** * CREATE USER ACCOUNT * *****************************************/ UserInfo user = new UserInfo(); user.RoleId = roleId; user.StatusId = (int)UserStatus.Active; user.OwnerId = parentPackage.UserId; user.IsDemo = false; user.IsPeer = false; // account info user.FirstName = firstName; user.LastName = lastName; user.Email = email; user.SecondaryEmail = secondaryEmail; user.Username = username; // user.Password = password; user.HtmlMail = htmlMail; // add a new user createdUserId = UserController.AddUser(user, false, password); if (createdUserId < 0) { // exit return(createdUserId); } userCreated = true; // create package // load hosting plan createdPackageId = -1; if (createPackage) { try { HostingPlanInfo plan = PackageController.GetHostingPlan(planId); PackageResult packageResult = PackageController.AddPackage( createdUserId, planId, plan.PlanName, "", (int)PackageStatus.Active, DateTime.Now, false); createdPackageId = packageResult.Result; } catch (Exception ex) { // error while adding package // remove user account UserController.DeleteUser(createdUserId); throw ex; } if (createdPackageId < 0) { // rollback wizard Rollback(); // return code return(createdPackageId); } // create domain int domainId = 0; if ((createWebSite || createMailAccount || createZoneRecord) && !String.IsNullOrEmpty(domainName)) { try { DomainInfo domain = new DomainInfo(); domain.PackageId = createdPackageId; domain.DomainName = domainName; domain.HostingAllowed = false; domainId = ServerController.AddDomain(domain, false, false); if (domainId < 0) { // rollback wizard Rollback(); // return return(domainId); } } catch (Exception ex) { // rollback wizard Rollback(); // error while adding domain throw new Exception("Could not add domain", ex); } } if (createWebSite && (domainId > 0)) { // create web site try { int webSiteId = WebServerController.AddWebSite( createdPackageId, hostName, domainId, 0, true, false); if (webSiteId < 0) { // rollback wizard Rollback(); // return return(webSiteId); } } catch (Exception ex) { // rollback wizard Rollback(); // error while creating web site throw new Exception("Could not create web site", ex); } } // create FTP account if (createFtpAccount) { try { FtpAccount ftpAccount = new FtpAccount(); ftpAccount.PackageId = createdPackageId; ftpAccount.Name = ftpAccountName; ftpAccount.Password = password; ftpAccount.Folder = "\\"; ftpAccount.CanRead = true; ftpAccount.CanWrite = true; int ftpAccountId = FtpServerController.AddFtpAccount(ftpAccount); if (ftpAccountId < 0) { // rollback wizard Rollback(); // return return(ftpAccountId); } } catch (Exception ex) { // rollback wizard Rollback(); // error while creating ftp account throw new Exception("Could not create FTP account", ex); } } if (createMailAccount && (domainId > 0)) { // create default mailbox try { // load mail policy UserSettings settings = UserController.GetUserSettings(createdUserId, UserSettings.MAIL_POLICY); string catchAllName = !String.IsNullOrEmpty(settings["CatchAllName"]) ? settings["CatchAllName"] : "mail"; MailAccount mailbox = new MailAccount(); mailbox.Name = catchAllName + "@" + domainName; mailbox.PackageId = createdPackageId; // gather information from the form mailbox.Enabled = true; mailbox.ResponderEnabled = false; mailbox.ReplyTo = ""; mailbox.ResponderSubject = ""; mailbox.ResponderMessage = ""; // password mailbox.Password = password; // redirection mailbox.ForwardingAddresses = new string[] { }; mailbox.DeleteOnForward = false; mailbox.MaxMailboxSize = 0; int mailAccountId = MailServerController.AddMailAccount(mailbox); if (mailAccountId < 0) { // rollback wizard Rollback(); // return return(mailAccountId); } // set catch-all account MailDomain mailDomain = MailServerController.GetMailDomain(createdPackageId, domainName); mailDomain.CatchAllAccount = "mail"; mailDomain.PostmasterAccount = "mail"; mailDomain.AbuseAccount = "mail"; MailServerController.UpdateMailDomain(mailDomain); int mailDomainId = mailDomain.Id; } catch (Exception ex) { // rollback wizard Rollback(); // error while creating mail account throw new Exception("Could not create mail account", ex); } } // Preview Domain / Temporary URL if (tempDomain && (domainId > 0)) { int previewDomainId = ServerController.CreateDomainPreviewDomain("", domainId); if (previewDomainId < 0) { // rollback wizard Rollback(); return(previewDomainId); } } // Domain DNS Zone if (createZoneRecord && (domainId > 0)) { ServerController.EnableDomainDns(domainId); } } // send welcome letters if (sendAccountLetter) { int result = PackageController.SendAccountSummaryLetter(createdUserId, null, null, true); if (result < 0) { // rollback wizard Rollback(); // return return(result); } } if (createPackage && sendPackageLetter) { int result = PackageController.SendPackageSummaryLetter(createdPackageId, null, null, true); if (result < 0) { // rollback wizard Rollback(); // return return(result); } } return(createdUserId); }