started to implement sessions
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
/* © SRSoftware 2024 */
|
||||
package de.srsoftware.oidc.api;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
public record Session(User user, Instant expiration, String id) {
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user