From 113dee80a4a509d09afa88ab6bb5137a22619272 Mon Sep 17 00:00:00 2001 From: Abdurahman Elmawi Date: Sun, 29 Jun 2025 05:20:02 +0300 Subject: [PATCH] implement per-server login management --- builtin/mainmenu/dlg_register.lua | 7 +++++-- builtin/mainmenu/tab_online.lua | 35 +++++++++++++++++-------------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/builtin/mainmenu/dlg_register.lua b/builtin/mainmenu/dlg_register.lua index 68eb2fc726..89f0c4e72a 100644 --- a/builtin/mainmenu/dlg_register.lua +++ b/builtin/mainmenu/dlg_register.lua @@ -81,8 +81,11 @@ local function register_buttonhandler(this, fields) core.settings:set("name", fields.name) core.settings:set("address", gamedata.address) core.settings:set("remote_port", gamedata.port) - if core.settings:get_bool("remember_password") then - core.settings:set("password", fields.password) + if core.settings:get_bool("remember_login") then + keyringmgr.set_login({ + address = gamedata.address, + port = gamedata.port, + }, fields.name, fields.password) end core.start() diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index 4a8e1ceda9..52622657d5 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -56,6 +56,8 @@ end -- Persists the selected server in the "address" and "remote_port" settings +local input_playername = keyringmgr.get_last_playername() or core.settings:get("name") +local input_password = keyringmgr.get_last_password() or "" local function set_selected_server(server) if server == nil then -- reset selection core.settings:remove("address") @@ -69,6 +71,18 @@ local function set_selected_server(server) if address and port then core.settings:set("address", address) core.settings:set("remote_port", port) + + -- Pull info from last login (if exists) + -- This will always fail if remember_login is false + -- because nothing has been stored, nor will it ever be + local login = keyringmgr.get_last_login(server) + if login then + input_playername = login.playername + input_password = login.password + else + input_playername = core.settings:get("name") + input_password = "" + end end end @@ -96,11 +110,6 @@ local function get_formspec(tabview, name, tabdata) tabdata.search_for = "" end - local password = "" - if core.settings:get_bool("remember_password") then - password = core.settings:get("password") - end - local retval = -- Search "field[0.25,0.25;7,0.75;te_search;;" .. core.formspec_escape(tabdata.search_for) .. "]" .. @@ -134,8 +143,8 @@ local function get_formspec(tabview, name, tabdata) "container[0,4.8]" .. "label[0.25,0;" .. fgettext("Name") .. "]" .. "label[2.875,0;" .. fgettext("Password") .. "]" .. - "field[0.25,0.2;2.625,0.75;te_name;;" .. core.formspec_escape(core.settings:get("name")) .. "]" .. - "pwdfield[2.875,0.2;2.625,0.75;te_pwd;;" .. core.formspec_escape(password) .. "]" .. + "field[0.25,0.2;2.625,0.75;te_name;;" .. core.formspec_escape(input_playername) .. "]" .. + "pwdfield[2.875,0.2;2.625,0.75;te_pwd;;" .. core.formspec_escape(input_password) .. "]" .. "container_end[]" .. -- Connect @@ -445,15 +454,6 @@ end local function main_button_handler(tabview, fields, name, tabdata) if fields.te_name then gamedata.playername = fields.te_name - core.settings:set("name", fields.te_name) - end - - if core.settings:get_bool("remember_password") then - if fields.te_pwd then - core.settings:set("password", fields.te_pwd) - end - else - core.settings:set("password", "") end if fields.servers then @@ -568,6 +568,9 @@ local function main_button_handler(tabview, fields, name, tabdata) if server and server.address == gamedata.address and server.port == gamedata.port then + if core.settings:get_bool("remember_login") then + keyringmgr.set_login(server, gamedata.playername, gamedata.password) + end serverlistmgr.add_favorite(server) gamedata.servername = server.name