Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48c6739d25 | ||
|
|
b837dcb5f0 |
25
app/main.go
25
app/main.go
@@ -23,6 +23,10 @@ import (
|
|||||||
"next.orly.dev/pkg/protocol/nip43"
|
"next.orly.dev/pkg/protocol/nip43"
|
||||||
"next.orly.dev/pkg/protocol/publish"
|
"next.orly.dev/pkg/protocol/publish"
|
||||||
"next.orly.dev/pkg/bunker"
|
"next.orly.dev/pkg/bunker"
|
||||||
|
"next.orly.dev/pkg/cashu/issuer"
|
||||||
|
"next.orly.dev/pkg/cashu/keyset"
|
||||||
|
"next.orly.dev/pkg/cashu/verifier"
|
||||||
|
cashuiface "next.orly.dev/pkg/interfaces/cashu"
|
||||||
"next.orly.dev/pkg/ratelimit"
|
"next.orly.dev/pkg/ratelimit"
|
||||||
"next.orly.dev/pkg/spider"
|
"next.orly.dev/pkg/spider"
|
||||||
dsync "next.orly.dev/pkg/sync"
|
dsync "next.orly.dev/pkg/sync"
|
||||||
@@ -162,6 +166,27 @@ func Run(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize Cashu access token system when ACL is active
|
||||||
|
if cfg.ACLMode != "none" {
|
||||||
|
// Create keyset manager with memory store (keys are regenerated each restart)
|
||||||
|
keysetStore := keyset.NewMemoryStore()
|
||||||
|
keysetManager := keyset.NewManager(keysetStore, keyset.DefaultActiveWindow, keyset.DefaultVerifyWindow)
|
||||||
|
|
||||||
|
// Initialize keyset manager (creates initial keyset)
|
||||||
|
if err := keysetManager.Init(); err != nil {
|
||||||
|
log.E.F("failed to initialize Cashu keyset manager: %v", err)
|
||||||
|
} else {
|
||||||
|
// Create issuer with permissive checker (ACL handles authorization)
|
||||||
|
issuerCfg := issuer.DefaultConfig()
|
||||||
|
l.CashuIssuer = issuer.New(keysetManager, cashuiface.AllowAllChecker{}, issuerCfg)
|
||||||
|
|
||||||
|
// Create verifier for validating tokens
|
||||||
|
l.CashuVerifier = verifier.New(keysetManager, cashuiface.AllowAllChecker{}, verifier.DefaultConfig())
|
||||||
|
|
||||||
|
log.I.F("Cashu access token system enabled (ACL mode: %s)", cfg.ACLMode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize spider manager based on mode (only for Badger backend)
|
// Initialize spider manager based on mode (only for Badger backend)
|
||||||
if badgerDB, ok := db.(*database.D); ok && cfg.SpiderMode != "none" {
|
if badgerDB, ok := db.(*database.D); ok && cfg.SpiderMode != "none" {
|
||||||
if l.spiderManager, err = spider.New(ctx, badgerDB, l.publishers, cfg.SpiderMode); chk.E(err) {
|
if l.spiderManager, err = spider.New(ctx, badgerDB, l.publishers, cfg.SpiderMode); chk.E(err) {
|
||||||
|
|||||||
@@ -355,7 +355,7 @@ func decodeTagElement(r io.Reader, resolver SerialResolver) (elem []byte, err er
|
|||||||
return elem, nil
|
return elem, nil
|
||||||
|
|
||||||
case TagElementPubkeySerial:
|
case TagElementPubkeySerial:
|
||||||
// Pubkey serial: 5 bytes -> lookup full pubkey -> return as 32-byte binary
|
// Pubkey serial: 5 bytes -> lookup full pubkey -> return as 33-byte binary
|
||||||
serial, err := readUint40(r)
|
serial, err := readUint40(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -364,11 +364,14 @@ func decodeTagElement(r io.Reader, resolver SerialResolver) (elem []byte, err er
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// Return as 32-byte binary (nostr library optimized format)
|
// Return as 33-byte binary (32 bytes + null terminator) for tag.Marshal detection
|
||||||
return pubkey, nil
|
result := make([]byte, 33)
|
||||||
|
copy(result, pubkey)
|
||||||
|
result[32] = 0 // null terminator
|
||||||
|
return result, nil
|
||||||
|
|
||||||
case TagElementEventSerial:
|
case TagElementEventSerial:
|
||||||
// Event serial: 5 bytes -> lookup full event ID -> return as 32-byte binary
|
// Event serial: 5 bytes -> lookup full event ID -> return as 33-byte binary
|
||||||
serial, err := readUint40(r)
|
serial, err := readUint40(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -377,15 +380,20 @@ func decodeTagElement(r io.Reader, resolver SerialResolver) (elem []byte, err er
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// Return as 32-byte binary
|
// Return as 33-byte binary (32 bytes + null terminator) for tag.Marshal detection
|
||||||
return eventId, nil
|
result := make([]byte, 33)
|
||||||
|
copy(result, eventId)
|
||||||
|
result[32] = 0 // null terminator
|
||||||
|
return result, nil
|
||||||
|
|
||||||
case TagElementEventIdFull:
|
case TagElementEventIdFull:
|
||||||
// Full event ID: 32 bytes (for unknown/forward references)
|
// Full event ID: 32 bytes (for unknown/forward references)
|
||||||
elem = make([]byte, 32)
|
// Return as 33-byte binary (32 bytes + null terminator) for tag.Marshal detection
|
||||||
if _, err = io.ReadFull(r, elem); err != nil {
|
elem = make([]byte, 33)
|
||||||
|
if _, err = io.ReadFull(r, elem[:32]); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
elem[32] = 0 // null terminator
|
||||||
return elem, nil
|
return elem, nil
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
v0.44.0
|
v0.44.2
|
||||||
|
|||||||
Reference in New Issue
Block a user