47 lines
947 B
Go
47 lines
947 B
Go
|
package configurator
|
||
|
|
||
|
import "strings"
|
||
|
|
||
|
type AppConfig struct {
|
||
|
Sites []SiteConfig `json:"sites"`
|
||
|
}
|
||
|
|
||
|
type SiteConfig struct {
|
||
|
ID string `json:"id"`
|
||
|
|
||
|
Name string `json:"name"`
|
||
|
Rules []RouterRuleConfig `json:"rules"`
|
||
|
Upstreams []UpstreamConfig `json:"upstreams"`
|
||
|
}
|
||
|
|
||
|
type RouterRuleConfig struct {
|
||
|
Host []string `json:"host"`
|
||
|
Path []string `json:"path"`
|
||
|
Queries map[string]string `json:"query"`
|
||
|
Headers map[string][]string `json:"headers"`
|
||
|
}
|
||
|
|
||
|
const (
|
||
|
UpstreamTypeFile = "file"
|
||
|
UpstreamTypeHypertext = "hypertext"
|
||
|
UpstreamTypeUnknown = "unknown"
|
||
|
)
|
||
|
|
||
|
type UpstreamConfig struct {
|
||
|
Name string `json:"name"`
|
||
|
URI string `json:"uri"`
|
||
|
}
|
||
|
|
||
|
func (v *UpstreamConfig) GetType() string {
|
||
|
protocol := strings.SplitN(v.URI, "://", 2)[0]
|
||
|
switch protocol {
|
||
|
case "file":
|
||
|
return UpstreamTypeFile
|
||
|
case "http":
|
||
|
case "https":
|
||
|
return UpstreamTypeHypertext
|
||
|
}
|
||
|
|
||
|
return UpstreamTypeUnknown
|
||
|
}
|