@@ -18,6 +18,14 @@ const (
1818 HttpsPort = 443
1919 ProxyTargetWhitelistKey = "PROXY_TARGET_WHITELIST"
2020 DefaultProxyTargetWhitelist = "localhost,repo1.maven.org,repo.maven.apache.org,repository.jboss.org,packages.confluent.io,jitpack.io,repo.gradle.org,plugins.gradle.org"
21+ InternalProxyHostKey = "INTERNAL_PROXY_HOST"
22+ DefaultInternalProxyHost = "indy-generic-proxy"
23+ InternalProxyPortKey = "INTERNAL_PROXY_PORT"
24+ DefaultInternalProxyPort = 80
25+ InternalProxyUserKey = "INTERNAL_PROXY_USER"
26+ DefaultInternalProxyUser = ""
27+ InternalProxyPasswordKey = "INTERNAL_PROXY_PASSWORD"
28+ DefaultInternalProxyPassword = ""
2129 InternalNonProxyHostsKey = "INTERNAL_NON_PROXY_HOSTS"
2230 DefaultInternalNonProxyHosts = "localhost"
2331 DomainSocketToHttp = "Domain Socket <-> HTTP"
@@ -28,57 +36,50 @@ var logger = NewLogger("Domain Proxy Server")
2836var common = NewCommon (logger )
2937
3038type DomainProxyServer struct {
31- domainSocket string
32- byteBufferSize int
33- connectionTimeout time.Duration
34- idleTimeout time.Duration
39+ sharedParams SharedParams
3540 proxyTargetWhitelist map [string ]bool
36- nonProxyHosts map [string ]bool
41+ internalProxyHost string
42+ internalProxyPort int
43+ internalProxyUser string
44+ internalProxyPassword string
45+ internalNonProxyHosts map [string ]bool
3746 httpConnectionCounter atomic.Uint64
3847 httpsConnectionCounter atomic.Uint64
3948 listener net.Listener
4049 shutdownChan chan struct {}
4150}
4251
43- func newDomainProxyServer ( domainSocket string , byteBufferSize int , connectionTimeout , idleTimeout time. Duration , proxyTargetWhitelist , nonProxyHosts map [ string ] bool ) * DomainProxyServer {
52+ func NewDomainProxyServer ( ) * DomainProxyServer {
4453 return & DomainProxyServer {
45- domainSocket : domainSocket ,
46- byteBufferSize : byteBufferSize ,
47- connectionTimeout : connectionTimeout ,
48- idleTimeout : idleTimeout ,
49- proxyTargetWhitelist : proxyTargetWhitelist ,
50- nonProxyHosts : nonProxyHosts ,
51- shutdownChan : make (chan struct {}),
54+ sharedParams : common .NewSharedParams (),
55+ proxyTargetWhitelist : getProxyTargetWhitelist (),
56+ internalProxyHost : getInternalProxyHost (), // TODO Implement internal proxy logic
57+ internalProxyPort : getInternalProxyPort (),
58+ internalProxyUser : getInternalProxyUser (),
59+ internalProxyPassword : getInternalProxyPassword (),
60+ internalNonProxyHosts : getInternalNonProxyHosts (), // TODO Implement internal non-proxy hosts logic
61+ shutdownChan : make (chan struct {}),
5262 }
5363}
5464
55- func NewDomainProxyServer () * DomainProxyServer {
56- return newDomainProxyServer (common .GetDomainSocket (),
57- common .GetByteBufferSize (),
58- common .GetConnectionTimeout (),
59- common .GetIdleTimeout (),
60- GetProxyTargetWhitelist (),
61- GetInternalNonProxyHosts (), // TODO Implement Non-proxy logic
62- )
63- }
64-
6565func (dps * DomainProxyServer ) Start () {
6666 logger .Println ("Starting domain proxy server..." )
6767 go dps .startServer ()
6868}
6969
7070func (dps * DomainProxyServer ) startServer () {
71- if _ , err := os .Stat (dps .domainSocket ); err == nil {
72- if err := os .Remove (dps .domainSocket ); err != nil {
71+ sharedParams := dps .sharedParams
72+ if _ , err := os .Stat (sharedParams .DomainSocket ); err == nil {
73+ if err := os .Remove (sharedParams .DomainSocket ); err != nil {
7374 logger .Fatalf ("Failed to delete existing domain socket: %v" , err )
7475 }
7576 }
7677 var err error
77- dps .listener , err = net .Listen ("unix" , dps . domainSocket )
78+ dps .listener , err = net .Listen ("unix" , sharedParams . DomainSocket )
7879 if err != nil {
7980 logger .Fatalf ("Failed to start domain socket listener: %v" , err )
8081 }
81- logger .Printf ("Domain socket server listening on %s" , dps . domainSocket )
82+ logger .Printf ("Domain socket server listening on %s" , sharedParams . DomainSocket )
8283 for {
8384 if domainConnection , err := dps .listener .Accept (); err != nil {
8485 select {
@@ -94,7 +95,8 @@ func (dps *DomainProxyServer) startServer() {
9495}
9596
9697func (dps * DomainProxyServer ) handleConnectionRequest (domainConnection net.Conn ) {
97- if err := domainConnection .SetDeadline (time .Now ().Add (dps .idleTimeout )); err != nil {
98+ sharedParams := dps .sharedParams
99+ if err := domainConnection .SetDeadline (time .Now ().Add (sharedParams .IdleTimeout )); err != nil {
98100 common .HandleSetDeadlineError (domainConnection , err )
99101 return
100102 }
@@ -108,7 +110,7 @@ func (dps *DomainProxyServer) handleConnectionRequest(domainConnection net.Conn)
108110 return
109111 }
110112 writer := & responseWriter {connection : domainConnection }
111- if err = domainConnection .SetDeadline (time .Now ().Add (dps . idleTimeout )); err != nil {
113+ if err = domainConnection .SetDeadline (time .Now ().Add (sharedParams . IdleTimeout )); err != nil {
112114 common .HandleSetDeadlineError (domainConnection , err )
113115 return
114116 }
@@ -130,7 +132,8 @@ func (dps *DomainProxyServer) handleHttpConnection(sourceConnection net.Conn, wr
130132 return
131133 }
132134 startTime := time .Now ()
133- targetConnection , err := net .DialTimeout ("tcp" , fmt .Sprintf ("%s:%d" , targetHost , targetPort ), dps .connectionTimeout )
135+ sharedParams := dps .sharedParams
136+ targetConnection , err := net .DialTimeout ("tcp" , fmt .Sprintf ("%s:%d" , targetHost , targetPort ), sharedParams .ConnectionTimeout )
134137 if err != nil {
135138 dps .handleErrorResponse (writer , err , "Failed to connect to target" )
136139 if err = sourceConnection .Close (); err != nil {
@@ -148,7 +151,7 @@ func (dps *DomainProxyServer) handleHttpConnection(sourceConnection net.Conn, wr
148151 return
149152 }
150153 go func () {
151- common .BiDirectionalTransfer (sourceConnection , targetConnection , dps . byteBufferSize , dps . idleTimeout , DomainSocketToHttp , connectionNo )
154+ common .BiDirectionalTransfer (sourceConnection , targetConnection , sharedParams . ByteBufferSize , sharedParams . IdleTimeout , DomainSocketToHttp , connectionNo )
152155 logger .Printf ("%s Connection %d ended after %d ms" , DomainSocketToHttp , connectionNo , time .Since (startTime ).Milliseconds ())
153156 }()
154157}
@@ -164,7 +167,8 @@ func (dps *DomainProxyServer) handleHttpsConnection(sourceConnection net.Conn, w
164167 return
165168 }
166169 startTime := time .Now ()
167- targetConnection , err := net .DialTimeout ("tcp" , fmt .Sprintf ("%s:%d" , targetHost , targetPort ), dps .connectionTimeout )
170+ sharedParams := dps .sharedParams
171+ targetConnection , err := net .DialTimeout ("tcp" , fmt .Sprintf ("%s:%d" , targetHost , targetPort ), sharedParams .ConnectionTimeout )
168172 if err != nil {
169173 dps .handleErrorResponse (writer , err , "Failed to connect to target" )
170174 if err = sourceConnection .Close (); err != nil {
@@ -182,7 +186,7 @@ func (dps *DomainProxyServer) handleHttpsConnection(sourceConnection net.Conn, w
182186 return
183187 }
184188 go func () {
185- common .BiDirectionalTransfer (sourceConnection , targetConnection , dps . byteBufferSize , dps . idleTimeout , DomainSocketToHttps , connectionNo )
189+ common .BiDirectionalTransfer (sourceConnection , targetConnection , sharedParams . ByteBufferSize , sharedParams . IdleTimeout , DomainSocketToHttps , connectionNo )
186190 logger .Printf ("%s Connection %d ended after %d ms" , DomainSocketToHttps , connectionNo , time .Since (startTime ).Milliseconds ())
187191 }()
188192}
@@ -222,8 +226,9 @@ func (dps *DomainProxyServer) Stop() {
222226 common .HandleListenerCloseError (err )
223227 }
224228 }
225- if _ , err := os .Stat (dps .domainSocket ); err == nil {
226- if err := os .Remove (dps .domainSocket ); err != nil {
229+ sharedParams := dps .sharedParams
230+ if _ , err := os .Stat (sharedParams .DomainSocket ); err == nil {
231+ if err := os .Remove (sharedParams .DomainSocket ); err != nil {
227232 logger .Printf ("Failed to delete domain socket: %v" , err )
228233 }
229234 }
@@ -260,10 +265,26 @@ func (rw *responseWriter) WriteHeader(statusCode int) {
260265 }
261266}
262267
263- func GetProxyTargetWhitelist () map [string ]bool {
268+ func getProxyTargetWhitelist () map [string ]bool {
264269 return common .GetCsvEnvVariable (ProxyTargetWhitelistKey , DefaultProxyTargetWhitelist )
265270}
266271
267- func GetInternalNonProxyHosts () map [string ]bool {
272+ func getInternalProxyHost () string {
273+ return common .GetEnvVariable (InternalProxyHostKey , DefaultInternalProxyHost )
274+ }
275+
276+ func getInternalProxyPort () int {
277+ return common .GetIntEnvVariable (InternalProxyPortKey , DefaultInternalProxyPort )
278+ }
279+
280+ func getInternalProxyUser () string {
281+ return common .GetEnvVariable (InternalProxyUserKey , DefaultInternalProxyUser )
282+ }
283+
284+ func getInternalProxyPassword () string {
285+ return common .GetEnvVariable (InternalProxyPasswordKey , DefaultInternalProxyPassword )
286+ }
287+
288+ func getInternalNonProxyHosts () map [string ]bool {
268289 return common .GetCsvEnvVariable (InternalNonProxyHostsKey , DefaultInternalNonProxyHosts )
269290}
0 commit comments