summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVineet Kumar <git@vineetk.net>2026-05-22 17:16:59 -0400
committerVineet Kumar <git@vineetk.net>2026-05-22 17:16:59 -0400
commit2edee246d1e44c462da26b2d9a43a8d9e499d353 (patch)
tree73fa86e8e0331b7f5f02bb141c07ae8ddd5a6de4
parent6cbb431459e9a0db73264c4144937a136fdb5b83 (diff)
add create command to generate new secret files
closer in parity to kasi.sh now
-rw-r--r--kasi.el37
1 files changed, 34 insertions, 3 deletions
diff --git a/kasi.el b/kasi.el
index 1031afd..4b6bd19 100644
--- a/kasi.el
+++ b/kasi.el
@@ -42,6 +42,17 @@
42 :type '(string) 42 :type '(string)
43 :group 'kasi) 43 :group 'kasi)
44 44
45;;;###autoload
46(defcustom kasi-template "\
47; -*- mode: lisp -*-
48((password \"%s\")
49 (username \"%s\")
50 (email \"\")
51 (totp \"\")
52 (extra-notes \"\"))\n"
53 "Template that gets filled in to newly created secret files.
54Two %s are needed for password and username for now.")
55
45(defvar kasi-version "1.0") 56(defvar kasi-version "1.0")
46 57
47(defun kasi--filename-short (file) 58(defun kasi--filename-short (file)
@@ -93,32 +104,52 @@ Uses /dev/urandom for cryptographic security."
93 charset-len)))))) 104 charset-len))))))
94 result)) 105 result))
95 106
107(defun kasi--edit (file)
108 "Edits secret file."
109 (find-file-other-window file))
110
111(defun kasi--create (file)
112 "Creates secret file."
113 (let* ((filename (format "%s/%s%s"
114 kasi-dir file kasi-extension)))
115 (mkdir (format "%s/%s"
116 kasi-dir
117 (car (f-split file)))
118 t)
119 (with-temp-file filename
120 (insert (format kasi-template
121 (kasi-generate-password)
122 (kasi-generate-username))))
123 (kasi--edit filename)))
124
96;;;###autoload 125;;;###autoload
97(defun kasi-generate-password (&optional length) 126(defun kasi-generate-password (&optional length)
98 "Generate a random password of LENGTH (default 32)." 127 "Generate a random password of LENGTH (default 32)."
99 (interactive "P") 128 (interactive "P")
100 (let ((charset "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"!#$%&'()*+,-./:;<=>?@[]^_`{|}~")) 129 (let ((charset "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"!#$%&'()*+,-./:;<=>?@[]^_`{|}~"))
101 (message (kasi--random-string (or length 32) charset)))) 130 (message "%s" (kasi--random-string (or length 32) charset))))
102 131
103;;;###autoload 132;;;###autoload
104(defun kasi-generate-username (&optional length) 133(defun kasi-generate-username (&optional length)
105 "Generate a random username of LENGTH (default 12)." 134 "Generate a random username of LENGTH (default 12)."
106 (interactive "P") 135 (interactive "P")
107 (let ((charset "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")) 136 (let ((charset "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"))
108 (message (kasi--random-string (or length 12) charset)))) 137 (message "%s" (kasi--random-string (or length 12) charset))))
109 138
110;;;###autoload 139;;;###autoload
111(defun kasi (command file) 140(defun kasi (command file)
112 "Invoke the kasi secret manager." 141 "Invoke the kasi secret manager."
113 (interactive (list (intern (completing-read "Command: " 142 (interactive (list (intern (completing-read "Command: "
114 '(edit 143 '(edit
144 create
115 password 145 password
116 username 146 username
117 email 147 email
118 totp))) 148 totp)))
119 (kasi--filename))) 149 (kasi--filename)))
120 (pcase command 150 (pcase command
121 ('edit (find-file-other-window file)) 151 ('edit (kasi--edit file))
152 ('create (kasi--create file))
122 ('totp (kasi--totp file)) 153 ('totp (kasi--totp file))
123 ((or 'password 'username 'email) 154 ((or 'password 'username 'email)
124 (progn 155 (progn