/
add.go
143 lines (125 loc) · 3.53 KB
/
add.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package proxy
import (
"github.com/TeaWeb/code/teaconfigs"
"github.com/TeaWeb/code/teaconst"
"github.com/TeaWeb/code/teaweb/actions/default/proxy/proxyutils"
"github.com/iwind/TeaGo/actions"
"github.com/iwind/TeaGo/logs"
"strings"
)
// 添加新的服务
type AddAction actions.Action
func (this *AddAction) Run(params struct {
}) {
this.Show()
}
// 提交保存
func (this *AddAction) RunPost(params struct {
Description string
ServerType string
Names []string
Listens []string
Backends []string
Root string
Must *actions.Must
}) {
if len(params.Description) == 0 {
params.Description = "新代理服务"
}
server := teaconfigs.NewServerConfig()
server.Http = true
server.Description = params.Description
server.Charset = "utf-8"
server.Index = []string{"index.html", "index.htm", "index.php"}
server.CacheOn = true
if len(params.Names) > 0 {
for _, name := range params.Names {
name = strings.TrimSpace(name)
if len(name) > 0 {
server.AddName(name)
}
}
}
if len(params.Listens) > 0 {
for _, listen := range params.Listens {
listen = strings.TrimSpace(listen)
if len(listen) > 0 {
server.AddListen(listen)
}
}
}
if params.ServerType == "proxy" { // HTTP代理服务
for _, backend := range params.Backends {
backend = strings.TrimSpace(backend)
if len(backend) > 0 {
backendObject := teaconfigs.NewBackendConfig()
if strings.HasPrefix(backend, "http://") {
backend = strings.TrimPrefix(backend, "http://")
backendObject.Scheme = "http"
} else if strings.HasPrefix(backend, "https://") {
backend = strings.TrimPrefix(backend, "https://")
backendObject.Scheme = "https"
} else {
backendObject.Scheme = "http"
}
backendObject.Address = backend
backendObject.Weight = 10
server.AddBackend(backendObject)
}
}
} else if params.ServerType == "tcp" { // TCP代理服务
// DEMO版防止通过代理获取服务器数据库数据
if teaconst.DemoEnabled {
this.Fail("为了安全起见,演示版不提供TCP代理功能")
}
for _, backend := range params.Backends {
backend = strings.TrimSpace(backend)
if len(backend) > 0 {
backendObject := teaconfigs.NewBackendConfig()
if strings.HasPrefix(backend, "tcp://") {
backend = strings.TrimPrefix(backend, "tcp://")
backendObject.Scheme = "tcp"
} else if strings.HasPrefix(backend, "tls://") {
backend = strings.TrimPrefix(backend, "tls://")
backendObject.Scheme = "tcp+tls"
} else if strings.HasPrefix(backend, "ssl://") {
backend = strings.TrimPrefix(backend, "ssl://")
backendObject.Scheme = "tcp+tls"
} else {
backendObject.Scheme = "tcp"
}
backendObject.Address = backend
backendObject.Weight = 10
server.AddBackend(backendObject)
}
}
server.TCP = teaconfigs.NewTCPConfig()
} else if params.ServerType == "static" { // 普通服务
server.Root = params.Root
}
err := server.Validate()
if err != nil {
this.Fail("添加时有问题发生:" + err.Error())
}
filename := "server." + server.Id + ".proxy.conf"
server.Filename = filename
err = server.Save()
if err != nil {
this.Fail(err.Error())
}
// 保存到server list
serverList, err := teaconfigs.SharedServerList()
if err != nil {
logs.Error(err)
} else {
serverList.AddServer(server.Filename)
err = serverList.Save()
if err != nil {
logs.Error(err)
}
}
proxyutils.NotifyChange()
this.Next("/proxy/detail", map[string]interface{}{
"serverId": server.Id,
}, "").Success("添加成功,现在去查看详细信息")
}