major refactoring: working towards more interface-implementation splitting
This commit is contained in:
@@ -12,6 +12,7 @@ public class Constants {
|
||||
public static final String CLIENT_ID = "client_id";
|
||||
public static final String CLIENT_SECRET = "client_secret";
|
||||
public static final String CODE = "code";
|
||||
public static final String CONFIG_DATABASE = "umbrella.modules.user.database";
|
||||
|
||||
|
||||
public static final String DB_VERSION = "user_db_version";
|
||||
|
||||
@@ -4,6 +4,7 @@ package de.srsoftware.umbrella.user;
|
||||
import static de.srsoftware.tools.MimeType.MIME_FORM_URL;
|
||||
import static de.srsoftware.tools.Optionals.*;
|
||||
import static de.srsoftware.tools.Strings.uuid;
|
||||
import static de.srsoftware.umbrella.core.ConnectionProvider.connect;
|
||||
import static de.srsoftware.umbrella.core.Constants.*;
|
||||
import static de.srsoftware.umbrella.core.Paths.LIST;
|
||||
import static de.srsoftware.umbrella.core.Paths.LOGOUT;
|
||||
@@ -24,13 +25,14 @@ import static java.time.temporal.ChronoUnit.DAYS;
|
||||
import static java.util.Optional.empty;
|
||||
|
||||
import com.sun.net.httpserver.HttpExchange;
|
||||
import de.srsoftware.configuration.Configuration;
|
||||
import de.srsoftware.tools.Path;
|
||||
import de.srsoftware.tools.SessionToken;
|
||||
import de.srsoftware.umbrella.core.BaseHandler;
|
||||
import de.srsoftware.umbrella.core.Token;
|
||||
import de.srsoftware.umbrella.core.UmbrellaException;
|
||||
import de.srsoftware.umbrella.core.api.UserHelper;
|
||||
import de.srsoftware.umbrella.core.api.UserService;
|
||||
import de.srsoftware.umbrella.core.model.EmailAddress;
|
||||
import de.srsoftware.umbrella.core.model.Token;
|
||||
import de.srsoftware.umbrella.core.model.UmbrellaUser;
|
||||
import de.srsoftware.umbrella.message.MessageSystem;
|
||||
import de.srsoftware.umbrella.message.model.Envelope;
|
||||
@@ -38,6 +40,9 @@ import de.srsoftware.umbrella.message.model.Message;
|
||||
import de.srsoftware.umbrella.user.api.LoginServiceDb;
|
||||
import de.srsoftware.umbrella.user.api.UserDb;
|
||||
import de.srsoftware.umbrella.user.model.*;
|
||||
import de.srsoftware.umbrella.user.model.DbUser;
|
||||
import de.srsoftware.umbrella.user.model.Password;
|
||||
import de.srsoftware.umbrella.user.sqlite.SqliteDB;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.*;
|
||||
@@ -53,7 +58,7 @@ import org.jose4j.keys.resolvers.HttpsJwksVerificationKeyResolver;
|
||||
import org.json.JSONObject;
|
||||
|
||||
|
||||
public class UserModule extends BaseHandler implements UserHelper {
|
||||
public class UserModule extends BaseHandler implements UserService {
|
||||
|
||||
|
||||
private record State(LoginService loginService, JSONObject config){
|
||||
@@ -78,13 +83,17 @@ public class UserModule extends BaseHandler implements UserHelper {
|
||||
}
|
||||
}
|
||||
|
||||
public UserModule(UserDb userDb, LoginServiceDb loginDb, MessageSystem messageSystem){
|
||||
logins = loginDb;
|
||||
public UserModule(Configuration config, MessageSystem messageSystem) throws UmbrellaException {
|
||||
var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> new UmbrellaException(ERROR_MISSING_CONFIG,CONFIG_DATABASE));
|
||||
// may be splitted in separate db files later
|
||||
logins = new SqliteDB(connect(dbFile));
|
||||
messages = messageSystem;
|
||||
users = userDb;
|
||||
users = new SqliteDB(connect(dbFile));
|
||||
}
|
||||
|
||||
|
||||
public UserDb userDb(){
|
||||
return users;
|
||||
}
|
||||
|
||||
private boolean deleteOIDC(HttpExchange ex, UmbrellaUser user, Path path) throws IOException {
|
||||
var head = path.pop();
|
||||
@@ -126,6 +135,11 @@ public class UserModule extends BaseHandler implements UserHelper {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public UmbrellaUser loadUser(long userId) throws UmbrellaException {
|
||||
return users.load(userId);
|
||||
}
|
||||
|
||||
public Optional<UmbrellaUser> loadUser(Optional<Token> sessionToken) throws UmbrellaException {
|
||||
if (sessionToken.isEmpty()) return empty();
|
||||
var session = users.load(sessionToken.get());
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
/* © SRSoftware 2025 */
|
||||
package de.srsoftware.umbrella.user.api;
|
||||
|
||||
import de.srsoftware.umbrella.core.Token;
|
||||
import de.srsoftware.umbrella.core.UmbrellaException;
|
||||
import de.srsoftware.umbrella.core.model.EmailAddress;
|
||||
import de.srsoftware.umbrella.core.model.Session;
|
||||
import de.srsoftware.umbrella.core.model.Token;
|
||||
import de.srsoftware.umbrella.core.model.UmbrellaUser;
|
||||
import de.srsoftware.umbrella.user.model.DbUser;
|
||||
import de.srsoftware.umbrella.user.model.Password;
|
||||
import de.srsoftware.umbrella.user.model.Session;
|
||||
import java.util.List;
|
||||
|
||||
public interface UserDb {
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
/* © SRSoftware 2025 */
|
||||
package de.srsoftware.umbrella.user.model;
|
||||
|
||||
import de.srsoftware.tools.SessionToken;
|
||||
import de.srsoftware.umbrella.core.Token;
|
||||
import de.srsoftware.umbrella.core.model.UmbrellaUser;
|
||||
import java.time.Instant;
|
||||
|
||||
/* © SRSoftware 2025 */
|
||||
public record Session(UmbrellaUser user, Token token, Instant expiration) {
|
||||
public Session extended(Instant newExpiration) {
|
||||
return new Session(user,token,newExpiration);
|
||||
}
|
||||
|
||||
public SessionToken cookie() {
|
||||
return new SessionToken(token.toString(),"/",expiration,true);
|
||||
}
|
||||
}
|
||||
@@ -12,15 +12,17 @@ import static java.text.MessageFormat.format;
|
||||
|
||||
import de.srsoftware.tools.PasswordHasher;
|
||||
import de.srsoftware.tools.jdbc.Query;
|
||||
import de.srsoftware.umbrella.core.Token;
|
||||
import de.srsoftware.umbrella.core.UmbrellaException;
|
||||
import de.srsoftware.umbrella.core.model.EmailAddress;
|
||||
import de.srsoftware.umbrella.core.model.Session;
|
||||
import de.srsoftware.umbrella.core.model.Token;
|
||||
import de.srsoftware.umbrella.core.model.UmbrellaUser;
|
||||
import de.srsoftware.umbrella.user.BadHasher;
|
||||
import de.srsoftware.umbrella.user.api.LoginServiceDb;
|
||||
import de.srsoftware.umbrella.user.api.UserDb;
|
||||
import de.srsoftware.umbrella.user.model.*;
|
||||
import de.srsoftware.umbrella.user.model.Session;
|
||||
import de.srsoftware.umbrella.user.model.DbUser;
|
||||
import de.srsoftware.umbrella.user.model.Password;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
|
||||
Reference in New Issue
Block a user