public TUser LoadUser <TUser>(HttpContextBase httpContext) where TUser : FacebookUser, new() { dynamic signedRequest = GetSignedRequest(httpContext); if (signedRequest != null) { string userId = signedRequest.user_id; if (userId == null) { return(null); } var user = (TUser)facebookUserStorageService.GetUser(userId); if (user == null) { user = new TUser() { FacebookId = userId }; } return(RefreshUser(user, signedRequest.oauth_token)); } throw new ApplicationException("Invalid request. No signed_request parameter was found on the request."); }
//TODO: (ErikPo) Make this async public HttpResponseMessage Post(JObject facebookObject) { #if Debug Utilities.Log(facebookObject.ToString()); #endif //TODO: (ErikPo) Find out for sure if we need to validate the request here during the security review //TODO: (ErikPo) This code needs to move into some sort of user change handler if (facebookObject["object"].Value <string>() == "user") { foreach (var entry in facebookObject["entry"]) { var facebookId = entry["id"].Value <string>(); var fields = new List <string>(); foreach (var changedField in entry["changed_fields"]) { fields.Add(changedField.Value <string>()); } if (fields.Count > 0) { var user = facebookUserStorageService.GetUser(facebookId); if (user != null) { facebookService.RefreshUserFields(user, fields.ToArray()); FacebookUserEvents.FireUserChangedEvent(user); } } } } //TODO: (ErikPo) Parse other stuff like friend changes return(Request.CreateResponse(HttpStatusCode.OK)); }
private object GetUser(Type modelType, string facebookId, global::Facebook.FacebookClient client) { var user = facebookUserStorageService.GetUser(facebookId); //TODO: (ErikPo) Fill in the other half of this condition if (user == null /* or this is the first time the app has started */) { object userFields = client.Get("me" + (!String.IsNullOrEmpty(fields) ? "?fields=" + fields.Replace(" ", String.Empty) : facebookService.GetFields(modelType))); if (modelType == typeof(FacebookUser)) { return(new FacebookUser { Data = userFields }); } else if (modelType == typeof(object)) { return((dynamic)userFields); } user = (FacebookUser)Activator.CreateInstance(modelType); user.Data = userFields; var facebookFields = GetUserFields(modelType); PropertyInfo userProperty; string facebookFieldName; object fieldValue; foreach (var field in facebookFields) { if (field.Value != null && field.Value.Ignore) { continue; } userProperty = field.Key; facebookFieldName = field.Value != null ? field.Value.JsonField : String.Empty; if (!String.IsNullOrEmpty(facebookFieldName)) { fieldValue = GetFBFieldValue(userFields, facebookFieldName.Split('.')); } else { fieldValue = GetFBFieldValue(userFields, new[] { userProperty.Name }); } if (fieldValue != null) { userProperty.SetValue(user, fieldValue, null); } } facebookUserStorageService.AddUser(user); } return(user); }