private static string GetCollectionName <T>() { var t = typeof(T); if (t == typeof(MembershipAccount)) { return(MembershipAccount.GetCollectionName()); } if (t == typeof(Role)) { return(Role.GetCollectionName()); } if (t == typeof(OAuthToken)) { return(OAuthToken.GetCollectionName()); } if (t == typeof(OAuthMembership)) { return(OAuthMembership.GetCollectionName()); } return(string.Empty); }
/// <summary> /// Поиск существующего и создание нового пользователя /// </summary> /// <param name="cookieUserData"></param> /// <param name="newUser"></param> /// <returns></returns> private User FindOrCreateUser(CookieUserData cookieUserData, out bool newUser) { using (IUnitOfWork unitOfWork = _unitOfWorkFactory.Create()) { OAuthMembership oAuthMembership = _oAuthMembershipRepository.GetWithUser() .FirstOrDefault( m => m.OAuthUserId == cookieUserData.OAuthUserId && m.ProviderName == cookieUserData.OAuthProviderName); if (oAuthMembership != null) { newUser = false; return(oAuthMembership.User); } User user = new User(); user.Name = cookieUserData.UserName; OAuthMembership membership = new OAuthMembership(); membership.User = user; membership.ProviderName = cookieUserData.OAuthProviderName; membership.OAuthUserId = cookieUserData.OAuthUserId; _userRepository.Create(user); _oAuthMembershipRepository.Create(membership); unitOfWork.Commit(); newUser = true; return(user); } }
public void OAuthMembershipRepository_UpdateTest() { //Arange Guid testMembershipId = _testOAuthMembership.Id; OAuthMembership oAuthMembership = new OAuthMembership(); oAuthMembership.Id = testMembershipId; oAuthMembership.OAuthUserId = "UpdateTestUserId"; //Act using (IUnitOfWork unitOfWork = _unitOfWorkFactory.Create()) { _oAtuhMembershipRepository.Update(oAuthMembership, "OAuthUserId"); unitOfWork.Commit(); } //Assert OAuthMembership resultMembership; using (_unitOfWorkFactory.Create()) { resultMembership = _oAtuhMembershipRepository.GetWithUser().FirstOrDefault(m => m.Id == testMembershipId); } Assert.IsNotNull(resultMembership); Assert.IsNotNull(resultMembership.User); Assert.AreEqual(resultMembership.OAuthUserId, oAuthMembership.OAuthUserId); Assert.AreEqual(resultMembership.ProviderName, _testOAuthMembership.ProviderName); Assert.AreEqual(resultMembership.User.Id, _testOAuthMembership.User.Id); }
public void OAuthMembershipRepository_CreateTest() { //Arange User user = new User(); user.Name = "CreateTest"; OAuthMembership oAuthMembership = new OAuthMembership(); oAuthMembership.User = user; oAuthMembership.OAuthUserId = "CreateTestUserId"; oAuthMembership.ProviderName = "CreateTestProviderName"; //Act using (IUnitOfWork unitOfWork = _unitOfWorkFactory.Create()) { _userRepository.Create(user); _oAtuhMembershipRepository.Create(oAuthMembership); unitOfWork.Commit(); } //Assert OAuthMembership resultMembership; using (_unitOfWorkFactory.Create()) { resultMembership = _oAtuhMembershipRepository.GetWithUser().FirstOrDefault(m => m.Id == oAuthMembership.Id); } Assert.IsNotNull(resultMembership); Assert.IsNotNull(resultMembership.User); Assert.AreEqual(resultMembership.ProviderName, oAuthMembership.ProviderName); Assert.AreEqual(resultMembership.OAuthUserId, oAuthMembership.OAuthUserId); Assert.AreEqual(resultMembership.User.Id, oAuthMembership.User.Id); }
public override void CreateOrUpdateOAuthAccount(string provider, string providerUserId, string userName) { VerifyInitialized(); if (string.IsNullOrWhiteSpace(userName)) { throw new MembershipCreateUserException(MembershipCreateStatus.InvalidUserName); } if (string.IsNullOrWhiteSpace(providerUserId)) { throw new MembershipCreateUserException(MembershipCreateStatus.InvalidProviderUserKey); // not really the right status ?? } var user = _context.GetUser(userName); if (user == null) { // create a non-local account user = new MembershipAccount(userName) { IsConfirmed = true, IsLocalAccount = false }; try { _context.Save(user); } catch (Exception ex) { Trace.TraceError("MongoSimpleMembershipProvider.CreateOrUpdateOAuthAccount() ERROR : {0}", ex.ToString()); throw new MembershipCreateUserException(MembershipCreateStatus.ProviderError); } } var oam = _context.GetOAuthMembership(provider, providerUserId); if (oam == null) { // account doesn't exist, create a new one. oam = new OAuthMembership(provider, providerUserId, user.UserId); } else { // account already exist, update it oam.UserId = user.UserId; } try { _context.Save(oam); } catch (Exception ex) { Trace.TraceError("MongoSimpleMembershipProvider.CreateOrUpdateOAuthAccount() ERROR : {0}", ex.ToString()); throw new MembershipCreateUserException(MembershipCreateStatus.ProviderError); } }
private string UserNameByProvider(string Provider, string ProviderUserId) { MongoHelper <OAuthMembership> oAuthMembership = new MongoHelper <OAuthMembership>(); OAuthMembership oAuthuser = oAuthMembership.Collection.FindAll().Where(w => (w.Provider == Provider && w.ProviderUserId == ProviderUserId)).FirstOrDefault(); MongoHelper <User> userCollection = new MongoHelper <User>(); User user = userCollection.Collection.FindAll().Where(w => w._id == oAuthuser.UserId).FirstOrDefault(); return(user.Email); }
public override int GetUserIdFromOAuth(string provider, string providerUserId) { OAuthMembership oAuthMembership = usersService.GetOAuthMembership(provider, providerUserId); if (oAuthMembership != null) { return(oAuthMembership.UserId); } return(-1); }
private bool IsSocalLogin(string Provider, string ProviderUserId) { MongoHelper <OAuthMembership> oAuthMembership = new MongoHelper <OAuthMembership>(); OAuthMembership oAuthuser = oAuthMembership.Collection.FindAll().Where(w => (w.Provider == Provider && w.ProviderUserId == ProviderUserId)).FirstOrDefault(); if (oAuthuser != null) { return(true); } else { return(false); } }
public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl) { string provider = null; string providerUserId = null; if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId)) { return(RedirectToAction("Manage")); } if (ModelState.IsValid) { // Insert a new user into the database MongoHelper <User> userCollection = new MongoHelper <User>(); MongoHelper <OAuthMembership> oAuthMembership = new MongoHelper <OAuthMembership>(); User user = userCollection.Collection.FindAll().Where(w => w.Email == model.UserName).FirstOrDefault(); // Check if user already exists if (user == null) { // Insert name into the profile table User userInsert = new User(); userInsert.Email = model.UserName; user.PostLists = new List <SubPost>(); user.FriendsLists = new List <ObjectId>(); user.BlockLists = new List <ObjectId>(); user.RequestsLists = new List <RequestsList>(); userCollection.Collection.Insert(userInsert); OAuthMembership userProvider = new OAuthMembership(); userProvider.Provider = provider; userProvider.ProviderUserId = providerUserId; userProvider.UserId = userInsert._id; oAuthMembership.Collection.Insert(userProvider); FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie: false); return(RedirectToLocal(returnUrl)); } else { ModelState.AddModelError("UserName", "User name already exists. Please enter a different user name."); } } ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName; // Display Name ViewBag.ReturnUrl = returnUrl; return(View(model)); }
void IUserRepository.SaveOAuthMembership(string provider, string providerUserId, int userId) { var oAuthMembership = _container.OAuthMemberships.FirstOrDefault(x => x.Provider.Equals(provider) && x.ProviderUserId.Equals(providerUserId)); if (oAuthMembership == null) { oAuthMembership = new OAuthMembership { Provider = provider, ProviderUserId = providerUserId }; _container.OAuthMemberships.Add(oAuthMembership); } oAuthMembership.UserId = userId; _container.SaveChanges(); }
void IUsersService.SaveOAuthMembership(string provider, string providerUserId, int userId) { var oAuthMembership = this.db.OAuthMemberships.FirstOrDefault(x => x.Provider.Equals(provider) && x.ProviderUserId.Equals(providerUserId)); if (oAuthMembership == null) { oAuthMembership = new OAuthMembership { Provider = provider, ProviderUserId = providerUserId }; this.db.Add(oAuthMembership); } oAuthMembership.UserId = userId; this.db.SaveChanges(); }
public ActionResult ExternalLoginCallback(string returnUrl) { AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl })); if (!result.IsSuccessful) { return(RedirectToAction("ExternalLoginFailure")); } var oAuthRepo = this.RepositoryFactory.CreateWithGuid <OAuthMembership>(); var oAuthMemberShip = oAuthRepo.GetAll().Where(x => x.ProviderUserID == result.ProviderUserId && x.Provider == result.Provider).SingleOrDefault(); // do not exists oAuthMemberShip yet. Create new record and save to DB if (oAuthMemberShip == null) { var userProfile = new UserProfile() { UserName = null }; oAuthMemberShip = new OAuthMembership() { Provider = result.Provider, ProviderUserID = result.ProviderUserId, UserProfile = userProfile }; oAuthRepo.SaveOrUpdate(oAuthMemberShip); } if (oAuthMemberShip.UserProfile.UserName == null) { string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId); ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName; ViewBag.ReturnUrl = returnUrl; return(View("ExternalLoginConfirmation", new Web.ViewModels.Account.RegisterExternalLoginModel { UserName = result.UserName, ExternalLoginData = loginData, CurrentUserProfileID = oAuthMemberShip.UserProfile.Id })); } else { App.Common.Security.Authentication.Authentication.SignIn( new App.Common.Security.Authentication.User() { Email = null, UserID = oAuthMemberShip.UserProfile.Id, UserName = oAuthMemberShip.UserProfile.UserName, Role = App.Common.Security.Authentication.UserRole.OAuth }, App.Core.ApplicationSettings.Instance.CookieTimeout); return(RedirectToLocal(returnUrl)); } }
/// <summary> /// Заполнение тестовыми данными /// </summary> private void CreateTestData() { _testOAuthMembership = new OAuthMembership() { OAuthUserId = "TestUserId", ProviderName = "TestProvider", User = new User { Name = "test1" } }; using (IUnitOfWork unitOfWork = _unitOfWorkFactory.Create()) { _userRepository.Create(_testOAuthMembership.User); _oAtuhMembershipRepository.Create(_testOAuthMembership); unitOfWork.Commit(); } }
private void SeedData(MongoDatabase db) { if (db == null) { throw new ArgumentNullException("db"); } // Reset db db.GetCollection("IDSequence").Drop(); _usersCol = db.GetCollection <MembershipAccount>(MembershipAccount.GetCollectionName()); _usersCol.Drop(); var salt = Crypto.GenerateSalt(); var user1 = new MembershipAccount("User1") { PasswordSalt = salt, Password = Crypto.HashPassword("p@ssword" + salt), IsConfirmed = false }; var user2 = new MembershipAccount("NonLocalUser") { IsLocalAccount = false, IsConfirmed = true }; _usersCol.InsertBatch(new[] { user1, user2 }); var oAuthTokenCol = db.GetCollection <OAuthToken>(OAuthToken.GetCollectionName()); oAuthTokenCol.Drop(); oAuthTokenCol.Insert(new OAuthToken("Tok3n", "tok3nSecret")); var oAuthMembershipCol = db.GetCollection <OAuthMembership>(OAuthMembership.GetCollectionName()); oAuthMembershipCol.Drop(); oAuthMembershipCol.Insert(new OAuthMembership("Test", "User1@Test", 1)); Users = _usersCol.AsQueryable(); OAuthTokens = oAuthTokenCol.AsQueryable(); OAuthMemberships = oAuthMembershipCol.AsQueryable(); }
public MongoDataContext(string connectionNameOrString) { Contract.Requires <ArgumentNullException>(!string.IsNullOrWhiteSpace(connectionNameOrString)); // If it's a name, we lookup config setting var connSettings = ConfigurationManager.ConnectionStrings[connectionNameOrString]; if (connSettings != null && !string.IsNullOrWhiteSpace(connSettings.ConnectionString)) { connectionNameOrString = connSettings.ConnectionString; } _db = GetDatase(connectionNameOrString); _roleCol = _db.GetCollection <Role>(Role.GetCollectionName()); _userCol = _db.GetCollection <MembershipAccount>(MembershipAccount.GetCollectionName()); _oAuthTokenCol = _db.GetCollection <OAuthToken>(OAuthToken.GetCollectionName()); _oAuthMembershipCol = _db.GetCollection <OAuthMembership>(OAuthMembership.GetCollectionName()); // Check that we can connect to MongoDB server -- will throw an exception that should be caught in provider init _roleCol.EnsureUniqueIndex(x => x.RoleName); }
public AppendSocialLoginEvent(OAuthMembership membership) { Membership = membership; }
void IDatabaseContext.Add(OAuthMembership oAuthMembership) { this.Set<OAuthMembership>().Add(oAuthMembership); }
void IUsersService.SaveOAuthMembership(string provider, string providerUserId, int userId) { var oAuthMembership = this.db.OAuthMemberships.FirstOrDefault(x => x.Provider.Equals(provider) && x.ProviderUserId.Equals(providerUserId)); if (oAuthMembership == null) { oAuthMembership = new OAuthMembership { Provider = provider, ProviderUserId = providerUserId }; this.db.Add(oAuthMembership); } oAuthMembership.UserId = userId; this.db.SaveChanges(); }
public ActionResult ExternalLoginCallback(string returnUrl) { AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl })); if (!result.IsSuccessful) return RedirectToAction("ExternalLoginFailure"); var oAuthRepo = this.RepositoryFactory.CreateWithGuid<OAuthMembership>(); var oAuthMemberShip = oAuthRepo.GetAll().Where(x => x.ProviderUserID == result.ProviderUserId && x.Provider == result.Provider).SingleOrDefault(); // do not exists oAuthMemberShip yet. Create new record and save to DB if (oAuthMemberShip == null) { var userProfile = new UserProfile() { UserName = null}; oAuthMemberShip = new OAuthMembership() { Provider = result.Provider, ProviderUserID = result.ProviderUserId, UserProfile = userProfile }; oAuthRepo.SaveOrUpdate(oAuthMemberShip); } if (oAuthMemberShip.UserProfile.UserName == null) { string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId); ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName; ViewBag.ReturnUrl = returnUrl; return View("ExternalLoginConfirmation", new Web.ViewModels.Account.RegisterExternalLoginModel { UserName = result.UserName, ExternalLoginData = loginData, CurrentUserProfileID = oAuthMemberShip.UserProfile.Id}); } else { App.Common.Security.Authentication.Authentication.SignIn( new App.Common.Security.Authentication.User() { Email = null, UserID = oAuthMemberShip.UserProfile.Id, UserName = oAuthMemberShip.UserProfile.UserName, Role = App.Common.Security.Authentication.UserRole.OAuth }, App.Core.ApplicationSettings.Instance.CookieTimeout); return RedirectToLocal(returnUrl); } }
public override void CreateOrUpdateOAuthAccount(string provider, string providerUserId, string userName) { VerifyInitialized(); if (String.IsNullOrEmpty(userName)) { throw new MembershipCreateUserException(MembershipCreateStatus.ProviderError); } var user = GetUser(userName); var oauth = GetOAuth(provider, providerUserId); using (var unit = unitOfWork.CreateExport().Value) { try { if (oauth == null) { oauth = new OAuthMembership() { Provider = provider, ProviderUserId = providerUserId, User = user }; oAuthMembershipRepository.Save(oauth); } else { oauth.User = user; // oAuthMembershipRepository.Update(oauth); } unit.Commit(); } catch (Exception) { throw new MembershipCreateUserException(MembershipCreateStatus.ProviderError); } } }
public ActionResult ExternalLoginCallback(string returnUrl) { AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl })); if (!result.IsSuccessful) { return(RedirectToAction("ExternalLoginFailure")); } if (IsSocalLogin(result.Provider, result.ProviderUserId)) { //FormsAuthentication.SetAuthCookie(UserNameByProvider(result.Provider, result.ProviderUserId), createPersistentCookie: false); FormsAuthentication.SetAuthCookie(result.UserName, createPersistentCookie: false); return(RedirectToLocal(returnUrl)); } if (User.Identity.IsAuthenticated) { MongoHelper <User> userCollection = new MongoHelper <User>(); MongoHelper <OAuthMembership> oAuthMembership = new MongoHelper <OAuthMembership>(); User user = userCollection.Collection.FindAll().Where(w => w.Email == User.Identity.Name).FirstOrDefault(); if (user != null) { OAuthMembership userProvider = new OAuthMembership(); userProvider.Provider = result.Provider; userProvider.ProviderUserId = result.ProviderUserId; userProvider.UserId = user._id; oAuthMembership.Collection.Insert(userProvider); } else { User user2 = new User(); user2.Email = User.Identity.Name; user2.PostLists = new List <SubPost>(); user2.FriendsLists = new List <ObjectId>(); user2.BlockLists = new List <ObjectId>(); user2.RequestsLists = new List <RequestsList>(); userCollection.Collection.Insert(user2); OAuthMembership userProvider = new OAuthMembership(); userProvider.Provider = result.Provider; userProvider.ProviderUserId = result.ProviderUserId; userProvider.UserId = user2._id; oAuthMembership.Collection.Insert(userProvider); } return(RedirectToLocal(returnUrl)); } else { // User is new, ask for their desired membership name string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId); ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName; ViewBag.ReturnUrl = returnUrl; return(View("ExternalLoginConfirmation", new RegisterExternalLoginModel { UserName = result.UserName, ExternalLoginData = loginData })); } }