From a8b2db986a1927020aa1d1972896a5ebfcee8a06 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Sun, 1 Nov 2020 15:36:13 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20shares=20not=20being=20loc?= =?UTF-8?q?ally=20created=20and=20deleted?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd_share.go | 8 ++++---- templates/my-shares.html | 1 + webadmin.go | 23 ++++++++++++++++++++--- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/cmd_share.go b/cmd_share.go index f12a897..da2d45f 100644 --- a/cmd_share.go +++ b/cmd_share.go @@ -92,14 +92,14 @@ func (cmd *CmdShareCreate) Run(app *app) error { // Best effort cleanup. _ = app.shareStore.RemoveShare(share.UUID) - return fmt.Errorf("cannot set share attributes: %v", err) + return fmt.Errorf("cannot set share attributes: %w", err) } if err := os.MkdirAll(path.Join(app.DataDirectory, share.UUID.String()), 0750); err != nil { // Best effort cleanup. _ = app.shareStore.RemoveShare(share.UUID) - return fmt.Errorf("cannot create data dir: %v", err) + return fmt.Errorf("cannot create data dir: %w", err) } fmt.Printf("Share created: %s\n", share.UUID.String()) @@ -116,11 +116,11 @@ type CmdShareDelete struct { func (cmd *CmdShareDelete) Run(app *app) error { if err := os.RemoveAll(path.Join(app.DataDirectory, cmd.UUID.String())); err != nil { - return fmt.Errorf("cannot remove data directory: %v", err) + return fmt.Errorf("cannot remove data directory: %w", err) } if err := app.shareStore.RemoveShare(cmd.UUID); err != nil { - return fmt.Errorf("cannot remove share: %v", err) + return fmt.Errorf("cannot remove share: %w", err) } return nil diff --git a/templates/my-shares.html b/templates/my-shares.html index af8e8c6..1f7416e 100644 --- a/templates/my-shares.html +++ b/templates/my-shares.html @@ -28,6 +28,7 @@
UUID: {{ $share.UUID }} {{ if $share.IsAdmin }}
+
{{ end }} diff --git a/webadmin.go b/webadmin.go index f41997e..657b3a6 100644 --- a/webadmin.go +++ b/webadmin.go @@ -509,6 +509,15 @@ Are you sure you want to continue?`, loginName) return } + if err := os.MkdirAll(path.Join(app.DataDirectory, share.UUID.String()), 0750); err != nil { + // Best effort cleanup. + _ = app.shareStore.RemoveShare(share.UUID) + + fmt.Fprintf(os.Stderr, "cannot create data dir: %v\n", err) + sessionContext.RenderError(template.HTML("Internal server error."), "") + return + } + if owned { if err := app.shareStore.AddUserToShare(share, sessionContext.user.Username, ShareRoleAdmin); err != nil { sessionContext.RenderError(template.HTML("Cannot add self to share: "+err.Error()), "") @@ -523,9 +532,11 @@ Are you sure you want to continue?`, loginName) ar.Post("/delete-share", func(w http.ResponseWriter, r *http.Request) { sessionContext := h.buildSessionContext(w, r) + returnURL := r.FormValue("source") + share, err := app.shareStore.GetShare(r.FormValue("share")) if err != nil { - sessionContext.RenderError(template.HTML("Internal error: "+err.Error()), "") + sessionContext.RenderError(template.HTML("Internal error: "+err.Error()), returnURL) return } @@ -541,12 +552,18 @@ Are you sure you want to continue?`, share.UUID, share.Name) // We have already rendered. Nothing to do. return } else if confirmStatus == confirmAccepted { + if err := os.RemoveAll(path.Join(app.DataDirectory, share.UUID.String())); err != nil { + fmt.Fprintf(os.Stderr, "cannot remove data dir: %v\n", err) + sessionContext.RenderError(template.HTML("Internal server error."), returnURL) + return + } + if err := app.shareStore.RemoveShare(share.UUID); err != nil { - sessionContext.RenderError(template.HTML("Share cannot be removed: "+err.Error()), "shares") + sessionContext.RenderError(template.HTML("Share cannot be removed: "+err.Error()), returnURL) return } } - sessionContext.Redirect("shares") + sessionContext.Redirect(returnURL) }) ar.Route("/create-user", func(r chi.Router) { r.Get("/", func(w http.ResponseWriter, r *http.Request) {