Skip to content

Commit

Permalink
chore(SPV-846): refactor errors
Browse files Browse the repository at this point in the history
  • Loading branch information
pawellewandowski98 committed Jun 26, 2024
1 parent 608726b commit 740dcf6
Show file tree
Hide file tree
Showing 7 changed files with 104 additions and 99 deletions.
14 changes: 6 additions & 8 deletions authentication.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@ package walletclient
import (
"encoding/hex"
"fmt"
"github.com/bitcoin-sv/spv-wallet/spverrors"
"net/http"
"time"

"github.com/bitcoin-sv/spv-wallet-go-client/utils"
"github.com/bitcoin-sv/spv-wallet/models"
"github.com/bitcoin-sv/spv-wallet/models/apierrors"
"github.com/bitcoinschema/go-bitcoin/v2"
"github.com/libsv/go-bk/bec"
"github.com/libsv/go-bk/bip32"
Expand All @@ -19,7 +17,7 @@ import (
)

// SetSignature will set the signature on the header for the request
func setSignature(header *http.Header, xPriv *bip32.ExtendedKey, bodyString string) *spverrors.SPVError {
func setSignature(header *http.Header, xPriv *bip32.ExtendedKey, bodyString string) *models.SPVError {
// Create the signature
authData, err := createSignature(xPriv, bodyString)
if err != nil {
Expand All @@ -29,7 +27,9 @@ func setSignature(header *http.Header, xPriv *bip32.ExtendedKey, bodyString stri
// Set the auth header
header.Set(models.AuthHeader, authData.XPub)

return setSignatureHeaders(header, authData)
setSignatureHeaders(header, authData)

return nil
}

// GetSignedHex will sign all the inputs using the given xPriv key
Expand Down Expand Up @@ -135,7 +135,7 @@ func getUnlockingScript(tx *bt.Tx, inputIndex uint32, privateKey *bec.PrivateKey
func createSignature(xPriv *bip32.ExtendedKey, bodyString string) (payload *models.AuthPayload, err error) {
// No key?
if xPriv == nil {
err = apierrors.ErrMissingXPriv
err = CreateErrorResponse("error-unauthorized-missing-xpriv", "missing xpriv")
return
}

Expand Down Expand Up @@ -200,7 +200,7 @@ func getSigningMessage(xPub string, auth *models.AuthPayload) string {
return fmt.Sprintf("%s%s%s%d", xPub, auth.AuthHash, auth.AuthNonce, auth.AuthTime)
}

func setSignatureHeaders(header *http.Header, authData *models.AuthPayload) *spverrors.SPVError {
func setSignatureHeaders(header *http.Header, authData *models.AuthPayload) {
// Create the auth header hash
header.Set(models.AuthHeaderHash, authData.AuthHash)

Expand All @@ -212,6 +212,4 @@ func setSignatureHeaders(header *http.Header, authData *models.AuthPayload) *spv

// Set the signature
header.Set(models.AuthSignature, authData.Signature)

return nil
}
22 changes: 15 additions & 7 deletions errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package walletclient
import (
"encoding/json"
"errors"
"github.com/bitcoin-sv/spv-wallet/spverrors"
"github.com/bitcoin-sv/spv-wallet/models"
"net/http"
)

Expand All @@ -14,34 +14,42 @@ var ErrAdminKey = errors.New("an admin key must be set to be able to create an x
var ErrNoClientSet = errors.New("no transport client set")

// WrapError wraps an error into SPVError
func WrapError(err error) *spverrors.SPVError {
func WrapError(err error) *models.SPVError {
if err == nil {
return nil
}

return &spverrors.SPVError{
return &models.SPVError{
StatusCode: http.StatusInternalServerError,
Message: err.Error(),
Code: spverrors.UnknownErrorCode,
Code: models.UnknownErrorCode,
}
}

// WrapResponseError wraps a http response into SPVError
func WrapResponseError(res *http.Response) *spverrors.SPVError {
func WrapResponseError(res *http.Response) *models.SPVError {
if res == nil {
return nil
}

var resError *spverrors.ResponseError
var resError *models.ResponseError

err := json.NewDecoder(res.Body).Decode(&resError)
if err != nil {
return WrapError(err)
}

return &spverrors.SPVError{
return &models.SPVError{
StatusCode: res.StatusCode,
Code: resError.Code,
Message: resError.Message,
}
}

func CreateErrorResponse(code string, message string) *models.SPVError {
return &models.SPVError{
StatusCode: http.StatusInternalServerError,
Code: code,
Message: message,
}
}
2 changes: 1 addition & 1 deletion examples/go.mod

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 3 additions & 6 deletions go.mod

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 740dcf6

Please sign in to comment.