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
5654const (
@@ -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
8178var (
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
8682func 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- }
0 commit comments