github.com/Kong/go-pdk@v0.11.0/nginx/nginx.go (about)

     1  /*
     2  Access Nginx APIs.
     3  */
     4  package nginx
     5  
     6  import (
     7  	"github.com/Kong/go-pdk/bridge"
     8  	"github.com/Kong/go-pdk/server/kong_plugin_protocol"
     9  	"google.golang.org/protobuf/types/known/structpb"
    10  )
    11  
    12  // Holds this module's functions.  Accessible as `kong.Nginx`
    13  type Nginx struct {
    14  	bridge.PdkBridge
    15  }
    16  
    17  // kong.Nginx.GetVar() returns an Nginx variable.  Equivalent to `ngx.var[k]`
    18  func (n Nginx) GetVar(k string) (string, error) {
    19  	return n.AskString(`kong.nginx.get_var`, bridge.WrapString(k))
    20  }
    21  
    22  func (n Nginx) GetTLS1VersionStr() (string, error) {
    23  	return n.AskString(`kong.nginx.get_tls1_version_str`, nil)
    24  }
    25  
    26  // kong.Nginx.SetCtx() sets a value in the `ngx.ctx` request context table.
    27  func (n Nginx) SetCtx(k string, v interface{}) error {
    28  	v2, err := structpb.NewValue(v)
    29  	if err != nil {
    30  		return err
    31  	}
    32  	arg := kong_plugin_protocol.KV{
    33  		K: k,
    34  		V: v2,
    35  	}
    36  	return n.Ask(`kong.nginx.set_ctx`, &arg, nil)
    37  }
    38  
    39  // kong.Nginx.GetCtxAny() returns a value from the `ngx.ctx` request context table.
    40  func (n Nginx) GetCtxAny(k string) (interface{}, error) {
    41  	return n.AskValue(`kong.nginx.get_ctx`, bridge.WrapString(k))
    42  }
    43  
    44  // kong.Nginx.GetCtxString() returns a string value from the `ngx.ctx` request context table.
    45  func (n Nginx) GetCtxString(k string) (string, error) {
    46  	out := new(structpb.Value)
    47  	if err := n.Ask(`kong.nginx.get_ctx`, bridge.WrapString(k), out); err != nil {
    48  		return "", err
    49  	}
    50  	return out.GetStringValue(), nil
    51  }
    52  
    53  // kong.Nginx.GetCtxFloat() returns a float value from the `ngx.ctx` request context table.
    54  func (n Nginx) GetCtxFloat(k string) (float64, error) {
    55  	out := new(structpb.Value)
    56  	if err := n.Ask(`kong.nginx.get_ctx`, bridge.WrapString(k), out); err != nil {
    57  		return 0, err
    58  	}
    59  	return out.GetNumberValue(), nil
    60  }
    61  
    62  // kong.Nginx.GetCtxInt() returns an integer value from the `ngx.ctx` request context table.
    63  func (n Nginx) GetCtxInt(k string) (int, error) {
    64  	out := new(structpb.Value)
    65  	if err := n.Ask(`kong.nginx.get_ctx`, bridge.WrapString(k), out); err != nil {
    66  		return 0, err
    67  	}
    68  	return int(out.GetNumberValue()), nil
    69  }
    70  
    71  // kong.Nginx.ReqStartTime() returns the curent request's start time
    72  // as a floating-point number of seconds.  Equivalent to `ngx.req.start_time()`
    73  func (n Nginx) ReqStartTime() (float64, error) {
    74  	return n.AskNumber(`kong.nginx.req_start_time`, nil)
    75  }
    76  
    77  // kong.Nginx.GetSubsystem() returns the current Nginx subsystem
    78  // this function is called from: “http” or “stream”.
    79  func (n Nginx) GetSubsystem() (string, error) {
    80  	return n.AskString(`kong.nginx.get_subsystem`, nil)
    81  }