From 778963a0da12125e5894e8009bcc91020eb988a5 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 10 Jun 2015 18:15:56 -0400 Subject: Change to store arbitrary key/value pairs. * shroud/secret.scm (secret-username, secret-password): Delete. (secret-contents): New accessor. (secret-ref): New procedure. (alist->secret, secret->alist): Use new format. --- shroud/secret.scm | 21 +++++++++++---------- shroud/ui/hide.scm | 4 +++- shroud/ui/show.scm | 6 +++--- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/shroud/secret.scm b/shroud/secret.scm index 22d2961..a43ba54 100644 --- a/shroud/secret.scm +++ b/shroud/secret.scm @@ -23,8 +23,8 @@ #:export (make-secret secret? secret-id - secret-username - secret-password + secret-contents + secret-ref alist->secret secret->alist load-secrets @@ -32,25 +32,26 @@ secrets-by-id)) (define-record-type - (make-secret id username password) + (make-secret id contents) secret? (id secret-id) - (username secret-username) - (password secret-password)) + (contents secret-contents)) + +(define (secret-ref secret key) + "Return the secret data associated with KEY in SECRET." + (assoc-ref (secret-contents secret) key)) (define (alist->secret alist) "Convert ALIST into a record." (make-secret (assq-ref alist 'id) - (assq-ref alist 'username) - (assq-ref alist 'password))) + (assq-ref alist 'contents))) (define (secret->alist secret) "Convert SECRET into an alist." (match secret - (($ id username password) + (($ id contents) `((id . ,id) - (username . ,username) - (password . ,password))))) + (contents . ,contents))))) (define (load-secrets file) "Load secrets from FILE, or return '() if FILE does not exist." diff --git a/shroud/ui/hide.scm b/shroud/ui/hide.scm index b09d7c2..9240b54 100644 --- a/shroud/ui/hide.scm +++ b/shroud/ui/hide.scm @@ -82,7 +82,9 @@ Add a new secret to the database.~%") (let* ((db (secrets-by-id (force db))) (existing (vhash-ref db id)) (vcons (if existing vhash-replace vhash-cons)) - (secret (make-secret id username password))) + (contents `(("username" . ,username) + ("password" . ,password))) + (secret (make-secret id contents))) (when (and (not replace?) existing) (leave "~a: secret already defined" id)) diff --git a/shroud/ui/show.scm b/shroud/ui/show.scm index 88d9ccb..6ad1ba0 100644 --- a/shroud/ui/show.scm +++ b/shroud/ui/show.scm @@ -70,10 +70,10 @@ Show secret named ID.~%") (leave "~a: secret undefined" id)) (if password? - (display (secret-password secret)) + (display (secret-ref secret "password")) (format #t "username: ~a~%password: ~a~%" - (secret-username secret) - (secret-password secret))))) + (secret-ref secret "username") + (secret-ref secret "password"))))) ;; We don't alter the database. db) -- cgit v1.2.3