view: nsec, ncryptsec, event signing things.

This commit is contained in:
fiatjaf
2025-11-27 06:40:23 -03:00
parent 2b189756d1
commit eb6fdfdd39
5 changed files with 100 additions and 19 deletions

View File

@@ -1,9 +1,15 @@
package main
import (
"encoding/hex"
"os"
"strings"
"time"
"fiatjaf.com/lib/debouncer"
"fiatjaf.com/nostr"
"fiatjaf.com/nostr/nip19"
"fiatjaf.com/nostr/nip49"
"github.com/therecipe/qt/widgets"
)
@@ -11,6 +17,7 @@ var (
currentSec nostr.SecretKey
currentKeyer nostr.Keyer
statusLabel *widgets.QLabel
debounced = debouncer.New(800 * time.Millisecond)
)
func main() {
@@ -29,33 +36,87 @@ func main() {
// private key input
secLabel := widgets.NewQLabel2("private key (hex or nsec):", nil, 0)
mainLayout.AddWidget(secLabel, 0, 0)
secEdit := widgets.NewQLineEdit(nil)
mainLayout.AddWidget(secEdit, 0, 0)
secEdit.ConnectTextChanged(func(text string) {
secHBox := widgets.NewQHBoxLayout()
mainLayout.AddLayout(secHBox, 0)
secEdit := widgets.NewQLineEdit(nil)
secHBox.AddWidget(secEdit, 0, 0)
generateButton := widgets.NewQPushButton2("generate", nil)
secHBox.AddWidget(generateButton, 0, 0)
// password input
passwordHBox := widgets.NewQHBoxLayout()
passwordWidget := widgets.NewQWidget(nil, 0)
passwordWidget.SetLayout(passwordHBox)
passwordWidget.SetVisible(false)
mainLayout.AddWidget(passwordWidget, 0, 0)
passwordLabel := widgets.NewQLabel2("password:", nil, 0)
passwordHBox.AddWidget(passwordLabel, 0, 0)
secPasswordEdit := widgets.NewQLineEdit(nil)
secPasswordEdit.SetEchoMode(widgets.QLineEdit__Password)
passwordHBox.AddWidget(secPasswordEdit, 0, 0)
keyChanged := func(text string) {
text = strings.TrimSpace(text)
var sk nostr.SecretKey
var keyer nostr.Keyer
var err error
if text == "" {
currentSec = nostr.SecretKey{}
currentKeyer = nil
statusLabel.SetText("")
return
passwordWidget.SetVisible(false)
goto empty
}
sk, bunker, err := handleSecretKeyOrBunker(text)
if strings.HasPrefix(text, "ncryptsec1") {
passwordWidget.SetVisible(true)
password := secPasswordEdit.Text()
if password != "" {
sk, err = nip49.Decrypt(text, password)
if err != nil {
statusLabel.SetText("decryption failed: " + err.Error())
goto empty
}
text = hex.EncodeToString(sk[:])
} else {
goto empty
}
} else {
passwordWidget.SetVisible(false)
}
sk, keyer, err = handleSecretKeyOrBunker(text)
if err != nil {
statusLabel.SetText(err.Error())
currentSec = nostr.SecretKey{}
currentKeyer = nil
return
}
currentSec = sk
currentKeyer = bunker
currentKeyer = keyer
statusLabel.SetText("")
updateEvent()
return
empty:
currentSec = nostr.SecretKey{}
currentKeyer = nil
statusLabel.SetText("")
return
}
secEdit.ConnectTextChanged(keyChanged)
secPasswordEdit.ConnectTextChanged(keyChanged)
generateButton.ConnectClicked(func(bool) {
sk := nostr.Generate()
nsec := nip19.EncodeNsec(sk)
secEdit.SetText(nsec)
keyChanged(nsec)
})
tabWidget := widgets.NewQTabWidget(nil)
eventTab := setupEventTab()
reqTab := widgets.NewQWidget(nil, 0)
reqTab := setupReqTab()
tabWidget.AddTab(eventTab, "event")
tabWidget.AddTab(reqTab, "req")
@@ -67,6 +128,7 @@ func main() {
// initial render
updateEvent()
updateReq()
window.Show()
app.Exec()