/**
*
*/
package org.minnal.security;
import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature;
import org.minnal.core.Application;
import org.minnal.core.Plugin;
import org.minnal.core.config.ApplicationConfiguration;
import org.minnal.security.config.SecurityAware;
import org.minnal.security.config.SecurityConfiguration;
import org.minnal.security.filter.AuthenticationFilter;
import org.minnal.security.filter.AuthenticationListener;
import org.minnal.security.filter.CallbackFilter;
import org.minnal.security.filter.SecurityContextFilter;
import org.pac4j.core.client.Client;
import org.pac4j.core.client.Clients;
/**
* @author ganeshs
*
*/
public class SecurityPlugin implements Plugin {
private Clients clients;
private AuthenticationListener listener;
/**
* @param callbackUrl
* @param clients
*/
public SecurityPlugin(String callbackUrl, Client... clients) {
this.clients = new Clients(callbackUrl, clients);
}
/**
* @param callbackUrl
* @param clients
*/
public SecurityPlugin(String callbackUrl, AuthenticationListener listener, Client... clients) {
this.clients = new Clients(callbackUrl, clients);
this.listener = listener;
}
/**
* @param clients
*/
public SecurityPlugin(Clients clients) {
this.clients = clients;
}
@Override
public void init(Application<? extends ApplicationConfiguration> application) {
ApplicationConfiguration applicationConfiguration = application.getConfiguration();
if (! (applicationConfiguration instanceof SecurityAware)) {
return;
}
SecurityConfiguration configuration = ((SecurityAware) applicationConfiguration).getSecurityConfiguration();
clients.init();
CallbackFilter callbackFilter = new CallbackFilter(clients, configuration);
callbackFilter.registerListener(listener);
application.addFilter(callbackFilter);
application.addFilter(new AuthenticationFilter(clients, configuration));
application.addFilter(new SecurityContextFilter(configuration));
application.getResourceConfig().register(RolesAllowedDynamicFeature.class);
}
@Override
public void destroy() {
}
}