package restx.security;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableMap;
import org.joda.time.Duration;
/**
* Date: 14/12/13
* Time: 14:46
*/
public class StdBasicPrincipalAuthenticator implements BasicPrincipalAuthenticator {
private final UserService<?> users;
private final SecuritySettings securitySettings;
public StdBasicPrincipalAuthenticator(UserService<?> users, SecuritySettings securitySettings) {
this.users = users;
this.securitySettings = securitySettings;
}
@Override
public Optional<? extends RestxPrincipal> findByName(String name) {
return users.findUserByName(name);
}
@Override
public Optional<? extends RestxPrincipal> authenticate(String name, String passwordHash,
ImmutableMap<String, ?> principalData) {
boolean rememberMe = Boolean.valueOf((String) principalData.get("rememberMe"));
Optional<? extends RestxPrincipal> u = users.findAndCheckCredentials(name, passwordHash);
if (u.isPresent()) {
RestxSession.current().expires(rememberMe
? Duration.standardDays(securitySettings.rememberMeDuration()) : Duration.ZERO);
}
return u;
}
}