// Path: src/main/java/yourwebproject2/framework/exception/EmailNotFoundException.java
// public class EmailNotFoundException extends AuthenticationException {
//     public EmailNotFoundException(String message) {
//         super(message);
//     }
// }
// 
// Path: src/main/java/yourwebproject2/model/entity/User.java
// @Entity
// @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
// @Table(indexes = {  @Index(name="email_idx", columnList = "email", unique = true),
//                     @Index(name="displayName_idx", columnList = "display_name") })
// public class User extends JPAEntity<Long> implements Serializable {
//     public enum Role {
//         USER,
//         ADMIN
//     }
// 
//     private String email;
//     private @JsonIgnore String password;
//     private boolean enabled;
//     private Role role;
//     private String displayName;
// 
//     private @JsonIgnore Integer loginCount;
//     private Date currentLoginAt;
//     private Date lastLoginAt;
//     private @JsonIgnore String currentLoginIp;
//     private @JsonIgnore String lastLoginIp;
// 
//     private static BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
// 
//     @Column @Email @NotNull @NotBlank
//     public String getEmail() {
//         return this.email;
//     }
// 
//     public void setEmail(String email) {
//         this.email = email;
//     }
// 
//     @JsonIgnore @Column(nullable = false, length = 60)
//     public String getPassword() {
//         return this.password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     @Column(nullable = false)
//     public boolean isEnabled() {
//         return this.enabled;
//     }
// 
//     public void setEnabled(boolean enabled) {
//         this.enabled = enabled;
//     }
// 
//     @Column(nullable = false)
//     public Role getRole() {
//         return this.role;
//     }
// 
//     public void setRole(Role role) {
//         this.role = role;
//     }
// 
//     @Column(name="display_name")
//     public String getDisplayName() {
//         return displayName;
//     }
// 
//     public void setDisplayName(String displayName) {
//         this.displayName = displayName;
//     }
// 
//     @JsonIgnore @Column
//     public Integer getLoginCount() {
//         return loginCount;
//     }
// 
//     public void setLoginCount(Integer loginCount) {
//         this.loginCount = loginCount;
//     }
// 
//     @Column
//     public Date getCurrentLoginAt() {
//         return currentLoginAt;
//     }
// 
//     public void setCurrentLoginAt(Date currentLoginAt) {
//         this.currentLoginAt = currentLoginAt;
//     }
// 
//     @Column
//     public Date getLastLoginAt() {
//         return lastLoginAt;
//     }
// 
//     public void setLastLoginAt(Date lastLoginAt) {
//         this.lastLoginAt = lastLoginAt;
//     }
// 
//     @JsonIgnore @Column
//     public String getCurrentLoginIp() {
//         return currentLoginIp;
//     }
// 
//     public void setCurrentLoginIp(String currentLoginIp) {
//         this.currentLoginIp = currentLoginIp;
//     }
// 
//     @JsonIgnore @Column
//     public String getLastLoginIp() {
//         return lastLoginIp;
//     }
// 
//     public void setLastLoginIp(String lastLoginIp) {
//         this.lastLoginIp = lastLoginIp;
//     }
// 
//     /**
//      * Method to create the hash of the password before storing
//      *
//      * @param pass
//      *
//      * @return SHA hash digest of the password
//      */
//     public static synchronized String hashPassword(String pass) {
//         return passwordEncoder.encode(pass);
//     }
// 
//     public static synchronized boolean doesPasswordMatch(String rawPass, String encodedPass) {
//         return passwordEncoder.matches(rawPass, encodedPass);
//     }
// 
//     @Override
//     public String toString() {
//         return "User{" +
//                 "email='" + email + '\'' +
//                 ", password='" + password + '\'' +
//                 ", enabled=" + enabled +
//                 ", role=" + role +
//                 ", displayName='" + displayName + '\'' +
//                 ", loginCount=" + loginCount +
//                 ", currentLoginAt=" + currentLoginAt +
//                 ", lastLoginAt=" + lastLoginAt +
//                 ", currentLoginIp='" + currentLoginIp + '\'' +
//                 ", lastLoginIp='" + lastLoginIp + '\'' +
//                 '}';
//     }
// }
// 
// Path: src/main/java/yourwebproject2/model/repository/UserRepository.java
// public interface UserRepository extends BaseJPARepository<User, Long> {
//     /**
//      * Finds a user with the given email
//      *
//      * @param email
//      * @return
//      */
//     public User findByEmail(String email);
// }


import yourwebproject2.framework.exception.EmailNotFoundException;
import yourwebproject2.model.entity.User;
import yourwebproject2.model.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
            }

            @Override
            public String getUsername() {
                return null;
            }

            @Override
            public boolean isAccountNonExpired() {
                return false;
            }

            @Override
            public boolean isAccountNonLocked() {
                return false;
            }

            @Override
            public boolean isCredentialsNonExpired() {
                return false;
            }

            @Override
            public boolean isEnabled() {
                return false;
            }
        };
    }

    // Converts yourwebproject2.model.entity..User user to org.springframework.security.core.userdetails.User
// Path: src/main/java/yourwebproject2/framework/exception/EmailNotFoundException.java
// public class EmailNotFoundException extends AuthenticationException {
//     public EmailNotFoundException(String message) {
//         super(message);
//     }
// }
// 
// Path: src/main/java/yourwebproject2/model/entity/User.java
// @Entity
// @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
// @Table(indexes = {  @Index(name="email_idx", columnList = "email", unique = true),
//                     @Index(name="displayName_idx", columnList = "display_name") })
// public class User extends JPAEntity<Long> implements Serializable {
//     public enum Role {
//         USER,
//         ADMIN
//     }
// 
//     private String email;
//     private @JsonIgnore String password;
//     private boolean enabled;
//     private Role role;
//     private String displayName;
// 
//     private @JsonIgnore Integer loginCount;
//     private Date currentLoginAt;
//     private Date lastLoginAt;
//     private @JsonIgnore String currentLoginIp;
//     private @JsonIgnore String lastLoginIp;
// 
//     private static BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
// 
//     @Column @Email @NotNull @NotBlank
//     public String getEmail() {
//         return this.email;
//     }
// 
//     public void setEmail(String email) {
//         this.email = email;
//     }
// 
//     @JsonIgnore @Column(nullable = false, length = 60)
//     public String getPassword() {
//         return this.password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     @Column(nullable = false)
//     public boolean isEnabled() {
//         return this.enabled;
//     }
// 
//     public void setEnabled(boolean enabled) {
//         this.enabled = enabled;
//     }
// 
//     @Column(nullable = false)
//     public Role getRole() {
//         return this.role;
//     }
// 
//     public void setRole(Role role) {
//         this.role = role;
//     }
// 
//     @Column(name="display_name")
//     public String getDisplayName() {
//         return displayName;
//     }
// 
//     public void setDisplayName(String displayName) {
//         this.displayName = displayName;
//     }
// 
//     @JsonIgnore @Column
//     public Integer getLoginCount() {
//         return loginCount;
//     }
// 
//     public void setLoginCount(Integer loginCount) {
//         this.loginCount = loginCount;
//     }
// 
//     @Column
//     public Date getCurrentLoginAt() {
//         return currentLoginAt;
//     }
// 
//     public void setCurrentLoginAt(Date currentLoginAt) {
//         this.currentLoginAt = currentLoginAt;
//     }
// 
//     @Column
//     public Date getLastLoginAt() {
//         return lastLoginAt;
//     }
// 
//     public void setLastLoginAt(Date lastLoginAt) {
//         this.lastLoginAt = lastLoginAt;
//     }
// 
//     @JsonIgnore @Column
//     public String getCurrentLoginIp() {
//         return currentLoginIp;
//     }
// 
//     public void setCurrentLoginIp(String currentLoginIp) {
//         this.currentLoginIp = currentLoginIp;
//     }
// 
//     @JsonIgnore @Column
//     public String getLastLoginIp() {
//         return lastLoginIp;
//     }
// 
//     public void setLastLoginIp(String lastLoginIp) {
//         this.lastLoginIp = lastLoginIp;
//     }
// 
//     /**
//      * Method to create the hash of the password before storing
//      *
//      * @param pass
//      *
//      * @return SHA hash digest of the password
//      */
//     public static synchronized String hashPassword(String pass) {
//         return passwordEncoder.encode(pass);
//     }
// 
//     public static synchronized boolean doesPasswordMatch(String rawPass, String encodedPass) {
//         return passwordEncoder.matches(rawPass, encodedPass);
//     }
// 
//     @Override
//     public String toString() {
//         return "User{" +
//                 "email='" + email + '\'' +
//                 ", password='" + password + '\'' +
//                 ", enabled=" + enabled +
//                 ", role=" + role +
//                 ", displayName='" + displayName + '\'' +
//                 ", loginCount=" + loginCount +
//                 ", currentLoginAt=" + currentLoginAt +
//                 ", lastLoginAt=" + lastLoginAt +
//                 ", currentLoginIp='" + currentLoginIp + '\'' +
//                 ", lastLoginIp='" + lastLoginIp + '\'' +
//                 '}';
//     }
// }
// 
// Path: src/main/java/yourwebproject2/model/repository/UserRepository.java
// public interface UserRepository extends BaseJPARepository<User, Long> {
//     /**
//      * Finds a user with the given email
//      *
//      * @param email
//      * @return
//      */
//     public User findByEmail(String email);
// }


// Path: src/main/java/yourwebproject2/unusedspringsecurity/UserDetailsServiceImpl.java
import yourwebproject2.framework.exception.EmailNotFoundException;
import yourwebproject2.model.entity.User;
import yourwebproject2.model.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;

            }

            @Override
            public String getUsername() {
                return null;
            }

            @Override
            public boolean isAccountNonExpired() {
                return false;
            }

            @Override
            public boolean isAccountNonLocked() {
                return false;
            }

            @Override
            public boolean isCredentialsNonExpired() {
                return false;
            }

            @Override
            public boolean isEnabled() {
                return false;
            }
        };
    }

    // Converts yourwebproject2.model.entity..User user to org.springframework.security.core.userdetails.User
    private org.springframework.security.core.userdetails.User buildUserForAuthentication(User user,