package org.multibit.mbm.auth.cookie;
/**
* <p>[Pattern] to provide the following to {@link Object}:</p>
* <ul>
* <li></li>
* </ul>
* <p>Example:</p>
* <pre>
* </pre>
*
* @since 0.0.1
*
*/
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;
import com.yammer.dropwizard.auth.Authenticator;
import com.yammer.dropwizard.logging.Log;
import org.multibit.mbm.auth.annotation.RestrictedTo;
/**
* <p>Authentication provider to provide the following to Jersey:</p>
* <ul>
* <li>Bridge between Dropwizard and Jersey for HMAC authentication</li>
* <li>Provides additional {@link org.multibit.mbm.auth.Authority} information</li>
* </ul>
*
* @param <T> the principal type.
*
* @since 0.0.1
*/
public class CookieClientRestrictedToProvider<T> implements InjectableProvider<RestrictedTo, Parameter> {
static final Log LOG = Log.forClass(CookieClientRestrictedToProvider.class);
private final Authenticator<CookieClientCredentials, T> authenticator;
private final String sessionTokenName;
private final String rememberMeName;
/**
* Creates a new {@link CookieClientRestrictedToProvider} with the given {@link com.yammer.dropwizard.auth.Authenticator} and realm.
*
* @param authenticator the authenticator which will take the {@link CookieClientCredentials} and
* convert them into instances of {@code T}
* @param sessionTokenName The session token name
* @param rememberMeName The "remember me" token name
*/
public CookieClientRestrictedToProvider(
Authenticator<CookieClientCredentials, T> authenticator,
String sessionTokenName,
String rememberMeName) {
this.authenticator = authenticator;
this.sessionTokenName = sessionTokenName;
this.rememberMeName = rememberMeName;
}
@Override
public ComponentScope getScope() {
return ComponentScope.PerRequest;
}
@Override
public Injectable<?> getInjectable(ComponentContext ic,
RestrictedTo a,
Parameter c) {
return new CookieClientRestrictedToInjectable<T>(authenticator, sessionTokenName, rememberMeName, a.value());
}
}