X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=handler.go;h=10b0d2ff83f0b7b557be80494eea1389e8d0e31b;hb=HEAD;hp=44c8a1fb40886d7aaf731ed7aeb062280f1a2fbf;hpb=6720be1b80880c7b58a782ebef48956d050dbbfd;p=godlighty.git diff --git a/handler.go b/handler.go index 44c8a1f..4ac2b04 100644 --- a/handler.go +++ b/handler.go @@ -1,19 +1,17 @@ -/* -godlighty -- highly-customizable HTTP, HTTP/2, HTTPS server -Copyright (C) 2021-2023 Sergey Matveev - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, version 3 of the License. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ +// godlighty -- highly-customizable HTTP, HTTP/2, HTTPS server +// Copyright (C) 2021-2025 Sergey Matveev +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . package godlighty @@ -24,6 +22,7 @@ import ( "errors" "fmt" "io" + "io/fs" "log" "net" "net/http" @@ -47,10 +46,10 @@ const ( var ( gzPool = sync.Pool{ - New: func() interface{} { return gzip.NewWriter(io.Discard) }, + New: func() any { return gzip.NewWriter(io.Discard) }, } zstdPool = sync.Pool{ - New: func() interface{} { + New: func() any { w, err := zstd.NewWriter( io.Discard, zstd.WithEncoderLevel(zstd.SpeedDefault), @@ -184,7 +183,8 @@ func (h Handler) Handle( IndexLookuped: if fi.IsDir() { if cfg.DirList { - entries, err := os.ReadDir(pth) + var entries []fs.DirEntry + entries, err = os.ReadDir(pth) if err != nil { printErr(http.StatusInternalServerError, err) http.Error(w, "internal error", http.StatusInternalServerError) @@ -196,7 +196,7 @@ IndexLookuped: http.Error(w, "internal error", http.StatusInternalServerError) return } - etag, err = ctimeETag(fd) + etag, err = mtimeETag(fd) fd.Close() if err != nil { printErr(http.StatusInternalServerError, err) @@ -220,7 +220,7 @@ IndexLookuped: } else { for _, index := range append(cfg.Indices, Index) { p := path.Join(pth, index) - if _, err := os.Stat(p); err == nil { + if _, err = os.Stat(p); err == nil { pth = p fi, err = os.Stat(pth) if err != nil { @@ -242,7 +242,7 @@ IndexLookuped: http.Error(w, "internal error", http.StatusInternalServerError) return } - etag, err = ctimeETag(fd) + etag, err = mtimeETag(fd) if err != nil { printErr(http.StatusInternalServerError, err) http.Error(w, "internal error", http.StatusInternalServerError) @@ -273,6 +273,9 @@ IndexLookuped: for name, digest := range forHTTP.Hashes { w.Header().Add("Digest", name+"="+base64.StdEncoding.EncodeToString(digest)) } + for _, u := range forHTTP.Torrents { + w.Header().Add("Link", "<"+u+`>; rel=describedby; type="application/x-bittorrent"`) + } } SkipMeta4: