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); }
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); }
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); }