mirror of
https://github.com/ysoftdevs/oauth-playground-server.git
synced 2026-01-19 01:57:23 +01:00
41 lines
1.6 KiB
Java
41 lines
1.6 KiB
Java
package com.ysoft.geecon.repo;
|
|
|
|
import com.ysoft.geecon.dto.*;
|
|
import jakarta.enterprise.context.ApplicationScoped;
|
|
|
|
import java.util.*;
|
|
|
|
@ApplicationScoped
|
|
public class SessionsRepo {
|
|
private final Map<String, AuthorizationSession> authorizationSessions = new HashMap<>();
|
|
private final Map<String, String> sessionsByAuthorizationCode = new HashMap<>();
|
|
|
|
public Optional<AuthorizationSession> getSession(String sessionId) {
|
|
return Optional.ofNullable(authorizationSessions.get(sessionId));
|
|
}
|
|
|
|
public String newAuthorizationSession(AuthParams params, OAuthClient client) {
|
|
var id = SecureRandomStrings.alphanumeric(10);
|
|
authorizationSessions.put(id, new AuthorizationSession(params, client));
|
|
return id;
|
|
}
|
|
|
|
public String finishSession(String sessionId, List<String> acceptedScopes) {
|
|
Objects.requireNonNull(authorizationSessions.computeIfPresent(sessionId, (id, s) -> s.withScopes(acceptedScopes)));
|
|
var authCode = SecureRandomStrings.alphanumeric(10);
|
|
sessionsByAuthorizationCode.put(authCode, sessionId);
|
|
return authCode;
|
|
}
|
|
|
|
|
|
public AuthorizationSession assignUser(String sessionId, User user) {
|
|
return Objects.requireNonNull(authorizationSessions.computeIfPresent(sessionId, (id, session) -> session.withUser(user)));
|
|
}
|
|
|
|
public Optional<AuthorizationSession> redeemAuthorizationCode(String authorizationCode) {
|
|
var sessionId = Optional.ofNullable(sessionsByAuthorizationCode.get(authorizationCode));
|
|
sessionId.ifPresent(_id -> sessionsByAuthorizationCode.remove(authorizationCode));
|
|
return sessionId.map(authorizationSessions::get);
|
|
}
|
|
}
|