void TryCreateCharacter(int gender)
        {
            if (Globals.WaitingOnServer || mDisplaySpriteIndex == -1)
            {
                return;
            }

            if (FieldChecking.IsValidUsername(mCharnameTextbox.Text, Strings.Regex.username))
            {
                if (mMaleChk.IsChecked)
                {
                    PacketSender.SendCreateCharacter(
                        mCharnameTextbox.Text, GetClass().Id, mMaleSprites[mDisplaySpriteIndex].Key
                        );
                }
                else
                {
                    PacketSender.SendCreateCharacter(
                        mCharnameTextbox.Text, GetClass().Id, mFemaleSprites[mDisplaySpriteIndex].Key
                        );
                }

                Globals.WaitingOnServer = true;
                ChatboxMsg.ClearMessages();
            }
            else
            {
                Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.CharacterCreation.invalidname));
            }
        }
Пример #2
0
        public object ChangeNameById(Guid userId, [FromBody] NameChange change)
        {
            if (!FieldChecking.IsValidUsername(change.Name, Strings.Regex.username))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Invalid name."
                           ));
            }

            if (Database.PlayerData.User.UserExists(change.Name))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Name already taken."
                           ));
            }

            var user = Database.PlayerData.User.Find(userId);

            if (user == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, $@"No user with id '{userId}'."));
            }

            user.Name = change.Name;
            user.Save();

            return(user);
        }
Пример #3
0
        public object UserChangeEmailById(Guid userId, [FromBody] AdminChange authorizedChange)
        {
            var email = authorizedChange.New;

            if (string.IsNullOrWhiteSpace(email))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, $@"Malformed email address '{email}'."));
            }

            if (!FieldChecking.IsWellformedEmailAddress(email, Strings.Regex.email))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, $@"Malformed email address '{email}'."));
            }

            var user = Database.PlayerData.User.Find(userId);

            if (user == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, $@"No user with id '{userId}'."));
            }

            if (Database.PlayerData.User.UserExists(email))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.Conflict, @"Email address already in use."));
            }

            user.Email = email;
            user.Save();

            return(user);
        }
Пример #4
0
        public object ChangeName(Guid guildId, [FromBody] NameChange change)
        {
            if (!FieldChecking.IsValidGuildName(change.Name, Strings.Regex.guildname))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Invalid guild name."
                           ));
            }

            var guild = Guild.LoadGuild(guildId);

            if (guild != null)
            {
                if (guild.Rename(change.Name))
                {
                    return(guild);
                }
                else
                {
                    return(Request.CreateErrorResponse(
                               HttpStatusCode.BadRequest,
                               $@"Invalid name, or name already taken."
                               ));
                }
            }

            return(Request.CreateErrorResponse(
                       HttpStatusCode.NotFound,
                       $@"No guild with id '{guildId}'."
                       ));
        }
Пример #5
0
        public object RegisterUser([FromBody] UserInfo user)
        {
            if (string.IsNullOrEmpty(user.Username) ||
                string.IsNullOrEmpty(user.Email) ||
                string.IsNullOrEmpty(user.Password))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Username, Email, and Password all must be provided, and not null/empty."
                           ));
            }

            if (!FieldChecking.IsWellformedEmailAddress(user.Email, Strings.Regex.email))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, $@"Malformed email address '{user.Email}'."
                           ));
            }

            if (!FieldChecking.IsValidUsername(user.Username, Strings.Regex.username))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, $@"Invalid username '{user.Username}'."));
            }

            if (Database.PlayerData.User.UserExists(user.Username))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, $@"Account already exists with username '{user.Username}'."
                           ));
            }
            else
            {
                if (Database.PlayerData.User.UserExists(user.Email))
                {
                    return(Request.CreateErrorResponse(
                               HttpStatusCode.BadRequest, $@"Account already with email '{user.Email}'."
                               ));
                }
                else
                {
                    DbInterface.CreateAccount(null, user.Username, user.Password.ToUpper().Trim(), user.Email);

                    return(new
                    {
                        Username = user.Username,
                        Email = user.Email,
                    });
                }
            }
        }
Пример #6
0
        /// <summary>
        /// Create a new Guild instance.
        /// </summary>
        /// <param name="creator">The <see cref="Player"/> that created the guild.</param>
        /// <param name="name">The Name of the guild.</param>
        public static Guild CreateGuild(Player creator, string name)
        {
            name = name.Trim();

            if (creator != null && FieldChecking.IsValidGuildName(name, Strings.Regex.guildname))
            {
                using (var context = DbInterface.CreatePlayerContext(readOnly: false))
                {
                    var guild = new Guild()
                    {
                        Name         = name,
                        FoundingDate = DateTime.UtcNow
                    };

                    SlotHelper.ValidateSlots(guild.Bank, Options.Instance.Guild.GuildBankSlots);
                    guild.Bank = guild.Bank.OrderBy(bankSlot => bankSlot?.Slot).ToList();

                    var player = context.Players.FirstOrDefault(p => p.Id == creator.Id);
                    if (player != null)
                    {
                        player.DbGuild       = guild;
                        player.GuildRank     = 0;
                        player.GuildJoinDate = DateTime.UtcNow;


                        context.ChangeTracker.DetectChanges();
                        context.SaveChanges();

                        var member = new GuildMember(player.Id, player.Name, player.GuildRank, player.Level, player.ClassName, player.MapName);
                        guild.Members.AddOrUpdate(player.Id, member, (key, oldValue) => member);

                        creator.Guild         = guild;
                        creator.GuildRank     = 0;
                        creator.GuildJoinDate = DateTime.UtcNow;

                        // Send our entity data to nearby players.
                        PacketSender.SendEntityDataToProximity(Player.FindOnline(creator.Id));

                        Guilds.AddOrUpdate(guild.Id, guild, (key, oldValue) => guild);

                        LogActivity(guild.Id, creator, null, GuildActivityType.Created, name);

                        return(guild);
                    }
                }
            }
            return(null);
        }
        public object ChangeName(LookupKey lookupKey, [FromBody] NameChange change)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            if (!FieldChecking.IsValidUsername(change.Name, Strings.Regex.username))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Invalid name."
                           ));
            }

            if (Player.PlayerExists(change.Name))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Name already taken."
                           ));
            }

            var(client, player) = Player.Fetch(lookupKey);
            if (player != null)
            {
                player.Name = change.Name;
                if (player.Online)
                {
                    PacketSender.SendEntityDataToProximity(player);
                }

                using (var context = DbInterface.CreatePlayerContext(false))
                {
                    context.Update(player);
                    context.SaveChanges();
                }

                return(player);
            }

            return(Request.CreateErrorResponse(
                       HttpStatusCode.NotFound,
                       lookupKey.HasId ? $@"No player with id '{lookupKey.Id}'." : $@"No player with name '{lookupKey.Name}'."
                       ));
        }
Пример #8
0
        public void TrySendCode()
        {
            if (Globals.WaitingOnServer)
            {
                return;
            }

            if (!Networking.Network.Connected)
            {
                Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.Errors.notconnected));

                return;
            }

            if (string.IsNullOrEmpty(mCodeInputTextbox?.Text))
            {
                Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.ResetPass.inputcode));

                return;
            }

            if (mPasswordTextbox.Text != mPasswordTextbox2.Text)
            {
                Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.Registration.passwordmatch));

                return;
            }

            if (!FieldChecking.IsValidPassword(mPasswordTextbox.Text, Strings.Regex.password))
            {
                Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.Errors.passwordinvalid));

                return;
            }

            using (var sha = new SHA256Managed())
            {
                PacketSender.SendResetPassword(
                    Target, mCodeInputTextbox?.Text,
                    BitConverter.ToString(sha.ComputeHash(Encoding.UTF8.GetBytes(mPasswordTextbox.Text.Trim())))
                    .Replace("-", "")
                    );
            }

            Globals.WaitingOnServer = true;
            ChatboxMsg.ClearMessages();
        }
Пример #9
0
        /// <summary>
        /// Renames this guild and then saves the new name to the db
        /// </summary>
        /// <param name="name"></param>
        /// <param name="initiator">The player who initiated this change (null if done by the api or some other method).</param>
        public bool Rename(string name, Player initiator = null)
        {
            if (GuildExists(name) || !FieldChecking.IsValidGuildName(name, Strings.Regex.guildname))
            {
                return(false);
            }

            Name = name;
            foreach (var member in FindOnlineMembers())
            {
                PacketSender.SendEntityDataToProximity(member);
            }
            LogActivity(Id, initiator, null, GuildActivityType.Rename, name);
            Save();

            return(true);
        }
Пример #10
0
        void TryCreateCharacter(int gender)
        {
            if (Globals.WaitingOnServer || mDisplaySpriteIndex == -1)
            {
                return;
            }

            if (FieldChecking.IsValidUsername(mCharnameTextbox.Text, Strings.Regex.username))
            {
                var customSpriteLayers = new int[(int)Enums.CustomSpriteLayers.CustomCount];
                if (mMaleChk.IsChecked)
                {
                    // Add our custom layers to the packet.
                    for (var i = 0; i < (int)Enums.CustomSpriteLayers.CustomCount; i++)
                    {
                        var layer = (Enums.CustomSpriteLayers)i;
                        customSpriteLayers[i] = mDisplayCustomSpriteLayerIndex[i] != -1 ? mMaleCustomSpriteLayers[layer][mDisplayCustomSpriteLayerIndex[i]].Key : -1;
                    }

                    PacketSender.SendCreateCharacter(
                        mCharnameTextbox.Text, GetClass().Id, mMaleSprites[mDisplaySpriteIndex].Key, customSpriteLayers
                        );
                }
                else
                {
                    // Add our custom layers to the packet.
                    for (var i = 0; i < (int)Enums.CustomSpriteLayers.CustomCount; i++)
                    {
                        var layer = (Enums.CustomSpriteLayers)i;
                        customSpriteLayers[i] = mDisplayCustomSpriteLayerIndex[i] != -1 ? mFemaleCustomSpriteLayers[layer][mDisplayCustomSpriteLayerIndex[i]].Key : -1;
                    }

                    PacketSender.SendCreateCharacter(
                        mCharnameTextbox.Text, GetClass().Id, mFemaleSprites[mDisplaySpriteIndex].Key, customSpriteLayers
                        );
                }

                Globals.WaitingOnServer = true;
                ChatboxMsg.ClearMessages();
            }
            else
            {
                Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.CharacterCreation.invalidname));
            }
        }
Пример #11
0
        public void TryLogin()
        {
            if (Globals.WaitingOnServer)
            {
                return;
            }

            if (!Networking.Network.Connected)
            {
                Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.Errors.notconnected));

                return;
            }

            if (!FieldChecking.IsValidUsername(mUsernameTextbox?.Text, Strings.Regex.username))
            {
                Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.Errors.usernameinvalid));

                return;
            }

            if (!FieldChecking.IsValidPassword(mPasswordTextbox?.Text, Strings.Regex.password))
            {
                if (!mUseSavedPass)
                {
                    Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.Errors.passwordinvalid));

                    return;
                }
            }

            var password = mSavedPass;

            if (!mUseSavedPass)
            {
                password = ComputePasswordHash(mPasswordTextbox?.Text?.Trim());
            }

            PacketSender.SendLogin(mUsernameTextbox?.Text, password);
            SaveCredentials();
            Globals.WaitingOnServer = true;
            mLoginBtn.Disable();
            ChatboxMsg.ClearMessages();
        }
Пример #12
0
        public void TrySendCode()
        {
            if (!Networking.Network.Connected)
            {
                Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.Errors.notconnected));

                return;
            }

            if (!FieldChecking.IsValidUsername(mInputTextbox?.Text, Strings.Regex.username) &&
                !FieldChecking.IsWellformedEmailAddress(mInputTextbox?.Text, Strings.Regex.email))
            {
                Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.Errors.usernameinvalid));

                return;
            }

            Interface.MenuUi.MainMenu.OpenResetPassword(mInputTextbox?.Text);
            PacketSender.SendRequestPasswordReset(mInputTextbox?.Text);
        }
Пример #13
0
        public object UserChangeEmailById(Guid userId, [FromBody] AuthorizedChange authorizedChange)
        {
            var email = authorizedChange.New;

            if (string.IsNullOrWhiteSpace(email))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, $@"Malformed email address '{email}'."));
            }

            if (!FieldChecking.IsWellformedEmailAddress(email, Strings.Regex.email))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, $@"Malformed email address '{email}'."));
            }

            var user = Database.PlayerData.User.Find(userId);

            if (user == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, $@"No user with id '{userId}'."));
            }

            if (!user.IsPasswordValid(authorizedChange.Authorization.ToUpper().Trim()))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.Forbidden, @"Invalid credentials."));
            }

            if (DbInterface.EmailInUse(email))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.Conflict, @"Email address already in use."));
            }

            user.Email = email;

            DbInterface.SavePlayerDatabaseAsync();

            return(user);
        }
        void TryRegister()
        {
            if (Globals.WaitingOnServer)
            {
                return;
            }

            if (Networking.Network.Connected)
            {
                if (FieldChecking.IsValidUsername(mUsernameTextbox.Text, Strings.Regex.username))
                {
                    if (mPasswordTextbox.Text == mPasswordTextbox2.Text)
                    {
                        if (FieldChecking.IsValidPassword(mPasswordTextbox.Text, Strings.Regex.password))
                        {
                            if (FieldChecking.IsWellformedEmailAddress(mEmailTextbox.Text, Strings.Regex.email))
                            {
                                Hide();

                                //Hash Password
                                using (var sha = new SHA256Managed())
                                {
                                    var hashedPass = BitConverter.ToString(
                                        sha.ComputeHash(Encoding.UTF8.GetBytes(mPasswordTextbox.Text.Trim()))
                                        )
                                                     .Replace("-", "");

                                    PacketSender.SendCreateAccount(
                                        mUsernameTextbox.Text, hashedPass, mEmailTextbox.Text
                                        );
                                }

                                Globals.WaitingOnServer = true;
                                mRegisterBtn.Disable();
                                ChatboxMsg.ClearMessages();
                            }
                            else
                            {
                                Interface.MsgboxErrors.Add(
                                    new KeyValuePair <string, string>("", Strings.Registration.emailinvalid)
                                    );
                            }
                        }
                        else
                        {
                            Interface.MsgboxErrors.Add(
                                new KeyValuePair <string, string>("", Strings.Errors.passwordinvalid)
                                );
                        }
                    }
                    else
                    {
                        Interface.MsgboxErrors.Add(
                            new KeyValuePair <string, string>("", Strings.Registration.passwordmatch)
                            );
                    }
                }
                else
                {
                    Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.Errors.usernameinvalid));
                }
            }
            else
            {
                Interface.MsgboxErrors.Add(new KeyValuePair <string, string>("", Strings.Errors.notconnected));
            }
        }