Fix to handle remote identity properlu

This commit is contained in:
2025-12-05 21:36:44 -06:00
parent 18be095151
commit 8b2fcb0e3d
2 changed files with 43 additions and 43 deletions

View File

@@ -176,39 +176,39 @@ else:
def init_db(): def init_db():
conn = sqlite3.connect(DB_PATH) conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor() cursor = conn.cursor()
# Create new table for identity-based lookups
cursor.execute(""" cursor.execute("""
CREATE TABLE IF NOT EXISTS users ( CREATE TABLE IF NOT EXISTS rns_users (
id INTEGER PRIMARY KEY AUTOINCREMENT, remote_identity TEXT PRIMARY KEY,
remote_identity TEXT, display_name TEXT,
dest TEXT UNIQUE NOT NULL, last_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP
display_name TEXT
) )
""") """)
conn.commit() conn.commit()
conn.close() conn.close()
def get_display_name_from_db(dest): def get_display_name_from_db(remote_identity):
if not dest: if not remote_identity:
return None return None
conn = sqlite3.connect(DB_PATH) conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute("SELECT display_name FROM users WHERE dest = ?", (dest,)) cursor.execute("SELECT display_name FROM rns_users WHERE remote_identity = ?", (remote_identity,))
result = cursor.fetchone() result = cursor.fetchone()
conn.close() conn.close()
return result[0] if result else None return result[0] if result else None
def save_user_to_db(remote_identity, dest, display_name): def save_user_to_db(remote_identity, display_name):
if not remote_identity or not dest: if not remote_identity:
return # Don't save if required info is missing return # Don't save if required info is missing
conn = sqlite3.connect(DB_PATH) conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute(""" cursor.execute("""
INSERT INTO users (remote_identity, dest, display_name) INSERT INTO rns_users (remote_identity, display_name)
VALUES (?, ?, ?) VALUES (?, ?)
ON CONFLICT(dest) DO UPDATE SET ON CONFLICT(remote_identity) DO UPDATE SET
remote_identity = excluded.remote_identity, display_name = excluded.display_name,
display_name = excluded.display_name last_seen = CURRENT_TIMESTAMP
""", (remote_identity, dest, display_name)) """, (remote_identity, display_name))
conn.commit() conn.commit()
conn.close() conn.close()
@@ -221,7 +221,7 @@ dest = os.getenv("dest", "").strip()
remote_identity = os.getenv("remote_identity", "").strip() remote_identity = os.getenv("remote_identity", "").strip()
# Try to load display_name from DB # Try to load display_name from DB
db_display_name = get_display_name_from_db(dest) db_display_name = get_display_name_from_db(remote_identity)
# Определение финального display_name с логированием # Определение финального display_name с логированием
nickname_recovered_from_db = False nickname_recovered_from_db = False
@@ -241,8 +241,8 @@ elif db_display_name:
"user": "System", "user": "System",
"text": f"`!` Никнейм восстановлен из базы данных: {display_name} `!`" "text": f"`!` Никнейм восстановлен из базы данных: {display_name} `!`"
}) })
elif dest: elif remote_identity:
display_name = f"Guest_{dest[-4:]}" display_name = f"Guest_{remote_identity[:4]}"
log.append({ log.append({
"time": time.strftime("[%a,%H:%M]"), "time": time.strftime("[%a,%H:%M]"),
"user": "System", "user": "System",
@@ -257,7 +257,7 @@ else:
}) })
# Сохранение пользователя в БД если валидно # Сохранение пользователя в БД если валидно
save_user_to_db(remote_identity, dest, display_name) save_user_to_db(remote_identity, display_name)
# ----------------------------------------------- # -----------------------------------------------
@@ -1282,7 +1282,7 @@ def format_links_in_line(line):
############################## Output UI template: ###################################### ############################## Output UI template: ######################################
#INTRO TITLE: #INTRO TITLE:
template = f"> `!{message_icon} THE CHAT ROOM! {message_icon} `F007` Работает на Reticulum NomadNet - IRC стиль - Бесплатный глобальный чат - Оптимизировано для Meshchat v2.x+ - v2.00 `f`!\n" template = f"> `!\U0001F1F7\U0001F1FA RU Chat \U0001F1F7\U0001F1FA `F007` Работает на Reticulum NomadNet - IRC стиль - Бесплатный глобальный чат - Оптимизировано для Meshchat v2.x+ - v2.00 `f`!\n"
template += "-\n" template += "-\n"
# ЧТЕНИЕ И ОТОБРАЖЕНИЕ ТЕМЫ: # ЧТЕНИЕ И ОТОБРАЖЕНИЕ ТЕМЫ:
@@ -1336,7 +1336,7 @@ elif display_name == "Guest":
template += "`B222`Ff00` ** Вы сейчас используете общее имя. Установите никнейм для персонализации вашей сессии. Нажмите Fingerprint для сохранения или восстановления.`b`f`" template += "`B222`Ff00` ** Вы сейчас используете общее имя. Установите никнейм для персонализации вашей сессии. Нажмите Fingerprint для сохранения или восстановления.`b`f`"
elif nickname_recovered_from_db: elif nickname_recovered_from_db:
template += f"`B060`F0f0` Совпадение отпечатка успешно! Никнейм восстановлен из БД: {display_name}, Привязан к адресу LXMF: {dest}`b`f`" template += f"`B060`F0f0` Совпадение отпечатка успешно! Никнейм восстановлен из БД: {display_name}`b`f`"
# RENDER UI: # RENDER UI:
print(template) print(template)

View File

@@ -176,39 +176,39 @@ else:
def init_db(): def init_db():
conn = sqlite3.connect(DB_PATH) conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor() cursor = conn.cursor()
# Create new table for identity-based lookups
cursor.execute(""" cursor.execute("""
CREATE TABLE IF NOT EXISTS users ( CREATE TABLE IF NOT EXISTS rns_users (
id INTEGER PRIMARY KEY AUTOINCREMENT, remote_identity TEXT PRIMARY KEY,
remote_identity TEXT, display_name TEXT,
dest TEXT UNIQUE NOT NULL, last_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP
display_name TEXT
) )
""") """)
conn.commit() conn.commit()
conn.close() conn.close()
def get_display_name_from_db(dest): def get_display_name_from_db(remote_identity):
if not dest: if not remote_identity:
return None return None
conn = sqlite3.connect(DB_PATH) conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute("SELECT display_name FROM users WHERE dest = ?", (dest,)) cursor.execute("SELECT display_name FROM rns_users WHERE remote_identity = ?", (remote_identity,))
result = cursor.fetchone() result = cursor.fetchone()
conn.close() conn.close()
return result[0] if result else None return result[0] if result else None
def save_user_to_db(remote_identity, dest, display_name): def save_user_to_db(remote_identity, display_name):
if not remote_identity or not dest: if not remote_identity:
return # Don't save if required info is missing return # Don't save if required info is missing
conn = sqlite3.connect(DB_PATH) conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute(""" cursor.execute("""
INSERT INTO users (remote_identity, dest, display_name) INSERT INTO rns_users (remote_identity, display_name)
VALUES (?, ?, ?) VALUES (?, ?)
ON CONFLICT(dest) DO UPDATE SET ON CONFLICT(remote_identity) DO UPDATE SET
remote_identity = excluded.remote_identity, display_name = excluded.display_name,
display_name = excluded.display_name last_seen = CURRENT_TIMESTAMP
""", (remote_identity, dest, display_name)) """, (remote_identity, display_name))
conn.commit() conn.commit()
conn.close() conn.close()
@@ -221,7 +221,7 @@ dest = os.getenv("dest", "").strip()
remote_identity = os.getenv("remote_identity", "").strip() remote_identity = os.getenv("remote_identity", "").strip()
# Try to load display_name from DB # Try to load display_name from DB
db_display_name = get_display_name_from_db(dest) db_display_name = get_display_name_from_db(remote_identity)
# Определение финального display_name с логированием # Определение финального display_name с логированием
nickname_recovered_from_db = False nickname_recovered_from_db = False
@@ -241,8 +241,8 @@ elif db_display_name:
"user": "System", "user": "System",
"text": f"`!` Никнейм восстановлен из базы данных: {display_name} `!`" "text": f"`!` Никнейм восстановлен из базы данных: {display_name} `!`"
}) })
elif dest: elif remote_identity:
display_name = f"Guest_{dest[-4:]}" display_name = f"Guest_{remote_identity[:4]}"
log.append({ log.append({
"time": time.strftime("[%a,%H:%M]"), "time": time.strftime("[%a,%H:%M]"),
"user": "System", "user": "System",
@@ -257,7 +257,7 @@ else:
}) })
# Сохранение пользователя в БД если валидно # Сохранение пользователя в БД если валидно
save_user_to_db(remote_identity, dest, display_name) save_user_to_db(remote_identity, display_name)
# ----------------------------------------------- # -----------------------------------------------
@@ -1288,7 +1288,7 @@ safe_display_name = display_name.replace("`", "'")
# Простой шаблон для совместимости с NomadNet # Простой шаблон для совместимости с NomadNet
template = "---\n" template = "---\n"
template += f">`!{message_icon} THE CHAT ROOM! {message_icon} `F007` Работает на Reticulum NomadNet - IRC стиль - Бесплатный глобальный чат - Оптимизировано для NomadNet - v2.00 `f`!\n" template += f">`! RU Chat `F007` Работает на Reticulum NomadNet - IRC стиль - Бесплатный глобальный чат - Оптимизировано для NomadNet - v2.00 `f`!\n"
template += "---\n" template += "---\n"
template += f"`c`B000`Ff2e`!####### Тема комнаты: {topic_text} `! (Установлена: {topic_author}, {topic_data.get('time')}) `! `!`f`b`a\n" template += f"`c`B000`Ff2e`!####### Тема комнаты: {topic_text} `! (Установлена: {topic_author}, {topic_data.get('time')}) `! `!`f`b`a\n"
template += "---\n" template += "---\n"