feat: add hidden files flag (#2)

pull/3756/head
Laurynas Gadliauskas 2021-05-28 15:11:43 +03:00 committed by GitHub
parent 11092eed3c
commit 847d870782
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 65 additions and 21 deletions

1
.gitignore vendored
View File

@ -28,4 +28,5 @@ yarn-error.log*
*.sln
*.sw*
bin/
dist/
build/

View File

@ -91,4 +91,9 @@ bump-version: | ; $(info $(M) creating a new release…)
## help: Show this help
.PHONY: help
help:
@sed -n 's/^## //p' $(MAKEFILE_LIST) | column -t -s ':' | sed -e 's/^/ /' | sort
@sed -n 's/^## //p' $(MAKEFILE_LIST) | column -t -s ':' | sed -e 's/^/ /' | sort
.PHONY: build-release-bin
build-release-bin:
GO111MODULE=on GOOS=linux GOARCH=amd64 $(GO) build -ldflags '$(LDFLAGS)' -o bin/filebrowser-$(VERSION)
tar -C bin -czf "dist/filebrowser-$(VERSION).tar.gz" "filebrowser-$(VERSION)"

View File

@ -43,6 +43,8 @@ you want to change. Other options will remain unchanged.`,
ser.Port = mustGetString(flags, flag.Name)
case "log":
ser.Log = mustGetString(flags, flag.Name)
case "hidden-files":
ser.HiddenFiles = convertFileStrToFileMap(mustGetString(flags, flag.Name))
case "signup":
set.Signup = mustGetBool(flags, flag.Name)
case "auth.method":

View File

@ -69,6 +69,7 @@ func addServerFlags(flags *pflag.FlagSet) {
flags.Bool("disable-preview-resize", false, "disable resize of image previews")
flags.Bool("disable-exec", false, "disables Command Runner feature")
flags.Bool("disable-type-detection-by-header", false, "disables type detection by reading file headers")
flags.String("hidden-files", "", "comma separated list of files that should be hidden")
}
var rootCmd = &cobra.Command{
@ -260,6 +261,10 @@ func getRunParams(flags *pflag.FlagSet, st *storage.Storage) *settings.Server {
_, disableExec := getParamB(flags, "disable-exec")
server.EnableExec = !disableExec
if val, set := getParamB(flags, "hidden-files"); set {
server.HiddenFiles = convertFileStrToFileMap(val)
}
return server
}

View File

@ -191,3 +191,17 @@ func convertCmdStrToCmdArray(cmd string) []string {
}
return cmdArray
}
// convertFileStrToFileMap parses a comma-separated file list string
// into a map where each key is a separate file
func convertFileStrToFileMap(files string) map[string]struct{} {
fileMap := make(map[string]struct{})
files = strings.TrimSpace(files)
if files != "" {
fileParts := strings.Split(files, ",")
for _, file := range fileParts {
fileMap[file] = struct{}{}
}
}
return fileMap
}

View File

@ -108,3 +108,13 @@ func (l byModified) Less(i, j int) bool {
iModified, jModified := l.Items[i].ModTime, l.Items[j].ModTime
return iModified.Sub(jModified) < 0
}
func (l *Listing) FilterItems(fn func(fi *FileInfo) bool) {
var filtered []*FileInfo
for _, item := range l.Items {
if fn(item) {
filtered = append(filtered, item)
}
}
l.Items = filtered
}

View File

@ -16,6 +16,7 @@
/>
<button
:disabled="loading"
v-for="(ext, format) in formats"
:key="format"
class="button button--block"
@ -38,6 +39,7 @@ export default {
data: function () {
return {
name: "",
loading: false,
formats: {
zip: "zip",
tar: "tar",
@ -74,11 +76,14 @@ export default {
uri = uri.replace("//", "/");
try {
this.loading = true
await api.archive(uri, this.name, format, ...items);
this.$store.commit("setReload", true);
} catch (e) {
this.$showError(e);
} finally {
this.loading = false
}
this.$store.commit("closeHovers");

View File

@ -30,6 +30,7 @@
type="submit"
:aria-label="$t('buttons.unarchive')"
:title="$t('buttons.unarchive')"
:disabled="loading"
>
{{ $t("buttons.unarchive") }}
</button>
@ -45,6 +46,7 @@ export default {
name: "rename",
data: function () {
return {
loading: false,
name: "",
};
},
@ -63,11 +65,14 @@ export default {
dst = dst.replace("//", "/");
try {
this.loading = true;
await api.unarchive(item.url, dst, false);
this.$store.commit("setReload", true);
} catch (e) {
this.$showError(e);
} finally {
this.loading = true;
}
this.$store.commit("closeHovers");

View File

@ -7,14 +7,6 @@
</div>
<div class="card-content">
<p>
<input type="checkbox" v-model="hideDotfiles" />
{{ $t("settings.hideDotfiles") }}
</p>
<p>
<input type="checkbox" v-model="singleClick" />
{{ $t("settings.singleClick") }}
</p>
<h3>{{ $t("settings.language") }}</h3>
<languages
class="input input--block"

View File

@ -48,6 +48,10 @@ var resourceGetHandler = withUser(func(w http.ResponseWriter, r *http.Request, d
if file.IsDir {
file.Listing.Sorting = d.user.Sorting
file.Listing.ApplySort()
file.Listing.FilterItems(func(fi *files.FileInfo) bool {
_, exists := d.server.HiddenFiles[fi.Name]
return !exists
})
return renderJSON(w, r, file)
}

View File

@ -30,18 +30,19 @@ func (s *Settings) GetRules() []rules.Rule {
// Server specific settings.
type Server struct {
Root string `json:"root"`
BaseURL string `json:"baseURL"`
Socket string `json:"socket"`
TLSKey string `json:"tlsKey"`
TLSCert string `json:"tlsCert"`
Port string `json:"port"`
Address string `json:"address"`
Log string `json:"log"`
EnableThumbnails bool `json:"enableThumbnails"`
ResizePreview bool `json:"resizePreview"`
EnableExec bool `json:"enableExec"`
TypeDetectionByHeader bool `json:"typeDetectionByHeader"`
Root string `json:"root"`
BaseURL string `json:"baseURL"`
Socket string `json:"socket"`
TLSKey string `json:"tlsKey"`
TLSCert string `json:"tlsCert"`
Port string `json:"port"`
Address string `json:"address"`
Log string `json:"log"`
EnableThumbnails bool `json:"enableThumbnails"`
ResizePreview bool `json:"resizePreview"`
EnableExec bool `json:"enableExec"`
TypeDetectionByHeader bool `json:"typeDetectionByHeader"`
HiddenFiles map[string]struct{} `json:"hiddenFiles"`
}
// Clean cleans any variables that might need cleaning.