mirror of https://github.com/1Panel-dev/1Panel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
1.6 KiB
84 lines
1.6 KiB
package components
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
type UpstreamServer struct {
|
|
Comment string
|
|
Address string
|
|
Flags []string
|
|
Parameters map[string]string
|
|
Line int
|
|
}
|
|
|
|
func (uss *UpstreamServer) GetName() string {
|
|
return "server"
|
|
}
|
|
|
|
func (uss *UpstreamServer) GetBlock() IBlock {
|
|
return nil
|
|
}
|
|
|
|
func (uss *UpstreamServer) GetParameters() []string {
|
|
return uss.GetDirective().Parameters
|
|
}
|
|
|
|
func (uss *UpstreamServer) GetComment() string {
|
|
return uss.Comment
|
|
}
|
|
|
|
func (uss *UpstreamServer) GetDirective() *Directive {
|
|
directive := &Directive{
|
|
Name: "server",
|
|
Parameters: make([]string, 0),
|
|
Block: nil,
|
|
}
|
|
|
|
directive.Parameters = append(directive.Parameters, uss.Address)
|
|
|
|
paramNames := make([]string, 0)
|
|
for k := range uss.Parameters {
|
|
paramNames = append(paramNames, k)
|
|
}
|
|
sort.Strings(paramNames)
|
|
|
|
for _, k := range paramNames {
|
|
directive.Parameters = append(directive.Parameters, fmt.Sprintf("%s=%s", k, uss.Parameters[k]))
|
|
}
|
|
|
|
directive.Parameters = append(directive.Parameters, uss.Flags...)
|
|
|
|
return directive
|
|
}
|
|
|
|
func NewUpstreamServer(directive IDirective) *UpstreamServer {
|
|
uss := &UpstreamServer{
|
|
Comment: directive.GetComment(),
|
|
Flags: make([]string, 0),
|
|
Parameters: make(map[string]string, 0),
|
|
Line: directive.GetLine(),
|
|
}
|
|
|
|
for i, parameter := range directive.GetParameters() {
|
|
if i == 0 {
|
|
uss.Address = parameter
|
|
continue
|
|
}
|
|
if strings.Contains(parameter, "=") {
|
|
s := strings.SplitN(parameter, "=", 2)
|
|
uss.Parameters[s[0]] = s[1]
|
|
} else {
|
|
uss.Flags = append(uss.Flags, parameter)
|
|
}
|
|
}
|
|
|
|
return uss
|
|
}
|
|
|
|
func (uss *UpstreamServer) GetLine() int {
|
|
return uss.Line
|
|
}
|