Support Proxy protocol (#12527)

This PR adds functionality to allow Gitea to sit behind an
HAProxy and HAProxy protocolled connections directly.

Fix #7508

Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
zeripath 2022-08-21 19:20:43 +01:00 committed by GitHub
parent 0b4c166e8a
commit 943753f560
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 787 additions and 74 deletions

View file

@ -0,0 +1,45 @@
// Copyright 2020 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package proxyprotocol
import "fmt"
// ErrBadHeader is an error demonstrating a bad proxy header
type ErrBadHeader struct {
Header []byte
}
func (e *ErrBadHeader) Error() string {
return fmt.Sprintf("Unexpected proxy header: %v", e.Header)
}
// ErrBadAddressType is an error demonstrating a bad proxy header with bad Address type
type ErrBadAddressType struct {
Address string
}
func (e *ErrBadAddressType) Error() string {
return fmt.Sprintf("Unexpected proxy header address type: %s", e.Address)
}
// ErrBadRemote is an error demonstrating a bad proxy header with bad Remote
type ErrBadRemote struct {
IP string
Port string
}
func (e *ErrBadRemote) Error() string {
return fmt.Sprintf("Unexpected proxy header remote IP and port: %s %s", e.IP, e.Port)
}
// ErrBadLocal is an error demonstrating a bad proxy header with bad Local
type ErrBadLocal struct {
IP string
Port string
}
func (e *ErrBadLocal) Error() string {
return fmt.Sprintf("Unexpected proxy header local IP and port: %s %s", e.IP, e.Port)
}