diff --git a/main.go b/main.go index e5f07fa..c66f7f8 100644 --- a/main.go +++ b/main.go @@ -134,6 +134,8 @@ func main() { r.HandleFunc("/", handleIndex). Methods(http.MethodGet) + r.HandleFunc("/robots.txt", handleRobotsTXT). + Methods(http.MethodGet) r.PathPrefix("/").HandlerFunc(assetDelivery). Methods(http.MethodGet) @@ -241,6 +243,18 @@ func handleIndex(w http.ResponseWriter, _ *http.Request) { } } +func handleRobotsTXT(w http.ResponseWriter, _ *http.Request) { + // If explicitly set to false, do not create robots.txt. + if cust.DisableSearchIndex != nil && !*cust.DisableSearchIndex { + http.NotFound(w, nil) + return + } + + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + w.Header().Set("X-Content-Type-Options", "nosniff") + _, _ = w.Write([]byte("User-agent: *\nDisallow: /\n")) +} + func handleRemoveAcceptEncoding(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { r.Header.Del("Accept-Encoding") diff --git a/pkg/customization/customize.go b/pkg/customization/customize.go index c22e6ac..b1c5517 100644 --- a/pkg/customization/customize.go +++ b/pkg/customization/customize.go @@ -28,6 +28,7 @@ type ( DisableAppTitle bool `json:"disableAppTitle,omitempty" yaml:"disableAppTitle"` DisablePoweredBy bool `json:"disablePoweredBy,omitempty" yaml:"disablePoweredBy"` DisableQRSupport bool `json:"disableQRSupport,omitempty" yaml:"disableQRSupport"` + DisableSearchIndex *bool `json:"disable-search-index" yaml:"disableSearchIndex" default:"true"` DisableThemeSwitcher bool `json:"disableThemeSwitcher,omitempty" yaml:"disableThemeSwitcher"` DisableExpiryOverride bool `json:"disableExpiryOverride,omitempty" yaml:"disableExpiryOverride"`