Example #1
0
        // return a list of errors if at least one of the fields is invalid
        static Dictionary <string, string> ValidateFields(Schemes.SubmitPayload payload)
        {
            var errors = new Dictionary <string, string>();

            string result = ValidateEmail(payload.Email);

            if (result is string)
            {
                errors.Add(nameof(payload.Email), result);
            }

            result = Account.Service.ValidateUsername(payload.Username);
            if (result is string)
            {
                errors.Add(nameof(payload.Username), result);
            }

            result = Account.Service.ValidatePassword(payload.Password);
            if (result is string)
            {
                errors.Add(nameof(payload.Password), result);
            }
            else if (payload.Password != payload.RepeatPassword)
            {
                errors.Add(nameof(payload.RepeatPassword), Resources.ERROR_PASSWORD_DONT_MATCH);
            }

            if (!string.IsNullOrEmpty(payload.PromoCode))
            {
                Regex regex = new Regex(Account.Resources.USERNAME_REGEX);
                if (regex.IsMatch(payload.PromoCode) == false)
                {
                    errors.Add(nameof(payload.PromoCode), Resources.ERROR_PROMO_CODE_INVALID);
                }
            }

            if (!payload.Agreement)
            {
                errors.Add(nameof(payload.Agreement), Resources.ERROR_AGREEMENT_NOT_SATISFIED);
            }

            return(errors);
        }
Example #2
0
        public static void RegisterAccount(Client player, Schemes.SubmitPayload payload)
        {
            Dictionary <string, string> errors = ValidateFields(payload);

            if (errors.Count > 0)
            {
                Bus.TriggerUi(player, Shared.Events.REGISTER_SUBMIT_ERROR, errors);
                return;
            }

            if (Account.Service.GetAccountEntityByUsername(payload.Username) is Entity)
            {
                errors.Add(nameof(payload.Username), Resources.ERROR_USERNAME_EXISTS);
                Bus.TriggerUi(player, Shared.Events.REGISTER_SUBMIT_ERROR, errors);
                return;
            }

            if (GetAccountEntityByEmail(payload.Email) is Entity)
            {
                errors.Add(nameof(payload.Email), Resources.ERROR_EMAIL_EXISTS);
                Bus.TriggerUi(player, Shared.Events.REGISTER_SUBMIT_ERROR, errors);
                return;
            }

            using (var database = new Database())
            {
                var account = new Account.Entity(
                    email: payload.Email,
                    username: payload.Username,
                    password: BCrypt.Net.BCrypt.HashPassword(payload.Password),
                    promoCode: payload.PromoCode,
                    registerDate: Utils.DateTimeNow
                    );

                database.Accounts.Add(account);
                database.SaveChanges();

                Bus.TriggerUi(player, Shared.Events.REGISTER_SUBMIT_OK);
            }
        }