SHA256
23 01 25
Сделал авторификацию новую через sessionKey (Но пока тесты сессии падают)
This commit is contained in:
@@ -18,9 +18,9 @@ import java.sql.Statement;
|
||||
* - создаём ТОЛЬКО таблицы/индексы
|
||||
* - в конце вызываем DatabaseTriggersInstaller.createAllTriggers(st)
|
||||
*
|
||||
* Зачем так:
|
||||
* - триггеры часто ломают совместимость с внешними SQLite-просмотрщиками/сборками
|
||||
* - проще поддерживать/мигрировать
|
||||
* v2 (sessions):
|
||||
* - active_sessions.session_pwd удалён
|
||||
* - active_sessions.session_key хранит публичный ключ сессии (sessionPubKeyB64)
|
||||
*/
|
||||
public final class DatabaseInitializer {
|
||||
|
||||
@@ -28,25 +28,16 @@ public final class DatabaseInitializer {
|
||||
|
||||
/* ===================== TEXT (msg_type=1) ===================== */
|
||||
|
||||
/** Новое сообщение (начало ветки). */
|
||||
public static final short TEXT_NEW = 1;
|
||||
|
||||
/** Ответ на сообщение (reply). */
|
||||
public static final short TEXT_REPLY = 2;
|
||||
|
||||
/** Репост (repost). */
|
||||
public static final short TEXT_REPOST = 3;
|
||||
|
||||
/** Редактирование (edit). ВАЖНО: серверное значение = 10. */
|
||||
public static final short TEXT_EDIT = 10;
|
||||
|
||||
/* ===================== REACTION (msg_type=2) ===================== */
|
||||
|
||||
/** Лайк (LIKE). */
|
||||
public static final short REACTION_LIKE = 1;
|
||||
|
||||
/* ===================== CONNECTION (msg_type=3) ===================== */
|
||||
// FRIEND=10/11, CONTACT=20/21, FOLLOW=30/31
|
||||
public static final short CONNECTION_FRIEND = 10;
|
||||
public static final short CONNECTION_UNFRIEND = 11;
|
||||
|
||||
@@ -123,12 +114,12 @@ public final class DatabaseInitializer {
|
||||
ON solana_users (login);
|
||||
""");
|
||||
|
||||
// 2. active_sessions
|
||||
// 2. active_sessions (v2)
|
||||
st.executeUpdate("""
|
||||
CREATE TABLE IF NOT EXISTS active_sessions (
|
||||
session_id TEXT NOT NULL PRIMARY KEY,
|
||||
login TEXT NOT NULL,
|
||||
session_pwd TEXT NOT NULL,
|
||||
session_key TEXT NOT NULL,
|
||||
storage_pwd TEXT NOT NULL,
|
||||
session_created_at_ms INTEGER NOT NULL,
|
||||
last_authirificated_at_ms INTEGER NOT NULL,
|
||||
@@ -325,7 +316,6 @@ public final class DatabaseInitializer {
|
||||
ON message_stats (to_login);
|
||||
""");
|
||||
|
||||
// ВАЖНО: триггеры ставим отдельно
|
||||
DatabaseTriggersInstaller.createAllTriggers(st);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,13 +32,12 @@ public final class ActiveSessionsDAO {
|
||||
|
||||
// -------------------- INSERT --------------------
|
||||
|
||||
/** Вставка с внешним соединением. Соединение НЕ закрывает. */
|
||||
public void insert(Connection c, ActiveSessionEntry session) throws SQLException {
|
||||
String sql = """
|
||||
INSERT INTO active_sessions (
|
||||
session_id,
|
||||
login,
|
||||
session_pwd,
|
||||
session_key,
|
||||
storage_pwd,
|
||||
session_created_at_ms,
|
||||
last_authirificated_at_ms,
|
||||
@@ -55,7 +54,7 @@ public final class ActiveSessionsDAO {
|
||||
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
||||
ps.setString(1, session.getSessionId());
|
||||
ps.setString(2, session.getLogin());
|
||||
ps.setString(3, session.getSessionPwd());
|
||||
ps.setString(3, session.getSessionKey());
|
||||
ps.setString(4, session.getStoragePwd());
|
||||
ps.setLong(5, session.getSessionCreatedAtMs());
|
||||
ps.setLong(6, session.getLastAuthirificatedAtMs());
|
||||
@@ -70,7 +69,6 @@ public final class ActiveSessionsDAO {
|
||||
}
|
||||
}
|
||||
|
||||
/** Вставка без внешнего соединения. Сам открывает/закрывает. */
|
||||
public void insert(ActiveSessionEntry session) throws SQLException {
|
||||
try (Connection c = db.getConnection()) {
|
||||
insert(c, session);
|
||||
@@ -79,13 +77,12 @@ public final class ActiveSessionsDAO {
|
||||
|
||||
// -------------------- SELECT --------------------
|
||||
|
||||
/** Получить по sessionId с внешним соединением. Соединение НЕ закрывает. */
|
||||
public ActiveSessionEntry getBySessionId(Connection c, String sessionId) throws SQLException {
|
||||
String sql = """
|
||||
SELECT
|
||||
session_id,
|
||||
login,
|
||||
session_pwd,
|
||||
session_key,
|
||||
storage_pwd,
|
||||
session_created_at_ms,
|
||||
last_authirificated_at_ms,
|
||||
@@ -109,20 +106,18 @@ public final class ActiveSessionsDAO {
|
||||
}
|
||||
}
|
||||
|
||||
/** Получить по sessionId без внешнего соединения. Сам открывает/закрывает. */
|
||||
public ActiveSessionEntry getBySessionId(String sessionId) throws SQLException {
|
||||
try (Connection c = db.getConnection()) {
|
||||
return getBySessionId(c, sessionId);
|
||||
}
|
||||
}
|
||||
|
||||
/** Получить список по login с внешним соединением. Соединение НЕ закрывает. */
|
||||
public List<ActiveSessionEntry> getByLogin(Connection c, String login) throws SQLException {
|
||||
String sql = """
|
||||
SELECT
|
||||
session_id,
|
||||
login,
|
||||
session_pwd,
|
||||
session_key,
|
||||
storage_pwd,
|
||||
session_created_at_ms,
|
||||
last_authirificated_at_ms,
|
||||
@@ -149,7 +144,6 @@ public final class ActiveSessionsDAO {
|
||||
return result;
|
||||
}
|
||||
|
||||
/** Получить список по login без внешнего соединения. Сам открывает/закрывает. */
|
||||
public List<ActiveSessionEntry> getByLogin(String login) throws SQLException {
|
||||
try (Connection c = db.getConnection()) {
|
||||
return getByLogin(c, login);
|
||||
@@ -158,7 +152,6 @@ public final class ActiveSessionsDAO {
|
||||
|
||||
// -------------------- UPDATE --------------------
|
||||
|
||||
/** Обновить lastAuthirificatedAtMs с внешним соединением. Соединение НЕ закрывает. */
|
||||
public void updateLastAuthirificatedAtMs(Connection c, String sessionId, long lastAuthMs) throws SQLException {
|
||||
String sql = """
|
||||
UPDATE active_sessions
|
||||
@@ -173,14 +166,12 @@ public final class ActiveSessionsDAO {
|
||||
}
|
||||
}
|
||||
|
||||
/** Обновить lastAuthirificatedAtMs без внешнего соединения. Сам открывает/закрывает. */
|
||||
public void updateLastAuthirificatedAtMs(String sessionId, long lastAuthMs) throws SQLException {
|
||||
try (Connection c = db.getConnection()) {
|
||||
updateLastAuthirificatedAtMs(c, sessionId, lastAuthMs);
|
||||
}
|
||||
}
|
||||
|
||||
/** Обновить данные refresh с внешним соединением. Соединение НЕ закрывает. */
|
||||
public void updateOnRefresh(
|
||||
Connection c,
|
||||
String sessionId,
|
||||
@@ -213,7 +204,6 @@ public final class ActiveSessionsDAO {
|
||||
}
|
||||
}
|
||||
|
||||
/** Обновить данные refresh без внешнего соединения. Сам открывает/закрывает. */
|
||||
public void updateOnRefresh(
|
||||
String sessionId,
|
||||
long lastAuthMs,
|
||||
@@ -229,7 +219,6 @@ public final class ActiveSessionsDAO {
|
||||
|
||||
// -------------------- DELETE --------------------
|
||||
|
||||
/** Удалить по sessionId с внешним соединением. Соединение НЕ закрывает. */
|
||||
public void deleteBySessionId(Connection c, String sessionId) throws SQLException {
|
||||
String sql = "DELETE FROM active_sessions WHERE session_id = ?";
|
||||
|
||||
@@ -239,7 +228,6 @@ public final class ActiveSessionsDAO {
|
||||
}
|
||||
}
|
||||
|
||||
/** Удалить по sessionId без внешнего соединения. Сам открывает/закрывает. */
|
||||
public void deleteBySessionId(String sessionId) throws SQLException {
|
||||
try (Connection c = db.getConnection()) {
|
||||
deleteBySessionId(c, sessionId);
|
||||
@@ -251,7 +239,7 @@ public final class ActiveSessionsDAO {
|
||||
private ActiveSessionEntry mapRow(ResultSet rs) throws SQLException {
|
||||
String sessionId = rs.getString("session_id");
|
||||
String login = rs.getString("login");
|
||||
String sessionPwd = rs.getString("session_pwd");
|
||||
String sessionKey = rs.getString("session_key");
|
||||
String storagePwd = rs.getString("storage_pwd");
|
||||
long sessionCreatedAtMs = rs.getLong("session_created_at_ms");
|
||||
long lastAuthirificatedAtMs = rs.getLong("last_authirificated_at_ms");
|
||||
@@ -266,7 +254,7 @@ public final class ActiveSessionsDAO {
|
||||
return new ActiveSessionEntry(
|
||||
sessionId,
|
||||
login,
|
||||
sessionPwd,
|
||||
sessionKey,
|
||||
storagePwd,
|
||||
sessionCreatedAtMs,
|
||||
lastAuthirificatedAtMs,
|
||||
|
||||
@@ -7,10 +7,14 @@ public class ActiveSessionEntry {
|
||||
|
||||
private String sessionId;
|
||||
private String login;
|
||||
private String sessionPwd;
|
||||
|
||||
/** session_key: публичный ключ сессии (base64 от 32 байт). */
|
||||
private String sessionKey;
|
||||
|
||||
private String storagePwd;
|
||||
private long sessionCreatedAtMs;
|
||||
private long lastAuthirificatedAtMs;
|
||||
|
||||
private String pushEndpoint;
|
||||
private String pushP256dhKey;
|
||||
private String pushAuthKey;
|
||||
@@ -20,12 +24,11 @@ public class ActiveSessionEntry {
|
||||
private String clientInfoFromRequest;
|
||||
private String userLanguage;
|
||||
|
||||
public ActiveSessionEntry() {
|
||||
}
|
||||
public ActiveSessionEntry() { }
|
||||
|
||||
public ActiveSessionEntry(String sessionId,
|
||||
String login,
|
||||
String sessionPwd,
|
||||
String sessionKey,
|
||||
String storagePwd,
|
||||
long sessionCreatedAtMs,
|
||||
long lastAuthirificatedAtMs,
|
||||
@@ -38,7 +41,7 @@ public class ActiveSessionEntry {
|
||||
String userLanguage) {
|
||||
this.sessionId = sessionId;
|
||||
this.login = login;
|
||||
this.sessionPwd = sessionPwd;
|
||||
this.sessionKey = sessionKey;
|
||||
this.storagePwd = storagePwd;
|
||||
this.sessionCreatedAtMs = sessionCreatedAtMs;
|
||||
this.lastAuthirificatedAtMs = lastAuthirificatedAtMs;
|
||||
@@ -57,8 +60,8 @@ public class ActiveSessionEntry {
|
||||
public String getLogin() { return login; }
|
||||
public void setLogin(String login) { this.login = login; }
|
||||
|
||||
public String getSessionPwd() { return sessionPwd; }
|
||||
public void setSessionPwd(String sessionPwd) { this.sessionPwd = sessionPwd; }
|
||||
public String getSessionKey() { return sessionKey; }
|
||||
public void setSessionKey(String sessionKey) { this.sessionKey = sessionKey; }
|
||||
|
||||
public String getStoragePwd() { return storagePwd; }
|
||||
public void setStoragePwd(String storagePwd) { this.storagePwd = storagePwd; }
|
||||
|
||||
Reference in New Issue
Block a user