public async Task <File> Handle(RegisterUserCommand request, CancellationToken cancellationToken)
        {
            await _validator.ValidateAndThrowAsync(request, null, cancellationToken);

            var keys = await _ecdsa.GetKeysAsync();

            var encryptedPrivateKey = string.Empty;
            var encryptionResponse  = _encryptor.Encrypt(keys.PrivateKey, request.PrivateKeyPassword.Sha256AsBytes());

            if (encryptionResponse.Status == Status.Success)
            {
                encryptedPrivateKey = encryptionResponse.EncryptedText;
            }

            var user = new User
            {
                Username           = request.Username,
                Password           = request.Password.Sha512(),
                PublicKey          = keys.PublicKey,
                PrivateKey         = encryptedPrivateKey,
                PrivateKeyPassword = request.PrivateKeyPassword.Sha512()
            };

            await _userRepository.AddAsync(user, cancellationToken);

            return(new File
            {
                Name = "private.sk"
            });
        }
예제 #2
0
        public BaseVM(IBlogConfig blogConfig, IHttpContextAccessor httpContextAccessor, IAesEncryptor aceEncryptor)
        {
            _blogConfig          = blogConfig;
            _httpContextAccessor = httpContextAccessor;
            this._aceEncryptor   = aceEncryptor;
            var data = new TokenValidateViewModel
            {
                SessionId = Guid.NewGuid(),
                Time      = DateTime.Now.ToFileTime(),
                Token     = CodeMazeConfiguration.TokenValidatePost
            };

            MazeToken = _aceEncryptor.Encrypt(JsonConvert.SerializeObject(data));

            if (_httpContextAccessor.HttpContext.Session.HasValue(SessionHelper.SessionLogin))
            {
                UserClaim = _httpContextAccessor.HttpContext.Session.Get <UserClaim>(SessionHelper.SessionLogin);
            }
        }
예제 #3
0
        public CreateUserResponse CreateUser(CreateUserRequest request)
        {
            var response = new CreateUserResponse();

            using (var context = new DatabaseContext())
                using (var transaction = context.Database.BeginTransaction())
                {
                    try
                    {
                        var user = context.Users.FirstOrDefault(x => _encryptor.Decrypt(x.UserToken) == request.User.UserToken);

                        if (user == null)
                        {
                            context.Add(new UserRecord
                            {
                                UserToken = _encryptor.Encrypt(request.User.UserToken),
                                Username  = _encryptor.Encrypt(request.User.Username),
                                Picture   = _encryptor.Encrypt(request.User.Picture),
                                Active    = true
                            });

                            context.SaveChanges();
                            transaction.Commit();
                        }
                        else
                        {
                            if (user.Active)
                            {
                                throw new UserAlreadyExistsException("User has already been registered");
                            }

                            user.UserToken = _encryptor.Encrypt(request.User.UserToken);
                            user.Username  = _encryptor.Encrypt(request.User.Username);
                            user.Picture   = _encryptor.Encrypt(request.User.Picture);
                            user.Active    = true;

                            context.SaveChanges();
                            transaction.Commit();
                        }
                    }
                    catch (UserAlreadyExistsException exception)
                    {
                        transaction.Rollback();
                        response.AddError(new Error
                        {
                            Code             = ErrorCodes.UserAlreadyExists,
                            UserMessage      = "User with that UserToken already exists.",
                            TechnicalMessage = $"The following exception was thrown: {exception.Message}"
                        });
                    }
                    catch (Exception exception)
                    {
                        transaction.Rollback();
                        response.AddError(new Error
                        {
                            Code             = ErrorCodes.DatabaseError,
                            UserMessage      = "Something went wrong when creating your account. Please try again later.",
                            TechnicalMessage = $"The following exception was thrown: {exception.Message}"
                        });
                    }
                }

            return(response);
        }
예제 #4
0
        public string EncryptPassword(string clearPassword)
        {
            var str = _encryptionService.Encrypt(clearPassword);

            return(str);
        }