public async Task <SessionDto> AddNewSessionAsync(string nickname, string salt)
        {
            string token     = SessionsService.GenerateNewSessionToken();
            string tokenHash = await HashingService.GetHashAsync(token, salt, HashingType.Weak).ConfigureAwait(false);

            this.UnitOfWork.SessionsRepository.Add(new Session()
            {
                Token    = tokenHash,
                Nickname = nickname,
                From     = DateTime.Now
            });

            return(new SessionDto()
            {
                Nickname = nickname,
                Token = token
            });
        }
        public async Task <SessionDto> CheckAndUpdateSessionAsync(SessionDto session)
        {
            var user = await this.UnitOfWork.UsersRepository.GetUniqueAsync(e => e.Nickname == session.Nickname).ConfigureAwait(false);

            if (user == null)
            {
                throw new SessionException("You should re-enter your credentials.");
            }

            var tokenHash = await HashingService.GetHashAsync(session.Token, user.Salt, HashingType.Weak).ConfigureAwait(false);

            var sessionObj = await this.UnitOfWork.SessionsRepository.GetUniqueAsync(e => e.Token == tokenHash).ConfigureAwait(false);

            if (sessionObj == null)
            {
                throw new SessionException("You should re-enter your credentials.");
            }

            if (sessionObj.Nickname != session.Nickname)
            {
                throw new SessionException("You should re-enter your credentials.");
            }

            string newToken = SessionsService.GenerateNewSessionToken();

            sessionObj.Token = await HashingService.GetHashAsync(newToken, user.Salt, HashingType.Weak).ConfigureAwait(false);

            sessionObj.From = DateTime.Now;
            await this.UnitOfWork.CommitAsync().ConfigureAwait(false);

            return(new SessionDto
            {
                Nickname = session.Nickname,
                Token = newToken
            });
        }