refactor, some fixes

This commit is contained in:
Radek Davidek 2026-03-20 13:34:08 +01:00
parent 67af13530b
commit 6f8f28fc28
42 changed files with 119 additions and 95 deletions

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver; package cz.kamma.fabka.app;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver; package cz.kamma.fabka.app;
import java.io.IOException; import java.io.IOException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
@ -16,41 +16,41 @@ import java.util.stream.Collectors;
import com.sun.net.httpserver.HttpServer; import com.sun.net.httpserver.HttpServer;
import cz.kamma.fabka.httpserver.auth.AuthService; import cz.kamma.fabka.auth.AuthService;
import cz.kamma.fabka.httpserver.auth.AuthenticatedUser; import cz.kamma.fabka.auth.AuthenticatedUser;
import cz.kamma.fabka.httpserver.auth.DatabaseAuthService; import cz.kamma.fabka.auth.DatabaseAuthService;
import cz.kamma.fabka.httpserver.http.ClasspathStaticFileHandler; import cz.kamma.fabka.http.ClasspathStaticFileHandler;
import cz.kamma.fabka.httpserver.http.MultipartFormData; import cz.kamma.fabka.http.MultipartFormData;
import cz.kamma.fabka.httpserver.http.RequestContext; import cz.kamma.fabka.http.RequestContext;
import cz.kamma.fabka.httpserver.http.Responses; import cz.kamma.fabka.http.Responses;
import cz.kamma.fabka.httpserver.http.Router; import cz.kamma.fabka.http.Router;
import cz.kamma.fabka.httpserver.repository.AttachmentData; import cz.kamma.fabka.repository.model.AttachmentData;
import cz.kamma.fabka.httpserver.repository.ChatLine; import cz.kamma.fabka.repository.model.ChatLine;
import cz.kamma.fabka.httpserver.repository.ChatRepository; import cz.kamma.fabka.repository.ChatRepository;
import cz.kamma.fabka.httpserver.repository.ChatVoteStats; import cz.kamma.fabka.repository.model.ChatVoteStats;
import cz.kamma.fabka.httpserver.repository.ForumAttachment; import cz.kamma.fabka.repository.model.ForumAttachment;
import cz.kamma.fabka.httpserver.repository.ForumDetail; import cz.kamma.fabka.repository.model.ForumDetail;
import cz.kamma.fabka.httpserver.repository.ForumDisplayView; import cz.kamma.fabka.repository.model.ForumDisplayView;
import cz.kamma.fabka.httpserver.repository.ForumMessage; import cz.kamma.fabka.repository.model.ForumMessage;
import cz.kamma.fabka.httpserver.repository.ForumRepository; import cz.kamma.fabka.repository.ForumRepository;
import cz.kamma.fabka.httpserver.repository.ForumSummary; import cz.kamma.fabka.repository.model.ForumSummary;
import cz.kamma.fabka.httpserver.repository.MemberProfile; import cz.kamma.fabka.repository.model.MemberProfile;
import cz.kamma.fabka.httpserver.repository.MemberRepository; import cz.kamma.fabka.repository.MemberRepository;
import cz.kamma.fabka.httpserver.repository.MessageRenderSettings; import cz.kamma.fabka.repository.model.MessageRenderSettings;
import cz.kamma.fabka.httpserver.repository.MysqlClientRepository; import cz.kamma.fabka.repository.MysqlClientRepository;
import cz.kamma.fabka.httpserver.repository.PrivateMessageItem; import cz.kamma.fabka.repository.model.PrivateMessageItem;
import cz.kamma.fabka.httpserver.repository.PrivateMessageRepository; import cz.kamma.fabka.repository.PrivateMessageRepository;
import cz.kamma.fabka.httpserver.repository.PrivateMessageStats; import cz.kamma.fabka.repository.model.PrivateMessageStats;
import cz.kamma.fabka.httpserver.repository.PrivateThreadRoot; import cz.kamma.fabka.repository.model.PrivateThreadRoot;
import cz.kamma.fabka.httpserver.repository.PrivateThreadSummary; import cz.kamma.fabka.repository.model.PrivateThreadSummary;
import cz.kamma.fabka.httpserver.repository.QuotedTextItem; import cz.kamma.fabka.repository.model.QuotedTextItem;
import cz.kamma.fabka.httpserver.repository.SettingsRepository; import cz.kamma.fabka.repository.SettingsRepository;
import cz.kamma.fabka.httpserver.repository.UserIcon; import cz.kamma.fabka.repository.model.UserIcon;
import cz.kamma.fabka.httpserver.repository.UserIconRepository; import cz.kamma.fabka.repository.UserIconRepository;
import cz.kamma.fabka.httpserver.repository.VoteStats; import cz.kamma.fabka.repository.model.VoteStats;
import cz.kamma.fabka.httpserver.session.SessionData; import cz.kamma.fabka.session.SessionData;
import cz.kamma.fabka.httpserver.session.SessionManager; import cz.kamma.fabka.session.SessionManager;
import cz.kamma.fabka.httpserver.web.Pages; import cz.kamma.fabka.web.Pages;
public class HttpServerApplication { public class HttpServerApplication {

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.auth; package cz.kamma.fabka.auth;
public interface AuthService { public interface AuthService {
AuthenticatedUser authenticate(String username, String password); AuthenticatedUser authenticate(String username, String password);

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.auth; package cz.kamma.fabka.auth;
public class AuthenticatedUser { public class AuthenticatedUser {
private final long userId; private final long userId;

View File

@ -1,6 +1,6 @@
package cz.kamma.fabka.httpserver.auth; package cz.kamma.fabka.auth;
import cz.kamma.fabka.httpserver.crypto.Md5; import cz.kamma.fabka.crypto.Md5;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.auth; package cz.kamma.fabka.auth;
import java.util.Objects; import java.util.Objects;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.crypto; package cz.kamma.fabka.crypto;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.MessageDigest; import java.security.MessageDigest;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.http; package cz.kamma.fabka.http;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.http; package cz.kamma.fabka.http;
import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpExchange;

View File

@ -1,9 +1,9 @@
package cz.kamma.fabka.httpserver.http; package cz.kamma.fabka.http;
import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpExchange;
import cz.kamma.fabka.httpserver.session.SessionData; import cz.kamma.fabka.session.SessionData;
import cz.kamma.fabka.httpserver.session.SessionManager; import cz.kamma.fabka.session.SessionManager;
import java.io.IOException; import java.io.IOException;
import java.net.URLDecoder; import java.net.URLDecoder;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.http; package cz.kamma.fabka.http;
import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpExchange;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.http; package cz.kamma.fabka.http;
@FunctionalInterface @FunctionalInterface
public interface RouteHandler { public interface RouteHandler {

View File

@ -1,8 +1,8 @@
package cz.kamma.fabka.httpserver.http; package cz.kamma.fabka.http;
import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpHandler;
import cz.kamma.fabka.httpserver.session.SessionManager; import cz.kamma.fabka.session.SessionManager;
import java.io.IOException; import java.io.IOException;
import java.util.Map; import java.util.Map;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.http; package cz.kamma.fabka.http;
import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpHandler;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
@ -10,6 +10,9 @@ import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import cz.kamma.fabka.repository.model.ChatLine;
import cz.kamma.fabka.repository.model.ChatVoteStats;
public class ChatRepository { public class ChatRepository {
private static final DateTimeFormatter TIME_FORMAT = DateTimeFormatter.ofPattern("HH:mm:ss"); private static final DateTimeFormatter TIME_FORMAT = DateTimeFormatter.ofPattern("HH:mm:ss");
private static final ZoneId APP_ZONE = ZoneId.of("Europe/Prague"); private static final ZoneId APP_ZONE = ZoneId.of("Europe/Prague");

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
@ -17,6 +17,14 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import cz.kamma.fabka.repository.model.AttachmentData;
import cz.kamma.fabka.repository.model.ForumAttachment;
import cz.kamma.fabka.repository.model.ForumDetail;
import cz.kamma.fabka.repository.model.ForumMessage;
import cz.kamma.fabka.repository.model.ForumSummary;
import cz.kamma.fabka.repository.model.QuotedTextItem;
import cz.kamma.fabka.repository.model.VoteStats;
public class ForumRepository { public class ForumRepository {
private static final DateTimeFormatter DATETIME_FORMAT = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"); private static final DateTimeFormatter DATETIME_FORMAT = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
private static final ZoneId APP_ZONE = ZoneId.of("Europe/Prague"); private static final ZoneId APP_ZONE = ZoneId.of("Europe/Prague");

View File

@ -1,6 +1,6 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository;
import cz.kamma.fabka.httpserver.crypto.Md5; import cz.kamma.fabka.crypto.Md5;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
@ -10,6 +10,8 @@ import java.sql.Timestamp;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import cz.kamma.fabka.repository.model.MemberProfile;
public class MemberRepository { public class MemberRepository {
private static final DateTimeFormatter DATETIME_FORMAT = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"); private static final DateTimeFormatter DATETIME_FORMAT = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
private static final ZoneId APP_ZONE = ZoneId.of("Europe/Prague"); private static final ZoneId APP_ZONE = ZoneId.of("Europe/Prague");

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
@ -11,6 +11,11 @@ import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import cz.kamma.fabka.repository.model.PrivateMessageItem;
import cz.kamma.fabka.repository.model.PrivateMessageStats;
import cz.kamma.fabka.repository.model.PrivateThreadRoot;
import cz.kamma.fabka.repository.model.PrivateThreadSummary;
public class PrivateMessageRepository { public class PrivateMessageRepository {
private static final DateTimeFormatter DATE_TIME = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"); private static final DateTimeFormatter DATE_TIME = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
private static final ZoneId APP_ZONE = ZoneId.of("Europe/Prague"); private static final ZoneId APP_ZONE = ZoneId.of("Europe/Prague");

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
@ -7,6 +7,8 @@ import java.sql.ResultSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import cz.kamma.fabka.repository.model.MessageRenderSettings;
public class SettingsRepository { public class SettingsRepository {
private static final String SETTING_SQL = "SELECT value FROM settings WHERE name=? LIMIT 1"; private static final String SETTING_SQL = "SELECT value FROM settings WHERE name=? LIMIT 1";
private static final String USER_SETTINGS_SQL = "SELECT name, value FROM settings WHERE userid=?"; private static final String USER_SETTINGS_SQL = "SELECT name, value FROM settings WHERE userid=?";

View File

@ -1,10 +1,12 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import cz.kamma.fabka.repository.model.UserIcon;
public class UserIconRepository { public class UserIconRepository {
private static final String USER_ICON_SQL = "SELECT data, mimetype FROM user_icon WHERE userid=? ORDER BY id DESC LIMIT 1"; private static final String USER_ICON_SQL = "SELECT data, mimetype FROM user_icon WHERE userid=? ORDER BY id DESC LIMIT 1";
private static final String INSERT_USER_ICON_SQL = "INSERT INTO user_icon (userid, data, mimetype) VALUES (?,?,?)"; private static final String INSERT_USER_ICON_SQL = "INSERT INTO user_icon (userid, data, mimetype) VALUES (?,?,?)";

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class AttachmentData { public class AttachmentData {
private final String name; private final String name;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class ChatLine { public class ChatLine {
private final long id; private final long id;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class ChatVoteStats { public class ChatVoteStats {
private final String thumbUpUsers; private final String thumbUpUsers;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class ForumAttachment { public class ForumAttachment {
private final long id; private final long id;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class ForumDetail { public class ForumDetail {
private final long id; private final long id;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class ForumSummary { public class ForumSummary {
private final long id; private final long id;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class MemberProfile { public class MemberProfile {
private final long id; private final long id;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class MessageRenderSettings { public class MessageRenderSettings {
private final String youtubeSnippet; private final String youtubeSnippet;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class PrivateMessageItem { public class PrivateMessageItem {
private final long id; private final long id;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class PrivateMessageStats { public class PrivateMessageStats {
private final int unread; private final int unread;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class PrivateThreadRoot { public class PrivateThreadRoot {
private final long rootId; private final long rootId;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class PrivateThreadSummary { public class PrivateThreadSummary {
private final long id; private final long id;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class QuotedTextItem { public class QuotedTextItem {
private final String author; private final String author;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class UserIcon { public class UserIcon {
private final byte[] data; private final byte[] data;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository; package cz.kamma.fabka.repository.model;
public class VoteStats { public class VoteStats {
private final int yes; private final int yes;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.session; package cz.kamma.fabka.session;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.session; package cz.kamma.fabka.session;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.web; package cz.kamma.fabka.web;
import java.util.StringTokenizer; import java.util.StringTokenizer;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.web; package cz.kamma.fabka.web;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -8,19 +8,21 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import cz.kamma.fabka.httpserver.repository.ForumAttachment; import cz.kamma.fabka.repository.MysqlClientRepository;
import cz.kamma.fabka.httpserver.repository.ForumDetail; import cz.kamma.fabka.repository.model.AttachmentData;
import cz.kamma.fabka.httpserver.repository.ForumDisplayView; import cz.kamma.fabka.repository.model.ForumAttachment;
import cz.kamma.fabka.httpserver.repository.ForumMessage; import cz.kamma.fabka.repository.model.ForumDetail;
import cz.kamma.fabka.httpserver.repository.ForumSummary; import cz.kamma.fabka.repository.model.ForumDisplayView;
import cz.kamma.fabka.httpserver.repository.MemberProfile; import cz.kamma.fabka.repository.model.ForumMessage;
import cz.kamma.fabka.httpserver.repository.MessageRenderSettings; import cz.kamma.fabka.repository.model.ForumSummary;
import cz.kamma.fabka.httpserver.repository.MysqlClientRepository; import cz.kamma.fabka.repository.model.MemberProfile;
import cz.kamma.fabka.httpserver.repository.PrivateMessageItem; import cz.kamma.fabka.repository.model.MessageRenderSettings;
import cz.kamma.fabka.httpserver.repository.PrivateMessageStats; import cz.kamma.fabka.repository.model.PrivateMessageItem;
import cz.kamma.fabka.httpserver.repository.PrivateThreadRoot; import cz.kamma.fabka.repository.model.PrivateMessageStats;
import cz.kamma.fabka.httpserver.repository.PrivateThreadSummary; import cz.kamma.fabka.repository.model.PrivateThreadRoot;
import cz.kamma.fabka.httpserver.repository.QuotedTextItem; import cz.kamma.fabka.repository.model.PrivateThreadSummary;
import cz.kamma.fabka.repository.model.QuotedTextItem;
import cz.kamma.fabka.repository.model.UserIcon;
public final class Pages { public final class Pages {
private static final String LOGIN_TEMPLATE = readTemplate("webapp/login.html"); private static final String LOGIN_TEMPLATE = readTemplate("webapp/login.html");