Added endpoints to view registered file formats
This commit is contained in:
parent
c77a151a24
commit
cbf7218453
|
@ -78,9 +78,13 @@ The cache can be regenerated at any time by accessing the `/clear_cache` endpoin
|
||||||
|
|
||||||
If `--cache-file` is set, the cache will be loaded from the specified file on start, and written to the file whenever it is re-generated.
|
If `--cache-file` is set, the cache will be loaded from the specified file on start, and written to the file whenever it is re-generated.
|
||||||
|
|
||||||
If the `-i|--index` flag is passed, two additional endpoints—`/html` and `/json`—are registered.
|
If the `-i|--index` flag is passed, four additional endpoints are registered.
|
||||||
|
|
||||||
When accessed, these endpoints return the contents of the index, in HTML and JSON formats respectively. This can prove useful when confirming whether the index is generated successfully, or whether a given file is in the index.
|
The first of these—`/html` and `/json`—return the contents of the index, in HTML and JSON formats respectively.
|
||||||
|
|
||||||
|
This can prove useful when confirming whether the index is generated successfully, or whether a given file is in the index.
|
||||||
|
|
||||||
|
The other two endpoints—`/extensions` and `/mime_types`—return the registered file types.
|
||||||
|
|
||||||
## Statistics
|
## Statistics
|
||||||
|
|
||||||
|
|
77
cmd/index.go
77
cmd/index.go
|
@ -11,6 +11,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"slices"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -316,3 +317,79 @@ func serveIndexJson(args []string, index *FileIndex) httprouter.Handle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func serveExtensions(formats *types.Types) httprouter.Handle {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
|
w.Header().Set("Content-Type", "text/plain")
|
||||||
|
|
||||||
|
startTime := time.Now()
|
||||||
|
|
||||||
|
var output strings.Builder
|
||||||
|
|
||||||
|
extensions := make([]string, len(formats.Extensions))
|
||||||
|
|
||||||
|
i := 0
|
||||||
|
|
||||||
|
for k := range formats.Extensions {
|
||||||
|
extensions[i] = k
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
|
||||||
|
slices.Sort(extensions)
|
||||||
|
|
||||||
|
for _, v := range extensions {
|
||||||
|
output.WriteString(v + "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
response := []byte(output.String())
|
||||||
|
|
||||||
|
w.Write(response)
|
||||||
|
|
||||||
|
if Verbose {
|
||||||
|
fmt.Printf("%s | Served registered extensions list (%s) to %s in %s\n",
|
||||||
|
startTime.Format(LogDate),
|
||||||
|
humanReadableSize(len(response)),
|
||||||
|
realIP(r),
|
||||||
|
time.Since(startTime).Round(time.Microsecond),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func serveMimeTypes(formats *types.Types) httprouter.Handle {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
|
w.Header().Set("Content-Type", "text/plain")
|
||||||
|
|
||||||
|
startTime := time.Now()
|
||||||
|
|
||||||
|
var output strings.Builder
|
||||||
|
|
||||||
|
mimeTypes := make([]string, len(formats.MimeTypes))
|
||||||
|
|
||||||
|
i := 0
|
||||||
|
|
||||||
|
for k := range formats.MimeTypes {
|
||||||
|
mimeTypes[i] = k
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
|
||||||
|
slices.Sort(mimeTypes)
|
||||||
|
|
||||||
|
for _, v := range mimeTypes {
|
||||||
|
output.WriteString(v + "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
response := []byte(output.String())
|
||||||
|
|
||||||
|
w.Write(response)
|
||||||
|
|
||||||
|
if Verbose {
|
||||||
|
fmt.Printf("%s | Served registered MIME types list (%s) to %s in %s\n",
|
||||||
|
startTime.Format(LogDate),
|
||||||
|
humanReadableSize(len(response)),
|
||||||
|
realIP(r),
|
||||||
|
time.Since(startTime).Round(time.Microsecond),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ReleaseVersion string = "0.74.0"
|
ReleaseVersion string = "0.75.0"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -46,12 +46,6 @@ var (
|
||||||
Short: "Serves random media from the specified directories.",
|
Short: "Serves random media from the specified directories.",
|
||||||
Args: cobra.MinimumNArgs(1),
|
Args: cobra.MinimumNArgs(1),
|
||||||
PreRunE: func(cmd *cobra.Command, args []string) error {
|
PreRunE: func(cmd *cobra.Command, args []string) error {
|
||||||
// enable image support if no other flags are passed, to retain backwards compatibility
|
|
||||||
// to be replaced with MarkFlagsOneRequired on next spf13/cobra update
|
|
||||||
if !(All || Audio || Flash || Images || Text || Videos) {
|
|
||||||
Images = true
|
|
||||||
}
|
|
||||||
|
|
||||||
if Index {
|
if Index {
|
||||||
cmd.MarkFlagRequired("cache")
|
cmd.MarkFlagRequired("cache")
|
||||||
}
|
}
|
||||||
|
|
14
cmd/web.go
14
cmd/web.go
|
@ -324,10 +324,6 @@ func ServePage(args []string) error {
|
||||||
formats.Add(types.Flash{})
|
formats.Add(types.Flash{})
|
||||||
}
|
}
|
||||||
|
|
||||||
if Images || All {
|
|
||||||
formats.Add(types.Images{})
|
|
||||||
}
|
|
||||||
|
|
||||||
if Text || All {
|
if Text || All {
|
||||||
formats.Add(types.Text{})
|
formats.Add(types.Text{})
|
||||||
}
|
}
|
||||||
|
@ -336,6 +332,12 @@ func ServePage(args []string) error {
|
||||||
formats.Add(types.Video{})
|
formats.Add(types.Video{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// enable image support if no other flags are passed, to retain backwards compatibility
|
||||||
|
// to be replaced with rootCmd.MarkFlagsOneRequired on next spf13/cobra update
|
||||||
|
if Images || All || len(formats.Extensions) == 0 {
|
||||||
|
formats.Add(types.Images{})
|
||||||
|
}
|
||||||
|
|
||||||
paths, err := normalizePaths(args, formats)
|
paths, err := normalizePaths(args, formats)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -416,6 +418,10 @@ func ServePage(args []string) error {
|
||||||
if PageLength != 0 {
|
if PageLength != 0 {
|
||||||
mux.GET("/json/:page", serveIndexJson(args, index))
|
mux.GET("/json/:page", serveIndexJson(args, index))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mux.GET("/extensions", serveExtensions(formats))
|
||||||
|
|
||||||
|
mux.GET("/mime_types", serveMimeTypes(formats))
|
||||||
}
|
}
|
||||||
|
|
||||||
if Profile {
|
if Profile {
|
||||||
|
|
|
@ -44,6 +44,7 @@ func (t Text) Extensions() map[string]string {
|
||||||
return map[string]string{
|
return map[string]string{
|
||||||
`.css`: `text/css`,
|
`.css`: `text/css`,
|
||||||
`.csv`: `text/csv`,
|
`.csv`: `text/csv`,
|
||||||
|
`.htm`: `text/html`,
|
||||||
`.html`: `text/html`,
|
`.html`: `text/html`,
|
||||||
`.js`: `text/javascript`,
|
`.js`: `text/javascript`,
|
||||||
`.json`: `application/json`,
|
`.json`: `application/json`,
|
||||||
|
@ -59,6 +60,7 @@ func (t Text) MimeTypes() []string {
|
||||||
`application/xml`,
|
`application/xml`,
|
||||||
`text/css`,
|
`text/css`,
|
||||||
`text/csv`,
|
`text/csv`,
|
||||||
|
`text/html`,
|
||||||
`text/javascript`,
|
`text/javascript`,
|
||||||
`text/plain`,
|
`text/plain`,
|
||||||
`text/plain; charset=utf-8`,
|
`text/plain; charset=utf-8`,
|
||||||
|
|
Loading…
Reference in New Issue