33 lines
700 B
Go
33 lines
700 B
Go
package pkg
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"errors"
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/zalando/go-keyring"
|
|
)
|
|
|
|
func GetOrCreateClISecret() []byte {
|
|
// get password
|
|
secret, err := keyring.Get("ente-cli-cli", "ghost")
|
|
if err != nil {
|
|
if !errors.Is(err, keyring.ErrNotFound) {
|
|
log.Fatal(fmt.Errorf("error getting password from keyring: %w", err))
|
|
}
|
|
key := make([]byte, 32)
|
|
_, err = rand.Read(key)
|
|
if err != nil {
|
|
log.Fatal(fmt.Errorf("error generating key: %w", err))
|
|
}
|
|
secret = string(key)
|
|
keySetErr := keyring.Set("ente-cli-cli", "ghost", string(secret))
|
|
if keySetErr != nil {
|
|
log.Fatal(fmt.Errorf("error setting password in keyring: %w", keySetErr))
|
|
}
|
|
|
|
}
|
|
return []byte(secret)
|
|
}
|