Exemple #1
0
        public async Task <string> SignIn(string nickname, string password)
        {
            await using var context = dbContextFactory.Create();

            var user = await context.Users
                       .Where(x => x.Nickname == nickname)
                       .FirstOrDefaultAsync();

            if (user == null)
            {
                throw new DatesException("No such user was found");
            }

            if (Hash(password) != user.PasswordHash)
            {
                throw new DatesException("Incorrect password");
            }

            return(JwtTool.IssueToken(user.Id));
        }
Exemple #2
0
        public async Task <string> SignUp(string nickname, string password)
        {
            if (string.IsNullOrWhiteSpace(nickname))
            {
                throw new DatesException("Invalid nickname");
            }

            if (string.IsNullOrWhiteSpace(password) || password.Length < 8)
            {
                throw new DatesException("Invalid password");
            }

            await using var context     = dbContextFactory.Create();
            await using var transaction = await context.Database.BeginTransactionAsync();

            var userExists = await context.Users
                             .Where(x => x.Nickname == nickname)
                             .AnyAsync();

            if (userExists)
            {
                throw new DatesException("User already exists");
            }

            var user = new User
            {
                Nickname     = nickname,
                PasswordHash = Hash(password)
            };

            context.Users.Add(user);

            await context.SaveChangesAsync();

            await transaction.CommitAsync();

            return(JwtTool.IssueToken(user.Id));
        }