|
9 | 9 | "sync" |
10 | 10 | "time" |
11 | 11 |
|
12 | | - "github.com/pires/go-proxyproto" |
| 12 | + proxyproto "github.com/pires/go-proxyproto" |
13 | 13 | "golang.org/x/crypto/ssh" |
14 | 14 |
|
15 | 15 | "gitlab.com/gitlab-org/gitlab-shell/v14/client" |
@@ -97,7 +97,7 @@ func (s *Server) listen(ctx context.Context) error { |
97 | 97 | if s.Config.Server.ProxyProtocol { |
98 | 98 | sshListener = &proxyproto.Listener{ |
99 | 99 | Listener: sshListener, |
100 | | - Policy: s.requirePolicy, |
| 100 | + Policy: s.requirePolicy(), |
101 | 101 | ReadHeaderTimeout: time.Duration(s.Config.Server.ProxyHeaderTimeout), |
102 | 102 | } |
103 | 103 |
|
@@ -200,17 +200,23 @@ func (s *Server) handleConn(ctx context.Context, nconn net.Conn) { |
200 | 200 | }) |
201 | 201 | } |
202 | 202 |
|
203 | | -func (s *Server) requirePolicy(_ net.Addr) (proxyproto.Policy, error) { |
| 203 | +func (s *Server) requirePolicy() proxyproto.PolicyFunc { |
204 | 204 | // Set the Policy value based on config |
205 | 205 | // Values are taken from https://github.com/pires/go-proxyproto/blob/195fedcfbfc1be163f3a0d507fac1709e9d81fed/policy.go#L20 |
206 | 206 | switch strings.ToLower(s.Config.Server.ProxyPolicy) { |
207 | 207 | case "require": |
208 | | - return proxyproto.REQUIRE, nil |
| 208 | + return staticProxyPolicy(proxyproto.REQUIRE) |
209 | 209 | case "ignore": |
210 | | - return proxyproto.IGNORE, nil |
| 210 | + return staticProxyPolicy(proxyproto.IGNORE) |
211 | 211 | case "reject": |
212 | | - return proxyproto.REJECT, nil |
| 212 | + return staticProxyPolicy(proxyproto.REJECT) |
213 | 213 | default: |
214 | | - return proxyproto.USE, nil |
| 214 | + return staticProxyPolicy(proxyproto.USE) |
| 215 | + } |
| 216 | +} |
| 217 | + |
| 218 | +func staticProxyPolicy(policy proxyproto.Policy) proxyproto.PolicyFunc { |
| 219 | + return func(_ net.Addr) (proxyproto.Policy, error) { |
| 220 | + return policy, nil |
215 | 221 | } |
216 | 222 | } |
0 commit comments