コード例 #1
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 public virtual void Else(RequestArgs args)
 {
     if (args.Method == "CREATE")
     {
         this.Create(args);
     }
 }
コード例 #2
0
 protected RequestArgs(string method, Service service, JValue value, RequestArgs parent)
 {
     Url         = parent.Url;
     User        = parent.User;
     Server      = parent.Server;
     context     = parent.context;
     Path        = parent.Path;
     Service     = service;
     Method      = method.ToUpper();
     _bodyASJson = value;
     _jcontext   = parent._jcontext;
 }
コード例 #3
0
 protected virtual void OnTropCharche(IAsyncResult ar)
 {
     try
     {
         var x = Listener.EndGetContext(ar);
         RequestArgs.SendAlertError(x, "Wait ...", "Le serveur est trop charger");
     }
     catch (Exception e)
     {
         Ionsole.Write(e);
     }
 }
コード例 #4
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 public virtual bool Options(RequestArgs args)
 {
     if (AllowCrossOrigin)
     {
         var response = args.context.Response;
         response.AddHeader("Access-Control-Allow-Headers", "*");
         response.AddHeader("Access-Control-Allow-Methods", "*");
         response.AddHeader("Access-Control-Max-Age", "1728000");
         response.AppendHeader("Access-Control-Allow-Origin", "*");
         return(true);
     }
     return(true);
 }
コード例 #5
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);
        }
コード例 #6
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);
        }
コード例 #7
0
        public virtual bool GetUserFromIdentAndData(RequestArgs args, out User user)
        {
            var login = (ILogin)args.BodyAsJson;

            if (login != null)
            {
                var       identification = login.Identification;
                var       username       = login.Username;
                IPAddress ipaddress      = IPAddress.None;

                var pssword = login.Pwd;
deb:
                if (string.IsNullOrEmpty(username) == false)
                {
                    if (Users.TryGetValue(username, out user))
                    {
                        return(user.Password == pssword ? true : login.RegeneratePwd(user.Password));
                    }
                }

                if (!string.IsNullOrEmpty(identification))
                {
                    var ds = RequestArgs.aes.Decrypt(identification).Split('\0');
                    if (ds.Length == 3)
                    {
                        username = ds[1];
                        pssword  = ds[0];
                        if (IPAddress.TryParse(ds[2], out ipaddress))
                        {
                            identification = null;
                            goto deb;
                        }
                    }
                }
            }
            user = null;
            return(args.SendAlert("Authentication", "Le Compt soit est desactiver ou est n'est pas enregistrer<br><br>Contacter l'admin", "OK", false));
        }
コード例 #8
0
        public virtual bool GetUserFromCookie(RequestArgs args, out User user)
        {
            var cc = getId(args.context);

            if (cc != null)
            {
                if (_connectedUsers.TryGetValue(cc, out user) && user.AllowSigninById)
                {
                    if (cc == user.CurrentId)
                    {
                        return(true);
                    }
                    foreach (System.Net.Cookie ck in args.context.Request.Cookies)
                    {
                        ck.Expired = true;
                        args.context.Response.SetCookie(ck);
                    }
                    user.IsLogged = false;
                }
            }
            user = null;
            return(false);
        }
コード例 #9
0
 public bool Logout(IClient client, RequestArgs args)
 {
     return(_connectedUsers.Remove(args.User.UserName));
 }
コード例 #10
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
        public virtual void Exec(RequestArgs args)
        {
            //if (AllowCrossOrigin) args.context.Response.AppendHeader("Access-Control-Allow-Origin", "*");
            if (!CheckAccess(args))
            {
                return;
            }
            switch (args.Method)
            {
            case "GET":
                Get(args);
                break;

            case "POST":
                Post(args);
                break;

            case "PUT":
                Put(args);
                break;

            case "DELETE":
                Delete(args);
                break;

            case "CREATE":
                Create(args);
                return;

            case "UPDATE":
                Update(args);
                break;

            case "SUPDATE":
                SUpdate(args);
                break;

            case "OPTIONS":
                Options(args);
                return;

            case "PRINT":
                Print(args);
                return;

            case "SET":
                Set(args);
                return;

            case "HEAD":
                Head(args);
                return;

            case "OPEN":
                Open(args);
                return;

            default:
                Else(args);
                return;
            }
        }
コード例 #11
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 public virtual bool SUpdate(RequestArgs args)
 {
     return(false);
 }
コード例 #12
0
 public abstract void BlockUser(RequestArgs args);
コード例 #13
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 public virtual bool Post(RequestArgs args)
 {
     return(false);
 }
コード例 #14
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 public virtual void Head(RequestArgs args)
 {
 }
コード例 #15
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 protected virtual bool Set(RequestArgs args) => true;
コード例 #16
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 protected virtual bool Open(RequestArgs args)
 {
     return(true);
 }
コード例 #17
0
 public abstract bool LockUser(RequestArgs args, ILogin e);
コード例 #18
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 public virtual bool CanbeDelayed(RequestArgs args) => false;
コード例 #19
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 public virtual bool CheckAccess(RequestArgs args)
 {
     return(true);
 }
コード例 #20
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 public virtual bool Print(RequestArgs args) => true;
コード例 #21
0
 public abstract bool ValidateUser(RequestArgs args, ILogin e);
コード例 #22
0
 public virtual void Api(RequestArgs args) => args.Service?.Exec(args);
コード例 #23
0
 public abstract bool DeleteUser(RequestArgs args, ILogin e);
コード例 #24
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 protected virtual bool Close(RequestArgs args)
 {
     return(true);
 }
コード例 #25
0
 public abstract bool SignupAgent(RequestArgs args, out User user);
コード例 #26
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 public virtual bool Update(RequestArgs args) => false;
コード例 #27
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 public virtual bool Delete(RequestArgs args) => false;
コード例 #28
0
ファイル: Service.cs プロジェクト: QsCompany/Q.Net
 public virtual void Put(RequestArgs args)
 {
 }
コード例 #29
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);
        }
コード例 #30
0
 public CommandsParam(RequestArgs args, CommandCallback callback, object param)
 {
     Args     = args;
     Parms    = param;
     Callback = callback;
 }