mirror of
https://github.com/fiatjaf/nak.git
synced 2025-12-12 10:08:50 +00:00
view: nsec, ncryptsec, event signing things.
This commit is contained in:
82
view/main.go
82
view/main.go
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user