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 }