identity.go raw
1 package neo4j
2
3 import (
4 "fmt"
5
6 "next.orly.dev/pkg/nostr/crypto/keys"
7 )
8
9 // Relay identity methods
10 // We use the marker system to store the relay's private key
11
12 const relayIdentityMarkerKey = "relay_identity_secret"
13
14 // GetRelayIdentitySecret retrieves the relay's identity secret key
15 func (n *N) GetRelayIdentitySecret() (skb []byte, err error) {
16 return n.GetMarker(relayIdentityMarkerKey)
17 }
18
19 // SetRelayIdentitySecret sets the relay's identity secret key
20 func (n *N) SetRelayIdentitySecret(skb []byte) error {
21 return n.SetMarker(relayIdentityMarkerKey, skb)
22 }
23
24 // GetOrCreateRelayIdentitySecret retrieves or creates the relay identity
25 func (n *N) GetOrCreateRelayIdentitySecret() (skb []byte, err error) {
26 skb, err = n.GetRelayIdentitySecret()
27 if err == nil {
28 return skb, nil
29 }
30
31 // Generate new identity
32 skb, err = keys.GenerateSecretKey()
33 if err != nil {
34 return nil, fmt.Errorf("failed to generate identity: %w", err)
35 }
36
37 // Store it
38 if err = n.SetRelayIdentitySecret(skb); err != nil {
39 return nil, fmt.Errorf("failed to store identity: %w", err)
40 }
41
42 n.Logger.Infof("generated new relay identity")
43 return skb, nil
44 }
45