public ActionResult Register( RegisterViewModel model )
 {
     if( ModelState.IsValid )
     {
         using( var ctx = new NwdAuthContext() )
         {
             if( ctx.Users.Any( m => m.Username == model.Username ) )
                 ModelState.AddModelError( "Username", "Ce nom d'utilisateur existe déjà !" );
             else
             {
                 try
                 {
                     User u = ctx.Users.Add( new User { Username = model.Username, Name = "NwdProvider", Password = AuthenticationUtils.HashPassword( model.Password ), Email = model.Email, CreationDate = DateTime.UtcNow } );
                     u.Roles.Add( ctx.Roles.Where( r => r.RoleName == "User" ).FirstOrDefault() );
                     ctx.SaveChanges();
                     return View( "RegisterSuccess" );
                 }
                 catch( MembershipCreateUserException ex )
                 {
                     ModelState.AddModelError( "", ex.Message );
                 }
             }
         }
     }
     return View( model );
 }
 public override string[] GetUsersInRole( string roleName )
 {
     using( var c = new NwdAuthContext() )
     {
         return c.Roles.Where( r => r.RoleName == roleName ).SelectMany( u => u.Users.Select( m => m.Username ) ).ToArray();
     }
 }
 public override string[] GetRolesForUser( string username )
 {
     using( var c = new NwdAuthContext() )
     {
         return c.Users.Where( m => m.Username == username ).SelectMany( m => m.Roles ).Select( m => m.RoleName ).ToArray();
     }
 }
 public override string[] GetAllRoles()
 {
     using( var c = new NwdAuthContext() )
     {
         return c.Roles.Select( m => m.RoleName ).ToArray();
     }
 }
        public void Database_Should_Always_Be_Created()
        {
            Database.SetInitializer( new DropCreateDatabaseAlways<NwdBackOfficeContext>() );
            Database.SetInitializer( new DropCreateDatabaseAlways<NwdFrontOfficeContext>() );
            Database.SetInitializer( new DropCreateDatabaseAlways<NwdAuthContext>() );

            using( var b = new NwdBackOfficeContext() )
            {
                b.Database.Initialize( true );
                Debug.Assert( b.Database.Exists() );
                Console.WriteLine( b.Database.Connection.ConnectionString );
            }
            using( var f = new NwdFrontOfficeContext() )
            {
                f.Database.Initialize( true );
                Debug.Assert( f.Database.Exists() );
                Console.WriteLine( f.Database.Connection.ConnectionString );
            }
            using( var a = new NwdAuthContext() )
            {
                a.Database.Initialize( true );
                Debug.Assert( a.Database.Exists() );
                Console.WriteLine( a.Database.Connection.ConnectionString );
                a.Roles.Add( new Role { RoleName = "User" } );
                Role r = a.Roles.Add( new Role { RoleName = "Administrator" } );
                Nwd.Authentication.Model.User u = a.Users.Add( new Nwd.Authentication.Model.User { Username = "******", Name = "NwdProvider", Comment = "user admin", IsApproved = true, IsLockedOut = false, Password = AuthenticationUtils.HashPassword( "test" ), CreationDate = DateTime.UtcNow } );
                u.Roles.Add( r );

                a.SaveChanges();
            }
        }
        public override void CreateRole( string roleName )
        {
            using( var c = new NwdAuthContext() )
            {
                Role r = c.Roles.Where( m => m.RoleName == roleName ).FirstOrDefault();
                if( r != null ) return;

                c.Roles.Add( new Role() { RoleName = roleName } );
            }
        }
        public override bool DeleteRole( string roleName, bool throwOnPopulatedRole )
        {
            using( var c = new NwdAuthContext() )
            {
                Role r = c.Roles.Where( m => m.RoleName == roleName ).FirstOrDefault();
                if( r == null ) return false;

                c.Roles.Remove( r );
                c.SaveChanges();
                return true;
            }
        }
        public override void UpdateUser( MembershipUser user )
        {
            using( var c = new NwdAuthContext() )
            {
                User u = c.Users.Where( m => m.Username == user.UserName ).FirstOrDefault();
                if( u == null ) return;

                c.Users.Attach( u );

                if( user.Email != u.Email )
                {
                    u.Email = user.Email;
                    c.Entry( u ).Property( m => m.Email ).IsModified = true;
                }

                if( user.ProviderName != u.Name )
                {
                    u.Name = user.ProviderName;
                    c.Entry( u ).Property( m => m.Email ).IsModified = true;
                }

                c.SaveChanges();
            }
        }
 public User GetUser( string username, NwdAuthContext context )
 {
     return context.Users.Where( m => m.Username == username ).FirstOrDefault();
 }
 public override MembershipUser GetUser( object providerUserKey, bool isOnlineUser )
 {
     using( var c = new NwdAuthContext() )
     {
         User u = c.Users.Where( m => m.Id == (int)providerUserKey ).FirstOrDefault();
         if( u == null ) return null;
         return GetMembershipUserFromUser( u );
     }
 }
 public override MembershipUser GetUser( string username, bool isOnlineUser )
 {
     using( var c = new NwdAuthContext() )
     {
         User u = GetUser( username, c );
         if( u == null ) return null;
         return GetMembershipUserFromUser( u );
     }
 }
 public override string GetPassword( string username, string answer )
 {
     using (var c = new NwdAuthContext())
     {
         return c.Users.Where(m => m.Username == username).Select( m => m.Password).FirstOrDefault();
     }
 }
        public override bool DeleteUser( string username, bool deleteAllRelatedData )
        {
            using( var c = new NwdAuthContext() )
            {
                MembershipUser u = GetUser( username, false );
                if( u == null ) return false;

                return true;
            }
        }
        public override MembershipUser CreateUser( string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status )
        {
            if( username == null || username.Length > 0 ) { status = MembershipCreateStatus.InvalidEmail; return null; }
            if( password == null || password.Length > 0 ) { status = MembershipCreateStatus.InvalidPassword; return null; }

            using( var c = new NwdAuthContext() )
            {
                if( GetUser( username, c ) != null ) { status = MembershipCreateStatus.DuplicateUserName; return null; }
                User u = new User { Username = username, Password = password, Email = email };
                c.Users.Add( u );
                c.SaveChanges();
                status = MembershipCreateStatus.Success;
                return GetUser( username, false );
            }
        }
 public override bool IsUserInRole( string username, string roleName )
 {
     using( var c = new NwdAuthContext() )
     {
         return c.Roles.Where( r => r.RoleName == roleName ).SelectMany( u => u.Users.Where( m => m.Username == username ) ).Any();
     }
 }
        public override bool ValidateUser( string username, string password )
        {
            using( var c = new NwdAuthContext() )
            {
                var user = GetUser( username, false );
                if( user == null ) return false;

                if( CheckPassword( password, user.GetPassword() ) ) return true;

                return false;
            }
        }
        public override bool ChangePassword( string username, string oldPassword, string newPassword )
        {
            using( var c = new NwdAuthContext() )
            {
                User u = GetUser( username, c );

                if( u == null ) return false;
                if( u.Password != EncodePassword( oldPassword ) ) return false;

                u.Password = EncodePassword( newPassword );
                c.Users.Attach( u );
                c.Entry( u ).Property( m => m.Password ).IsModified = true;
                c.SaveChanges();

                return true;
            }
        }
 public override MembershipUserCollection FindUsersByEmail( string emailToMatch, int pageIndex, int pageSize, out int totalRecords )
 {
     using( var c = new NwdAuthContext() )
     {
         IQueryable<User> u = c.Users.Where( m => m.Email == emailToMatch );
         totalRecords = u.Count();
         //return u.Skip( pageIndex * pageSize ).Take( pageSize );
         throw new NotImplementedException();
     }
 }
        public override MembershipUserCollection GetAllUsers( int pageIndex, int pageSize, out int totalRecords )
        {
            MembershipUserCollection muc = new MembershipUserCollection();
            using( var c = new NwdAuthContext() )
            {
                IQueryable<User> listUser = c.Users;
                totalRecords = listUser.Count();
                foreach( User m in listUser.Skip( pageIndex * pageSize ).Take( pageSize ) )
                    muc.Add( GetMembershipUserFromUser( m ) );

                return muc;
            }
        }
 public override bool RoleExists( string roleName )
 {
     using( var c = new NwdAuthContext() )
     {
         return c.Roles.Where( r => r.RoleName == roleName ).Any();
     }
 }