From 5aa5c2303b2a132a17de81dddf6d2da087eab946 Mon Sep 17 00:00:00 2001
From: Florent <florent.gluck@hesge.ch>
Date: Wed, 1 Jan 2025 18:00:34 +0100
Subject: [PATCH] Fixed nexus-exam compile error Fixed newly introduced csv
 parsing error Moved most client utils functions to libclient nexus-exam:
 changed token refresh delay to 2 min

---
 src/client/cmdTemplate/templateList.go       | 3 ++-
 src/client/cmdUser/userCreate.go             | 5 +++--
 src/client/cmdUser/userDel.go                | 7 ++++---
 src/client/cmdUser/userList.go               | 3 ++-
 src/client/cmdUser/userSetCaps.go            | 9 +++++----
 src/client/cmdVM/vmAddAccess.go              | 5 +++--
 src/client/cmdVM/vmCreate.go                 | 5 +++--
 src/client/cmdVM/vmDelAccess.go              | 3 ++-
 src/client/cmdVM/vmEdit.go                   | 3 ++-
 src/client/cmdVM/vmImportDir.go              | 8 ++++----
 src/client/cmdVM/vmList.go                   | 3 ++-
 src/client/cmdVM/vmStartWithCreds.go         | 5 +++--
 src/client/nexus-exam/nexus-exam.go          | 9 ++++-----
 src/libclient/template/templateExportDisk.go | 2 +-
 src/{client => libclient}/utils/csv.go       | 0
 src/{client => libclient}/utils/files.go     | 0
 src/{client => libclient}/utils/strings.go   | 0
 src/libclient/vm/vmExportDir.go              | 2 +-
 src/server/cleaner/cleaner.go                | 2 +-
 src/server/nexus-server.go                   | 2 +-
 src/server/vms/vms.go                        | 4 +---
 21 files changed, 44 insertions(+), 36 deletions(-)
 rename src/{client => libclient}/utils/csv.go (100%)
 rename src/{client => libclient}/utils/files.go (100%)
 rename src/{client => libclient}/utils/strings.go (100%)

diff --git a/src/client/cmdTemplate/templateList.go b/src/client/cmdTemplate/templateList.go
index d15f07a..54d594d 100644
--- a/src/client/cmdTemplate/templateList.go
+++ b/src/client/cmdTemplate/templateList.go
@@ -6,6 +6,7 @@ import (
 	u "nexus-client/utils"
 	t "nexus-common/template"
 	libclient "nexus-libclient/template"
+	"nexus-libclient/utils"
 	"regexp"
 	"strings"
 
@@ -60,7 +61,7 @@ func (cmd *List) Run(args []string) int {
 	}
 
 	if foundLongOutputFlag >= 0 {
-		args = u.RemoveArgAtIndex(args, foundLongOutputFlag)
+		args = utils.RemoveArgAtIndex(args, foundLongOutputFlag)
 	}
 
 	templates, err := cmd.getFilteredTemplates(args)
diff --git a/src/client/cmdUser/userCreate.go b/src/client/cmdUser/userCreate.go
index 14e39b8..19d8f5a 100644
--- a/src/client/cmdUser/userCreate.go
+++ b/src/client/cmdUser/userCreate.go
@@ -8,6 +8,7 @@ import (
 	"nexus-common/params"
 	g "nexus-libclient/globals"
 	libclient "nexus-libclient/user"
+	"nexus-libclient/utils"
 	"os"
 	"strings"
 )
@@ -51,7 +52,7 @@ List of user capabilities:
 		usage += v + " "
 		i += 1
 		if i >= 5 {
-			usage = u.AppendNewLine(usage)
+			usage = utils.AppendNewLine(usage)
 			i = 0
 		}
 	}
@@ -115,7 +116,7 @@ func (cmd *Add) Run(args []string) int {
 			}
 
 			email := columns[0]
-			if !u.IsEmail(email) {
+			if !utils.IsEmail(email) {
 				u.PrintlnErr("Failed reading record on line ", line, ": ", email, " is not a valid email")
 				statusCode = 1
 				continue
diff --git a/src/client/cmdUser/userDel.go b/src/client/cmdUser/userDel.go
index 3d1159e..0f09be1 100644
--- a/src/client/cmdUser/userDel.go
+++ b/src/client/cmdUser/userDel.go
@@ -6,6 +6,7 @@ import (
 	u "nexus-client/utils"
 	g "nexus-libclient/globals"
 	libclient "nexus-libclient/user"
+	"nexus-libclient/utils"
 	"os"
 )
 
@@ -43,12 +44,12 @@ func (cmd *Del) Run(args []string) int {
 
 	statusCode := 0
 
-	if argc == 1 && !u.IsEmail(args[0]) {
+	if argc == 1 && !utils.IsEmail(args[0]) {
 		// Single argument and it's a CSV file
 
 		csvFile := args[0]
 
-		if u.IsEmail(csvFile) {
+		if utils.IsEmail(csvFile) {
 			cmd.PrintUsage()
 			return 1
 		}
@@ -83,7 +84,7 @@ func (cmd *Del) Run(args []string) int {
 			}
 
 			email := columns[0]
-			if !u.IsEmail(email) {
+			if !utils.IsEmail(email) {
 				u.PrintlnErr("Failed reading record on line ", line, ": ", email, " is not a valid email")
 				statusCode = 1
 				continue
diff --git a/src/client/cmdUser/userList.go b/src/client/cmdUser/userList.go
index c6dc9ad..17f2648 100644
--- a/src/client/cmdUser/userList.go
+++ b/src/client/cmdUser/userList.go
@@ -6,6 +6,7 @@ import (
 	u "nexus-client/utils"
 	"nexus-common/params"
 	libclient "nexus-libclient/user"
+	"nexus-libclient/utils"
 	"regexp"
 	"strings"
 )
@@ -58,7 +59,7 @@ func (cmd *List) Run(args []string) int {
 	}
 
 	if foundLongOutputFlag >= 0 {
-		args = u.RemoveArgAtIndex(args, foundLongOutputFlag)
+		args = utils.RemoveArgAtIndex(args, foundLongOutputFlag)
 	}
 
 	users, err := libclient.GetUsers()
diff --git a/src/client/cmdUser/userSetCaps.go b/src/client/cmdUser/userSetCaps.go
index 44133e7..6e3ddec 100644
--- a/src/client/cmdUser/userSetCaps.go
+++ b/src/client/cmdUser/userSetCaps.go
@@ -8,6 +8,7 @@ import (
 	"nexus-common/params"
 	g "nexus-libclient/globals"
 	libclient "nexus-libclient/user"
+	"nexus-libclient/utils"
 	"os"
 	"strings"
 )
@@ -50,7 +51,7 @@ List of user capabilities:
 		i += 1
 		count += 1
 		if i >= 5 && count < len(caps) {
-			usage = u.AppendNewLine(usage)
+			usage = utils.AppendNewLine(usage)
 			i = 0
 		}
 	}
@@ -66,12 +67,12 @@ func (cmd *SetCaps) Run(args []string) int {
 
 	statusCode := 0
 
-	if argc == 1 && !u.IsEmail(args[0]) {
+	if argc == 1 && !utils.IsEmail(args[0]) {
 		// Single argument and it's a CSV file
 
 		csvFile := args[0]
 
-		if u.IsEmail(csvFile) {
+		if utils.IsEmail(csvFile) {
 			cmd.PrintUsage()
 			return 1
 		}
@@ -116,7 +117,7 @@ func (cmd *SetCaps) Run(args []string) int {
 			}
 
 			email := columns[0]
-			if !u.IsEmail(email) {
+			if !utils.IsEmail(email) {
 				u.PrintlnErr("Failed reading record on line ", line, ": ", email, " is not a valid email")
 				statusCode = 1
 				continue
diff --git a/src/client/cmdVM/vmAddAccess.go b/src/client/cmdVM/vmAddAccess.go
index dba53d5..ec290e4 100644
--- a/src/client/cmdVM/vmAddAccess.go
+++ b/src/client/cmdVM/vmAddAccess.go
@@ -9,6 +9,7 @@ import (
 	"nexus-common/caps"
 	"nexus-common/params"
 	g "nexus-libclient/globals"
+	"nexus-libclient/utils"
 	libclient "nexus-libclient/vm"
 	"os"
 	"strings"
@@ -53,7 +54,7 @@ List of VM access capabilities:
 		i += 1
 		count += 1
 		if i >= 5 && count < len(caps) {
-			usage = u.AppendNewLine(usage)
+			usage = utils.AppendNewLine(usage)
 			i = 0
 		}
 	}
@@ -107,7 +108,7 @@ func (cmd *AddAccess) Run(args []string) int {
 			vmID := columns[0]
 
 			email := columns[1]
-			if !u.IsEmail(email) {
+			if !utils.IsEmail(email) {
 				u.PrintlnErr("FAILED reading record on line ", line, ": ", email, " is not a valid email")
 				statusCode = 1
 				continue
diff --git a/src/client/cmdVM/vmCreate.go b/src/client/cmdVM/vmCreate.go
index 4a4763c..c8a8def 100644
--- a/src/client/cmdVM/vmCreate.go
+++ b/src/client/cmdVM/vmCreate.go
@@ -5,6 +5,7 @@ import (
 	u "nexus-client/utils"
 	"nexus-common/params"
 	"nexus-common/vm"
+	"nexus-libclient/utils"
 	libclient "nexus-libclient/vm"
 	"strconv"
 
@@ -67,7 +68,7 @@ func (cmd *Create) Run(args []string) int {
 		return 1
 	}
 	nic := vm.NicType(args[3])
-	usbDevs := u.Str2UsbDevices(args[4])
+	usbDevs := utils.Str2UsbDevices(args[4])
 	templateID, err := uuid.Parse(args[5])
 	if err != nil {
 		u.PrintlnErr(err)
@@ -82,7 +83,7 @@ func (cmd *Create) Run(args []string) int {
 		if err != nil {
 			// It's not a number, we assume it's a CSV file and parse it.
 			csvFile := args[6]
-			csvEntries, err = u.ReadCSVColumn(csvFile, 0)
+			csvEntries, err = utils.ReadCSVColumn(csvFile, 0)
 			if err != nil {
 				u.PrintlnErr(err)
 				return 1
diff --git a/src/client/cmdVM/vmDelAccess.go b/src/client/cmdVM/vmDelAccess.go
index 4bd7ef9..7d16a31 100644
--- a/src/client/cmdVM/vmDelAccess.go
+++ b/src/client/cmdVM/vmDelAccess.go
@@ -7,6 +7,7 @@ import (
 	"net/mail"
 	u "nexus-client/utils"
 	g "nexus-libclient/globals"
+	"nexus-libclient/utils"
 	libclient "nexus-libclient/vm"
 	"os"
 )
@@ -85,7 +86,7 @@ func (cmd *DelAccess) Run(args []string) int {
 			vmID := columns[0]
 
 			email := columns[1]
-			if !u.IsEmail(email) {
+			if !utils.IsEmail(email) {
 				u.PrintlnErr("FAILED reading record on line ", line, ": ", email, " is not a valid email")
 				statusCode = 1
 				continue
diff --git a/src/client/cmdVM/vmEdit.go b/src/client/cmdVM/vmEdit.go
index 4650648..9cc0093 100644
--- a/src/client/cmdVM/vmEdit.go
+++ b/src/client/cmdVM/vmEdit.go
@@ -5,6 +5,7 @@ import (
 	u "nexus-client/utils"
 	"nexus-common/params"
 	"nexus-common/vm"
+	"nexus-libclient/utils"
 	libclient "nexus-libclient/vm"
 	"strconv"
 	"strings"
@@ -144,7 +145,7 @@ func (cmd *Edit) parseArgs(args []string) (*params.VMEdit, []string, error) {
 		}
 		s = getStringVal(arg, "usb=")
 		if s != "" {
-			vmParams.UsbDevs = u.Str2UsbDevices(s)
+			vmParams.UsbDevs = utils.Str2UsbDevices(s)
 			atLeastOneArg = true
 			continue
 		}
diff --git a/src/client/cmdVM/vmImportDir.go b/src/client/cmdVM/vmImportDir.go
index f1a2238..6042118 100644
--- a/src/client/cmdVM/vmImportDir.go
+++ b/src/client/cmdVM/vmImportDir.go
@@ -2,9 +2,9 @@ package cmdVM
 
 import (
 	u "nexus-client/utils"
-	"nexus-common/utils"
+	cu "nexus-common/utils"
+	"nexus-libclient/utils"
 	libclient "nexus-libclient/vm"
-
 	"os"
 )
 
@@ -60,14 +60,14 @@ func (cmd *ImportDir) Run(args []string) int {
 
 	statusCode := 0
 
-	tmpTarGzFile, err := utils.GetRandomTempFilename()
+	tmpTarGzFile, err := cu.GetRandomTempFilename()
 	if err != nil {
 		u.PrintlnErr(err)
 		return 1
 	}
 	tmpTarGzFile += ".tar.gz"
 	defer os.Remove(tmpTarGzFile)
-	if err := u.TarGzDir(localDir, tmpTarGzFile); err != nil {
+	if err := utils.TarGzDir(localDir, tmpTarGzFile); err != nil {
 		u.PrintlnErr(err)
 		return 1
 	}
diff --git a/src/client/cmdVM/vmList.go b/src/client/cmdVM/vmList.go
index c1f1d79..e9312f6 100644
--- a/src/client/cmdVM/vmList.go
+++ b/src/client/cmdVM/vmList.go
@@ -3,6 +3,7 @@ package cmdVM
 import (
 	"fmt"
 	u "nexus-client/utils"
+	"nexus-libclient/utils"
 	libclient "nexus-libclient/vm"
 )
 
@@ -52,7 +53,7 @@ func (cmd *List) printFilteredVMs(args []string, route string) int {
 	}
 
 	if foundLongOutputFlag >= 0 {
-		args = u.RemoveArgAtIndex(args, foundLongOutputFlag)
+		args = utils.RemoveArgAtIndex(args, foundLongOutputFlag)
 	}
 
 	vms, err := getFilteredVMs(libclient.GetListVMs, args)
diff --git a/src/client/cmdVM/vmStartWithCreds.go b/src/client/cmdVM/vmStartWithCreds.go
index 30663e5..b583fda 100644
--- a/src/client/cmdVM/vmStartWithCreds.go
+++ b/src/client/cmdVM/vmStartWithCreds.go
@@ -4,6 +4,7 @@ import (
 	"errors"
 	u "nexus-client/utils"
 	"nexus-common/params"
+	"nexus-libclient/utils"
 	libclient "nexus-libclient/vm"
 )
 
@@ -35,12 +36,12 @@ func (cmd *StartWithCreds) PrintUsage() {
 
 func (cmd *StartWithCreds) parseCSVFile(csvFile string) ([]string, []string, error) {
 	// Column 0: VM IDs
-	vmIDs, err := u.ReadCSVColumn(csvFile, 0)
+	vmIDs, err := utils.ReadCSVColumn(csvFile, 0)
 	if err != nil {
 		return nil, nil, err
 	}
 	// Column 2: passwords
-	pwds, err := u.ReadCSVColumn(csvFile, 2)
+	pwds, err := utils.ReadCSVColumn(csvFile, 2)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/src/client/nexus-exam/nexus-exam.go b/src/client/nexus-exam/nexus-exam.go
index 8bc2537..8ccf87e 100644
--- a/src/client/nexus-exam/nexus-exam.go
+++ b/src/client/nexus-exam/nexus-exam.go
@@ -4,8 +4,6 @@ import (
 	"bytes"
 	_ "embed"
 	"errors"
-	"nexus-client/cmdLogin"
-	"nexus-client/cmdToken"
 	"nexus-client/defaults"
 	e "nexus-client/exec"
 	u "nexus-client/utils"
@@ -14,6 +12,7 @@ import (
 	"nexus-common/params"
 	"nexus-common/vm"
 	g "nexus-libclient/globals"
+	login "nexus-libclient/login"
 	libclient "nexus-libclient/vm"
 	"os"
 	"os/exec"
@@ -128,7 +127,7 @@ func refreshToken(parent fyne.Window) {
 	for {
 		if !loggedIn {
 			// Logins and obtains a JWT token.
-			token, err = cmdLogin.GetToken(nexus_exam_user, nexus_exam_pwd)
+			token, err = login.GetToken(nexus_exam_user, nexus_exam_pwd)
 			if err != nil {
 				appLabel.SetText("Unable to connect to server (error code 1)...\nCheck your network connection.")
 				u.PrintlnErr(time.Now(), ": failed connecting to server: "+err.Error())
@@ -139,7 +138,7 @@ func refreshToken(parent fyne.Window) {
 			}
 		} else {
 			setHeaderToken()
-			refreshedToken, err := cmdToken.GetToken()
+			refreshedToken, err := login.RefreshToken()
 			if err != nil {
 				appLabel.SetText("Unable to connect to server (error code 2)...\nCheck your network connection.")
 				u.PrintlnErr(time.Now(), ": failed refreshing token: "+err.Error())
@@ -155,7 +154,7 @@ func refreshToken(parent fyne.Window) {
 		} else {
 			appConnect.Hide()
 		}
-		time.Sleep(10 * time.Second)
+		time.Sleep(60 * time.Second)
 	}
 }
 
diff --git a/src/libclient/template/templateExportDisk.go b/src/libclient/template/templateExportDisk.go
index 0c418f5..043675f 100644
--- a/src/libclient/template/templateExportDisk.go
+++ b/src/libclient/template/templateExportDisk.go
@@ -2,9 +2,9 @@ package template
 
 import (
 	"errors"
-	u "nexus-client/utils"
 	g "nexus-libclient/globals"
 	"nexus-libclient/response"
+	u "nexus-libclient/utils"
 )
 
 func TemplateExportDisk(tplID, outputFile string) error {
diff --git a/src/client/utils/csv.go b/src/libclient/utils/csv.go
similarity index 100%
rename from src/client/utils/csv.go
rename to src/libclient/utils/csv.go
diff --git a/src/client/utils/files.go b/src/libclient/utils/files.go
similarity index 100%
rename from src/client/utils/files.go
rename to src/libclient/utils/files.go
diff --git a/src/client/utils/strings.go b/src/libclient/utils/strings.go
similarity index 100%
rename from src/client/utils/strings.go
rename to src/libclient/utils/strings.go
diff --git a/src/libclient/vm/vmExportDir.go b/src/libclient/vm/vmExportDir.go
index adf0236..a682021 100644
--- a/src/libclient/vm/vmExportDir.go
+++ b/src/libclient/vm/vmExportDir.go
@@ -2,9 +2,9 @@ package vm
 
 import (
 	"errors"
-	u "nexus-client/utils"
 	"nexus-common/params"
 	g "nexus-libclient/globals"
+	u "nexus-libclient/utils"
 )
 
 func VMExportDir(vmName, vmID, dirToExport string) (string, error) {
diff --git a/src/server/cleaner/cleaner.go b/src/server/cleaner/cleaner.go
index 7b85542..742f9f6 100644
--- a/src/server/cleaner/cleaner.go
+++ b/src/server/cleaner/cleaner.go
@@ -26,7 +26,7 @@ func isOlderThanMinutes(fi os.FileInfo, n time.Duration) bool {
 func cleanup() {
 	dir := "/tmp"
 
-	log.Info("Cleanup thread configured to run every ", periodTimeInMin, " minutes and to delete uploaded files in ", dir, " last accessed more than ", deleteOlderThanInMin, " minutes ago")
+	log.Info("Cleanup thread: run every ", periodTimeInMin, " minutes; delete uploaded files in ", dir, " last accessed more than ", deleteOlderThanInMin, " minutes ago")
 
 	for {
 		log.Debug("Cleanup thread: checking for files to delete...")
diff --git a/src/server/nexus-server.go b/src/server/nexus-server.go
index 3158f81..feef8ff 100644
--- a/src/server/nexus-server.go
+++ b/src/server/nexus-server.go
@@ -48,7 +48,7 @@ func main() {
 	cleaner.Start()
 
 	log.Info("API port: ", conf.Core.APIDefaultPort)
-	log.Info("Spice port range [", conf.Core.VMSpiceMinPort, "-", conf.Core.VMSpiceMaxPort, "]")
+	log.Info("Spice port range: ", conf.Core.VMSpiceMinPort, "-", conf.Core.VMSpiceMaxPort)
 	log.Info("Tmp directory: ", conf.Core.TmpDir)
 
 	log.Info("Max upload size: ", conf.Limits.MaxUploadSize)
diff --git a/src/server/vms/vms.go b/src/server/vms/vms.go
index 13a6df5..72144d4 100644
--- a/src/server/vms/vms.go
+++ b/src/server/vms/vms.go
@@ -872,9 +872,7 @@ func (vms *VMs) DeleteFileFromVM(vm *VM, filePath string) error {
 	}
 
 	vm.DiskBusy = true
-	defer func(vm *VM) {
-		vm.DiskBusy = false
-	}(vm)
+	defer func(vm *VM) { vm.DiskBusy = false }(vm)
 
 	if err := exec.DeleteFromVM(vm.getDiskPath(), filePath); err != nil {
 		msg := prefix + err.Error()
-- 
GitLab