public ResponseModel<LoginResponse> CheckAndSaveFacebookUserInfoIntoDatabase(string fid, string refKey, string access_token, bool isMobileApiCall) { var response = new ResponseModel<LoginResponse>(); var ifFacebookUserAlreadyRegistered = _db.FacebookAuths.SingleOrDefault(x => x.facebookId == fid); if (isMobileApiCall) { var fb = new FacebookClient(access_token); dynamic fqlResponse = fb.Get("fql", new { q = "SELECT uid, first_name, last_name, sex, pic_big_with_logo, username FROM user WHERE uid=me()" }); var FacebookAuthData = new FacebookAuth(); FacebookAuthData.username = Constants.NA; FacebookAuthData.AuthToken = access_token; FacebookAuthData.datetime = DateTime.Now.ToString(); FacebookAuthData.facebookId = Convert.ToString(fqlResponse.data[0].uid); FacebookAuthData.facebookUsername = fqlResponse.data[0].username; //var ifAlreadyExists = _db.FacebookAuths.SingleOrDefault(x => x.facebookId == fid); if (ifFacebookUserAlreadyRegistered == null) { _db.FacebookAuths.Add(FacebookAuthData); ifFacebookUserAlreadyRegistered = FacebookAuthData; } else { // refresh the token ifFacebookUserAlreadyRegistered.AuthToken = access_token; ifFacebookUserAlreadyRegistered.datetime = DateTime.Now.ToString(); } } //var ifFacebookUserAlreadyRegistered = _db.FacebookAuths.SingleOrDefault(x => x.facebookId == fid); if (ifFacebookUserAlreadyRegistered.username != Constants.NA) { if (_db.Users.Any(x => x.Username == ifFacebookUserAlreadyRegistered.username)) { var user = _db.Users.SingleOrDefault(x => x.Username == ifFacebookUserAlreadyRegistered.username); if (user != null) { var data = new Dictionary<string, string>(); data["Username"] = user.Username; data["Password"] = user.Password; data["userGuid"] = user.guid; var encryptedData = EncryptionClass.encryptUserDetails(data); response.Payload = new LoginResponse(); response.Payload.UTMZK = encryptedData["UTMZK"]; response.Payload.UTMZV = encryptedData["UTMZV"]; response.Payload.TimeStamp = DateTime.Now.ToString(CultureInfo.InvariantCulture); response.Payload.Code = "210"; response.Status = 210; response.Message = "user Login via facebook"; try { user.KeepMeSignedIn = "true";//keepMeSignedIn.Equals("true", StringComparison.OrdinalIgnoreCase) ? "true" : "false"; user.Locked = Constants.status_false; _db.SaveChanges(); var session = new M2ESession(ifFacebookUserAlreadyRegistered.username); TokenManager.CreateSession(session); response.Payload.UTMZT = session.SessionId; return response; } catch (DbEntityValidationException e) { DbContextException.LogDbContextException(e); response.Payload.Code = "500"; return response; } } else response.Payload.Code = "403"; } } else { //save user details in database .. var fb = new FacebookClient(ifFacebookUserAlreadyRegistered.AuthToken); dynamic result = fb.Get("fql", new { q = "SELECT uid, first_name, last_name, sex, pic_big_with_logo, username FROM user WHERE uid=me()" }); var guid = Guid.NewGuid().ToString(); var user = new User { Username = result.data[0].username + "@facebook.com", Password = EncryptionClass.Md5Hash(Guid.NewGuid().ToString()), Source = "facebook", isActive = "true", Type = "user", guid = Guid.NewGuid().ToString(), fixedGuid = Guid.NewGuid().ToString(), FirstName = result.data[0].first_name, LastName = result.data[0].last_name, gender = result.data[0].sex, ImageUrl = result.data[0].pic_big_with_logo }; _db.Users.Add(user); if (!Constants.NA.Equals(refKey)) { new ReferralService().payReferralBonusAsync(refKey, user.Username, Constants.status_true); } try { ifFacebookUserAlreadyRegistered.username = user.Username; _db.SaveChanges(); var data = new Dictionary<string, string>(); data["Username"] = user.Username; data["Password"] = user.Password; data["userGuid"] = user.guid; var encryptedData = EncryptionClass.encryptUserDetails(data); response.Payload = new LoginResponse(); response.Payload.UTMZK = encryptedData["UTMZK"]; response.Payload.UTMZV = encryptedData["UTMZV"]; response.Payload.TimeStamp = DateTime.Now.ToString(CultureInfo.InvariantCulture); response.Payload.Code = "210"; response.Status = 210; response.Message = "user Login via facebook"; try { var session = new M2ESession(ifFacebookUserAlreadyRegistered.username); TokenManager.CreateSession(session); response.Payload.UTMZT = session.SessionId; } catch (DbEntityValidationException e) { DbContextException.LogDbContextException(e); response.Status = 500; response.Message = "Internal Server Error !!"; } var signalRHub = new SignalRHub(); string totalProjects = ""; string successRate = ""; string totalUsers = _db.Users.Count().ToString(CultureInfo.InvariantCulture); string projectCategories = ""; new UserMessageService().SendUserNotificationForAccountVerificationSuccess( user.Username, user.Type ); var hubContext = GlobalHost.ConnectionManager.GetHubContext<SignalRHub>(); hubContext.Clients.All.updateBeforeLoginUserProjectDetails(totalProjects, successRate, totalUsers, projectCategories); } catch (DbEntityValidationException e) { DbContextException.LogDbContextException(e); response.Status = 500; response.Message = "Internal Server Error !!!"; } } return response; }
public ActionResult FBLogin(string type) { var response = new ResponseModel<string>(); String code = Request.QueryString["code"]; string app_id = string.Empty; string app_secret = string.Empty; string returnUrl = "http://"+Request.Url.Authority+"/SocialAuth/FBLogin/facebook/"; if(Request.Url.Authority.Contains("localhost")) { app_id = ConfigurationManager.AppSettings["FacebookAppID"].ToString(); app_secret = ConfigurationManager.AppSettings["FacebookAppSecret"].ToString(); } else { app_id = ConfigurationManager.AppSettings["FacebookAppIDCautom"].ToString(); app_secret = ConfigurationManager.AppSettings["FacebookAppSecretCautom"].ToString(); } string scope = ""; if (code == null) { response.Status = 199; response.Message = "reload page with given url"; response.Payload = (string.Format( "https://graph.facebook.com/oauth/authorize?client_id={0}&redirect_uri={1}&scope={2}", app_id, returnUrl, scope)); //return Json(response,JsonRequestBehavior.AllowGet); Response.Redirect(response.Payload); } else { try { string access_token = new FacebookService().getFacebookAuthToken(returnUrl, scope, code, app_id, app_secret); var fb = new FacebookClient(access_token); //dynamic result = fb.Get("fql", // new { q = "SELECT uid, name, first_name, middle_name, last_name, sex, locale, pic_small_with_logo, pic_big_with_logo, pic_square_with_logo, pic_with_logo, username FROM user WHERE uid=me()" }); dynamic fqlResponse = fb.Get("fql", new { q = "SELECT uid, username FROM user WHERE uid=me()" }); var FacebookAuthData = new FacebookAuth(); string fid = Convert.ToString(fqlResponse.data[0].uid); FacebookAuthData.username = Constants.NA; FacebookAuthData.AuthToken = access_token; FacebookAuthData.datetime = DateTime.Now.ToString(); FacebookAuthData.facebookId = Convert.ToString(fqlResponse.data[0].uid); FacebookAuthData.facebookUsername = fqlResponse.data[0].username; var ifAlreadyExists = _db.FacebookAuths.SingleOrDefault(x => x.facebookId == fid); if (ifAlreadyExists == null) { _db.FacebookAuths.Add(FacebookAuthData); } else { // refresh the token ifAlreadyExists.AuthToken = access_token; ifAlreadyExists.datetime = DateTime.Now.ToString(); } try { _db.SaveChanges(); response.Status = 200; response.Message = "success-"; } catch (DbEntityValidationException e) { DbContextException.LogDbContextException(e); response.Status = 500; response.Message = "Failed"; } ViewBag.facebookId = fqlResponse.data[0].uid; return View(FacebookAuthData); } catch (Exception ex) { logger.Error("Error Occured while getting Facebook Auth Token",ex); } //var fb = new FacebookClient(); //dynamic result = fb.Get("fql", //new { q = "SELECT page_id FROM page_fan WHERE uid=100001648098091 AND page_id=223215721036909" }); //To obtain an App Access Token, invoke the following HTTP GET request //GET https://graph.facebook.com/oauth/access_token? // client_id=YOUR_APP_ID // &client_secret=YOUR_APP_SECRET // &grant_type=client_credentials //The API will respond with a query-string formatted string of the form: // access_token=YOUR_APP_ACCESS_TOKEN } return View(); }