diff --git a/controllers/keysend.ctrl.go b/controllers/keysend.ctrl.go index 1ae22a9..9ce3d52 100644 --- a/controllers/keysend.ctrl.go +++ b/controllers/keysend.ctrl.go @@ -82,7 +82,7 @@ func (controller *KeySendController) KeySend(c echo.Context) error { }) } - ok, err := controller.svc.BalanceCheck(c.Request().Context(), lnPayReq, userID) + resp, err := controller.svc.CheckPaymentAllowed(c.Request().Context(), lnPayReq, userID) if err != nil { c.Logger().Errorj( log.JSON{ @@ -93,7 +93,7 @@ func (controller *KeySendController) KeySend(c echo.Context) error { ) return c.JSON(http.StatusBadRequest, responses.BadArgumentsError) } - if !ok { + if resp != nil { c.Logger().Errorf("User does not have enough balance user_id:%v amount:%v", userID, lnPayReq.PayReq.NumSatoshis) return c.JSON(http.StatusBadRequest, responses.NotEnoughBalanceError) } diff --git a/controllers/payinvoice.ctrl.go b/controllers/payinvoice.ctrl.go index 69bc67e..2a67c72 100644 --- a/controllers/payinvoice.ctrl.go +++ b/controllers/payinvoice.ctrl.go @@ -97,7 +97,7 @@ func (controller *PayInvoiceController) PayInvoice(c echo.Context) error { } } - ok, err := controller.svc.BalanceCheck(c.Request().Context(), lnPayReq, userID) + resp, err := controller.svc.CheckPaymentAllowed(c.Request().Context(), lnPayReq, userID) if err != nil { c.Logger().Errorj( log.JSON{ @@ -108,7 +108,7 @@ func (controller *PayInvoiceController) PayInvoice(c echo.Context) error { ) return c.JSON(http.StatusBadRequest, responses.GeneralServerError) } - if !ok { + if resp != nil { c.Logger().Errorf("User does not have enough balance user_id:%v amount:%v", userID, lnPayReq.PayReq.NumSatoshis) return c.JSON(http.StatusBadRequest, responses.NotEnoughBalanceError) } diff --git a/controllers_v2/keysend.ctrl.go b/controllers_v2/keysend.ctrl.go index b2f4524..fd8229d 100644 --- a/controllers_v2/keysend.ctrl.go +++ b/controllers_v2/keysend.ctrl.go @@ -171,12 +171,12 @@ func (controller *KeySendController) SingleKeySend(c echo.Context, reqBody *KeyS HttpStatusCode: 400, } } - ok, err := controller.svc.BalanceCheck(c.Request().Context(), lnPayReq, userID) + resp, err := controller.svc.CheckPaymentAllowed(c.Request().Context(), lnPayReq, userID) if err != nil { controller.svc.Logger.Error(err) return nil, &responses.GeneralServerError } - if !ok { + if resp != nil { c.Logger().Errorf("User does not have enough balance user_id:%v amount:%v", userID, lnPayReq.PayReq.NumSatoshis) return nil, &responses.NotEnoughBalanceError } diff --git a/controllers_v2/payinvoice.ctrl.go b/controllers_v2/payinvoice.ctrl.go index 1724e81..473eff5 100644 --- a/controllers_v2/payinvoice.ctrl.go +++ b/controllers_v2/payinvoice.ctrl.go @@ -98,7 +98,7 @@ func (controller *PayInvoiceController) PayInvoice(c echo.Context) error { } lnPayReq.PayReq.NumSatoshis = amt } - ok, err := controller.svc.BalanceCheck(c.Request().Context(), lnPayReq, userID) + resp, err := controller.svc.CheckPaymentAllowed(c.Request().Context(), lnPayReq, userID) if err != nil { c.Logger().Errorj( log.JSON{ @@ -109,7 +109,7 @@ func (controller *PayInvoiceController) PayInvoice(c echo.Context) error { ) return err } - if !ok { + if resp != nil { c.Logger().Errorf("User does not have enough balance user_id:%v amount:%v", userID, lnPayReq.PayReq.NumSatoshis) return c.JSON(http.StatusInternalServerError, responses.NotEnoughBalanceError) } diff --git a/lib/responses/errors.go b/lib/responses/errors.go index 5a293fd..d8126ea 100644 --- a/lib/responses/errors.go +++ b/lib/responses/errors.go @@ -64,6 +64,13 @@ var NotEnoughBalanceError = ErrorResponse{ HttpStatusCode: 400, } +var TooMuchVolumeError = ErrorResponse{ + Error: true, + Code: 2, + Message: "transaction volume too high. please contact support for further assistance.", + HttpStatusCode: 400, +} + var AccountDeactivatedError = ErrorResponse{ Error: true, Code: 1, diff --git a/lib/service/user.go b/lib/service/user.go index a1e9a75..4614595 100644 --- a/lib/service/user.go +++ b/lib/service/user.go @@ -8,6 +8,7 @@ import ( "github.com/getAlby/lndhub.go/common" "github.com/getAlby/lndhub.go/db/models" + "github.com/getAlby/lndhub.go/lib/responses" "github.com/getAlby/lndhub.go/lib/security" "github.com/getAlby/lndhub.go/lnd" "github.com/uptrace/bun" @@ -121,17 +122,20 @@ func (svc *LndhubService) FindUserByLogin(ctx context.Context, login string) (*m return &user, nil } -func (svc *LndhubService) BalanceCheck(ctx context.Context, lnpayReq *lnd.LNPayReq, userId int64) (ok bool, err error) { +func (svc *LndhubService) CheckPaymentAllowed(ctx context.Context, lnpayReq *lnd.LNPayReq, userId int64) (result *responses.ErrorResponse, err error) { currentBalance, err := svc.CurrentUserBalance(ctx, userId) if err != nil { - return false, err + return nil, err } minimumBalance := lnpayReq.PayReq.NumSatoshis if svc.Config.FeeReserve { minimumBalance += svc.CalcFeeLimit(lnpayReq.PayReq.Destination, lnpayReq.PayReq.NumSatoshis) } - return currentBalance >= minimumBalance, nil + if currentBalance >= minimumBalance { + return &responses.NotEnoughBalanceError, nil + } + return nil, nil } func (svc *LndhubService) CalcFeeLimit(destination string, amount int64) int64 {