コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: OAuthService.cs プロジェクト: FatkullinT/NewsPortal
 /// <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);
     }
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        public override int GetUserIdFromOAuth(string provider, string providerUserId)
        {
            OAuthMembership oAuthMembership = usersService.GetOAuthMembership(provider, providerUserId);

            if (oAuthMembership != null)
            {
                return(oAuthMembership.UserId);
            }
            return(-1);
        }
コード例 #8
0
        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);
            }
        }
コード例 #9
0
        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));
        }
コード例 #10
0
        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();
        }
コード例 #11
0
ファイル: UsersService.cs プロジェクト: skakkar12/MVCCode
        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();
        }
コード例 #12
0
        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));
            }
        }
コード例 #13
0
 /// <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();
     }
 }
コード例 #14
0
        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();
        }
コード例 #15
0
        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);
        }
コード例 #16
0
 public AppendSocialLoginEvent(OAuthMembership membership)
 {
     Membership = membership;
 }
コード例 #17
0
 void IDatabaseContext.Add(OAuthMembership oAuthMembership)
 {
     this.Set<OAuthMembership>().Add(oAuthMembership);
 }
コード例 #18
0
 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();
 }
コード例 #19
0
        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);
            }
        }
コード例 #20
0
        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);
                }
            }
        }
コード例 #21
0
        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
                }));
            }
        }