first working version
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -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 + ']';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user