Ejemplo n.º 1
0
        void Save()
        {
            StartSession();

            var realname = Form.Find("Realname");
            var birth    = Form.Find("Birth");
            var gender   = Form.Find <int>("Gender");
            var phone    = Form.Find("Phone");

            var account = JsonSerializer.Deserialize <Account>(Session["account"]);

            account = RowAdapter.Load <Account>(p => p.ID == account.ID).FirstOrDefault();
            if (account == null)
            {
                WrapResult(false, "save fail!");
                return;
            }

            account.Realname = realname;
            account.Birth    = DateTime.Parse(birth);
            account.Gender   = (Gender)gender;
            account.Phone    = phone;
            account.Save();
            Session["account"] = JsonSerializer.Serialize(account);

            WrapResult(true, "save success!");
        }
Ejemplo n.º 2
0
        void Refresh()
        {
            var token = Form.Find("refresh_token");

            var access = RowAdapter.LoadFirstOrDefault <Access>(p => p.RefreshToken == token);

            if (access == null)
            {
                WrapResult(false, "invaild access!");
                return;
            }

            access.Refresh();
            access.Save();
            if (!access.Available)
            {
                WrapResult(false, "invaild access!");
                return;
            }

            var json = new JsonObject();

            json["access_token"] = access.AccessToken;
            json["expires_in"]   = (access.DeathLine - DateTime.Now).TotalSeconds;
            WrapResult(true, json);
        }
Ejemplo n.º 3
0
        public RoomModel(DataRow Row)
        {
            using (RowAdapter Adapter = new RowAdapter(Row))
            {
                this.Id = Adapter.PopInt32("id");
                this.Caption = Adapter.PopString("caption");
                this.Map = Adapter.PopString("map").Replace(((char)10).ToString(),string.Empty);
                this.LocationDoorX = Adapter.PopInt32("location_door_x");
                this.LocationDoorY = Adapter.PopInt32("location_door_y");
                this.LocationDoorZ = Adapter.PopInt32("location_door_z");
                this.LocationDoorRotation = Adapter.PopInt32("location_door_rotation");
                this.MaximalUnits = Adapter.PopInt32("maximal_units");
                this.RequiredMembership = Adapter.PopEnum<Membership>("required_membership");
            }

            this.Nodes = new List<TileNode>();

            for (int y = 0; y < this.Map.Split((char)13).Length; y++)
            {
                var Line = this.Map.Split((char)13)[y];

                for (int x = 0; x < Line.Length; x++)
                {
                    char Item = Line[x];

                    TileNode Node = new TileNode(Item, x, y);

                    Nodes.Add(Node);
                }
            }

            this.ParametersWithDoor = GetParametersWithDoor();
            this.ParametersWithOutDoor = GetParametersWithOutDoor();
        }
Ejemplo n.º 4
0
        public Achievement(DataRow Row)
        {
            using (RowAdapter Adapter = new RowAdapter(Row))
            {
                Id = Adapter.PopInt32("id");
                CategoryId = Adapter.PopInt32("category_id");
                BadgeId = Adapter.PopInt32("badge_id");
                PixelReward = Adapter.PopInt32("pixel_reward");
                ScoreReward = Adapter.PopInt32("score_reward");
                PixelMultiply = Adapter.PopDouble("pixel_multiply");
                ScoreMultiply = Adapter.PopDouble("score_multiply");
                EnableBadgeBuilding = Adapter.PopBoolean("enable_bagde_building");
            }

            Limits = new Dictionary<int, int>();

            foreach (DataRow LimitRow in System.MySQLManager.GetObject(new AchievementLimitsQuery(Id)).GetOutput<DataTable>().Rows)
            {
                using (RowAdapter Adapter = new RowAdapter(LimitRow))
                {
                    int Level = Adapter.PopInt32("level");
                    int Limit = Adapter.PopInt32("required");

                    if (Limit < 0)
                    {
                        Limit = 1;
                    }

                    if (!Limits.ContainsKey(Level))
                    {
                        Limits.Add(Level, Limit);
                    }
                }
            }
        }
Ejemplo n.º 5
0
        void UserInfo()
        {
            var token  = Form.Find("access_token");
            var access = RowAdapter.LoadFirstOrDefault <Access>(p => p.AccessToken == token);

            if (access == null)
            {
                WrapResult(false, "invaild access_token!");
                return;
            }
            if (!access.Available)
            {
                WrapResult(false, "access_token expire!");
                return;
            }

            var account = RowAdapter.LoadFirstOrDefault <Account>(p => p.ID == access.OwnerID);
            var json    = new JsonObject();

            json["app_id"]    = access.AppID;
            json["open_id"]   = account.OpenID;
            json["nick_name"] = account.Nickname;
            json["real_name"] = account.Realname;
            json["gender"]    = account.Gender;
            json["phone"]     = account.Phone;
            WrapResult(true, json);
        }
Ejemplo n.º 6
0
        void AppInfo()
        {
            long appID;

            if (!Form.TryGet("app_id", out appID))
            {
                WrapResult(false, "invalid param!");
                return;
            }

            var app = RowAdapter.LoadFirstOrDefault <App>(p => p.ID == appID && p.Deleted == false);

            if (app == null)
            {
                WrapResult(false, "not found app!");
                return;
            }

            var json = new JsonObject();

            json["name"]   = app.Name;
            json["domain"] = app.Domain;
            json["icon"]   = app.IconURL;
            WrapResult(true, json);
        }
Ejemplo n.º 7
0
        void Update()
        {
            var id      = Form.Find <long>("ID");
            var account = RowAdapter.LoadFirstOrDefault <Account>(p => p.ID == id && p.Deleted == false);

            if (account == null)
            {
                WrapResult(false, "未找到指定账号!");
                return;
            }

            var view = EntitySchemaManager.GetSchema <Account>(true);

            foreach (var column in view.Columns)
            {
                string str;
                if (Form.TryGet(column.Name, out str))
                {
                    var json  = Json.Parse(str);
                    var value = JsonSerializer.Deserialize(json, column.PropertyType);
                    column.SetValue(account, value);
                }
            }

            account.Save();
            var myaccount = JsonSerializer.Deserialize <Account>(Session["account"]);

            if (account.ID == myaccount.ID)
            {
                Session["account"] = JsonSerializer.Serialize(account);
            }

            WrapResult(true, FromAccount(account));
        }
Ejemplo n.º 8
0
        public Character(DataRow Row)
        {
            using (RowAdapter Adapter = new RowAdapter(Row))
            {
                this.Id = Adapter.PopInt32("id");
                this.Username = Adapter.PopString("username");
                this.Motto = Adapter.PopString("motto");
                this.Figure = Adapter.PopString("figure");
                this.Registered = Adapter.PopString("registered_stamp");
                this.LastSeen = Adapter.PopString("last_seen");
                this.Gender = Adapter.PopEnum<Gender>("gender");
                this.Muted = Adapter.PopBoolean("muted");
                this.AllowNewFriends = Adapter.PopBoolean("allow_new_friends");
                this.Rank = System.HabboSystem.CharacterManager.GetRank(Adapter.PopInt32("rank"));
                this.Credits = Adapter.PopInt32("credits");
                this.ActivityPoints = Adapter.PopInt32("activity_points");
                this.SoundSettings = Adapter.PopInt32("sound_settings");
                this.TimeOnline = Adapter.PopInt32("time_online");
                this.HomeRoom = Adapter.PopInt32("home_room");
                this.RespectEarned = Adapter.PopInt32("respect_earned");
                this.RespectGiven = Adapter.PopInt32("respect_given");
                this.RespectLeftHuman = Adapter.PopInt32("respect_left_human");
                this.RespectLeftAnimal = Adapter.PopInt32("respect_left_animal");

                this.LoadingRoom = 0;
                this.ConnectedRoom = 0;
            }
        }
Ejemplo n.º 9
0
 public BadgeInformation(DataRow Row)
 {
     using (RowAdapter Adapter = new RowAdapter(Row))
     {
         Id = Adapter.PopInt32("id");
         BadgeCode = Adapter.PopString("badge_code");
     }
 }
Ejemplo n.º 10
0
        void GetFirendList()
        {
            var       token       = Form.Find("access_token");
            var       openStrings = Form.Find("opens");
            JsonArray opens;

            if (!Json.TryParse <JsonArray>(openStrings, out opens))
            {
                WrapResult(false, "invaild param: opens!");
                return;
            }
            if (string.IsNullOrEmpty(token))
            {
                WrapResult(false, "nvaild param: access_token");
                return;
            }
            if (opens.Count == 0)
            {
                WrapResult(false, "opens length error!");
                return;
            }

            var access = RowAdapter.LoadFirstOrDefault <Access>(p => p.AccessToken == token);

            if (access == null)
            {
                WrapResult(false, "invaild access_token!");
                return;
            }
            if (!access.Available)
            {
                WrapResult(false, "access_token expire!");
                return;
            }

            var view          = EntitySchemaManager.GetSchema <Account>(true);
            var dbProvider    = DbFactory.Gain(view.ConnectKey);
            var commandStruct = dbProvider.CreateCommand <Account>(view.Name, DbCommandMode.Select);
            var member        = SqlExpression.Member(view.Columns.First(p => p.Name == "OpenID").Name);
            var newArray      = SqlExpression.NewArray(opens.Select(p => SqlExpression.Constant((string)p)).ToArray());

            commandStruct.Condition = SqlExpression.In(member, newArray);
            var accounts = RowAdapter.Load <Account>(dbProvider, commandStruct);
            var array    = new JsonArray();

            foreach (var account in accounts)
            {
                var json = new JsonObject();
                json["open_id"]   = account.OpenID;
                json["nick_name"] = account.Nickname;
                json["real_name"] = account.Realname;
                json["gender"]    = account.Gender;
                json["available"] = account.Available;
                array.Add(json);
            }

            WrapResult(true, array);
        }
Ejemplo n.º 11
0
 public CharacterRank(DataRow Row)
 {
     using (RowAdapter Adapter = new RowAdapter(Row))
     {
         this.Id = Adapter.PopInt32("id");
         this.Caption = Adapter.PopString("caption");
         this.ShowCaptionInGame = Adapter.PopBoolean("show_caption_ingame");
     }
 }
Ejemplo n.º 12
0
 public Character(DataRow Row)
 {
     using (var Adapter = new RowAdapter(Row))
     {
         this.Id = Adapter.Get<int>("id");
         this.Username = Adapter.Get<string>("username");
         this.ActivityPoints = Adapter.Get<int>("activity_points");
         this.Credits = Adapter.Get<int>("credits");
     }
 }
Ejemplo n.º 13
0
        void List()
        {
            var appList     = RowAdapter.Load <App>(p => p.OwnerID == _account.ID && p.Deleted == false);
            var arrayForApp = new JsonArray();

            foreach (var app in appList)
            {
                var json = JsonSerializer.Serialize(app);
                arrayForApp.Add(json);
            }
            WrapResult(true, arrayForApp);
        }
Ejemplo n.º 14
0
 public Room(DataRow Row)
 {
     using (RowAdapter Adapter = new RowAdapter(Row))
     {
         this.Id = Adapter.PopInt32("id");
         this.Caption = Adapter.PopString("caption");
         this.Description = Adapter.PopString("description");
         this.CharacterId = Adapter.PopInt32("character_id");
         this.ModelId = Adapter.PopInt32("model_id");
         this.DoorState = Adapter.PopEnum<DoorState>("door_state");
         this.Password = Adapter.PopString("password");
     }
 }
Ejemplo n.º 15
0
        void Delete()
        {
            var id      = Form.Find <long>("id");
            var account = RowAdapter.Load <Account>(p => p.Deleted == false && p.ID == id).FirstOrDefault();

            if (account == null)
            {
                WrapResult(false, "指定帐号不存在!");
                return;
            }

            account.Delete();
            WrapResult(true);
        }
Ejemplo n.º 16
0
        void List()
        {
            var account = JsonSerializer.Deserialize <Account>(Session["account"]);

            if (account.AdminType <= AdminType.普通)
            {
                WrapResult(false, "无权操作!");
                return;
            }

            var accounts = RowAdapter.Load <Account>(p => p.Deleted == false);

            WrapResult(true, accounts);
        }
Ejemplo n.º 17
0
        public override void OnViewCreated(View view, Bundle savedInstanceState)
        {
            base.OnViewCreated(view, savedInstanceState);
            contactList = new List <Row> {
                new Row("Undef1", "undef1"), new Row("Undef2", "undef2"), new Row("Undef3", "undef3")
            };

            listV = View.FindViewById <ListView>(Resource.Id.listFragment);


            RowAdapter listAdapter = new RowAdapter(Context, contactList);

            listV.Adapter    = listAdapter;
            listV.ItemClick += OpenDetails;
        }
Ejemplo n.º 18
0
        void Delete()
        {
            long id = Form.Find <long>("app_id");

            var apps = RowAdapter.Load <App>(p => p.OwnerID == _account.ID && p.Deleted == false && p.ID == id);
            var app  = apps.FirstOrDefault();

            if (app == null)
            {
                WrapResult(false, "not found app id:" + id);
                return;
            }

            app.Delete();
            WrapResult(true);
        }
Ejemplo n.º 19
0
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            SetContentView(Resource.Layout.Main);



            listV = FindViewById <ListView>(Resource.Id.listFragment);
            RowAdapter listAdapter = new RowAdapter(this, contactList);

            listV.Adapter    = listAdapter;
            listV.ItemClick += OpenDetails;

            var          orientation = new DeviceOrientationImplementation();
            LinearLayout root        = FindViewById <LinearLayout>(CoolLooks.Resource.Id.Root);

            switch (orientation.GetOrientation())
            {
            case DeviceOrientations.Undefined:
                throw new Exception();
                break;

            case DeviceOrientations.Landscape:
                root.Orientation = Orientation.Vertical;
                break;

            case DeviceOrientations.Portrait:
                root.Orientation = Orientation.Horizontal;
                break;
            }



            DetailFragment detailsFragment = new DetailFragment();

            var trans = SupportFragmentManager.BeginTransaction();

            trans.Replace(Resource.Id.DetailsRoot, detailsFragment, "Details");

            Fragments.MyListFragment listFragment = new Fragments.MyListFragment();

            var listTrans = SupportFragmentManager.BeginTransaction();

            trans.Replace(Resource.Id.ListRoot, listFragment, "List");
        }
Ejemplo n.º 20
0
        void New()
        {
            var name   = Form.Find("app_name");
            var domain = Form.Find("app_domain");
            var icon   = Form.Find("icon");

            var app = RowAdapter.Create <App>();

            app.OwnerID = _account.ID;
            app.Name    = name;
            app.Domain  = domain;
            app.IconURL = icon;
            app.Save();

            var json = new JsonObject();

            json["ID"] = app.ID;
            WrapResult(true, json);
        }
Ejemplo n.º 21
0
        public void Delete()
        {
            var id     = Form.Find <long>("id");
            var invite = RowAdapter.Load <Invite>(p => p.ID == id && p.Deleted == false).FirstOrDefault();

            if (invite == null)
            {
                WrapResult(ResultCode.InvalidParam, string.Format("not found Invite.ID:{0}", id));
                return;
            }
            if (!invite.Available)
            {
                WrapResult(ResultCode.InvalidAction, "不能删除已使用的邀请码!");
                return;
            }

            invite.Delete();
            WrapResult(ResultCode.OK);
        }
Ejemplo n.º 22
0
        void Update()
        {
            long id     = Form.Find <long>("app_id");
            var  name   = Form.Find("app_name");
            var  domain = Form.Find("app_domain");

            var apps = RowAdapter.Load <App>(p => p.OwnerID == _account.ID && p.Deleted == false && p.ID == id);
            var app  = apps.FirstOrDefault();

            if (app == null)
            {
                WrapResult(false, "not found app id:" + id);
                return;
            }

            app.Name   = name;
            app.Domain = domain;
            app.Save();
            WrapResult(true, FromApp(app));
        }
Ejemplo n.º 23
0
        protected override void OnStartup()
        {
            var sb = new SqlConnectionStringBuilder();

            sb.DataSource         = "(local)";
            sb.IntegratedSecurity = true;
            sb.InitialCatalog     = "Manager.OAuth";
            DbFactory.Register("OAuth", new MsSqlDbProvider(10, sb.ConnectionString));

            EntitySchemaManager.LoadAssemblys(new Assembly[] { typeof(App).Assembly });
            foreach (var dbProvider in DbFactory.DbProviders)
            {
                EntityUtils.CheckCreateDatabase(dbProvider.ConnectionString);
            }
            foreach (var view in EntitySchemaManager.Schemas)
            {
                EntityUtils.CheckSchema(view);
                RowAdapter.LoadPrimary(view);
            }
        }
Ejemplo n.º 24
0
        public AchievementCategory(DataRow Row)
        {
            using (RowAdapter Adapter = new RowAdapter(Row))
            {
                Id = Adapter.PopInt32("id");
                Caption = Adapter.PopString("caption");
            }

            Achievements = new Dictionary<int, Achievement>();

            foreach (DataRow AchievementRow in System.MySQLManager.GetObject(new AchievementsQuery(Id)).GetOutput<DataTable>().Rows)
            {
                Achievement Achievement = new Achievement(AchievementRow);

                if (!Achievements.ContainsKey(Achievement.Id))
                {
                    Achievements.Add(Achievement.Id, Achievement);
                }
            }
        }
Ejemplo n.º 25
0
        public void Build()
        {
            var count = Form.Find <int>("count");

            if (count <= 0)
            {
                WrapResult(ResultCode.InvalidParam, "参数错误!");
                return;
            }

            var result = new List <Invite>();

            for (int i = 0; i < count; i++)
            {
                var invite = RowAdapter.Create <Invite>();
                result.Add(invite);
                invite.Save();
            }

            WrapResult(ResultCode.OK, result);
        }
Ejemplo n.º 26
0
        void ChangePassword()
        {
            var oldPassword = Form.Find("old_password");
            var newPassword = Form.Find("new_password");
            var account     = JsonSerializer.Deserialize <Account>(Session["account"]);

            account = RowAdapter.LoadFirst <Account>(p => p.ID == account.ID);
            if (account == null)
            {
                WrapResult(false, "指定帐号不存在!");
                return;
            }
            if (!account.Available)
            {
                WrapResult(false, "该帐号不可用!");
                return;
            }
            account.CheckErrorReset();
            if (account.TodayErrorTimes >= MaxErrorTimes)
            {
                WrapResult(false, "您的账号已被限制登录!");
                return;
            }
            if (account.Password != oldPassword)
            {
                account.TodayErrorTimes++;
                account.TotalErrorTimes++;
                account.Save();
                WrapResult(false, "密码错误!");
                return;
            }

            account.Password = newPassword;
            account.ResetError();
            account.Save();
            Session["account"] = JsonSerializer.Serialize(account);
            WrapResult(true, "修改成功");
        }
Ejemplo n.º 27
0
        public MessengerGroup(DataRow Row)
        {
            using (RowAdapter Adapter = new RowAdapter(Row))
            {
                this.Id = Adapter.PopInt32("id");
                this.CharacterId = Adapter.PopInt32("character_id");
                this.Caption = Adapter.PopString("caption");
            }

            Members = new List<int>();

            foreach (DataRow Member in System.MySQLManager.GetObject(new MessengerGroupMembersQuery(Id)).GetOutput<DataTable>().Rows)
            {
                using (RowAdapter Adapter = new RowAdapter(Member))
                {
                    int MemberId = Adapter.PopInt32("character_id");

                    if (!Members.Contains(MemberId))
                    {
                        Members.Add(MemberId);
                    }
                }
            }
        }
Ejemplo n.º 28
0
        void Login()
        {
            var name      = Form.Find("account");
            var timestamp = Form.Find <long>("timestamp");
            var token     = Form.Find("token");

            if (string.IsNullOrEmpty(name))
            {
                WrapResult(false, "账号不能为空!");
                return;
            }
            if (string.IsNullOrEmpty(token))
            {
                WrapResult(false, "Token 不能为空!");
                return;
            }

            var time = DateTimeExtension.ConvertFromTimestamp(timestamp);

            if (Math.Abs((DateTime.Now - time).TotalSeconds) > Interval.TotalSeconds)
            {
                WrapResult(false, "Token 已过期!");
                return;
            }

            var account = RowAdapter.LoadFirstOrDefault <Account>(p => p.Deleted == false && p.Name == name);

            if (account == null)
            {
                WrapResult(false, "指定帐号不存在!");
                return;
            }
            if (!account.Available)
            {
                WrapResult(false, "该帐号不可用!");
                return;
            }

            account.CheckErrorReset();
            if (account.TodayErrorTimes >= MaxErrorTimes)
            {
                WrapResult(false, "您的账号已被限制登录!");
                return;
            }

            var credentials   = new ServerCredentials(account.Password);
            var authorization = new Framework.Security.Authorization(name, timestamp, token);

            if (!credentials.Authenticate(authorization))
            {
                account.TodayErrorTimes++;
                account.TotalErrorTimes++;
                account.Save();
                WrapResult(false, "密码错误!");
                return;
            }
            if (account.TodayErrorTimes > 0)
            {
                account.ResetError();
                account.Save();
            }

            StartSession();
            Session["has-login"] = true;
            Session["account"]   = JsonSerializer.Serialize(account);
            WrapResult(true, "ok");
        }
Ejemplo n.º 29
0
        public void List()
        {
            var list = RowAdapter.Load <Invite>(p => p.Deleted == false);

            WrapResult(ResultCode.OK, list);
        }
Ejemplo n.º 30
0
        /// <summary>
        /// Returns an collection of messengerrequests
        /// </summary>
        /// <param name="CharacterId"></param>
        /// <returns></returns>
        public ICollection<int> GetMessengerRequests(int CharacterId)
        {
            ICollection<int> Output = new List<int>();

            foreach (DataRow Row in System.MySQLManager.GetObject(new MessengerRequestsQuery(CharacterId)).GetOutput<DataTable>().Rows)
            {
                using (RowAdapter Adapter = new RowAdapter(Row))
                {
                    int xCharacterId = Adapter.PopInt32("character_id");

                    if (!Output.Contains(xCharacterId))
                    {
                        Output.Add(xCharacterId);
                    }
                }
            }

            return Output;
        }
Ejemplo n.º 31
0
        /// <summary>
        /// Gets achievements for an specified character.
        /// </summary>
        /// <param name="CharacterId"></param>
        /// <returns></returns>
        public Dictionary<int, int> GetCharacterAchievement(int CharacterId)
        {
            Dictionary<int, int> Output = new Dictionary<int, int>();

            foreach (DataRow Row in System.MySQLManager.GetObject(new CharacterAchievementsQuery(CharacterId)).GetOutput<DataTable>().Rows)
            {
                using (RowAdapter Adapter = new RowAdapter(Row))
                {
                    int AchievementId = Adapter.PopInt32("achievement_id");
                    int Progress = Adapter.PopInt32("progress");

                    if (!Output.ContainsKey(AchievementId))
                    {
                        Output.Add(AchievementId, Progress);
                    }
                }
            }

            return Output;
        }
Ejemplo n.º 32
0
        void Login()
        {
            string token, name;
            long   appID, timestamp;

            if (!Form.TryGet("token", out token) ||
                !Form.TryGet("account", out name) ||
                !Form.TryGet("app_id", out appID) ||
                !Form.TryGet("timestamp", out timestamp))
            {
                WrapResult(ResultCode.InvalidParam, "invalid param!");
                return;
            }
            if (string.IsNullOrEmpty(name))
            {
                WrapResult(ResultCode.InvalidParam, "账号不能为空!");
                return;
            }
            if (string.IsNullOrEmpty(token))
            {
                WrapResult(ResultCode.InvalidParam, "Token 不能为空!");
                return;
            }

            var time = DateTimeExtension.ConvertFromTimestamp(timestamp);

            if (Math.Abs((DateTime.Now - time).TotalSeconds) > Interval.TotalSeconds)
            {
                WrapResult(ResultCode.InvalidParam, "Token 已过期!");
                return;
            }

            var app = RowAdapter.LoadFirstOrDefault <App>(p => p.ID == appID && p.Deleted == false);

            if (app == null)
            {
                WrapResult(ResultCode.InvalidParam, "指定应用未找到!");
                return;
            }
            if (!app.AccessRestriction.Security(Request.RemoteEndPoint.Address))
            {
                WrapResult(ResultCode.InvalidParam, "限制访问!");
                return;
            }
            var account = RowAdapter.LoadFirstOrDefault <Account>(p => p.Name == name);

            if (account == null)
            {
                WrapResult(ResultCode.InvalidParam, "指定帐号不存在!");
                return;
            }
            if (!account.Available)
            {
                WrapResult(ResultCode.InvalidAction, "该帐号不可用!");
                return;
            }

            account.CheckErrorReset();
            if (account.TodayErrorTimes >= MaxErrorTimes)
            {
                WrapResult(ResultCode.InvalidAction, "您的账号已被限制登录!");
                return;
            }

            var credentials   = new Framework.Security.ServerCredentials(account.Password);
            var authorization = new Framework.Security.Authorization(name, timestamp, token);

            if (!credentials.Authenticate(authorization))
            {
                account.TodayErrorTimes++;
                account.TotalErrorTimes++;
                account.Save();
                WrapResult(ResultCode.InvalidAction, "无效的Token!");
                return;
            }
            if (string.IsNullOrEmpty(account.Realname))
            {
                WrapResult((byte)ResultError.Incompletion, "帐号信息不完善,请先完善帐号信息!");
                return;
            }

            var auth = RowAdapter.LoadFirstOrDefault <Authorization>(p => p.OwnerID == account.ID && p.AppID == app.ID);

            if (auth == null)
            {
                auth         = RowAdapter.Create <Authorization>();
                auth.OwnerID = account.ID;
                auth.AppID   = appID;
            }
            else
            {
                auth.Reset();
            }
            if (account.TodayErrorTimes > 0)
            {
                account.ResetError();
                account.Save();
            }

            auth.Save();
            var json = new JsonObject();

            json["auth_token"] = auth.Token;
            json["expires_in"] = (auth.DeathLine - DateTime.Now).TotalSeconds;
            WrapResult(ResultCode.OK, json);
        }
Ejemplo n.º 33
0
        public ICollection<Room> GetRooms(int CharacterId)
        {
            ICollection<Room> Output = new List<Room>();

            foreach(DataRow Row in System.MySQLManager.GetObject(new RoomsQuery(CharacterId)).GetOutput<DataTable>().Rows)
            {
                using (RowAdapter Adapter = new RowAdapter(Row))
                {
                    Room Room = GetRoom(Adapter.PopInt32("id"));

                    Output.Add(Room);
                }
            }

            return Output;
        }
Ejemplo n.º 34
0
        void New()
        {
            var name       = Form.Find("user_name");
            var password   = Form.Find("user_pwd");
            var nickname   = Form.Find("nick_name");
            var realname   = Form.Find("realname");
            var birth      = Form.Find("birth");
            var gender     = Form.Find <int>("gender");
            var phone      = Form.Find("phone");
            var inviteCode = Form.Find("invite_code");

            if (string.IsNullOrEmpty(name))
            {
                WrapResult(false, "账号不能为空!");
                return;
            }
            if (name.Length > 50)
            {
                WrapResult(false, "账号长度不合法!");
                return;
            }
            if (string.IsNullOrEmpty(password))
            {
                WrapResult(false, "密码不能为空!");
                return;
            }
            var gbkEncoding = System.Text.Encoding.GetEncoding("GBK");

            if (gbkEncoding.GetByteCount(password) > 200)
            {
                WrapResult(false, "密码长度不合法!");
                return;
            }
            if (string.IsNullOrEmpty(nickname))
            {
                WrapResult(false, "昵称不能为空!");
                return;
            }
            if (nickname.Length > 50)
            {
                WrapResult(false, "昵称长度不合法!");
                return;
            }
            if (string.IsNullOrEmpty(realname))
            {
                WrapResult(false, "实名不能为空!");
                return;
            }
            if (realname.Length > 5)
            {
                WrapResult(false, "实名长度不合法!");
                return;
            }
            if (string.IsNullOrEmpty(inviteCode))
            {
                WrapResult(false, "邀请码不能为空!");
                return;
            }
            if (inviteCode.Length != 32)
            {
                WrapResult(false, "非法邀请码!");
                return;
            }

            var invites = RowAdapter.Load <Invite>(p => p.Code == inviteCode);

            if (invites.Count == 0)
            {
                WrapResult(false, "指定邀请码不存在!");
                return;
            }

            var invite = invites.First();

            if (!invite.Available)
            {
                WrapResult(false, "无效的邀请码!");
                return;
            }

            var accounts = RowAdapter.Load <Account>(p => p.Name == name);

            if (accounts.Count > 0)
            {
                WrapResult(false, "指定帐号已存在!");
                return;
            }

            invite.Available = false;
            invite.UseTime   = DateTime.Now;
            invite.Account   = name;
            invite.Save();

            var account = RowAdapter.Create <Account>();

            account.Name     = name;
            account.Password = password;
            account.Nickname = nickname;
            account.Realname = realname;
            account.Birth    = DateTime.Parse(birth);
            account.Gender   = (Gender)gender;
            account.Phone    = phone;
            account.Save();
            WrapResult(true, "ok");
        }
Ejemplo n.º 35
0
        /// <summary>
        /// Returns an collection of characterlogs.
        /// </summary>
        /// <param name="CharacterId"></param>
        /// <returns></returns>
        public ICollection<DateTime> GetCharacterLogs(int CharacterId)
        {
            ICollection<DateTime> Output = new List<DateTime>();

            foreach (DataRow Row in System.MySQLManager.GetObject(new CharacterLogsQuery(CharacterId)).GetOutput<DataTable>().Rows)
            {
                using (RowAdapter Adapter = new RowAdapter(Row))
                {
                    string Stamp = Adapter.PopString("login_stamp");

                    using (DateTimeAdapter dtAdapter = new DateTimeAdapter(Stamp))
                    {
                        if (!Output.Contains(dtAdapter.PopDateTime()))
                        {
                            Output.Add(dtAdapter.PopDateTime());
                        }
                    }
                }
            }

            return Output;
        }
Ejemplo n.º 36
0
        void Authorization()
        {
            var appID     = Form.Find <long>("app_id");
            var appKey    = Form.Find("app_key");
            var authToken = Form.Find("auth_token");

            var app = RowAdapter.LoadFirstOrDefault <App>(p => p.ID == appID && p.Deleted == false);

            if (app == null)
            {
                WrapResult(false, "not found app!");
                return;
            }
            if (!app.AccessRestriction.Security(Request.RemoteEndPoint.Address))
            {
                WrapResult(ResultCode.InvalidParam, "restricted access!");
                return;
            }
            if (!app.Key.Equals(appKey))
            {
                WrapResult(false, "invaild app key!");
                return;
            }

            var auth = RowAdapter.LoadFirstOrDefault <Authorization>(p => p.AppID == appID && p.Token == authToken);

            logger.Info("ID:{0} Key:{1} Token:{2}", appID, appKey, authToken);
            if (auth == null)
            {
                WrapResult(false, "invaild code!");
                return;
            }
            if (!auth.Available)
            {
                WrapResult(false, "code expire!");
                return;
            }

            var access = RowAdapter.LoadFirstOrDefault <Access>(p => p.AppID == appID && p.OwnerID == auth.OwnerID);

            if (access == null)
            {
                access         = RowAdapter.Create <Access>();
                access.OwnerID = auth.OwnerID;
                access.AppID   = appID;
            }

            access.Reset();
            access.Save();
            if (!access.Available)
            {
                WrapResult(false, "invaild access!");
                return;
            }

            var json = new JsonObject();

            json["access_token"]  = access.AccessToken;
            json["refresh_token"] = access.RefreshToken;
            json["expires_in"]    = (access.DeathLine - DateTime.Now).TotalSeconds;
            WrapResult(true, json);
        }
Ejemplo n.º 37
0
        void Token()
        {
            var appID     = Form.Find <long>("app_id");
            var name      = Form.Find("account");
            var timestamp = Form.Find <long>("timestamp");
            var token     = Form.Find("token");

            if (string.IsNullOrEmpty(name))
            {
                WrapResult(false, "账号不能为空!");
                return;
            }
            if (string.IsNullOrEmpty(token))
            {
                WrapResult(false, "Token 不能为空!");
                return;
            }

            var time = DateTimeExtension.ConvertFromTimestamp(timestamp);

            if (Math.Abs((DateTime.Now - time).TotalSeconds) > Interval.TotalSeconds)
            {
                WrapResult(false, "Token 已过期!");
                return;
            }

            var app = RowAdapter.LoadFirstOrDefault <App>(p => p.ID == appID && p.Deleted == false);

            if (app == null)
            {
                WrapResult(false, "not found app!");
                return;
            }
            if (!app.AccessRestriction.Security(Request.RemoteEndPoint.Address))
            {
                WrapResult(ResultCode.InvalidParam, "限制访问!");
                return;
            }

            var account = RowAdapter.LoadFirstOrDefault <Account>(p => p.Name == name);

            if (account == null)
            {
                WrapResult(false, "指定帐号不存在!");
                return;
            }
            if (!account.Available)
            {
                WrapResult(false, "该帐号不可用!");
                return;
            }

            account.CheckErrorReset();
            if (account.TodayErrorTimes >= MaxErrorTimes)
            {
                WrapResult(false, "您的账号已被限制登录!");
                return;
            }

            var credentials   = new Framework.Security.ServerCredentials(account.Password);
            var authorization = new Framework.Security.Authorization(name, timestamp, token);

            if (!credentials.Authenticate(authorization))
            {
                account.TodayErrorTimes++;
                account.TotalErrorTimes++;
                account.Save();
                WrapResult(false, "无效的Token!");
                return;
            }
            if (account.TodayErrorTimes > 0)
            {
                account.ResetError();
                account.Save();
            }

            var access = RowAdapter.LoadFirstOrDefault <Access>(p => p.AppID == appID && p.OwnerID == account.ID);

            if (access == null)
            {
                access         = RowAdapter.Create <Access>();
                access.OwnerID = account.ID;
                access.AppID   = appID;
            }

            access.Reset();
            access.Save();
            var json = new JsonObject();

            json["access_token"] = access.AccessToken;
            json["expires_in"]   = (access.DeathLine - DateTime.Now).TotalSeconds;
            WrapResult(true, json);
        }
Ejemplo n.º 38
0
        /// <summary>
        /// Returns an collection of ignored characters.
        /// </summary>
        /// <param name="CharacterId"></param>
        /// <returns></returns>
        public ICollection<int> GetIgnores(int CharacterId)
        {
            ICollection<int> Output = new List<int>();

            foreach (DataRow Row in System.MySQLManager.GetObject(new CharacterIgnoresQuery(CharacterId)).GetOutput<DataTable>().Rows)
            {
                using(RowAdapter Adapter = new RowAdapter(Row))
                {
                    int IgnoreId = Adapter.PopInt32("ignore_id");

                    if (Output.Contains(IgnoreId))
                    {
                        Output.Add(IgnoreId);
                    }
                }
            }

            return Output;
        }
Ejemplo n.º 39
0
        public void Invoke(Network.Session Session, Messages.PacketEvent Packet)
        {
            string Username = Packet.PopString();

            ICollection<int> Friends = new List<int>();
            ICollection<int> NoFriends = new List<int>();

            foreach (DataRow Row in System.MySQLManager.GetObject(new MessengerCharacterSearchQuery(Username)).GetOutput<DataTable>().Rows)
            {
                using (RowAdapter Adapter = new RowAdapter(Row))
                {
                    int CharacterId = Adapter.PopInt32("id");

                    if (Session.Character.MessengerFriends.Contains(CharacterId))
                    {
                        Friends.Add(CharacterId);
                    }
                    else NoFriends.Add(CharacterId);
                }
            }

            Session.WriteComposer(new HabboSearchResultComposer(Session.Character, Friends, NoFriends));
        }