package r.pac4j; import com.google.common.collect.ImmutableMap; import com.google.common.reflect.ImmutableTypeToInstanceMap; import org.pac4j.http.client.FormClient; import org.pac4j.http.credentials.SimpleTestUsernamePasswordAuthenticator; import org.pac4j.http.profile.UsernameProfileCreator; import r.kryo.KryoSerializerModule; import r.kryo.KryoValueSerializer; import ratpack.groovy.template.MarkupTemplateModule; import ratpack.guice.Guice; import ratpack.pac4j.RatpackPac4j; import ratpack.server.RatpackServer; import ratpack.server.ServerConfig; import ratpack.session.SessionModule; import ratpack.session.clientside.ClientSideSessionModule; import java.time.Duration; import static ratpack.groovy.Groovy.groovyMarkupTemplate; public class Main { public static void main(String... args) throws Exception { RatpackServer.start(server -> server .serverConfig(ServerConfig.findBaseDir("application.properties")) .registry(Guice.registry(b -> b .module(MarkupTemplateModule.class) .module(SessionModule.class) .module(ClientSideSessionModule.class, config -> { config.setSecretKey("aaaaaaaaaaaaaaaa"); // required to share the same session between app instances (in cluster) config.setSecretToken("bbbbbb"); }) )) .handlers(chain -> chain .handler(RatpackPac4j.callback(new FormClient("/login", new SimpleTestUsernamePasswordAuthenticator(), new UsernameProfileCreator()))) .get(ctx -> { ctx.redirect("admin"); }) .prefix("admin", p -> p .handler(RatpackPac4j.auth(FormClient.class)) .get(ctx -> { ctx.render("admin page ACCESSED"); }) ) .get("login", ctx -> { ctx.render(groovyMarkupTemplate("login.gtpl", model -> model .put("title", "Login") .put("action", "/auth-callback") .put("method", "get") .put("buttonText", "Login") .put("error", ctx.getRequest().getQueryParams().getOrDefault("error", "")) )); }) .assets("public") ) ); } }