From 59a0daa2938edf74d337d1c434b89de5eb99825f Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 31 Oct 2017 18:23:31 +0000 Subject: [PATCH] Fix ViewMode related bugs: - The user will no longer lost their 'ViewMode' option after being updated in the settings. - The console will not output errors due tot he scroll function when Mosaic mode is on. Former-commit-id: 97aa6abdc8b864dc7a55dbf03a2e58895ea7613f [formerly ff9e6ff0898f32bd106b644b2e9002b5de45281c] [formerly 556cc12bd5ff1d91776c81f48dd1dceb8bb627b4 [formerly 51104c5ee70710b434ab42c58f738ecdce548fe6]] Former-commit-id: dd63b2b818a7bd4960a7243866d6b2829f4c03a8 [formerly 45855d70eaa9a2b060d3a89cb70388040ea8e6d9] Former-commit-id: 6e0ebf10d7fe3e2c234abc9c0ffd447cfbdd7455 --- assets/src/views/Files.vue | 462 ++++++++++++++--------------- assets/src/views/settings/User.vue | 51 ++-- filemanager.go | 2 +- http/auth.go | 17 +- http/download.go | 23 +- http/users.go | 5 + rice-box.go.REMOVED.git-id | 1 - 7 files changed, 290 insertions(+), 271 deletions(-) delete mode 100644 rice-box.go.REMOVED.git-id diff --git a/assets/src/views/Files.vue b/assets/src/views/Files.vue index d72bafce..10a2fa05 100644 --- a/assets/src/views/Files.vue +++ b/assets/src/views/Files.vue @@ -1,231 +1,231 @@ - - - + + + diff --git a/assets/src/views/settings/User.vue b/assets/src/views/settings/User.vue index a877a7f0..6619e17b 100644 --- a/assets/src/views/settings/User.vue +++ b/assets/src/views/settings/User.vue @@ -7,10 +7,21 @@
+

+ + +

+ +

+ + +

+ +

+ + +

-

-

-

@@ -91,6 +102,7 @@ export default { components: { Languages }, data: () => { return { + originalUser: null, id: 0, admin: false, allowNew: false, @@ -141,6 +153,7 @@ export default { } getUser(user).then(user => { + this.originalUser = user this.id = user.ID this.admin = user.admin this.allowCommands = user.allowCommands @@ -242,23 +255,21 @@ export default { }) }, parseForm () { - let user = { - ID: this.id, - username: this.username, - password: this.password, - lockPassword: this.lockPassword, - filesystem: this.filesystem, - admin: this.admin, - allowCommands: this.allowCommands, - allowNew: this.allowNew, - allowEdit: this.allowEdit, - allowPublish: this.allowPublish, - permissions: this.permissions, - css: this.css, - locale: this.locale, - commands: this.commands.split(' '), - rules: [] - } + let user = this.originalUser + user.username = this.username + user.password = this.password + user.lockPassword = this.lockPassword + user.filesystem = this.filesystem + user.admin = this.admin + user.allowCommands = this.allowCommands + user.allowNew = this.allowNew + user.allowEdit = this.allowEdit + user.allowPublish = this.allowPublish + user.permissions = this.permissions + user.css = this.css + user.locale = this.locale + user.commands = this.commands.split(' ') + user.rules = [] let rules = this.rules.split('\n') diff --git a/filemanager.go b/filemanager.go index 57149d03..a743a618 100644 --- a/filemanager.go +++ b/filemanager.go @@ -39,7 +39,7 @@ var ( ErrEmptyScope = errors.New("scope is empty") ErrWrongDataType = errors.New("wrong data type") ErrInvalidUpdateField = errors.New("invalid field to update") - ErrInvalidOption = errors.New("Invalid option") + ErrInvalidOption = errors.New("invalid option") ) // FileManager is a file manager instance. It should be creating using the diff --git a/http/auth.go b/http/auth.go index 03ec09f3..360ceed4 100644 --- a/http/auth.go +++ b/http/auth.go @@ -1,7 +1,6 @@ package http import ( - "bytes" "encoding/json" "fmt" "net/http" @@ -14,22 +13,23 @@ import ( fm "github.com/hacdias/filemanager" ) +const reCaptchaAPI = "https://www.google.com/recaptcha/api/siteverify" + type cred struct { Password string `json:"password"` Username string `json:"username"` - Recaptcha string `json:"recaptcha"` + ReCaptcha string `json:"recaptcha"` } -// recaptcha checks the recaptcha code. -func recaptcha(secret string, response string) (bool, error) { - api := "https://www.google.com/recaptcha/api/siteverify" - +// reCaptcha checks the reCaptcha code. +func reCaptcha(secret string, response string) (bool, error) { body := url.Values{} body.Set("secret", secret) body.Add("response", response) client := &http.Client{} - resp, err := client.Post(api, "application/x-www-form-urlencoded", bytes.NewBufferString(body.Encode())) + + resp, err := client.Post(reCaptchaAPI, "application/x-www-form-urlencoded", strings.NewReader(body.Encode())) if err != nil { return false, err } @@ -73,7 +73,7 @@ func authHandler(c *fm.Context, w http.ResponseWriter, r *http.Request) (int, er // If ReCaptcha is enabled, check the code. if len(c.ReCaptchaSecret) > 0 { - ok, err := recaptcha(c.ReCaptchaSecret, cred.Recaptcha) + ok, err := reCaptcha(c.ReCaptchaSecret, cred.ReCaptcha) if err != nil { fmt.Println(err) return http.StatusForbidden, err @@ -179,6 +179,7 @@ func validateAuth(c *fm.Context, r *http.Request) (bool, *fm.User) { keyFunc := func(token *jwt.Token) (interface{}, error) { return c.Key, nil } + var claims claims token, err := request.ParseFromRequestWithClaims(r, extractor{}, diff --git a/http/download.go b/http/download.go index 0fe696b7..556427e3 100644 --- a/http/download.go +++ b/http/download.go @@ -17,21 +17,13 @@ import ( // downloadHandler creates an archive in one of the supported formats (zip, tar, // tar.gz or tar.bz2) and sends it to be downloaded. func downloadHandler(c *fm.Context, w http.ResponseWriter, r *http.Request) (int, error) { - query := r.URL.Query().Get("format") - // If the file isn't a directory, serve it using http.ServeFile. We display it // inline if it is requested. if !c.File.IsDir { - if r.URL.Query().Get("inline") == "true" { - w.Header().Set("Content-Disposition", "inline") - } else { - w.Header().Set("Content-Disposition", "attachment; filename=\""+c.File.Name+"\"") - } - - http.ServeFile(w, r, c.File.Path) - return 0, nil + return downloadFileHandler(c, w, r) } + query := r.URL.Query().Get("format") files := []string{} names := strings.Split(r.URL.Query().Get("files"), ",") @@ -111,3 +103,14 @@ func downloadHandler(c *fm.Context, w http.ResponseWriter, r *http.Request) (int _, err = io.Copy(w, file) return 0, err } + +func downloadFileHandler(c *fm.Context, w http.ResponseWriter, r *http.Request) (int, error) { + if r.URL.Query().Get("inline") == "true" { + w.Header().Set("Content-Disposition", "inline") + } else { + w.Header().Set("Content-Disposition", "attachment; filename=\""+c.File.Name+"\"") + } + + http.ServeFile(w, r, c.File.Path) + return 0, nil +} diff --git a/http/users.go b/http/users.go index 9846217e..9e6601ca 100644 --- a/http/users.go +++ b/http/users.go @@ -160,6 +160,11 @@ func usersPostHandler(c *fm.Context, w http.ResponseWriter, r *http.Request) (in u.Rules = []*fm.Rule{} } + // If the view mode is empty, initialize with the default one. + if u.ViewMode == "" { + u.ViewMode = c.DefaultUser.ViewMode + } + // Initialize commands if not initialized. if u.Commands == nil { u.Commands = []string{} diff --git a/rice-box.go.REMOVED.git-id b/rice-box.go.REMOVED.git-id deleted file mode 100644 index 7355137c..00000000 --- a/rice-box.go.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -9536ea589ebfb34b4ccbf549776ff8b4c70d6dd6 \ No newline at end of file