public void After_drugstore_registration_should_insert_record_in_user_update_info_table() { var defaults = session.Query <DefaultValues>().First(); defaults.AnalitFVersion = 705; Save(defaults); FlushAndCommit(); SetupGeneralInformation(); Css("#options_FillBillingInfo").Checked = false; browser.Button(Find.ById("RegisterButton")).Click(); var client = GetRegistredClient(); var user = client.Users.First(); var updateInfo = session.Load <UserUpdateInfo>(user.Id); Assert.That(updateInfo.AFAppVersion, Is.EqualTo(705u)); Assert.That(client.Status, Is.EqualTo(ClientStatus.On)); Assert.That(client.Addresses.Count, Is.EqualTo(1), "не создали адрес доставки"); var logs = PasswordChangeLogEntity.GetByLogin(user.Login, DateTime.Today, DateTime.Today.AddDays(1)); var passwordChange = logs.SingleOrDefault(); Assert.That(passwordChange, Is.Not.Null); Assert.That(passwordChange.UserName, Is.EqualTo(Environment.UserName)); Assert.That(passwordChange.TargetUserName, Is.EqualTo(user.Login)); Assert.That(passwordChange.SentTo.Contains(String.Format(_randomClientName + _mailSuffix)), Is.True); Assert.That(passwordChange.SmtpId, Is.Not.EqualTo(0)); Assert.That(updateInfo, Is.Not.Null, "Не создали запись в UserUpdateInfo"); }
public void Sent_to_must_be_set_into_concatenatio_of_client_mails_and_adddition_mails() { var passwordChanged = new PasswordChangeLogEntity(); passwordChanged.SetSentTo(1, "*****@*****.**"); Assert.That(passwordChanged.SmtpId, Is.EqualTo(1)); Assert.That(passwordChanged.SentTo, Is.EqualTo("*****@*****.**")); }
public void PasswordChangeLog(uint id, DateTime beginDate, DateTime endDate) { var user = DbSession.Load <User>(id); PropertyBag["logEntities"] = PasswordChangeLogEntity.GetByLogin(user.Login, beginDate, endDate.AddDays(1)); PropertyBag["login"] = user.Login; PropertyBag["beginDate"] = beginDate; PropertyBag["endDate"] = endDate; }
private PasswordChangeLogEntity SendRegistrationCard(PasswordChangeLogEntity log, User user, string password, string additionalEmails) { var mailTo = EmailHelper.JoinMails(user.GetAddressForSendingClientCard(), user.GetEmails(), additionalEmails); var smtpid = ReportHelper.SendClientCard(user, password, true, Defaults, mailTo, additionalEmails); log.SetSentTo(smtpid, mailTo); return(log); }
public void Is_change_password_by_one_self_return_true_if_last_password_change_done_by_client() { var entities = PasswordChangeLogEntity.GetByLogin(user.Login, DateTime.MinValue, DateTime.MaxValue); if (entities.Count > 0) { entities.Each(l => session.Delete(l)); } Assert.That(user.IsChangePasswordByOneself(), Is.False); Save(new PasswordChangeLogEntity(user.Login, user.Login, Environment.MachineName)); Assert.That(user.IsChangePasswordByOneself(), Is.True); Save(new PasswordChangeLogEntity(user.Login, user.Login, Environment.MachineName) { LogTime = DateTime.Now.AddSeconds(10) }); }
public void DoPasswordChange(uint userId, string emailsForSend, bool isSendClientCard, bool isFree, bool changeLogin, string reason, string[] phonesForSendToUserArray, string[] phonesForSendToAdminArray) { var user = DbSession.Load <User>(userId); user.CheckLogin(); var password = user.ChangePassword(Session); if (changeLogin) { ADHelper.RenameUser(user.Login, user.Id.ToString()); user.Login = user.Id.ToString(); } user.ResetUin(); var passwordChangeLog = new PasswordChangeLogEntity(user.Login); if (isSendClientCard) { var smtpId = ReportHelper.SendClientCard( user, password.Password, false, Defaults, emailsForSend); passwordChangeLog.SetSentTo(smtpId, emailsForSend); } string smsLog = ReportHelper.SendSmsPasswordToUser(user, password.Password, phonesForSendToUserArray); smsLog = smsLog + " " + ReportHelper.SendSmsToRegionalAdmin(user, password.Password, phonesForSendToAdminArray); passwordChangeLog.SmsLog = smsLog; DbSession.Save(user); DbSession.Save(AuditRecord.PasswordChange(user, isFree, reason)); DbSession.Save(passwordChangeLog); NotificationHelper.NotifyAboutPasswordChange(Admin, user, password.Password, isFree, Context.Request.UserHostAddress, reason); if (isSendClientCard) { Notify("Пароль успешно изменен."); RedirectTo(user, "Edit"); } else { Redirect("main", "report", new { id = user.Id, isPasswordChange = true, passwordId = password.PasswordId }); } }
public void Add( [DataBind("contacts")] Contact[] contacts, [DataBind("regionSettings")] RegionSettings[] regionSettings, [DataBind("persons")] Person[] persons, string comment, bool sendClientCard, uint clientId, string mails, string jsonSource, string[] phonesForSendToUserArray, string[] phonesForSendToAdminArray) { /*Грязный ХАК, почему-то если принудительно не загрузить так, не делается Service.FindAndCheck<Service>(clientId)*/ DbSession.Get <Client>(clientId); DbSession.Get <Supplier>(clientId); var service = Service.FindAndCheck <Service>(clientId); var user = new User(service); var address = new Address(); SetARDataBinder(AutoLoadBehavior.NullIfInvalidKey); var account = user.Accounting; BindObjectInstanceForUser(user, "user", jsonSource); BindObjectInstance(address, "address", AutoLoadBehavior.NewInstanceIfInvalidKey); BindObjectInstance(account, "account", AutoLoadBehavior.NewInstanceIfInvalidKey); if (!IsValid(user)) { Add(clientId, user); PropertyBag["account"] = account; PropertyBag["UserMessage"] = comment; PropertyBag["SendToEmail"] = sendClientCard; PropertyBag["emailForSend"] = mails; PropertyBag["InputPersonsList"] = persons; PropertyBag["InputContactsList"] = contacts; PropertyBag["SelectedRegions"] = regionSettings; PropertyBag["deliveryAddress"] = address.Value ?? ""; PropertyBag["phonesForSendToUserList"] = user.GetPhonesForSendingSms(); PropertyBag["phonesForSendToAdminList"] = GetAdminByRegionForSms(user.RootService.HomeRegion.Id); if (!String.IsNullOrEmpty(jsonSource)) { var errorSummary = Validator.GetErrorSummary(user); throw new Exception(errorSummary.InvalidProperties.Implode(x => $"{x} {errorSummary.GetErrorsForProperty(x).Implode()}")); } return; } if (String.IsNullOrEmpty(address.Value)) { address = null; } if (service.IsClient() && ((Client)service).Payers.Count > 1) { if ((user.AvaliableAddresses.Any() && user.AvaliableAddresses.Select(s => s.LegalEntity).All(l => l.Payer.Id != user.Payer.Id)) || (address != null && address.LegalEntity.Payer.Id != user.Payer.Id)) { Add(service.Id); PropertyBag["user"] = user; PropertyBag["address"] = address; Error("Ошибка регистрации: попытка зарегистрировать пользователя и адрес в различных Плательщиках"); return; } } service.AddUser(user); user.Setup(DbSession); var password = user.CreateInAd(Session); if (string.IsNullOrEmpty(jsonSource)) { user.WorkRegionMask = regionSettings.GetBrowseMask(); user.OrderRegionMask = regionSettings.GetOrderMask(); } else { mails = user.EmailForCard; } user.SetFtpAccess(user.FtpAccess); var passwordChangeLog = new PasswordChangeLogEntity(user.Login); DbSession.Save(passwordChangeLog); user.UpdateContacts(contacts); user.UpdatePersons(persons); if (service.IsClient() && address != null) { address = ((Client)service).AddAddress(address); user.RegistredWith(address); address.SaveAndFlush(); address.Maintain(DbSession); } DbSession.Save(service); if (address != null) { address.CreateFtpDirectory(); } new Mailer(DbSession).Registred(user, comment, Defaults); user.AddBillingComment(comment); if (address != null) { address.AddBillingComment(comment); new Mailer(DbSession).Registred(address, comment, Defaults); } if (user.Client != null) { var message = string.Format("$$$Пользователю {0} - ({1}) подключены следующие адреса доставки: \r\n {2}", user.Id, user.Name, user.AvaliableAddresses.Implode(a => string.Format("\r\n {0} - ({1})", a.Id, a.Name))); DbSession.Save(new AuditRecord(message, user.Client) { MessageType = LogMessageType.System }); } string smsLog = ReportHelper.SendSmsPasswordToUser(user, password.Password, phonesForSendToUserArray); smsLog = smsLog + " " + ReportHelper.SendSmsToRegionalAdmin(user, password.Password, phonesForSendToAdminArray); passwordChangeLog.SmsLog = smsLog; var haveMails = !String.IsNullOrEmpty(mails) && !String.IsNullOrEmpty(mails.Trim()); // Если установлена галка отсылать рег. карту на email и задан email (в спец поле или в контактной информации) if (sendClientCard && (haveMails || !string.IsNullOrEmpty(user.EmailForCard))) { var smtpId = ReportHelper.SendClientCard(user, password.Password, false, Defaults, mails); passwordChangeLog.SetSentTo(smtpId, new[] { mails }.Where(s => !String.IsNullOrWhiteSpace(s)).Implode()); DbSession.Save(passwordChangeLog); Notify("Пользователь создан"); if (string.IsNullOrEmpty(jsonSource)) { if (service.IsClient()) { RedirectUsingRoute("Clients", "show", new { service.Id }); } else { RedirectUsingRoute("Suppliers", "show", new { service.Id }); } } else { Response.StatusCode = 200; CancelView(); } } else if (string.IsNullOrEmpty(jsonSource)) { Redirect("main", "report", new { id = user.Id, passwordId = password.PasswordId }); } else { Response.StatusCode = 200; CancelView(); } }
/// <summary> /// Добавление ftp-пользователя по Id клиента (для стороннего приложения) /// </summary> /// <param name="id">Id клиента</param> public void AddClient(uint id) { Person[] persons = new Person[0]; string comment = "Пользователь создан из интерфейса поставщика"; /*Грязный ХАК, почему-то если принудительно не загрузить так, не делается Service.FindAndCheck<Service>(id)*/ var currentClient = DbSession.Get <Client>(id); DbSession.Get <Supplier>(id); var service = Service.FindAndCheck <Service>(id); var user = new User(service); service.AddUser(user); user.Setup(DbSession); var password = user.CreateInAd(Session); user.SetFtpAccess(user.FtpAccess); var passwordChangeLog = new PasswordChangeLogEntity(user.Login); DbSession.Save(passwordChangeLog); user.UpdatePersons(persons); DbSession.Save(service); new Mailer(DbSession).Registred(user, comment, Defaults); user.AddBillingComment(comment); if (user.Client != null) { var message = string.Format("$$$Пользователю {0} - ({1}) подключены следующие адреса доставки: \r\n {2}", user.Id, user.Name, user.AvaliableAddresses.Implode(a => string.Format("\r\n {0} - ({1})", a.Id, a.Name))); DbSession.Save(new AuditRecord(message, user.Client) { MessageType = LogMessageType.System }); } user.UseFtpGateway = true; #if !DEBUG //создаем папку var root = ConfigurationManager.AppSettings["FtpUserFolder"] + user.Login; var username = String.Format(@"ANALIT\{0}", user.Login); Directory.CreateDirectory(root); //раздаем права на папку var rootDirectorySecurity = Directory.GetAccessControl(root); var rule = new FileSystemAccessRule(username, FileSystemRights.Read, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow); rootDirectorySecurity.AddAccessRule(rule); rule = new FileSystemAccessRule(username, FileSystemRights.Write, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow); rootDirectorySecurity.AddAccessRule(rule); rule = new FileSystemAccessRule(username, FileSystemRights.Delete, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow); rootDirectorySecurity.AddAccessRule(rule); rule = new FileSystemAccessRule(username, FileSystemRights.ExecuteFile, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow); rootDirectorySecurity.AddAccessRule(rule); rule = new FileSystemAccessRule(username, FileSystemRights.ListDirectory, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow); rootDirectorySecurity.AddAccessRule(rule); rule = new FileSystemAccessRule(username, FileSystemRights.CreateDirectories, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow); rootDirectorySecurity.AddAccessRule(rule); rule = new FileSystemAccessRule(username, FileSystemRights.WriteAttributes, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Deny); rootDirectorySecurity.AddAccessRule(rule); Directory.SetAccessControl(root, rootDirectorySecurity); #endif DbSession.Save(currentClient); DbSession.Save(user); Response.StatusCode = 200; RenderText(user.Login + "," + password.Password); CancelView(); }
public void RegisterClient([DataBind("client")] Client client, ulong homeRegion, [DataBind("regionSettings")] RegionSettings[] regionSettings, [DataBind("permissions")] UserPermission[] permissions, [DataBind("options")] AdditionalSettings options, [DataBind("payer")] Payer payer, uint?existingPayerId, [DataBind("supplier")] Supplier supplier, [DataBind("clientContacts")] Contact[] clientContacts, [DataBind("userContacts")] Contact[] userContacts, [DataBind("userPersons")] Person[] userPersons, string additionalEmailsForSendingCard, string comment) { PasswordCreation password = null; var fullName = client.FullName.Replace("№", "N").Trim(); var name = client.Name.Replace("№", "N").Trim(); var currentPayer = RegisterPayer(options, payer, existingPayerId, name, fullName); client = new Client(currentPayer, DbSession.Load <Region>(homeRegion)) { FullName = fullName, Name = name, MaskRegion = regionSettings.GetBrowseMask(), Registration = new RegistrationInfo(Admin), ContactGroupOwner = new ContactGroupOwner() }; Defaults.Apply(client); client.Settings.WorkRegionMask = client.MaskRegion; client.Settings.OrderRegionMask = regionSettings.GetOrderMask(); var user = new User(client); var address = new Address(); Account account = user.Accounting; BindObjectInstance(client.Settings, "client.Settings"); BindObjectInstance(user, "user"); BindObjectInstance(account, "account"); SetARDataBinder(AutoLoadBehavior.NullIfInvalidKey); BindObjectInstance(address, "address"); var equalClientInRegion = DbSession.QueryOver <Client>().Where(c => c.HomeRegion.Id == homeRegion && c.Name == name).RowCount() > 0; var forValidation = new List <object> { client }; if (!options.RegisterEmpty) { forValidation.Add(user); client.AddUser(user); } if (!IsValid(forValidation) || equalClientInRegion) { DbSession.Delete(currentPayer); RegisterClient(); PropertyBag["clientContacts"] = clientContacts; PropertyBag["client"] = client; PropertyBag["user"] = user; PropertyBag["address"] = address; PropertyBag["options"] = options; PropertyBag["account"] = account; if (equalClientInRegion) { Error(string.Format("В данном регионе уже существует клиент с таким именем {0}", name)); } return; } if (String.IsNullOrEmpty(address.Value) || options.RegisterEmpty) { address = null; } if (options.RegisterEmpty) { user = null; } if (address != null) { address.Value = address.Value.Replace("№", "N").Trim(); client.AddAddress(address); } CreateDrugstore(client, options, supplier); AddContacts(client.ContactGroupOwner, clientContacts); if (user != null) { CreateUser(user, permissions, userPersons); user.UpdateContacts(userContacts); user.RegistredWith(client.Addresses.LastOrDefault()); password = user.CreateInAd(Session); var log = new PasswordChangeLogEntity(user.Login); if (options.SendRegistrationCard) { log = SendRegistrationCard(log, user, password.Password, additionalEmailsForSendingCard); } string smsLog = ""; if (options.SendSmsToUser) { var phonesForSendToUserArray = user.GetPhonesForSendingSms().Select(x => x.Number).ToArray(); smsLog = smsLog + " " + ReportHelper.SendSmsPasswordToUser(user, password.Password, phonesForSendToUserArray); } if (options.SendSmsToAdmin) { var phonesForSendToAdminArray = GetPhoneSupportByRegionForSms(user.RootService.HomeRegion.Id); smsLog = smsLog + " " + ReportHelper.SendSmsToRegionalAdmin(user, password.Password, phonesForSendToAdminArray); } log.SmsLog = smsLog; DbSession.Save(log); } client.Addresses.Each(a => a.CreateFtpDirectory()); client.AddBillingComment(comment); new Mailer(DbSession).ClientRegistred(client, comment, Defaults); if (!options.FillBillingInfo) { Mail().NotifyBillingAboutClientRegistration(client); } if (options.FillBillingInfo) { Redirect("Register", "RegisterPayer", new { id = client.Payers.Single().Id, showRegistrationCard = options.ShowRegistrationCard, passwordId = password != null ? password.PasswordId : "" }); } else if (client.Users.Count > 0 && options.ShowRegistrationCard) { Redirect("main", "report", new { id = client.Users.First().Id, passwordId = password.PasswordId }); } else { Notify("Регистрация завершена успешно"); RedirectTo(client); } }
public void RegisterSupplier( [DataBind("supplierContacts")] Contact[] supplierContacts, ulong homeRegion, [DataBind("regionSettings")] RegionSettings[] regionSettings, [DataBind("options")] AdditionalSettings options, [DataBind("payer")] Payer payer, uint?existingPayerId, [DataBind("userContacts")] Contact[] userContacts, [DataBind("userPersons")] Person[] userPersons, string additionalEmailsForSendingCard, string comment) { var supplier = new Supplier(); supplier.RegionMask = regionSettings.GetBrowseMask(); SetARDataBinder(AutoLoadBehavior.NewRootInstanceIfInvalidKey); BindObjectInstance(supplier, "supplier"); SetBinder(new DataBinder()); var currentPayer = RegisterPayer(options, payer, existingPayerId, supplier.Name, supplier.FullName); supplier.HomeRegion = DbSession.Load <Region>(homeRegion); supplier.Payer = currentPayer; supplier.Account = new SupplierAccount(supplier); supplier.ContactGroupOwner = new ContactGroupOwner(supplier.GetAditionalContactGroups()); supplier.Registration = new RegistrationInfo(Admin); var user = new User(supplier.Payer, supplier); BindObjectInstance(user, "user"); if (!IsValid(supplier, user, options)) { RegisterSupplier(); PropertyBag["options"] = options; PropertyBag["supplier"] = supplier; PropertyBag["user"] = user; PropertyBag["options"] = options; return; } var tokens = DbSession.Query <FederalSupplierToken>().ToList(); supplier.IsFederal = tokens.Select(x => x.Name) .Any(x => supplier.Name.IndexOf(x, StringComparison.CurrentCultureIgnoreCase) >= 0 || supplier.FullName.IndexOf(x, StringComparison.CurrentCultureIgnoreCase) >= 0); supplier.ContactGroupOwner.AddContactGroup(new ContactGroup(ContactGroupType.MiniMails)); currentPayer.Suppliers.Add(supplier); currentPayer.UpdatePaymentSum(); AddContacts(supplier.ContactGroupOwner, supplierContacts); supplier.OrderRules.Add(new OrderSendRules(Defaults, supplier)); DbSession.Save(supplier); foreach (var group in supplier.ContactGroupOwner.ContactGroups) { var persons = BindObject <List <Person> >(group.Type + "Persons"); var contacts = BindObject <List <Contact> >(group.Type + "Contacts"); group.Persons = persons; group.Contacts = contacts; } var groups = BindObject <RegionalDeliveryGroup[]>("orderDeliveryGroup"); foreach (var group in groups) { group.Region = DbSession.Load <Region>(group.Region.Id); group.Name = "Доставка заказов " + group.Region.Name; group.ContactGroupOwner = supplier.ContactGroupOwner; supplier.ContactGroupOwner.ContactGroups.Add(group); //повторная валидация, тк когда производился binding валидация не прошла //тк не было заполнено поле Name Validator.IsValid(group); } foreach (var group in supplier.ContactGroupOwner.ContactGroups) { group.Adopt(); DbSession.Save(group); group.Persons.Each(p => DbSession.Save(p)); } DbSession.Flush(); DbSession.Query <Region>() .Where(r => (r.Id & supplier.RegionMask) > 0) .Each(r => supplier.AddRegion(r, DbSession)); CreateSupplier(supplier); Maintainer.MaintainIntersection(supplier, DbSession); user.UpdateContacts(userContacts); foreach (var person in userPersons) { user.AddContactPerson(person.Name); } user.AssignDefaultPermission(DbSession); user.Setup(DbSession); var password = user.CreateInAd(Session); supplier.AddBillingComment(comment); Mailer.SupplierRegistred(supplier, comment); //Создание директорий для поставщика на фтп supplier.CreateDirs(); var log = new PasswordChangeLogEntity(user.Login); if (options.SendRegistrationCard) { log = SendRegistrationCard(log, user, password.Password, additionalEmailsForSendingCard); } string smsLog = ""; if (options.SendSmsToUser) { var phonesForSendToUserArray = user.GetPhonesForSendingSms().Select(x => x.Number).ToArray(); smsLog = smsLog + " " + ReportHelper.SendSmsPasswordToUser(user, password.Password, phonesForSendToUserArray); } if (options.SendSmsToAdmin) { var phonesForSendToAdminArray = GetPhoneSupportByRegionForSms(user.RootService.HomeRegion.Id); smsLog = smsLog + " " + ReportHelper.SendSmsToRegionalAdmin(user, password.Password, phonesForSendToAdminArray); } log.SmsLog = smsLog; DbSession.Save(log); if (options.FillBillingInfo) { Redirect("Register", "RegisterPayer", new { id = supplier.Payer.Id, showRegistrationCard = options.ShowRegistrationCard, passwordId = password.PasswordId }); } else if (supplier.Users.Count > 0 && options.ShowRegistrationCard) { Redirect("main", "report", new { id = supplier.Users.First().Id, passwordId = password.PasswordId }); } else { Notify("Регистрация завершена успешно"); Redirect("Suppliers", "Show", new { id = supplier.Id }); } }