protected override void OnInit(EventArgs e) { base.OnInit(e); if (_PerformFBLoginCheck) { try { string sessionKey = FaceBookSessionKey(); if (!string.IsNullOrWhiteSpace(sessionKey) && this.UserId <= 0) { // we have a facebook session but the user is logged out of our site. sessionKey = sessionKey.Substring(1, sessionKey.Length - 2); // remove the " from front and back.... System.Collections.Specialized.NameValueCollection nvc = HttpUtility.ParseQueryString(sessionKey); if (nvc.Get("uid") != null) { string access_token = nvc.Get("access_token"); WebRequest request = WebRequest.Create("https://graph.facebook.com/me?access_token=" + access_token); WebResponse res = request.GetResponse(); System.IO.Stream ReceiveStream = res.GetResponseStream(); System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); System.IO.StreamReader readStream = new System.IO.StreamReader(ReceiveStream, encode); string json = readStream.ReadToEnd(); System.Web.Script.Serialization.JavaScriptSerializer serial = new System.Web.Script.Serialization.JavaScriptSerializer(); fbUser = serial.Deserialize <Affine.Data.json.FaceBookUser>(json); if (!string.IsNullOrWhiteSpace(fbUser.email)) { aqufitEntities entities = new aqufitEntities(); User siteUser = null; siteUser = entities.UserSettings.OfType <User>().FirstOrDefault(u => u.PortalKey == PortalId && u.FBUid == fbUser.id); if (siteUser == null) { siteUser = entities.UserSettings.OfType <User>().FirstOrDefault(u => u.PortalKey == PortalId && u.UserEmail.ToLower() == fbUser.email); } if (siteUser != null) { // we can log the user in if (siteUser.FBUid == null) { siteUser.FBUid = fbUser.id; entities.SaveChanges(); } else if (siteUser.FBUid.Value != fbUser.id) { // something strange is going on here.. these should be equal throw new Exception("Facebook Login Exception."); } UserInfo uinfo = UserController.GetUser((int)siteUser.PortalKey, (int)siteUser.UserKey, true); UserController.UserLogin((int)siteUser.PortalKey, uinfo, PortalSettings.PortalName, DotNetNuke.Services.Authentication.AuthenticationLoginBase.GetIPAddress(), true); string url = Request.RawUrl; if (!string.IsNullOrWhiteSpace(Request["ReturnUrl"])) { url = Request["returnurl"]; } else if (url.Contains("/Login") || url.EndsWith("flexfwd.com/") || url.EndsWith("flexfwd.com/Home.aspx")) { url = ResolveUrl("~/") + siteUser.UserName; } Response.Redirect(url, true); } else if (Request["sl"] == null) // sl (stop loop) is not defined.. { // TODO: this should just bring them to the info that they still need to fill out. Response.Redirect(ResolveUrl("~/RPX?sl=0"), true); } } } } else if (Request.Cookies["FlexLogout"] != null) { Request.Cookies.Remove("FlexRM"); Request.Cookies.Remove("FlexLogout"); } else if (Request.Cookies["FlexRM"] != null && this.UserId <= 0) { aqufitEntities entities = new aqufitEntities(); User siteUser = null; Guid test = Guid.Parse(Request.Cookies["FlexRM"].Value); siteUser = entities.UserSettings.OfType <User>().FirstOrDefault(u => u.PortalKey == PortalId && u.Guid == test); if (siteUser != null) { // we can log the user in UserInfo uinfo = UserController.GetUser((int)siteUser.PortalKey, (int)siteUser.UserKey, true); UserController.UserLogin((int)siteUser.PortalKey, uinfo, PortalSettings.PortalName, DotNetNuke.Services.Authentication.AuthenticationLoginBase.GetIPAddress(), true); string url = Request.RawUrl; if (!string.IsNullOrWhiteSpace(Request["ReturnUrl"])) { url = Request["returnurl"]; } else if (url.Contains("/Login") || url.EndsWith("flexfwd.com/") || url.EndsWith("flexfwd.com/Home.aspx")) { url = ResolveUrl("~/") + siteUser.UserName; } Response.Redirect(url, true); } } } catch (Exception) { // do nothing here. } } }
protected override void OnInit(EventArgs e) { base.OnInit(e); if (_PerformFBLoginCheck) { try { string sessionKey = FaceBookSessionKey(); if (!string.IsNullOrWhiteSpace(sessionKey) && this.UserId <= 0) { // we have a facebook session but the user is logged out of our site. sessionKey = sessionKey.Substring(1, sessionKey.Length - 2); // remove the " from front and back.... System.Collections.Specialized.NameValueCollection nvc = HttpUtility.ParseQueryString(sessionKey); if (nvc.Get("uid") != null) { string access_token = nvc.Get("access_token"); WebRequest request = WebRequest.Create("https://graph.facebook.com/me?access_token=" + access_token); WebResponse res = request.GetResponse(); System.IO.Stream ReceiveStream = res.GetResponseStream(); System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); System.IO.StreamReader readStream = new System.IO.StreamReader(ReceiveStream, encode); string json = readStream.ReadToEnd(); System.Web.Script.Serialization.JavaScriptSerializer serial = new System.Web.Script.Serialization.JavaScriptSerializer(); fbUser = serial.Deserialize<Affine.Data.json.FaceBookUser>(json); if (!string.IsNullOrWhiteSpace(fbUser.email)) { aqufitEntities entities = new aqufitEntities(); User siteUser = null; siteUser = entities.UserSettings.OfType<User>().FirstOrDefault(u => u.PortalKey == PortalId && u.FBUid == fbUser.id ); if (siteUser == null) { siteUser = entities.UserSettings.OfType<User>().FirstOrDefault(u => u.PortalKey == PortalId && u.UserEmail.ToLower() == fbUser.email); } if (siteUser != null) { // we can log the user in if (siteUser.FBUid == null) { siteUser.FBUid = fbUser.id; entities.SaveChanges(); } else if (siteUser.FBUid.Value != fbUser.id) { // something strange is going on here.. these should be equal throw new Exception("Facebook Login Exception."); } UserInfo uinfo = UserController.GetUser((int)siteUser.PortalKey, (int)siteUser.UserKey, true); UserController.UserLogin((int)siteUser.PortalKey, uinfo, PortalSettings.PortalName, DotNetNuke.Services.Authentication.AuthenticationLoginBase.GetIPAddress(), true); string url = Request.RawUrl; if (!string.IsNullOrWhiteSpace(Request["ReturnUrl"])) { url = Request["returnurl"]; } else if (url.Contains("/Login") || url.EndsWith("flexfwd.com/") || url.EndsWith("flexfwd.com/Home.aspx")) { url = ResolveUrl("~/") + siteUser.UserName; } Response.Redirect(url, true); } else if( Request["sl"] == null ) // sl (stop loop) is not defined.. { // TODO: this should just bring them to the info that they still need to fill out. Response.Redirect(ResolveUrl("~/RPX?sl=0"), true); } } } } else if (Request.Cookies["FlexLogout"] != null) { Request.Cookies.Remove("FlexRM"); Request.Cookies.Remove("FlexLogout"); } else if (Request.Cookies["FlexRM"] != null && this.UserId <= 0) { aqufitEntities entities = new aqufitEntities(); User siteUser = null; Guid test = Guid.Parse(Request.Cookies["FlexRM"].Value); siteUser = entities.UserSettings.OfType<User>().FirstOrDefault(u => u.PortalKey == PortalId && u.Guid == test); if (siteUser != null) { // we can log the user in UserInfo uinfo = UserController.GetUser((int)siteUser.PortalKey, (int)siteUser.UserKey, true); UserController.UserLogin((int)siteUser.PortalKey, uinfo, PortalSettings.PortalName, DotNetNuke.Services.Authentication.AuthenticationLoginBase.GetIPAddress(), true); string url = Request.RawUrl; if (!string.IsNullOrWhiteSpace(Request["ReturnUrl"])) { url = Request["returnurl"]; } else if (url.Contains("/Login") || url.EndsWith("flexfwd.com/") || url.EndsWith("flexfwd.com/Home.aspx")) { url = ResolveUrl("~/") + siteUser.UserName; } Response.Redirect(url, true); } } } catch (Exception) { // do nothing here. } } }