package org.simbasecurity.dwclient.dropwizard.provider;
import javax.inject.Inject;
import org.simbasecurity.dwclient.dropwizard.authenticator.SimbaAuthenticator;
import org.simbasecurity.dwclient.dropwizard.credentials.SimbaCredentials;
import org.simbasecurity.dwclient.dropwizard.credentials.SimbaCredentialsFactory;
import com.sun.jersey.api.model.Parameter;
import com.sun.jersey.core.spi.component.ComponentContext;
import com.sun.jersey.core.spi.component.ComponentScope;
import com.sun.jersey.spi.inject.Injectable;
import com.sun.jersey.spi.inject.InjectableProvider;
public class SimbaAuthenticatedProvider implements InjectableProvider<Authenticated, Parameter> {
private final SimbaAuthenticator authenticator;
private final SimbaCredentialsFactory simbaCredentialsFactory;
private final DomainUserProvider<? extends AuthenticatedPrincipal> domainProvider;
/**
* Creates a new {@link SimbaAuthenticatedProvider} with the given {@link com.yammer.dropwizard.auth.Authenticator} and realm.
*
* @param authenticator the authenticator which will take the {@link SimbaCredentials} and
* convert them into instances of {@code T}
* @param domainProvider TODO
* @param realm the name of the authentication realm
*/
@Inject
public SimbaAuthenticatedProvider(SimbaAuthenticator authenticator, SimbaCredentialsFactory simbaCredentialsFactory,
DomainUserProvider<? extends AuthenticatedPrincipal> domainProvider) {
this.authenticator = authenticator;
this.simbaCredentialsFactory = simbaCredentialsFactory;
this.domainProvider = domainProvider;
}
@Override
public ComponentScope getScope() {
return ComponentScope.PerRequest;
}
@Override
public Injectable<? extends AuthenticatedPrincipal> getInjectable(ComponentContext ic, Authenticated a, Parameter c) {
return new SimbaAuthenticatedInjectable<>(authenticator, simbaCredentialsFactory, domainProvider, a.required());
}
}