package org.jooby.issues;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import org.jooby.Results;
import org.jooby.Session;
import org.jooby.test.ServerFeature;
import org.junit.Test;
import com.typesafe.config.ConfigFactory;
import com.typesafe.config.ConfigValueFactory;
public class Issue427 extends ServerFeature {
{
use(ConfigFactory.empty().withValue("application.secret",
ConfigValueFactory.fromAnyRef("1234Querty")));
cookieSession();
AtomicInteger inc = new AtomicInteger();
get("/427", req -> {
Session session = req.session();
session.set("foo", inc.incrementAndGet());
Map<String, Object> hash = new LinkedHashMap<>(session.attributes());
hash.put("id", session.id());
hash.put("createdAt", session.createdAt());
hash.put("accessedAt", session.accessedAt());
hash.put("savedAt", session.savedAt());
hash.put("expireAt", session.expiryAt());
hash.put("toString", session.toString());
return hash;
});
get("/427/destroy", req -> {
req.session().destroy();
return Results.ok();
});
get("/427/:name", req -> {
return req.session().get(req.param("name").value()).value();
});
}
@Test
public void sessionData() throws Exception {
long maxAge = System.currentTimeMillis() + 60 * 1000;
DateTimeFormatter.ofPattern("E, dd-MMM-yyyy HH:mm")
.withZone(ZoneId.of("GMT"))
.withLocale(Locale.ENGLISH);
Instant.ofEpochMilli(maxAge);
request()
.get("/427")
.expect("{foo=1, id=cookieSession, createdAt=-1, accessedAt=-1, savedAt=-1, expireAt=-1, toString=cookieSession}")
.header("Set-Cookie",
"jooby.sid=Kq4J4jA6mChDXuIQxxrEibEzA09szjJ89IB3UQuWwAM|foo=1;Version=1;Path=/;HttpOnly");
request()
.get("/427/foo")
.expect("1");
request()
.get("/427")
.expect(200)
.header("Set-Cookie",
"jooby.sid=jajRvd/dtopEAwPK/vC59J3V5cACzfbnYMPfICaC4f8|foo=2;Version=1;Path=/;HttpOnly");
request()
.get("/427/foo")
.expect("2");
request()
.get("/427/destroy")
.expect(200)
.header("Set-Cookie",
"jooby.sid=;Version=1;Path=/;HttpOnly;Max-Age=0;Expires=Thu, 01-Jan-1970 00:00:00 GMT");
}
}