예제 #1
0
        public async Task <User> Login(string username, string password)
        {
            if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
            {
                Alertify.Push("Invalid username or password", AlertType.Error);
                return(null);
            }

            var user = await database.UserRepository.Find(u => u.Username.ToLower() == username.ToLower());

            if (user == null)
            {
                Alertify.Push("Invalid username or password", AlertType.Error);
                return(null);
            }

            if (user.IsBlocked)
            {
                Alertify.Push("Your account has been blocked", AlertType.Error);
                return(null);
            }

            if (Utils.VerifyPassword(password, user.PasswordHash, user.PasswordSalt))
            {
                if (!user.EmailConfirmed)
                {
                    Alertify.Push("Account is not confirmed", AlertType.Error);
                    return(null);
                }
                return(user);
            }

            Alertify.Push("Invalid username or password", AlertType.Error);
            return(null);
        }
예제 #2
0
        public async Task <bool> ChangeEmail(string newEmail)
        {
            if (await authService.EmailExists(newEmail))
            {
                Alertify.Push("Email already exists", AlertType.Error);
                return(false);
            }

            var user = await GetCurrentUser();

            user.SetEmail(newEmail);

            return(await database.Complete());
        }
예제 #3
0
        public async Task <User> Register(string username, string email, string password)
        {
            if (await EmailExists(email))
            {
                Alertify.Push("Email address already exists", AlertType.Error);
                return(null);
            }

            if (await UsernameExists(username))
            {
                Alertify.Push("Username already exists", AlertType.Error);
                return(null);
            }

            var passwordSalt       = Utils.CreateSalt();
            var saltedPasswordHash = Utils.GenerateHash(password, passwordSalt);

            var user = new UserBuilder()
                       .SetUserData(username, email)
                       .SetPassword(saltedPasswordHash, passwordSalt)
                       .Build();

            database.UserRepository.Add(user);

            if (await database.Complete())
            {
                var registerToken = Token.Create(TokenType.Register);
                user.Tokens.Add(registerToken);

                if (await database.Complete())
                {
                    string encryptedToken = cryptoService.Encrypt(registerToken.Code);
                    string callbackUrl    = $"{Configuration.GetValue<string>(AppSettingsKeys.ServerAddress)}Auth/ConfirmAccount?email={user.Email}&token={encryptedToken}";
                    return(await emailSender.Send(Constants.ActivationAccountEmail(email, username, callbackUrl)) ? user : null);
                }
                return(null);
            }
            else
            {
                Alertify.Push("Creating account failed", AlertType.Error);
                return(null);
            }
        }