Example #1
0
        public Task HandleRequest(string url, RequestHandler.RequestMethods method, string formData, HttpContext context, ISecureSession session, IsValidCall securityCheck)
        {
            IModel model = null;

            lock (_constructors)
            {
                if (_constructors.ContainsKey(url))
                {
                    model = (IModel)_constructors[url].Invoke(new object[] { });
                }
            }
            if (model == null)
            {
                throw new CallNotFoundException("Model Not Found");
            }
            else
            {
                MethodInfo mi = null;
                lock (_saveMethods)
                {
                    if (_saveMethods.ContainsKey(url))
                    {
                        mi = _saveMethods[url];
                    }
                }
                if (mi != null)
                {
                    if (!securityCheck.Invoke(mi.DeclaringType, mi, session, null, url, (Hashtable)JSON.JsonDecode(formData)))
                    {
                        throw new InsecureAccessException();
                    }
                    Utility.SetModelValues(formData, ref model, true);
                    if ((bool)mi.Invoke(model, new object[] { }))
                    {
                        context.Response.ContentType = "text/json";
                        context.Response.StatusCode  = 200;
                        return(context.Response.WriteAsync(JSON.JsonEncode(new Hashtable()
                        {
                            { "id", model.id }
                        })));
                    }
                    throw new Exception("Failed");
                }
                throw new CallNotFoundException();
            }
        }
Example #2
0
        public Task HandleRequest(string url, RequestHandler.RequestMethods method, string formData, HttpContext context, ISecureSession session, IsValidCall securityCheck)
        {
            IModel model = null;

            lock (_loadMethods)
            {
                if (_loadMethods.ContainsKey(url.Substring(0, url.LastIndexOf("/"))))
                {
                    if (!securityCheck.Invoke(_loadMethods[url.Substring(0, url.LastIndexOf("/"))].DeclaringType, _loadMethods[url.Substring(0, url.LastIndexOf("/"))], session, null, url, new Hashtable()
                    {
                        { "id", url.Substring(0, url.LastIndexOf("/")) }
                    }))
                    {
                        throw new InsecureAccessException();
                    }
                    model = (IModel)_loadMethods[url.Substring(0, url.LastIndexOf("/"))].Invoke(null, new object[] { url.Substring(url.LastIndexOf("/") + 1) });
                }
            }
            if (model == null)
            {
                throw new CallNotFoundException("Model Not Found");
            }
            else
            {
                MethodInfo mi = null;
                lock (_updateMethods)
                {
                    if (_updateMethods.ContainsKey(url.Substring(0, url.LastIndexOf("/"))))
                    {
                        mi = _updateMethods[url.Substring(0, url.LastIndexOf("/"))];
                    }
                }
                if (mi != null)
                {
                    if (!securityCheck.Invoke(mi.DeclaringType, mi, session, model, url, (Hashtable)JSON.JsonDecode(formData)))
                    {
                        throw new InsecureAccessException();
                    }
                    context.Response.ContentType = "text/json";
                    context.Response.StatusCode  = 200;
                    Utility.SetModelValues(formData, ref model, false);
                    return(context.Response.WriteAsync(JSON.JsonEncode(mi.Invoke(model, new object[] { }))));
                }
                throw new CallNotFoundException();
            }
        }
            public Task HandleRequest(string url, RequestHandler.RequestMethods method, string formData, HttpContext context, ISecureSession session, IsValidCall securityCheck)
            {
                Match  m       = _reg.Match(url);
                string id      = m.Groups[1].Value;
                string smethod = m.Groups[2].Value;
                IModel model   = (IModel)_loadMethod.Invoke(null, new object[] { id });

                if (model == null)
                {
                    throw new CallNotFoundException("Model Not Found");
                }
                MethodInfo mi;

                object[] pars;
                Utility.LocateMethod(formData, _methods[smethod], out mi, out pars);
                if (mi == null)
                {
                    throw new CallNotFoundException("Unable to locate requested method to invoke");
                }
                else
                {
                    if (!securityCheck.Invoke(mi.DeclaringType, mi, session, model, url, (Hashtable)JSON.JsonDecode(formData)))
                    {
                        throw new InsecureAccessException();
                    }
                    context.Response.ContentType = "text/json";
                    context.Response.StatusCode  = 200;
                    try
                    {
                        if (mi.ReturnType == typeof(void))
                        {
                            mi.Invoke(model, pars);
                            return(context.Response.WriteAsync(""));
                        }
                        else
                        {
                            return(context.Response.WriteAsync(JSON.JsonEncode(mi.Invoke(model, pars))));
                        }
                    }
                    catch (Exception ex)
                    {
                        throw new Exception("Execution Error");
                    }
                }
            }
Example #4
0
        public Task HandleRequest(string url, RequestHandler.RequestMethods method, string formData, HttpContext context, ISecureSession session, IsValidCall securityCheck)
        {
            IModel model = null;

            lock (_loadMethods)
            {
                if (_loadMethods.ContainsKey(url.Substring(0, url.LastIndexOf("/"))))
                {
                    model = (IModel)_loadMethods[url.Substring(0, url.LastIndexOf("/"))].Invoke(null, new object[] { url.Substring(url.LastIndexOf("/") + 1) });
                }
            }
            if (model == null)
            {
                throw new CallNotFoundException("Model Not Found");
            }
            else
            {
                MethodInfo mi = null;
                lock (_deleteMethods)
                {
                    if (_deleteMethods.ContainsKey(url.Substring(0, url.LastIndexOf("/"))))
                    {
                        mi = _deleteMethods[url.Substring(0, url.LastIndexOf("/"))];
                    }
                }
                if (mi != null)
                {
                    if (!securityCheck(mi.DeclaringType, mi, session, model, url, null))
                    {
                        throw new UnauthorizedAccessException();
                    }
                    else
                    {
                        context.Response.ContentType = "text/json";
                        context.Response.StatusCode  = 200;
                        return(context.Response.WriteAsync(JSON.JsonEncode(mi.Invoke(model, new object[] { }))));
                    }
                }
                else
                {
                    throw new CallNotFoundException("Method Not Found");
                }
            }
        }
Example #5
0
 public bool HandlesRequest(string url, RequestHandler.RequestMethods method)
 {
     if (method == RequestHandler.RequestMethods.GET)
     {
         bool ret = false;
         lock (_calls)
         {
             foreach (sModelListCall call in _calls)
             {
                 if (call.IsValid(url))
                 {
                     ret = true;
                     break;
                 }
             }
         }
         return(ret);
     }
     return(false);
 }
        public bool HandlesRequest(string url, RequestHandler.RequestMethods method)
        {
            bool ret = false;

            if (method == RequestHandler.RequestMethods.METHOD)
            {
                lock (_patterns)
                {
                    foreach (sMethodPatterns smp in _patterns)
                    {
                        if (smp.IsValid(url))
                        {
                            ret = true;
                            break;
                        }
                    }
                }
            }
            return(ret);
        }
Example #7
0
            public Task HandleRequest(string url, RequestHandler.RequestMethods method, Hashtable formData, HttpContext context, ISecureSession session, IsValidCall securityCheck)
            {
                if (!securityCheck.Invoke(_method.DeclaringType, _method, session, null, url, formData))
                {
                    throw new InsecureAccessException();
                }
                context.Response.ContentType = "text/json";
                context.Response.StatusCode  = 200;
                ParameterInfo[] pars  = _method.GetParameters();
                object[]        opars = new object[] { };
                if (pars.Length > 0)
                {
                    opars = new object[pars.Length];
                    if (_usesSession)
                    {
                        opars[_sessionIndex] = session;
                    }
                    if (pars.Length > 1 || !_usesSession)
                    {
                        Match m = _reg.Match(url);
                        foreach (int x in _groupIndexes.Keys)
                        {
                            opars[x] = _ConvertParameterValue(m.Groups[_groupIndexes[x] + 1].Value, pars[x].ParameterType);
                        }
                    }
                }
                object ret = _method.Invoke(null, opars);

                if (_isPaged)
                {
                    return(context.Response.WriteAsync(JSON.JsonEncode(new Hashtable()
                    {
                        { "response", ret },
                        { "TotalPages", opars[opars.Length - 1] }
                    })));
                }
                else
                {
                    return(context.Response.WriteAsync(JSON.JsonEncode(ret)));
                }
            }
Example #8
0
        public Task HandleRequest(string url, RequestHandler.RequestMethods method, Hashtable formData, HttpContext context, ISecureSession session, IsValidCall securityCheck)
        {
            sModelListCall?mlc = null;

            lock (_calls)
            {
                foreach (sModelListCall call in _calls)
                {
                    if (call.IsValid(url))
                    {
                        mlc = call;
                        break;
                    }
                }
            }
            if (mlc.HasValue)
            {
                return(mlc.Value.HandleRequest(url, method, formData, context, session, securityCheck));
            }
            throw new CallNotFoundException();
        }
        public Task HandleRequest(string url, RequestHandler.RequestMethods method, string formData, HttpContext context, ISecureSession session, IsValidCall securityCheck)
        {
            sMethodPatterns?patt = null;

            lock (_patterns)
            {
                foreach (sMethodPatterns smp in _patterns)
                {
                    if (smp.IsValid(url))
                    {
                        patt = smp;
                        break;
                    }
                }
            }
            if (patt.HasValue)
            {
                return(patt.Value.HandleRequest(url, method, formData, context, session, securityCheck));
            }
            throw new CallNotFoundException();
        }
Example #10
0
 public Task HandleRequest(string url, RequestHandler.RequestMethods method, Hashtable formData, HttpContext context, ISecureSession session, IsValidCall securityCheck)
 {
     if (!HandlesRequest(url, method))
     {
         throw new CallNotFoundException();
     }
     else
     {
         List <Type> models = new List <Type>();
         if (_types != null)
         {
             foreach (Type t in _types)
             {
                 foreach (ModelJSFilePath mjsfp in t.GetCustomAttributes(typeof(ModelJSFilePath), false))
                 {
                     if (mjsfp.IsMatch(url))
                     {
                         models.Add(t);
                     }
                 }
             }
             foreach (Type model in models)
             {
                 if (!securityCheck.Invoke(model, null, session, null, url, null))
                 {
                     throw new InsecureAccessException();
                 }
             }
         }
         DateTime modDate = DateTime.MinValue;
         foreach (Type model in models)
         {
             try
             {
                 FileInfo fi = new FileInfo(model.Assembly.Location);
                 if (fi.Exists)
                 {
                     modDate = new DateTime(Math.Max(modDate.Ticks, fi.LastWriteTime.Ticks));
                 }
             }
             catch (Exception e) { }
         }
         if (modDate == DateTime.MinValue)
         {
             modDate = RequestHandler.StartTime;
         }
         if (context.Request.Headers.ContainsKey("If-Modified-Since"))
         {
             DateTime lastModified = DateTime.Parse(context.Request.Headers["If-Modified-Since"]);
             if (modDate.ToString() == lastModified.ToString())
             {
                 context.Response.StatusCode = 304;
                 return(Task.CompletedTask);
             }
         }
         string ret = null;
         context.Response.ContentType = "text/javascript";
         context.Response.StatusCode  = 200;
         lock (_cache)
         {
             if (_cache.ContainsKey(url))
             {
                 ret = _cache[url];
             }
         }
         if (ret == null && models.Count > 0)
         {
             WrappedStringBuilder builder = new WrappedStringBuilder(url.ToLower().EndsWith(".min.js"));
             foreach (IBasicJSGenerator gen in _oneTimeInitialGenerators)
             {
                 gen.GeneratorJS(ref builder);
             }
             foreach (Type model in models)
             {
                 foreach (IJSGenerator gen in _instanceGenerators)
                 {
                     gen.GeneratorJS(ref builder, model);
                 }
                 foreach (IJSGenerator gen in _globalGenerators)
                 {
                     gen.GeneratorJS(ref builder, model);
                 }
             }
             foreach (IBasicJSGenerator gen in _oneTimeFinishGenerators)
             {
                 gen.GeneratorJS(ref builder);
             }
             ret = builder.ToString();
             lock (_cache)
             {
                 if (!_cache.ContainsKey(url))
                 {
                     _cache.Add(url, ret);
                 }
             }
         }
         context.Response.Headers.Add("Last-Modified", modDate.ToUniversalTime().ToString("R"));
         context.Response.Headers.Add("Cache-Control", "public");
         return(context.Response.WriteAsync(ret));
     }
 }