Fixed issue where having empty include but non-empty exclude caused 404
This commit is contained in:
parent
5c1f27a3ad
commit
31d16f65b8
62
cmd/files.go
62
cmd/files.go
|
@ -44,13 +44,40 @@ func appendPaths(m map[string][]string, path string, filters *Filters) (map[stri
|
||||||
|
|
||||||
directory, filename := filepath.Split(absolutePath)
|
directory, filename := filepath.Split(absolutePath)
|
||||||
|
|
||||||
if filters.IsEmpty() {
|
filename = strings.ToLower(filename)
|
||||||
m[directory] = append(m[directory], path)
|
|
||||||
} else {
|
switch {
|
||||||
|
case filters.HasIncludes() && !filters.HasExcludes():
|
||||||
|
for i := 0; i < len(filters.Includes); i++ {
|
||||||
|
if strings.Contains(
|
||||||
|
filename,
|
||||||
|
filters.Includes[i],
|
||||||
|
) {
|
||||||
|
m[directory] = append(m[directory], path)
|
||||||
|
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return m, nil
|
||||||
|
case !filters.HasIncludes() && filters.HasExcludes():
|
||||||
for i := 0; i < len(filters.Excludes); i++ {
|
for i := 0; i < len(filters.Excludes); i++ {
|
||||||
if strings.Contains(
|
if strings.Contains(
|
||||||
strings.ToLower(filename),
|
filename,
|
||||||
strings.ToLower(filters.Excludes[i]),
|
filters.Excludes[i],
|
||||||
|
) {
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m[directory] = append(m[directory], path)
|
||||||
|
|
||||||
|
return m, nil
|
||||||
|
case filters.HasIncludes() && filters.HasExcludes():
|
||||||
|
for i := 0; i < len(filters.Excludes); i++ {
|
||||||
|
if strings.Contains(
|
||||||
|
filename,
|
||||||
|
filters.Excludes[i],
|
||||||
) {
|
) {
|
||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
@ -58,17 +85,21 @@ func appendPaths(m map[string][]string, path string, filters *Filters) (map[stri
|
||||||
|
|
||||||
for i := 0; i < len(filters.Includes); i++ {
|
for i := 0; i < len(filters.Includes); i++ {
|
||||||
if strings.Contains(
|
if strings.Contains(
|
||||||
strings.ToLower(filename),
|
filename,
|
||||||
strings.ToLower(filters.Includes[i]),
|
filters.Includes[i],
|
||||||
) {
|
) {
|
||||||
m[directory] = append(m[directory], path)
|
m[directory] = append(m[directory], path)
|
||||||
|
|
||||||
break
|
return m, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return m, nil
|
return m, nil
|
||||||
|
default:
|
||||||
|
m[directory] = append(m[directory], path)
|
||||||
|
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFirstFile(p *Path) (string, error) {
|
func getFirstFile(p *Path) (string, error) {
|
||||||
|
@ -227,6 +258,17 @@ func getFiles(m map[string][]string, path string, filters *Filters) (map[string]
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if Filter && filters.HasExcludes() {
|
||||||
|
for i := 0; i < len(filters.Excludes); i++ {
|
||||||
|
if strings.Contains(
|
||||||
|
strings.ToLower(p),
|
||||||
|
strings.ToLower(filters.Excludes[i]),
|
||||||
|
) {
|
||||||
|
return filepath.SkipDir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case !Recursive && info.IsDir() && p != path:
|
case !Recursive && info.IsDir() && p != path:
|
||||||
return filepath.SkipDir
|
return filepath.SkipDir
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Version = "0.15.1"
|
var Version = "0.15.2"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
rootCmd.AddCommand(versionCmd)
|
rootCmd.AddCommand(versionCmd)
|
||||||
|
|
41
cmd/web.go
41
cmd/web.go
|
@ -22,17 +22,33 @@ type Filters struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Filters) IsEmpty() bool {
|
func (f *Filters) IsEmpty() bool {
|
||||||
if len(f.Includes) == 0 && len(f.Excludes) == 0 {
|
if !f.HasIncludes() && !f.HasExcludes() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *Filters) HasIncludes() bool {
|
||||||
|
if len(f.Includes) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (f *Filters) GetIncludes() string {
|
func (f *Filters) GetIncludes() string {
|
||||||
return strings.Join(f.Includes, ",")
|
return strings.Join(f.Includes, ",")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *Filters) HasExcludes() bool {
|
||||||
|
if len(f.Excludes) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (f *Filters) GetExcludes() string {
|
func (f *Filters) GetExcludes() string {
|
||||||
return strings.Join(f.Excludes, ",")
|
return strings.Join(f.Excludes, ",")
|
||||||
}
|
}
|
||||||
|
@ -53,7 +69,13 @@ func splitQueryParams(query string) []string {
|
||||||
return []string{}
|
return []string{}
|
||||||
}
|
}
|
||||||
|
|
||||||
return strings.Split(query, ",")
|
params := strings.Split(query, ",")
|
||||||
|
|
||||||
|
for i := 0; i < len(params); i++ {
|
||||||
|
params[i] = strings.ToLower(params[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
return params
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateQueryParams(filters *Filters, sort string) string {
|
func generateQueryParams(filters *Filters, sort string) string {
|
||||||
|
@ -114,7 +136,8 @@ func serveHtml(w http.ResponseWriter, r *http.Request, filePath string) error {
|
||||||
case Filter && Sort:
|
case Filter && Sort:
|
||||||
htmlBody += fmt.Sprintf(`<a href="/?include=%v&exclude=%v&sort=%v"><img src="`,
|
htmlBody += fmt.Sprintf(`<a href="/?include=%v&exclude=%v&sort=%v"><img src="`,
|
||||||
r.URL.Query().Get("include"),
|
r.URL.Query().Get("include"),
|
||||||
r.URL.Query().Get("exclude"), r.URL.Query().Get("sort"),
|
r.URL.Query().Get("exclude"),
|
||||||
|
r.URL.Query().Get("sort"),
|
||||||
)
|
)
|
||||||
case Filter && !Sort:
|
case Filter && !Sort:
|
||||||
htmlBody += fmt.Sprintf(`<a href="/?include=%v&exclude=%v"><img src="`,
|
htmlBody += fmt.Sprintf(`<a href="/?include=%v&exclude=%v"><img src="`,
|
||||||
|
@ -211,6 +234,8 @@ func serveHtmlHandler(paths []string) appHandler {
|
||||||
if Filter {
|
if Filter {
|
||||||
filters.Includes = splitQueryParams(r.URL.Query().Get("include"))
|
filters.Includes = splitQueryParams(r.URL.Query().Get("include"))
|
||||||
filters.Excludes = splitQueryParams(r.URL.Query().Get("exclude"))
|
filters.Excludes = splitQueryParams(r.URL.Query().Get("exclude"))
|
||||||
|
} else {
|
||||||
|
fmt.Println("Filters disabled")
|
||||||
}
|
}
|
||||||
|
|
||||||
sortOrder := ""
|
sortOrder := ""
|
||||||
|
@ -262,7 +287,7 @@ func serveHtmlHandler(paths []string) appHandler {
|
||||||
filePath,
|
filePath,
|
||||||
generateQueryParams(&filters, sortOrder),
|
generateQueryParams(&filters, sortOrder),
|
||||||
)
|
)
|
||||||
http.Redirect(w, r, newUrl, http.StatusSeeOther)
|
http.Redirect(w, r, newUrl, http.StatusTemporaryRedirect)
|
||||||
case r.URL.Path == "/" && sortOrder == "asc" && refererUri == "":
|
case r.URL.Path == "/" && sortOrder == "asc" && refererUri == "":
|
||||||
filePath, err := pickFile(paths, &filters, sortOrder)
|
filePath, err := pickFile(paths, &filters, sortOrder)
|
||||||
if err != nil && err == ErrNoImagesFound {
|
if err != nil && err == ErrNoImagesFound {
|
||||||
|
@ -288,7 +313,7 @@ func serveHtmlHandler(paths []string) appHandler {
|
||||||
filePath,
|
filePath,
|
||||||
generateQueryParams(&filters, sortOrder),
|
generateQueryParams(&filters, sortOrder),
|
||||||
)
|
)
|
||||||
http.Redirect(w, r, newUrl, http.StatusSeeOther)
|
http.Redirect(w, r, newUrl, http.StatusTemporaryRedirect)
|
||||||
case r.URL.Path == "/" && sortOrder == "desc" && refererUri != "":
|
case r.URL.Path == "/" && sortOrder == "desc" && refererUri != "":
|
||||||
query, err := url.QueryUnescape(refererUri)
|
query, err := url.QueryUnescape(refererUri)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -332,7 +357,7 @@ func serveHtmlHandler(paths []string) appHandler {
|
||||||
filePath,
|
filePath,
|
||||||
generateQueryParams(&filters, sortOrder),
|
generateQueryParams(&filters, sortOrder),
|
||||||
)
|
)
|
||||||
http.Redirect(w, r, newUrl, http.StatusSeeOther)
|
http.Redirect(w, r, newUrl, http.StatusTemporaryRedirect)
|
||||||
case r.URL.Path == "/" && sortOrder == "desc" && refererUri == "":
|
case r.URL.Path == "/" && sortOrder == "desc" && refererUri == "":
|
||||||
filePath, err := pickFile(paths, &filters, sortOrder)
|
filePath, err := pickFile(paths, &filters, sortOrder)
|
||||||
if err != nil && err == ErrNoImagesFound {
|
if err != nil && err == ErrNoImagesFound {
|
||||||
|
@ -358,7 +383,7 @@ func serveHtmlHandler(paths []string) appHandler {
|
||||||
filePath,
|
filePath,
|
||||||
generateQueryParams(&filters, sortOrder),
|
generateQueryParams(&filters, sortOrder),
|
||||||
)
|
)
|
||||||
http.Redirect(w, r, newUrl, http.StatusSeeOther)
|
http.Redirect(w, r, newUrl, http.StatusTemporaryRedirect)
|
||||||
case r.URL.Path == "/":
|
case r.URL.Path == "/":
|
||||||
filePath, err := pickFile(paths, &filters, sortOrder)
|
filePath, err := pickFile(paths, &filters, sortOrder)
|
||||||
if err != nil && err == ErrNoImagesFound {
|
if err != nil && err == ErrNoImagesFound {
|
||||||
|
@ -374,7 +399,7 @@ func serveHtmlHandler(paths []string) appHandler {
|
||||||
filePath,
|
filePath,
|
||||||
generateQueryParams(&filters, sortOrder),
|
generateQueryParams(&filters, sortOrder),
|
||||||
)
|
)
|
||||||
http.Redirect(w, r, newUrl, http.StatusSeeOther)
|
http.Redirect(w, r, newUrl, http.StatusTemporaryRedirect)
|
||||||
default:
|
default:
|
||||||
filePath := r.URL.Path
|
filePath := r.URL.Path
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue