Beispiel #1
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);
        }
Beispiel #2
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);
        }
        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);
        }
        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);
        }
        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);
        }
        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");
        }