/// <summary> /// Регистрация организации /// </summary> private RegisterResult Register() { Console.Out.WriteLine("При регистрации все поля обязательны к заполнению." + " Если у вас есть сертификат квалифицированной электронной подписи - выберите сертификат" + " для автоматического заполнения полей формы регистрации."); Console.Out.WriteLine("Регистрация в сервисе Synerdocs:"); var registerModel = new RegisterModel(); if (UserInput.ChooseYesNo("Выбрать сертификат?", false)) { // регистрация по сертификату ChooseCertificate(); } else { // регистрация по паролю // очистим данные о сертификате, если они там есть _context.Certificate = null; registerModel.OrganizationType = (OrganizationType)Enum .Parse(typeof(OrganizationType), UserInput.ChooseOption("Выберите тип организации", new[] { new UserInput.Option("1", "Юридическое лицо", true), new UserInput.Option("2", "Индивидуальный предприниматель", false), new UserInput.Option("3", "Физическое лицо", false) }).Id); if (registerModel.OrganizationType == OrganizationType.LegalEntity) { registerModel.OrganizationName = UserInput.ReadParameter("Введите наименование организации"); registerModel.Kpp = UserInput.ReadParameter("Введите КПП"); registerModel.Ogrn = UserInput.ReadParameter("Введите ОГРН"); } if (registerModel.OrganizationType == OrganizationType.IndividualEntrepreneur) { registerModel.Ogrn = UserInput.ReadParameter("Введите ОГРНИП"); } registerModel.Inn = UserInput.ReadParameter("Введите ИНН"); registerModel.FirstName = UserInput.ReadParameter("Введите фамилию"); registerModel.LastName = UserInput.ReadParameter("Введите имя"); registerModel.MiddleName = UserInput.ReadParameter("Введите отчество"); registerModel.Email = UserInput.ReadParameter("Введите e-mail"); } registerModel.Login = UserInput.ReadParameter("Введите логин"); string pass1 = null, pass2 = null; while (pass1 == null || pass2 == null || pass1 != pass2) { pass1 = UserInput.ReadPassword("Введите пароль"); pass2 = UserInput.ReadPassword("Подтвердите пароль"); var passwordsNotEqualOrEmpty = pass1 == null || pass2 == null || pass1 != pass2; if (passwordsNotEqualOrEmpty) UserInput.Error("Введённые пароли не совпадают! Повторите ввод пароля."); } registerModel.Password = pass1; registerModel.ServiceReglamentAccepted = UserInput.ChooseYesNo("Вы принимаете доступные по адресу www.synerdocs.ru Правила Synerdocs?", false); registerModel.OperatorCode = "2IG"; registerModel.ServiceCode = Guid.NewGuid().ToString(); var registerResult = new RegisterResult(); while (!registerResult.Success) { registerResult = _context.ServiceClient.Register(registerModel, _context.Certificate != null ? _context.Certificate.RawData : null); if (registerResult.Success) { UserInput.Success(string.Format("Регистрация {0} прошла успешно", registerResult.RegisterModel.OrganizationName)); return registerResult; } UserInput.Error("Во время регистрации обнаружены ошибки: \n" + string.Join("\n", registerResult.ErrorMessages)); var externalInfoType = typeof(RegisterModel); foreach (var errorMember in registerResult.ErrorMembers) { var propertyInfo = externalInfoType.GetProperty(errorMember); if (propertyInfo != null) { var attributes = propertyInfo.GetCustomAttributes(typeof(DisplayNameAttribute), false); if (attributes.Any()) { var displayNameAttr = ((DisplayNameAttribute)attributes[0]); if (propertyInfo.PropertyType == typeof(bool)) { propertyInfo.SetValue(registerModel, Convert.ChangeType(UserInput.ChooseYesNo(displayNameAttr.DisplayName, false), propertyInfo.PropertyType), null); } else { propertyInfo.SetValue(registerModel, Convert.ChangeType(UserInput.ReadParameter(displayNameAttr.DisplayName), propertyInfo.PropertyType), null); } } } } } return registerResult; }
/// <summary> /// Авторизоваться /// </summary> /// <param name="client"></param> private void Auth(Client client) { var byCertificate = new UserInput.Option("1", "По сертификату", true); var byPassword = new UserInput.Option("2", "По паролю", false); var register = new UserInput.Option("3", "Зарегистрироваться в сервисе", false); while (true) { var authOption = UserInput.ChooseOption("Выберите способ аутентификации", new[] { byCertificate, byPassword, register }); if (authOption == byPassword) { var login = UserInput.ReadParameter("имя пользователя"); var password = UserInput.ReadParameter("пароль"); try { if (client.Authenticate(login, password, applicationId)) { UserInput.Success("Аутентификация прошла успешно"); return; } UserInput.Error("Неправильный логин или пароль"); } catch (Exception ex) { UserInput.Error("Произошла неожиданная ошибка"); UserInput.Error(ex.ToString()); } } else if (authOption == byCertificate) { try { // выбор сертификата по списку ChooseCertificate(); if (client.AuthenticateWithCertificate(context.Certificate.Thumbprint, applicationId)) { UserInput.Success("Аутентификация прошла успешно"); return; } UserInput.Error("Аутентификация не пройдена"); } catch (Win32Exception win32Ex) { UserInput.Error("Произошла ошибка при попытке расшифровать токен"); UserInput.Error(win32Ex.ToString()); } catch (Exception ex) { UserInput.Error("Произошла неожиданная ошибка"); UserInput.Error(ex.ToString()); } } else { try { var registerResult = new RegisterResult(); registerResult = Register(); if (registerResult.Success) { client.Authenticate(registerResult.RegisterModel.Login, registerResult.RegisterModel.Password, applicationId); } return; } catch (Exception ex) { UserInput.Error("Произошла неожиданная ошибка"); UserInput.Error(ex.ToString()); } } } }