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); }
/// <summary> /// Отправляет запрос на регистрацию публичного ключа. /// </summary> /// <param name="request">Запрос.</param> /// <returns>Ответ.</returns> public RegisterPublicKeyResponse RegisterPublicKey(RegisterPublicKeyRequest request) { return(SendData(serializer => serializer.Serialize(request), (s, serializer) => serializer.DeserializeRegisterPublicKeyResponse(s))); }
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 }