public static CronRequestInfo GetRequestInfo(Cron cron, bool test) { CronRequestInfo requestInfo = new CronRequestInfo(); if (cron.CronType == CronType.External) { requestInfo.url = cron.ExternalUrl; } else if (cron.CronType == CronType.Action) { requestInfo.url = GetActionUrl(cron.EntityId, cron.QueryString); } else if (cron.CronType == CronType.Query) { requestInfo.url = GetQueryUrl(cron.EntityId, cron.QueryString); } requestInfo.method = GetMethod(cron.Method); if (requestInfo.method == POST) { requestInfo.data = cron.Data; } requestInfo.headers = GetHeaders(cron.Headers); SetAuthorization(requestInfo, test); return(requestInfo); }
private static void SetAuthorization(CronRequestInfo requestInfo, bool test) { const string AUTHORIZATION = "AUTHORIZATION"; const string AppId = "AppId"; if (requestInfo.url.ToUpper().Contains(AUTHORIZATION) || (requestInfo.headers != null && requestInfo.headers.Keys.Where(k => k.ToUpper() == AUTHORIZATION).FirstOrDefault() != null)) { return; } if (System.Web.HttpContext.Current.Request.QueryString[AUTHORIZATION] != null) { requestInfo.url += "&authorization=" + System.Web.HttpContext.Current.Request.QueryString[AUTHORIZATION]; return; } if (requestInfo.headers == null) { requestInfo.headers = new Dictionary <string, object>(); } if (test) { string appId = Maps.Instance.GetMap().Id; if (!requestInfo.headers.ContainsKey("authorization")) { requestInfo.headers.Add("authorization", Maps.CronAuthorizationHeader); } if (!requestInfo.headers.ContainsKey(AppId)) { requestInfo.headers.Add(AppId, appId); } return; } else if (System.Web.HttpContext.Current.Request.Headers[AUTHORIZATION] != null) { if (!requestInfo.headers.ContainsKey("authorization")) { requestInfo.headers.Add("authorization", System.Web.HttpContext.Current.Request.Headers[AUTHORIZATION]); } if (System.Web.HttpContext.Current.Request.Headers[AppId] != null) { if (!requestInfo.headers.ContainsKey(AppId)) { requestInfo.headers.Add(AppId, System.Web.HttpContext.Current.Request.Headers[AppId]); } } return; } throw new CronAuthorizationWasNotSuppliedException(); }
public static object GetTestRequest(CronRequestInfo requestInfo) { Dictionary <string, object> dic = new Dictionary <string, object>(); if (requestInfo.data != null) { dic.Add("data", requestInfo.data); } if (requestInfo.url != null) { dic.Add("url", requestInfo.url); } if (requestInfo.method != null) { dic.Add("method", requestInfo.method); } return(dic); }
public IHttpActionResult run(int id, bool test = false, bool async = true) { try { if (async && !test) { return(runAsync(id)); } if (!Map.Database.Crons.ContainsKey(id)) { return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, "The Cron " + id + " does not exist"))); } Cron cron = Map.Database.Crons[id]; if (!IsActive(id)) { return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, "The Cron " + id + " is not active. Please switch active to 'ON'"))); } CronRequestInfo cronInfo = GetRequestInfo(cron, test); XMLHttpRequest request = new XMLHttpRequest(); request.open(cronInfo.method, cronInfo.url, false); string appName = Map.AppName; request.setRequestHeader("content-type", "application/json"); if (cronInfo.headers != null) { foreach (string key in cronInfo.headers.Keys) { try { request.setRequestHeader(key, cronInfo.headers[key].ToString()); } catch { } } } System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer(); string data = cronInfo.data; request.send(data); if (request.status != 200) { Maps.Instance.DuradosMap.Logger.Log("cron", "run", "failed", new Exception(request.responseText), 1, "status: " + request.status); return(ResponseMessage(Request.CreateResponse(HttpStatusCode.InternalServerError, request.responseText))); } Maps.Instance.DuradosMap.Logger.Log("cron", "run", "success app " + Map.AppName, null, 3, request.responseText.Length > 4000 ? request.responseText.Substring(0, 4000) : request.responseText); object response = request.responseText; try { response = jss.Deserialize <object>(request.responseText); } catch { } if (test) { return(Ok(new { request = GetTestRequest(cronInfo), response = response })); } else { return(Ok(response)); } } catch (ActionNotFoundException exception) { return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, exception.Message))); } catch (QueryNotFoundException exception) { return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, exception.Message))); } catch (Exception exception) { throw new BackAndApiUnexpectedResponseException(exception, this); } }
private object GetTestRequest(CronRequestInfo requestInfo) { return(CronHelper.GetTestRequest(requestInfo)); }