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