aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemse2013-05-26 01:16:50 +0200
committerGravatar Tom Willemse2013-05-26 01:16:50 +0200
commit8f1fd300b3023074776791794f451af77d6059e2 (patch)
tree8d483fdbcde5ae794ad8c840bfd848e99ae67029
downloadcdispass-8f1fd300b3023074776791794f451af77d6059e2.tar.gz
cdispass-8f1fd300b3023074776791794f451af77d6059e2.zip
Initial commit
-rw-r--r--README.org24
-rw-r--r--cdispass.js75
2 files changed, 99 insertions, 0 deletions
diff --git a/README.org b/README.org
new file mode 100644
index 0000000..639833a
--- /dev/null
+++ b/README.org
@@ -0,0 +1,24 @@
+* cDisPass
+
+ cdispass is a JavaScript-based wrapper around [[http://dispass.babab.nl/][DisPass]] for the
+ [[http://conkeror.org][Conkeror Web Browser]].
+
+** Usage
+
+ To use cdispass: Add its location to your load_paths and require it.
+
+ #+BEGIN_SRC js
+ load_paths.push("/path/to/cdispass/");
+ require("cdispass");
+ #+END_SRC
+
+ And then you can use =M-x dispass= or you could bind
+ =dispass-and-submit= to some key, like:
+
+ #+BEGIN_SRC js
+ define_key(content_buffer_text_keymap, "C-c d", "dispass-and-submit");
+ #+END_SRC
+
+ Which would cause =C-c d= to call the =dispass= command, insert the
+ result in the current focused element and then submit the form in
+ which the element is placed.
diff --git a/cdispass.js b/cdispass.js
new file mode 100644
index 0000000..c7efc7e
--- /dev/null
+++ b/cdispass.js
@@ -0,0 +1,75 @@
+/* Copyright (C) 2013 Tom Willemse <tom at ryuslash dot org>
+
+ Permission to use, copy, modify, and distribute this software for any
+ purpose with or without fee is hereby granted, provided that the
+ above copyright notice and this permission notice appear in all
+ copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+ */
+/// Commentary:
+
+// A wrapper script that allows conkeror to interface with DisPass
+// (http://dispass.babab.nl).
+
+/// Code:
+
+define_variable("dispass_executable", "dispass",
+ "The location of the DisPass executable.");
+
+function dispass(label, password)
+{
+ let command = dispass_executable + " generate -o -p '" + password
+ + "' '" + label + "'";
+ let data = "", error = "";
+ let ret = yield shell_command(
+ command,
+ $fds = [{ output: async_binary_string_writer("") },
+ { input: async_binary_reader(
+ function (s) data += s || ""
+ ) },
+ { input: async_binary_reader(
+ function (s) error += s || ""
+ ) }]
+ );
+
+ if (ret != 0 || error != '')
+ throw new Error("DisPass returned " + ret + " with message: "
+ + error);
+
+ let regexp = new RegExp("^" + label + " +(.*)");
+ let match = regexp.exec(data);
+
+ if (match)
+ yield co_return(match[1]);
+
+ yield co_return(data);
+}
+
+function dispass_interactive(I) {
+ let label = yield I.minibuffer.read($prompt="label:");
+
+ I.minibuffer.input_element.type = "password";
+ let password = yield I.minibuffer.read(
+ $prompt="password:"
+ );
+ I.minibuffer.input_element.type = "";
+
+ I.buffer.focused_element.value = (yield dispass(label, password));
+}
+
+interactive("dispass", "Something", dispass_interactive);
+interactive("dispass-and-submit", "Something",
+ function (I) {
+ yield dispass_interactive(I);
+ I.buffer.focused_element.form.submit();
+ });
+
+provide("cdispass");