Add Type() method to types.Type, to allow displaying served file size for both embedded and inline files

This commit is contained in:
Seednode 2023-09-15 15:13:45 -05:00
parent e67384caeb
commit d4cf9cfa4f
12 changed files with 85 additions and 22 deletions

View File

@ -36,7 +36,7 @@ func notFound(w http.ResponseWriter, r *http.Request, path string) error {
startTime := time.Now() startTime := time.Now()
if Verbose { if Verbose {
fmt.Printf("%s | Unavailable file %s requested by %s\n", fmt.Printf("%s | Error: Unavailable file %s requested by %s\n",
startTime.Format(logDate), startTime.Format(logDate),
path, path,
r.RemoteAddr, r.RemoteAddr,
@ -58,7 +58,7 @@ func serverError(w http.ResponseWriter, r *http.Request, i interface{}) {
startTime := time.Now() startTime := time.Now()
if Verbose { if Verbose {
fmt.Printf("%s | Invalid request for %s from %s\n", fmt.Printf("%s | Error: Invalid request for %s from %s\n",
startTime.Format(logDate), startTime.Format(logDate),
r.URL.Path, r.URL.Path,
r.RemoteAddr, r.RemoteAddr,

View File

@ -79,6 +79,19 @@ func humanReadableSize(bytes int) string {
float64(bytes)/float64(div), "KMGTPE"[exp]) float64(bytes)/float64(div), "KMGTPE"[exp])
} }
func kill(path string, cache *fileCache) error {
err := os.Remove(path)
if err != nil {
return err
}
if Cache {
cache.remove(path)
}
return nil
}
func preparePath(path string) string { func preparePath(path string) string {
if runtime.GOOS == "windows" { if runtime.GOOS == "windows" {
return fmt.Sprintf("%s/%s", mediaPrefix, filepath.ToSlash(path)) return fmt.Sprintf("%s/%s", mediaPrefix, filepath.ToSlash(path))
@ -218,7 +231,7 @@ func pathIsValid(path string, paths []string) bool {
switch { switch {
case Verbose && !matchesPrefix: case Verbose && !matchesPrefix:
fmt.Printf("%s | Error: Failed to serve file outside specified path(s): %s\n", fmt.Printf("%s | Error: File outside specified path(s): %s\n",
time.Now().Format(logDate), time.Now().Format(logDate),
path, path,
) )
@ -422,7 +435,7 @@ Poll:
} }
if Verbose { if Verbose {
fmt.Printf("%s | Indexed %d/%d files across %d/%d directories in %s\n", fmt.Printf("%s | Index: %d/%d files across %d/%d directories in %s\n",
time.Now().Format(logDate), time.Now().Format(logDate),
stats.filesMatched, stats.filesMatched,
stats.filesMatched+stats.filesSkipped, stats.filesMatched+stats.filesSkipped,

View File

@ -123,7 +123,7 @@ func serveIndexHtml(args []string, cache *fileCache, paginate bool) httprouter.H
} }
if Verbose { if Verbose {
fmt.Printf("%s | Served HTML index page (%s) to %s in %s\n", fmt.Printf("%s | Serve: HTML index page (%s) to %s in %s\n",
startTime.Format(logDate), startTime.Format(logDate),
humanReadableSize(b), humanReadableSize(b),
realIP(r), realIP(r),
@ -178,7 +178,7 @@ func serveIndexJson(args []string, index *fileCache, errorChannel chan<- error)
w.Write(response) w.Write(response)
if Verbose { if Verbose {
fmt.Printf("%s | Served JSON index page (%s) to %s in %s\n", fmt.Printf("%s | Serve: JSON index page (%s) to %s in %s\n",
startTime.Format(logDate), startTime.Format(logDate),
humanReadableSize(len(response)), humanReadableSize(len(response)),
realIP(r), realIP(r),
@ -199,7 +199,7 @@ func serveAvailableExtensions() httprouter.Handle {
w.Write(response) w.Write(response)
if Verbose { if Verbose {
fmt.Printf("%s | Served available extensions list (%s) to %s in %s\n", fmt.Printf("%s | Serve: Available extension list (%s) to %s in %s\n",
startTime.Format(logDate), startTime.Format(logDate),
humanReadableSize(len(response)), humanReadableSize(len(response)),
realIP(r), realIP(r),
@ -220,7 +220,7 @@ func serveEnabledExtensions(formats *types.Types) httprouter.Handle {
w.Write(response) w.Write(response)
if Verbose { if Verbose {
fmt.Printf("%s | Served registered extensions list (%s) to %s in %s\n", fmt.Printf("%s | Serve: Registered extension list (%s) to %s in %s\n",
startTime.Format(logDate), startTime.Format(logDate),
humanReadableSize(len(response)), humanReadableSize(len(response)),
realIP(r), realIP(r),
@ -241,7 +241,7 @@ func serveAvailableMimeTypes() httprouter.Handle {
w.Write(response) w.Write(response)
if Verbose { if Verbose {
fmt.Printf("%s | Served available MIME types list (%s) to %s in %s\n", fmt.Printf("%s | Served available MIME type list (%s) to %s in %s\n",
startTime.Format(logDate), startTime.Format(logDate),
humanReadableSize(len(response)), humanReadableSize(len(response)),
realIP(r), realIP(r),
@ -262,7 +262,7 @@ func serveEnabledMimeTypes(formats *types.Types) httprouter.Handle {
w.Write(response) w.Write(response)
if Verbose { if Verbose {
fmt.Printf("%s | Served registered MIME types list (%s) to %s in %s\n", fmt.Printf("%s | Served registered MIME type list (%s) to %s in %s\n",
startTime.Format(logDate), startTime.Format(logDate),
humanReadableSize(len(response)), humanReadableSize(len(response)),
realIP(r), realIP(r),

View File

@ -11,7 +11,7 @@ import (
) )
const ( const (
ReleaseVersion string = "0.89.1" ReleaseVersion string = "0.90.0"
) )
var ( var (

View File

@ -100,8 +100,17 @@ func serveStaticFile(paths []string, cache *fileCache, errorChannel chan<- error
fileSize := humanReadableSize(len(buf)) fileSize := humanReadableSize(len(buf))
if Russian { refererUri, err := stripQueryParams(refererToUri(r.Referer()))
err = os.Remove(filePath) if err != nil {
errorChannel <- err
serverError(w, r, nil)
return
}
if Russian && refererUri != "" {
err = kill(filePath, cache)
if err != nil { if err != nil {
errorChannel <- err errorChannel <- err
@ -109,14 +118,10 @@ func serveStaticFile(paths []string, cache *fileCache, errorChannel chan<- error
return return
} }
if Cache {
cache.remove(filePath)
}
} }
if Verbose { if Verbose {
fmt.Printf("%s | Served %s (%s) to %s in %s\n", fmt.Printf("%s | Serve: %s (%s) to %s in %s\n",
startTime.Format(logDate), startTime.Format(logDate),
filePath, filePath,
fileSize, fileSize,
@ -201,7 +206,7 @@ func serveRoot(paths []string, regexes *regexes, cache *fileCache, formats *type
} }
} }
func serveMedia(paths []string, regexes *regexes, formats *types.Types, errorChannel chan<- error) httprouter.Handle { func serveMedia(paths []string, regexes *regexes, cache *fileCache, formats *types.Types, errorChannel chan<- error) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) { return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
filters := &filters{ filters := &filters{
included: splitQueryParams(r.URL.Query().Get("include"), regexes), included: splitQueryParams(r.URL.Query().Get("include"), regexes),
@ -287,7 +292,11 @@ func serveMedia(paths []string, regexes *regexes, formats *types.Types, errorCha
htmlBody.WriteString(body) htmlBody.WriteString(body)
htmlBody.WriteString(`</body></html>`) htmlBody.WriteString(`</body></html>`)
_, err = io.WriteString(w, gohtml.Format(htmlBody.String())) startTime := time.Now()
formattedPage := gohtml.Format(htmlBody.String())
_, err = io.WriteString(w, formattedPage)
if err != nil { if err != nil {
errorChannel <- err errorChannel <- err
@ -295,6 +304,22 @@ func serveMedia(paths []string, regexes *regexes, formats *types.Types, errorCha
return return
} }
if format.Type() != "embed" {
if Verbose {
fmt.Printf("%s | Serve: %s (%d) to %s in %s\n",
startTime.Format(logDate),
path,
len(formattedPage),
realIP(r),
time.Since(startTime).Round(time.Microsecond),
)
}
if Russian {
kill(path, cache)
}
}
} }
} }
@ -426,7 +451,7 @@ func ServePage(args []string) error {
register(mux, Prefix+"/favicon.ico", serveFavicons(errorChannel)) register(mux, Prefix+"/favicon.ico", serveFavicons(errorChannel))
register(mux, Prefix+mediaPrefix+"/*media", serveMedia(paths, regexes, formats, errorChannel)) register(mux, Prefix+mediaPrefix+"/*media", serveMedia(paths, regexes, cache, formats, errorChannel))
register(mux, Prefix+sourcePrefix+"/*static", serveStaticFile(paths, cache, errorChannel)) register(mux, Prefix+sourcePrefix+"/*static", serveStaticFile(paths, cache, errorChannel))
@ -456,7 +481,7 @@ func ServePage(args []string) error {
fmt.Printf("%s | Error: %v\n", time.Now().Format(logDate), err) fmt.Printf("%s | Error: %v\n", time.Now().Format(logDate), err)
if ExitOnError { if ExitOnError {
fmt.Printf("%s | Shutting down...\n", time.Now().Format(logDate)) fmt.Printf("%s | Error: Shutting down...\n", time.Now().Format(logDate))
srv.Shutdown(context.Background()) srv.Shutdown(context.Background())
} }

View File

@ -57,6 +57,10 @@ func (t Format) Validate(filePath string) bool {
return true return true
} }
func (t Format) Type() string {
return "embed"
}
func New() Format { func New() Format {
return Format{} return Format{}
} }

View File

@ -221,6 +221,10 @@ func (t Format) Validate(filePath string) bool {
return true return true
} }
func (t Format) Type() string {
return "html"
}
func New(theme string) Format { func New(theme string) Format {
return Format{ return Format{
Theme: theme, Theme: theme,

View File

@ -56,6 +56,10 @@ func (t Format) Validate(filePath string) bool {
return true return true
} }
func (t Format) Type() string {
return "embed"
}
func New() Format { func New() Format {
return Format{} return Format{}
} }

View File

@ -120,6 +120,10 @@ func ImageDimensions(path string) (*dimensions, error) {
return &dimensions{width: decodedConfig.Width, height: decodedConfig.Height}, nil return &dimensions{width: decodedConfig.Width, height: decodedConfig.Height}, nil
} }
func (t Format) Type() string {
return "embed"
}
func New() Format { func New() Format {
return Format{} return Format{}
} }

View File

@ -76,6 +76,10 @@ func (t Format) Validate(filePath string) bool {
return utf8.Valid(head) return utf8.Valid(head)
} }
func (t Format) Type() string {
return "html"
}
func New() Format { func New() Format {
return Format{} return Format{}
} }

View File

@ -15,6 +15,7 @@ var SupportedFormats = &Types{
} }
type Type interface { type Type interface {
Type() string
Css() string Css() string
Title(rootUrl, fileUri, filePath, fileName, prefix, mime string) (string, error) Title(rootUrl, fileUri, filePath, fileName, prefix, mime string) (string, error)
Body(rootUrl, fileUri, filePath, fileName, prefix, mime string) (string, error) Body(rootUrl, fileUri, filePath, fileName, prefix, mime string) (string, error)

View File

@ -63,6 +63,10 @@ func (t Format) Validate(filePath string) bool {
return true return true
} }
func (t Format) Type() string {
return "embed"
}
func New() Format { func New() Format {
return Format{} return Format{}
} }