-
Notifications
You must be signed in to change notification settings - Fork 7
/
config.go
137 lines (128 loc) · 4.53 KB
/
config.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
// Copyright 2019 Aporeto Inc.
// 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 bahamut
import (
"crypto/tls"
"crypto/x509"
"log"
"net"
"net/http"
"time"
opentracing "github.com/opentracing/opentracing-go"
"go.aporeto.io/elemental"
"golang.org/x/time/rate"
)
// HealthServerFunc is the type used by the Health Server to check the health of the server.
type HealthServerFunc func() error
// HealthStatFunc is the type used by the Health Server to return additional custom health info.
type HealthStatFunc func(http.ResponseWriter, *http.Request)
// TraceCleaner is the type of function that can be used to clean a trace data
// before it is sent to OpenTracing server. You can use this to strip passwords
// or other sensitive data.
type TraceCleaner func(elemental.Identity, []byte) []byte
// An IdentifiableRetriever is the type of function you can use to perform transparent
// patch support using elemental.SparseIdentifiable.
// If this is set in the configuration, the handler for PATCH method will use
// this function to retrieve the target identifiable, will apply the patch and
// treat the request as a standard update.
type IdentifiableRetriever func(*elemental.Request) (elemental.Identifiable, error)
type apiRateLimit struct {
limiter *rate.Limiter
condition func(*elemental.Request) bool
}
// A config represents the configuration of Bahamut.
type config struct {
opentracing struct {
tracer opentracing.Tracer
excludedIdentities map[string]struct{}
traceCleaner TraceCleaner
}
hooks struct {
postStart func(Server) error
preStop func(Server) error
errorTransformer func(error) error
}
rateLimiting struct {
rateLimiter *rate.Limiter
apiRateLimiters map[elemental.Identity]apiRateLimit
}
security struct {
auditer Auditer
corsController CORSPolicyController
requestAuthenticators []RequestAuthenticator
sessionAuthenticators []SessionAuthenticator
authorizers []Authorizer
}
pushServer struct {
service PubSubClient
dispatchHandler PushDispatchHandler
publishHandler PushPublishHandler
topic string
endpoint string
enabled bool
subjectHierarchiesEnabled bool
publishEnabled bool
dispatchEnabled bool
}
meta struct {
version map[string]any
serviceName string
serviceVersion string
disableMetaRoute bool
}
profilingServer struct {
listenAddress string
enabled bool
}
model struct {
modelManagers map[int]elemental.ModelManager
unmarshallers map[elemental.Identity]CustomUmarshaller
marshallers map[elemental.Identity]CustomMarshaller
retriever IdentifiableRetriever
readOnlyExcludedIdentities []elemental.Identity
readOnly bool
}
tls struct {
clientCAPool *x509.CertPool
serverCertificatesRetrieverFunc func(*tls.ClientHelloInfo) (*tls.Certificate, error)
peerCertificateVerifyFunc func([][]byte, [][]*x509.Certificate) error
serverCertificates []tls.Certificate
nextProtos []string
authType tls.ClientAuthType
disableSessionTicket bool
}
healthServer struct {
metricsManager MetricsManager
healthHandler HealthServerFunc
customStats map[string]HealthStatFunc
listenAddress string
readTimeout time.Duration
writeTimeout time.Duration
idleTimeout time.Duration
enabled bool
}
restServer struct {
customListener net.Listener
customRootHandlerFunc http.HandlerFunc
httpLogger *log.Logger
apiPrefix string
customRoutePrefix string
listenAddress string
maxConnection int
idleTimeout time.Duration
writeTimeout time.Duration
readTimeout time.Duration
enabled bool
disableKeepalive bool
disableCompression bool
}
general struct{ panicRecoveryDisabled bool }
}