コード例 #1
0
        public void RegisterPublicKeyRequestTest()
        {
            var message = new RegisterPublicKeyRequest();

            Assert.AreEqual(message.Kind, MessageKind.RegisterPublicKeyRequest);

            message.KeyNotes           = "KeyNotes";
            message.UserLogin          = "******";
            message.PublicKeyData      = "PublicKeyData";
            message.ClientUserDomainID = Guid.NewGuid();
            message.EventDate          = new DateTime(2015, 01, 15);

            var serializer = new ProtocolSerializer(ProtocolVersion.Version10);
            var data       = serializer.Serialize(message);

            Assert.IsNotNull(data);
            Assert.AreEqual(serializer.GetMessageInfoOrNull(data).Kind, MessageKind.RegisterPublicKeyRequest);

            var savedMessage = serializer.DeserializeRegisterPublicKeyRequest(data);

            Assert.IsNotNull(savedMessage);

            Assert.AreEqual(message.Kind, savedMessage.Kind);
            Assert.AreEqual(message.EventDate, savedMessage.EventDate);
            Assert.AreEqual(message.Version, savedMessage.Version);
            Assert.AreEqual(message.KeyNotes, savedMessage.KeyNotes);
            Assert.AreEqual(message.PublicKeyData, savedMessage.PublicKeyData);
            Assert.AreEqual(message.UserLogin, savedMessage.UserLogin);
            Assert.AreEqual(message.ClientUserDomainID, savedMessage.ClientUserDomainID);

            message.ClientUserDomainID = null;

            data = serializer.Serialize(message);
            Assert.IsNotNull(data);
            Assert.AreEqual(serializer.GetMessageInfoOrNull(data).Kind, MessageKind.RegisterPublicKeyRequest);

            savedMessage = serializer.DeserializeRegisterPublicKeyRequest(data);
            Assert.AreEqual(message.ClientUserDomainID, savedMessage.ClientUserDomainID);
        }
コード例 #2
0
 /// <summary>
 /// Отправляет запрос на регистрацию публичного ключа.
 /// </summary>
 /// <param name="request">Запрос.</param>
 /// <returns>Ответ.</returns>
 public RegisterPublicKeyResponse RegisterPublicKey(RegisterPublicKeyRequest request)
 {
     return(SendData(serializer => serializer.Serialize(request),
                     (s, serializer) =>
                     serializer.DeserializeRegisterPublicKeyResponse(s)));
 }
コード例 #3
0
ファイル: AuthService.cs プロジェクト: alexs0ff/remboard
        private void InternalUserRegistration(string login, string password, string notes)
        {
            try
            {
                RiseInfoStatusChanged("Регистрация пользователя");

                var user = ClientCore.Instance.DataStore.GetUser(login);
                if (user != null)
                {
                    if ((!string.IsNullOrWhiteSpace(user.PasswordHash)) && (!StringComparer.Ordinal.Equals(user.PasswordHash, BcryptHash(password))))
                    {
                        RiseAuthError("Пароль не совпадает с текущим на клиенте");
                        return;
                    }
                    var userKey = ClientCore.Instance.DataStore.GetCurrentUserKey(user.UserIDGuid);
                    if (userKey != null && userKey.IsActivatedBool)
                    {
                        _logger.InfoFormat("Пользователь с таким логином уже существует, отправка ключей невозможна {0}", login);
                        RiseAuthError("Такой пользователь уже есть");
                        return;
                    }
                }

                _logger.InfoFormat("Старт генерации ключей для пользователя {0}.", login);
                RiseInfoStatusChanged("Генерация ключей");

                var privateFilePath = Path.Combine(LocationUtils.GetFullPath(), PrivateKeyFileName);
                var publicFilePath  = Path.Combine(LocationUtils.GetFullPath(), PublicKeyFileName);
                ClientCore.Instance.CryptoService.CreateRsaKeyPair(publicFilePath, privateFilePath, password);

                if (!File.Exists(privateFilePath) || !File.Exists(publicFilePath))
                {
                    throw new Exception("Ключи не создались");
                } //if

                var publicKeyData  = File.ReadAllText(publicFilePath, _rsaKeyEncoding);
                var privateKeyData = File.ReadAllText(privateFilePath, _rsaKeyEncoding);

                RiseInfoStatusChanged("Отправка запроса на сервер");
                var domainId = ClientCore.Instance.DataStore.GetFirstUserDomainID();

                var request = new RegisterPublicKeyRequest();
                request.ClientUserDomainID = domainId;
                request.EventDate          = DateTime.Now;
                request.KeyNotes           = notes;
                request.PublicKeyData      = publicKeyData;
                request.UserLogin          = login;

                var response = ClientCore.Instance.WebClient.RegisterPublicKey(request);

                if (user == null)
                {
                    RiseInfoStatusChanged("Ответ получен, сохраняем локально пользователя");

                    user = new User();
                    user.DomainIDGuid = response.UserDomainID;
                    user.LoginName    = login;

                    user.FirstName     = string.Empty;
                    user.Email         = string.Empty;
                    user.LastName      = string.Empty;
                    user.Email         = string.Empty;
                    user.ProjectRoleID = ProjectRoleSet.GetMinimumRoleID();
                    user.Phone         = string.Empty;
                    user.PasswordHash  = BcryptHash(password);
                    ClientCore.Instance.DataStore.SaveUser(user);
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(user.PasswordHash))//при первой регистрации пользователя
                    {
                        user.PasswordHash = BcryptHash(password);
                        ClientCore.Instance.DataStore.SaveUser(user);
                    }
                }

                RiseInfoStatusChanged("Сохраняем пользовательский ключ");

                var key = new UserKey();
                key.EventDateDateTime = request.EventDate;
                key.UserIDGuid        = user.UserIDGuid;
                key.Number            = response.Number;
                key.PrivateKeyData    = privateKeyData;
                key.PublicKeyData     = publicKeyData;
                key.IsActivatedBool   = false;

                ClientCore.Instance.DataStore.SaveUserKey(key);//TODO удалить пользователя, если ключ не сохранился
                RiseInfoStatusChanged("Пользователь успешно зарегистрировался");
                RiseUserRegistredEventArgs(login);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex,
                                 string.Format("Во время регистрации ключей пользователя {0} произошла ошибка ", login));

                RiseAuthError(ex.Message, ex);
            } //try
        }