* BlogsController.cs: fixes the bug rendering the avatar

* GoogleController.cs: fixes the bug at reusing the same url in a
  (Http)WebRequest (call Abort() when finiched)
vnext
Paul Schneider 10 years ago
parent 753e5290bb
commit 29046a3e07
2 changed files with 58 additions and 12 deletions

@ -246,9 +246,16 @@ namespace Yavsc.Controllers
return File (fia.OpenRead (), defaultAvatarMimetype); return File (fia.OpenRead (), defaultAvatarMimetype);
} }
WebRequest wr = WebRequest.Create(avpath); WebRequest wr = WebRequest.Create(avpath);
WebResponse resp = wr.GetResponse (); FileContentResult res;
Stream str = resp.GetResponseStream (); using (WebResponse resp = wr.GetResponse ()) {
return File (str, resp.ContentType); 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;
}
}
} }
/// <summary> /// <summary>

@ -67,11 +67,18 @@ namespace Yavsc.Controllers
private void GetAuthResponse (string prms) private void GetAuthResponse (string prms)
{ {
string cont = null;
WebRequest wr = WebRequest.Create (authUri + "?" + prms); WebRequest wr = WebRequest.Create (authUri + "?" + prms);
wr.Method = "GET"; wr.Method = "GET";
WebResponse response = wr.GetResponse (); using (
string resQuery = response.ResponseUri.Query; WebResponse response = wr.GetResponse ()) {
string cont = HttpUtility.ParseQueryString (resQuery) ["continue"]; string resQuery = response.ResponseUri.Query;
cont = HttpUtility.ParseQueryString (resQuery) ["continue"];
response.Close ();
}
wr.Abort ();
Response.Redirect (cont); Response.Redirect (cont);
} }
@ -143,12 +150,19 @@ namespace Yavsc.Controllers
{ {
Byte[] bytes = System.Text.Encoding.UTF8.GetBytes (postdata); Byte[] bytes = System.Text.Encoding.UTF8.GetBytes (postdata);
HttpWebRequest webreq = WebRequest.CreateHttp (tokenUri); 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.Method = "POST";
webreq.Accept = "application/json"; webreq.Accept = "application/json";
webreq.ContentType = "application/x-www-form-urlencoded"; webreq.ContentType = "application/x-www-form-urlencoded";
webreq.ContentLength = bytes.Length; webreq.ContentLength = bytes.Length;
using (Stream dataStream = webreq.GetRequestStream ()) { using (Stream dataStream = webreq.GetRequestStream ()) {
dataStream.Write (bytes, 0, bytes.Length); dataStream.Write (bytes, 0, bytes.Length);
dataStream.Close ();
} }
AuthToken gat =null; AuthToken gat =null;
@ -157,9 +171,14 @@ namespace Yavsc.Controllers
using (StreamReader readStream = new StreamReader (responseStream, Encoding.UTF8)) { using (StreamReader readStream = new StreamReader (responseStream, Encoding.UTF8)) {
string responseStr = readStream.ReadToEnd (); string responseStr = readStream.ReadToEnd ();
gat = JsonConvert.DeserializeObject<AuthToken> (responseStr); gat = JsonConvert.DeserializeObject<AuthToken> (responseStr);
readStream.Close ();
} }
responseStream.Close ();
} }
response.Close();
} }
webreq.Abort ();
return gat; return gat;
} }
@ -203,6 +222,9 @@ namespace Yavsc.Controllers
// just set this user as logged on // just set this user as logged on
FormsAuthentication.SetAuthCookie (me.displayName, true); FormsAuthentication.SetAuthCookie (me.displayName, true);
Session ["returnUrl"] = null; Session ["returnUrl"] = null;
prresponseStream.Close ();
proresp.Close ();
webreppro.Abort ();
return Redirect (returnUrl); return Redirect (returnUrl);
} }
// else create the account // else create the account
@ -210,10 +232,16 @@ namespace Yavsc.Controllers
regmod.UserName = me.displayName; regmod.UserName = me.displayName;
Session ["me"] = me; Session ["me"] = me;
Session ["GoogleAuthToken"] = gat; Session ["GoogleAuthToken"] = gat;
return Auth (regmod); webreppro.Abort ();
} }
prresponseStream.Close ();
} }
proresp.Close ();
} }
webreppro.Abort ();
return Auth (regmod);
} }
/// <summary> /// <summary>
@ -316,16 +344,19 @@ namespace Yavsc.Controllers
webreq.Headers.Add (HttpRequestHeader.Authorization, cred); webreq.Headers.Add (HttpRequestHeader.Authorization, cred);
webreq.Method = "GET"; webreq.Method = "GET";
webreq.ContentType = "application/http"; webreq.ContentType = "application/http";
CalendarList res = null;
using (WebResponse resp = webreq.GetResponse ()) { using (WebResponse resp = webreq.GetResponse ()) {
using (Stream respstream = resp.GetResponseStream ()) { using (Stream respstream = resp.GetResponseStream ()) {
using (StreamReader readresp = new StreamReader (respstream, Encoding.UTF8)) { using (StreamReader readresp = new StreamReader (respstream, Encoding.UTF8)) {
string responseStr = readresp.ReadToEnd (); string responseStr = readresp.ReadToEnd ();
CalendarList res = JsonConvert.DeserializeObject<CalendarList> (responseStr); res = JsonConvert.DeserializeObject<CalendarList> (responseStr);
ViewData ["json"] = responseStr; ViewData ["json"] = responseStr;
return View (res);
} }
} }
resp.Close ();
} }
webreq.Abort ();
return View (res);
} }
[HttpPost] [HttpPost]
@ -384,22 +415,30 @@ namespace Yavsc.Controllers
webreq.Headers.Add (HttpRequestHeader.Authorization, GetFreshGoogleCredential(upr)); webreq.Headers.Add (HttpRequestHeader.Authorization, GetFreshGoogleCredential(upr));
webreq.Method = "GET"; webreq.Method = "GET";
webreq.ContentType = "application/http"; webreq.ContentType = "application/http";
CalendarEntryList res = null;
using (WebResponse resp = webreq.GetResponse ()) { using (WebResponse resp = webreq.GetResponse ()) {
using (Stream respstream = resp.GetResponseStream ()) { using (Stream respstream = resp.GetResponseStream ()) {
using (StreamReader readresp = new StreamReader (respstream, Encoding.UTF8)) { using (StreamReader readresp = new StreamReader (respstream, Encoding.UTF8)) {
string responseStr = readresp.ReadToEnd (); string responseStr = readresp.ReadToEnd ();
try { try {
CalendarEntryList res = JsonConvert.DeserializeObject<CalendarEntryList> (responseStr); res = JsonConvert.DeserializeObject<CalendarEntryList> (responseStr);
ViewData ["json"] = responseStr; ViewData ["json"] = responseStr;
return View (res);
} }
catch (JsonReaderException ex) { catch (JsonReaderException ex) {
respstream.Close ();
resp.Close ();
webreq.Abort ();
return View ("JsonReaderError", new JsonReaderError() {Text= responseStr, Excepx = ex}); return View ("JsonReaderError", new JsonReaderError() {Text= responseStr, Excepx = ex});
} }
} }
respstream.Close ();
} }
resp.Close ();
} }
webreq.Abort ();
return View (res);
} }
return View (model); return View (model);
} }

Loading…