Skip to content

Commit

Permalink
Add custom served folders (stashapp#620)
Browse files Browse the repository at this point in the history
  • Loading branch information
WithoutPants authored Jun 21, 2020
1 parent bee5dda commit 532900b
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 0 deletions.
18 changes: 18 additions & 0 deletions pkg/api/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,24 @@ func Start() {
})

startThumbCache()

// Serve static folders
customServedFolders := config.GetCustomServedFolders()
if customServedFolders != nil {
r.HandleFunc("/custom/*", func(w http.ResponseWriter, r *http.Request) {
r.URL.Path = strings.Replace(r.URL.Path, "/custom", "", 1)

// map the path to the applicable filesystem location
var dir string
r.URL.Path, dir = customServedFolders.GetFilesystemLocation(r.URL.Path)
if dir != "" {
http.FileServer(http.Dir(dir)).ServeHTTP(w, r)
} else {
http.NotFound(w, r)
}
})
}

// Serve the web app
r.HandleFunc("/*", func(w http.ResponseWriter, r *http.Request) {
ext := path.Ext(r.URL.Path)
Expand Down
10 changes: 10 additions & 0 deletions pkg/manager/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ const ScraperUserAgent = "scraper_user_agent"
// i18n
const Language = "language"

// served directories
// this should be manually configured only
const CustomServedFolders = "custom_served_folders"

// Interface options
const SoundOnPreview = "sound_on_preview"
const WallShowTitle = "wall_show_title"
Expand Down Expand Up @@ -231,6 +235,12 @@ func GetMaxSessionAge() int {
return viper.GetInt(MaxSessionAge)
}

// GetCustomServedFolders gets the map of custom paths to their applicable
// filesystem locations
func GetCustomServedFolders() URLMap {
return viper.GetStringMapString(CustomServedFolders)
}

// Interface options
func GetSoundOnPreview() bool {
viper.SetDefault(SoundOnPreview, true)
Expand Down
21 changes: 21 additions & 0 deletions pkg/manager/config/urlmap.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package config

import "strings"

type URLMap map[string]string

// GetFilesystemLocation returns the adjusted URL and the filesystem location
func (m URLMap) GetFilesystemLocation(url string) (string, string) {
root := m["/"]
for k, v := range m {
if k != "/" && strings.HasPrefix(url, k) {
return strings.TrimPrefix(url, k), v
}
}

if root != "" {
return url, root
}

return url, ""
}
28 changes: 28 additions & 0 deletions pkg/manager/config/urlmap_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package config

import (
"testing"

"github.com/stretchr/testify/assert"
)

func TestURLMapGetFilesystemLocation(t *testing.T) {
// create the URLMap
urlMap := make(URLMap)
urlMap["/"] = "root"
urlMap["/foo"] = "bar"

url, fs := urlMap.GetFilesystemLocation("/foo/bar")
assert.Equal(t, "/bar", url)
assert.Equal(t, urlMap["/foo"], fs)

url, fs = urlMap.GetFilesystemLocation("/bar")
assert.Equal(t, "/bar", url)
assert.Equal(t, urlMap["/"], fs)

delete(urlMap, "/")

url, fs = urlMap.GetFilesystemLocation("/bar")
assert.Equal(t, "/bar", url)
assert.Equal(t, "", fs)
}
1 change: 1 addition & 0 deletions ui/v2.5/src/components/Changelog/versions/v030.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import ReactMarkdown from "react-markdown";

const markup = `
### ✨ New Features
* Add support for custom served folders.
* Add support for parent/child studios.
### 🎨 Improvements
Expand Down

0 comments on commit 532900b

Please sign in to comment.