From 0f7f4933bb92c15106aecb2c2384bd4746129153 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Mon, 31 Dec 2018 14:14:31 +0000 Subject: [PATCH] close more stuff License: MIT Signed-off-by: Henrique Dias --- frontend | 2 +- http/http.go | 4 +++- http/settings.go | 4 +++- http/users.go | 36 +++++++++++++++++++++++++++++++++++- types/files.go | 1 - types/storage.go | 2 -- 6 files changed, 42 insertions(+), 7 deletions(-) diff --git a/frontend b/frontend index 1bd79035..44658d2a 160000 --- a/frontend +++ b/frontend @@ -1 +1 @@ -Subproject commit 1bd7903569832952237a967e2f57a571294569fe +Subproject commit 44658d2a43fefebde554b4adeddfc6ae7e996373 diff --git a/http/http.go b/http/http.go index 71de70e3..084cba33 100644 --- a/http/http.go +++ b/http/http.go @@ -5,6 +5,7 @@ import ( "log" "net/http" "strconv" + "sync" "github.com/filebrowser/filebrowser/types" "github.com/gorilla/mux" @@ -21,12 +22,13 @@ type modifyRequest struct { Which []string `json:"which"` // Answer to: which fields? } -// Env ... +// Env contains the required info for FB to run. type Env struct { Auther types.Auther Runner *types.Runner Settings *types.Settings Store *types.Store + mux sync.Mutex // settings mutex for Auther, Runner and Settings changes. } // Handler ... diff --git a/http/settings.go b/http/settings.go index 22c1da66..6d038a6e 100644 --- a/http/settings.go +++ b/http/settings.go @@ -44,6 +44,9 @@ func (e *Env) settingsPutHandler(w http.ResponseWriter, r *http.Request) { return } + e.mux.Lock() + defer e.mux.Unlock() + runner := &types.Runner{Commands: req.Commands} err = e.Store.Config.SaveRunner(runner) if err != nil { @@ -68,7 +71,6 @@ func (e *Env) settingsPutHandler(w http.ResponseWriter, r *http.Request) { return } - // TODO: env locks e.Runner = runner e.Settings = settings } diff --git a/http/users.go b/http/users.go index 1bb8d6fc..5e20cfd8 100644 --- a/http/users.go +++ b/http/users.go @@ -133,7 +133,41 @@ func (e *Env) userDeleteHandler(w http.ResponseWriter, r *http.Request) { } func (e *Env) userPostHandler(w http.ResponseWriter, r *http.Request) { - // TODO: fill me + _, ok := e.getAdminUser(w,r) + if !ok { + return + } + + req, ok := getUser(w, r) + if !ok { + return + } + + if len(req.Which) != 0 { + httpErr(w, r, http.StatusBadRequest, nil) + return + } + + if req.Data.Password == "" { + httpErr(w, r, http.StatusBadRequest, types.ErrEmptyPassword) + return + } + + var err error + req.Data.Password, err = types.HashPwd(req.Data.Password) + if err != nil { + httpErr(w, r, http.StatusInternalServerError, err) + return + } + + err = e.Store.Users.Save(req.Data) + if err != nil { + httpErr(w, r, http.StatusInternalServerError, err) + return + } + + w.Header().Set("Location", "/settings/users/"+strconv.FormatUint(uint64(req.Data.ID), 10)) + w.WriteHeader(http.StatusCreated) } func (e *Env) userPutHandler(w http.ResponseWriter, r *http.Request) { diff --git a/types/files.go b/types/files.go index 7293bed1..26644e85 100644 --- a/types/files.go +++ b/types/files.go @@ -218,7 +218,6 @@ var ( // DetectSubtitles fills the subtitles field if the file // is a movie. -// TODO: detect multiple languages, like FILENAME.LANG.VTT func (f *File) DetectSubtitles() { f.Subtitles = []string{} ext := filepath.Ext(f.Path) diff --git a/types/storage.go b/types/storage.go index 42a3f84b..dd596869 100644 --- a/types/storage.go +++ b/types/storage.go @@ -7,8 +7,6 @@ type Store struct { Share ShareStore } -// TODO: wrappers to verify - // ConfigStore is used to manage configurations relativey to a data storage. type ConfigStore interface { Get(name string, to interface{}) error