42Atomys/webhooked

View on GitHub
pkg/factory/f_header.go

Summary

Maintainability
A
0 mins
Test Coverage
package factory

import (
    "fmt"
    "net/http"
    "reflect"

    "github.com/rs/zerolog/log"
)

type headerFactory struct{ Factory }

func (*headerFactory) Name() string {
    return "header"
}

func (*headerFactory) DefinedInpus() []*Var {
    return []*Var{
        {true, reflect.TypeOf(&http.Request{}), "request", nil},
        {false, reflect.TypeOf(&InputConfig{}), "headerName", &InputConfig{}},
    }
}

func (*headerFactory) DefinedOutputs() []*Var {
    return []*Var{
        {false, reflect.TypeOf(""), "value", ""},
    }
}

func (*headerFactory) Func() RunFunc {
    return func(factory *Factory, configRaw map[string]interface{}) error {
        nameVar, ok := factory.Input("headerName")
        if !ok {
            return fmt.Errorf("missing input headerName")
        }

        requestVar, ok := factory.Input("request")
        if !ok || requestVar.Value == nil {
            return fmt.Errorf("missing input request")
        }

        headerValue := requestVar.Value.(*http.Request).Header.Get(
            nameVar.Value.(*InputConfig).First(),
        )

        log.Debug().Msgf("factory header resolve %s to %s",
            nameVar.Value.(*InputConfig).First(),
            headerValue,
        )
        factory.Output("value", headerValue)

        return nil
    }
}