first working version

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2024-08-03 00:47:53 +02:00
parent 928e6d23cb
commit 93f6c2d603
15 changed files with 202 additions and 34 deletions

View File

@@ -3,12 +3,72 @@ package de.srsoftware.oidc.api;
import static de.srsoftware.oidc.api.Constants.*;
import java.util.Map;
import java.util.Set;
import java.util.*;
public record Client(String id, String name, String secret, Set<String> redirectUris) {
public final class Client {
private static System.Logger LOG = System.getLogger(Client.class.getSimpleName());
public Map<String, Object> map() {
return Map.of(CLIENT_ID, id, NAME, name, SECRET, secret, REDIRECT_URIS, redirectUris);
private final String id, name, secret;
private String nonce = null;
private final Set<String> redirectUris;
public Client(String id, String name, String secret, Set<String> redirectUris) {
this.id = id;
this.name = name;
this.secret = secret;
this.redirectUris = redirectUris;
}
public String id() {
return id;
}
public Map<String, Object> map() {
return Map.of(CLIENT_ID, id, NAME, name, SECRET, secret, REDIRECT_URIS, redirectUris);
}
public String name() {
return name;
}
public Client nonce(String newVal) {
nonce = newVal;
;
return this;
}
public Optional nonce() {
return Optional.ofNullable(nonce);
}
public String secret() {
return secret;
}
public Set<String> redirectUris() {
return redirectUris;
}
@Override
public boolean equals(Object obj) {
if (obj == this) return true;
if (obj == null || obj.getClass() != this.getClass()) return false;
var that = (Client)obj;
return Objects.equals(this.id, that.id) && Objects.equals(this.name, that.name) && Objects.equals(this.secret, that.secret) && Objects.equals(this.redirectUris, that.redirectUris);
}
@Override
public int hashCode() {
return Objects.hash(id, name, secret, redirectUris);
}
@Override
public String toString() {
return "Client["
+ "id=" + id + ", "
+ "name=" + name + ", "
+ "secret=" + secret + ", "
+ "redirectUris=" + redirectUris + ']';
}
}

View File

@@ -5,6 +5,7 @@ public class Constants {
public static final String ACCESS_TOKEN = "access_token";
public static final String APP_NAME = "LightOIDC";
public static final String AUTH_CODE = "authorization_code";
public static final String AUTHORIZATION = "Authorization";
public static final String BEARER = "Bearer";
public static final String CAUSE = "cause";
public static final String CLIENT_ID = "client_id";
@@ -17,6 +18,7 @@ public class Constants {
public static final String GRANT_TYPE = "grant_type";
public static final String ID_TOKEN = "id_token";
public static final String NAME = "name";
public static final String NONCE = "nonce";
public static final String OPENID = "openid";
public static final String REDIRECT_URI = "redirect_uri";
public static final String REDIRECT_URIS = "redirect_uris";

View File

@@ -1,6 +1,7 @@
/* © SRSoftware 2024 */
package de.srsoftware.oidc.api;
import static de.srsoftware.oidc.api.Constants.AUTHORIZATION;
import static java.lang.System.Logger.Level.*;
import static java.net.HttpURLConnection.*;
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -89,7 +90,11 @@ public abstract class PathHandler implements HttpHandler {
}
public static Optional<String> getAuthToken(HttpExchange ex) {
return getHeader(ex, "Authorization");
return getHeader(ex, AUTHORIZATION);
}
public static Optional<String> getBearer(HttpExchange ex) {
return getAuthToken(ex).filter(token -> token.startsWith("Bearer ")).map(token -> token.substring(7));
}
public static Optional<String> getHeader(HttpExchange ex, String key) {

View File

@@ -5,12 +5,25 @@ import java.util.List;
import java.util.Optional;
public interface UserService {
public UserService delete(User user);
public boolean passwordMatches(String password, String hashedPassword);
/**
* create a new access token for a given user
* @param user
* @return
*/
public String accessToken(User user);
public UserService delete(User user);
/**
* return the user identified by its access token
* @param accessToken
* @return
*/
public Optional<User> forToken(String accessToken);
public UserService init(User defaultUser);
public List<User> list();
public Optional<User> load(String id);
public Optional<User> load(String username, String password);
public boolean passwordMatches(String password, String hashedPassword);
public <T extends UserService> T save(User user);
public <T extends UserService> T updatePassword(User user, String plaintextPassword);
}