From a152d7f63359e411a3adedbc2e6258ba587b1419 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Thu, 23 Apr 2026 22:06:13 -0300 Subject: [PATCH] verify: debug mode (-vv) prints useful info about event serialization. --- go.mod | 4 +--- go.sum | 2 ++ nsite.go | 11 ++++++----- verify.go | 25 +++++++++++++++++++------ 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/go.mod b/go.mod index c24350d..493918b 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/fiatjaf/nak go 1.25 require ( - fiatjaf.com/nostr v0.0.0-20260419231400-94ea4328184f + fiatjaf.com/nostr v0.0.0-20260424011647-744fb0702ced github.com/AlecAivazis/survey/v2 v2.3.7 github.com/bep/debounce v1.2.1 github.com/btcsuite/btcd/btcec/v2 v2.3.6 @@ -111,5 +111,3 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect rsc.io/qr v0.2.0 // indirect ) - -replace fiatjaf.com/nostr => ../nostrlib diff --git a/go.sum b/go.sum index 9942b91..5aa0dab 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ fiatjaf.com/lib v0.3.7 h1:mXZOn7NrUcjSdy4oNvwQyAmes7Ueb+Zr5hjqMIe2dxI= fiatjaf.com/lib v0.3.7/go.mod h1:UlHaZvPHj25PtKLh9GjZkUHRmQ2xZ8Jkoa4VRaLeeQ8= +fiatjaf.com/nostr v0.0.0-20260424011647-744fb0702ced h1:jEJbi9fHt5RIDVDw6aCmEld2dtOYTGfFAyXARTcQ+8k= +fiatjaf.com/nostr v0.0.0-20260424011647-744fb0702ced/go.mod h1:b1EIUDnd133Ie8Pg8O/biaKdFyCMz28aD4n64g1GqvM= github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ= github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo= github.com/FastFilter/xorfilter v0.2.1 h1:lbdeLG9BdpquK64ZsleBS8B4xO/QW1IM0gMzF7KaBKc= diff --git a/nsite.go b/nsite.go index 135afa2..d97c0b0 100644 --- a/nsite.go +++ b/nsite.go @@ -13,6 +13,7 @@ import ( "fiatjaf.com/nostr/nip19" "fiatjaf.com/nostr/nip5a" "fiatjaf.com/nostr/nipb0/blossom" + "github.com/fatih/color" "github.com/urfave/cli/v3" ) @@ -112,7 +113,7 @@ var nsite = &cli.Command{ } if !c.Bool("yes") { - log("files:\n") + log("%s\n", color.CyanString("files:")) if err := filepath.WalkDir(dir, func(path string, d os.DirEntry, err error) error { if err != nil { @@ -127,15 +128,15 @@ var nsite = &cli.Command{ return fmt.Errorf("failed to get relative path for %s: %w", path, err) } - log(" /%s\n", filepath.ToSlash(relPath)) + log(" %s\n", color.GreenString("/%s", filepath.ToSlash(relPath))) return nil }); err != nil { return err } - log("blossom servers:\n") + log("%s\n", color.CyanString("blossom servers:")) for _, server := range blossomServers { - log(" %s\n", server) + log(" %s\n", color.YellowString(server)) } if !askConfirmation("upload nsite and publish manifest? [y/n] ") { return fmt.Errorf("aborted") @@ -163,7 +164,7 @@ var nsite = &cli.Command{ return fmt.Errorf("failed to upload %s to %s: %w", path, server, err) } hhash = bd.SHA256 - log("uploaded %s to %s as %s\n", path, server, hhash) + log("uploaded %s to %s as %s\n", color.GreenString(path), color.YellowString(server), color.CyanString(hhash)) } var hash [32]byte diff --git a/verify.go b/verify.go index 9f2c673..aa8efc8 100644 --- a/verify.go +++ b/verify.go @@ -4,6 +4,7 @@ import ( "context" "fiatjaf.com/nostr" + "github.com/fatih/color" "github.com/urfave/cli/v3" ) @@ -27,23 +28,35 @@ it outputs nothing if the verification is successful.`, if err := json.Unmarshal([]byte(stdinEvent), &evt); err != nil { ctx = lineProcessingError(ctx, "invalid event: %s", err) - logverbose("<>: invalid event.\n", evt.ID.Hex()) + logverbose("%s\n", color.RedString("<>: invalid event.")) continue } - if evt.GetID() != evt.ID { - ctx = lineProcessingError(ctx, "invalid .id, expected %s, got %s", evt.GetID(), evt.ID) - logverbose("%s: invalid id.\n", evt.ID.Hex()) + impliedID := evt.GetID() + idsMatch := impliedID == evt.ID + logverbose( + "%s\n%s %s\n%s %s\n%s %s\n%s %s\n%s %s\n", + color.CyanString("verifying event:"), + color.BlueString(" event: "), stdinEvent, + color.BlueString(" given id: "), color.YellowString("%s", evt.ID), + color.BlueString(" serialized:"), string(evt.Serialize()), + color.BlueString(" implied id:"), color.YellowString("%s", impliedID), + color.BlueString(" ids match: "), color.New(map[bool]color.Attribute{true: color.FgGreen, false: color.FgRed}[idsMatch]).Sprint(idsMatch), + ) + + if impliedID != evt.ID { + ctx = lineProcessingError(ctx, "invalid .id, expected %s, got %s", impliedID, evt.ID) + logverbose("%s\n", color.RedString("invalid id: %s", evt.ID.Hex())) continue } if !evt.VerifySignature() { ctx = lineProcessingError(ctx, "invalid signature") - logverbose("%s: invalid signature.\n", evt.ID.Hex()) + logverbose("%s\n", color.RedString("invalid signature: %s", evt.ID.Hex())) continue } - logverbose("%s: valid.\n", evt.ID.Hex()) + logverbose("%s\n", color.GreenString("valid: %s", evt.ID.Hex())) } exitIfLineProcessingError(ctx)