public async Task <ObjectResult <User> > RegisterExternal(RegisterExternalBindingModel model) { bool registrationOk = false; if (!model.InvitationId.HasValue || model.InvitationId == Guid.Empty) { return(new ObjectResult <User>() { IsOk = false, ErrorMessage = "No valid invitation exists" }); } // if (model.InvitationId.HasValue) { using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { try { var userData = await GetFacebookProfileAsync(model.ExternalAccessToken); var fileFullName = string.Empty; if (userData.picture != null) { var picture = GetProfilePicture(userData.picture.data.url); if (picture != null) { fileFullName = Utilities.UploadBlob("profile-images", string.Format("{0}{1}", Guid.NewGuid(), ".jpg"), picture); } } var user = new ApplicationUser { UserName = model.UserName, Email = model.UserName, UserProfile = new Authentication.UserProfile() { Id = Guid.NewGuid(), FirstName = userData.first_name, LastName = userData.last_name, MiddleName = userData.middle_name, //ProfileImage = picture, ProfileImageString = fileFullName } }; var result = await UserManager.CreateAsync(user); if (result.Succeeded) { var info = new ExternalLoginInfo() { DefaultUserName = model.UserName, Login = new UserLoginInfo(model.Provider, userData.id) }; result = await UserManager.AddLoginAsync(user.Id, info.Login); if (result.Succeeded) { using (InvitationRepository _invitationRepository = new InvitationRepository(Context, user.UserProfile.Id, null)) using (UserContactRepository userContactRepository = new UserContactRepository(Context, user.UserProfile.Id, null)) using (UserProfileRepository userProfileRepository = new UserProfileRepository(Context, user.UserProfile.Id, null)) { var invitation = _invitationRepository.GetById(model.InvitationId.Value); if (invitation != null) { var role = DbContext.Roles.First(p => p.Id == invitation.RoleId.ToString()); var addToRole = await this.UserManager.AddToRoleAsync(user.Id, role != null?role.Name : MindCorners.Common.Code.Constants.GeneralUserRoleId); if (addToRole.Succeeded) { invitation.State = (int)InvitationStates.Accepted; invitation.StateDate = DateTime.Now; _invitationRepository.Update(invitation); //add userToUserContacts userContactRepository.Create(new UserContact() { ContactName = user.UserProfile.FullName, ContactUserId = user.UserProfile.Id, MainUserId = invitation.CreatorId, State = (int)InvitationStates.Accepted, StateDate = DateTime.Now }); var invitationCreator = userProfileRepository.GetById(invitation.CreatorId); userContactRepository.Create(new UserContact() { ContactName = invitationCreator.FullName, ContactUserId = invitation.CreatorId, MainUserId = user.UserProfile.Id, State = (int)InvitationStates.Accepted, StateDate = DateTime.Now }); //add create Circle of two users //var circle = new Common.Model.Circle() { IsGroup = false }; //CircleRepository circleRepository = new CircleRepository(Context, dbUser, null); //circleRepository.Create(circle); //Context.SaveChanges(); //circleRepository.AddMainPersonToCircleUser(circle.Id, dbUser); //circleRepository.SynchCircleUsers(circle.Id, new List<Guid>() { userRegistration.UserProfile.Id }); Context.SaveChanges(); //_invitationRepository.SaveChanges(); transactionScope.Complete(); return(new ObjectResult <User>() { IsOk = true, ReturnedObject = new User() { FirstName = user.UserProfile.FirstName, LastName = user.UserProfile.LastName, Email = user.Email, FullName = user.UserProfile.FullName, Id = user.UserProfile.Id, //ProfileImage = applicationUser.UserProfile.ProfileImage, ProfileImageString = Request.GetFileUrl((int)FileType.Profile, user.UserProfile.ProfileImageString) } }); } return(new ObjectResult <User>() { IsOk = false, ErrorMessage = string.Join(",", addToRole.Errors) }); // return RedirectToAction("Index", "Home"); } return(new ObjectResult <User>() { IsOk = false, ErrorMessage = "No valid Invitation" }); } } return(new ObjectResult <User>() { IsOk = false, ErrorMessage = string.Join(",", result.Errors) }); } return(new ObjectResult <User>() { IsOk = false, ErrorMessage = string.Join(",", result.Errors) }); //AddErrors(result); } catch (Exception ex) { LogHelper.WriteError(ex); return(new ObjectResult <User>() { IsOk = false, ErrorMessage = ex.ToString() }); } } } //if (!ModelState.IsValid) //{ // return BadRequest(ModelState); //} //var verifiedAccessToken = await VerifyExternalAccessToken(model.Provider, model.ExternalAccessToken); //if (verifiedAccessToken == null) //{ // return BadRequest("Invalid Provider or External Access Token"); //} //user = new IdentityUser() { UserName = model.UserName }; //ApplicationUser user = await UserManager.CreateAsync(new UserLoginInfo(model.Provider, model.ExternalAccessToken)); // bool hasRegistered = user != null; // if (hasRegistered) // { // return BadRequest("External user is already registered"); // } //// user = new IdentityUser() { UserName = model.UserName }; // IdentityResult result = await UserManager.CreateAsync(user); // if (!result.Succeeded) // { // return GetErrorResult(result); // } // var info = new ExternalLoginInfo() // { // DefaultUserName = model.UserName, // Login = new UserLoginInfo(model.Provider, verifiedAccessToken.user_id) // }; // result = await _repo.AddLoginAsync(user.Id, info.Login); // if (!result.Succeeded) // { // return GetErrorResult(result); // } // //generate access token response // var accessTokenResponse = GenerateLocalAccessTokenResponse(model.UserName); // return Ok(accessTokenResponse); return(new ObjectResult <User>() { IsOk = false, ErrorMessage = "Error" }); }
public async Task <ObjectResult <User> > RegisterUser(UserRegister user) { if (user.InvitationId == Guid.Empty) { return(new ObjectResult <User>() { IsOk = false, ErrorMessage = "No valid invitation exists" }); } using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { try { var userRegistration = new ApplicationUser { UserName = user.Email, Email = user.Email, UserProfile = new Authentication.UserProfile() { Id = Guid.NewGuid(), FirstName = user.FirstName, LastName = user.LastName } }; var result = await UserManager.CreateAsync(userRegistration, user.Password); if (result.Succeeded) { var dbUser = userRegistration.UserProfile.Id; using (InvitationRepository _invitationRepository = new InvitationRepository(Context, dbUser, null)) using (UserContactRepository userContactRepository = new UserContactRepository(Context, dbUser, null)) using (UserProfileRepository userProfileRepository = new UserProfileRepository(Context, dbUser, null)) { var invitation = _invitationRepository.GetById(user.InvitationId); if (invitation != null) { var addToRole = await this.UserManager.AddToRoleAsync(userRegistration.Id, MindCorners.Common.Code.Constants.GeneralUserRoleId); if (addToRole.Succeeded) { invitation.State = (int)InvitationStates.Accepted; invitation.StateDate = DateTime.Now; _invitationRepository.Update(invitation); //add userToUserContacts userContactRepository.Create(new UserContact() { ContactName = userRegistration.UserProfile.FullName, ContactUserId = userRegistration.UserProfile.Id, MainUserId = invitation.CreatorId, State = (int)InvitationStates.Accepted, StateDate = DateTime.Now }); var invitationCreator = userProfileRepository.GetById(invitation.CreatorId); userContactRepository.Create(new UserContact() { ContactName = invitationCreator.FullName, ContactUserId = invitation.CreatorId, MainUserId = userRegistration.UserProfile.Id, State = (int)InvitationStates.Accepted, StateDate = DateTime.Now }); //add create Circle of two users //var circle = new Common.Model.Circle() { IsGroup = false }; //CircleRepository circleRepository = new CircleRepository(Context, dbUser, null); //circleRepository.Create(circle); //Context.SaveChanges(); //circleRepository.AddMainPersonToCircleUser(circle.Id, dbUser); //circleRepository.SynchCircleUsers(circle.Id, new List<Guid>() { userRegistration.UserProfile.Id }); Context.SaveChanges(); //_invitationRepository.SaveChanges(); transactionScope.Complete(); return(new ObjectResult <User>() { IsOk = true, ReturnedObject = new User() { FirstName = userRegistration.UserProfile.FirstName, LastName = userRegistration.UserProfile.LastName, Email = userRegistration.Email, FullName = userRegistration.UserProfile.FullName, Id = userRegistration.UserProfile.Id, //ProfileImage = applicationUser.UserProfile.ProfileImage, ProfileImageString = Request.GetFileUrl((int)FileType.Profile, userRegistration.UserProfile.ProfileImageString) } }); } return(new ObjectResult <User>() { IsOk = false, ErrorMessage = string.Join(",", addToRole.Errors) }); // return RedirectToAction("Index", "Home"); } return(new ObjectResult <User>() { IsOk = false, ErrorMessage = string.Join(",", result.Errors) }); } } } catch (Exception ex) { LogHelper.WriteError(ex); return(new ObjectResult <User>() { IsOk = false, ErrorMessage = ex.ToString() }); } //var user = JsonConvert.DeserializeObject<UserRegister>(userData); } return(new ObjectResult <User>() { IsOk = false, ErrorMessage = "Error" }); }
public async Task <ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl) { if (User.Identity.IsAuthenticated) { return(RedirectToAction("Index", "Manage")); } if (ModelState.IsValid) { // Get the information about the user from the external login provider var info = await AuthenticationManager.GetExternalLoginInfoAsync(); if (info == null) { return(View("ExternalLoginFailure")); } //var ext = // await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie); //var email = ext.Claims.First(x => x.Type.EndsWith("emailaddress")).Value; //var name = ext.Claims.First(x => x.Type.EndsWith("name")).Value; //var nameIdentifier = ext.Claims.First(x => x.Type.EndsWith("nameidentifier")).Value; var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); //var firstNameClaim = loginInfo.ExternalIdentity.Claims.First(c => c.Type == "urn:facebook:first_name"); string firstName = string.Empty; string lastName = string.Empty; string middleName = string.Empty; string email = string.Empty; byte[] picture = null; if (loginInfo.Login.LoginProvider == "Facebook") { var identity = AuthenticationManager.GetExternalIdentity(DefaultAuthenticationTypes.ExternalCookie); var access_token = identity.FindFirstValue("FacebookAccessToken"); var fb = new FacebookClient(access_token); dynamic myInfo = fb.Get("/me?fields=first_name,middle_name,last_name,id,email,picture.width(600)"); // specify the email field loginInfo.Email = myInfo.email; firstName = myInfo.first_name; middleName = myInfo.middle_name; lastName = myInfo.last_name; picture = GetProfilePicture(GetFacebookImageUrl(myInfo)); } bool registrationOk = false; if (InvitationId.HasValue) { using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { try { var fileFullName = string.Empty; if (picture != null) { fileFullName = Utilities.UploadBlob("profile-images", string.Format("{0}{1}", Guid.NewGuid(), ".jpg"), picture); } var user = new ApplicationUser { UserName = model.Email, Email = model.Email, UserProfile = new UserProfile() { Id = Guid.NewGuid(), FirstName = firstName, LastName = lastName, MiddleName = middleName, //ProfileImage = picture, ProfileImageString = fileFullName } }; var result = await UserManager.CreateAsync(user); if (result.Succeeded) { result = await UserManager.AddLoginAsync(user.Id, info.Login); if (result.Succeeded) { using (InvitationRepository _invitationRepository = new InvitationRepository(Context, user.UserProfile.Id, null)) using (UserContactRepository userContactRepository = new UserContactRepository(Context, user.UserProfile.Id, null)) using (UserProfileRepository userProfileRepository = new UserProfileRepository(Context, user.UserProfile.Id, null)) { var invitation = _invitationRepository.GetById(InvitationId.Value); if (invitation != null) { var role = DbContext.Roles.First(p => p.Id == invitation.RoleId.ToString()); var addToRole = await this.UserManager.AddToRoleAsync(user.Id, role != null?role.Name : MindCorners.Common.Code.Constants.GeneralUserRoleId); if (addToRole.Succeeded) { invitation.State = (int)InvitationStates.Accepted; invitation.StateDate = DateTime.Now; _invitationRepository.Update(invitation); //add userToUserContacts userContactRepository.Create(new UserContact() { ContactName = user.UserProfile.FullName, ContactUserId = user.UserProfile.Id, MainUserId = invitation.CreatorId, State = (int)InvitationStates.Accepted, StateDate = DateTime.Now }); var invitationCreator = userProfileRepository.GetById(invitation.CreatorId); userContactRepository.Create(new UserContact() { ContactName = invitationCreator.FullName, ContactUserId = invitation.CreatorId, MainUserId = user.UserProfile.Id, State = (int)InvitationStates.Accepted, StateDate = DateTime.Now }); //add create Circle of two users //var circle = new Common.Model.Circle() { IsGroup = false }; //CircleRepository circleRepository = new CircleRepository(Context, dbUser, null); //circleRepository.Create(circle); //Context.SaveChanges(); //circleRepository.AddMainPersonToCircleUser(circle.Id, dbUser); //circleRepository.SynchCircleUsers(circle.Id, new List<Guid>() { userRegistration.UserProfile.Id }); Context.SaveChanges(); //_invitationRepository.SaveChanges(); transactionScope.Complete(); } registrationOk = true; } } } if (registrationOk) { await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false); return(RedirectToAction("Index", "Home")); } } AddErrors(result); } catch (Exception ex) { LogHelper.WriteError(ex); } } //var user = new ApplicationUser //{ // UserName = model.Email, // Email = model.Email, // UserProfile = new UserProfile() // { // Id = Guid.NewGuid(), // FirstName = firstName, // LastName = lastName, // MiddleName = middleName, // ProfileImage = picture, // } //}; //var result = await UserManager.CreateAsync(user); //if (result.Succeeded) //{ // result = await UserManager.AddLoginAsync(user.Id, info.Login); // if (result.Succeeded) // { // await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); // return RedirectToLocal(returnUrl); // } //} } } ViewBag.ReturnUrl = returnUrl; return(View(model)); }