-
Notifications
You must be signed in to change notification settings - Fork 0
/
env_served_ports.go
116 lines (91 loc) · 2.52 KB
/
env_served_ports.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
package entities
import (
"github.com/asaskevich/govalidator"
)
type EnvServedPort string
type EnvServedPorts map[EnvServedPort][]EnvServedPortBinding
type EnvServedPortBinding struct {
Value string `json:"value"`
Type EnvServedPortBindingType `json:"type"`
RedirectToHTTPS bool `json:"redirect_to_https"`
}
type EnvServedPortBindingType string
const (
EnvServedPortBindingTypePort EnvServedPortBindingType = "port"
EnvServedPortBindingTypeDomain EnvServedPortBindingType = "domain"
)
func (e *Env) DoesServedPortExist(servedPort EnvServedPort) bool {
_, servedPortExists := e.ServedPorts[servedPort]
return servedPortExists
}
func (e *Env) AddServedPortBinding(
servedPort EnvServedPort,
binding string,
redirectToHTTPS bool,
) {
if !e.DoesServedPortExist(servedPort) {
e.ServedPorts[servedPort] = []EnvServedPortBinding{}
}
servedPortBinding := EnvServedPortBinding{
Value: binding,
Type: EnvServedPortBindingTypeDomain,
RedirectToHTTPS: redirectToHTTPS,
}
if govalidator.IsPort(binding) {
servedPortBinding.Type = EnvServedPortBindingTypePort
}
e.ServedPorts[servedPort] = append(e.ServedPorts[servedPort], servedPortBinding)
}
func (e *Env) DoesServedPortBindingExist(targetBinding string) bool {
for _, bindings := range e.ServedPorts {
for _, binding := range bindings {
if targetBinding == binding.Value {
return true
}
}
}
return false
}
func (e *Env) RemoveServedPortBinding(servedPort EnvServedPort, targetBinding string) {
if !e.DoesServedPortExist(servedPort) {
return
}
servedPortBindings := []EnvServedPortBinding{}
for _, binding := range e.ServedPorts[servedPort] {
if binding.Value == targetBinding {
continue
}
servedPortBindings = append(servedPortBindings, binding)
}
e.ServedPorts[servedPort] = servedPortBindings
}
func (e *Env) RemoveServedPort(servedPort EnvServedPort) {
delete(e.ServedPorts, servedPort)
}
func CheckPortValidity(port string, reservedPorts []string) error {
if !govalidator.IsPort(port) {
return ErrInvalidPort{
InvalidPort: port,
}
}
for _, reservedPort := range reservedPorts {
if reservedPort == port {
return ErrReservedPort{
ReservedPort: port,
}
}
}
return nil
}
func CheckDomainValidity(domain string) error {
validDomain := govalidator.Matches(
domain,
`^([a-z0-9]{1}[a-z0-9-]{0,62}){1}(\.[a-z0-9]{1}[a-z0-9-]{0,62})+$`,
)
if !validDomain || len(domain) > 253 {
return ErrInvalidDomain{
Domain: domain,
}
}
return nil
}