diff options
| author | Vineet Kumar <git@vineetk.net> | 2026-05-22 17:16:59 -0400 |
|---|---|---|
| committer | Vineet Kumar <git@vineetk.net> | 2026-05-22 17:16:59 -0400 |
| commit | 2edee246d1e44c462da26b2d9a43a8d9e499d353 (patch) | |
| tree | 73fa86e8e0331b7f5f02bb141c07ae8ddd5a6de4 | |
| parent | 6cbb431459e9a0db73264c4144937a136fdb5b83 (diff) | |
add create command to generate new secret files
closer in parity to kasi.sh now
| -rw-r--r-- | kasi.el | 37 |
1 files changed, 34 insertions, 3 deletions
| @@ -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. | ||
| 54 | Two %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 | 147 | ||
| 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 |
