2016-12-31 12:16:02 +03:00
// Copyright 2016 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 cmd
import (
"crypto/tls"
2019-11-24 13:39:50 +03:00
"net"
2016-12-31 12:16:02 +03:00
"net/http"
2019-11-24 13:39:50 +03:00
"net/http/fcgi"
2021-04-09 16:17:57 +03:00
"strings"
2016-12-31 12:16:02 +03:00
2019-10-15 16:39:51 +03:00
"code.gitea.io/gitea/modules/graceful"
2019-11-24 13:39:50 +03:00
"code.gitea.io/gitea/modules/log"
2021-04-09 16:17:57 +03:00
"code.gitea.io/gitea/modules/setting"
2016-12-31 12:16:02 +03:00
)
2021-03-08 05:43:59 +03:00
func runHTTP ( network , listenAddr , name string , m http . Handler ) error {
return graceful . HTTPListenAndServe ( network , listenAddr , name , m )
2016-12-31 12:16:02 +03:00
}
2021-03-08 05:43:59 +03:00
func runHTTPS ( network , listenAddr , name , certFile , keyFile string , m http . Handler ) error {
return graceful . HTTPListenAndServeTLS ( network , listenAddr , name , certFile , keyFile , m )
2019-10-15 16:39:51 +03:00
}
2021-03-08 05:43:59 +03:00
func runHTTPSWithTLSConfig ( network , listenAddr , name string , tlsConfig * tls . Config , m http . Handler ) error {
return graceful . HTTPListenAndServeTLSConfig ( network , listenAddr , name , tlsConfig , m )
2019-10-15 16:39:51 +03:00
}
// NoHTTPRedirector tells our cleanup routine that we will not be using a fallback http redirector
func NoHTTPRedirector ( ) {
2019-12-15 12:51:28 +03:00
graceful . GetManager ( ) . InformCleanup ( )
2019-10-15 16:39:51 +03:00
}
// NoMainListener tells our cleanup routine that we will not be using a possibly provided listener
// for our main HTTP/HTTPS service
func NoMainListener ( ) {
2019-12-15 12:51:28 +03:00
graceful . GetManager ( ) . InformCleanup ( )
2016-12-31 12:16:02 +03:00
}
2019-11-24 13:39:50 +03:00
2020-10-20 00:03:08 +03:00
// NoInstallListener tells our cleanup routine that we will not be using a possibly provided listener
// for our install HTTP/HTTPS service
func NoInstallListener ( ) {
graceful . GetManager ( ) . InformCleanup ( )
}
2021-03-08 05:43:59 +03:00
func runFCGI ( network , listenAddr , name string , m http . Handler ) error {
2019-11-24 13:39:50 +03:00
// This needs to handle stdin as fcgi point
2021-03-08 05:43:59 +03:00
fcgiServer := graceful . NewServer ( network , listenAddr , name )
2019-11-24 13:39:50 +03:00
err := fcgiServer . ListenAndServe ( func ( listener net . Listener ) error {
2021-04-09 16:17:57 +03:00
return fcgi . Serve ( listener , http . HandlerFunc ( func ( resp http . ResponseWriter , req * http . Request ) {
if setting . AppSubURL != "" {
req . URL . Path = strings . TrimPrefix ( req . URL . Path , setting . AppSubURL )
}
m . ServeHTTP ( resp , req )
} ) )
2019-11-24 13:39:50 +03:00
} )
if err != nil {
log . Fatal ( "Failed to start FCGI main server: %v" , err )
}
log . Info ( "FCGI Listener: %s Closed" , listenAddr )
return err
}