public ActionResult RegisterFacebook(RegisterFacebookModel model) { if (!ModelState.IsValid || Members.IsLoggedIn() || string.IsNullOrEmpty(model.Email)) { return(PartialView("Profile/RegisterFacebook", model)); } var memberService = Services.MemberService; var checkMemberEmail = Services.MemberService.GetByEmail(model.Email); if (checkMemberEmail != null) { ModelState.AddModelError("FormGenericError", "The email already in use!"); return(PartialView("Profile/RegisterFacebook", model)); } // check if username unique if (Services.MemberService.GetByUsername(model.Username.Trim().ToLower()) != null) { ModelState.AddModelError("FormGenericError", "Το username χρησιμοποιείται ήδη από άλλο μέλος, επιλέξτε ένα άλλο."); return(PartialView("Profile/RegisterFacebook", model)); } // last check FB var client = new Facebook.FacebookClient(model.AccessToken); if (client != null) { var userDetail = client.Get("/me", new { fields = "last_name,id,email,name,birthday,age_range,middle_name,first_name,locale,verified" }); if (userDetail != null) { var loginDetail = new FacebookLoginDetail(JObject.FromObject(userDetail), model.AccessToken); if (loginDetail == null || loginDetail.UserId != model.FacebookUserId) { ModelState.AddModelError("FormGenericError", "Κάντε Login στο Facebook με τον δικό σας λογαριασμό και ξαναδοκιμάστε!"); return(PartialView("Profile/RegisterFacebook", model)); } if (loginDetail == null #if !DEBUG || !loginDetail.IsFacebookVerified #endif ) { ModelState.AddModelError("FormGenericError", "Πρέπει να έχετε επιβεβαιώση τον λογαριασμό σας στο Facebook ώστε να κάνετε την εγγραφή σας."); return(PartialView("Profile/RegisterFacebook", model)); } if (string.Compare(loginDetail.Username, model.Username, true) != 0 && string.Compare(loginDetail.Email, model.Email, true) != 0) { ModelState.AddModelError("FormGenericError", "Μπορείτε να αλλάξετε μόνο είτε το email σας, είτε το username σας όταν κάνετε εγγραφή μέσω Facebook."); return(PartialView("Profile/RegisterFacebook", model)); } // assign correct userid. model.FacebookUserId = loginDetail.UserId; } } else { // could not logon server side ModelState.AddModelError("FormGenericError", "Παρακάλω κάντε login στο Facebook πρώτα ώστε να προχωρήσετε με την εγγραφή σας στο site."); return(PartialView("Profile/RegisterFacebook", model)); } // check if user exists as a facebook user already. if (!string.IsNullOrEmpty(model.FacebookUserId)) { var existingMember = Services.MemberService.GetMembersByPropertyValue("facebookUserId", model.FacebookUserId).FirstOrDefault(); if (existingMember != null && existingMember.IsApproved) { // log him in. Members.Login(existingMember.Username, model.FacebookUserId); return(RedirectToCurrentUmbracoPage()); } } // all good!, create the member try { var curPage = Umbraco.TypedContent(model.Cpid); var culture = curPage.GetCulture(); var newMember = memberService.CreateMember(model.Username.Trim(), model.Email.Trim(), $"{model.Surname.Trim()} {model.Name.Trim()}", Constants.MemberAlias); if (newMember == null) { ModelState.AddModelError("FormGenericError", "Κάποιο σοβαρό σφάλμα προεκυψε. Προσπαθήστε ξανά!"); LogHelper.Warn(typeof(AuthSurfaceController), $"Cannot create new Facebook member: {model.Email}"); return(PartialView("Profile/RegisterFacebook", model)); } // Membership properties newMember.SetValue("emailVerifyHash", "ok"); newMember.SetValue("hasVerifiedEmail", true); newMember.IsApproved = true; newMember.SetValue("facebookUserId", model.FacebookUserId); newMember.SetValue("memberisOver18", true); Services.MemberService.Save(newMember); Services.MemberService.SavePassword(newMember, model.FacebookUserId); // assign member to group in order to see profile page var memberRoles = Services.MemberService.GetAllRoles(newMember.Id); if (!memberRoles.Any(z => string.Compare(z, Constants.VerifiedMemberGroup, true) == 0)) { Services.MemberService.AssignRole(newMember.Id, Constants.VerifiedMemberGroup); } //Services.MemberService.Save(newMember); if (!Members.Login(newMember.Username, model.FacebookUserId)) { ModelState.AddModelError("FormGenericError", "Συνέβη κάποιο σοβαρό σφάλμα. Παρακαλώ προσπαθήστε ξάνα."); LogHelper.Warn(typeof(AuthSurfaceController), $"Cannot Login Facebook new member: {model.Email}"); return(PartialView("Profile/RegisterFacebook", model)); } return(GetLoggedInMember(newMember.Name, newMember.Id, curPage.Id.ToString(), Umbraco)); } catch (Exception ex) { LogHelper.Error(typeof(AuthSurfaceController), $"Error while registering Facebook member {model.Email}", ex); ModelState.AddModelError("FormGenericError", "Συνέβη κάποιο σοβαρό σφάλμα. Παρακαλώ προσπαθήστε ξάνα. Αλλιώς επικοινωνήστε με το support μας."); return(PartialView("Profile/RegisterFacebook", model)); } }
public async Task <LoginReturn> FacebookLoginHub([FromBody] FacebookLoginModel model) { LoginReturn ret = new LoginReturn(); if (!ModelState.IsValid) { ret.errors.Add("ModelState Error"); ret.success = false; //return BadRequest(ModelState); return(ret); } var user = await UserManager.FindByNameAsync(model.FacebookId); if (user == null) { RegisterFacebookModel m = new RegisterFacebookModel(); m.FacebookAccessToken = model.FacebookAccessToken; var reg = await RegisterWithFacebook(m); if (reg.success == false) { ret.success = false; ret.errors = reg.errors; return(ret); } user = await UserManager.FindByNameAsync(model.FacebookId); await ChatModel.CreateSessionWithUser(); await ChatModel.SignUpForChat(user); // await ChatModel.SignUpForChat(user); } ///Must be registered by now ///Refresh Tokena if (!await UserManager.CheckPasswordAsync(user, model.FacebookAccessToken)) { RegisterFacebookModel m = new RegisterFacebookModel(); m.FacebookAccessToken = model.FacebookAccessToken; var reg = await ChangeFacebookAccessToken(m); if (reg.success == false) { ret.success = false; ret.errors = reg.errors; return(ret); } } return(ret); }
public async Task <HttpResult> ChangeFacebookAccessToken(RegisterFacebookModel model) { HttpResult ret = new HttpResult() { errors = new List <string>(), success = true }; if (!ModelState.IsValid) { ret.errors.Add("ModelState Error"); ret.success = false; //return BadRequest(ModelState); return(ret); } FacebookClient newUserFacebookData = new FacebookClient(model.FacebookAccessToken); //IDictionary<string, object> result; //= (IDictionary<string, object>)e.GetResultData(); string id = ""; newUserFacebookData.GetCompleted += (o, e) => { if (e.Cancelled) { // request was cancelled return; } var ex = e.Error; if (ex != null) { if (ex is FacebookOAuthException) { ret.errors.Add("FbOAuthException"); // oauth exception occurred } else if (ex is FacebookApiLimitException) { ret.errors.Add("FacebookApiLimitException"); // api limit exception occurred. } else if (ex is FacebookApiException) { ret.errors.Add("FacebookApiException"); // other general facebook api exception } else { // non-facebook exception such as no internet connection. } return; } var result = (IDictionary <string, object>)e.GetResultData(); id = (string)result["id"]; }; await newUserFacebookData.GetTaskAsync("me"); var user = await UserManager.FindByNameAsync(id); if (user == null) { ret.errors.Add("No user with this fb id"); ret.success = false; return(ret); } IdentityResult IdentityResult = await UserManager.RemovePasswordAsync(user.Id); //UserManager.GenerateUserTokenAsync("Bearer", "sdfsdfsd"); if (!IdentityResult.Succeeded) { ret.success = false; // return GetErrorResult(result); foreach (var a in IdentityResult.Errors) { ret.errors.Add(a); } } IdentityResult = await UserManager.AddPasswordAsync(user.Id, model.FacebookAccessToken); if (!IdentityResult.Succeeded) { ret.success = false; // return GetErrorResult(result); foreach (var a in IdentityResult.Errors) { ret.errors.Add(a); } } return(ret); }
public async Task <HttpResult> RegisterWithFacebook(RegisterFacebookModel model) { HttpResult ret = new HttpResult(); ret.success = true; ret.errors = new List <String>(); if (!ModelState.IsValid) { ret.errors.Add("ModelState Error"); ret.success = false; //return BadRequest(ModelState); return(ret); } FacebookClient newUserFacebookData = new FacebookClient(model.FacebookAccessToken); //IDictionary<string, object> result; //= (IDictionary<string, object>)e.GetResultData(); string id = ""; string firstName = ""; string lastName = ""; string email = ""; newUserFacebookData.GetCompleted += (o, e) => { if (e.Cancelled) { // request was cancelled return; } var ex = e.Error; if (ex != null) { if (ex is FacebookOAuthException) { ret.errors.Add("FbOAuthException"); ret.success = false; // oauth exception occurred } else if (ex is FacebookApiLimitException) { ret.errors.Add("FacebookApiLimitException"); ret.success = false; // api limit exception occurred. } else if (ex is FacebookApiException) { ret.errors.Add("FacebookApiException"); ret.success = false; // other general facebook api exception } else { ret.errors.Add("Something went wrong"); ret.success = false; // non-facebook exception such as no internet connection. } return; } else { var result = (IDictionary <string, object>)e.GetResultData(); id = (string)result["id"]; firstName = (string)result["first_name"]; lastName = (string)result["last_name"]; // link = (string)result["link"]; try { email = (string)result["email"]; } catch { email = ""; } } }; if (ret.errors.Count > 0) { ret.success = false; return(ret); } await newUserFacebookData.GetTaskAsync("me?fields=id,name,email,first_name,last_name"); if (ret.errors.Count > 0) { ret.success = false; return(ret); } System.Text.StringBuilder picLink = new System.Text.StringBuilder("https://graph.facebook.com/"); picLink.Append(id); picLink.Append("/picture?type=large"); var user = new ApplicationUser() { UserName = id, Email = email, NickName = lastName, FirstName = firstName, LastName = lastName, AvatarUrl = picLink.ToString() }; IdentityResult IdentityResult = await UserManager.CreateAsync(user, model.FacebookAccessToken); if (!IdentityResult.Succeeded) { ret.success = false; // return GetErrorResult(result); foreach (var a in IdentityResult.Errors) { ret.errors.Add(a); } } return(ret); }