-
Notifications
You must be signed in to change notification settings - Fork 665
/
listener_processor.go
89 lines (74 loc) · 2.41 KB
/
listener_processor.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
// Copyright Project Contour Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package dag
import "sort"
// nolint:revive
const (
HTTP_LISTENER_NAME = "ingress_http"
HTTPS_LISTENER_NAME = "ingress_https"
)
// ListenerProcessor adds an HTTP and an HTTPS listener to
// the DAG if there are virtual hosts and secure virtual
// hosts already defined as roots in the DAG.
type ListenerProcessor struct{}
// Run adds HTTP and HTTPS listeners to the DAG if there are
// virtual hosts and secure virtual hosts already defined as
// roots in the DAG.
func (p *ListenerProcessor) Run(dag *DAG, _ *KubernetesCache) {
p.buildHTTPListener(dag)
p.buildHTTPSListener(dag)
}
// buildHTTPListener builds a *dag.Listener for the vhosts bound to port 80.
// The list of virtual hosts attached to the listener will be sorted by hostname.
func (p *ListenerProcessor) buildHTTPListener(dag *DAG) {
var vhosts []*VirtualHost
for _, vh := range dag.VirtualHosts {
if vh.Valid() {
vhosts = append(vhosts, vh)
}
}
if len(vhosts) == 0 {
return
}
sort.SliceStable(vhosts, func(i, j int) bool {
return vhosts[i].Name < vhosts[j].Name
})
http := &Listener{
Name: HTTP_LISTENER_NAME,
Port: 80,
VirtualHosts: vhosts,
}
dag.Listeners = append(dag.Listeners, http)
}
// buildHTTPSListener builds a *dag.Listener for the vhosts bound to port 443.
// The list of virtual hosts attached to the listener will be sorted by hostname.
func (p *ListenerProcessor) buildHTTPSListener(dag *DAG) {
var vhosts []*SecureVirtualHost
for _, svh := range dag.SecureVirtualHosts {
if svh.Valid() {
vhosts = append(vhosts, svh)
}
}
if len(vhosts) == 0 {
return
}
sort.SliceStable(vhosts, func(i, j int) bool {
return vhosts[i].Name < vhosts[j].Name
})
https := &Listener{
Name: HTTPS_LISTENER_NAME,
Port: 443,
SecureVirtualHosts: vhosts,
}
dag.Listeners = append(dag.Listeners, https)
}