commit 203d4e89a1a00215a3cb3552df2aac0e14dd9b95
| author | 斟酌 鵬兄 <tgckpg@gmail.com> |
| date | 2026-06-27T09:11:15Z |
| subject | accept input from stdin |
commit 203d4e89a1a00215a3cb3552df2aac0e14dd9b95
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date: 2026-06-27T09:11:15Z
accept input from stdin
---
main.go | 181 +++++++++++++++++++++++++++++++++++-----------------------------
1 file changed, 98 insertions(+), 83 deletions(-)
diff --git a/main.go b/main.go
index e85329f..0e7d8a7 100644
--- a/main.go
+++ b/main.go
@@ -1,83 +1,98 @@
-package main
-
-import (
- "errors"
- "fmt"
- "os"
- "path/filepath"
- "strings"
-
- "github.com/danieljoos/wincred"
-)
-
-const (
- CRED_NAME = "RBASH-KSTORE"
- SECRET_NAME = "_AUTH_SECRET"
-)
-
-func usage(stdfd *os.File) {
- _name := filepath.Base(os.Args[0])
- _space := strings.Repeat(" ", len(_name))
- fmt.Fprintf(stdfd, "Usage: %s get\n", _name)
- fmt.Fprintf(stdfd, " %s set passphrase\n", _space)
- fmt.Fprintf(stdfd, " %s del\n", _space)
- fmt.Fprintf(stdfd, " %s help\n", _space)
-}
-
-func getAuthSecret() (*wincred.GenericCredential, error) {
- cred, err := wincred.GetGenericCredential(CRED_NAME)
- return cred, err
-}
-
-func delAuthSecret() error {
- cred, _ := getAuthSecret()
- if cred == nil {
- return nil
- }
- return cred.Delete()
-}
-
-func setAuthSecret(newSecret string) error {
- cred, _ := getAuthSecret()
- if cred == nil {
- cred = wincred.NewGenericCredential(CRED_NAME)
- }
-
- cred.CredentialBlob = []byte(newSecret)
- return cred.Write()
-}
-
-func main() {
- if len(os.Args) < 2 {
- usage(os.Stderr)
- os.Exit(1)
- }
-
- var err error
- switch os.Args[1] {
- case "get":
- cred, _err := getAuthSecret()
- if _err == nil {
- fmt.Print(string(cred.CredentialBlob))
- os.Exit(0)
- }
- err = _err
- case "set":
- if len(os.Args[2:]) < 1 {
- err = errors.New("passphrase is required")
- } else {
- err = setAuthSecret(os.Args[2])
- }
- case "del":
- err = delAuthSecret()
- case "help":
- usage(os.Stdout)
- }
-
- if err == nil {
- os.Exit(0)
- }
-
- fmt.Fprintln(os.Stderr, err)
- os.Exit(1)
-}
+package main
+
+import (
+ "errors"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "github.com/danieljoos/wincred"
+)
+
+const (
+ CRED_NAME = "RBASH-KSTORE"
+)
+
+func usage(stdfd *os.File) {
+ name := filepath.Base(os.Args[0])
+ space := strings.Repeat(" ", len(name))
+
+ fmt.Fprintf(stdfd, "Usage: %s get\n", name)
+ fmt.Fprintf(stdfd, " %s set < secret\n", space)
+ fmt.Fprintf(stdfd, " %s del\n", space)
+ fmt.Fprintf(stdfd, " %s help\n", space)
+}
+
+func getAuthSecret() (*wincred.GenericCredential, error) {
+ return wincred.GetGenericCredential(CRED_NAME)
+}
+
+func delAuthSecret() error {
+ cred, _ := getAuthSecret()
+ if cred == nil {
+ return nil
+ }
+ return cred.Delete()
+}
+
+func setAuthSecret(newSecret []byte) error {
+ newSecret = []byte(strings.TrimRight(string(newSecret), "\r\n"))
+ if len(newSecret) == 0 {
+ return errors.New("empty passphrase")
+ }
+
+ cred, _ := getAuthSecret()
+ if cred == nil {
+ cred = wincred.NewGenericCredential(CRED_NAME)
+ }
+
+ cred.CredentialBlob = newSecret
+ return cred.Write()
+}
+
+func main() {
+ if len(os.Args) < 2 {
+ usage(os.Stderr)
+ os.Exit(1)
+ }
+
+ var err error
+
+ switch os.Args[1] {
+ case "get":
+ var cred *wincred.GenericCredential
+ cred, err = getAuthSecret()
+ if err == nil {
+ fmt.Print(string(cred.CredentialBlob))
+ }
+
+ case "set":
+ if len(os.Args) > 2 {
+ err = errors.New("do not pass passphrase as an argument; pipe it on stdin")
+ break
+ }
+
+ var b []byte
+ b, err = io.ReadAll(os.Stdin)
+ if err == nil {
+ err = setAuthSecret(b)
+ }
+
+ case "del":
+ err = delAuthSecret()
+
+ case "help", "-h", "--help":
+ usage(os.Stdout)
+
+ default:
+ usage(os.Stderr)
+ err = fmt.Errorf("unknown command: %s", os.Args[1])
+ }
+
+ if err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+}