diff --git a/startup.lua b/startup.lua index 7fdc006..ef3bdb4 100644 --- a/startup.lua +++ b/startup.lua @@ -177,29 +177,46 @@ local function MonitorRemoteIris() utils.log("ALERT: Remote iris moving: " .. remoteIrisState .. "%") end - -- If remote has computer and iris just became fully closed, offer password entry + -- If remote has computer and iris just became fully closed, wait for password request if state.remoteHasComputer and remoteIrisState == 100 and (not lastIrisState or lastIrisState < 100) then - utils.log("Remote iris closed but computer detected - showing password prompt") + utils.log("Remote iris closed and computer detected - waiting for password request") - local password = HandlePasswordEntry() - - -- Wait for response - local function WaitForResponse() - sleep(3) -- Wait up to 3 seconds for response + -- Wait briefly for password request message + local function WaitForPasswordRequest() + sleep(2) -- Wait up to 2 seconds for password request return nil end - local result = parallel.waitForAny(GetMessage, WaitForResponse) + local result = parallel.waitForAny(GetMessage, WaitForPasswordRequest) if result == 1 then - local response = state.lastReceivedMessage + local message = state.lastReceivedMessage state.lastReceivedMessage = nil - if response == "IRIS_OPEN" then - display.showPasswordResult(true) - utils.log("Password accepted - iris opened") - -- Continue monitoring, iris state will update - elseif response == "IRIS_DENIED" then - display.showPasswordResult(false) - utils.log("Password rejected") + + -- Only show password panel if explicitly requested + if message == "IRIS_PASSWORD_REQUIRED" then + utils.log("Password requested by remote gate - showing password prompt") + + local password = HandlePasswordEntry() + + -- Wait for response + local function WaitForResponse() + sleep(3) -- Wait up to 3 seconds for response + return nil + end + + result = parallel.waitForAny(GetMessage, WaitForResponse) + if result == 1 then + local response = state.lastReceivedMessage + state.lastReceivedMessage = nil + if response == "IRIS_OPEN" then + display.showPasswordResult(true) + utils.log("Password accepted - iris opened") + -- Continue monitoring, iris state will update + elseif response == "IRIS_DENIED" then + display.showPasswordResult(false) + utils.log("Password rejected") + end + end end end @@ -313,6 +330,10 @@ local function handleIncomingWormhole() utils.openIris() else utils.closeIris() + -- Send password request if iris is closed and password system is enabled + if config.irisPassword and config.enableMessaging then + utils.sendPasswordRequest() + end end end diff --git a/utils.lua b/utils.lua index 49056e3..1facbdb 100644 --- a/utils.lua +++ b/utils.lua @@ -173,4 +173,13 @@ function utils.sendPasswordAttempt(password) return false end +function utils.sendPasswordRequest() + if config.enableMessaging then + gate.sendStargateMessage("IRIS_PASSWORD_REQUIRED") + utils.log("Sent password request") + return true + end + return false +end + return utils