// Path: testing/src/main/java/org/pac4j/jax/rs/TestConfig.java
// public interface TestConfig {
//     
//     String DEFAULT_CLIENT = "default-form";
//     
//     default Config getConfig() {
//         // login not used because the ajax resolver always answer true
//         Authenticator<UsernamePasswordCredentials> auth = new SimpleTestUsernamePasswordAuthenticator();
//         FormClient client = new FormClient("notUsedLoginUrl", auth);
//         DirectFormClient client2 = new DirectFormClient(auth);
//         DirectFormClient client3 = new DirectFormClient(auth);
//         client3.setName(DEFAULT_CLIENT);
// 
//         Clients clients = new Clients("notUsedCallbackUrl", client, client2, client3);
//         // in case of invalid credentials, we simply want the error, not a redirect to the login url
//         clients.setAjaxRequestResolver(new JaxRsAjaxRequestResolver());
//         
//         // so that callback url have the correct prefix w.r.t. the container's context
//         clients.setUrlResolver(new JaxRsUrlResolver());
//         
//         clients.setDefaultSecurityClients(DEFAULT_CLIENT);
// 
//         return new Config(clients);
//     }
// }
// 
// Path: testing/src/main/java/org/pac4j/jax/rs/resources/TestClassLevelResource.java
// @Path("/class")
// @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED)
// public class TestClassLevelResource {
// 
//     @GET
//     @Path("no")
//     @Pac4JSecurity(ignore = true)
//     public String get() {
//         return "ok";
//     }
// 
//     @POST
//     @Path("direct")
//     public String direct() {
//         return "ok";
//     }
// }
// 
// Path: testing/src/main/java/org/pac4j/jax/rs/resources/TestProxyResource.java
// @Path("/")
// public class TestProxyResource {
// 
//     @Path("proxied/class")
//     public TestClassLevelResource proxiedResource() {
//         try {
//             final ProxyFactory factory = new ProxyFactory();
//             factory.setSuperclass(TestClassLevelResource.class);
//             final Proxy proxy = (Proxy) factory.createClass().newInstance();
//             proxy.setHandler((self, overridden, proceed, args) -> {
//                 return proceed.invoke(self, args);
//             });
// 
//             return (TestClassLevelResource) proxy;
//         } catch (InstantiationException | IllegalAccessException e) {
//             throw new AssertionError(e);
//         }
//     }
// }
// 
// Path: testing/src/main/java/org/pac4j/jax/rs/resources/TestResource.java
// @Path("/")
// public class TestResource {
// 
//     private final Authorizer<CommonProfile> IS_AUTHENTICATED_AUTHORIZER = new IsAuthenticatedAuthorizer<>();
// 
//     @GET
//     @Path("no")
//     public String get() {
//         return "ok";
//     }
// 
//     @POST
//     @Path("direct")
//     @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED)
//     public String direct() {
//         return "ok";
//     }
// 
//     @POST
//     @Path("defaultDirect")
//     @Pac4JSecurity(authorizers = DefaultAuthorizers.IS_AUTHENTICATED)
//     public String defaultDirect() {
//         return "ok";
//     }
// 
//     @POST
//     @Path("directInject")
//     @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED)
//     public String directInject(@Pac4JProfile CommonProfile profile) {
//         if (profile != null) {
//             return "ok";
//         } else {
//             return "error";
//         }
//     }
// 
//     @POST
//     @Path("directContext")
//     @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED)
//     public String directContext(@Context SecurityContext context) {
//         if (context != null) {
//             if (context.getUserPrincipal() instanceof Pac4JPrincipal) {
//                 return "ok";
//             } else {
//                 return "fail";
//             }
//         } else {
//             return "error";
//         }
//     }
// 
//     @GET
//     @Path("directInjectNoAuth")
//     public String directInjectNoAuth(@Pac4JProfile CommonProfile profile) {
//         if (profile != null) {
//             return "ok";
//         } else {
//             return "error";
//         }
//     }
// 
//     @POST
//     @Path("directInjectManager")
//     @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED, skipResponse = true)
//     public String directInjectManager(@Pac4JProfileManager ProfileManager<CommonProfile> pm) throws HttpAction {
//         if (pm != null) {
//             // pm.isAuthorized is relying on the session...
//             if (IS_AUTHENTICATED_AUTHORIZER.isAuthorized(null, pm.getAll(false))) {
//                 return "ok";
//             } else {
//                 return "fail";
//             }
//         } else {
//             return "error";
//         }
//     }
// 
//     @POST
//     @Path("directInjectSkip")
//     @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED, skipResponse = true)
//     public String directInjectSkip(@Pac4JProfile Optional<CommonProfile> profile) {
//         if (profile.isPresent()) {
//             return "ok";
//         } else {
//             return "fail";
//         }
//     }
// 
//     @POST
//     @Path("directResponseHeadersSet")
//     @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED, matchers = DefaultMatchers.NOSNIFF)
//     public String directResponseHeadersSet() {
//         return "ok";
//     }
// }


import java.util.Set;
import javax.ws.rs.client.WebTarget;
import org.assertj.core.util.Sets;
import org.junit.rules.TestRule;
import org.pac4j.jax.rs.TestConfig;
import org.pac4j.jax.rs.resources.TestClassLevelResource;
import org.pac4j.jax.rs.resources.TestProxyResource;
import org.pac4j.jax.rs.resources.TestResource;
package org.pac4j.jax.rs.rules;




public interface ContainerRule extends TestRule, TestConfig {

    WebTarget getTarget(String url);

    String cookieName();

    default Set<Class<?>> getResources() {
// Path: testing/src/main/java/org/pac4j/jax/rs/TestConfig.java
// public interface TestConfig {
//     
//     String DEFAULT_CLIENT = "default-form";
//     
//     default Config getConfig() {
//         // login not used because the ajax resolver always answer true
//         Authenticator<UsernamePasswordCredentials> auth = new SimpleTestUsernamePasswordAuthenticator();
//         FormClient client = new FormClient("notUsedLoginUrl", auth);
//         DirectFormClient client2 = new DirectFormClient(auth);
//         DirectFormClient client3 = new DirectFormClient(auth);
//         client3.setName(DEFAULT_CLIENT);
// 
//         Clients clients = new Clients("notUsedCallbackUrl", client, client2, client3);
//         // in case of invalid credentials, we simply want the error, not a redirect to the login url
//         clients.setAjaxRequestResolver(new JaxRsAjaxRequestResolver());
//         
//         // so that callback url have the correct prefix w.r.t. the container's context
//         clients.setUrlResolver(new JaxRsUrlResolver());
//         
//         clients.setDefaultSecurityClients(DEFAULT_CLIENT);
// 
//         return new Config(clients);
//     }
// }
// 
// Path: testing/src/main/java/org/pac4j/jax/rs/resources/TestClassLevelResource.java
// @Path("/class")
// @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED)
// public class TestClassLevelResource {
// 
//     @GET
//     @Path("no")
//     @Pac4JSecurity(ignore = true)
//     public String get() {
//         return "ok";
//     }
// 
//     @POST
//     @Path("direct")
//     public String direct() {
//         return "ok";
//     }
// }
// 
// Path: testing/src/main/java/org/pac4j/jax/rs/resources/TestProxyResource.java
// @Path("/")
// public class TestProxyResource {
// 
//     @Path("proxied/class")
//     public TestClassLevelResource proxiedResource() {
//         try {
//             final ProxyFactory factory = new ProxyFactory();
//             factory.setSuperclass(TestClassLevelResource.class);
//             final Proxy proxy = (Proxy) factory.createClass().newInstance();
//             proxy.setHandler((self, overridden, proceed, args) -> {
//                 return proceed.invoke(self, args);
//             });
// 
//             return (TestClassLevelResource) proxy;
//         } catch (InstantiationException | IllegalAccessException e) {
//             throw new AssertionError(e);
//         }
//     }
// }
// 
// Path: testing/src/main/java/org/pac4j/jax/rs/resources/TestResource.java
// @Path("/")
// public class TestResource {
// 
//     private final Authorizer<CommonProfile> IS_AUTHENTICATED_AUTHORIZER = new IsAuthenticatedAuthorizer<>();
// 
//     @GET
//     @Path("no")
//     public String get() {
//         return "ok";
//     }
// 
//     @POST
//     @Path("direct")
//     @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED)
//     public String direct() {
//         return "ok";
//     }
// 
//     @POST
//     @Path("defaultDirect")
//     @Pac4JSecurity(authorizers = DefaultAuthorizers.IS_AUTHENTICATED)
//     public String defaultDirect() {
//         return "ok";
//     }
// 
//     @POST
//     @Path("directInject")
//     @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED)
//     public String directInject(@Pac4JProfile CommonProfile profile) {
//         if (profile != null) {
//             return "ok";
//         } else {
//             return "error";
//         }
//     }
// 
//     @POST
//     @Path("directContext")
//     @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED)
//     public String directContext(@Context SecurityContext context) {
//         if (context != null) {
//             if (context.getUserPrincipal() instanceof Pac4JPrincipal) {
//                 return "ok";
//             } else {
//                 return "fail";
//             }
//         } else {
//             return "error";
//         }
//     }
// 
//     @GET
//     @Path("directInjectNoAuth")
//     public String directInjectNoAuth(@Pac4JProfile CommonProfile profile) {
//         if (profile != null) {
//             return "ok";
//         } else {
//             return "error";
//         }
//     }
// 
//     @POST
//     @Path("directInjectManager")
//     @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED, skipResponse = true)
//     public String directInjectManager(@Pac4JProfileManager ProfileManager<CommonProfile> pm) throws HttpAction {
//         if (pm != null) {
//             // pm.isAuthorized is relying on the session...
//             if (IS_AUTHENTICATED_AUTHORIZER.isAuthorized(null, pm.getAll(false))) {
//                 return "ok";
//             } else {
//                 return "fail";
//             }
//         } else {
//             return "error";
//         }
//     }
// 
//     @POST
//     @Path("directInjectSkip")
//     @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED, skipResponse = true)
//     public String directInjectSkip(@Pac4JProfile Optional<CommonProfile> profile) {
//         if (profile.isPresent()) {
//             return "ok";
//         } else {
//             return "fail";
//         }
//     }
// 
//     @POST
//     @Path("directResponseHeadersSet")
//     @Pac4JSecurity(clients = "DirectFormClient", authorizers = DefaultAuthorizers.IS_AUTHENTICATED, matchers = DefaultMatchers.NOSNIFF)
//     public String directResponseHeadersSet() {
//         return "ok";
//     }
// }


// Path: testing/src/main/java/org/pac4j/jax/rs/rules/ContainerRule.java
import java.util.Set;
import javax.ws.rs.client.WebTarget;
import org.assertj.core.util.Sets;
import org.junit.rules.TestRule;
import org.pac4j.jax.rs.TestConfig;
import org.pac4j.jax.rs.resources.TestClassLevelResource;
import org.pac4j.jax.rs.resources.TestProxyResource;
import org.pac4j.jax.rs.resources.TestResource;

package org.pac4j.jax.rs.rules;




public interface ContainerRule extends TestRule, TestConfig {

    WebTarget getTarget(String url);

    String cookieName();

    default Set<Class<?>> getResources() {
        return Sets.newLinkedHashSet(TestResource.class, TestClassLevelResource.class, TestProxyResource.class);