@ -10,6 +10,8 @@ import (
"fmt"
"fmt"
"net"
"net"
"net/http"
"net/http"
"os"
"strings"
"code.gitea.io/gitea/modules/httplib"
"code.gitea.io/gitea/modules/httplib"
"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/json"
@ -18,13 +20,14 @@ import (
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/setting"
)
)
func newRequest ( ctx context . Context , url , method string ) * httplib . Request {
func newRequest ( ctx context . Context , url , method , sourceIP string ) * httplib . Request {
if setting . InternalToken == "" {
if setting . InternalToken == "" {
log . Fatal ( ` The INTERNAL_TOKEN setting is missing from the configuration file : % q .
log . Fatal ( ` The INTERNAL_TOKEN setting is missing from the configuration file : % q .
Ensure you are running in the correct environment or set the correct configuration file with - c . ` , setting . CustomConf )
Ensure you are running in the correct environment or set the correct configuration file with - c . ` , setting . CustomConf )
}
}
return httplib . NewRequest ( url , method ) .
return httplib . NewRequest ( url , method ) .
SetContext ( ctx ) .
SetContext ( ctx ) .
Header ( "X-Real-IP" , sourceIP ) .
Header ( "Authorization" , fmt . Sprintf ( "Bearer %s" , setting . InternalToken ) )
Header ( "Authorization" , fmt . Sprintf ( "Bearer %s" , setting . InternalToken ) )
}
}
@ -42,8 +45,16 @@ func decodeJSONError(resp *http.Response) *Response {
return & res
return & res
}
}
func getClientIP ( ) string {
sshConnEnv := strings . TrimSpace ( os . Getenv ( "SSH_CONNECTION" ) )
if len ( sshConnEnv ) == 0 {
return "127.0.0.1"
}
return strings . Fields ( sshConnEnv ) [ 0 ]
}
func newInternalRequest ( ctx context . Context , url , method string ) * httplib . Request {
func newInternalRequest ( ctx context . Context , url , method string ) * httplib . Request {
req := newRequest ( ctx , url , method ) . SetTLSClientConfig ( & tls . Config {
req := newRequest ( ctx , url , method , getClientIP ( ) ) . SetTLSClientConfig ( & tls . Config {
InsecureSkipVerify : true ,
InsecureSkipVerify : true ,
ServerName : setting . Domain ,
ServerName : setting . Domain ,
} )
} )