I'm not a committer so I can't help with that, but I've felt bad each time you asked for feedback and didn't get a response so I decide to try it out to make sure it works.
There is a style warning that in command-options you're passing an unused parameter t to format. I'm using pwsafe 0.2.0 and am new to it. I'm getting some weird menu entries in pwsafe-menu. I get blank entries at the end, and I also get at least one "> notes" entry. Does pwsafe-entry support tab completion? If I type the name of an account wrong it just aborts, it should give an error saying it couldn't find an account with that name. if I press tab it gives me this error Error In Command 'pwsafe-entry': The value (" 2.2" . #S(STUMPWM.CONTRIB.PWSAFE::PWSAFE-ENTRY :PASSWORD "test" :NAME " 2.2" :USER-NAME "2")) is not of type (OR (VECTOR CHARACTER) (VECTOR NIL) BASE-STRING SYMBOL CHARACTER). All that said, I do find this contrib useful, will continue using it, and hope it will be merged once fixed. I also hope the lack of response does not stop you from contributing more! Scott On Sun, Jul 3, 2011 at 6:46 PM, Wojciech Meyer <wojciech.me...@googlemail.com> wrote: > Ping ;) Please see the patch in my previous e-mails. > > Wojciech > > Wojciech Meyer <wojciech.me...@googlemail.com> writes: > >> Hi, >> >> Could anybody review the patch please, I wish this contribution will end >> up eventually in Stump. As a sort of encouragement I have more ideas and >> patches to go soon. I did my best for you to spend as minimal time as >> it's needed on reviewing it. >> >> TIA >> Wojciech >> >> Wojciech Meyer <wojciech.me...@googlemail.com> writes: >> >>> Ping ;) >>> >>> Wojciech Meyer <wojciech.me...@googlemail.com> writes: >>> >>>> Hi Guys, >>>> >>>> Since I've been using pwsafe quite often, and I've never felt >>>> comfortable with using available gui interfaces, Emacs mode has never >>>> worked for me, and more importantly now there is a way of handling >>>> passwords in StumpWM, I've been yield to temptation to write an >>>> interface for StumpWM to handle basic pwsafe work-flow - selecting >>>> account and getting password and the user name. >>>> >>>> Please accept this small contribution to Stump and I hope you will >>>> enjoy! >>>> >>>> Cheers; >>>> >>>> Wojciech >>>> >>>> >>>> From c9e6224e16b9d3f4a6494b44acf7c53b336493b9 Mon Sep 17 00:00:00 2001 >>>> From: Wojciech Meyer <wojciech.me...@gmail.com> >>>> Date: Fri, 24 Jun 2011 01:16:32 +0100 >>>> Subject: [PATCH] Initial interface to pwsafe password keyring. Two new >>>> commands: `pwsafe-menu', `pwsafe-entry'. >>>> >>>> >>>> Signed-off-by: Wojciech Meyer <wojciech.me...@gmail.com> >>>> --- >>>> contrib/pwsafe.lisp | 161 >>>> +++++++++++++++++++++++++++++++++++++++++++++++++++ >>>> 1 files changed, 161 insertions(+), 0 deletions(-) >>>> create mode 100644 contrib/pwsafe.lisp >>>> >>>> diff --git a/contrib/pwsafe.lisp b/contrib/pwsafe.lisp >>>> new file mode 100644 >>>> index 0000000..3ae9451 >>>> --- /dev/null >>>> +++ b/contrib/pwsafe.lisp >>>> @@ -0,0 +1,161 @@ >>>> +;;; Interface to pwsafe keyring >>>> +;;; >>>> +;;; Copyright 2011 Wojciech Meyer >>>> +;;; >>>> +;;; Maintainer: Wojciech Meyer >>>> +;;; >>>> +;;; This module is free software; you can redistribute it and/or modify >>>> +;;; it under the terms of the GNU General Public License as published by >>>> +;;; the Free Software Foundation; either version 2, or (at your option) >>>> +;;; any later version. >>>> +;;; >>>> +;;; This module is distributed in the hope that it will be useful, >>>> +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of >>>> +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >>>> +;;; GNU General Public License for more details. >>>> +;;; >>>> +;;; You should have received a copy of the GNU General Public License >>>> +;;; along with this software; see the file COPYING. If not, write to >>>> +;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330, >>>> +;;; Boston, MA 02111-1307 USA >>>> +;;; >>>> + >>>> +;;; USAGE: >>>> +;;; >>>> +;;; Put: >>>> +;;; >>>> +;;; (load-module "pwsafe") >>>> +;;; >>>> +;;; ...into your ~/.stumpwmrc >>>> +;;; >>>> + >>>> +;;; BUGS: >>>> +;;; >>>> +;;; Not very safe since the master password is not only stored in memory >>>> +;;; but also echoed through unix pipe. >>>> +;;; You've been warned. >>>> +;;; If anybody knows how to improve it just mail me or send a patch. >>>> + >>>> +;;; CODE: >>>> + >>>> + >>>> +(defpackage :stumpwm.contrib.pwsafe >>>> + (:use :common-lisp :stumpwm)) >>>> + >>>> +(in-package :stumpwm.contrib.pwsafe) >>>> + >>>> + >>>> +(defstruct pwsafe-entry >>>> + "Our structure holding entry data. Master password stored for each >>>> +entry therefore VERY UNSAFE." >>>> + password >>>> + name >>>> + user-name) >>>> + >>>> +(defun lines-from-string (string) >>>> + "Boiler plate for splitting STRING buffer to lines. Rewritten >>>> +thousands of times already" >>>> + (loop for i = 0 then (1+ j) >>>> + as j = (position #\Newline string :start i) >>>> + collect (subseq string i j) >>>> + while j)) >>>> + >>>> +(defun pair-split (entry separator) >>>> + "Split two ENTRY sections separated by SEPARATOR into pair" >>>> + (let ((lst (cl-ppcre:split separator entry))) >>>> + (cons (remove #\Newline (car lst)) (remove #\Newline (cadr lst))))) >>>> + >>>> +(defun command-options (options &optional argument) >>>> + "Create command OPTIONS with optional ARGUMENTS. BUGS: Need to >>>> +insert space after each switch, should interleave space." >>>> + (format nil "~a ~a" >>>> + (if (listp options) >>>> + (apply #'concat options) options) >>>> + (or argument "") t)) >>>> + >>>> +(defun pwsafe-command (password options &optional argument) >>>> + "Execute pwsafe command using master PASSWORD with OPTIONS and >>>> +additional ARGUMENT. Not safe." >>>> + (format nil "echo \"~a\" | pwsafe ~a" password (command-options options >>>> argument))) >>>> + >>>> +(defun with-xsel (command &optional options) >>>> + "Pipe COMMAND with OPTIONS to xsel." >>>> + (format nil "~a | xsel ~a" command (or options ""))) >>>> + >>>> +(defun pwsafe-entry-from-line (password line) >>>> + "Create entry from LINE and master PASSWORD. Not safe." >>>> + (let* ((line (or (cdr (pair-split line "Enter passphrase for.*:")) >>>> line)) >>>> + (pair (pair-split line " - "))) >>>> + (make-pwsafe-entry :password password >>>> + :name (car pair) >>>> + :user-name (cdr pair)))) >>>> + >>>> +(defun run-pwsafe-command (password options &optional argument) >>>> + (let ((output (run-shell-command (pwsafe-command password options >>>> argument) t))) >>>> + (when (cl-ppcre::scan "Passphrase is incorrect" output) >>>> + (throw 'error "Passphrase is incorrect")) >>>> + output)) >>>> + >>>> +(defun pwsafe-entries (password) >>>> + "Get all the entries using master PASSWORD and spawning pwsafe >>>> +command" >>>> + (let ((output (run-pwsafe-command password '("-l")))) >>>> + (mapcar >>>> + (lambda (line) (pwsafe-entry-from-line password line)) >>>> + (lines-from-string output)))) >>>> + >>>> +(defun assoc-entries (entries) >>>> + "Create assoc from ENTRIES keyed by the name" >>>> + (mapcar (lambda (entry) (cons (pwsafe-entry-name entry) entry)) >>>> entries)) >>>> + >>>> +(defun pwsafe-password-to-clipboard (entry) >>>> + "Main function that will perform side action on ENTRY with all the >>>> +associated side effects like priting message and putting password into >>>> +xclipboard" >>>> + (let* ((pwsafe-entry (pwsafe-entry-name entry)) >>>> + (output >>>> + (run-pwsafe-command (pwsafe-entry-password entry) >>>> + ;; FIXME: dirty hack, attempted to be nice >>>> + ;; and keep the options in list, however >>>> + ;; `pwsafe-command' is not interleaving >>>> + ;; them with space >>>> + '("-q " "-p " "--echo " "-E ") pwsafe-entry)) >>>> + ;; FIXME: this one is a bit buggy, it should be really not >>>> + ;; calling pair-split it might not work in all cases >>>> + (entry-password (cdr (pair-split output "passphrase for.*: ")))) >>>> + (set-x-selection entry-password) >>>> + (run-shell-command (with-xsel (format nil "echo \"~a\"" >>>> entry-password) "-ib") t) >>>> + (message >>>> + (format nil "Username: ~a (password copied to clipboard)" >>>> + (pwsafe-entry-user-name entry))))) >>>> + >>>> +(defcommand pwsafe-menu (password) ((:password "Pwsafe password: ")) >>>> + "Prompt for PASSWORD. Show menu with pwsafe database entries. Let >>>> +the user choose entry, put password to clipboard and notify user about >>>> +associated username" >>>> + (let* ((entries (pwsafe-entries password)) >>>> + (entry (select-from-menu (current-screen) >>>> + (assoc-entries entries)))) >>>> + (unless entry >>>> + (throw 'error :abort)) >>>> + (pwsafe-password-to-clipboard (cdr entry)))) >>>> + >>>> +(define-stumpwm-type :pwsafe-entry (input prompt) >>>> + "This is our type for prompting entry, and performing completion." >>>> + (or (argument-pop input) >>>> + (let ((password (read-one-line (current-screen) "Pwsafe password: " >>>> :password t))) >>>> + (when password >>>> + (let* ((entries (pwsafe-entries password)) >>>> + (entries-assoc (assoc-entries entries)) >>>> + (entry-name (completing-read (current-screen) >>>> + prompt >>>> + entries-assoc))) >>>> + (cdr (assoc entry-name entries-assoc :test #'equal))))))) >>>> + >>>> + >>>> +(defcommand pwsafe-entry (entry) ((:pwsafe-entry "Pwsafe entry: ")) >>>> + "Prompt for ENTRY with completion, put password in clipboard and >>>> +notify user about associated username" >>>> + (unless entry >>>> + (throw 'error :abort)) >>>> + (pwsafe-password-to-clipboard entry)) > > _______________________________________________ > Stumpwm-devel mailing list > Stumpwm-devel@nongnu.org > https://lists.nongnu.org/mailman/listinfo/stumpwm-devel > _______________________________________________ Stumpwm-devel mailing list Stumpwm-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/stumpwm-devel