implemented user login.

next: find a solution for routing
This commit is contained in:
2025-06-30 21:11:42 +02:00
parent 71cf6ec96d
commit b918d453cb
33 changed files with 1232 additions and 32 deletions

20
core/build.gradle.kts Normal file
View File

@@ -0,0 +1,20 @@
plugins {
id("java")
}
group = "de.srsoftware"
version = "unspecified"
repositories {
mavenCentral()
}
dependencies {
testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
implementation("org.xerial:sqlite-jdbc:3.49.0.0")
}
tasks.test {
useJUnitPlatform()
}

View File

@@ -0,0 +1,12 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.core;
import java.util.HashMap;
public class AddableMap extends HashMap<String,Object> {
public AddableMap plus(Object...param){
if (param.length % 2 == 1) throw new RuntimeException("Expectirg number of parameters to be even");
for (int i=0; i<param.length; i+=2) put(param[i].toString(),param[i+1]);
return this;
}
}

View File

@@ -0,0 +1,28 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.core;
import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import org.sqlite.SQLiteDataSource;
public class ConnectionProvider extends HashMap<File, Connection> {
public Connection get(Object o) {
if (o instanceof String filename) o = new File(filename);
if (o instanceof File dbFile) try {
var conn = super.get(dbFile);
if (conn == null) put(dbFile, conn = open(dbFile));
return conn;
} catch (SQLException sqle) {
throw new RuntimeException(sqle);
}
return null;
}
private Connection open(File dbFile) throws SQLException {
SQLiteDataSource dataSource = new SQLiteDataSource();
dataSource.setUrl("jdbc:sqlite:%s".formatted(dbFile));
return dataSource.getConnection();
}
}

View File

@@ -0,0 +1,60 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.core;
import static java.nio.charset.StandardCharsets.UTF_8;
public class Constants {
public static final String ADDRESS = "address";
public static final String ATTACHMENTS = "attachments";
public static final String BODY = "body";
public static final String DATA = "data";
public static final String DATE = "date";
public static final String DEFAULT_LANGUAGE = "en";
public static final String DEFAULT_THEME = "winter";
public static final String DESCRIPTION = "description";
public static final String DOMAIN = "domain";
public static final String EMAIL = "email";
public static final String ERROR_FAILED_CREATE_TABLE = "Failed to create \"{0}\" table!";
public static final String ERROR_INVALID_FIELD = "Expected {0} to be {1}!";
public static final String ERROR_MISSING_FIELD = "Json is missing {0} field!";
public static final String ERROR_READ_TABLE = "Failed to read {0} from {1} table";
public static final String EXPIRATION = "expiration";
public static final String ID = "id";
public static final String KEY = "key";
public static final String LANGUAGE = "language";
public static final String LOGIN = "login";
public static final String MESSAGES = "messages";
public static final String NAME = "name";
public static final String MIME = "mime";
public static final String NUMBER = "number";
public static final String OPTIONAL = "optional";
public static final String PASSWORD = "password";
public static final String RECEIVERS = "receivers";
public static final String REDIRECT = "redirect";
public static final String SENDER = "sender";
public static final String SETTINGS = "settings";
public static final String STATE = "state";
public static final String STATUS_CODE = "code";
public static final String STRING = "string";
public static final String SUBJECT = "subject";
public static final String TABLE_SETTINGS = "settings";
public static final String TEMPLATE = "template";
public static final String TEXT = "text";
public static final String THEME = "theme";
public static final String TITLE = "title";
public static final String TOKEN = "token";
public static final String UMBRELLA = "Umbrella";
public static final String URL = "url";
public static final String USER = "user";
public static final String USER_ID = "user_id";
public static final String USER_LIST = "user_list";
public static final String UTF8 = UTF_8.displayName();
public static final String VALUE = "value";
}

View File

@@ -0,0 +1,19 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.core;
public class Paths {
private Paths(){};
public static final String ADD = "add";
public static final String CSS = "css";
public static final String JSON = "json";
public static final String LEGACY = "legacy";
public static final String LIST = "list";
public static final String LOGOUT = "logout";
public static final String SEARCH = "search";
public static final String SERVICE = "service";
public static final String SETTINGS = "settings";
public static final String SUBMIT = "submit";
public static final String TOKEN = "token";
public static final String VIEW = "view";
}

View File

@@ -0,0 +1,14 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.core;
public class ResponseCode {
public static final int OK = 200;
public static final int REDIRECT = 302;
public static final int BAD_REQUEST = 400;
public static final int UNAUTHORIZED = 401;
public static final int FORBIDDEN = 403;
public static final int NOT_FOUND = 404;
public static final int UNPROCESSABLE = 422;
public static final int SERVER_ERROR = 500;
public static final int NOT_IMPLEMENTED = 501;
}

View File

@@ -0,0 +1,27 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.core;
import static java.text.MessageFormat.format;
public class UmbrellaException extends Exception{
private final int statusCode;
public UmbrellaException(int statusCode, String message){
super(message);
this.statusCode = statusCode;
}
public UmbrellaException(int statusCode, String message, Object ... fills){
this(statusCode,format(message,fills));
}
public UmbrellaException causedBy(Exception e) {
initCause(e);
return this;
}
public int statusCode(){
return statusCode;
}
}