From 60d987eed3e24ce13683876f249744e4a851e304 Mon Sep 17 00:00:00 2001 From: Matt Baer Date: Mon, 29 Jul 2019 14:40:49 -0400 Subject: [PATCH] Clean up directories on `wf logout` On logout, this deletes host / user directories if they're empty. Ref T586 --- config/user.go | 37 ++++++++++++++++++++++++++++++++++++- fileutils/fileutils.go | 16 ++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/config/user.go b/config/user.go index b39a4f5..f1a5e9a 100644 --- a/config/user.go +++ b/config/user.go @@ -57,7 +57,42 @@ func DeleteUser(c *cli.Context) error { username = "" } - return fileutils.DeleteFile(filepath.Join(dir, username, "user.json")) + // Delete user data + err = fileutils.DeleteFile(filepath.Join(dir, username, "user.json")) + if err != nil { + return err + } + + // Do additional cleanup in wf-cli + if c.App.Name == "wf" { + // Delete user dir if it's empty + userEmpty, err := fileutils.IsEmpty(filepath.Join(dir, username)) + if err != nil { + return err + } + if !userEmpty { + return nil + } + err = fileutils.DeleteFile(filepath.Join(dir, username)) + if err != nil { + return err + } + + // Delete host dir if it's empty + hostEmpty, err := fileutils.IsEmpty(dir) + if err != nil { + return err + } + if !hostEmpty { + return nil + } + err = fileutils.DeleteFile(dir) + if err != nil { + return err + } + } + + return nil } func SaveUser(c *cli.Context, u *writeas.AuthUser) error { diff --git a/fileutils/fileutils.go b/fileutils/fileutils.go index 7e4c354..eda996b 100644 --- a/fileutils/fileutils.go +++ b/fileutils/fileutils.go @@ -3,6 +3,7 @@ package fileutils import ( "bufio" "fmt" + "io" "os" "strings" ) @@ -109,3 +110,18 @@ func FindLine(p, startsWith string) string { func DeleteFile(p string) error { return os.Remove(p) } + +// IsEmpty returns whether or not the given directory is empty +func IsEmpty(d string) (bool, error) { + f, err := os.Open(d) + if err != nil { + return false, err + } + defer f.Close() + + _, err = f.Readdirnames(1) + if err == io.EOF { + return true, nil + } + return false, err +}