From 2a0b2c35d37bc4441ff790a1b1fbd6c181504a9a Mon Sep 17 00:00:00 2001 From: "mayur.popli" Date: Thu, 3 Apr 2025 18:59:38 +0530 Subject: [PATCH] fix: error module implementation --- pkg/plugin/implementation/decrypter/decrypter.go | 6 +++--- pkg/plugin/implementation/encrypter/encrypter.go | 8 ++++---- .../schemavalidator/schemavalidator.go | 16 ++++++++-------- pkg/plugin/implementation/signer/signer.go | 4 ++-- .../signvalidator/signvalidator.go | 13 ++++++------- 5 files changed, 23 insertions(+), 24 deletions(-) diff --git a/pkg/plugin/implementation/decrypter/decrypter.go b/pkg/plugin/implementation/decrypter/decrypter.go index 1141766..f03d438 100644 --- a/pkg/plugin/implementation/decrypter/decrypter.go +++ b/pkg/plugin/implementation/decrypter/decrypter.go @@ -26,18 +26,18 @@ func New(ctx context.Context) (*decrypter, func() error, error) { func (d *decrypter) Decrypt(ctx context.Context, encryptedData, privateKeyBase64, publicKeyBase64 string) (string, error) { privateKeyBytes, err := base64.StdEncoding.DecodeString(privateKeyBase64) if err != nil { - return "", model.NewBadReqErr(err) + return "", model.NewBadReqErr(fmt.Errorf("invalid private key: %w", err)) } publicKeyBytes, err := base64.StdEncoding.DecodeString(publicKeyBase64) if err != nil { - return "", model.NewBadReqErr(err) + return "", model.NewBadReqErr(fmt.Errorf("invalid public key: %w", err)) } // Decode the Base64 encoded encrypted data. messageByte, err := base64.StdEncoding.DecodeString(encryptedData) if err != nil { - return "", model.NewBadReqErr(err) + return "", model.NewBadReqErr(fmt.Errorf("failed to decode encrypted data: %w", err)) } aesCipher, err := createAESCipher(privateKeyBytes, publicKeyBytes) diff --git a/pkg/plugin/implementation/encrypter/encrypter.go b/pkg/plugin/implementation/encrypter/encrypter.go index 3ba7c3e..301cf0a 100644 --- a/pkg/plugin/implementation/encrypter/encrypter.go +++ b/pkg/plugin/implementation/encrypter/encrypter.go @@ -24,12 +24,12 @@ func New(ctx context.Context) (*encrypter, func() error, error) { func (e *encrypter) Encrypt(ctx context.Context, data string, privateKeyBase64, publicKeyBase64 string) (string, error) { privateKeyBytes, err := base64.StdEncoding.DecodeString(privateKeyBase64) if err != nil { - return "", model.NewBadReqErr(err) + return "", model.NewBadReqErr(fmt.Errorf("invalid private key: %w", err)) } publicKeyBytes, err := base64.StdEncoding.DecodeString(publicKeyBase64) if err != nil { - return "", model.NewBadReqErr(err) + return "", model.NewBadReqErr(fmt.Errorf("invalid public key: %w", err)) } // Convert the input string to a byte slice. @@ -51,11 +51,11 @@ func createAESCipher(privateKey, publicKey []byte) (cipher.Block, error) { x25519Curve := ecdh.X25519() x25519PrivateKey, err := x25519Curve.NewPrivateKey(privateKey) if err != nil { - return nil, model.NewBadReqErr(err) + return nil, model.NewBadReqErr(fmt.Errorf("failed to create private key: %w", err)) } x25519PublicKey, err := x25519Curve.NewPublicKey(publicKey) if err != nil { - return nil, model.NewBadReqErr(err) + return nil, model.NewBadReqErr(fmt.Errorf("failed to create public key: %w", err)) } sharedSecret, err := x25519PrivateKey.ECDH(x25519PublicKey) if err != nil { diff --git a/pkg/plugin/implementation/schemavalidator/schemavalidator.go b/pkg/plugin/implementation/schemavalidator/schemavalidator.go index dd3d596..9456c07 100644 --- a/pkg/plugin/implementation/schemavalidator/schemavalidator.go +++ b/pkg/plugin/implementation/schemavalidator/schemavalidator.go @@ -11,6 +11,7 @@ import ( "path/filepath" "strings" + "github.com/beckn/beckn-onix/pkg/log" "github.com/beckn/beckn-onix/pkg/model" "github.com/santhosh-tekuri/jsonschema/v6" @@ -39,7 +40,7 @@ type Config struct { func New(ctx context.Context, config *Config) (*schemaValidator, func() error, error) { // Check if config is nil if config == nil { - return nil, nil, model.NewBadReqErr(errors.New("config cannot be nil")) + return nil, nil, fmt.Errorf("config cannot be nil") } v := &schemaValidator{ config: config, @@ -58,7 +59,7 @@ func (v *schemaValidator) Validate(ctx context.Context, url *url.URL, data []byt var payloadData payload err := json.Unmarshal(data, &payloadData) if err != nil { - return fmt.Errorf("failed to parse JSON payload: %v", err) + return model.NewBadReqErr(fmt.Errorf("failed to parse JSON payload: %v", err)) } // Extract domain, version, and endpoint from the payload and uri. @@ -67,8 +68,7 @@ func (v *schemaValidator) Validate(ctx context.Context, url *url.URL, data []byt version = fmt.Sprintf("v%s", version) endpoint := path.Base(url.String()) - // ToDo Add debug log here - fmt.Println("Handling request for endpoint:", endpoint) + log.Debugf(ctx, "Handling request for endpoint: %s", endpoint) domain := strings.ToLower(cxtDomain) domain = strings.ReplaceAll(domain, ":", "_") @@ -78,12 +78,12 @@ func (v *schemaValidator) Validate(ctx context.Context, url *url.URL, data []byt // Retrieve the schema from the cache. schema, exists := v.schemaCache[schemaFileName] if !exists { - return model.NewNotFoundErr(errors.New("schema not found for domain")) + return model.NewBadReqErr(errors.New("schema not found for domain")) } var jsonData any if err := json.Unmarshal(data, &jsonData); err != nil { - return model.NewBadReqErr(err) + return model.NewBadReqErr(fmt.Errorf("failed to parse JSON data: %v", err)) } err = schema.Validate(jsonData) if err != nil { @@ -105,7 +105,7 @@ func (v *schemaValidator) Validate(ctx context.Context, url *url.URL, data []byt // Return the array of schema validation errors return &model.SchemaValidationErr{Errors: schemaErrors} } - return model.NewBadReqErr(err) + return model.NewBadReqErr(fmt.Errorf("validation failed: %v", err)) } // Return nil if validation succeeds @@ -190,7 +190,7 @@ func (v *schemaValidator) initialise() error { // Start processing from the root schema directory. if err := processDir(schemaDir); err != nil { - return model.NewNotFoundErr(err) + return fmt.Errorf("failed to read schema directory: %v", err) } return nil diff --git a/pkg/plugin/implementation/signer/signer.go b/pkg/plugin/implementation/signer/signer.go index 71f8774..ca659d4 100644 --- a/pkg/plugin/implementation/signer/signer.go +++ b/pkg/plugin/implementation/signer/signer.go @@ -33,7 +33,7 @@ func hash(payload []byte, createdAt, expiresAt int64) (string, error) { _, err := hasher.Write(payload) if err != nil { - return "", model.NewBadReqErr(err) + return "", fmt.Errorf("failed to hash payload: %w", err) } hashSum := hasher.Sum(nil) @@ -46,7 +46,7 @@ func hash(payload []byte, createdAt, expiresAt int64) (string, error) { func generateSignature(signingString []byte, privateKeyBase64 string) ([]byte, error) { privateKeyBytes, err := base64.StdEncoding.DecodeString(privateKeyBase64) if err != nil { - return nil, model.NewBadReqErr(err) + return nil, fmt.Errorf("error decoding private key: %w", err) } if len(privateKeyBytes) != ed25519.SeedSize { diff --git a/pkg/plugin/implementation/signvalidator/signvalidator.go b/pkg/plugin/implementation/signvalidator/signvalidator.go index b107619..07893fd 100644 --- a/pkg/plugin/implementation/signvalidator/signvalidator.go +++ b/pkg/plugin/implementation/signvalidator/signvalidator.go @@ -4,7 +4,6 @@ import ( "context" "crypto/ed25519" "encoding/base64" - "errors" "fmt" "strconv" "strings" @@ -34,7 +33,7 @@ func New(ctx context.Context, config *Config) (*validator, func() error, error) func (v *validator) Validate(ctx context.Context, body []byte, header string, publicKeyBase64 string) error { createdTimestamp, expiredTimestamp, signature, err := parseAuthHeader(header) if err != nil { - return model.NewBadReqErr(err) + return model.NewBadReqErr(fmt.Errorf("error parsing header: %w", err)) } signatureBytes, err := base64.StdEncoding.DecodeString(signature) @@ -44,7 +43,7 @@ func (v *validator) Validate(ctx context.Context, body []byte, header string, pu currentTime := time.Now().Unix() if createdTimestamp > currentTime || currentTime > expiredTimestamp { - return model.NewSignValidationErr(errors.New("signature is expired or not yet valid")) + return model.NewSignValidationErr(fmt.Errorf("signature is expired or not yet valid")) } createdTime := time.Unix(createdTimestamp, 0) @@ -54,11 +53,11 @@ func (v *validator) Validate(ctx context.Context, body []byte, header string, pu decodedPublicKey, err := base64.StdEncoding.DecodeString(publicKeyBase64) if err != nil { - return model.NewBadReqErr(err) + return model.NewBadReqErr(fmt.Errorf("error decoding public key: %w", err)) } if !ed25519.Verify(ed25519.PublicKey(decodedPublicKey), []byte(signingString), signatureBytes) { - return model.NewSignValidationErr(errors.New("signature verification failed")) + return model.NewSignValidationErr(fmt.Errorf("signature verification failed")) } return nil @@ -88,13 +87,13 @@ func parseAuthHeader(header string) (int64, int64, string, error) { expiredTimestamp, err := strconv.ParseInt(signatureMap["expires"], 10, 64) if err != nil { - return 0, 0, "", model.NewSignValidationErr(err) + return 0, 0, "", model.NewSignValidationErr(fmt.Errorf("invalid expires timestamp: %w", err)) } signature := signatureMap["signature"] if signature == "" { // TODO: Return appropriate error code when Error Code Handling Module is ready - return 0, 0, "", model.NewSignValidationErr(errors.New("signature missing in header")) + return 0, 0, "", model.NewSignValidationErr(fmt.Errorf("signature missing in header")) } return createdTimestamp, expiredTimestamp, signature, nil