1pass.lua
changeset 29 769393898e93
parent 28 60136c984e3b
child 30 c8f3db869ce0
--- a/1pass.lua	Tue Apr 15 10:06:56 2014 -0400
+++ b/1pass.lua	Tue Apr 15 12:10:14 2014 -0400
@@ -281,6 +281,30 @@
 
 local passwordUnlockTime = nil
 
+local function lockKeychain()
+    -- lose the existing password and key, prompt user again.
+    password = argv[2]  -- might be nil, don't reset if on command line.
+    keys["SL5"] = nil
+    passwordUnlockTime = nil
+    keyhookRunning = false
+    setPowermateLED(false)
+    collectgarbage()
+end
+
+function pumpLua()  -- not local! Called from C!
+    -- !!! FIXME: this should lose the key in RAM and turn off the Powermate
+    -- !!! FIXME:  LED when the time expires instead of if the time has
+    -- !!! FIXME:  expired when the user is trying to get at the keychain.
+    if passwordUnlockTime ~= nil then
+        local now = os.time()
+        local maxTime = (15 * 60)  -- !!! FIXME: don't hardcode.
+        if os.difftime(now, passwordUnlockTime) > maxTime then
+            lockKeychain()
+        end
+    end
+end
+
+
 function keyhookPressed()  -- not local! Called from C!
 --print("keyhookPressed: running==" .. tostring(keyhookRunning))
 --    if keyhookRunning then
@@ -289,20 +313,6 @@
 
     keyhookRunning = true
 
-    -- !!! FIXME: this should lose the key in RAM and turn off the Powermate
-    -- !!! FIXME:  LED when the time expires instead of if the time has
-    -- !!! FIXME:  expired when the user is trying to get at the keychain.
-    if passwordUnlockTime ~= nil then
-        local now = os.time()
-        local maxTime = (15 * 60)  -- !!! FIXME: don't hardcode.
-        if os.difftime(now, passwordUnlockTime) > maxTime then
-            -- lose the existing password and key, prompt user again.
-            setPowermateLED(false)
-            password = argv[2]  -- might be nil, don't reset if on command line.
-            keys["SL5"] = nil
-        end
-    end
-
     while password == nil do
         password = runGuiPasswordPrompt(getHint())
         if password == nil then
@@ -326,14 +336,7 @@
 
     local topmenu = makeGuiMenu()
 
-    local lock_callback = function()
-        password = argv[2]  -- might be nil, don't reset if on command line.
-        keys["SL5"] = nil
-        passwordUnlockTime = nil
-        keyhookRunning = false
-        setPowermateLED(false)
-    end
-    appendGuiMenuItem(topmenu, "Lock keychain", lock_callback)
+    appendGuiMenuItem(topmenu, "Lock keychain", function() lockKeychain() end)
 
     for orderi,type in ipairs(passwordTypeOrdering) do
         local bucket = items[type]