diff --git a/client.go b/client.go index 026d12c..f882fb3 100644 --- a/client.go +++ b/client.go @@ -16,7 +16,7 @@ func client(conn net.Conn, instance string) error { log.Fatal(err) } log.Println("Message Received:", message) - var objmap map[string]string + var objmap map[string]interface{} err = json.Unmarshal([]byte(message), &objmap) if err != nil { log.Println(err) @@ -31,6 +31,12 @@ func client(conn net.Conn, instance string) error { log.Println(err) return err } + case "remove": + err = removeMap(conn, instance, objmap) + if err != nil { + log.Println(err) + return err + } case "list": err = list(conn, instance) if err != nil { @@ -38,7 +44,7 @@ func client(conn net.Conn, instance string) error { return err } default: - err = errors.New("Unknown Command: " + val) + err = errors.New("Unknown Command: " + val.(string)) log.Println(err) return err } diff --git a/remove.go b/remove.go new file mode 100644 index 0000000..7b513f6 --- /dev/null +++ b/remove.go @@ -0,0 +1,45 @@ +package main + +import ( + "errors" + "net" + "os" + "path/filepath" +) + +func removeMap(conn net.Conn, instance string, objmap map[string]interface{}) error { + program, has := objmap["package"] + if !has { + return errors.New("a package is required") + } + + keep_data, has := objmap["keep_data"] + if !has { + keep_data = false + } + + return remove(conn, instance, program.(string), keep_data.(bool)) +} + +func remove(conn net.Conn, instance string, program string, keep_data bool) error { + package_path, err := filepath.Abs(filepath.Join(instance, "apps", program)) + if err != nil { + return err + } + if exists, err := exists(package_path); !exists || err != nil { + return errors.New("package not found") + } + err = os.RemoveAll(package_path) + if err != nil { + return err + } + var_path, err := filepath.Abs(filepath.Join(instance, "var", program)) + if exists, err := exists(var_path); exists && err == nil && !keep_data { + err = os.RemoveAll(var_path) + if err != nil { + return err + } + } + + return nil +}