diff options
author | David Thompson <davet@gnu.org> | 2015-06-10 18:15:56 -0400 |
---|---|---|
committer | David Thompson <davet@gnu.org> | 2015-06-10 18:15:56 -0400 |
commit | 778963a0da12125e5894e8009bcc91020eb988a5 (patch) | |
tree | 042db20cf4d057673ac25ecbd5425fad966265b2 | |
parent | 16360f53d7035a184e56bd9a04968a24014350b0 (diff) |
Change <secret> 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.
-rw-r--r-- | shroud/secret.scm | 21 | ||||
-rw-r--r-- | shroud/ui/hide.scm | 4 | ||||
-rw-r--r-- | 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 <secret> - (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 <secret> 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 - (($ <secret> id username password) + (($ <secret> 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) |