Files
nostr-webhost/hostr/cmd/keystore/keystore.go
2023-09-28 00:44:09 +09:00

76 lines
1.4 KiB
Go

package keystore
import (
"errors"
"fmt"
"os"
"path/filepath"
"github.com/nbd-wtf/go-nostr"
"github.com/nbd-wtf/go-nostr/nip19"
"github.com/studiokaiji/nostr-webhost/hostr/cmd/paths"
)
const PATH = ".nostr_account_secret"
func SetSecret(key string) error {
// nsecから始まる場合はデコードする
if key[0:4] == "nsec" {
_, v, err := nip19.Decode(key)
if err != nil {
panic(err)
}
key = v.(string)
}
dir, err := paths.GetSettingsDirectory()
if err != nil {
return err
}
filePath := filepath.Join(dir, PATH)
if err != nil {
return err
}
// キーをファイルに書き込み
return os.WriteFile(filePath, []byte(key), 0644)
}
func ShowPublic() (string, string, error) {
hex, err := GetPublic()
if err != nil {
return "", "", err
}
npub, err := nip19.EncodePublicKey(hex)
fmt.Printf("npub: %s\nhex: %s\n", npub, hex)
return hex, npub, nil
}
func GetPublic() (string, error) {
secret, err := GetSecret()
if err != nil {
return "", err
}
hex, err := nostr.GetPublicKey(secret)
return hex, err
}
func GetSecret() (string, error) {
dir, err := paths.GetSettingsDirectory()
if err != nil {
return "", err
}
filePath := filepath.Join(dir, PATH)
if err != nil {
return "", err
}
secretBytes, err := os.ReadFile(filePath)
if err != nil {
return "", errors.New("Could not read secret")
}
return string(secretBytes), nil
}