package no.java.incogito.web.security;
import static java.util.Collections.singletonList;
import no.java.incogito.application.*;
import static no.java.incogito.domain.User.UserId.*;
import org.apache.commons.lang.*;
import org.apache.commons.logging.*;
import org.springframework.beans.factory.annotation.*;
import org.springframework.dao.*;
import org.springframework.security.core.*;
import org.springframework.security.core.authority.*;
import org.springframework.security.core.userdetails.*;
import org.springframework.stereotype.*;
import java.util.*;
@Component("incogito-user-details-service")
public class IncogitoUserDetailsService implements UserDetailsService {
private final Log log = LogFactory.getLog(getClass());
private final IncogitoApplication application;
@Autowired
public IncogitoUserDetailsService(IncogitoApplication application) {
this.application = application;
}
// -----------------------------------------------------------------------
// UserDetailsService Implementation
// -----------------------------------------------------------------------
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
System.out.println("IncogitoUserDetailsService.loadUserByUsername: username = " + username);
if (StringUtils.isEmpty(username)) {
throw new UsernameNotFoundException("username is empty");
}
OperationResult<no.java.incogito.domain.User> operationResult = application.getUser(userIdFromString(username));
if (operationResult.isOk()) {
return new IncogitoUserDetails(operationResult.value());
}
throw new UsernameNotFoundException("Hm");
}
public static class IncogitoUserDetails implements UserDetails {
private static final List<GrantedAuthority> authorities = singletonList((GrantedAuthority) new GrantedAuthorityImpl("ROLE_USER"));
public final no.java.incogito.domain.User user;
public IncogitoUserDetails(no.java.incogito.domain.User user) {
this.user = user;
}
// -----------------------------------------------------------------------
// UserDetails Implementation
// -----------------------------------------------------------------------
public Collection<GrantedAuthority> getAuthorities() {
return authorities;
}
public String getPassword() {
throw new RuntimeException("Not implemented");
}
public String getUsername() {
return user.id.value;
}
public boolean isAccountNonExpired() {
return true;
}
public boolean isAccountNonLocked() {
return true;
}
public boolean isCredentialsNonExpired() {
return true;
}
public boolean isEnabled() {
return true;
}
}
}