From 2f2a1bdc26ec48b6dd60aa7ac50c7759010e60bb Mon Sep 17 00:00:00 2001
From: Florent Gluck <florent.gluck@hesge.ch>
Date: Fri, 13 Dec 2024 10:27:59 +0100
Subject: [PATCH] client: rework template code (libclient + client)

---
 src/client/cmdLogin/login.go                 |  4 ++--
 src/client/cmdTemplate/templateCreate.go     |  6 ++---
 src/client/cmdTemplate/templateDel.go        |  4 ++--
 src/client/cmdTemplate/templateEdit.go       | 25 +++++++++-----------
 src/client/cmdTemplate/templateExportDisk.go | 20 ++++------------
 src/client/cmdTemplate/templateList.go       |  4 ++--
 src/client/cmdTemplate/templateListSingle.go | 15 ++++++------
 src/libclient/template/templateEdit.go       | 18 ++++++++++----
 src/libclient/template/templateExportDisk.go | 17 ++++++++-----
 src/libclient/user/userCreate.go             |  2 +-
 10 files changed, 57 insertions(+), 58 deletions(-)

diff --git a/src/client/cmdLogin/login.go b/src/client/cmdLogin/login.go
index 3cfc721..7f3de35 100644
--- a/src/client/cmdLogin/login.go
+++ b/src/client/cmdLogin/login.go
@@ -42,14 +42,14 @@ func (cmd *Login) Run(args []string) int {
 	bytePwd, err := term.ReadPassword(int(syscall.Stdin))
 	u.PrintlnErr("")
 	if err != nil {
-		u.PrintlnErr(err.Error())
+		u.PrintlnErr(err)
 		return 1
 	}
 	pwd := string(bytePwd)
 
 	token, err := login.GetToken(email, pwd)
 	if err != nil {
-		u.PrintlnErr("Error: " + err.Error())
+		u.PrintlnErr(err)
 		return 1
 	}
 
diff --git a/src/client/cmdTemplate/templateCreate.go b/src/client/cmdTemplate/templateCreate.go
index 191a63f..3af2fd8 100644
--- a/src/client/cmdTemplate/templateCreate.go
+++ b/src/client/cmdTemplate/templateCreate.go
@@ -49,16 +49,16 @@ func (cmd *Create) Run(args []string) int {
 
 	template, err := libclient.TemplateCreate(vmID, name, access)
 	if err != nil {
-		u.PrintlnErr("Error: " + err.Error())
+		u.PrintlnErr(err)
 		return 1
 	}
 
 	templateStr, err := template.String()
 	if err != nil {
-		u.PrintlnErr("Error: " + err.Error())
+		u.PrintlnErr(err)
 		return 1
 	}
+	u.Println("Template successfully created:")
 	u.Println(templateStr)
-
 	return 0
 }
diff --git a/src/client/cmdTemplate/templateDel.go b/src/client/cmdTemplate/templateDel.go
index bd399cf..feb619d 100644
--- a/src/client/cmdTemplate/templateDel.go
+++ b/src/client/cmdTemplate/templateDel.go
@@ -40,10 +40,10 @@ func (cmd *Del) Run(args []string) int {
 
 	err := libclient.TemplateDel(tplID)
 	if err != nil {
-		u.PrintlnErr("Failed deleting template \"" + tplID + "\": " + err.Error())
+		u.PrintlnErr(err)
 		return 1
 	}
 
-	u.Println("Template \"" + tplID + "\" deleted")
+	u.Println("Template \"" + tplID + "\" successfully deleted")
 	return 0
 }
diff --git a/src/client/cmdTemplate/templateEdit.go b/src/client/cmdTemplate/templateEdit.go
index 4ceb100..1996d0c 100644
--- a/src/client/cmdTemplate/templateEdit.go
+++ b/src/client/cmdTemplate/templateEdit.go
@@ -54,23 +54,20 @@ func (cmd *Edit) Run(args []string) int {
 	}
 
 	tplID := args[0]
-	statusCode := 0
-
-	resp, err := libclient.TemplateEdit(tplID, *p)
+	template, err := libclient.TemplateEdit(tplID, *p)
 	if err != nil {
-		u.PrintlnErr("Failed editing template \"" + tplID + "\": " + err.Error())
-		statusCode = 1
-	} else {
-		if resp.IsSuccess() {
-			u.Println("Successfully edited template \"" + tplID + "\":")
-			u.Println(resp.String())
-		} else {
-			u.PrintlnErr("Failed editing template \"" + tplID + "\": " + resp.Status() + ": " + resp.String())
-			statusCode = 1
-		}
+		u.PrintlnErr(err)
+		return 1
 	}
 
-	return statusCode
+	templateStr, err := template.String()
+	if err != nil {
+		u.PrintlnErr(err)
+		return 1
+	}
+	u.Println("Template \"" + tplID + "\" successfully edited:")
+	u.Println(templateStr)
+	return 0
 }
 
 func (cmd *Edit) parseArgs(args []string) (*params.TplEdit, error) {
diff --git a/src/client/cmdTemplate/templateExportDisk.go b/src/client/cmdTemplate/templateExportDisk.go
index 489cefe..3499413 100644
--- a/src/client/cmdTemplate/templateExportDisk.go
+++ b/src/client/cmdTemplate/templateExportDisk.go
@@ -41,23 +41,13 @@ func (cmd *ExportDisk) Run(args []string) int {
 
 	tplID := args[0]
 	outputFile := args[1]
-	statusCode := 0
-
 	u.Println("Exporting disk from template \"" + tplID + "\" into " + outputFile + " ...")
 
-	resp, err := libclient.TemplateExportDisk(tplID, outputFile)
+	err := libclient.TemplateExportDisk(tplID, outputFile)
 	if err != nil {
-		u.PrintlnErr("Failed: " + err.Error())
-		statusCode = 1
-	} else {
-		if resp.IsSuccess() {
-			u.Println("Successfully exported disk into " + outputFile)
-		} else {
-			errorMsg, _ := u.FileToString(outputFile)
-			u.PrintlnErr("Failed: " + resp.Status() + ": " + errorMsg)
-			statusCode = 1
-		}
+		u.PrintlnErr(err)
+		return 1
 	}
-
-	return statusCode
+	u.Println("Successfully exported template disk into " + outputFile)
+	return 0
 }
diff --git a/src/client/cmdTemplate/templateList.go b/src/client/cmdTemplate/templateList.go
index 24522bd..6941a14 100644
--- a/src/client/cmdTemplate/templateList.go
+++ b/src/client/cmdTemplate/templateList.go
@@ -69,7 +69,7 @@ func (cmd *List) printFilteredTemplates(args []string, route string) int {
 
 	templates, err := cmd.getFilteredTemplates(route, args)
 	if err != nil {
-		u.PrintlnErr("Error: " + err.Error())
+		u.PrintlnErr(err)
 		return 1
 	}
 
@@ -77,7 +77,7 @@ func (cmd *List) printFilteredTemplates(args []string, route string) int {
 		for _, template := range templates {
 			str, err := template.String()
 			if err != nil {
-				u.PrintlnErr("Error: failed decoding template " + template.ID.String() + " to string. Skipped.")
+				u.PrintlnErr("Failed decoding template " + template.ID.String() + ". Template skipped.")
 			} else {
 				u.Println(str)
 			}
diff --git a/src/client/cmdTemplate/templateListSingle.go b/src/client/cmdTemplate/templateListSingle.go
index aaed520..9b8275e 100644
--- a/src/client/cmdTemplate/templateListSingle.go
+++ b/src/client/cmdTemplate/templateListSingle.go
@@ -35,19 +35,18 @@ func (cmd *ListSingle) Run(args []string) int {
 		return 1
 	}
 
-	uuid := args[0]
-	template, err := libclient.GetTemplate(uuid)
+	tplID := args[0]
+	template, err := libclient.GetTemplate(tplID)
 	if err != nil {
-		u.PrintlnErr("Error: " + err.Error())
+		u.PrintlnErr(err)
 		return 1
 	}
 
-	str, err := template.String()
+	templateStr, err := template.String()
 	if err != nil {
-		u.PrintlnErr("Error: failed decoding template " + template.ID.String() + " to string.")
-	} else {
-		u.Println(str)
+		u.PrintlnErr(err)
+		return 1
 	}
-
+	u.Println(templateStr)
 	return 0
 }
diff --git a/src/libclient/template/templateEdit.go b/src/libclient/template/templateEdit.go
index 83aebcc..3fe5988 100644
--- a/src/libclient/template/templateEdit.go
+++ b/src/libclient/template/templateEdit.go
@@ -1,13 +1,14 @@
 package template
 
 import (
+	"encoding/json"
+	"errors"
 	"nexus-common/params"
+	"nexus-common/template"
 	g "nexus-libclient/globals"
-
-	"github.com/go-resty/resty/v2"
 )
 
-func TemplateEdit(tplID string, p params.TplEdit) (*resty.Response, error) {
+func TemplateEdit(tplID string, p params.TplEdit) (*template.TemplateSerialized, error) {
 	client := g.GetInstance().Client
 	host := g.GetInstance().Host
 
@@ -15,6 +16,13 @@ func TemplateEdit(tplID string, p params.TplEdit) (*resty.Response, error) {
 	if err != nil {
 		return nil, err
 	}
-
-	return resp, nil
+	if resp.IsSuccess() {
+		var tpl template.TemplateSerialized
+		if err := json.Unmarshal(resp.Body(), &tpl); err != nil {
+			return nil, err
+		}
+		return &tpl, nil
+	} else {
+		return nil, errors.New(resp.Status() + ": " + resp.String())
+	}
 }
diff --git a/src/libclient/template/templateExportDisk.go b/src/libclient/template/templateExportDisk.go
index 8d30989..31a0f7b 100644
--- a/src/libclient/template/templateExportDisk.go
+++ b/src/libclient/template/templateExportDisk.go
@@ -1,19 +1,24 @@
 package template
 
 import (
+	"errors"
+	u "nexus-client/utils"
 	g "nexus-libclient/globals"
-
-	"github.com/go-resty/resty/v2"
 )
 
-func TemplateExportDisk(tplID, outputFile string) (*resty.Response, error) {
+func TemplateExportDisk(tplID, outputFile string) error {
 	client := g.GetInstance().Client
 	host := g.GetInstance().Host
 
 	resp, err := client.R().SetOutput(outputFile).Get(host + "/templates/" + tplID + "/disk")
 	if err != nil {
-		return nil, err
+		return err
+	} else {
+		if resp.IsSuccess() {
+			return nil
+		} else {
+			errorMsg, _ := u.FileToString(outputFile)
+			return errors.New("Failed: " + resp.Status() + ": " + errorMsg)
+		}
 	}
-
-	return resp, nil
 }
diff --git a/src/libclient/user/userCreate.go b/src/libclient/user/userCreate.go
index 8acd519..616aaa4 100644
--- a/src/libclient/user/userCreate.go
+++ b/src/libclient/user/userCreate.go
@@ -12,7 +12,7 @@ func UserCreate(p params.UserWithPwd) error {
 
 	resp, err := client.R().SetBody(p).Post(host + "/users")
 	if err != nil {
-		return errors.New("Error: " + err.Error())
+		return err
 	}
 
 	if resp.IsSuccess() {
-- 
GitLab