import static play.Play.application;
import jackrabbit.AorraAccessManager;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.security.AccessControlManager;
import play.Application;
import play.GlobalSettings;
import play.libs.F.Function;
import play.mvc.Call;
import service.GuiceInjectionPlugin;
import service.JcrSessionFactory;
import com.feth.play.module.pa.PlayAuthenticate;
import com.feth.play.module.pa.PlayAuthenticate.Resolver;
import com.feth.play.module.pa.exceptions.AccessDeniedException;
import com.feth.play.module.pa.exceptions.AuthException;
import com.google.inject.Injector;
public class Global extends GlobalSettings {
@Override
public <A> A getControllerInstance(Class<A> controllerClass)
throws Exception {
return getInjector().getInstance(controllerClass);
}
private Injector getInjector() {
return GuiceInjectionPlugin.getInjector(application());
}
private JcrSessionFactory sessionFactory() {
return GuiceInjectionPlugin.getInjector(application())
.getInstance(JcrSessionFactory.class);
}
@Override
public void onStart(final Application app) {
PlayAuthenticate.setResolver(new Resolver() {
@Override
public Call login() {
// Your login page
return controllers.routes.Application.login();
}
@Override
public Call afterAuth() {
// The user will be redirected to this page after authentication
// if no original URL was saved
return controllers.routes.FileStoreController.index();
}
@Override
public Call afterLogout() {
return controllers.routes.FileStoreController.index();
}
@Override
public Call auth(final String provider) {
// You can provide your own authentication implementation,
// however the default should be sufficient for most cases
return com.feth.play.module.pa.controllers.routes.Authenticate
.authenticate(provider);
}
@Override
public Call onException(final AuthException e) {
if (e instanceof AccessDeniedException) {
return controllers.routes.Application
.oAuthDenied(((AccessDeniedException) e)
.getProviderKey());
}
// more custom problem handling here...
return super.onException(e);
}
@Override
public Call askLink() {
// We don't support moderated account linking in this sample.
// See the play-authenticate-usage project for an example
return null;
}
@Override
public Call askMerge() {
// We don't support moderated account merging in this sample.
// See the play-authenticate-usage project for an example
return null;
}
});
sessionFactory().inSession(new Function<Session, Session>() {
@Override
public Session apply(Session session) throws RepositoryException {
final AccessControlManager acm = session.getAccessControlManager();
((AorraAccessManager)acm).initStore(session);
return session;
}
});
}
}