package r.cs;
import ratpack.guice.Guice;
import ratpack.server.RatpackServer;
import ratpack.session.clientside.ClientSideSessionsModule;
import ratpack.session.store.SessionStorage;
public class Main {
public static void main(String... args) throws Exception {
RatpackServer.start(server -> server
.registry(Guice.registry(b -> b
.add(ClientSideSessionsModule.class, config -> {
config.setSecretKey("aaaaaaaaaaaaaaaa");
//config.setSessionName("my-session-value");
//config.setSecretToken("cookiesession");
//config.setMacAlgorithm("HmacMD5");
})
))
.handlers(chain -> chain
.get(ctx -> {
SessionStorage sessionStorage = ctx.getRequest().get(SessionStorage.class);
ctx.render(sessionStorage.getOrDefault("value", "NOT SET"));
})
.get("s", ctx -> {
SessionStorage sessionStorage = ctx.getRequest().get(SessionStorage.class);
StringBuilder stringBuilder = new StringBuilder();
sessionStorage.forEach((attr, value) -> {
stringBuilder.append("ATTR: ")
.append(attr)
.append(" VALUE: ")
.append(value)
.append(" || ");
});
ctx.render(stringBuilder.toString());
})
.get("m/set/:attr", ctx -> {
// set large session size
SessionStorage sessionStorage = ctx.getRequest().get(SessionStorage.class);
String attr = ctx.getPathTokens().get("attr");
String value = "";
for (int i = 0; i < 1024; i++) {
value += "ab";
}
sessionStorage.put(attr, value);
ctx.render(value);
})
.get("m/get/:attr", ctx -> {
SessionStorage sessionStorage = ctx.getRequest().get(SessionStorage.class);
String attr = ctx.getPathTokens().get("attr");
ctx.render(sessionStorage.get(attr));
})
.get("s/set/:attr/:value", ctx -> {
SessionStorage sessionStorage = ctx.getRequest().get(SessionStorage.class);
String attr = ctx.getPathTokens().get("attr");
String value = ctx.getPathTokens().get("value");
if (attr == null || "".equals(attr) || value == null || "".equals(value)) {
ctx.render("ACTION IGNORED FOR: " + attr);
} else {
sessionStorage.put(attr, value);
ctx.render("ATTR " + attr + " SET TO: " + sessionStorage.get(attr));
}
})
.get("s/get/:attr", ctx -> {
SessionStorage sessionStorage = ctx.getRequest().get(SessionStorage.class);
String attr = ctx.getPathTokens().get("attr");
if (attr == null || "".equals(attr)) {
ctx.render("ATTR NOT FOUND: " + attr);
} else {
ctx.render("ATTR " + attr + " VALUE: " + sessionStorage.get(attr));
}
})
.get("s/clear/:attr", ctx -> {
SessionStorage sessionStorage = ctx.getRequest().get(SessionStorage.class);
String attr = ctx.getPathTokens().get("attr");
if (attr != null && !"".equals(attr)) {
sessionStorage.remove(attr);
ctx.render("REMOVED ATTR: " + attr);
} else {
ctx.render("ATTR NOT FOUND: " + attr);
}
})
.get("set/:attr/:value", ctx -> {
SessionStorage sessionStorage = ctx.getRequest().get(SessionStorage.class);
String attr = ctx.getPathTokens().get("attr");
String value = ctx.getPathTokens().get("value");
if (attr == null || "".equals(attr)) {
ctx.render("No attr defined");
return;
}
sessionStorage.forEach((k, v) -> {
System.out.println("SESSION KEY: " + k + " VALUE: " + v);
});
if (value == null || "".equals(value)) {
sessionStorage.remove(attr);
ctx.render("Attr: " + attr + " REMOVED");
} else {
if ("populate".equals(value)) {
for (int i = 0; i < 1; i++) {
sessionStorage.put("attr" + i, "valueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" + i);
}
ctx.render("Attributes populated");
} else {
String prevValue = (String) sessionStorage.getOrDefault(attr, "NOT SET");
sessionStorage.put(attr, value + "1234567890");
ctx.render("Attr " + attr + " SET TO: " + value + " FROM: " + prevValue);
}
}
})
)
);
}
}