コード例 #1
0
        public virtual bool AnotherAccountIsStillOpened(HttpListenerContext context, User user)
        {
            if ((DateTime.Now - user.LastAccess).TotalMinutes > 15)
            {
                return(false);
            }

            var serviceArgs = RequestArgs.NewRequestArgs(context, this.server, user);
            var t           = new SecurityAccountRequest
            {
                OriginalIP = user.Address?.ToString(),
                YourIP     = context.Request.RemoteEndPoint.ToString(),
                Wait       = 300000,
                IsSuccess  = false
            };

            serviceArgs.Send(t);
            return(true);
        }
コード例 #2
0
        protected virtual bool OnRequest(HttpListenerContext context)
        {
            if (context.Request.HttpMethod == "OPTIONS")
            {
                ApisHandler.RespondOptions(context);
                return(true);
            }
            context.Response.AppendHeader("Access-Control-Allow-Origin", "*");
            var user = ApiHandler.CheckAuth(context, out bool logged);

            if (user != null || logged)
            {
                var serviceArgs = RequestArgs.NewRequestArgs(context, this, user);

                if (serviceArgs.Service == null)
                {
                    serviceArgs.SendCode(HttpStatusCode.OK);
                }
                else if (serviceArgs.Service.CanbeDelayed(serviceArgs))
                {
                    CommandsQueue.Add(new CommandsParam(serviceArgs, ExecuteCommand, this));
                    return(false);
                }
                else
                {
                    using (serviceArgs)
                    {
                        Api(serviceArgs);
                        return(!serviceArgs.IsBusy);
                    }
                }
            }
            else
            {
                context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
            }
            return(true);
        }
コード例 #3
0
        public virtual bool PublicApi(HttpListenerContext context, string raw)
        {
            switch (context.Request.Url.LocalPath.ToLower())
            {
            case "/~checklogging":
                IsLoged(context);
                break;

            case "/~login":
                Login(context);
                break;

            case "/~signup":
                Signup(context);
                break;

            case "/~signout":
                Signout(context);
                break;

            case "/~newGuid":
                Server.Send(context, (context.Response.ContentEncoding ?? context.Request.ContentEncoding ?? Encoding.UTF8).GetBytes(Guid.NewGuid().ToString()));
                break;

            case "/~guid":
                var r = string.Format(Server.SGuidService, GuidService.GetGuid());
                Server.Send(context, (context.Response.ContentEncoding ?? context.Request.ContentEncoding ?? Encoding.UTF8).GetBytes(r));
                break;

            case "/~issecured":
                Server.Send(context, RequestArgs.https ? Server.True : Server.False);
                break;

            case "/~sessionid":
                Server.Send(context, (context.Response.ContentEncoding ?? context.Request.ContentEncoding ?? Encoding.UTF8).GetBytes(SessionIdService.SessionId));
                break;

            case "/~isadmin":
                var  cc   = getId(context);
                User user = null;
                if (cc != null && (_connectedUsers.TryGetValue(cc, out user)))
                {
                    if (user.IsBlocked)
                    {
                        _connectedUsers.Remove(cc);
                        context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
                        break;
                    }
                    if (context.Request.RemoteEndPoint.Address.GetHashCode() != user.Address.GetHashCode())
                    {
                        if (AnotherAccountIsStillOpened(context, user))
                        {
                            context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
                        }

                        user.Address = context.Request.RemoteEndPoint.Address;
                    }
                    using (var rr = RequestArgs.NewRequestArgs(context, this.server, user))
                        if (user.IsAgent)
                        {
                            rr.SendSuccess();
                        }
                        else
                        {
                            rr.SendFail();
                        }
                }
                break;

            default:
                if (raw.StartsWith("/~$?id") || raw.StartsWith("/~%24?"))
                {
                    Downloader.Send(context);
                }
                else
                {
                    return(false);
                }
                break;
            }
            context.Response.Close();
            return(true);
        }