/// <summary>
        /// Does this instance.
        /// </summary>
        public override void PerformAction()
        {
            //Determine if [User Information] already exists;
            this.userInformation = this.Repository.RetrieveUserInformation(this.userInfo.Email);
            if (userInformation == null)
            {
                bool isDomainValid = true; // the default is to allow all domains if user authenticates with Google;
                if (this.Provider.RestrictUsersToGoogleAppDomain)
                {
                    isDomainValid = this.Provider.UserDomainIsValid(this.userInfo.Domain);
                }

                if (isDomainValid)
                {
                    // Create [User/Authorization] information;
                    this.userInformation = this.Repository.CreateUserInformation(this.userInfo);
                    // Create [Authorization] information;
                    this.Repository.CreateAuthorizationInformation(this.authorization);
                    // Add new user to default role
                    int roleId = 2;//general user;
                    bool isAdded = this.Provider.AddEmailToRole(this.userInformation.Email, roleId);
                }
            }
            else
            {
                // Update [User/Authorization] information;
                this.userInformation = this.Repository.UpdateUserInformation(this.userInfo);
                this.Repository.UpdateAuthorizationInformation(this.authorization);
            }
        }
        /// <summary>
        ///     Initializes a new instance of the <see cref="CreateUpdateAuthorizationUserInfoAction" /> class.
        /// </summary>
        /// <param name="authorization">The authorization.</param>
        /// <param name="userInfo">The user info.</param>
        /// <param name="provider">The provider.</param>
        public CreateUpdateAuthorizationUserInfoAction(AuthorizationInformation authorization, UserInformation userInfo,
		                                               MembershipProviderBase provider)
            : base(provider)
        {
            this.authorization = authorization;
            this.userInfo = userInfo;
        }
 /// <summary>
 ///     Initializes a new instance of the <see cref="RefreshAccessTokenAction" /> class.
 /// </summary>
 /// <param name="user">The user.</param>
 /// <param name="membershipProvider">The membership provider.</param>
 public RefreshAccessTokenAction(UserInformation user, MembershipProviderBase membershipProvider)
     : base(membershipProvider)
 {
     this.user = user;
     this.clientId = this.Provider.GoogleClientId;
     this.clientSecret = this.Provider.GoogleClientSecret;
     this.authorization = this.user.Authorization;
 }
 /// <summary>
 /// Creates the forms authentication ticket.
 /// </summary>
 /// <param name="user">The user.</param>
 private void CreateFormsAuthenticationTicket(UserInformation user)
 {
     System.Web.HttpCookie cookie = this.MembershipService.CreateFormsAuthenticationCookie(user);
     if (cookie != null)
     {
         this.Response.Cookies.Add(cookie);
     }
 }
        public void AttemptCreateFormsAuthenticationCookieWithInvalidUser()
        {
            UserInformation userInformation = new UserInformation("1234", "*****@*****.**", true, "ana", "valencia", "ana valencia", "buildmotion.com", string.Empty);
            userInformation.Email = string.Empty; //invalid email address;
            this.providerMock.Setup(r => r.RetrieveUserRolesString(It.IsAny<string>())).Returns("admin|user");
            var action = new CreateFormsAuthenticationCookieAction(userInformation, this.providerMock.Object);
            action.Execute();

            this.WriteValidationContextRuleResults(action.ValidationContext);
            Assert.IsNull(action.Cookie);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="UserInformationIsValidRule"/> class.
 /// </summary>
 /// <param name="name">The name.</param>
 /// <param name="message">The message.</param>
 /// <param name="target">The target.</param>
 public UserInformationIsValidRule(string name, string message, UserInformation target)
     : base(name, message)
 {
     this.Rules.Add(new IsNotNullRule("UserInformationIsNotNull", "UserInformation is null.", target));
     if (target != null)
     {
         this.Rules.Add(new StringIsNotEmptySpace("EmailStringIsValid", "The email string value is not valid.", target.Email));
         //TODO: GET A BETTER reGEX;
         //this.Rules.Add(new RegularExpression("EmailAddressIsValid", "The email address is not valid.", target.Email, @"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b"));
         this.Rules.Add(new StringIsNotEmptySpace("FullNameStringIsValid", "The full name value is not valid.", target.FullName));
         this.Rules.Add(new StringIsNotEmptySpace("GoogleIdStringIsValid", "The googleId value is not valid. Cannot be empty or null string.", target.GoogleId));
     }
 }
        public void AttemptCreateUpdateAuthorizationUserInfoWithInvalidEmailAddress()
        {
            // test setup;
            UserInformation userInformation = new UserInformation("1234", "*****@*****.**", true, "ana", "valencia", "ana valencia", "buildmotion.com", string.Empty);
            AuthorizationInformation authorization = new AuthorizationInformation("abc", DateTime.Now.ToUniversalTime().AddHours(1), DateTime.Now.ToUniversalTime(), "xyz");
            authorization.Email = string.Empty; //remove this to fail the test;
            userInformation.Email = string.Empty;

            this.repositoryMock.Setup(r => r.RetrieveUserInformation(It.IsAny<string>()));
            this.repositoryMock.Setup(r => r.CreateUserInformation(It.IsAny<UserInformation>())).Returns(userInformation);
            this.repositoryMock.Setup(c => c.CreateAuthorizationInformation(It.IsAny<AuthorizationInformation>())).Returns(true);

            // test;
            var action = new CreateUpdateAuthorizationUserInfoAction(authorization, userInformation, this.providerMock.Object);
            action.Execute();
            UserInformation user = action.UserInformation;

            // Assertions;
            WriteValidationContextRuleResults(action.ValidationContext);
            Assert.IsFalse(action.ValidationContext.IsValid);
            Assert.IsNull(user);
        }
        /// <summary>
        ///   Does this instance.
        /// </summary>
        public override void PerformAction()
        {
            var userInfoUrl = "https://www.googleapis.com/oauth2/v1/userinfo";
            var hc = new HttpClient();
            hc.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", this.accessToken);
            var response = hc.GetAsync(userInfoUrl).Result;
            dynamic userInfo = response.Content.ReadAsAsync<dynamic>().Result;

            if (userInfo != null)
            {
                this.userInformation = new UserInformation
                {
                    Id = Guid.NewGuid(),
                    Email = userInfo.email,
                    FullName= userInfo.name,
                    FirstName = userInfo.given_name,
                    LastName = userInfo.family_name,
                    Domain = userInfo.hd,
                    IsVerifiedEmail = userInfo.verified_email,
                    Link = userInfo.link,
                    GoogleId = userInfo.id
                };
            }
        }
        public void CanUpdateUserAuthorizationInformation()
        {
            // test setup;
            UserInformation userInformation = new UserInformation("1234", "*****@*****.**", true, "ana", "valencia", "ana valencia", "buildmotion.com", string.Empty);
            AuthorizationInformation authorization = new AuthorizationInformation("abc", DateTime.Now.ToUniversalTime().AddHours(1), DateTime.Now.ToUniversalTime(), "xyz");
            authorization.Email = userInformation.Email; //remove this to fail the test;
            userInformation.Id = Guid.NewGuid();

            this.repositoryMock.Setup(r => r.RetrieveUserInformation(It.IsAny<string>())).Returns(userInformation);
            this.repositoryMock.Setup(u => u.UpdateUserInformation(It.IsAny<UserInformation>())).Returns(userInformation);
            this.repositoryMock.Setup(a => a.UpdateAuthorizationInformation(It.IsAny<AuthorizationInformation>())).Returns(true);

            // test;
            var action = new CreateUpdateAuthorizationUserInfoAction(authorization, userInformation, this.providerMock.Object);
            action.Execute();
            UserInformation user = action.UserInformation;

            // Assertions;
            WriteValidationContextRuleResults(action.ValidationContext);
            Assert.IsTrue(action.ValidationContext.IsValid);
            Assert.IsNotNull(user);
            Assert.AreNotEqual(Guid.Empty, user.Id);
            Assert.IsNotNullOrEmpty(user.Email);
        }
 /// <summary>
 /// Creates the user information.
 /// </summary>
 /// <param name="userInfo">The user info.</param>
 /// <returns></returns>
 public UserInformation CreateUserInformation(UserInformation userInfo)
 {
     return this.adaptor.CreateUserInformation(userInfo);
 }
 /// <summary>
 /// Updates the user information.
 /// </summary>
 /// <param name="userInfo">The user info.</param>
 /// <returns></returns>
 public UserInformation UpdateUserInformation(UserInformation userInfo)
 {
     return this.adaptor.UpdateUserInformation(userInfo);
 }
 /// <summary>
 /// Updates the user.
 /// </summary>
 /// <param name="user">The user.</param>
 /// <returns></returns>
 public bool UpdateUser(UserInformation user)
 {
     return this.provider.UpdateUser(user);
 }
 /// <summary>
 /// Adds the roles to user.
 /// </summary>
 /// <param name="addRoles">The add roles.</param>
 /// <param name="user">The user.</param>
 /// <returns></returns>
 public bool AddRolesToUser(List<Role> addRoles, UserInformation user)
 {
     return this.provider.AddRolesToUser(addRoles, user);
 }
 /// <summary>
 ///     Refreshes the access token.
 /// </summary>
 /// <param name="user">The user.</param>
 /// <returns></returns>
 public string RefreshAccessToken(UserInformation user)
 {
     return this.provider.RefreshAccessToken(user);
 }
 /// <summary>
 /// Removes the roles from user.
 /// </summary>
 /// <param name="removeRoles">The remove roles.</param>
 /// <param name="user">The user.</param>
 /// <returns></returns>
 public bool RemoveRolesFromUser(List<Role> removeRoles, UserInformation user)
 {
     return this.provider.RemoveRolesFromUser(removeRoles, user);
 }
 /// <summary>
 /// Adds the roles to user.
 /// </summary>
 /// <param name="addRoles">The add roles.</param>
 /// <param name="user">The user.</param>
 /// <returns></returns>
 public override bool AddRolesToUser(List<Role> addRoles, UserInformation user)
 {
     bool isAdded = false;
     AddRolesToUserAction action = new AddRolesToUserAction(addRoles, user, this);
     action.Execute();
     if (action.Result == ActionResult.Success)
     {
         isAdded = action.IsAdded;
     }
     return isAdded;
 }
        /// <summary>
        ///     Creates the update authorization user info.
        /// </summary>
        /// <param name="authorization">The authorization.</param>
        /// <param name="userInfo">The user info.</param>
        /// <returns></returns>
        public UserInformation CreateUpdateAuthorizationUserInfo(AuthorizationInformation authorization,
		                                                         UserInformation userInfo)
        {
            return this.provider.CreateUpdateAuthorizationUserInfo(authorization, userInfo);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="UpdateUserAction"/> class.
 /// </summary>
 /// <param name="user">The user.</param>
 /// <param name="membershipProvider">The membership provider.</param>
 public UpdateUserAction(UserInformation user, MembershipProviderBase membershipProvider)
     : base(membershipProvider)
 {
     this.user = user;
 }
 /// <summary>
 /// Creates the user information.
 /// </summary>
 /// <param name="userInfo">The user info.</param>
 /// <returns></returns>
 public override UserInformation CreateUserInformation(UserInformation userInfo)
 {
     UserInformation userInformation = null;
     using (this.dbContext = new BuildMotionDb(this.connectionStringName))
     {
         //add and save;
         this.dbContext.UserInfos.Add(userInfo);
         int result = this.dbContext.SaveChanges();
         //retrieve;
         userInformation = this.dbContext.UserInfos.Find(userInfo.Email);
     }
     return userInformation;
 }
 /// <summary>
 ///     Creates the forms authentication cookie.
 /// </summary>
 /// <param name="user">The user.</param>
 /// <returns></returns>
 public override HttpCookie CreateFormsAuthenticationCookie(UserInformation user)
 {
     HttpCookie cookie = null;
     CreateFormsAuthenticationCookieAction action = new CreateFormsAuthenticationCookieAction(user, this);
     action.Execute();
     if (action.Result == ActionResult.Success)
     {
         cookie = action.Cookie;
     }
     return cookie;
 }
 /// <summary>
 /// Updates the user.
 /// </summary>
 /// <param name="user">The user.</param>
 /// <returns></returns>
 public override bool UpdateUser(UserInformation user)
 {
     bool isUpdated = false;
     var action = new UpdateUserAction(user, this);
     action.Execute();
     if (action.Result == ActionResult.Success)
     {
         isUpdated = action.IsUpdated;
     }
     return isUpdated;
 }
 public override bool RemoveRolesFromUser(List<Role> removeRoles, UserInformation user)
 {
     bool isRemoved = false;
     var action = new RemoveRolesFromUserAction(removeRoles, user, this);
     action.Execute();
     if (action.Result == ActionResult.Success)
     {
         isRemoved = action.IsRemoved;
     }
     return isRemoved;
 }
 /// <summary>
 ///     Refreshes the access token.
 /// </summary>
 /// <param name="user">The user.</param>
 /// <returns></returns>
 public override string RefreshAccessToken(UserInformation user)
 {
     string accessToken = string.Empty;
     RefreshAccessTokenAction action = new RefreshAccessTokenAction(user, this);
     action.Execute();
     if (action.Result == ActionResult.Success)
     {
         accessToken = action.AccessToken;
     }
     return accessToken;
 }
        /// <summary>
        ///     Creates the update authorization user info.
        /// </summary>
        /// <param name="authorization">The authorization.</param>
        /// <param name="userInfo">The user info.</param>
        /// <returns></returns>
        public override UserInformation CreateUpdateAuthorizationUserInfo(AuthorizationInformation authorization,
		                                                                  UserInformation userInfo)
        {
            UserInformation userInformation = null;
            CreateUpdateAuthorizationUserInfoAction action = new CreateUpdateAuthorizationUserInfoAction(authorization, userInfo,
                                                                                                         this);
            action.Execute();
            if (action.Result == ActionResult.Success)
            {
                userInformation = action.UserInformation;
            }
            return userInformation;
        }
 /// <summary>
 /// Creates the user information.
 /// </summary>
 /// <param name="userInfo">The user info.</param>
 /// <returns></returns>
 public UserInformation CreateUserInformation(UserInformation userInfo)
 {
     return this.dataAccessContext.EntityFrameworkDataAccess.CreateUserInformation(userInfo);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="AddRolesToUserAction"/> class.
 /// </summary>
 /// <param name="addRoles">The add roles.</param>
 /// <param name="user">The user.</param>
 /// <param name="provider">The provider.</param>
 public AddRolesToUserAction(List<Role> addRoles, UserInformation user, MembershipProviderBase provider)
     : base(provider)
 {
     this.addRoles = addRoles;
     this.user = user;
 }
 public RemoveRolesFromUserAction(List<Role> removeRoles, UserInformation user, MembershipProviderBase membershipProvider)
     : base(membershipProvider)
 {
     this.removeRoles = removeRoles;
     this.user = user;
 }
 /// <summary>
 ///     Creates the forms authentication cookie.
 /// </summary>
 /// <param name="user">The user.</param>
 /// <returns></returns>
 public HttpCookie CreateFormsAuthenticationCookie(UserInformation user)
 {
     return this.provider.CreateFormsAuthenticationCookie(user);
 }
        /// <summary>
        /// Updates the user information.
        /// </summary>
        /// <param name="userInfo">The user info.</param>
        /// <returns></returns>
        public override UserInformation UpdateUserInformation(UserInformation userInfo)
        {
            UserInformation userInformation = null;
            using (this.dbContext = new BuildMotionDb(this.connectionStringName))
            {
                this.dbContext.UserInfos.Attach(userInfo);
                this.dbContext.Entry(userInfo).State = EntityState.Modified;
                int result = this.dbContext.SaveChanges();

                userInformation = this.RetrieveUserInformation(userInfo.Email);
            }
            return userInformation;
        }
 /// <summary>
 /// Creates the user information.
 /// </summary>
 /// <param name="userInfo">The user info.</param>
 /// <returns></returns>
 public abstract UserInformation CreateUserInformation(UserInformation userInfo);