package com.hubspot.singularity.auth.authenticator;
import javax.servlet.http.HttpServletRequest;
import com.google.common.base.Optional;
import com.google.common.base.Strings;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.ProvisionException;
import com.google.inject.Singleton;
import com.hubspot.singularity.SingularityUser;
import com.hubspot.singularity.auth.datastore.SingularityAuthDatastore;
import com.hubspot.singularity.config.SingularityConfiguration;
@Singleton
public class SingularityHeaderPassthroughAuthenticator implements SingularityAuthenticator {
private final SingularityAuthDatastore datastore;
private final String requestUserHeaderName;
private final Provider<HttpServletRequest> requestProvider;
@Inject
public SingularityHeaderPassthroughAuthenticator(SingularityAuthDatastore datastore, SingularityConfiguration configuration, Provider<HttpServletRequest> requestProvider) {
this.datastore = datastore;
this.requestUserHeaderName = configuration.getAuthConfiguration().getRequestUserHeaderName();
this.requestProvider = requestProvider;
}
private Optional<String> getUserId() {
try {
return Optional.fromNullable(Strings.emptyToNull(requestProvider.get().getHeader(requestUserHeaderName)));
} catch (ProvisionException pe) {
return Optional.absent();
}
}
@Override
public Optional<SingularityUser> get() {
final Optional<String> maybeUsername = getUserId();
if (!maybeUsername.isPresent()) {
return Optional.absent();
}
return datastore.getUser(maybeUsername.get());
}
}