From 262416389b27f12be0c4047b5d96aeb0fccad7b9 Mon Sep 17 00:00:00 2001 From: Massimo Lusetti Date: Thu, 14 Apr 2022 19:31:36 +0200 Subject: [PATCH] expose command line option to configure umask for directories and files --- changelog/0.11.0_2022-02-10/issue-189 | 8 ++++++++ cmd/rest-server/main.go | 2 ++ handlers.go | 5 +++++ 3 files changed, 15 insertions(+) create mode 100644 changelog/0.11.0_2022-02-10/issue-189 diff --git a/changelog/0.11.0_2022-02-10/issue-189 b/changelog/0.11.0_2022-02-10/issue-189 new file mode 100644 index 00000000..14e0008c --- /dev/null +++ b/changelog/0.11.0_2022-02-10/issue-189 @@ -0,0 +1,8 @@ +Feature: Expose command line option to configure FileMode and DirMode + +Just expose a CLI option to configure Server FileMode and DirMode to +be able to have files stored in the repo shared with other processes +(maybe just read only) + +https://github.com/restic/rest-server/issues/189 +https://github.com/restic/rest-server/pull/190 diff --git a/cmd/rest-server/main.go b/cmd/rest-server/main.go index 4287b97a..75418d53 100644 --- a/cmd/rest-server/main.go +++ b/cmd/rest-server/main.go @@ -53,6 +53,8 @@ func init() { flags.BoolVar(&server.PrivateRepos, "private-repos", server.PrivateRepos, "users can only access their private repo") flags.BoolVar(&server.Prometheus, "prometheus", server.Prometheus, "enable Prometheus metrics") flags.BoolVar(&server.PrometheusNoAuth, "prometheus-no-auth", server.PrometheusNoAuth, "disable auth for Prometheus /metrics endpoint") + flags.Uint32Var(&server.DirMode, "dir-mode", server.DirMode, "filesystem dir mode: defaults to 0700. DO NOT MESS UNLESS YOU KNOW WHAT YOUR DOING") + flags.Uint32Var(&server.FileMode, "file-mode", server.FileMode, "filesystem file mode: defaults to 0600. DO NOT MESS UNLESS YOU KNOW WHAT YOUR DOING") } var version = "0.11.0" diff --git a/handlers.go b/handlers.go index 9df6adf8..9868f1f6 100644 --- a/handlers.go +++ b/handlers.go @@ -2,6 +2,7 @@ package restserver import ( "errors" + "io/fs" "log" "net/http" "path" @@ -30,6 +31,8 @@ type Server struct { MaxRepoSize int64 PanicOnError bool NoVerifyUpload bool + DirMode uint32 + FileMode uint32 htpasswdFile *HtpasswdFile quotaManager *quota.Manager @@ -90,6 +93,8 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { QuotaManager: s.quotaManager, // may be nil PanicOnError: s.PanicOnError, NoVerifyUpload: s.NoVerifyUpload, + DirMode: fs.FileMode(s.DirMode), + FileMode: fs.FileMode(s.FileMode), } if s.Prometheus { opt.BlobMetricFunc = makeBlobMetricFunc(username, folderPath)