mirror of
https://github.com/getAlby/hub.git
synced 2026-08-13 12:33:39 +02:00
69 lines
2.2 KiB
Go
69 lines
2.2 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/getAlby/go-nostr"
|
|
"github.com/getAlby/hub/events"
|
|
"github.com/getAlby/hub/logger"
|
|
)
|
|
|
|
type deleteAppConsumer struct {
|
|
events.EventSubscriber
|
|
walletPubkey string
|
|
pool *nostr.SimplePool
|
|
cancelSubscription func()
|
|
svc *service
|
|
}
|
|
|
|
// When an app is deleted, unsubscribe from events for that app on the relay
|
|
// and publish a deletion event for that app's info event
|
|
func (s *deleteAppConsumer) ConsumeEvent(ctx context.Context, event *events.Event, globalProperties map[string]interface{}) {
|
|
if event.Event != "nwc_app_deleted" {
|
|
return
|
|
}
|
|
properties, ok := event.Properties.(map[string]interface{})
|
|
if !ok {
|
|
logger.Logger.WithField("event", event).Error("Failed to cast event.Properties to map")
|
|
return
|
|
}
|
|
id, ok := properties["id"].(uint)
|
|
if !ok {
|
|
logger.Logger.WithField("event", event).Error("missing id in properties event")
|
|
return
|
|
}
|
|
|
|
walletPrivKey, err := s.svc.keys.GetAppWalletKey(id)
|
|
if err != nil {
|
|
logger.Logger.WithError(err).WithField("id", id).Error("Failed to calculate app wallet priv key")
|
|
return
|
|
}
|
|
walletPubKey, err := nostr.GetPublicKey(walletPrivKey)
|
|
if err != nil {
|
|
logger.Logger.WithError(err).WithField("id", id).Error("Failed to calculate app wallet pub key")
|
|
return
|
|
}
|
|
// Note: for legacy apps this check will always return false as the wallet pubkey
|
|
// generated by the id will not match the master key which is used for all legacy apps
|
|
if s.walletPubkey == walletPubKey {
|
|
// no longer need to listen to events for this wallet
|
|
s.cancelSubscription()
|
|
|
|
// remove this consumer as subscriber in eventPublisher
|
|
s.svc.eventPublisher.RemoveSubscriber(s)
|
|
|
|
// try to delete info event from relays (non-critical if it fails)
|
|
// get nip47 event info for this app wallet key
|
|
nip47InfoEvent, err := s.svc.GetNip47Service().GetNip47Info(ctx, s.pool, s.walletPubkey)
|
|
if err != nil {
|
|
logger.Logger.WithError(err).Error("Could not get nip47 info event")
|
|
return
|
|
}
|
|
if nip47InfoEvent != nil {
|
|
err = s.svc.nip47Service.PublishNip47InfoDeletion(ctx, s.pool, walletPubKey, walletPrivKey, nip47InfoEvent.ID)
|
|
if err != nil {
|
|
logger.Logger.WithError(err).WithField("event", event).Error("Failed to publish nip47 info deletion")
|
|
}
|
|
}
|
|
}
|
|
}
|