/// <summary> /// Brews a cup of coffee. E.g. Executes the specified script. /// </summary> /// <param name="code"></param> /// <param name="codePath"></param> /// <param name="requestBody"></param> public static void Brew(string code, string codePath, Stream requestBody, string scriptEngineFactory = "Barista.SharePoint.SPBaristaJurassicScriptEngineFactory, Barista.SharePoint, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a2d8064cb9226f52") { var webContext = WebOperationContext.Current; if (webContext == null) { throw new InvalidOperationException("Current WebOperationContext is null."); } var request = BrewRequest.CreateBrewRequestFromIncomingWebRequest(webContext.IncomingRequest, requestBody, OperationContext.Current); request.ScriptEngineFactory = scriptEngineFactory; request.Code = code; request.CodePath = codePath; //If the request has a header named "X-Barista-Bootstrapper" define it on the request. var requestHeaders = webContext.IncomingRequest.Headers; var bootstrapperKey = requestHeaders.AllKeys.FirstOrDefault(k => k.ToLowerInvariant() == "X-Barista-Bootstrapper".ToLowerInvariant()); if (!String.IsNullOrWhiteSpace(bootstrapperKey)) { var bootstrapperValue = requestHeaders[bootstrapperKey]; if (!String.IsNullOrWhiteSpace(bootstrapperValue)) { request.Bootstrapper = bootstrapperValue; } } var instanceSettings = request.ParseInstanceSettings(); if (string.IsNullOrEmpty(instanceSettings.InstanceInitializationCode) == false) { string instanceInitializationCodePath; request.InstanceInitializationCode = Tamp(instanceSettings.InstanceInitializationCode, out instanceInitializationCodePath); request.InstanceInitializationCodePath = instanceInitializationCodePath; } request.SetExtendedPropertiesFromCurrentSPContext(); var client = new BaristaServiceClient(SPServiceContext.Current); client.Exec(request); //abandon the session and set the ASP.net session cookie to nothing. if (HttpContext.Current != null && HttpContext.Current.Session != null) { HttpContext.Current.Session.Abandon(); HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); } }
/// <summary> /// Pulls a shot of espresso. E.g. Executes the specified script and sets the appropriate values on the response object. /// </summary> /// <param name="code"></param> /// <param name="codePath"></param> /// <param name="requestBody"></param> /// <returns></returns> public static Message Pull(string code, string codePath, Stream requestBody, string scriptEngineFactory = "Barista.SharePoint.SPBaristaJurassicScriptEngineFactory, Barista.SharePoint, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a2d8064cb9226f52") { var webContext = WebOperationContext.Current; if (webContext == null) { throw new InvalidOperationException("Current WebOperationContext is null."); } var request = BrewRequest.CreateBrewRequestFromIncomingWebRequest(webContext.IncomingRequest, requestBody, OperationContext.Current); request.ScriptEngineFactory = scriptEngineFactory; request.Code = code; request.CodePath = codePath; var instanceSettings = request.ParseInstanceSettings(); if (string.IsNullOrEmpty(instanceSettings.InstanceInitializationCode) == false) { string instanceInitializationCodePath; request.InstanceInitializationCode = Tamp(instanceSettings.InstanceInitializationCode, out instanceInitializationCodePath); request.InstanceInitializationCodePath = instanceInitializationCodePath; } request.SetExtendedPropertiesFromCurrentSPContext(); //Make a call to the Barista Service application to handle the request. var client = new BaristaServiceClient(SPServiceContext.Current); var result = client.Eval(request); //abandon the session and set the ASP.net session cookie to nothing. var cookies = new List <IBaristaCookie>(); cookies.AddRange(result.Cookies); var existingCookie = cookies.FirstOrDefault(c => c != null && c.Name == "ASP.NET_SessionId"); if (existingCookie != null) { cookies.Remove(existingCookie); } cookies.Add(new Biscotti("ASP.NET_SessionId", "")); result.Cookies = cookies; result.ModifyOutgoingWebResponse(webContext.OutgoingResponse); //if (HttpContext.Current != null && HttpContext.Current.Session != null) //{ // HttpContext.Current.Session.Abandon(); // HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); //} return(webContext.CreateStreamResponse( stream => { if (result.Content == null) { return; } using (var writer = new BinaryWriter(stream)) { writer.Write(result.Content); } }, result.ContentType ?? string.Empty)); }