Skip to content

Commit d4e2529

Browse files
committed
Session API: remove anonymous classes for SessionToken implementations
1 parent 3e618c1 commit d4e2529

10 files changed

Lines changed: 220 additions & 203 deletions

File tree

jooby/src/main/java/io/jooby/SessionId.java

Lines changed: 0 additions & 90 deletions
This file was deleted.

jooby/src/main/java/io/jooby/SessionOptions.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
*/
66
package io.jooby;
77

8-
import io.jooby.internal.InMemorySessionStore;
9-
import io.jooby.internal.MultipleSessionId;
10-
import io.jooby.internal.SecretSessionId;
8+
import io.jooby.internal.MemorySessionStore;
9+
import io.jooby.internal.MultipleSessionToken;
10+
import io.jooby.internal.SecretSessionToken;
1111

1212
import javax.annotation.Nonnull;
1313
import java.security.SecureRandom;
@@ -34,36 +34,36 @@ public class SessionOptions {
3434

3535
private static final SecureRandom secure = new SecureRandom();
3636

37-
private SessionStore store = new InMemorySessionStore();
37+
private SessionStore store = new MemorySessionStore();
3838

39-
private final SessionId sessionId;
39+
private final SessionToken sessionToken;
4040

4141
/**
4242
* Creates a session options.
4343
*
4444
* @param secret Secret key. Used to signed the cookie.
45-
* @param sessionId session ID.
45+
* @param sessionToken session ID.
4646
*/
47-
public SessionOptions(@Nonnull String secret, @Nonnull SessionId... sessionId) {
48-
this.sessionId = new SecretSessionId(createSessionId(sessionId), secret);
47+
public SessionOptions(@Nonnull String secret, @Nonnull SessionToken... sessionToken) {
48+
this.sessionToken = new SecretSessionToken(createSessionId(sessionToken), secret);
4949
}
5050

5151
/**
5252
* Creates a session options.
5353
*
54-
* @param sessionId session ID.
54+
* @param sessionToken session ID.
5555
*/
56-
public SessionOptions(@Nonnull SessionId... sessionId) {
57-
this.sessionId = createSessionId(sessionId);
56+
public SessionOptions(@Nonnull SessionToken... sessionToken) {
57+
this.sessionToken = createSessionId(sessionToken);
5858
}
5959

6060
/**
61-
* Session ID strategy (cookie or header).
61+
* Session token strategy (cookie or header).
6262
*
63-
* @return Session ID strategy (cookie or header).
63+
* @return Session token strategy (cookie or header).
6464
*/
65-
public SessionId getSessionId() {
66-
return sessionId;
65+
public SessionToken getSessionToken() {
66+
return sessionToken;
6767
}
6868

6969
/**
@@ -97,13 +97,13 @@ public SessionId getSessionId() {
9797
return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes);
9898
}
9999

100-
private static SessionId createSessionId(@Nonnull SessionId[] sessionId) {
100+
private static SessionToken createSessionId(@Nonnull SessionToken[] sessionId) {
101101
if (sessionId.length == 0) {
102-
return SessionId.cookie(DEFAULT_COOKIE);
102+
return SessionToken.cookie(DEFAULT_COOKIE);
103103
} else if (sessionId.length == 1) {
104104
return sessionId[0];
105105
} else {
106-
return new MultipleSessionId(sessionId);
106+
return new MultipleSessionToken(sessionId);
107107
}
108108
}
109109
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/**
2+
* Jooby https://jooby.io
3+
* Apache License Version 2.0 https://jooby.io/LICENSE.txt
4+
* Copyright 2014 Edgar Espina
5+
*/
6+
package io.jooby;
7+
8+
import javax.annotation.Nonnull;
9+
import javax.annotation.Nullable;
10+
11+
/**
12+
* Find, save and delete a session token (cookie or header) into/from the web {@link Context}.
13+
*
14+
* @author edgar
15+
*/
16+
public interface SessionToken {
17+
18+
class CookieID implements SessionToken {
19+
20+
private final Cookie cookie;
21+
22+
public CookieID(@Nonnull Cookie cookie) {
23+
this.cookie = cookie;
24+
}
25+
26+
@Nullable @Override public String findToken(@Nonnull Context ctx) {
27+
return ctx.cookieMap().get(cookie.getName());
28+
}
29+
30+
@Override public void saveToken(@Nonnull Context ctx, @Nonnull String token) {
31+
String existingId = findToken(ctx);
32+
// write cookie for new or expiring session
33+
if (existingId == null || cookie.getMaxAge() > 0) {
34+
ctx.setResponseCookie(cookie.clone().setValue(token));
35+
}
36+
}
37+
38+
@Override public void deleteToken(@Nonnull Context ctx, @Nonnull String token) {
39+
ctx.setResponseCookie(cookie.clone().setMaxAge(0));
40+
}
41+
}
42+
43+
class HeaderID implements SessionToken {
44+
45+
private final String name;
46+
47+
public HeaderID(String name) {
48+
this.name = name;
49+
}
50+
51+
@Nullable @Override public String findToken(@Nonnull Context ctx) {
52+
return ctx.headerMap().get(name);
53+
}
54+
55+
@Override public void saveToken(@Nonnull Context ctx, @Nonnull String token) {
56+
ctx.setResponseHeader(name, token);
57+
}
58+
59+
@Override public void deleteToken(@Nonnull Context ctx, @Nonnull String token) {
60+
ctx.removeResponseHeader(name);
61+
}
62+
}
63+
64+
/**
65+
* Find session ID.
66+
*
67+
* @param ctx Web context.
68+
* @return Session ID or <code>null</code>.
69+
*/
70+
@Nullable String findToken(@Nonnull Context ctx);
71+
72+
/**
73+
* Save session ID in the web context.
74+
*
75+
* @param ctx Web context.
76+
* @param token
77+
*/
78+
void saveToken(@Nonnull Context ctx, @Nonnull String token);
79+
80+
/**
81+
* Delete session ID in the web context.
82+
*
83+
* @param ctx Web context.
84+
* @param token Session ID to save.
85+
*/
86+
void deleteToken(@Nonnull Context ctx, @Nonnull String token);
87+
88+
/**
89+
* Create a cookie-based Session ID.
90+
*
91+
* @param cookie Cookie template.
92+
* @return Session ID.
93+
*/
94+
static @Nonnull SessionToken cookie(@Nonnull Cookie cookie) {
95+
return new CookieID(cookie);
96+
}
97+
98+
/**
99+
* Create a header-based Session ID.
100+
*
101+
* @param name Header name.
102+
* @return Session ID.
103+
*/
104+
static @Nonnull SessionToken header(@Nonnull String name) {
105+
return new HeaderID(name);
106+
}
107+
}

jooby/src/main/java/io/jooby/internal/InMemorySessionStore.java renamed to jooby/src/main/java/io/jooby/internal/MemorySessionStore.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77

88
import io.jooby.Context;
99
import io.jooby.Session;
10-
import io.jooby.SessionId;
10+
import io.jooby.SessionToken;
1111
import io.jooby.SessionOptions;
1212
import io.jooby.SessionStore;
1313

1414
import java.time.Instant;
1515
import java.util.Map;
1616
import java.util.concurrent.ConcurrentHashMap;
1717

18-
public class InMemorySessionStore implements SessionStore {
18+
public class MemorySessionStore implements SessionStore {
1919
private static class SessionData {
2020
private Instant lastAccessedTime;
2121
private Instant creationTime;
@@ -38,13 +38,13 @@ public SessionData(Instant creationTime, Instant lastAccessedTime, Map hash) {
3838
.setCreationTime(now)
3939
.setLastAccessedTime(now)
4040
.setNew(true);
41-
options.getSessionId().saveSessionId(ctx, sessionId);
41+
options.getSessionToken().saveToken(ctx, sessionId);
4242
return session;
4343
}
4444

4545
@Override public Session findSession(Context ctx) {
4646
SessionOptions options = sessionOptions(ctx);
47-
String sessionId = options.getSessionId().findSessionId(ctx);
47+
String sessionId = options.getSessionToken().findToken(ctx);
4848
if (sessionId == null) {
4949
return null;
5050
}
@@ -53,7 +53,7 @@ public SessionData(Instant creationTime, Instant lastAccessedTime, Map hash) {
5353
Session session = Session.create(ctx, sessionId, data.hash);
5454
session.setLastAccessedTime(data.lastAccessedTime);
5555
session.setCreationTime(data.creationTime);
56-
options.getSessionId().saveSessionId(ctx, sessionId);
56+
options.getSessionToken().saveToken(ctx, sessionId);
5757
return session;
5858
}
5959
return null;
@@ -63,8 +63,8 @@ public SessionData(Instant creationTime, Instant lastAccessedTime, Map hash) {
6363
String sessionId = ctx.session().getId();
6464
sessions.remove(sessionId);
6565
SessionOptions options = sessionOptions(ctx);
66-
SessionId store = options.getSessionId();
67-
store.deleteSessionId(ctx, sessionId);
66+
SessionToken store = options.getSessionToken();
67+
store.deleteToken(ctx, sessionId);
6868
}
6969

7070
@Override public void save(Context ctx) {

jooby/src/main/java/io/jooby/internal/MultipleSessionId.java

Lines changed: 0 additions & 49 deletions
This file was deleted.

0 commit comments

Comments
 (0)