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.InputStream;

View File

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

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.auth;
package cz.kamma.fabka.auth;
public interface AuthService {
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 {
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.DriverManager;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.auth;
package cz.kamma.fabka.auth;
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.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.InputStream;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.http;
package cz.kamma.fabka.http;
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.HttpExchange;
import cz.kamma.fabka.httpserver.session.SessionData;
import cz.kamma.fabka.httpserver.session.SessionManager;
import cz.kamma.fabka.session.SessionData;
import cz.kamma.fabka.session.SessionManager;
import java.io.IOException;
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;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.http;
package cz.kamma.fabka.http;
@FunctionalInterface
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.HttpHandler;
import cz.kamma.fabka.httpserver.session.SessionManager;
import cz.kamma.fabka.session.SessionManager;
import java.io.IOException;
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.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.DriverManager;
@ -10,6 +10,9 @@ import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import cz.kamma.fabka.repository.model.ChatLine;
import cz.kamma.fabka.repository.model.ChatVoteStats;
public class ChatRepository {
private static final DateTimeFormatter TIME_FORMAT = DateTimeFormatter.ofPattern("HH:mm:ss");
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 java.awt.image.BufferedImage;
@ -17,6 +17,14 @@ import java.util.LinkedHashMap;
import java.util.List;
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 {
private static final DateTimeFormatter DATETIME_FORMAT = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
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.DriverManager;
@ -10,6 +10,8 @@ import java.sql.Timestamp;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import cz.kamma.fabka.repository.model.MemberProfile;
public class MemberRepository {
private static final DateTimeFormatter DATETIME_FORMAT = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
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.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.DriverManager;
@ -11,6 +11,11 @@ import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
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 {
private static final DateTimeFormatter DATE_TIME = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
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.DriverManager;
@ -7,6 +7,8 @@ import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map;
import cz.kamma.fabka.repository.model.MessageRenderSettings;
public class SettingsRepository {
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=?";

View File

@ -1,10 +1,12 @@
package cz.kamma.fabka.httpserver.repository;
package cz.kamma.fabka.repository;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import cz.kamma.fabka.repository.model.UserIcon;
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 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 {
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 {
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 {
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 {
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 {
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;

View File

@ -1,4 +1,4 @@
package cz.kamma.fabka.httpserver.repository;
package cz.kamma.fabka.repository.model;
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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.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.util.ArrayList;

View File

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