Пример #1
0
        public static Account CreateAccount(string email, string password)
        {
            var account = new Account(email, password);
            Accounts.Add(email, account);
            account.SaveToDB();

            return account;
        }
Пример #2
0
        public static Account CreateAccount(string email, string password, Account.UserLevels userLevel = Account.UserLevels.User)
        {
            var account = new Account(email, password, userLevel);
            Accounts.Add(email, account);
            account.SaveToDB();

            return account;
        }
Пример #3
0
 public static bool AreFriends(Account account1, Account account2)
 {
     foreach (var friend in Friends[account1.BnetEntityId.Low])
     {
         if (friend.Id.Low == account2.BnetEntityId.Low)
             return true;
     }
     return false;
 }
Пример #4
0
 public static bool InvitationExists(Account inviter, Account invitee)
 {
     foreach (var invitation in OnGoingInvitations.Values)
     {
         if ((invitation.InviterIdentity.AccountId == inviter.BnetEntityId) && (invitation.InviteeIdentity.AccountId == invitee.BnetEntityId))
             return true;
     }
     return false;
 }
Пример #5
0
        public static Account CreateAccount(string email, string password, string battleTag, Account.UserLevels userLevel = Account.UserLevels.User)
        {
            var hashCode = AccountManager.GetUnusedHashCodeForBattleTag(battleTag);
            var account = new Account(email, password, battleTag, hashCode, userLevel);
            Accounts.Add(email, account);
            account.SaveToDB();

            return account;
        }
Пример #6
0
        private void SendFriends(Account account)
        {
            if (!_friends.ContainsKey(account.BnetAccountID)) return;
            var friends = _friends[account.BnetAccountID];

            foreach (var friend in friends)
            {

            }
        }
Пример #7
0
        public static Account GetAccountByEmail(string email)
        {
            Account account;

            if (Accounts.ContainsKey(email))
                account = Accounts[email];
            else
            {
                account = new Account(email);
                Accounts.Add(email, account);
                account.SaveToDB();
            }

            return account;
        }
Пример #8
0
        private static void LoadAccounts()
        {
            var query = "SELECT * from accounts";
            var cmd = new SQLiteCommand(query, DBManager.Connection);
            var reader = cmd.ExecuteReader();

            if (!reader.HasRows) return;

            while (reader.Read())
            {
                var databaseId = (ulong)reader.GetInt64(0);
                var email = reader.GetString(1);
                var account = new Account(databaseId, email);
                Accounts.Add(email, account);
            }
        }
Пример #9
0
        public static bool DeleteAccount(Account account)
        {
            if (account == null) return false;
            if (!Accounts.ContainsKey(account.Email)) return false;

            try
            {
                var query = string.Format("DELETE from accounts where id={0}", account.PersistentID);
                var cmd = new SQLiteCommand(query, DBManager.Connection);
                cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                Logger.ErrorException(e, "DeleteAccount()");
                return false;
            }

            Accounts.Remove(account.Email);
            // we should be also disconnecting the account if he's online. /raist.

            return true;
        }
Пример #10
0
        public static Account CreateAccount(string email, string password, string battleTag, Account.UserLevels userLevel = Account.UserLevels.User)
        {
            if (password.Length > 16) password = password.Substring(0, 16); // make sure the password does not exceed 16 chars.
            var hashCode = GetRandomHashCodeForBattleTag();
            var salt = SRP6a.GetRandomBytes(32);
            var passwordVerifier = SRP6a.CalculatePasswordVerifierForAccount(email, password, salt);


            var newDBAccount = new DBAccount
                                   {
                                       Email = email,
                                       Salt = salt,
                                       PasswordVerifier = passwordVerifier,
                                       BattleTagName = battleTag,
                                       UserLevel = userLevel,
                                       HashCode = hashCode
                                   };


            DBSessions.AccountSession.SaveOrUpdate(newDBAccount);
            DBSessions.AccountSession.Flush();

            return GetAccountByDBAccount(newDBAccount);
        }
Пример #11
0
        private void SetField(Account owner)
        {
            this.Owner = owner;
            this.OwnerIdField.Value = owner.BnetEntityId;
            var bnetGameAccountHigh = ((ulong)EntityIdHelper.HighIdType.GameAccountId) + (0x6200004433);
            this.BnetEntityId = bnet.protocol.EntityId.CreateBuilder().SetHigh(bnetGameAccountHigh).SetLow(this.PersistentID).Build();
            this.D3GameAccountId = D3.OnlineService.EntityId.CreateBuilder().SetIdHigh(bnetGameAccountHigh).SetIdLow(this.PersistentID).Build();

            //TODO: Now hardcode all game account notifications to D3
            this.ProgramField.Value = "D3";
            this.GameAccountNameField.Value = Owner.BnetEntityId.Low.ToString() + "#1";
            this.BattleTagField.Value = this.Owner.BattleTag;

            this.Achievements = new List<bnet.protocol.achievements.AchievementUpdateRecord>();
            this.AchievementCriteria = new List<bnet.protocol.achievements.CriteriaUpdateRecord>();

        }
Пример #12
0
        private static void LoadAccounts()
        {
            var query = "SELECT * from accounts";
            var cmd = new SQLiteCommand(query, DBManager.Connection);
            var reader = cmd.ExecuteReader();

            if (!reader.HasRows) return;

            while (reader.Read())
            {
                var accountId = (ulong)reader.GetInt64(0);
                var email = reader.GetString(1);

                var salt = new byte[32];
                var readBytes = reader.GetBytes(2, 0, salt, 0, 32);

                var passwordVerifier = new byte[128];
                readBytes = reader.GetBytes(3, 0, passwordVerifier, 0, 128);

                var battleTagName = reader.GetString(4);

                var hashCode = reader.GetInt32(5);

                var userLevel = reader.GetByte(6);

                var account = new Account(accountId, email, salt, passwordVerifier, battleTagName, hashCode, (Account.UserLevels)userLevel);
                Accounts.Add(email, account);
            }
        }
Пример #13
0
        private void SetFields(string name, int hashCode, ToonClass @class, ToonFlags flags, byte level, Account owner,uint timePlayed)
        {
            this.ToonHandle = new ToonHandleHelper(this.PersistentID);
            this.D3EntityID = this.ToonHandle.ToD3EntityID();
            this.BnetEntityID = this.ToonHandle.ToBnetEntityID();
            this.Name = name;
            this.HashCode = hashCode;
            this.HashCodeString = HashCode.ToString("D3");
            this.Class = @class;
            this.Flags = flags;
            this.Level = level;
            this.Owner = owner;
            this.TimePlayed = timePlayed;

            var visualItems = new[]
            {                                
                D3.Hero.VisualItem.CreateBuilder().SetGbid(0).SetDyeType(0).SetItemEffectType(0).SetEffectLevel(0).Build(), // Head
                D3.Hero.VisualItem.CreateBuilder().SetGbid(0).SetDyeType(0).SetItemEffectType(0).SetEffectLevel(0).Build(), // Chest
                D3.Hero.VisualItem.CreateBuilder().SetGbid(0).SetDyeType(0).SetItemEffectType(0).SetEffectLevel(0).Build(), // Feet
                D3.Hero.VisualItem.CreateBuilder().SetGbid(0).SetDyeType(0).SetItemEffectType(0).SetEffectLevel(0).Build(), // Hands
                D3.Hero.VisualItem.CreateBuilder().SetGbid(0).SetDyeType(0).SetItemEffectType(0).SetEffectLevel(0).Build(), // Weapon (1)
                D3.Hero.VisualItem.CreateBuilder().SetGbid(0).SetDyeType(0).SetItemEffectType(0).SetEffectLevel(0).Build(), // Weapon (2)
                D3.Hero.VisualItem.CreateBuilder().SetGbid(0).SetDyeType(0).SetItemEffectType(0).SetEffectLevel(0).Build(), // Shoulders
                D3.Hero.VisualItem.CreateBuilder().SetGbid(0).SetDyeType(0).SetItemEffectType(0).SetEffectLevel(0).Build(), // Legs
            };

            this.Equipment = D3.Hero.VisualEquipment.CreateBuilder().AddRangeVisualItem(visualItems).Build();

        }
Пример #14
0
 public CommandGroupAttribute(string name, string help, Account.UserLevels minUserLevel = Account.UserLevels.User)
 {
     this.Name = name.ToLower();
     this.Help = help;
     this.MinUserLevel = minUserLevel;
 }
Пример #15
0
 public static Dictionary<ulong, Toon> GetToonsForAccount(Account account)
 {
     return Toons.Where(pair => pair.Value.Owner != null).Where(pair => pair.Value.Owner.PersistentID == account.PersistentID).ToDictionary(pair => pair.Key, pair => pair.Value);
 }
Пример #16
0
        private static void LoadAccounts()
        {
            var query = "SELECT * from accounts";
            var cmd = new SQLiteCommand(query, DBManager.Connection);
            var reader = cmd.ExecuteReader();

            if (!reader.HasRows) return;

            while (reader.Read())
            {
                var accountId = (ulong)reader.GetInt64(0);
                var email = reader.GetString(1);

                var salt = new byte[32];
                var readBytes = reader.GetBytes(2, 0, salt, 0, 32);

                var passwordVerifier = new byte[128];
                readBytes = reader.GetBytes(3, 0, passwordVerifier, 0, 128);

                var battleTagName = reader.GetString(4);

                var hashCode = reader.GetInt32(5);

                var userLevel = reader.GetByte(6);

                //Don't set all values in c-tor. 
                var account = new Account(accountId, email, salt, passwordVerifier, battleTagName, hashCode, (Account.UserLevels)userLevel);

                if (!reader.IsDBNull(7))
                {
                    var lastSelectedHeroId = reader.GetInt64(7);
                    account.LastSelectedHeroField.Value = D3.OnlineService.EntityId.CreateBuilder().SetIdHigh((ulong)EntityIdHelper.HighIdType.ToonId + (ulong)lastSelectedHeroId).SetIdLow((ulong)lastSelectedHeroId).Build();
                }

                Accounts.Add(email, account);
            }
        }
Пример #17
0
 public CommandAttribute(string command, string help, Account.UserLevels minUserLevel = Account.UserLevels.User)
 {
     this.Name = command.ToLower();
     this.Help = help;
     this.MinUserLevel = minUserLevel;
 }
Пример #18
0
 public Toon(string name, int classId, ToonFlags flags, byte level, Account account) // Toon with **newly generated** persistent ID
     : base(StringHashHelper.HashIdentity(name))
 {
     this.SetFields(name, GetClassByID(classId), flags, level, account);
 }
Пример #19
0
        private static void LoadAccounts()
        {
            var query = "SELECT * FROM accounts";
            var cmd = new SQLiteCommand(query, DBManager.Connection);
            var reader = cmd.ExecuteReader();

            if (!reader.HasRows) return;

            while (reader.Read())
            {
                var accountId = Convert.ToUInt64(reader["id"]);
                var email = Convert.ToString(reader["email"]);

                var salt = new byte[32];
                var readBytes = reader.GetBytes(2, 0, salt, 0, 32);

                var passwordVerifier = new byte[128];
                readBytes = reader.GetBytes(3, 0, passwordVerifier, 0, 128);

                var battleTagName = Convert.ToString(reader["battletagname"]);
                var hashCode = Convert.ToInt32(reader["hashCode"]);
                var userLevel = Convert.ToByte(reader["userLevel"]);

                var account = new Account(accountId, email, salt, passwordVerifier, battleTagName, hashCode, (Account.UserLevels)userLevel);
                account.LastOnlineField.Value = Convert.ToInt64(reader["LastOnline"]);
                Accounts.Add(email, account);
            }
        }
Пример #20
0
        private static void AddFriendshipToDB(Account inviter, Account invitee)
        {
            try
            {
                var query = string.Format("INSERT INTO friends (accountId, friendId) VALUES({0},{1}); INSERT INTO friends (accountId, friendId) VALUES({2},{3});", inviter.BnetEntityId.Low, invitee.BnetEntityId.Low, invitee.BnetEntityId.Low, inviter.BnetEntityId.Low);

                var cmd = new SQLiteCommand(query, DBManager.Connection);
                cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                Logger.ErrorException(e, "FriendManager.AddFriendshipToDB()");
            }
        }
Пример #21
0
        private void NotifyFriends(Account account)
        {

        }
Пример #22
0
 public static GameAccount CreateGameAccount(Account account)
 {
     var gameAccount = new GameAccount(account);
     GameAccounts.Add(gameAccount.PersistentID, gameAccount);
     gameAccount.SaveToDB();
     return gameAccount;
 }
Пример #23
0
 public static Dictionary<ulong, GameAccount> GetGameAccountsForAccountProgram(Account account, FieldKeyHelper.Program program)
 {
     return GameAccounts.Where(pair => pair.Value.Owner != null).Where(pair => (pair.Value.Owner.PersistentID == account.PersistentID) && (pair.Value.Program == program)).ToDictionary(pair => pair.Key, pair => pair.Value);
 }
Пример #24
0
 public DefaultCommand(Account.UserLevels minUserLevel = Account.UserLevels.User)
     : base("", "", minUserLevel)
 {
 }
Пример #25
0
 public CommandHandlerClient(Account account):base(null)
 {
     this.Account = account;            
 }
Пример #26
0
        /// <summary>
        /// New GameAccount
        /// </summary>
        /// <param name="account"></param>
        public GameAccount(Account account)
            : base(account.BnetEntityId.Low)
        {
            this.Owner = account;
            this.OwnerIdField.Value = Owner.BnetEntityId;

            this.SetField();

            this.BannerConfiguration =
                D3.Account.BannerConfiguration.CreateBuilder()
                .SetBannerShape(189701627)
                .SetSigilMain(1494901005)
                .SetSigilAccent(3399297034)
                .SetPatternColor(1797588777)
                .SetBackgroundColor(1797588777)
                .SetSigilColor(2045456409)
                .SetSigilPlacement(1015980604)
                .SetPattern(4173846786)
                .SetUseSigilVariant(true)
                .Build();
        }
Пример #27
0
        private static void RemoveFriendshipFromDB(Account remover, Account removee)
        {
            try
            {
                var query = string.Format("DELETE FROM friends WHERE accountId = {0} AND friendId = {1}; DELETE FROM friends WHERE accountId = {1} AND friendId = {0};", remover.BnetEntityId.Low, removee.BnetEntityId.Low);

                var cmd = new SQLiteCommand(query, DBManager.Connection);
                cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                Logger.ErrorException(e, "FriendManager.RemoveFriendshipFromDB()");
            }
        }
Пример #28
0
        public SRP6a(Account account)
        {
            this.Account = account;
            this.IdentitySalt = H.ComputeHash(Encoding.ASCII.GetBytes(this.Account.Email)).ToHexString(); // Identity salt that's hashed using account email.

            // calculate server's public ephemeral value.
            this.b = GetRandomBytes(128).ToBigInteger(); // server's secret ephemeral value.
            var gModb = BigInteger.ModPow(g, b, N); // pow(g, b, N)
            var k = H.ComputeHash(new byte[0].Concat(N.ToArray()).Concat(g.ToArray()).ToArray()).ToBigInteger(); // Multiplier parameter (k = H(N, g) in SRP-6a
            this.B = BigInteger.Remainder((this.Account.PasswordVerifier.ToBigInteger() * k) + gModb, N); // B = (k * v + pow(g, b, N)) % N

            // cook the logon challenge message
            this.LogonChallenge = new byte[0]
                .Concat(new byte[] { 0 }) // command = 0
                .Concat(this.IdentitySalt.ToByteArray()) // identity-salt - generated by hashing account email.
                .Concat(this.Account.Salt) // account-salt - generated on account creation.
                .Concat(B.ToArray()) // server's public ephemeral value (B)
                .Concat(SecondChallenge.ToArray()) // second challenge
                .ToArray();
        }
Пример #29
0
        private void SetFields(string name, ToonClass @class, ToonFlags flags, byte level, Account owner)
        {
            this.ToonHandle = new ToonHandleHelper(this.PersistentID);
            this.D3EntityID = this.ToonHandle.ToD3EntityID();
            this.BnetEntityID = this.ToonHandle.ToBnetEntityID();
            this.Name = name;
            this.Class = @class;
            this.Flags = flags;
            this.Level = level;
            this.Owner = owner;
           
            var visualItems = new[]
                            {
                                // Head
                                D3.Hero.VisualItem.CreateBuilder()
                                    .SetGbid(0)
                                    .SetDyeType(0)
                                    .SetItemEffectType(0)
                                    .SetEffectLevel(0)
                                    .Build(),

                                // Chest
                                D3.Hero.VisualItem.CreateBuilder()
                                    .SetGbid(0)
                                    .SetDyeType(0)
                                    .SetItemEffectType(0)
                                    .SetEffectLevel(0)
                                    .Build(),

                                // Feet
                                D3.Hero.VisualItem.CreateBuilder()
                                    .SetGbid(0)
                                    .SetDyeType(0)
                                    .SetItemEffectType(0)
                                    .SetEffectLevel(0)
                                    .Build(),

                                // Hands
                                D3.Hero.VisualItem.CreateBuilder()
                                    .SetGbid(0)
                                    .SetDyeType(0)
                                    .SetItemEffectType(0)
                                    .SetEffectLevel(0)
                                    .Build(),

                                // Weapon (1)
                                D3.Hero.VisualItem.CreateBuilder()
                                    .SetGbid(0)
                                    .SetDyeType(0)
                                    .SetItemEffectType(0)
                                    .SetEffectLevel(0)
                                    .Build(),

                                // Weapon (2)
                                D3.Hero.VisualItem.CreateBuilder()
                                    .SetGbid(0)
                                    .SetDyeType(0)
                                    .SetItemEffectType(0)
                                    .SetEffectLevel(0)
                                    .Build(),

                                // Shoulders
                                D3.Hero.VisualItem.CreateBuilder()
                                    .SetGbid(0)
                                    .SetDyeType(0)
                                    .SetItemEffectType(0)
                                    .SetEffectLevel(0)
                                    .Build(),

                                // Legs
                                D3.Hero.VisualItem.CreateBuilder()
                                    .SetGbid(0)
                                    .SetDyeType(0)
                                    .SetItemEffectType(0)
                                    .SetEffectLevel(0)
                                    .Build(),
                            };


            this.Equipment = D3.Hero.VisualEquipment.CreateBuilder().AddRangeVisualItem(visualItems).Build();

            this.Digest = D3.Hero.Digest.CreateBuilder().SetVersion(891)
                .SetHeroId(this.D3EntityID)
                .SetHeroName(this.Name)
                .SetGbidClass((int)this.ClassID)
                .SetPlayerFlags((uint)this.Flags)
                .SetLevel(this.Level)
                .SetVisualEquipment(this.Equipment)
                .SetLastPlayedAct(0)
                .SetHighestUnlockedAct(0)
                .SetLastPlayedDifficulty(0)
                .SetHighestUnlockedDifficulty(0)
                .SetLastPlayedQuest(-1)
                .SetLastPlayedQuestStep(-1)
                .SetTimePlayed(0)
                .Build();
        }
Пример #30
0
 public static void UpdateUserLevel(this Account account, Account.UserLevels userLevel)
 {
     account.UserLevel = userLevel;
     try
     {
         SaveToDB(account);
     }
     catch (Exception e)
     {
         Logger.ErrorException(e, "UpdateUserLevel()");
     }
 }