diff --git a/internal/opensearch_handler.go b/internal/opensearch_handler.go new file mode 100644 index 0000000..6a0f7b8 --- /dev/null +++ b/internal/opensearch_handler.go @@ -0,0 +1,35 @@ +package internal + +import ( + "fmt" + "net/http" + + "github.com/julienschmidt/httprouter" +) + +const OpenSearchTemplate string = ` + + %s + %s + search + %s + + +` + +// OpenSearchHandler ... +func (s *Server) OpenSearchHandler() httprouter.Handle { + return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { + w.Header().Set("Content-Type", "text/xml") + + w.Write( + []byte(fmt.Sprintf( + OpenSearchTemplate, + s.config.Name, + s.config.Description, + s.config.AdminEmail, + s.config.BaseURL, + )), + ) + } +} diff --git a/internal/server.go b/internal/server.go index e7c8c8e..dc8ea97 100644 --- a/internal/server.go +++ b/internal/server.go @@ -285,6 +285,8 @@ func (s *Server) initRoutes() { s.router.GET("/", s.IndexHandler()) s.router.HEAD("/", s.IndexHandler()) + s.router.GET("/opensearch.xml", s.OpenSearchHandler()) + s.router.GET("/robots.txt", s.RobotsHandler()) s.router.HEAD("/robots.txt", s.RobotsHandler()) diff --git a/internal/templates/base.html b/internal/templates/base.html index be49e90..88f41f9 100644 --- a/internal/templates/base.html +++ b/internal/templates/base.html @@ -13,6 +13,8 @@ {{ end }} + +