private bool SendProxyCode(IHttpContext context)
        {
            bool     result              = false;
            IRequest request             = context.Request;
            string   path                = request.Url.AbsolutePath.ToLowerInvariant();
            string   appName             = ApplicationNameResolver.ResolveApplicationName(context);
            bool     includeLocalMethods = request.UserHostAddress.StartsWith("127.0.0.1");

            string[] split = path.DelimitSplit("/", ".");

            if (split.Length >= 2)
            {
                string fileName = Path.GetFileName(path);
                if (_clientProxyGenerators.ContainsKey(fileName))
                {
                    Incubator combined = new Incubator();
                    combined.CopyFrom(CommonServiceProvider);
                    if (AppServiceProviders.ContainsKey(appName))
                    {
                        Incubator appProviders = AppServiceProviders[appName];
                        combined.CopyFrom(appProviders, true);
                    }
                    _clientProxyGenerators[fileName].SendProxyCode(combined, context);
                    result = true;
                }
            }
            return(result);
        }
Example #2
0
 private string ResolveApplicationName(IHttpContext context)
 {
     if (HostAppMappings.ContainsKey(context.Request.Url.Host))
     {
         return(HostAppMappings[context.Request.Url.Host].AppName);
     }
     return(ApplicationNameResolver.ResolveApplicationName(context));
 }
        public override bool TryRespond(IHttpContext context)
        {
            try
            {
                RequestWrapper  request  = context.Request as RequestWrapper;
                ResponseWrapper response = context.Response as ResponseWrapper;
                string          appName  = ApplicationNameResolver.ResolveApplicationName(context);

                bool responded = false;

                if (request != null && response != null)
                {
                    string path = request.Url.AbsolutePath.ToLowerInvariant();

                    if (path.StartsWith("/{0}"._Format(ResponderSignificantName.ToLowerInvariant())))
                    {
                        if (path.StartsWith(MethodFormPrefixFormat._Format(ResponderSignificantName).ToLowerInvariant()))
                        {
                            responded = SendMethodForm(context);
                        }
                        else
                        {
                            responded = SendProxyCode(context);
                        }
                    }
                    else
                    {
                        ExecutionRequest execRequest = ResolveExecutionRequest(context, appName);
                        responded = execRequest.Execute();
                        if (responded)
                        {
                            // TODO: make this configurable
                            response.AddHeader("Access-Control-Allow-Origin", "*");
                            response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
                            response.AddHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
                            // ---
                            RenderResult(appName, path, execRequest);
                        }
                    }
                }
                if (responded)
                {
                    OnResponded(context);
                }
                else
                {
                    OnNotResponded(context);
                }
                return(responded);
            }
            catch (Exception ex)
            {
                Logger.AddEntry("An error occurred in {0}.{1}: {2}", ex, this.GetType().Name, MethodBase.GetCurrentMethod().Name, ex.Message);
                OnNotResponded(context);
                return(false);
            }
        }
        private bool SendMethodForm(IHttpContext context)
        {
            bool     result          = false;
            IRequest request         = context.Request;
            string   appName         = ApplicationNameResolver.ResolveApplicationName(context);//UriApplicationNameResolver.ResolveApplicationName(request.Url, BamConf.AppConfigs);
            string   path            = request.Url.AbsolutePath;
            string   prefix          = MethodFormPrefixFormat._Format(ResponderSignificantName.ToLowerInvariant());
            string   partsICareAbout = path.TruncateFront(prefix.Length);

            string[] segments = partsICareAbout.DelimitSplit("/", "\\");

            if (segments.Length == 2)
            {
                GetServiceProxies(appName, out Incubator providers, out List <ProxyAlias> aliases);
                string className  = segments[0];
                string methodName = segments[1];
                Type   type       = providers[className];
                if (type == null)
                {
                    ProxyAlias alias = aliases.FirstOrDefault(a => a.Alias.Equals(className));
                    if (alias != null)
                    {
                        type = providers[alias.ClassName];
                    }
                }

                if (type != null)
                {
                    InputFormBuilder            builder    = new InputFormBuilder(type);
                    QueryStringParameter[]      parameters = request.Url.Query.DelimitSplit("?", "&").ToQueryStringParameters();
                    Dictionary <string, object> defaults   = new Dictionary <string, object>();
                    foreach (QueryStringParameter param in parameters)
                    {
                        defaults.Add(param.Name, param.Value);
                    }
                    TagBuilder  form        = builder.MethodForm(methodName, defaults);
                    LayoutModel layoutModel = GetLayoutModel(appName);
                    layoutModel.PageContent = form.ToMvcHtml().ToString();
                    ContentResponder.CommonTemplateManager.RenderLayout(layoutModel, context.Response.OutputStream);
                    result = true;
                }
            }

            return(result);
        }
Example #5
0
        public override bool TryRespond(IHttpContext context)
        {
            if (!this.IsInitialized)
            {
                Initialize();
            }

            IRequest  request  = context.Request;
            IResponse response = context.Response;
            bool      handled  = false;
            string    path     = request.Url.AbsolutePath;
            string    appName  = ApplicationNameResolver.ResolveApplicationName(context);//UriApplicationNameResolver.ResolveApplicationName(request.Url, BamConf.AppConfigs);

            string[] chunks = path.DelimitSplit("/");

            HttpArgs queryString = new HttpArgs(request.Url.Query);
            bool     min         = !string.IsNullOrEmpty(queryString["min"]);

            if (chunks[0].ToLowerInvariant().Equals("dao") && chunks.Length > 1)
            {
                string method = chunks[1];
                if (_dynamicResponders.ContainsKey(method))
                {
                    response.ContentType = GetContentTypeForExtension(".js");
                    string script = _dynamicResponders[method](appName, min);
                    SendResponse(response, script);
                    handled = true;
                    OnResponded(context);
                }
                else
                {
                    handled = TryExecuteCrudRequest(chunks, context, handled, appName);
                    OnNotResponded(context);
                }
            }

            return(handled);
        }