mirror of
https://github.com/fiatjaf/nak.git
synced 2025-08-31 22:10:47 -04:00
nak outbox
This commit is contained in:
65
main.go
65
main.go
@@ -2,9 +2,15 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"net/textproto"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/fiatjaf/cli/v3"
|
||||
"github.com/nbd-wtf/go-nostr"
|
||||
"github.com/nbd-wtf/go-nostr/sdk"
|
||||
"github.com/nbd-wtf/go-nostr/sdk/hints/memoryh"
|
||||
)
|
||||
|
||||
var version string = "debug"
|
||||
@@ -30,9 +36,15 @@ var app = &cli.Command{
|
||||
serve,
|
||||
encrypt,
|
||||
decrypt,
|
||||
outbox,
|
||||
},
|
||||
Version: version,
|
||||
Flags: []cli.Flag{
|
||||
&cli.StringFlag{
|
||||
Name: "config-path",
|
||||
Hidden: true,
|
||||
Persistent: true,
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "quiet",
|
||||
Usage: "do not print logs and info messages to stderr, use -qq to also not print anything to stdout",
|
||||
@@ -50,6 +62,59 @@ var app = &cli.Command{
|
||||
},
|
||||
},
|
||||
},
|
||||
Before: func(ctx context.Context, c *cli.Command) error {
|
||||
configPath := c.String("config-path")
|
||||
if configPath == "" {
|
||||
if home, err := os.UserHomeDir(); err == nil {
|
||||
configPath = filepath.Join(home, ".config/nak")
|
||||
}
|
||||
}
|
||||
if configPath != "" {
|
||||
hintsFilePath = filepath.Join(configPath, "outbox/hints.db")
|
||||
}
|
||||
if hintsFilePath != "" {
|
||||
if _, err := os.Stat(hintsFilePath); !os.IsNotExist(err) {
|
||||
hintsFileExists = true
|
||||
}
|
||||
}
|
||||
|
||||
if hintsFilePath != "" {
|
||||
if data, err := os.ReadFile(hintsFilePath); err == nil {
|
||||
hintsdb := memoryh.NewHintDB()
|
||||
if err := json.Unmarshal(data, &hintsdb); err == nil {
|
||||
sys = sdk.NewSystem(
|
||||
sdk.WithHintsDB(hintsdb),
|
||||
)
|
||||
goto systemOperational
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sys = sdk.NewSystem()
|
||||
|
||||
systemOperational:
|
||||
sys.Pool = nostr.NewSimplePool(context.Background(),
|
||||
nostr.WithAuthorKindQueryMiddleware(sys.TrackQueryAttempts),
|
||||
nostr.WithEventMiddleware(sys.TrackEventHints),
|
||||
nostr.WithRelayOptions(
|
||||
nostr.WithRequestHeader(http.Header{textproto.CanonicalMIMEHeaderKey("user-agent"): {"nak/b"}}),
|
||||
),
|
||||
)
|
||||
|
||||
return nil
|
||||
},
|
||||
After: func(ctx context.Context, c *cli.Command) error {
|
||||
// save hints database on exit
|
||||
if hintsFileExists {
|
||||
data, err := json.Marshal(sys.Hints)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return os.WriteFile(hintsFilePath, data, 0644)
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
Reference in New Issue
Block a user