|
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