diff --git a/dwb/dwb.configdir/userscripts/lastpass.js b/dwb/dwb.configdir/userscripts/lastpass.js new file mode 100644 index 0000000..5f74f1f --- /dev/null +++ b/dwb/dwb.configdir/userscripts/lastpass.js @@ -0,0 +1,75 @@ +//!javascript + +Signal.connect("documentLoaded", function(wv, frame) { + autofillForm(); +}); + +function fillUsername(name, username) { + var doc = tabs.current.focusedFrame.document; + var box = doc.querySelector('input[name="' + name + '"]'); + if (!box) { + box = doc.querySelector("input[name*=user]"); + } + if (!box) { + box = doc.querySelector("input[name*=email]"); + } + if (!box) { + box = doc.querySelector("input[name*=account]"); + } + if (!box) { + box = doc.querySelector("input[type=email]"); + } + if (box) { + box.value = username; + } +} + +function fillPassword(name, password) { + var doc = tabs.current.focusedFrame.document; + var box = doc.querySelector('input[name="' + name + '"]'); + if (!box) { + box = doc.querySelector("input[type=password]"); + } + if (box) { + box.value = password; + } +} + +function lastPassFind(url, callbacks) { + var cmd = "lpass find " + url; + system.spawn(cmd, { + onStdout: function(line) { + if (line.indexOf("Username: ") == 0) { + callbacks.onGetUsername(line.substr(10)); + } else if (line.indexOf("Password: ") == 0) { + callbacks.onGetPassword(line.substr(10)); + } else if (line.indexOf(': ') > -1) { + var name = line.substring(0, line.indexOf(': ')); + callbacks.onGetFieldName(line, name); + } + }, + }); +} + +function autofillForm() { + var username, password; + lastPassFind(tabs.current.uri, { + onGetUsername: function (val) { + username = val; + fillUsername("", val); + }, + onGetPassword: function (val) { + password = val; + fillPassword("", val); + }, + onGetFieldName: function (line, name) { + if (username && line.indexOf(username) > -1) { + fillUsername(name, username); + } + if (password && line.indexOf(password) > -1) { + fillPassword(name, password); + } + } + }); +} +