123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package plugins
- /*
- Plugins Includes.go
- This file contains the common types and structs that are used by the plugins
- If you are building a Zoraxy plugin with Golang, you can use this file to include
- the common types and structs that are used by the plugins
- */
- type PluginType int
- const (
- PluginType_Router PluginType = 0 //Router Plugin, used for handling / routing / forwarding traffic
- PluginType_Utilities PluginType = 1 //Utilities Plugin, used for utilities like Zerotier or Static Web Server that do not require interception with the dpcore
- )
- type CaptureRule struct {
- CapturePath string `json:"capture_path"`
- IncludeSubPaths bool `json:"include_sub_paths"`
- }
- type ControlStatusCode int
- const (
- ControlStatusCode_CAPTURED ControlStatusCode = 280 //Traffic captured by plugin, ask Zoraxy not to process the traffic
- ControlStatusCode_UNHANDLED ControlStatusCode = 284 //Traffic not handled by plugin, ask Zoraxy to process the traffic
- ControlStatusCode_ERROR ControlStatusCode = 580 //Error occurred while processing the traffic, ask Zoraxy to process the traffic and log the error
- )
- type SubscriptionEvent struct {
- EventName string `json:"event_name"`
- EventSource string `json:"event_source"`
- Payload string `json:"payload"` //Payload of the event, can be empty
- }
- type RuntimeConstantValue struct {
- ZoraxyVersion string `json:"zoraxy_version"`
- ZoraxyUUID string `json:"zoraxy_uuid"`
- }
- /*
- IntroSpect Payload
- When the plugin is initialized with -introspect flag,
- the plugin shell return this payload as JSON and exit
- */
- type IntroSpect struct {
- /* Plugin metadata */
- ID string `json:"id"` //Unique ID of your plugin, recommended using your own domain in reverse like com.yourdomain.pluginname
- Name string `json:"name"` //Name of your plugin
- Author string `json:"author"` //Author name of your plugin
- AuthorContact string `json:"author_contact"` //Author contact of your plugin, like email
- Description string `json:"description"` //Description of your plugin
- URL string `json:"url"` //URL of your plugin
- Type PluginType `json:"type"` //Type of your plugin, Router(0) or Utilities(1)
- VersionMajor int `json:"version_major"` //Major version of your plugin
- VersionMinor int `json:"version_minor"` //Minor version of your plugin
- VersionPatch int `json:"version_patch"` //Patch version of your plugin
- /*
- Endpoint Settings
- */
- /*
- Global Capture Settings
- Once plugin is enabled these rules always applies, no matter which HTTP Proxy rule it is enabled on
- This captures the whole traffic of Zoraxy
- Notes: Will raise a warning on the UI when the user enables the plugin on a HTTP Proxy rule
- */
- GlobalCapturePath []CaptureRule `json:"global_capture_path"` //Global traffic capture path of your plugin
- GlobalCaptureIngress string `json:"global_capture_ingress"` //Global traffic capture ingress path of your plugin (e.g. /g_handler)
- /*
- Always Capture Settings
- Once the plugin is enabled on a given HTTP Proxy rule,
- these always applies
- */
- AlwaysCapturePath []CaptureRule `json:"always_capture_path"` //Always capture path of your plugin when enabled on a HTTP Proxy rule (e.g. /myapp)
- AlwaysCaptureIngress string `json:"always_capture_ingress"` //Always capture ingress path of your plugin when enabled on a HTTP Proxy rule (e.g. /a_handler)
- /*
- Dynamic Capture Settings
- Once the plugin is enabled on a given HTTP Proxy rule,
- the plugin can capture the request and decided if the request
- shall be handled by itself or let it pass through
- */
- DynmaicCaptureIngress string `json:"capture_path"` //Traffic capture path of your plugin (e.g. /capture)
- DynamicHandleIngress string `json:"handle_path"` //Traffic handle path of your plugin (e.g. /handler)
- /* UI Path for your plugin */
- UIPath string `json:"ui_path"` //UI path of your plugin (e.g. /ui), will proxy the whole subpath tree to Zoraxy Web UI as plugin UI
- /* Subscriptions Settings */
- SubscriptionPath string `json:"subscription_path"` //Subscription event path of your plugin (e.g. /notifyme), a POST request with SubscriptionEvent as body will be sent to this path when the event is triggered
- SubscriptionsEvents map[string]string `json:"subscriptions_events"` //Subscriptions events of your plugin, see Zoraxy documentation for more details
- }
- /*
- ConfigureSpec Payload
- Zoraxy will start your plugin with -configure flag,
- the plugin shell read this payload as JSON and configure itself
- by the supplied values like starting a web server at given port
- that listens to 127.0.0.1:port
- */
- type ConfigureSpec struct {
- Port int `json:"port"` //Port to listen
- RuntimeConst RuntimeConstantValue `json:"runtime_const"` //Runtime constant values
- //To be expanded
- }
|