实现源站端口跟随功能

This commit is contained in:
刘祥超
2022-06-29 21:56:44 +08:00
parent 633684f576
commit c454cd75b3
16 changed files with 215 additions and 120 deletions

View File

@@ -1,6 +1,7 @@
package servers package servers
import ( import (
"encoding/json"
"github.com/TeaOSLab/EdgeAdmin/internal/oplogs" "github.com/TeaOSLab/EdgeAdmin/internal/oplogs"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeCommon/pkg/configutils" "github.com/TeaOSLab/EdgeCommon/pkg/configutils"
@@ -33,6 +34,10 @@ func (this *AddOriginPopupAction) RunPost(params struct {
Protocol string Protocol string
Addr string Addr string
DomainsJSON []byte
Host string
FollowPort bool
Must *actions.Must Must *actions.Must
}) { }) {
params.Must. params.Must.
@@ -50,7 +55,7 @@ func (this *AddOriginPopupAction) RunPost(params struct {
} }
addr = regexp.MustCompile(`\s+`).ReplaceAllString(addr, "") addr = regexp.MustCompile(`\s+`).ReplaceAllString(addr, "")
portIndex := strings.LastIndex(addr, ":") var portIndex = strings.LastIndex(addr, ":")
if portIndex < 0 { if portIndex < 0 {
if params.Protocol == "http" { if params.Protocol == "http" {
addr += ":80" addr += ":80"
@@ -82,6 +87,21 @@ func (this *AddOriginPopupAction) RunPost(params struct {
} }
} }
// 专属域名
var domains = []string{}
if len(params.DomainsJSON) > 0 {
err := json.Unmarshal(params.DomainsJSON, &domains)
if err != nil {
this.ErrorPage(err)
return
}
// 去除可能误加的斜杠
for index, domain := range domains {
domains[index] = strings.TrimSuffix(domain, "/")
}
}
resp, err := this.RPC().OriginRPC().CreateOrigin(this.AdminContext(), &pb.CreateOriginRequest{ resp, err := this.RPC().OriginRPC().CreateOrigin(this.AdminContext(), &pb.CreateOriginRequest{
Name: "", Name: "",
Addr: &pb.NetworkAddress{ Addr: &pb.NetworkAddress{
@@ -92,6 +112,9 @@ func (this *AddOriginPopupAction) RunPost(params struct {
Description: "", Description: "",
Weight: 10, Weight: 10,
IsOn: true, IsOn: true,
Domains: domains,
Host: params.Host,
FollowPort: params.FollowPort,
}) })
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)

View File

@@ -34,7 +34,7 @@ func (this *IndexAction) RunGet(params struct {
this.ErrorPage(err) this.ErrorPage(err)
return return
} }
reverseProxyRef := &serverconfigs.ReverseProxyRef{} var reverseProxyRef = &serverconfigs.ReverseProxyRef{}
err = json.Unmarshal(reverseProxyResp.ReverseProxyRefJSON, reverseProxyRef) err = json.Unmarshal(reverseProxyResp.ReverseProxyRefJSON, reverseProxyRef)
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -42,7 +42,7 @@ func (this *IndexAction) RunGet(params struct {
} }
this.Data["reverseProxyRef"] = reverseProxyRef this.Data["reverseProxyRef"] = reverseProxyRef
reverseProxy := &serverconfigs.ReverseProxyConfig{} var reverseProxy = &serverconfigs.ReverseProxyConfig{}
err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy) err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy)
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -50,13 +50,13 @@ func (this *IndexAction) RunGet(params struct {
} }
this.Data["reverseProxyConfig"] = reverseProxy this.Data["reverseProxyConfig"] = reverseProxy
primaryOriginMaps := []maps.Map{} var primaryOriginMaps = []maps.Map{}
backupOriginMaps := []maps.Map{} var backupOriginMaps = []maps.Map{}
for _, originConfig := range reverseProxy.PrimaryOrigins { for _, originConfig := range reverseProxy.PrimaryOrigins {
if len(originConfig.Domains) == 0 { if len(originConfig.Domains) == 0 {
originConfig.Domains = []string{} originConfig.Domains = []string{}
} }
m := maps.Map{ var m = maps.Map{
"id": originConfig.Id, "id": originConfig.Id,
"weight": originConfig.Weight, "weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
@@ -65,6 +65,7 @@ func (this *IndexAction) RunGet(params struct {
"domains": originConfig.Domains, "domains": originConfig.Domains,
"hasCert": originConfig.Cert != nil, "hasCert": originConfig.Cert != nil,
"host": originConfig.RequestHost, "host": originConfig.RequestHost,
"followPort": originConfig.FollowPort,
} }
primaryOriginMaps = append(primaryOriginMaps, m) primaryOriginMaps = append(primaryOriginMaps, m)
} }
@@ -72,7 +73,7 @@ func (this *IndexAction) RunGet(params struct {
if len(originConfig.Domains) == 0 { if len(originConfig.Domains) == 0 {
originConfig.Domains = []string{} originConfig.Domains = []string{}
} }
m := maps.Map{ var m = maps.Map{
"id": originConfig.Id, "id": originConfig.Id,
"weight": originConfig.Weight, "weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
@@ -81,6 +82,7 @@ func (this *IndexAction) RunGet(params struct {
"domains": originConfig.Domains, "domains": originConfig.Domains,
"hasCert": originConfig.Cert != nil, "hasCert": originConfig.Cert != nil,
"host": originConfig.RequestHost, "host": originConfig.RequestHost,
"followPort": originConfig.FollowPort,
} }
backupOriginMaps = append(backupOriginMaps, m) backupOriginMaps = append(backupOriginMaps, m)
} }

View File

@@ -34,7 +34,7 @@ func (this *IndexAction) RunGet(params struct {
this.ErrorPage(err) this.ErrorPage(err)
return return
} }
reverseProxyRef := &serverconfigs.ReverseProxyRef{} var reverseProxyRef = &serverconfigs.ReverseProxyRef{}
err = json.Unmarshal(reverseProxyResp.ReverseProxyRefJSON, reverseProxyRef) err = json.Unmarshal(reverseProxyResp.ReverseProxyRefJSON, reverseProxyRef)
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -42,7 +42,7 @@ func (this *IndexAction) RunGet(params struct {
} }
this.Data["reverseProxyRef"] = reverseProxyRef this.Data["reverseProxyRef"] = reverseProxyRef
reverseProxy := &serverconfigs.ReverseProxyConfig{} var reverseProxy = &serverconfigs.ReverseProxyConfig{}
err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy) err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy)
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -50,8 +50,8 @@ func (this *IndexAction) RunGet(params struct {
} }
this.Data["reverseProxyConfig"] = reverseProxy this.Data["reverseProxyConfig"] = reverseProxy
primaryOriginMaps := []maps.Map{} var primaryOriginMaps = []maps.Map{}
backupOriginMaps := []maps.Map{} var backupOriginMaps = []maps.Map{}
for _, originConfig := range reverseProxy.PrimaryOrigins { for _, originConfig := range reverseProxy.PrimaryOrigins {
if len(originConfig.Domains) == 0 { if len(originConfig.Domains) == 0 {
originConfig.Domains = []string{} originConfig.Domains = []string{}
@@ -65,6 +65,7 @@ func (this *IndexAction) RunGet(params struct {
"domains": originConfig.Domains, "domains": originConfig.Domains,
"hasCert": originConfig.Cert != nil, "hasCert": originConfig.Cert != nil,
"host": originConfig.RequestHost, "host": originConfig.RequestHost,
"followPort": originConfig.FollowPort,
} }
primaryOriginMaps = append(primaryOriginMaps, m) primaryOriginMaps = append(primaryOriginMaps, m)
} }
@@ -81,6 +82,7 @@ func (this *IndexAction) RunGet(params struct {
"domains": originConfig.Domains, "domains": originConfig.Domains,
"hasCert": originConfig.Cert != nil, "hasCert": originConfig.Cert != nil,
"host": originConfig.RequestHost, "host": originConfig.RequestHost,
"followPort": originConfig.FollowPort,
} }
backupOriginMaps = append(backupOriginMaps, m) backupOriginMaps = append(backupOriginMaps, m)
} }

View File

@@ -34,7 +34,7 @@ func (this *IndexAction) RunGet(params struct {
this.ErrorPage(err) this.ErrorPage(err)
return return
} }
reverseProxyRef := &serverconfigs.ReverseProxyRef{} var reverseProxyRef = &serverconfigs.ReverseProxyRef{}
err = json.Unmarshal(reverseProxyResp.ReverseProxyRefJSON, reverseProxyRef) err = json.Unmarshal(reverseProxyResp.ReverseProxyRefJSON, reverseProxyRef)
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -42,7 +42,7 @@ func (this *IndexAction) RunGet(params struct {
} }
this.Data["reverseProxyRef"] = reverseProxyRef this.Data["reverseProxyRef"] = reverseProxyRef
reverseProxy := &serverconfigs.ReverseProxyConfig{} var reverseProxy = &serverconfigs.ReverseProxyConfig{}
err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy) err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy)
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -50,13 +50,13 @@ func (this *IndexAction) RunGet(params struct {
} }
this.Data["reverseProxyConfig"] = reverseProxy this.Data["reverseProxyConfig"] = reverseProxy
primaryOriginMaps := []maps.Map{} var primaryOriginMaps = []maps.Map{}
backupOriginMaps := []maps.Map{} var backupOriginMaps = []maps.Map{}
for _, originConfig := range reverseProxy.PrimaryOrigins { for _, originConfig := range reverseProxy.PrimaryOrigins {
if len(originConfig.Domains) == 0 { if len(originConfig.Domains) == 0 {
originConfig.Domains = []string{} originConfig.Domains = []string{}
} }
m := maps.Map{ var m = maps.Map{
"id": originConfig.Id, "id": originConfig.Id,
"weight": originConfig.Weight, "weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
@@ -65,6 +65,7 @@ func (this *IndexAction) RunGet(params struct {
"domains": originConfig.Domains, "domains": originConfig.Domains,
"hasCert": originConfig.Cert != nil, "hasCert": originConfig.Cert != nil,
"host": originConfig.RequestHost, "host": originConfig.RequestHost,
"followPort": originConfig.FollowPort,
} }
primaryOriginMaps = append(primaryOriginMaps, m) primaryOriginMaps = append(primaryOriginMaps, m)
} }
@@ -72,7 +73,7 @@ func (this *IndexAction) RunGet(params struct {
if len(originConfig.Domains) == 0 { if len(originConfig.Domains) == 0 {
originConfig.Domains = []string{} originConfig.Domains = []string{}
} }
m := maps.Map{ var m = maps.Map{
"id": originConfig.Id, "id": originConfig.Id,
"weight": originConfig.Weight, "weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
@@ -81,6 +82,7 @@ func (this *IndexAction) RunGet(params struct {
"domains": originConfig.Domains, "domains": originConfig.Domains,
"hasCert": originConfig.Cert != nil, "hasCert": originConfig.Cert != nil,
"host": originConfig.RequestHost, "host": originConfig.RequestHost,
"followPort": originConfig.FollowPort,
} }
backupOriginMaps = append(backupOriginMaps, m) backupOriginMaps = append(backupOriginMaps, m)
} }

View File

@@ -26,14 +26,14 @@ func (this *IndexAction) RunGet(params struct {
this.ErrorPage(err) this.ErrorPage(err)
return return
} }
serverType := serverTypeResp.Type var serverType = serverTypeResp.Type
reverseProxyResp, err := this.RPC().HTTPLocationRPC().FindAndInitHTTPLocationReverseProxyConfig(this.AdminContext(), &pb.FindAndInitHTTPLocationReverseProxyConfigRequest{LocationId: params.LocationId}) reverseProxyResp, err := this.RPC().HTTPLocationRPC().FindAndInitHTTPLocationReverseProxyConfig(this.AdminContext(), &pb.FindAndInitHTTPLocationReverseProxyConfigRequest{LocationId: params.LocationId})
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
return return
} }
reverseProxyRef := &serverconfigs.ReverseProxyRef{} var reverseProxyRef = &serverconfigs.ReverseProxyRef{}
err = json.Unmarshal(reverseProxyResp.ReverseProxyRefJSON, reverseProxyRef) err = json.Unmarshal(reverseProxyResp.ReverseProxyRefJSON, reverseProxyRef)
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -41,7 +41,7 @@ func (this *IndexAction) RunGet(params struct {
} }
this.Data["reverseProxyRef"] = reverseProxyRef this.Data["reverseProxyRef"] = reverseProxyRef
reverseProxy := &serverconfigs.ReverseProxyConfig{} var reverseProxy = &serverconfigs.ReverseProxyConfig{}
err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy) err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy)
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -51,13 +51,13 @@ func (this *IndexAction) RunGet(params struct {
this.Data["serverType"] = serverType this.Data["serverType"] = serverType
primaryOriginMaps := []maps.Map{} var primaryOriginMaps = []maps.Map{}
backupOriginMaps := []maps.Map{} var backupOriginMaps = []maps.Map{}
for _, originConfig := range reverseProxy.PrimaryOrigins { for _, originConfig := range reverseProxy.PrimaryOrigins {
if len(originConfig.Domains) == 0 { if len(originConfig.Domains) == 0 {
originConfig.Domains = []string{} originConfig.Domains = []string{}
} }
m := maps.Map{ var m = maps.Map{
"id": originConfig.Id, "id": originConfig.Id,
"weight": originConfig.Weight, "weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
@@ -66,6 +66,7 @@ func (this *IndexAction) RunGet(params struct {
"domains": originConfig.Domains, "domains": originConfig.Domains,
"hasCert": originConfig.Cert != nil, "hasCert": originConfig.Cert != nil,
"host": originConfig.RequestHost, "host": originConfig.RequestHost,
"followPort": originConfig.FollowPort,
} }
primaryOriginMaps = append(primaryOriginMaps, m) primaryOriginMaps = append(primaryOriginMaps, m)
} }
@@ -73,7 +74,7 @@ func (this *IndexAction) RunGet(params struct {
if len(originConfig.Domains) == 0 { if len(originConfig.Domains) == 0 {
originConfig.Domains = []string{} originConfig.Domains = []string{}
} }
m := maps.Map{ var m = maps.Map{
"id": originConfig.Id, "id": originConfig.Id,
"weight": originConfig.Weight, "weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
@@ -82,6 +83,7 @@ func (this *IndexAction) RunGet(params struct {
"domains": originConfig.Domains, "domains": originConfig.Domains,
"hasCert": originConfig.Cert != nil, "hasCert": originConfig.Cert != nil,
"host": originConfig.RequestHost, "host": originConfig.RequestHost,
"followPort": originConfig.FollowPort,
} }
backupOriginMaps = append(backupOriginMaps, m) backupOriginMaps = append(backupOriginMaps, m)
} }

View File

@@ -69,6 +69,7 @@ func (this *AddPopupAction) RunPost(params struct {
DomainsJSON []byte DomainsJSON []byte
Host string Host string
FollowPort bool
Description string Description string
IsOn bool IsOn bool
@@ -208,6 +209,7 @@ func (this *AddPopupAction) RunPost(params struct {
CertRefJSON: certRefJSON, CertRefJSON: certRefJSON,
Domains: domains, Domains: domains,
Host: params.Host, Host: params.Host,
FollowPort: params.FollowPort,
}) })
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)

View File

@@ -110,6 +110,7 @@ func (this *UpdatePopupAction) RunGet(params struct {
"cert": config.Cert, "cert": config.Cert,
"domains": config.Domains, "domains": config.Domains,
"host": config.RequestHost, "host": config.RequestHost,
"followPort": config.FollowPort,
} }
this.Show() this.Show()
@@ -135,6 +136,7 @@ func (this *UpdatePopupAction) RunPost(params struct {
DomainsJSON []byte DomainsJSON []byte
Host string Host string
FollowPort bool
Description string Description string
IsOn bool IsOn bool
@@ -274,6 +276,7 @@ func (this *UpdatePopupAction) RunPost(params struct {
CertRefJSON: certRefJSON, CertRefJSON: certRefJSON,
Domains: domains, Domains: domains,
Host: params.Host, Host: params.Host,
FollowPort: params.FollowPort,
}) })
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)

View File

@@ -26,7 +26,7 @@ func (this *IndexAction) RunGet(params struct {
this.ErrorPage(err) this.ErrorPage(err)
return return
} }
serverType := serverTypeResp.Type var serverType = serverTypeResp.Type
// 当前是否有分组设置 // 当前是否有分组设置
groupResp, err := this.RPC().ServerGroupRPC().FindEnabledServerGroupConfigInfo(this.AdminContext(), &pb.FindEnabledServerGroupConfigInfoRequest{ServerId: params.ServerId}) groupResp, err := this.RPC().ServerGroupRPC().FindEnabledServerGroupConfigInfo(this.AdminContext(), &pb.FindEnabledServerGroupConfigInfoRequest{ServerId: params.ServerId})
@@ -60,7 +60,7 @@ func (this *IndexAction) RunGet(params struct {
this.ErrorPage(err) this.ErrorPage(err)
return return
} }
reverseProxyRef := &serverconfigs.ReverseProxyRef{} var reverseProxyRef = &serverconfigs.ReverseProxyRef{}
err = json.Unmarshal(reverseProxyResp.ReverseProxyRefJSON, reverseProxyRef) err = json.Unmarshal(reverseProxyResp.ReverseProxyRefJSON, reverseProxyRef)
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -68,7 +68,7 @@ func (this *IndexAction) RunGet(params struct {
} }
this.Data["reverseProxyRef"] = reverseProxyRef this.Data["reverseProxyRef"] = reverseProxyRef
reverseProxy := &serverconfigs.ReverseProxyConfig{} var reverseProxy = &serverconfigs.ReverseProxyConfig{}
err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy) err = json.Unmarshal(reverseProxyResp.ReverseProxyJSON, reverseProxy)
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -78,13 +78,13 @@ func (this *IndexAction) RunGet(params struct {
this.Data["serverType"] = serverType this.Data["serverType"] = serverType
primaryOriginMaps := []maps.Map{} var primaryOriginMaps = []maps.Map{}
backupOriginMaps := []maps.Map{} var backupOriginMaps = []maps.Map{}
for _, originConfig := range reverseProxy.PrimaryOrigins { for _, originConfig := range reverseProxy.PrimaryOrigins {
if len(originConfig.Domains) == 0 { if len(originConfig.Domains) == 0 {
originConfig.Domains = []string{} originConfig.Domains = []string{}
} }
m := maps.Map{ var m = maps.Map{
"id": originConfig.Id, "id": originConfig.Id,
"weight": originConfig.Weight, "weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
@@ -93,6 +93,7 @@ func (this *IndexAction) RunGet(params struct {
"domains": originConfig.Domains, "domains": originConfig.Domains,
"hasCert": originConfig.Cert != nil, "hasCert": originConfig.Cert != nil,
"host": originConfig.RequestHost, "host": originConfig.RequestHost,
"followPort": originConfig.FollowPort,
} }
primaryOriginMaps = append(primaryOriginMaps, m) primaryOriginMaps = append(primaryOriginMaps, m)
} }
@@ -100,7 +101,7 @@ func (this *IndexAction) RunGet(params struct {
if len(originConfig.Domains) == 0 { if len(originConfig.Domains) == 0 {
originConfig.Domains = []string{} originConfig.Domains = []string{}
} }
m := maps.Map{ var m = maps.Map{
"id": originConfig.Id, "id": originConfig.Id,
"weight": originConfig.Weight, "weight": originConfig.Weight,
"addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange, "addr": originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
@@ -109,6 +110,7 @@ func (this *IndexAction) RunGet(params struct {
"domains": originConfig.Domains, "domains": originConfig.Domains,
"hasCert": originConfig.Cert != nil, "hasCert": originConfig.Cert != nil,
"host": originConfig.RequestHost, "host": originConfig.RequestHost,
"followPort": originConfig.FollowPort,
} }
backupOriginMaps = append(backupOriginMaps, m) backupOriginMaps = append(backupOriginMaps, m)
} }

View File

@@ -29,12 +29,15 @@ Vue.component("combo-box", {
} }
// 设定菜单宽度 // 设定菜单宽度
let inputWidth = this.$refs.searchBox.offsetWidth let searchBox = this.$refs.searchBox
if (searchBox != null) {
let inputWidth = searchBox.offsetWidth
if (inputWidth != null && inputWidth > 0) { if (inputWidth != null && inputWidth > 0) {
this.$refs.menu.style.width = inputWidth + "px" this.$refs.menu.style.width = inputWidth + "px"
} else if (this.styleWidth.length > 0) { } else if (this.styleWidth.length > 0) {
this.$refs.menu.style.width = this.styleWidth this.$refs.menu.style.width = this.styleWidth
} }
}
}, },
data: function () { data: function () {
let items = this.vItems let items = this.vItems

View File

@@ -86,10 +86,11 @@ Vue.component("origin-list-table", {
</thead> </thead>
<tr v-for="origin in vOrigins"> <tr v-for="origin in vOrigins">
<td :class="{disabled:!origin.isOn}"><a href="" @click.prevent="updateOrigin(origin.id)">{{origin.addr}} &nbsp;<i class="icon expand small"></i></a> <td :class="{disabled:!origin.isOn}"><a href="" @click.prevent="updateOrigin(origin.id)">{{origin.addr}} &nbsp;<i class="icon expand small"></i></a>
<div style="margin-top: 0.3em" v-if="origin.name.length > 0 || origin.hasCert || (origin.host != null && origin.host.length > 0) || (origin.domains != null && origin.domains.length > 0)"> <div style="margin-top: 0.3em" v-if="origin.name.length > 0 || origin.hasCert || (origin.host != null && origin.host.length > 0) || origin.followPort || (origin.domains != null && origin.domains.length > 0)">
<tiny-basic-label v-if="origin.name.length > 0">{{origin.name}}</tiny-basic-label> <tiny-basic-label v-if="origin.name.length > 0">{{origin.name}}</tiny-basic-label>
<tiny-basic-label v-if="origin.hasCert">证书</tiny-basic-label> <tiny-basic-label v-if="origin.hasCert">证书</tiny-basic-label>
<tiny-basic-label v-if="origin.host != null && origin.host.length > 0">主机名: {{origin.host}}</tiny-basic-label> <tiny-basic-label v-if="origin.host != null && origin.host.length > 0">主机名: {{origin.host}}</tiny-basic-label>
<tiny-basic-label v-if="origin.followPort">端口跟随</tiny-basic-label>
<span v-if="origin.domains != null && origin.domains.length > 0"><tiny-basic-label v-for="domain in origin.domains">匹配: {{domain}}</tiny-basic-label></span> <span v-if="origin.domains != null && origin.domains.length > 0"><tiny-basic-label v-for="domain in origin.domains">匹配: {{domain}}</tiny-basic-label></span>
</div> </div>
</td> </td>

View File

@@ -14,13 +14,13 @@
</select> </select>
<!-- TCP --> <!-- TCP -->
<select class="ui dropdown auto-width" name="protocol" v-if="serverType == 'tcpProxy'"> <select class="ui dropdown auto-width" name="protocol" v-if="serverType == 'tcpProxy'" v-model="protocol">
<option value="tcp">TCP</option> <option value="tcp">TCP</option>
<option value="tls">TLS</option> <option value="tls">TLS</option>
</select> </select>
<!-- UDP --> <!-- UDP -->
<select class="ui dropdown auto-width" name="protocol" v-if="serverType == 'udpProxy'"> <select class="ui dropdown auto-width" name="protocol" v-if="serverType == 'udpProxy'" v-model="protocol">
<option value="udp">UDP</option> <option value="udp">UDP</option>
</select> </select>
</td> </td>
@@ -32,6 +32,38 @@
<p class="comment"><span class="red" v-if="addrError.length > 0">{{addrError}}</span>源站服务器地址通常是一个IP或域名加端口<span v-if="serverType == 'httpProxy'">,不需要加 http:// 或 https://</span></p> <p class="comment"><span class="red" v-if="addrError.length > 0">{{addrError}}</span>源站服务器地址通常是一个IP或域名加端口<span v-if="serverType == 'httpProxy'">,不需要加 http:// 或 https://</span></p>
</td> </td>
</tr> </tr>
<tr>
<td colspan="2"><more-options-indicator></more-options-indicator></td>
</tr>
<tbody v-show="moreOptionsVisible">
<tr v-if="protocol == 'https' || protocol == 'tls'">
<td>{{protocol.toUpperCase()}}证书</td>
<td>
<ssl-certs-box :v-single-mode="true" :v-view-size="'mini'" :v-description="'可以选择连接源站使用的证书。'"></ssl-certs-box>
</td>
</tr>
<tr v-if="isHTTP || protocol == 'tls'">
<td>回源主机名</td>
<td>
<input type="text" name="host" placeholder="比如example.com" maxlength="100"/>
<p class="comment">请求源站时的Host用于修改源站接收到的域名<span v-if="isHTTP">自定义Host内容中支持请求变量</span></p>
</td>
</tr>
<tr v-if="isHTTP">
<td>专属域名</td>
<td>
<domains-box></domains-box>
<p class="comment">默认不需要填写,表示支持所有域名。如果填写了专属域名,表示这些源站只会在所列的专属域名被访问时才生效。</p>
</td>
</tr>
<tr>
<td>端口跟随</td>
<td>
<checkbox name="followPort"></checkbox>
<p class="comment">选中后表示源站的端口保持和用户访问的服务端口保持一致;此时的源站地址中的端口号可以任意填写。</p>
</td>
</tr>
</tbody>
</table> </table>
<submit-btn></submit-btn> <submit-btn></submit-btn>
</form> </form>

View File

@@ -4,8 +4,14 @@ Tea.context(function () {
this.addrError = "" this.addrError = ""
// 当前服务协议
this.isHTTP = (this.serverType == "httpProxy" || this.serverType == "httpWeb")
if (this.serverType == "httpProxy") { if (this.serverType == "httpProxy") {
this.protocol = "http" this.protocol = "http"
} else if (this.serverType == "tcpProxy") {
this.protocol = "tcp"
} else if (this.serverType == "udpProxy") {
this.protocol = "udp"
} }
this.changeProtocol = function () { this.changeProtocol = function () {

View File

@@ -45,6 +45,7 @@ Tea.context(function () {
this.addOrigin = function () { this.addOrigin = function () {
teaweb.popup("/servers/addOriginPopup?serverType=" + this.serverType, { teaweb.popup("/servers/addOriginPopup?serverType=" + this.serverType, {
height: "27em",
callback: function (resp) { callback: function (resp) {
this.origins.push(resp.data.origin); this.origins.push(resp.data.origin);
} }

View File

@@ -2,7 +2,7 @@ Tea.context(function () {
this.success = NotifyReloadSuccess("保存成功") this.success = NotifyReloadSuccess("保存成功")
this.updateOn = function (b) { this.updateOn = function (b) {
teaweb.confirm(b ? "确定要启用反向代理服务吗?" : "确定要停用反向代理服务吗?", function () { teaweb.confirm(b ? "确定要启用源站吗?" : "确定要停用源站服务吗?", function () {
this.$post(".updateOn") this.$post(".updateOn")
.params({ .params({
"serverId": this.serverId, "serverId": this.serverId,

View File

@@ -59,6 +59,13 @@
<p class="comment">默认不需要填写,表示支持所有域名。如果填写了专属域名,表示这些源站只会在所列的专属域名被访问时才生效。</p> <p class="comment">默认不需要填写,表示支持所有域名。如果填写了专属域名,表示这些源站只会在所列的专属域名被访问时才生效。</p>
</td> </td>
</tr> </tr>
<tr>
<td>端口跟随</td>
<td>
<checkbox name="followPort"></checkbox>
<p class="comment">选中后表示源站的端口保持和用户访问的服务端口保持一致;此时的源站地址中的端口号可以任意填写。</p>
</td>
</tr>
<tr> <tr>
<td>权重</td> <td>权重</td>
<td> <td>

View File

@@ -60,6 +60,13 @@
<p class="comment">默认不需要填写,表示支持所有域名。如果填写了专属域名,表示这些源站只会在所列的专属域名被访问时才生效。</p> <p class="comment">默认不需要填写,表示支持所有域名。如果填写了专属域名,表示这些源站只会在所列的专属域名被访问时才生效。</p>
</td> </td>
</tr> </tr>
<tr>
<td>端口跟随</td>
<td>
<checkbox name="followPort" v-model="origin.followPort"></checkbox>
<p class="comment">选中后表示源站的端口保持和用户访问的服务端口保持一致;此时的源站地址中的端口号可以任意填写。</p>
</td>
</tr>
<tr> <tr>
<td>权重</td> <td>权重</td>
<td> <td>