started to implement sessions

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2024-07-19 00:09:38 +02:00
parent c5352ac73b
commit 59075db1ad
8 changed files with 167 additions and 52 deletions

View File

@@ -3,6 +3,7 @@ package de.srsoftware.oidc.api;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import java.util.List;
import java.util.Map;
public abstract class Cookie implements Map.Entry<String, String> {
@@ -33,6 +34,10 @@ public abstract class Cookie implements Map.Entry<String, String> {
return value;
}
protected static List<String> of(HttpExchange ex) {
return ex.getRequestHeaders().get("Cookie");
}
@Override
public String setValue(String s) {
var oldVal = value;

View File

@@ -0,0 +1,7 @@
/* © SRSoftware 2024 */
package de.srsoftware.oidc.api;
import java.time.Instant;
public record Session(User user, Instant expiration, String id) {
}

View File

@@ -0,0 +1,13 @@
/* © SRSoftware 2024 */
package de.srsoftware.oidc.api;
import java.time.Duration;
import java.util.Optional;
public interface SessionService {
Session createSession(User user);
SessionService dropSession(String sessionId);
Session extend(String sessionId);
Optional<Session> retrieve(String sessionId);
SessionService setDuration(Duration duration);
}

View File

@@ -2,8 +2,22 @@
package de.srsoftware.oidc.api;
import com.sun.net.httpserver.HttpExchange;
import java.util.Optional;
public class SessionToken extends Cookie {
public SessionToken(String value) {
super("sessionToken", value);
private final String sessionId;
public SessionToken(String sessionId) {
super("sessionToken", sessionId);
this.sessionId = sessionId;
}
public static Optional<SessionToken> from(HttpExchange ex) {
return Cookie.of(ex).stream().filter(cookie -> cookie.startsWith("sessionToken=")).map(cookie -> cookie.split("=", 2)[1]).map(id -> new SessionToken(id)).findAny();
}
public String sessionId() {
return sessionId;
}
}

View File

@@ -5,9 +5,10 @@ import java.util.List;
import java.util.Optional;
public interface UserService {
public UserService delete(User user);
public UserService init(User defaultUser);
public List<User> list();
public Optional<User> load(String username, String password);
public UserService save(User user);
public UserService delete(User user);
public UserService init(User defaultUser);
public List<User> list();
public Optional<User> load(String id);
public Optional<User> load(String username, String password);
public <T extends UserService> T save(User user);
}