From 8f1fd300b3023074776791794f451af77d6059e2 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Sun, 26 May 2013 01:16:50 +0200 Subject: [PATCH] Initial commit --- README.org | 24 +++++++++++++++++ cdispass.js | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 README.org create mode 100644 cdispass.js 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 + + 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");