Skip to content

Commit 658e985

Browse files
authored
Merge pull request #448 from xmidt-org/denopink/rollback/wrp-validators
patch: rollback wrp-go v3 validators
2 parents fc8bbde + 6fa6220 commit 658e985

File tree

2 files changed

+5
-132
lines changed

2 files changed

+5
-132
lines changed

primaryHandler.go

Lines changed: 5 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"bytes"
88
"context"
99
"encoding/base64"
10-
"encoding/json"
1110
"errors"
1211
"fmt"
1312
"net/http"
@@ -50,7 +49,6 @@ import (
5049
"github.com/xmidt-org/wrp-go/v3"
5150
"github.com/xmidt-org/wrp-go/v3/wrpcontext"
5251
"github.com/xmidt-org/wrp-go/v3/wrphttp"
53-
"github.com/xmidt-org/wrp-go/v3/wrpvalidator"
5452
)
5553

5654
const (
@@ -60,10 +58,9 @@ const (
6058
prevAPIBase = "api/" + prevAPIVersion
6159
apiBaseDualVersion = "api/{version:" + apiVersion + "|" + prevAPIVersion + "}"
6260

63-
basicAuthConfigKey = "authHeader"
64-
jwtAuthConfigKey = "jwtValidator"
65-
wrpCheckConfigKey = "WRPCheck"
66-
wrpValidatorConfigKey = "wrpValidators"
61+
basicAuthConfigKey = "authHeader"
62+
jwtAuthConfigKey = "jwtValidator"
63+
wrpCheckConfigKey = "WRPCheck"
6764

6865
deviceID = "deviceID"
6966

@@ -79,8 +76,7 @@ const (
7976
)
8077

8178
var (
82-
errNoDeviceName = errors.New("no device name")
83-
errWRPValidatorConfigError = errors.New("failed to configure wrp validators")
79+
errNoDeviceName = errors.New("no device name")
8480
)
8581

8682
func authChain(v *viper.Viper, logger *zap.Logger, registry xmetrics.Registry, tf *touchstone.Factory) (alice.Chain, error) {
@@ -400,12 +396,7 @@ func NewPrimaryHandler(logger *zap.Logger, v *viper.Viper, registry xmetrics.Reg
400396
otelmux.WithTracerProvider(tracing.TracerProvider()),
401397
}
402398

403-
valWRP, err := validateWRP(v, logger, tf)
404-
if err != nil {
405-
return nil, fmt.Errorf("failed to get wrp validators: %w", err)
406-
}
407-
408-
router.Use(otelmux.Middleware("mainSpan", otelMuxOptions...), candlelight.EchoFirstTraceNodeInfo(tracing.Propagator(), true), valWRP)
399+
router.Use(otelmux.Middleware("mainSpan", otelMuxOptions...), candlelight.EchoFirstTraceNodeInfo(tracing.Propagator(), true))
409400

410401
router.NotFoundHandler = http.HandlerFunc(func(response http.ResponseWriter, _ *http.Request) {
411402
xhttp.WriteError(response, http.StatusBadRequest, "Invalid endpoint")
@@ -575,109 +566,3 @@ func validateDeviceID() alice.Chain {
575566
})
576567
})
577568
}
578-
579-
func validateWRP(v *viper.Viper, logger *zap.Logger, tf *touchstone.Factory) (func(http.Handler) http.Handler, error) {
580-
var (
581-
errs error
582-
vals []wrpvalidator.MetaValidator
583-
)
584-
585-
if valsConig := v.Get(wrpValidatorConfigKey); valsConig != nil {
586-
if b, err := json.Marshal(valsConig); err != nil {
587-
return nil, errors.Join(errWRPValidatorConfigError, err)
588-
} else if err = json.Unmarshal(b, &vals); err != nil {
589-
return nil, errors.Join(errWRPValidatorConfigError, err)
590-
}
591-
592-
labelNames := []string{wrpvalidator.ClientIDLabel, wrpvalidator.PartnerIDLabel, wrpvalidator.MessageTypeLabel}
593-
for _, v := range vals {
594-
if err := v.AddMetric(tf, labelNames...); err != nil {
595-
errs = errors.Join(errs, err)
596-
}
597-
}
598-
}
599-
600-
if errs != nil {
601-
return nil, errors.Join(errWRPValidatorConfigError, errs)
602-
}
603-
604-
return func(delegate http.Handler) http.Handler {
605-
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
606-
if msg, ok := wrpcontext.GetMessage(r.Context()); ok {
607-
var (
608-
infoErrors error
609-
warningErrors error
610-
failureError error
611-
unknownError error
612-
satClientID = "N/A"
613-
partnerID = device.UnknownPartner
614-
)
615-
616-
auth, ok := bascule.FromContext(r.Context())
617-
if ok {
618-
if principal := auth.Token.Principal(); len(principal) > 0 {
619-
satClientID = principal
620-
}
621-
622-
if s, ok := auth.Token.Attributes().Get(device.PartnerIDClaimKey); ok {
623-
if p, ok := s.(string); ok {
624-
partnerID = p
625-
}
626-
}
627-
}
628-
629-
for _, v := range vals {
630-
err := v.Validate(
631-
*msg,
632-
prometheus.Labels{
633-
wrpvalidator.ClientIDLabel: satClientID,
634-
wrpvalidator.PartnerIDLabel: partnerID,
635-
wrpvalidator.MessageTypeLabel: msg.Type.FriendlyName(),
636-
},
637-
)
638-
639-
switch v.Level() {
640-
case wrpvalidator.InfoLevel:
641-
infoErrors = errors.Join(infoErrors, err)
642-
case wrpvalidator.WarningLevel:
643-
warningErrors = errors.Join(warningErrors, err)
644-
case wrpvalidator.ErrorLevel:
645-
failureError = errors.Join(failureError, err)
646-
default:
647-
unknownError = errors.Join(unknownError, err)
648-
}
649-
}
650-
651-
if unknownError != nil {
652-
logger.Warn("WRP message validation errors found",
653-
zap.Error(unknownError), zap.String(zapWRPValidatorLabel, wrpvalidator.UnknownLevel.String()))
654-
}
655-
656-
if infoErrors != nil {
657-
logger.Warn("WRP message validation errors found",
658-
zap.Error(infoErrors), zap.String(zapWRPValidatorLabel, wrpvalidator.InfoLevel.String()))
659-
}
660-
661-
if warningErrors != nil {
662-
logger.Warn("WRP message validation errors found",
663-
zap.Error(warningErrors), zap.String(zapWRPValidatorLabel, wrpvalidator.WarningLevel.String()))
664-
}
665-
666-
if failureError != nil {
667-
logger.Error("WRP message validation (failure error level) found",
668-
zap.Error(failureError), zap.String(zapWRPValidatorLabel, wrpvalidator.ErrorLevel.String()))
669-
w.Header().Set("Content-Type", "application/json")
670-
w.WriteHeader(http.StatusBadRequest)
671-
fmt.Fprintf(
672-
w,
673-
`{"code": %d, "message": "%s"}`,
674-
http.StatusBadRequest,
675-
fmt.Sprintf("failed to validate WRP message: %s", failureError))
676-
return
677-
}
678-
}
679-
680-
delegate.ServeHTTP(w, r)
681-
})
682-
}, errs
683-
}

scytale.yaml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,6 @@
22
# SPDX-License-Identifier: Apache-2.0
33
---
44

5-
# wrpValidators defines the wrp validators used to validate incoming wrp messages.
6-
# (Optional)
7-
# Available validator types: always_invalid, always_valid, utf8, msg_type, source, destination, simple_res_req, simple_event, spans
8-
# Available validator levels: info, warning, error
9-
# Validators can be disabled with `disable: true`, it is false by default
10-
wrpValidators:
11-
- type: utf8
12-
level: warning
13-
disable: true
14-
- type: source
15-
level: error
16-
175
# The unique fully-qualified-domain-name of the server. It is provided to
186
# the X-Scytale-Server header for showing what server fulfilled the request
197
# sent.

0 commit comments

Comments
 (0)