sign_message_controller.go raw

   1  package controllers
   2  
   3  import (
   4  	"context"
   5  
   6  	"github.com/getAlby/go-nostr"
   7  	"github.com/getAlby/hub/logger"
   8  	"github.com/getAlby/hub/nip47/models"
   9  	"github.com/sirupsen/logrus"
  10  )
  11  
  12  type signMessageParams struct {
  13  	Message string `json:"message"`
  14  }
  15  
  16  type signMessageResponse struct {
  17  	Message   string `json:"message"`
  18  	Signature string `json:"signature"`
  19  }
  20  
  21  func (controller *nip47Controller) HandleSignMessageEvent(ctx context.Context, nip47Request *models.Request, requestEventId uint, publishResponse publishFunc) {
  22  	signParams := &signMessageParams{}
  23  	resp := decodeRequest(nip47Request, signParams)
  24  	if resp != nil {
  25  		publishResponse(resp, nostr.Tags{})
  26  		return
  27  	}
  28  
  29  	logger.Logger.WithFields(logrus.Fields{
  30  		"request_event_id": requestEventId,
  31  	}).Info("Signing message")
  32  
  33  	signature, err := controller.lnClient.SignMessage(ctx, signParams.Message)
  34  	if err != nil {
  35  		logger.Logger.WithFields(logrus.Fields{
  36  			"request_event_id": requestEventId,
  37  		}).WithError(err).Error("Failed to sign message")
  38  		publishResponse(&models.Response{
  39  			ResultType: nip47Request.Method,
  40  			Error:      mapNip47Error(err),
  41  		}, nostr.Tags{})
  42  		return
  43  	}
  44  
  45  	responsePayload := signMessageResponse{
  46  		Message:   signParams.Message,
  47  		Signature: signature,
  48  	}
  49  
  50  	publishResponse(&models.Response{
  51  		ResultType: nip47Request.Method,
  52  		Result:     responsePayload,
  53  	}, nostr.Tags{})
  54  }
  55