/// <summary> /// Creates a Facebook session from a signed request. /// </summary> /// <param name="appSecret"> /// The app secret. /// </param> /// <param name="signedRequest"> /// The signed request. /// </param> /// <returns> /// The Facebook session. /// </returns> internal static FacebookSession Create(IFacebookApplication settings, FacebookSignedRequest signedRequest) { if (settings == null) { throw new ArgumentNullException("settings"); } if (signedRequest == null) { return(null); } var data = (IDictionary <string, object>)signedRequest.Data; if (data == null) { return(null); } if (!data.ContainsKey("code") && string.IsNullOrEmpty(signedRequest.AccessToken)) { return(null); } var dictionary = new JsonObject { { "uid", signedRequest.UserId.ToString() } }; if (!string.IsNullOrEmpty(signedRequest.AccessToken)) { dictionary["access_token"] = signedRequest.AccessToken; } if (data.ContainsKey("code")) { foreach (var key in data.Keys) { dictionary[key] = data[key]; } } else { if (signedRequest.Expires == DateTime.MaxValue) { dictionary["expires"] = 0; } else if (signedRequest.Expires != DateTime.MinValue) { dictionary["expires"] = DateTimeConvertor.ToUnixTime(signedRequest.Expires); } if (settings != null && !string.IsNullOrEmpty(settings.AppSecret)) { dictionary["sig"] = GenerateSessionSignature(settings.AppSecret, dictionary); } } return(new FacebookSession(dictionary, settings)); }
/// <summary> /// Creates a facebook session from a signed request. /// </summary> /// <param name="appSecret"> /// The app secret. /// </param> /// <param name="signedRequest"> /// The signed request. /// </param> /// <returns> /// The facebook session. /// </returns> internal static FacebookSession Create(string appSecret, FacebookSignedRequest signedRequest) { if (signedRequest == null || String.IsNullOrEmpty(signedRequest.AccessToken)) { return(null); } var dictionary = new JsonObject { { "uid", signedRequest.UserId.ToString() }, { "access_token", signedRequest.AccessToken } }; if (signedRequest.Expires == DateTime.MaxValue) { dictionary["expires"] = 0; } else if (signedRequest.Expires != DateTime.MinValue) { dictionary["expires"] = DateTimeConvertor.ToUnixTime(signedRequest.Expires); } dictionary["sig"] = GenerateSessionSignature(appSecret, dictionary); return(new FacebookSession(dictionary)); }
/// <summary> /// Try parsing the signed request. /// </summary> /// <param name="secret"> /// The secret. /// </param> /// <param name="signedRequestValue"> /// The signed request value. /// </param> /// <param name="signedRequest"> /// The signed request. /// </param> /// <returns> /// Returns true if parsing was successful otherwise false. /// </returns> public static bool TryParse(string secret, string signedRequestValue, out FacebookSignedRequest signedRequest) { Contract.Requires(!String.IsNullOrEmpty(signedRequestValue)); Contract.Requires(!String.IsNullOrEmpty(secret)); Contract.Requires(signedRequestValue.Contains("."), Properties.Resources.InvalidSignedRequest); var result = TryParse(secret, signedRequestValue, 0, DateTimeConvertor.ToUnixTime(DateTime.UtcNow), false); signedRequest = result == null ? null : new FacebookSignedRequest(result); return(result != null); }
/// <summary> /// Try parsing the signed request. /// </summary> /// <param name="secret"> /// The secret. /// </param> /// <param name="signedRequestValue"> /// The signed request value. /// </param> /// <param name="signedRequest"> /// The signed request. /// </param> /// <returns> /// Returns true if parsing was successful otherwise false. /// </returns> public static bool TryParse(string secret, string signedRequestValue, out FacebookSignedRequest signedRequest) { if (string.IsNullOrEmpty(signedRequestValue)) { throw new ArgumentNullException("signedRequestValue"); } if (string.IsNullOrEmpty(secret)) { throw new ArgumentNullException("secret"); } var result = TryParse(secret, signedRequestValue, 0, DateTimeConvertor.ToUnixTime(DateTime.UtcNow), false); signedRequest = result == null ? null : new FacebookSignedRequest(result); return(result != null); }
/// <summary> /// Try parsing the signed request. /// </summary> /// <param name="secret"> /// The secret. /// </param> /// <param name="signedRequestValue"> /// The signed request value. /// </param> /// <param name="signedRequest"> /// The signed request. /// </param> /// <returns> /// Returns true if parsing was successful otherwise false. /// </returns> public static bool TryParse(string secret, string signedRequestValue, out FacebookSignedRequest signedRequest) { Contract.Requires(!String.IsNullOrEmpty(signedRequestValue)); Contract.Requires(!String.IsNullOrEmpty(secret)); Contract.Requires(signedRequestValue.Contains("."), Properties.Resources.InvalidSignedRequest); var result = TryParse(secret, signedRequestValue, 0, DateTimeConvertor.ToUnixTime(DateTime.UtcNow), false); signedRequest = result == null ? null : new FacebookSignedRequest(result); return result != null; }
/// <summary> /// Creates a facebook session from a signed request. /// </summary> /// <param name="appSecret"> /// The app secret. /// </param> /// <param name="signedRequest"> /// The signed request. /// </param> /// <returns> /// The facebook session. /// </returns> internal static FacebookSession Create(string appSecret, FacebookSignedRequest signedRequest) { if (signedRequest == null || String.IsNullOrEmpty(signedRequest.AccessToken)) { return null; } var dictionary = new JsonObject { { "uid", signedRequest.UserId.ToString() }, { "access_token", signedRequest.AccessToken } }; if (signedRequest.Expires == DateTime.MaxValue) { dictionary["expires"] = 0; } else if (signedRequest.Expires != DateTime.MinValue) { dictionary["expires"] = DateTimeConvertor.ToUnixTime(signedRequest.Expires); } dictionary["sig"] = GenerateSessionSignature(appSecret, dictionary); return new FacebookSession(dictionary); }
/// <summary> /// Gets the facebook session from the http request. /// </summary> /// <param name="appId"> /// The app id. /// </param> /// <param name="appSecret"> /// The app secret. /// </param> /// <param name="httpContext"> /// The http context. /// </param> /// <returns> /// Returns the facebook session if found, otherwise null. /// </returns> internal static FacebookSession GetSession(string appId, string appSecret, HttpContextBase httpContext, FacebookSignedRequest signedRequest) { Contract.Requires(!string.IsNullOrEmpty(appId)); Contract.Requires(!string.IsNullOrEmpty(appSecret)); Contract.Requires(httpContext != null); Contract.Requires(httpContext.Items != null); Contract.Requires(httpContext.Request != null); Contract.Requires(httpContext.Request.Params != null); // If the session is not null, we explicitly DO NOT want to // read from the cookie. Cookies in iFrames == BAD bool readSessionFromCookie = signedRequest == null; FacebookSession facebookSession = null; var httpRequest = httpContext.Request; var items = httpContext.Items; if (items[HttpContextKey] == null) { if (signedRequest == null) { // try creating session from signed_request if exists. signedRequest = FacebookSignedRequest.GetSignedRequest(appSecret, httpContext); } if (signedRequest != null) { facebookSession = FacebookSession.Create(appSecret, signedRequest); } if (readSessionFromCookie && facebookSession == null) { // try creating session from cookie if exists. var sessionCookieValue = GetSessionCookieValue(appId, httpRequest); if (!string.IsNullOrEmpty(sessionCookieValue)) { facebookSession = FacebookSession.ParseCookieValue(appSecret, sessionCookieValue); } } if (facebookSession != null) { items.Add(HttpContextKey, facebookSession); } } else { facebookSession = items["facebook_session"] as FacebookSession; } return facebookSession; }
/// <summary> /// Gets the Facebook session from the http request. /// </summary> /// <param name="appId"> /// The app id. /// </param> /// <param name="appSecret"> /// The app secret. /// </param> /// <param name="httpContext"> /// The http context. /// </param> /// <returns> /// Returns the Facebook session if found, otherwise null. /// </returns> internal static FacebookSession GetSession(IFacebookApplication settings, HttpContextBase httpContext, FacebookSignedRequest signedRequest) { if (settings == null) { throw new ArgumentNullException("settings"); } if (string.IsNullOrEmpty(settings.AppId)) { throw new Exception("settings.AppId is null."); } if (string.IsNullOrEmpty(settings.AppSecret)) { throw new Exception("settings.AppSecret is null."); } if (httpContext == null) { throw new ArgumentNullException("httpContext"); } // If the session is not null, we explicitly DO NOT want to // read from the cookie. Cookies in iFrames == BAD bool readSessionFromCookie = signedRequest == null; FacebookSession facebookSession = null; var httpRequest = httpContext.Request; var items = httpContext.Items; if (items[HttpContextKey] == null) { if (signedRequest == null) { // try creating session from signed_request if exists. signedRequest = FacebookSignedRequest.GetSignedRequest(settings.AppId, settings.AppSecret, httpContext); } if (signedRequest != null) { facebookSession = FacebookSession.Create(settings, signedRequest); } if (readSessionFromCookie && facebookSession == null) { // try creating session from cookie if exists. var sessionCookieValue = GetSessionCookieValue(settings.AppId, httpRequest); if (!string.IsNullOrEmpty(sessionCookieValue)) { facebookSession = FacebookSession.ParseCookieValue(settings, sessionCookieValue); } } if (facebookSession != null) { items.Add(HttpContextKey, facebookSession); } } else { facebookSession = items["facebook_session"] as FacebookSession; } return(facebookSession); }
/// <summary> /// Try parsing the signed request. /// </summary> /// <param name="facebookApplication"> /// The Facebook application. /// </param> /// <param name="signedRequestValue"> /// The signed request value. /// </param> /// <param name="signedRequest"> /// The signed request. /// </param> /// <returns> /// Returns true if parsing was successful otherwise false. /// </returns> public static bool TryParse(IFacebookApplication facebookApplication, string signedRequestValue, out FacebookSignedRequest signedRequest) { if (facebookApplication == null) { throw new ArgumentNullException("facebookApplication"); } return(TryParse(facebookApplication.AppSecret, signedRequestValue, out signedRequest)); }
/// <summary> /// Gets the facebook signed request from the http request. /// </summary> /// <param name="appSecret"> /// The app Secret. /// </param> /// <param name="httpContext"> /// The http context. /// </param> /// <returns> /// Returns the signed request if found otherwise null. /// </returns> internal static FacebookSignedRequest GetSignedRequest(string appSecret, HttpContextBase httpContext) { Contract.Requires(httpContext != null); Contract.Requires(httpContext.Request != null); Contract.Requires(httpContext.Request.Params != null); var items = httpContext.Items; var httpRequest = httpContext.Request; FacebookSignedRequest signedRequest; if (items[HttpContextKey] == null) { signedRequest = (httpRequest.Params.AllKeys.Contains(SignedRequestKey) && !string.IsNullOrEmpty(httpRequest.Params[SignedRequestKey])) ? FacebookSignedRequest.Parse(appSecret, httpRequest.Params[SignedRequestKey]) : null; items[HttpContextKey] = signedRequest; } else { signedRequest = items[HttpContextKey] as FacebookSignedRequest; } return(signedRequest); }
/// <summary> /// Try parsing the signed request. /// </summary> /// <param name="facebookApplication"> /// The facebook application. /// </param> /// <param name="request"> /// The request. /// </param> /// <param name="signedRequest"> /// The signed request. /// </param> /// <returns> /// Returns true if parsing is successful otherwise false. /// </returns> public static bool TryParse(IFacebookApplication facebookApplication, HttpRequestBase request, out FacebookSignedRequest signedRequest) { signedRequest = null; return(request.Params.AllKeys.Contains(SignedRequestKey) && TryParse(facebookApplication, request.Params[SignedRequestKey], out signedRequest)); }
/// <summary> /// Try parsing the signed request. /// </summary> /// <param name="facebookApplication"> /// The facebook application. /// </param> /// <param name="signedRequestValue"> /// The signed request value. /// </param> /// <param name="signedRequest"> /// The signed request. /// </param> /// <returns> /// Returns true if parsing was successful otherwise false. /// </returns> public static bool TryParse(IFacebookApplication facebookApplication, string signedRequestValue, out FacebookSignedRequest signedRequest) { Contract.Requires(facebookApplication != null); Contract.Requires(!string.IsNullOrEmpty(facebookApplication.AppSecret)); Contract.Requires(!String.IsNullOrEmpty(signedRequestValue)); Contract.Requires(signedRequestValue.Contains("."), Properties.Resources.InvalidSignedRequest); return(TryParse(facebookApplication.AppSecret, signedRequestValue, out signedRequest)); }
/// <summary> /// Gets the facebook signed request from the http request. /// </summary> /// <param name="appSecret"> /// The app Secret. /// </param> /// <param name="httpContext"> /// The http context. /// </param> /// <returns> /// Returns the signed request if found otherwise null. /// </returns> internal static FacebookSignedRequest GetSignedRequest(string appId, string appSecret, HttpContextBase httpContext) { if (httpContext == null) { throw new ArgumentNullException("httpContext"); } var items = httpContext.Items; var httpRequest = httpContext.Request; FacebookSignedRequest signedRequest; if (items[HttpContextKey] == null) { signedRequest = httpRequest.Params.AllKeys.Contains(SignedRequestKey) && !string.IsNullOrEmpty(httpRequest.Params[SignedRequestKey]) ? FacebookSignedRequest.Parse(appSecret, httpRequest.Params[SignedRequestKey]) : null; if (signedRequest == null && !string.IsNullOrEmpty(appId)) { var signedRequestCookieValue = GetSignedRequestCookieValue(appId, httpRequest); if (!string.IsNullOrEmpty(signedRequestCookieValue)) { signedRequest = Parse(appSecret, signedRequestCookieValue); } } items[HttpContextKey] = signedRequest; } else { signedRequest = items[HttpContextKey] as FacebookSignedRequest; } return(signedRequest); }
/// <summary> /// Try parsing the signed request. /// </summary> /// <param name="facebookApplication"> /// The facebook application. /// </param> /// <param name="request"> /// The request. /// </param> /// <param name="signedRequest"> /// The signed request. /// </param> /// <returns> /// Returns true if parsing is successful otherwise false. /// </returns> public static bool TryParse(IFacebookApplication facebookApplication, HttpRequestBase request, out FacebookSignedRequest signedRequest) { if (request.Params.AllKeys.Contains(SignedRequestKey) && !string.IsNullOrEmpty(request.Params[SignedRequestKey])) { return(TryParse(facebookApplication, request.Params[SignedRequestKey], out signedRequest)); } if (facebookApplication != null && !string.IsNullOrEmpty(facebookApplication.AppId)) { var signedRequestCookieValue = GetSignedRequestCookieValue(facebookApplication.AppId, request); return(TryParse(facebookApplication, signedRequestCookieValue, out signedRequest)); } signedRequest = null; return(false); }
/// <summary> /// Try parsing the signed request. /// </summary> /// <param name="facebookApplication"> /// The facebook application. /// </param> /// <param name="signedRequestValue"> /// The signed request value. /// </param> /// <param name="signedRequest"> /// The signed request. /// </param> /// <returns> /// Returns true if parsing was successful otherwise false. /// </returns> public static bool TryParse(IFacebookApplication facebookApplication, string signedRequestValue, out FacebookSignedRequest signedRequest) { Contract.Requires(facebookApplication != null); Contract.Requires(!string.IsNullOrEmpty(facebookApplication.AppSecret)); Contract.Requires(!String.IsNullOrEmpty(signedRequestValue)); Contract.Requires(signedRequestValue.Contains("."), Properties.Resources.InvalidSignedRequest); return TryParse(facebookApplication.AppSecret, signedRequestValue, out signedRequest); }
/// <summary> /// Try parsing the signed request. /// </summary> /// <param name="facebookApplication"> /// The facebook application. /// </param> /// <param name="request"> /// The request. /// </param> /// <param name="signedRequest"> /// The signed request. /// </param> /// <returns> /// Returns true if parsing is successful otherwise false. /// </returns> public static bool TryParse(IFacebookApplication facebookApplication, HttpRequestBase request, out FacebookSignedRequest signedRequest) { signedRequest = null; return request.Params.AllKeys.Contains(SignedRequestKey) && TryParse(facebookApplication, request.Params[SignedRequestKey], out signedRequest); }
/// <summary> /// Gets the facebook session from the http request. /// </summary> /// <param name="appId"> /// The app id. /// </param> /// <param name="appSecret"> /// The app secret. /// </param> /// <param name="httpContext"> /// The http context. /// </param> /// <returns> /// Returns the facebook session if found, otherwise null. /// </returns> internal static FacebookSession GetSession(string appId, string appSecret, HttpContextBase httpContext, FacebookSignedRequest signedRequest) { Contract.Requires(!string.IsNullOrEmpty(appId)); Contract.Requires(!string.IsNullOrEmpty(appSecret)); Contract.Requires(httpContext != null); Contract.Requires(httpContext.Items != null); Contract.Requires(httpContext.Request != null); Contract.Requires(httpContext.Request.Params != null); // If the session is not null, we explicitly DO NOT want to // read from the cookie. Cookies in iFrames == BAD bool readSessionFromCookie = signedRequest == null; FacebookSession facebookSession = null; var httpRequest = httpContext.Request; var items = httpContext.Items; if (items[HttpContextKey] == null) { if (signedRequest == null) { // try creating session from signed_request if exists. signedRequest = FacebookSignedRequest.GetSignedRequest(appSecret, httpContext); } if (signedRequest != null) { facebookSession = FacebookSession.Create(appSecret, signedRequest); httpContext.Session[HttpContextKey] = facebookSession; } else if (null != httpContext.Session[HttpContextKey]) { facebookSession = httpContext.Session[HttpContextKey] as FacebookSession; } else if (!string.IsNullOrEmpty(httpContext.Request["code"])) { facebookSession = FacebookSession.Create(appSecret, httpContext.Request["code"]); } if (readSessionFromCookie && facebookSession == null) { // try creating session from cookie if exists. var sessionCookieValue = GetSessionCookieValue(appId, httpRequest); if (!string.IsNullOrEmpty(sessionCookieValue)) { facebookSession = FacebookSession.ParseCookieValue(appSecret, sessionCookieValue); } } if (facebookSession != null) { items.Add(HttpContextKey, facebookSession); httpContext.Session[HttpContextKey] = facebookSession; } } else { facebookSession = items["facebook_session"] as FacebookSession; } return(facebookSession); }