Beispiel #1
0
        /// <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;
        }
Beispiel #2
0
        /// <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());
                    }

                }
            }
        }