diff --git a/web/Controllers/BlogsController.cs b/web/Controllers/BlogsController.cs index 5fb79f75..2431e929 100644 --- a/web/Controllers/BlogsController.cs +++ b/web/Controllers/BlogsController.cs @@ -246,9 +246,16 @@ namespace Yavsc.Controllers return File (fia.OpenRead (), defaultAvatarMimetype); } WebRequest wr = WebRequest.Create(avpath); - WebResponse resp = wr.GetResponse (); - Stream str = resp.GetResponseStream (); - return File (str, resp.ContentType); + FileContentResult res; + using (WebResponse resp = wr.GetResponse ()) { + using (Stream str = resp.GetResponseStream ()) { + byte [] content = new byte[str.Length]; + str.Read (content, 0, (int) str.Length); + res = File (content, resp.ContentType); + wr.Abort (); + return res; + } + } } /// diff --git a/web/Controllers/GoogleController.cs b/web/Controllers/GoogleController.cs index d1080c14..f5292095 100644 --- a/web/Controllers/GoogleController.cs +++ b/web/Controllers/GoogleController.cs @@ -67,11 +67,18 @@ namespace Yavsc.Controllers private void GetAuthResponse (string prms) { + string cont = null; WebRequest wr = WebRequest.Create (authUri + "?" + prms); wr.Method = "GET"; - WebResponse response = wr.GetResponse (); - string resQuery = response.ResponseUri.Query; - string cont = HttpUtility.ParseQueryString (resQuery) ["continue"]; + using ( + WebResponse response = wr.GetResponse ()) { + string resQuery = response.ResponseUri.Query; + cont = HttpUtility.ParseQueryString (resQuery) ["continue"]; + response.Close (); + + } + wr.Abort (); + Response.Redirect (cont); } @@ -143,12 +150,19 @@ namespace Yavsc.Controllers { Byte[] bytes = System.Text.Encoding.UTF8.GetBytes (postdata); HttpWebRequest webreq = WebRequest.CreateHttp (tokenUri); + webreq.KeepAlive = false; + webreq.Timeout = 5000; + webreq.Proxy = null; + // Not implemented: webreq.ServicePoint.ConnectionLeaseTimeout = 5000; + webreq.ServicePoint.MaxIdleTime = 5000; webreq.Method = "POST"; webreq.Accept = "application/json"; webreq.ContentType = "application/x-www-form-urlencoded"; webreq.ContentLength = bytes.Length; + using (Stream dataStream = webreq.GetRequestStream ()) { dataStream.Write (bytes, 0, bytes.Length); + dataStream.Close (); } AuthToken gat =null; @@ -157,9 +171,14 @@ namespace Yavsc.Controllers using (StreamReader readStream = new StreamReader (responseStream, Encoding.UTF8)) { string responseStr = readStream.ReadToEnd (); gat = JsonConvert.DeserializeObject (responseStr); + readStream.Close (); } + responseStream.Close (); } + response.Close(); } + webreq.Abort (); + return gat; } @@ -203,6 +222,9 @@ namespace Yavsc.Controllers // just set this user as logged on FormsAuthentication.SetAuthCookie (me.displayName, true); Session ["returnUrl"] = null; + prresponseStream.Close (); + proresp.Close (); + webreppro.Abort (); return Redirect (returnUrl); } // else create the account @@ -210,10 +232,16 @@ namespace Yavsc.Controllers regmod.UserName = me.displayName; Session ["me"] = me; Session ["GoogleAuthToken"] = gat; - return Auth (regmod); + webreppro.Abort (); + + } + prresponseStream.Close (); } + proresp.Close (); } + webreppro.Abort (); + return Auth (regmod); } /// @@ -316,16 +344,19 @@ namespace Yavsc.Controllers webreq.Headers.Add (HttpRequestHeader.Authorization, cred); webreq.Method = "GET"; webreq.ContentType = "application/http"; + CalendarList res = null; using (WebResponse resp = webreq.GetResponse ()) { using (Stream respstream = resp.GetResponseStream ()) { using (StreamReader readresp = new StreamReader (respstream, Encoding.UTF8)) { string responseStr = readresp.ReadToEnd (); - CalendarList res = JsonConvert.DeserializeObject (responseStr); + res = JsonConvert.DeserializeObject (responseStr); ViewData ["json"] = responseStr; - return View (res); } } + resp.Close (); } + webreq.Abort (); + return View (res); } [HttpPost] @@ -384,22 +415,30 @@ namespace Yavsc.Controllers webreq.Headers.Add (HttpRequestHeader.Authorization, GetFreshGoogleCredential(upr)); webreq.Method = "GET"; webreq.ContentType = "application/http"; + CalendarEntryList res = null; using (WebResponse resp = webreq.GetResponse ()) { using (Stream respstream = resp.GetResponseStream ()) { using (StreamReader readresp = new StreamReader (respstream, Encoding.UTF8)) { string responseStr = readresp.ReadToEnd (); try { - CalendarEntryList res = JsonConvert.DeserializeObject (responseStr); + res = JsonConvert.DeserializeObject (responseStr); ViewData ["json"] = responseStr; - return View (res); + + } catch (JsonReaderException ex) { + respstream.Close (); + resp.Close (); + webreq.Abort (); return View ("JsonReaderError", new JsonReaderError() {Text= responseStr, Excepx = ex}); } } + respstream.Close (); } + resp.Close (); } - + webreq.Abort (); + return View (res); } return View (model); }