Browse Source

Migrated all root source code to use common module

Toby Chui 3 years ago
parent
commit
f3ed495937
41 changed files with 758 additions and 693 deletions
  1. 2 1
      agi.go
  2. 14 12
      apt.go
  3. 1 1
      auth.go
  4. 34 33
      backup.go
  5. 0 0
      common.go_disabled
  6. 3 1
      console.go
  7. 72 70
      desktop.go
  8. 3 2
      disk.go
  9. 4 2
      error.go
  10. 155 154
      file_system.go
  11. 22 20
      hardware.power.go
  12. 3 2
      iot.go
  13. 5 5
      main.router.go
  14. 10 9
      mediaServer.go
  15. 10 0
      mod/common/common.go
  16. 16 0
      mod/common/conv.go
  17. 86 87
      mod/disk/sortfile/common.go
  18. 16 15
      module.go
  19. 18 17
      network.forward.go
  20. 22 21
      network.ftp.go
  21. 2 1
      network.go
  22. 7 6
      network.webdav.go
  23. 2 1
      notification.go
  24. 3 2
      permission.go
  25. 14 13
      quota.go
  26. 15 14
      register.go
  27. 2 1
      scheduler.go
  28. 2 1
      security.go
  29. 2 1
      setting.advance.go
  30. 6 5
      setting.go
  31. 9 8
      startup.flags.go
  32. 4 3
      startup.go
  33. 2 2
      storage.go
  34. 61 60
      storage.pool.go
  35. 4 2
      subservice.go
  36. 9 7
      system.go
  37. 5 5
      system.info.go
  38. 20 20
      system.resetpw.go
  39. 51 50
      user.go
  40. 2 0
      web/SystemAO/security/connlog.html
  41. 40 39
      wifi.go

+ 2 - 1
agi.go

@@ -5,6 +5,7 @@ import (
 	"net/http"
 	"net/http"
 
 
 	agi "imuslab.com/arozos/mod/agi"
 	agi "imuslab.com/arozos/mod/agi"
+	"imuslab.com/arozos/mod/common"
 )
 )
 
 
 var (
 var (
@@ -44,7 +45,7 @@ func AGIInit() {
 	//Register external API request handler endpoint
 	//Register external API request handler endpoint
 	http.HandleFunc("/api/ajgi/interface", func(w http.ResponseWriter, r *http.Request) {
 	http.HandleFunc("/api/ajgi/interface", func(w http.ResponseWriter, r *http.Request) {
 		//Check if token exists
 		//Check if token exists
-		token, err := mv(r, "token", true)
+		token, err := common.Mv(r, "token", true)
 		if err != nil {
 		if err != nil {
 			w.WriteHeader(http.StatusUnauthorized)
 			w.WriteHeader(http.StatusUnauthorized)
 			w.Write([]byte("401 - Unauthorized (token is empty)"))
 			w.Write([]byte("401 - Unauthorized (token is empty)"))

+ 14 - 12
apt.go

@@ -1,28 +1,30 @@
 package main
 package main
 
 
 import (
 import (
-	"net/http"
 	"log"
 	"log"
-	prout "imuslab.com/arozos/mod/prouter"
+	"net/http"
+
 	apt "imuslab.com/arozos/mod/apt"
 	apt "imuslab.com/arozos/mod/apt"
+	"imuslab.com/arozos/mod/common"
+	prout "imuslab.com/arozos/mod/prouter"
 )
 )
 
 
-func PackagManagerInit(){
+func PackagManagerInit() {
 	//Create a package manager
 	//Create a package manager
-	packageManager = apt.NewPackageManager(*allow_package_autoInstall);
+	packageManager = apt.NewPackageManager(*allow_package_autoInstall)
 	log.Println("Package Manager Initiated")
 	log.Println("Package Manager Initiated")
 
 
-	//Create a System Setting handler 
+	//Create a System Setting handler
 	//aka who can access System Setting can see contents about packages
 	//aka who can access System Setting can see contents about packages
 	router := prout.NewModuleRouter(prout.RouterOption{
 	router := prout.NewModuleRouter(prout.RouterOption{
-		ModuleName: "System Setting", 
-		AdminOnly: false, 
-		UserHandler: userHandler, 
-		DeniedHandler: func(w http.ResponseWriter, r *http.Request){
-			sendErrorResponse(w, "Permission Denied");
+		ModuleName:  "System Setting",
+		AdminOnly:   false,
+		UserHandler: userHandler,
+		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
-	});
-	
+	})
+
 	//Handle package listing request
 	//Handle package listing request
 	router.HandleFunc("/system/apt/list", apt.HandlePackageListRequest)
 	router.HandleFunc("/system/apt/list", apt.HandlePackageListRequest)
 
 

+ 1 - 1
auth.go

@@ -61,7 +61,7 @@ func AuthSettingsInit() {
 		AdminOnly:   true,
 		AdminOnly:   true,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 

+ 34 - 33
backup.go

@@ -7,6 +7,7 @@ import (
 	"path/filepath"
 	"path/filepath"
 	"strings"
 	"strings"
 
 
+	"imuslab.com/arozos/mod/common"
 	"imuslab.com/arozos/mod/disk/hybridBackup"
 	"imuslab.com/arozos/mod/disk/hybridBackup"
 	user "imuslab.com/arozos/mod/user"
 	user "imuslab.com/arozos/mod/user"
 
 
@@ -19,7 +20,7 @@ func backup_init() {
 		AdminOnly:   false,
 		AdminOnly:   false,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -88,7 +89,7 @@ func backup_listAllBackupDisk(w http.ResponseWriter, r *http.Request) {
 
 
 		//Check for error in getting FS Handler
 		//Check for error in getting FS Handler
 		if diskErr != nil || parentErr != nil {
 		if diskErr != nil || parentErr != nil {
-			sendErrorResponse(w, "Unable to get backup task info from backup disk: "+task.DiskUID)
+			common.SendErrorResponse(w, "Unable to get backup task info from backup disk: "+task.DiskUID)
 			return
 			return
 		}
 		}
 
 
@@ -108,7 +109,7 @@ func backup_listAllBackupDisk(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 
 
 	js, _ := json.Marshal(backupDrives)
 	js, _ := json.Marshal(backupDrives)
-	sendJSONResponse(w, string(js))
+	common.SendJSONResponse(w, string(js))
 }
 }
 
 
 //Generate a snapshot summary for vroot
 //Generate a snapshot summary for vroot
@@ -116,47 +117,47 @@ func backup_renderSnapshotSummary(w http.ResponseWriter, r *http.Request) {
 	//Get user accessiable storage pools
 	//Get user accessiable storage pools
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 
 
 	//Get Backup disk ID from request
 	//Get Backup disk ID from request
-	bdid, err := mv(r, "bdid", true)
+	bdid, err := common.Mv(r, "bdid", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid backup disk ID given")
+		common.SendErrorResponse(w, "Invalid backup disk ID given")
 		return
 		return
 	}
 	}
 
 
 	//Get target snapshot name from request
 	//Get target snapshot name from request
-	snapshot, err := mv(r, "snapshot", true)
+	snapshot, err := common.Mv(r, "snapshot", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid snapshot name given")
+		common.SendErrorResponse(w, "Invalid snapshot name given")
 		return
 		return
 	}
 	}
 
 
 	//Get fsh from the id
 	//Get fsh from the id
 	fsh, err := GetFsHandlerByUUID(bdid)
 	fsh, err := GetFsHandlerByUUID(bdid)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	//Get parent disk hierarcy
 	//Get parent disk hierarcy
 	parentDiskID, err := userinfo.HomeDirectories.HyperBackupManager.GetParentDiskIDByRestoreDiskID(fsh.UUID)
 	parentDiskID, err := userinfo.HomeDirectories.HyperBackupManager.GetParentDiskIDByRestoreDiskID(fsh.UUID)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 	parentFsh, err := GetFsHandlerByUUID(parentDiskID)
 	parentFsh, err := GetFsHandlerByUUID(parentDiskID)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	//Get task by the backup disk id
 	//Get task by the backup disk id
 	task, err := userinfo.HomeDirectories.HyperBackupManager.GetTaskByBackupDiskID(fsh.UUID)
 	task, err := userinfo.HomeDirectories.HyperBackupManager.GetTaskByBackupDiskID(fsh.UUID)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
@@ -166,23 +167,23 @@ func backup_renderSnapshotSummary(w http.ResponseWriter, r *http.Request) {
 		if parentFsh.Hierarchy == "user" {
 		if parentFsh.Hierarchy == "user" {
 			s, err := task.GenerateSnapshotSummary(snapshot, &userinfo.Username)
 			s, err := task.GenerateSnapshotSummary(snapshot, &userinfo.Username)
 			if err != nil {
 			if err != nil {
-				sendErrorResponse(w, err.Error())
+				common.SendErrorResponse(w, err.Error())
 				return
 				return
 			}
 			}
 			summary = s
 			summary = s
 		} else {
 		} else {
 			s, err := task.GenerateSnapshotSummary(snapshot, nil)
 			s, err := task.GenerateSnapshotSummary(snapshot, nil)
 			if err != nil {
 			if err != nil {
-				sendErrorResponse(w, err.Error())
+				common.SendErrorResponse(w, err.Error())
 				return
 				return
 			}
 			}
 			summary = s
 			summary = s
 		}
 		}
 
 
 		js, _ := json.Marshal(summary)
 		js, _ := json.Marshal(summary)
-		sendJSONResponse(w, string(js))
+		common.SendJSONResponse(w, string(js))
 	} else {
 	} else {
-		sendErrorResponse(w, "Unable to genreate snapshot summary: Backup mode is not snapshot")
+		common.SendErrorResponse(w, "Unable to genreate snapshot summary: Backup mode is not snapshot")
 		return
 		return
 	}
 	}
 
 
@@ -193,42 +194,42 @@ func backup_restoreSelected(w http.ResponseWriter, r *http.Request) {
 	//Get user accessiable storage pools
 	//Get user accessiable storage pools
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 
 
 	//Get Backup disk ID from request
 	//Get Backup disk ID from request
-	bdid, err := mv(r, "bdid", true)
+	bdid, err := common.Mv(r, "bdid", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid backup disk ID given")
+		common.SendErrorResponse(w, "Invalid backup disk ID given")
 		return
 		return
 	}
 	}
 
 
 	//Get fsh from the id
 	//Get fsh from the id
 	fsh, err := GetFsHandlerByUUID(bdid)
 	fsh, err := GetFsHandlerByUUID(bdid)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	//Get the relative path for the restorable file
 	//Get the relative path for the restorable file
-	relpath, err := mv(r, "relpath", true)
+	relpath, err := common.Mv(r, "relpath", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid relative path given")
+		common.SendErrorResponse(w, "Invalid relative path given")
 		return
 		return
 	}
 	}
 
 
 	//Pick the correct HybridBackup Manager
 	//Pick the correct HybridBackup Manager
 	targetHybridBackupManager, err := backup_pickHybridBackupManager(userinfo, fsh.UUID)
 	targetHybridBackupManager, err := backup_pickHybridBackupManager(userinfo, fsh.UUID)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	//Handle restore of the file
 	//Handle restore of the file
 	err = targetHybridBackupManager.HandleRestore(fsh.UUID, relpath, &userinfo.Username)
 	err = targetHybridBackupManager.HandleRestore(fsh.UUID, relpath, &userinfo.Username)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
@@ -263,7 +264,7 @@ func backup_restoreSelected(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 
 
 	js, _ := json.Marshal(result)
 	js, _ := json.Marshal(result)
-	sendJSONResponse(w, string(js))
+	common.SendJSONResponse(w, string(js))
 }
 }
 
 
 //As one user might be belongs to multiple groups, check which storage pool is this disk ID owned by and return its corect backup maanger
 //As one user might be belongs to multiple groups, check which storage pool is this disk ID owned by and return its corect backup maanger
@@ -296,42 +297,42 @@ func backup_listRestorable(w http.ResponseWriter, r *http.Request) {
 	//Get user accessiable storage pools
 	//Get user accessiable storage pools
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 
 
 	//Get Vroot ID from request
 	//Get Vroot ID from request
-	vroot, err := mv(r, "vroot", true)
+	vroot, err := common.Mv(r, "vroot", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid vroot given")
+		common.SendErrorResponse(w, "Invalid vroot given")
 		return
 		return
 	}
 	}
 
 
 	//Get fsh from the id
 	//Get fsh from the id
 	fsh, err := GetFsHandlerByUUID(vroot)
 	fsh, err := GetFsHandlerByUUID(vroot)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	//Get all backup managers that this user ac can access
 	//Get all backup managers that this user ac can access
 	targetBackupManager, err := backup_pickHybridBackupManager(userinfo, vroot)
 	targetBackupManager, err := backup_pickHybridBackupManager(userinfo, vroot)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	//Get the user's storage pool and list restorable by the user's storage pool access
 	//Get the user's storage pool and list restorable by the user's storage pool access
 	restorableReport, err := targetBackupManager.ListRestorable(fsh.UUID)
 	restorableReport, err := targetBackupManager.ListRestorable(fsh.UUID)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	//Get and check if the parent disk has a user Hierarcy
 	//Get and check if the parent disk has a user Hierarcy
 	paretnfsh, err := GetFsHandlerByUUID(restorableReport.ParentUID)
 	paretnfsh, err := GetFsHandlerByUUID(restorableReport.ParentUID)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
@@ -364,5 +365,5 @@ func backup_listRestorable(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 
 
 	js, _ := json.Marshal(result)
 	js, _ := json.Marshal(result)
-	sendJSONResponse(w, string(js))
+	common.SendJSONResponse(w, string(js))
 }
 }

+ 0 - 0
common.go → common.go_disabled


+ 3 - 1
console.go

@@ -6,6 +6,8 @@ import (
 	"fmt"
 	"fmt"
 	"io/ioutil"
 	"io/ioutil"
 	"strings"
 	"strings"
+
+	"imuslab.com/arozos/mod/common"
 )
 )
 
 
 //Handle console command from the console module
 //Handle console command from the console module
@@ -86,7 +88,7 @@ func consoleCommandHandler(input string) string {
 				tableList = append(tableList, k.(string))
 				tableList = append(tableList, k.(string))
 				return true
 				return true
 			})
 			})
-			if !inArray(tableList, chunk[2]) {
+			if !common.StringInArray(tableList, chunk[2]) {
 				return "Table not exists"
 				return "Table not exists"
 			} else if chunk[2] == "auth" {
 			} else if chunk[2] == "auth" {
 				return "You cannot view this database table"
 				return "You cannot view this database table"

+ 72 - 70
desktop.go

@@ -11,6 +11,8 @@ import (
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
 
 
+	"imuslab.com/arozos/mod/common"
+	fs "imuslab.com/arozos/mod/filesystem"
 	module "imuslab.com/arozos/mod/modules"
 	module "imuslab.com/arozos/mod/modules"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 )
 )
@@ -24,7 +26,7 @@ func DesktopInit() {
 		AdminOnly:   false,
 		AdminOnly:   false,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -74,12 +76,12 @@ func desktop_initUserFolderStructure(username string) {
 		log.Println(err)
 		log.Println(err)
 	}
 	}
 
 
-	if !fileExists(filepath.Join(homedir, "Desktop")) {
+	if !fs.FileExists(filepath.Join(homedir, "Desktop")) {
 		//Desktop directory not exists. Create one and copy a template desktop
 		//Desktop directory not exists. Create one and copy a template desktop
 		os.MkdirAll(homedir+"Desktop", 0755)
 		os.MkdirAll(homedir+"Desktop", 0755)
 
 
 		templateFolder := "./system/desktop/template/"
 		templateFolder := "./system/desktop/template/"
-		if fileExists(templateFolder) {
+		if fs.FileExists(templateFolder) {
 			templateFiles, _ := filepath.Glob(templateFolder + "*")
 			templateFiles, _ := filepath.Glob(templateFolder + "*")
 			for _, tfile := range templateFiles {
 			for _, tfile := range templateFiles {
 				input, _ := ioutil.ReadFile(tfile)
 				input, _ := ioutil.ReadFile(tfile)
@@ -112,59 +114,59 @@ func desktop_hostdetailHandler(w http.ResponseWriter, r *http.Request) {
 		VendorIcon:      iconVendor,
 		VendorIcon:      iconVendor,
 	})
 	})
 
 
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 }
 }
 
 
 func desktop_handleShortcutRename(w http.ResponseWriter, r *http.Request) {
 func desktop_handleShortcutRename(w http.ResponseWriter, r *http.Request) {
 	//Check if the user directory already exists
 	//Check if the user directory already exists
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 
 
 	//Get the shortcut file that is renaming
 	//Get the shortcut file that is renaming
-	target, err := mv(r, "src", false)
+	target, err := common.Mv(r, "src", false)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid shortcut file path given")
+		common.SendErrorResponse(w, "Invalid shortcut file path given")
 		return
 		return
 	}
 	}
 
 
 	//Get the new name
 	//Get the new name
-	new, err := mv(r, "new", false)
+	new, err := common.Mv(r, "new", false)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid new name given")
+		common.SendErrorResponse(w, "Invalid new name given")
 		return
 		return
 	}
 	}
 
 
 	//Check if the file actually exists and it is on desktop
 	//Check if the file actually exists and it is on desktop
 	rpath, err := userinfo.VirtualPathToRealPath(target)
 	rpath, err := userinfo.VirtualPathToRealPath(target)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	if target[:14] != "user:/Desktop/" {
 	if target[:14] != "user:/Desktop/" {
-		sendErrorResponse(w, "Shortcut not on desktop")
+		common.SendErrorResponse(w, "Shortcut not on desktop")
 		return
 		return
 	}
 	}
 
 
-	if !fileExists(rpath) {
-		sendErrorResponse(w, "File not exists")
+	if !fs.FileExists(rpath) {
+		common.SendErrorResponse(w, "File not exists")
 		return
 		return
 	}
 	}
 
 
 	//OK. Change the name of the shortcut
 	//OK. Change the name of the shortcut
 	originalShortcut, err := ioutil.ReadFile(rpath)
 	originalShortcut, err := ioutil.ReadFile(rpath)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Shortcut file read failed")
+		common.SendErrorResponse(w, "Shortcut file read failed")
 		return
 		return
 	}
 	}
 
 
 	lines := strings.Split(string(originalShortcut), "\n")
 	lines := strings.Split(string(originalShortcut), "\n")
 	if len(lines) < 4 {
 	if len(lines) < 4 {
 		//Invalid shortcut properties
 		//Invalid shortcut properties
-		sendErrorResponse(w, "Invalid shortcut file")
+		common.SendErrorResponse(w, "Invalid shortcut file")
 		return
 		return
 	}
 	}
 
 
@@ -173,10 +175,10 @@ func desktop_handleShortcutRename(w http.ResponseWriter, r *http.Request) {
 	newShortcutContent := strings.Join(lines, "\n")
 	newShortcutContent := strings.Join(lines, "\n")
 	err = ioutil.WriteFile(rpath, []byte(newShortcutContent), 0755)
 	err = ioutil.WriteFile(rpath, []byte(newShortcutContent), 0755)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 func desktop_listFiles(w http.ResponseWriter, r *http.Request) {
 func desktop_listFiles(w http.ResponseWriter, r *http.Request) {
@@ -224,7 +226,7 @@ func desktop_listFiles(w http.ResponseWriter, r *http.Request) {
 		thisFileObject.Filepath, _ = userinfo.RealPathToVirtualPath(this)
 		thisFileObject.Filepath, _ = userinfo.RealPathToVirtualPath(this)
 		thisFileObject.Filename = filepath.Base(this)
 		thisFileObject.Filename = filepath.Base(this)
 		thisFileObject.Ext = filepath.Ext(this)
 		thisFileObject.Ext = filepath.Ext(this)
-		thisFileObject.IsDir = IsDir(this)
+		thisFileObject.IsDir = fs.IsDir(this)
 		if thisFileObject.IsDir {
 		if thisFileObject.IsDir {
 			//Check if this dir is empty
 			//Check if this dir is empty
 			filesInFolder, _ := filepath.Glob(filepath.ToSlash(filepath.Clean(this)) + "/*")
 			filesInFolder, _ := filepath.Glob(filepath.ToSlash(filepath.Clean(this)) + "/*")
@@ -275,7 +277,7 @@ func desktop_listFiles(w http.ResponseWriter, r *http.Request) {
 
 
 	//Convert the struct to json string
 	//Convert the struct to json string
 	jsonString, _ := json.Marshal(desktopFiles)
 	jsonString, _ := json.Marshal(desktopFiles)
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 }
 }
 
 
 //functions to handle desktop icon locations. Location is directly written into the center db.
 //functions to handle desktop icon locations. Location is directly written into the center db.
@@ -316,7 +318,7 @@ func setDesktopLocationFromPath(filename string, username string, x int, y int)
 	newLocation.Y = y
 	newLocation.Y = y
 
 
 	//Check if the file exits
 	//Check if the file exits
-	if fileExists(path) == false {
+	if fs.FileExists(path) == false {
 		return errors.New("Given filename not exists.")
 		return errors.New("Given filename not exists.")
 	}
 	}
 
 
@@ -342,7 +344,7 @@ func delDesktopLocationFromPath(filename string, username string) {
 func desktop_handleUserInfo(w http.ResponseWriter, r *http.Request) {
 func desktop_handleUserInfo(w http.ResponseWriter, r *http.Request) {
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
@@ -375,21 +377,21 @@ func desktop_handleUserInfo(w http.ResponseWriter, r *http.Request) {
 		StorageQuotaTotal: userinfo.StorageQuota.GetUserStorageQuota(),
 		StorageQuotaTotal: userinfo.StorageQuota.GetUserStorageQuota(),
 		StorageQuotaLeft:  remainingQuota,
 		StorageQuotaLeft:  remainingQuota,
 	})
 	})
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 }
 }
 
 
 //Icon handling function for web endpoint
 //Icon handling function for web endpoint
 func desktop_fileLocation_handler(w http.ResponseWriter, r *http.Request) {
 func desktop_fileLocation_handler(w http.ResponseWriter, r *http.Request) {
-	get, _ := mv(r, "get", true) //Check if there are get request for a given filepath
-	set, _ := mv(r, "set", true) //Check if there are any set request for a given filepath
-	del, _ := mv(r, "del", true) //Delete the given filename coordinate
+	get, _ := common.Mv(r, "get", true) //Check if there are get request for a given filepath
+	set, _ := common.Mv(r, "set", true) //Check if there are any set request for a given filepath
+	del, _ := common.Mv(r, "del", true) //Delete the given filename coordinate
 
 
 	if set != "" {
 	if set != "" {
 		//Set location with given paramter
 		//Set location with given paramter
 		x := 0
 		x := 0
 		y := 0
 		y := 0
-		sx, _ := mv(r, "x", true)
-		sy, _ := mv(r, "y", true)
+		sx, _ := common.Mv(r, "x", true)
+		sy, _ := common.Mv(r, "y", true)
 		path := set
 		path := set
 
 
 		x, err := strconv.Atoi(sx)
 		x, err := strconv.Atoi(sx)
@@ -406,22 +408,22 @@ func desktop_fileLocation_handler(w http.ResponseWriter, r *http.Request) {
 		username, _ := authAgent.GetUserName(w, r)
 		username, _ := authAgent.GetUserName(w, r)
 		err = setDesktopLocationFromPath(path, username, x, y)
 		err = setDesktopLocationFromPath(path, username, x, y)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, err.Error())
+			common.SendErrorResponse(w, err.Error())
 			return
 			return
 		}
 		}
-		sendJSONResponse(w, string("\"OK\""))
+		common.SendJSONResponse(w, string("\"OK\""))
 	} else if get != "" {
 	} else if get != "" {
 		username, _ := authAgent.GetUserName(w, r)
 		username, _ := authAgent.GetUserName(w, r)
 		x, y, _ := getDesktopLocatioFromPath(get, username)
 		x, y, _ := getDesktopLocatioFromPath(get, username)
 		result := []int{x, y}
 		result := []int{x, y}
 		json_string, _ := json.Marshal(result)
 		json_string, _ := json.Marshal(result)
-		sendJSONResponse(w, string(json_string))
+		common.SendJSONResponse(w, string(json_string))
 	} else if del != "" {
 	} else if del != "" {
 		username, _ := authAgent.GetUserName(w, r)
 		username, _ := authAgent.GetUserName(w, r)
 		delDesktopLocationFromPath(del, username)
 		delDesktopLocationFromPath(del, username)
 	} else {
 	} else {
 		//No argument has been set
 		//No argument has been set
-		sendTextResponse(w, "Paramter missing.")
+		common.SendJSONResponse(w, "Paramter missing.")
 	}
 	}
 }
 }
 
 
@@ -430,15 +432,15 @@ func desktop_fileLocation_handler(w http.ResponseWriter, r *http.Request) {
 func desktop_theme_handler(w http.ResponseWriter, r *http.Request) {
 func desktop_theme_handler(w http.ResponseWriter, r *http.Request) {
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 	username := userinfo.Username
 	username := userinfo.Username
 
 
 	//Check if the set GET paramter is set.
 	//Check if the set GET paramter is set.
-	targetTheme, _ := mv(r, "set", false)
-	getUserTheme, _ := mv(r, "get", false)
-	loadUserTheme, _ := mv(r, "load", false)
+	targetTheme, _ := common.Mv(r, "set", false)
+	getUserTheme, _ := common.Mv(r, "get", false)
+	loadUserTheme, _ := common.Mv(r, "load", false)
 	if targetTheme == "" && getUserTheme == "" && loadUserTheme == "" {
 	if targetTheme == "" && getUserTheme == "" && loadUserTheme == "" {
 		//List all the currnet themes in the list
 		//List all the currnet themes in the list
 		themes, err := filepath.Glob("web/img/desktop/bg/*")
 		themes, err := filepath.Glob("web/img/desktop/bg/*")
@@ -460,7 +462,7 @@ func desktop_theme_handler(w http.ResponseWriter, r *http.Request) {
 			".gif",
 			".gif",
 		}
 		}
 		for _, file := range themes {
 		for _, file := range themes {
-			if IsDir(file) {
+			if fs.IsDir(file) {
 				thisTheme := new(desktopTheme)
 				thisTheme := new(desktopTheme)
 				thisTheme.Theme = filepath.Base(file)
 				thisTheme.Theme = filepath.Base(file)
 				bglist, _ := filepath.Glob(file + "/*")
 				bglist, _ := filepath.Glob(file + "/*")
@@ -468,7 +470,7 @@ func desktop_theme_handler(w http.ResponseWriter, r *http.Request) {
 				for _, bg := range bglist {
 				for _, bg := range bglist {
 					ext := filepath.Ext(bg)
 					ext := filepath.Ext(bg)
 					//if (sliceutil.Contains(acceptBGFormats, ext) ){
 					//if (sliceutil.Contains(acceptBGFormats, ext) ){
-					if stringInSlice(ext, acceptBGFormats) {
+					if common.StringInArray(acceptBGFormats, ext) {
 						//This file extension is supported
 						//This file extension is supported
 						thisbglist = append(thisbglist, filepath.Base(bg))
 						thisbglist = append(thisbglist, filepath.Base(bg))
 					}
 					}
@@ -484,7 +486,7 @@ func desktop_theme_handler(w http.ResponseWriter, r *http.Request) {
 		if err != nil {
 		if err != nil {
 			log.Fatal(err)
 			log.Fatal(err)
 		}
 		}
-		sendJSONResponse(w, string(jsonString))
+		common.SendJSONResponse(w, string(jsonString))
 		return
 		return
 	} else if getUserTheme == "true" {
 	} else if getUserTheme == "true" {
 		//Get the user's theme from database
 		//Get the user's theme from database
@@ -492,30 +494,30 @@ func desktop_theme_handler(w http.ResponseWriter, r *http.Request) {
 		sysdb.Read("desktop", username+"/theme", &result)
 		sysdb.Read("desktop", username+"/theme", &result)
 		if result == "" {
 		if result == "" {
 			//This user has not set a theme yet. Use default
 			//This user has not set a theme yet. Use default
-			sendJSONResponse(w, string("\"default\""))
+			common.SendJSONResponse(w, string("\"default\""))
 			return
 			return
 		} else {
 		} else {
 			//This user already set a theme. Use its set theme
 			//This user already set a theme. Use its set theme
-			sendJSONResponse(w, string("\""+result+"\""))
+			common.SendJSONResponse(w, string("\""+result+"\""))
 			return
 			return
 		}
 		}
 	} else if loadUserTheme != "" {
 	} else if loadUserTheme != "" {
 		//Load user theme base on folder path
 		//Load user theme base on folder path
 		rpath, err := userinfo.VirtualPathToRealPath(loadUserTheme)
 		rpath, err := userinfo.VirtualPathToRealPath(loadUserTheme)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Custom folder load failed")
+			common.SendErrorResponse(w, "Custom folder load failed")
 			return
 			return
 		}
 		}
 
 
 		//Check if the folder exists
 		//Check if the folder exists
-		if !fileExists(rpath) {
-			sendErrorResponse(w, "Custom folder load failed")
+		if !fs.FileExists(rpath) {
+			common.SendErrorResponse(w, "Custom folder load failed")
 			return
 			return
 		}
 		}
 
 
 		if userinfo.CanRead(loadUserTheme) == false {
 		if userinfo.CanRead(loadUserTheme) == false {
 			//No read permission
 			//No read permission
-			sendErrorResponse(w, "Permission denied")
+			common.SendErrorResponse(w, "Permission denied")
 			return
 			return
 		}
 		}
 
 
@@ -543,50 +545,50 @@ func desktop_theme_handler(w http.ResponseWriter, r *http.Request) {
 		}
 		}
 
 
 		js, _ := json.Marshal(virtualImageList)
 		js, _ := json.Marshal(virtualImageList)
-		sendJSONResponse(w, string(js))
+		common.SendJSONResponse(w, string(js))
 
 
 	} else if targetTheme != "" {
 	} else if targetTheme != "" {
 		//Set the current user theme
 		//Set the current user theme
 		sysdb.Write("desktop", username+"/theme", targetTheme)
 		sysdb.Write("desktop", username+"/theme", targetTheme)
-		sendJSONResponse(w, "\"OK\"")
+		common.SendJSONResponse(w, "\"OK\"")
 		return
 		return
 	}
 	}
 
 
 }
 }
 
 
 func desktop_preference_handler(w http.ResponseWriter, r *http.Request) {
 func desktop_preference_handler(w http.ResponseWriter, r *http.Request) {
-	preferenceType, _ := mv(r, "preference", false)
-	value, _ := mv(r, "value", false)
-	remove, _ := mv(r, "remove", false)
+	preferenceType, _ := common.Mv(r, "preference", false)
+	value, _ := common.Mv(r, "value", false)
+	remove, _ := common.Mv(r, "remove", false)
 	username, err := authAgent.GetUserName(w, r)
 	username, err := authAgent.GetUserName(w, r)
 	if err != nil {
 	if err != nil {
 		//user not logged in. Redirect to login page.
 		//user not logged in. Redirect to login page.
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 	if preferenceType == "" && value == "" {
 	if preferenceType == "" && value == "" {
 		//Invalid options. Return error reply.
 		//Invalid options. Return error reply.
-		sendTextResponse(w, "Error. Undefined paramter.")
+		common.SendErrorResponse(w, "Error. Undefined paramter.")
 		return
 		return
 	} else if preferenceType != "" && value == "" && remove == "" {
 	} else if preferenceType != "" && value == "" && remove == "" {
 		//Getting config from the key.
 		//Getting config from the key.
 		result := ""
 		result := ""
 		sysdb.Read("desktop", username+"/preference/"+preferenceType, &result)
 		sysdb.Read("desktop", username+"/preference/"+preferenceType, &result)
 		jsonString, _ := json.Marshal(result)
 		jsonString, _ := json.Marshal(result)
-		sendJSONResponse(w, string(jsonString))
+		common.SendJSONResponse(w, string(jsonString))
 		return
 		return
 	} else if preferenceType != "" && value == "" && remove == "true" {
 	} else if preferenceType != "" && value == "" && remove == "true" {
 		//Remove mode
 		//Remove mode
 		sysdb.Delete("desktop", username+"/preference/"+preferenceType)
 		sysdb.Delete("desktop", username+"/preference/"+preferenceType)
-		sendOK(w)
+		common.SendOK(w)
 		return
 		return
 	} else if preferenceType != "" && value != "" {
 	} else if preferenceType != "" && value != "" {
 		//Setting config from the key
 		//Setting config from the key
 		sysdb.Write("desktop", username+"/preference/"+preferenceType, value)
 		sysdb.Write("desktop", username+"/preference/"+preferenceType, value)
-		sendJSONResponse(w, "\"OK\"")
+		common.SendOK(w)
 		return
 		return
 	} else {
 	} else {
-		sendTextResponse(w, "Error. Undefined paramter.")
+		common.SendErrorResponse(w, "Error. Undefined paramter.")
 		return
 		return
 	}
 	}
 
 
@@ -597,44 +599,44 @@ func desktop_shortcutHandler(w http.ResponseWriter, r *http.Request) {
 
 
 	if err != nil {
 	if err != nil {
 		//user not logged in. Redirect to login page.
 		//user not logged in. Redirect to login page.
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 
 
 	userinfo, _ := userHandler.GetUserInfoFromUsername(username)
 	userinfo, _ := userHandler.GetUserInfoFromUsername(username)
 
 
-	shortcutType, err := mv(r, "stype", true)
+	shortcutType, err := common.Mv(r, "stype", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
-	shortcutText, err := mv(r, "stext", true)
+	shortcutText, err := common.Mv(r, "stext", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
-	shortcutPath, err := mv(r, "spath", true)
+	shortcutPath, err := common.Mv(r, "spath", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
-	shortcutIcon, err := mv(r, "sicon", true)
+	shortcutIcon, err := common.Mv(r, "sicon", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	//OK to proceed. Generate a shortcut on the user desktop
 	//OK to proceed. Generate a shortcut on the user desktop
 	userDesktopPath, _ := userinfo.VirtualPathToRealPath("user:/Desktop")
 	userDesktopPath, _ := userinfo.VirtualPathToRealPath("user:/Desktop")
-	if !fileExists(userDesktopPath) {
+	if !fs.FileExists(userDesktopPath) {
 		os.MkdirAll(userDesktopPath, 0755)
 		os.MkdirAll(userDesktopPath, 0755)
 	}
 	}
 
 
 	//Check if there are desktop icon. If yes, override icon on module
 	//Check if there are desktop icon. If yes, override icon on module
-	if shortcutType == "module" && fileExists("./web/"+filepath.ToSlash(filepath.Dir(shortcutIcon)+"/desktop_icon.png")) {
+	if shortcutType == "module" && fs.FileExists("./web/"+filepath.ToSlash(filepath.Dir(shortcutIcon)+"/desktop_icon.png")) {
 		shortcutIcon = filepath.ToSlash(filepath.Join(filepath.Dir(shortcutIcon), "/desktop_icon.png"))
 		shortcutIcon = filepath.ToSlash(filepath.Join(filepath.Dir(shortcutIcon), "/desktop_icon.png"))
 	}
 	}
 
 
@@ -644,14 +646,14 @@ func desktop_shortcutHandler(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 	shortcutFilename := userDesktopPath + "/" + shortcutText + ".shortcut"
 	shortcutFilename := userDesktopPath + "/" + shortcutText + ".shortcut"
 	counter := 1
 	counter := 1
-	for fileExists(shortcutFilename) {
-		shortcutFilename = userDesktopPath + "/" + shortcutText + "(" + IntToString(counter) + ")" + ".shortcut"
+	for fs.FileExists(shortcutFilename) {
+		shortcutFilename = userDesktopPath + "/" + shortcutText + "(" + strconv.Itoa(counter) + ")" + ".shortcut"
 		counter++
 		counter++
 	}
 	}
 	err = ioutil.WriteFile(shortcutFilename, []byte(shortcutType+"\n"+shortcutText+"\n"+shortcutPath+"\n"+shortcutIcon), 0755)
 	err = ioutil.WriteFile(shortcutFilename, []byte(shortcutType+"\n"+shortcutText+"\n"+shortcutPath+"\n"+shortcutIcon), 0755)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
-	sendOK(w)
+	common.SendOK(w)
 }
 }

+ 3 - 2
disk.go

@@ -10,6 +10,7 @@ import (
 	"log"
 	"log"
 	"net/http"
 	"net/http"
 
 
+	"imuslab.com/arozos/mod/common"
 	"imuslab.com/arozos/mod/disk/diskcapacity"
 	"imuslab.com/arozos/mod/disk/diskcapacity"
 	"imuslab.com/arozos/mod/disk/diskmg"
 	"imuslab.com/arozos/mod/disk/diskmg"
 	diskspace "imuslab.com/arozos/mod/disk/diskspace"
 	diskspace "imuslab.com/arozos/mod/disk/diskspace"
@@ -26,7 +27,7 @@ func DiskServiceInit() {
 		AdminOnly:   false,
 		AdminOnly:   false,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -71,7 +72,7 @@ func DiskServiceInit() {
 			AdminOnly:   true,
 			AdminOnly:   true,
 			UserHandler: userHandler,
 			UserHandler: userHandler,
 			DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 			DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-				sendErrorResponse(w, "Permission Denied")
+				common.SendErrorResponse(w, "Permission Denied")
 			},
 			},
 		})
 		})
 
 

+ 4 - 2
error.go

@@ -9,11 +9,13 @@ import (
 	"io/ioutil"
 	"io/ioutil"
 	"net/http"
 	"net/http"
 	"strings"
 	"strings"
+
+	fs "imuslab.com/arozos/mod/filesystem"
 )
 )
 
 
 func errorHandleNotFound(w http.ResponseWriter, r *http.Request) {
 func errorHandleNotFound(w http.ResponseWriter, r *http.Request) {
 	notFoundPage := "./web/SystemAO/notfound.html"
 	notFoundPage := "./web/SystemAO/notfound.html"
-	if fileExists(notFoundPage) {
+	if fs.FileExists(notFoundPage) {
 
 
 		notFoundTemplateBytes, err := ioutil.ReadFile(notFoundPage)
 		notFoundTemplateBytes, err := ioutil.ReadFile(notFoundPage)
 		notFoundTemplate := string(notFoundTemplateBytes)
 		notFoundTemplate := string(notFoundTemplateBytes)
@@ -35,7 +37,7 @@ func errorHandleNotFound(w http.ResponseWriter, r *http.Request) {
 
 
 func errorHandlePermissionDenied(w http.ResponseWriter, r *http.Request) {
 func errorHandlePermissionDenied(w http.ResponseWriter, r *http.Request) {
 	unauthorizedPage := "./web/SystemAO/unauthorized.html"
 	unauthorizedPage := "./web/SystemAO/unauthorized.html"
-	if fileExists(unauthorizedPage) {
+	if fs.FileExists(unauthorizedPage) {
 		notFoundTemplateBytes, err := ioutil.ReadFile(unauthorizedPage)
 		notFoundTemplateBytes, err := ioutil.ReadFile(unauthorizedPage)
 		notFoundTemplate := string(notFoundTemplateBytes)
 		notFoundTemplate := string(notFoundTemplateBytes)
 		if err != nil {
 		if err != nil {

File diff suppressed because it is too large
+ 155 - 154
file_system.go


+ 22 - 20
hardware.power.go

@@ -6,6 +6,8 @@ import (
 
 
 	"os/exec"
 	"os/exec"
 	"runtime"
 	"runtime"
+
+	"imuslab.com/arozos/mod/common"
 )
 )
 
 
 func HardwarePowerInit() {
 func HardwarePowerInit() {
@@ -30,9 +32,9 @@ func HardwarePowerInit() {
 
 
 func hardware_power_checkIfHardware(w http.ResponseWriter, r *http.Request) {
 func hardware_power_checkIfHardware(w http.ResponseWriter, r *http.Request) {
 	if *allow_hardware_management {
 	if *allow_hardware_management {
-		sendJSONResponse(w, "true")
+		common.SendJSONResponse(w, "true")
 	} else {
 	} else {
-		sendJSONResponse(w, "false")
+		common.SendJSONResponse(w, "false")
 	}
 	}
 }
 }
 
 
@@ -45,25 +47,25 @@ func hardware_power_poweroff(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 
 
 	if !userinfo.IsAdmin() {
 	if !userinfo.IsAdmin() {
-		sendErrorResponse(w, "Permission Denied")
+		common.SendErrorResponse(w, "Permission Denied")
 		return
 		return
 	}
 	}
 
 
 	if !sudo_mode {
 	if !sudo_mode {
-		sendErrorResponse(w, "Sudo mode required")
+		common.SendErrorResponse(w, "Sudo mode required")
 		return
 		return
 	}
 	}
 
 
 	//Double check password for this user
 	//Double check password for this user
-	password, err := mv(r, "password", true)
+	password, err := common.Mv(r, "password", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Password Incorrect")
+		common.SendErrorResponse(w, "Password Incorrect")
 		return
 		return
 	}
 	}
 
 
 	passwordCorrect, rejectionReason := authAgent.ValidateUsernameAndPasswordWithReason(userinfo.Username, password)
 	passwordCorrect, rejectionReason := authAgent.ValidateUsernameAndPasswordWithReason(userinfo.Username, password)
 	if !passwordCorrect {
 	if !passwordCorrect {
-		sendErrorResponse(w, rejectionReason)
+		common.SendErrorResponse(w, rejectionReason)
 		return
 		return
 	}
 	}
 
 
@@ -73,7 +75,7 @@ func hardware_power_poweroff(w http.ResponseWriter, r *http.Request) {
 		out, err := cmd.CombinedOutput()
 		out, err := cmd.CombinedOutput()
 		if err != nil {
 		if err != nil {
 			log.Println(string(out))
 			log.Println(string(out))
-			sendErrorResponse(w, string(out))
+			common.SendErrorResponse(w, string(out))
 		}
 		}
 		log.Println(string(out))
 		log.Println(string(out))
 	}
 	}
@@ -84,7 +86,7 @@ func hardware_power_poweroff(w http.ResponseWriter, r *http.Request) {
 		out, err := cmd.CombinedOutput()
 		out, err := cmd.CombinedOutput()
 		if err != nil {
 		if err != nil {
 			log.Println(string(out))
 			log.Println(string(out))
-			sendErrorResponse(w, string(out))
+			common.SendErrorResponse(w, string(out))
 		}
 		}
 		log.Println(string(out))
 		log.Println(string(out))
 	}
 	}
@@ -95,12 +97,12 @@ func hardware_power_poweroff(w http.ResponseWriter, r *http.Request) {
 		out, err := cmd.CombinedOutput()
 		out, err := cmd.CombinedOutput()
 		if err != nil {
 		if err != nil {
 			log.Println(string(out))
 			log.Println(string(out))
-			sendErrorResponse(w, string(out))
+			common.SendErrorResponse(w, string(out))
 		}
 		}
 		log.Println(string(out))
 		log.Println(string(out))
 	}
 	}
 
 
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 func hardware_power_restart(w http.ResponseWriter, r *http.Request) {
 func hardware_power_restart(w http.ResponseWriter, r *http.Request) {
@@ -112,25 +114,25 @@ func hardware_power_restart(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 
 
 	if !userinfo.IsAdmin() {
 	if !userinfo.IsAdmin() {
-		sendErrorResponse(w, "Permission Denied")
+		common.SendErrorResponse(w, "Permission Denied")
 		return
 		return
 	}
 	}
 
 
 	if !sudo_mode {
 	if !sudo_mode {
-		sendErrorResponse(w, "Sudo mode required")
+		common.SendErrorResponse(w, "Sudo mode required")
 		return
 		return
 	}
 	}
 
 
 	//Double check password for this user
 	//Double check password for this user
-	password, err := mv(r, "password", true)
+	password, err := common.Mv(r, "password", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Password Incorrect")
+		common.SendErrorResponse(w, "Password Incorrect")
 		return
 		return
 	}
 	}
 
 
 	passwordCorrect, rejectionReason := authAgent.ValidateUsernameAndPasswordWithReason(userinfo.Username, password)
 	passwordCorrect, rejectionReason := authAgent.ValidateUsernameAndPasswordWithReason(userinfo.Username, password)
 	if !passwordCorrect {
 	if !passwordCorrect {
-		sendErrorResponse(w, rejectionReason)
+		common.SendErrorResponse(w, rejectionReason)
 		return
 		return
 	}
 	}
 
 
@@ -140,7 +142,7 @@ func hardware_power_restart(w http.ResponseWriter, r *http.Request) {
 		out, err := cmd.CombinedOutput()
 		out, err := cmd.CombinedOutput()
 		if err != nil {
 		if err != nil {
 			log.Println(string(out))
 			log.Println(string(out))
-			sendErrorResponse(w, string(out))
+			common.SendErrorResponse(w, string(out))
 		}
 		}
 		log.Println(string(out))
 		log.Println(string(out))
 	}
 	}
@@ -151,7 +153,7 @@ func hardware_power_restart(w http.ResponseWriter, r *http.Request) {
 		out, err := cmd.CombinedOutput()
 		out, err := cmd.CombinedOutput()
 		if err != nil {
 		if err != nil {
 			log.Println(string(out))
 			log.Println(string(out))
-			sendErrorResponse(w, string(out))
+			common.SendErrorResponse(w, string(out))
 		}
 		}
 		log.Println(string(out))
 		log.Println(string(out))
 	}
 	}
@@ -162,9 +164,9 @@ func hardware_power_restart(w http.ResponseWriter, r *http.Request) {
 		out, err := cmd.CombinedOutput()
 		out, err := cmd.CombinedOutput()
 		if err != nil {
 		if err != nil {
 			log.Println(string(out))
 			log.Println(string(out))
-			sendErrorResponse(w, string(out))
+			common.SendErrorResponse(w, string(out))
 		}
 		}
 		log.Println(string(out))
 		log.Println(string(out))
 	}
 	}
-	sendOK(w)
+	common.SendOK(w)
 }
 }

+ 3 - 2
iot.go

@@ -3,6 +3,7 @@ package main
 import (
 import (
 	"net/http"
 	"net/http"
 
 
+	"imuslab.com/arozos/mod/common"
 	"imuslab.com/arozos/mod/iot"
 	"imuslab.com/arozos/mod/iot"
 	"imuslab.com/arozos/mod/iot/hds"
 	"imuslab.com/arozos/mod/iot/hds"
 	"imuslab.com/arozos/mod/iot/hdsv2"
 	"imuslab.com/arozos/mod/iot/hdsv2"
@@ -56,7 +57,7 @@ func IoTHubInit() {
 			AdminOnly:   false,
 			AdminOnly:   false,
 			UserHandler: userHandler,
 			UserHandler: userHandler,
 			DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 			DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-				sendErrorResponse(w, "Permission Denied")
+				common.SendErrorResponse(w, "Permission Denied")
 			},
 			},
 		})
 		})
 
 
@@ -65,7 +66,7 @@ func IoTHubInit() {
 			AdminOnly:   true,
 			AdminOnly:   true,
 			UserHandler: userHandler,
 			UserHandler: userHandler,
 			DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 			DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-				sendErrorResponse(w, "Permission Denied")
+				common.SendErrorResponse(w, "Permission Denied")
 			},
 			},
 		})
 		})
 
 

+ 5 - 5
main.router.go

@@ -29,14 +29,14 @@ func mrouter(h http.Handler) http.Handler {
 		} else if r.URL.Path == "/login.system" {
 		} else if r.URL.Path == "/login.system" {
 			//Login page. Require special treatment for template.
 			//Login page. Require special treatment for template.
 			//Get the redirection address from the request URL
 			//Get the redirection address from the request URL
-			red, _ := mv(r, "redirect", false)
+			red, _ := common.Mv(r, "redirect", false)
 
 
 			//Append the redirection addr into the template
 			//Append the redirection addr into the template
 			imgsrc := "./web/" + iconSystem
 			imgsrc := "./web/" + iconSystem
-			if !fileExists(imgsrc) {
+			if !fs.FileExists(imgsrc) {
 				imgsrc = "./web/img/public/auth_icon.png"
 				imgsrc = "./web/img/public/auth_icon.png"
 			}
 			}
-			imageBase64, _ := LoadImageAsBase64(imgsrc)
+			imageBase64, _ := common.LoadImageAsBase64(imgsrc)
 			parsedPage, err := common.Templateload("web/login.system", map[string]interface{}{
 			parsedPage, err := common.Templateload("web/login.system", map[string]interface{}{
 				"redirection_addr": red,
 				"redirection_addr": red,
 				"usercount":        strconv.Itoa(authAgent.GetUserCounts()),
 				"usercount":        strconv.Itoa(authAgent.GetUserCounts()),
@@ -130,7 +130,7 @@ func mrouter(h http.Handler) http.Handler {
 			if !*enable_dir_listing {
 			if !*enable_dir_listing {
 				if strings.HasSuffix(r.URL.Path, "/") {
 				if strings.HasSuffix(r.URL.Path, "/") {
 					//User trying to access a directory. Send NOT FOUND.
 					//User trying to access a directory. Send NOT FOUND.
-					if fileExists("web" + r.URL.Path + "index.html") {
+					if fs.FileExists("web" + r.URL.Path + "index.html") {
 						//Index exists. Allow passthrough
 						//Index exists. Allow passthrough
 
 
 					} else {
 					} else {
@@ -139,7 +139,7 @@ func mrouter(h http.Handler) http.Handler {
 					}
 					}
 				}
 				}
 			}
 			}
-			if !fileExists("web" + r.URL.Path) {
+			if !fs.FileExists("web" + r.URL.Path) {
 				//File not found
 				//File not found
 				errorHandleNotFound(w, r)
 				errorHandleNotFound(w, r)
 				return
 				return

+ 10 - 9
mediaServer.go

@@ -8,6 +8,7 @@ import (
 	"path/filepath"
 	"path/filepath"
 	"strings"
 	"strings"
 
 
+	"imuslab.com/arozos/mod/common"
 	fs "imuslab.com/arozos/mod/filesystem"
 	fs "imuslab.com/arozos/mod/filesystem"
 	"imuslab.com/arozos/mod/network/gzipmiddleware"
 	"imuslab.com/arozos/mod/network/gzipmiddleware"
 )
 )
@@ -54,7 +55,7 @@ func media_server_validateSourceFile(w http.ResponseWriter, r *http.Request) (st
 		return "", errors.New("Invalid paramters. Multiple ? found")
 		return "", errors.New("Invalid paramters. Multiple ? found")
 	}
 	}
 
 
-	targetfile, _ := mv(r, "file", false)
+	targetfile, _ := common.Mv(r, "file", false)
 	targetfile, err = url.QueryUnescape(targetfile)
 	targetfile, err = url.QueryUnescape(targetfile)
 	if targetfile == "" {
 	if targetfile == "" {
 		return "", errors.New("Missing paramter 'file'")
 		return "", errors.New("Missing paramter 'file'")
@@ -62,14 +63,14 @@ func media_server_validateSourceFile(w http.ResponseWriter, r *http.Request) (st
 
 
 	//Translate the virtual directory to realpath
 	//Translate the virtual directory to realpath
 	realFilepath, err := userinfo.VirtualPathToRealPath(targetfile)
 	realFilepath, err := userinfo.VirtualPathToRealPath(targetfile)
-	if fileExists(realFilepath) && IsDir(realFilepath) {
+	if fs.FileExists(realFilepath) && fs.IsDir(realFilepath) {
 		return "", errors.New("Given path is not a file.")
 		return "", errors.New("Given path is not a file.")
 	}
 	}
 	if err != nil {
 	if err != nil {
 		return "", errors.New("Unable to translate the given filepath")
 		return "", errors.New("Unable to translate the given filepath")
 	}
 	}
 
 
-	if !fileExists(realFilepath) {
+	if !fs.FileExists(realFilepath) {
 		//Sometime if url is not URL encoded, this error might be shown as well
 		//Sometime if url is not URL encoded, this error might be shown as well
 
 
 		//Try to use manual segmentation
 		//Try to use manual segmentation
@@ -92,7 +93,7 @@ func media_server_validateSourceFile(w http.ResponseWriter, r *http.Request) (st
 			log.Println("Error when trying to serve file in compatibility mode", err.Error())
 			log.Println("Error when trying to serve file in compatibility mode", err.Error())
 			return "", errors.New("Error when trying to serve file in compatibility mode")
 			return "", errors.New("Error when trying to serve file in compatibility mode")
 		}
 		}
-		if fileExists(possibleRealpath) {
+		if fs.FileExists(possibleRealpath) {
 			realFilepath = possibleRealpath
 			realFilepath = possibleRealpath
 			log.Println("[Media Server] Serving file " + filepath.Base(possibleRealpath) + " in compatibility mode. Do not to use '&' or '+' sign in filename! ")
 			log.Println("[Media Server] Serving file " + filepath.Base(possibleRealpath) + " in compatibility mode. Do not to use '&' or '+' sign in filename! ")
 			return realFilepath, nil
 			return realFilepath, nil
@@ -107,11 +108,11 @@ func media_server_validateSourceFile(w http.ResponseWriter, r *http.Request) (st
 func serveMediaMime(w http.ResponseWriter, r *http.Request) {
 func serveMediaMime(w http.ResponseWriter, r *http.Request) {
 	realFilepath, err := media_server_validateSourceFile(w, r)
 	realFilepath, err := media_server_validateSourceFile(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 	mime := "text/directory"
 	mime := "text/directory"
-	if !IsDir(realFilepath) {
+	if !fs.IsDir(realFilepath) {
 		m, _, err := fs.GetMime(realFilepath)
 		m, _, err := fs.GetMime(realFilepath)
 		if err != nil {
 		if err != nil {
 			mime = ""
 			mime = ""
@@ -119,20 +120,20 @@ func serveMediaMime(w http.ResponseWriter, r *http.Request) {
 		mime = m
 		mime = m
 	}
 	}
 
 
-	sendTextResponse(w, mime)
+	common.SendTextResponse(w, mime)
 }
 }
 
 
 func serverMedia(w http.ResponseWriter, r *http.Request) {
 func serverMedia(w http.ResponseWriter, r *http.Request) {
 	//Serve normal media files
 	//Serve normal media files
 	realFilepath, err := media_server_validateSourceFile(w, r)
 	realFilepath, err := media_server_validateSourceFile(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	//Check if downloadMode
 	//Check if downloadMode
 	downloadMode := false
 	downloadMode := false
-	dw, _ := mv(r, "download", false)
+	dw, _ := common.Mv(r, "download", false)
 	if dw == "true" {
 	if dw == "true" {
 		downloadMode = true
 		downloadMode = true
 	}
 	}

+ 10 - 0
mod/common/common.go

@@ -131,3 +131,13 @@ func ConstructRelativePathFromRequestURL(requestURI string, redirectionLocation
 
 
 	return redirectionLocation
 	return redirectionLocation
 }
 }
+
+//Check if given string in a given slice
+func StringInArray(arr []string, str string) bool {
+	for _, a := range arr {
+		if a == str {
+			return true
+		}
+	}
+	return false
+}

+ 16 - 0
mod/common/conv.go

@@ -0,0 +1,16 @@
+package common
+
+import "strconv"
+
+func StringToInt64(number string) (int64, error) {
+	i, err := strconv.ParseInt(number, 10, 64)
+	if err != nil {
+		return -1, err
+	}
+	return i, nil
+}
+
+func Int64ToString(number int64) string {
+	convedNumber := strconv.FormatInt(number, 10)
+	return convedNumber
+}

+ 86 - 87
mod/disk/sortfile/common.go

@@ -1,15 +1,15 @@
 package sortfile
 package sortfile
 
 
 import (
 import (
-	"os"
-    "log"
+	"bufio"
+	"encoding/base64"
+	"errors"
+	"io/ioutil"
+	"log"
 	"net/http"
 	"net/http"
+	"os"
 	"strconv"
 	"strconv"
 	"strings"
 	"strings"
-	"errors"
-	"encoding/base64"
-	"bufio"
-	"io/ioutil"
 	"time"
 	"time"
 )
 )
 
 
@@ -48,6 +48,7 @@ func sendOK(w http.ResponseWriter) {
 	w.Header().Set("Content-Type", "application/json")
 	w.Header().Set("Content-Type", "application/json")
 	w.Write([]byte("\"OK\""))
 	w.Write([]byte("\"OK\""))
 }
 }
+
 /*
 /*
 	The paramter move function (mv)
 	The paramter move function (mv)
 
 
@@ -87,136 +88,134 @@ func mv(r *http.Request, getParamter string, postMode bool) (string, error) {
 }
 }
 
 
 func stringInSlice(a string, list []string) bool {
 func stringInSlice(a string, list []string) bool {
-    for _, b := range list {
-        if b == a {
-            return true
-        }
-    }
-    return false
+	for _, b := range list {
+		if b == a {
+			return true
+		}
+	}
+	return false
 }
 }
 
 
-
 func fileExists(filename string) bool {
 func fileExists(filename string) bool {
-    _, err := os.Stat(filename)
-    if os.IsNotExist(err) {
-        return false
-    }
-    return true
+	_, err := os.Stat(filename)
+	if os.IsNotExist(err) {
+		return false
+	}
+	return true
 }
 }
 
 
-
-func IsDir(path string) bool{
-	if (fileExists(path) == false){
+func IsDir(path string) bool {
+	if fileExists(path) == false {
 		return false
 		return false
 	}
 	}
 	fi, err := os.Stat(path)
 	fi, err := os.Stat(path)
-    if err != nil {
-        log.Fatal(err)
-        return false
-    }
-    switch mode := fi.Mode(); {
-    case mode.IsDir():
-        return true
-    case mode.IsRegular():
-        return false
+	if err != nil {
+		log.Fatal(err)
+		return false
+	}
+	switch mode := fi.Mode(); {
+	case mode.IsDir():
+		return true
+	case mode.IsRegular():
+		return false
 	}
 	}
 	return false
 	return false
 }
 }
 
 
 func inArray(arr []string, str string) bool {
 func inArray(arr []string, str string) bool {
 	for _, a := range arr {
 	for _, a := range arr {
-	   if a == str {
-		  return true
-	   }
+		if a == str {
+			return true
+		}
 	}
 	}
 	return false
 	return false
- }
+}
 
 
- func timeToString(targetTime time.Time) string{
-	 return targetTime.Format("2006-01-02 15:04:05")
- }
+func timeToString(targetTime time.Time) string {
+	return targetTime.Format("2006-01-02 15:04:05")
+}
 
 
- func IntToString(number int) string{
+func IntToString(number int) string {
 	return strconv.Itoa(number)
 	return strconv.Itoa(number)
- }
+}
 
 
- func StringToInt(number string) (int, error){
+func StringToInt(number string) (int, error) {
 	return strconv.Atoi(number)
 	return strconv.Atoi(number)
- }
+}
 
 
- func StringToInt64(number string) (int64, error){
+func StringToInt64(number string) (int64, error) {
 	i, err := strconv.ParseInt(number, 10, 64)
 	i, err := strconv.ParseInt(number, 10, 64)
 	if err != nil {
 	if err != nil {
 		return -1, err
 		return -1, err
 	}
 	}
 	return i, nil
 	return i, nil
- }
+}
 
 
- func Int64ToString(number int64) string{
-	convedNumber:=strconv.FormatInt(number,10)
+func Int64ToString(number int64) string {
+	convedNumber := strconv.FormatInt(number, 10)
 	return convedNumber
 	return convedNumber
- }
+}
 
 
- func GetUnixTime() int64{
+func GetUnixTime() int64 {
 	return time.Now().Unix()
 	return time.Now().Unix()
- }
+}
 
 
- func LoadImageAsBase64(filepath string) (string, error){
-	if !fileExists(filepath){
+func LoadImageAsBase64(filepath string) (string, error) {
+	if !fileExists(filepath) {
 		return "", errors.New("File not exists")
 		return "", errors.New("File not exists")
 	}
 	}
 	f, _ := os.Open(filepath)
 	f, _ := os.Open(filepath)
-    reader := bufio.NewReader(f)
-    content, _ := ioutil.ReadAll(reader)
+	reader := bufio.NewReader(f)
+	content, _ := ioutil.ReadAll(reader)
 	encoded := base64.StdEncoding.EncodeToString(content)
 	encoded := base64.StdEncoding.EncodeToString(content)
 	return string(encoded), nil
 	return string(encoded), nil
- }
+}
 
 
- func PushToSliceIfNotExist(slice []string, newItem string) []string {
+func PushToSliceIfNotExist(slice []string, newItem string) []string {
 	itemExists := false
 	itemExists := false
-	for _, item := range slice{
-		if item == newItem{
+	for _, item := range slice {
+		if item == newItem {
 			itemExists = true
 			itemExists = true
 		}
 		}
 	}
 	}
 
 
-	if !itemExists{
+	if !itemExists {
 		slice = append(slice, newItem)
 		slice = append(slice, newItem)
 	}
 	}
 
 
 	return slice
 	return slice
- }
+}
 
 
- func RemoveFromSliceIfExists(slice []string, target string) []string {
-	 newSlice := []string{}
-	 for _, item := range slice{
-		 if item != target{
+func RemoveFromSliceIfExists(slice []string, target string) []string {
+	newSlice := []string{}
+	for _, item := range slice {
+		if item != target {
 			newSlice = append(newSlice, item)
 			newSlice = append(newSlice, item)
-		 }
-	 }
+		}
+	}
 
 
-	 return newSlice;
- }
+	return newSlice
+}
 
 
- //Get the IP address of the current authentication user
+//Get the IP address of the current authentication user
 func ReflectUserIP(w http.ResponseWriter, r *http.Request) {
 func ReflectUserIP(w http.ResponseWriter, r *http.Request) {
-    requestPort,_ :=  mv(r, "port", false)
-    showPort := false;
-    if (requestPort == "true"){
-        //Show port as well
-        showPort = true;
-    }
-    IPAddress := r.Header.Get("X-Real-Ip")
-    if IPAddress == "" {
-        IPAddress = r.Header.Get("X-Forwarded-For")
-    }
-    if IPAddress == "" {
-        IPAddress = r.RemoteAddr
-    }
-    if (!showPort){
-        IPAddress = IPAddress[:strings.LastIndex(IPAddress, ":")]
-
-    }
-    w.Write([]byte(IPAddress))
-    return;
-}
+	requestPort, _ := mv(r, "port", false)
+	showPort := false
+	if requestPort == "true" {
+		//Show port as well
+		showPort = true
+	}
+	IPAddress := r.Header.Get("X-Real-Ip")
+	if IPAddress == "" {
+		IPAddress = r.Header.Get("X-Forwarded-For")
+	}
+	if IPAddress == "" {
+		IPAddress = r.RemoteAddr
+	}
+	if !showPort {
+		IPAddress = IPAddress[:strings.LastIndex(IPAddress, ":")]
+
+	}
+	w.Write([]byte(IPAddress))
+	return
+}

+ 16 - 15
module.go

@@ -5,6 +5,7 @@ import (
 	"net/http"
 	"net/http"
 	"os"
 	"os"
 
 
+	"imuslab.com/arozos/mod/common"
 	module "imuslab.com/arozos/mod/modules"
 	module "imuslab.com/arozos/mod/modules"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 )
 )
@@ -39,7 +40,7 @@ func ModuleServiceInit() {
 
 
 	adminRouter.HandleFunc("/system/modules/reload", func(w http.ResponseWriter, r *http.Request) {
 	adminRouter.HandleFunc("/system/modules/reload", func(w http.ResponseWriter, r *http.Request) {
 		moduleHandler.ReloadAllModules(AGIGateway)
 		moduleHandler.ReloadAllModules(AGIGateway)
-		sendOK(w)
+		common.SendOK(w)
 	})
 	})
 
 
 	//Handle module installer. Require admin
 	//Handle module installer. Require admin
@@ -47,16 +48,16 @@ func ModuleServiceInit() {
 		//Check if the user is admin
 		//Check if the user is admin
 		userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 		userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "User not logged in")
+			common.SendErrorResponse(w, "User not logged in")
 			return
 			return
 		}
 		}
 
 
 		//Validate the user is admin
 		//Validate the user is admin
 		if userinfo.IsAdmin() {
 		if userinfo.IsAdmin() {
 			//Get the installation file path
 			//Get the installation file path
-			installerPath, err := mv(r, "path", true)
+			installerPath, err := common.Mv(r, "path", true)
 			if err != nil {
 			if err != nil {
-				sendErrorResponse(w, "Invalid installer path")
+				common.SendErrorResponse(w, "Invalid installer path")
 				return
 				return
 			}
 			}
 
 
@@ -64,7 +65,7 @@ func ModuleServiceInit() {
 			rpath, err := userinfo.VirtualPathToRealPath(installerPath)
 			rpath, err := userinfo.VirtualPathToRealPath(installerPath)
 			if err != nil {
 			if err != nil {
 				log.Println("*Module Installer* Failed to install module: ", err.Error())
 				log.Println("*Module Installer* Failed to install module: ", err.Error())
-				sendErrorResponse(w, "Invalid installer path")
+				common.SendErrorResponse(w, "Invalid installer path")
 				return
 				return
 			}
 			}
 
 
@@ -72,7 +73,7 @@ func ModuleServiceInit() {
 			moduleHandler.InstallViaZip(rpath, AGIGateway)
 			moduleHandler.InstallViaZip(rpath, AGIGateway)
 		} else {
 		} else {
 			//Permission denied
 			//Permission denied
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		}
 		}
 
 
 	})
 	})
@@ -144,44 +145,44 @@ func ModuleInstallerInit() {
 
 
 //Handle module installation request
 //Handle module installation request
 func HandleModuleInstall(w http.ResponseWriter, r *http.Request) {
 func HandleModuleInstall(w http.ResponseWriter, r *http.Request) {
-	opr, _ := mv(r, "opr", true)
+	opr, _ := common.Mv(r, "opr", true)
 
 
 	if opr == "gitinstall" {
 	if opr == "gitinstall" {
 		//Get URL from request
 		//Get URL from request
-		url, _ := mv(r, "url", true)
+		url, _ := common.Mv(r, "url", true)
 		if url == "" {
 		if url == "" {
-			sendErrorResponse(w, "Invalid URL")
+			common.SendErrorResponse(w, "Invalid URL")
 			return
 			return
 		}
 		}
 
 
 		//Install the module using git
 		//Install the module using git
 		err := moduleHandler.InstallModuleViaGit(url, AGIGateway)
 		err := moduleHandler.InstallModuleViaGit(url, AGIGateway)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, err.Error())
+			common.SendErrorResponse(w, err.Error())
 			return
 			return
 		}
 		}
 
 
 		//Reply ok
 		//Reply ok
-		sendOK(w)
+		common.SendOK(w)
 	} else if opr == "zipinstall" {
 	} else if opr == "zipinstall" {
 
 
 	} else if opr == "remove" {
 	} else if opr == "remove" {
 		//Get the module name from list
 		//Get the module name from list
-		module, _ := mv(r, "module", true)
+		module, _ := common.Mv(r, "module", true)
 		if module == "" {
 		if module == "" {
-			sendErrorResponse(w, "Invalid Module Name")
+			common.SendErrorResponse(w, "Invalid Module Name")
 			return
 			return
 		}
 		}
 
 
 		//Remove the module
 		//Remove the module
 		err := moduleHandler.UninstallModule(module)
 		err := moduleHandler.UninstallModule(module)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, err.Error())
+			common.SendErrorResponse(w, err.Error())
 			return
 			return
 		}
 		}
 
 
 		//Reply ok
 		//Reply ok
-		sendOK(w)
+		common.SendOK(w)
 
 
 	} else {
 	} else {
 		//List all the modules
 		//List all the modules

+ 18 - 17
network.forward.go

@@ -6,6 +6,7 @@ import (
 	"net/http"
 	"net/http"
 	"strconv"
 	"strconv"
 
 
+	"imuslab.com/arozos/mod/common"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 )
 )
 
 
@@ -46,7 +47,7 @@ func portForwardInit() {
 			AdminOnly:   false,
 			AdminOnly:   false,
 			UserHandler: userHandler,
 			UserHandler: userHandler,
 			DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 			DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-				sendErrorResponse(w, "Permission Denied")
+				common.SendErrorResponse(w, "Permission Denied")
 			},
 			},
 		})
 		})
 
 
@@ -63,10 +64,10 @@ func portForwardInit() {
 }
 }
 
 
 func portforward_handleForward(w http.ResponseWriter, r *http.Request) {
 func portforward_handleForward(w http.ResponseWriter, r *http.Request) {
-	opr, _ := mv(r, "opr", true)
+	opr, _ := common.Mv(r, "opr", true)
 	if opr == "" {
 	if opr == "" {
 		if UPNP == nil {
 		if UPNP == nil {
-			sendErrorResponse(w, "UPNP is not enabled")
+			common.SendErrorResponse(w, "UPNP is not enabled")
 			return
 			return
 		}
 		}
 		//List the current forward port and names
 		//List the current forward port and names
@@ -101,23 +102,23 @@ func portforward_handleForward(w http.ResponseWriter, r *http.Request) {
 
 
 		//Send the result as json
 		//Send the result as json
 		js, _ := json.Marshal(forwardPorts)
 		js, _ := json.Marshal(forwardPorts)
-		sendJSONResponse(w, string(js))
+		common.SendJSONResponse(w, string(js))
 	} else if opr == "add" {
 	} else if opr == "add" {
-		port, err := mv(r, "port", true)
+		port, err := common.Mv(r, "port", true)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Invalid port number")
+			common.SendErrorResponse(w, "Invalid port number")
 			return
 			return
 		}
 		}
 
 
 		//Convert port to int
 		//Convert port to int
 		portNumberic, err := strconv.Atoi(port)
 		portNumberic, err := strconv.Atoi(port)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Invalid port number")
+			common.SendErrorResponse(w, "Invalid port number")
 			return
 			return
 		}
 		}
 
 
 		//Get the policy name
 		//Get the policy name
-		policyName, err := mv(r, "name", true)
+		policyName, err := common.Mv(r, "name", true)
 		if err != nil {
 		if err != nil {
 			policyName = "Unnamed Forward Policy"
 			policyName = "Unnamed Forward Policy"
 		}
 		}
@@ -129,25 +130,25 @@ func portforward_handleForward(w http.ResponseWriter, r *http.Request) {
 			//Forward the port
 			//Forward the port
 			err := UPNP.ForwardPort(portNumberic, policyName)
 			err := UPNP.ForwardPort(portNumberic, policyName)
 			if err != nil {
 			if err != nil {
-				sendErrorResponse(w, err.Error())
+				common.SendErrorResponse(w, err.Error())
 			} else {
 			} else {
-				sendOK(w)
+				common.SendOK(w)
 			}
 			}
 		} else {
 		} else {
-			sendErrorResponse(w, "UPNP is not enabled")
+			common.SendErrorResponse(w, "UPNP is not enabled")
 			return
 			return
 		}
 		}
 	} else if opr == "remove" {
 	} else if opr == "remove" {
-		port, err := mv(r, "port", true)
+		port, err := common.Mv(r, "port", true)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Invalid port number")
+			common.SendErrorResponse(w, "Invalid port number")
 			return
 			return
 		}
 		}
 
 
 		//Convert port to int
 		//Convert port to int
 		portNumberic, err := strconv.Atoi(port)
 		portNumberic, err := strconv.Atoi(port)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Invalid port number")
+			common.SendErrorResponse(w, "Invalid port number")
 			return
 			return
 		}
 		}
 
 
@@ -160,12 +161,12 @@ func portforward_handleForward(w http.ResponseWriter, r *http.Request) {
 		if UPNP != nil {
 		if UPNP != nil {
 			err := UPNP.ClosePort(portNumberic)
 			err := UPNP.ClosePort(portNumberic)
 			if err != nil {
 			if err != nil {
-				sendErrorResponse(w, err.Error())
+				common.SendErrorResponse(w, err.Error())
 			} else {
 			} else {
-				sendOK(w)
+				common.SendOK(w)
 			}
 			}
 		} else {
 		} else {
-			sendErrorResponse(w, "UPNP is not enabled")
+			common.SendErrorResponse(w, "UPNP is not enabled")
 			return
 			return
 		}
 		}
 	}
 	}

+ 22 - 21
network.ftp.go

@@ -7,6 +7,7 @@ import (
 	"net/http"
 	"net/http"
 	"strconv"
 	"strconv"
 
 
+	"imuslab.com/arozos/mod/common"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 	ftp "imuslab.com/arozos/mod/storage/ftp"
 	ftp "imuslab.com/arozos/mod/storage/ftp"
 )
 )
@@ -72,17 +73,17 @@ func FTPServerInit() {
 	set=mode&passive=true
 	set=mode&passive=true
 */
 */
 func storageHandleFTPPassiveModeSettings(w http.ResponseWriter, r *http.Request) {
 func storageHandleFTPPassiveModeSettings(w http.ResponseWriter, r *http.Request) {
-	set, err := mv(r, "set", true)
+	set, err := common.Mv(r, "set", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid set type")
+		common.SendErrorResponse(w, "Invalid set type")
 		return
 		return
 	}
 	}
 
 
 	if set == "ip" {
 	if set == "ip" {
 		//Updat the public up addr
 		//Updat the public up addr
-		ip, err := mv(r, "ip", true)
+		ip, err := common.Mv(r, "ip", true)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Invalid ip given")
+			common.SendErrorResponse(w, "Invalid ip given")
 			return
 			return
 		}
 		}
 
 
@@ -90,9 +91,9 @@ func storageHandleFTPPassiveModeSettings(w http.ResponseWriter, r *http.Request)
 
 
 	} else if set == "mode" {
 	} else if set == "mode" {
 		//Update the passive mode setting
 		//Update the passive mode setting
-		passive, err := mv(r, "passive", true)
+		passive, err := common.Mv(r, "passive", true)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Invalid passive option (true/false)")
+			common.SendErrorResponse(w, "Invalid passive option (true/false)")
 			return
 			return
 		}
 		}
 
 
@@ -103,7 +104,7 @@ func storageHandleFTPPassiveModeSettings(w http.ResponseWriter, r *http.Request)
 			sysdb.Write("ftp", "passive", false)
 			sysdb.Write("ftp", "passive", false)
 		}
 		}
 	} else {
 	} else {
-		sendErrorResponse(w, "Unknown setting filed")
+		common.SendErrorResponse(w, "Unknown setting filed")
 		return
 		return
 	}
 	}
 
 
@@ -118,12 +119,12 @@ func storageHandleFTPPassiveModeSettings(w http.ResponseWriter, r *http.Request)
 func storageHandleFTPServerStart(w http.ResponseWriter, r *http.Request) {
 func storageHandleFTPServerStart(w http.ResponseWriter, r *http.Request) {
 	err := storageFTPServerStart()
 	err := storageFTPServerStart()
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 	}
 	}
 
 
 	//Remember the FTP server status
 	//Remember the FTP server status
 	sysdb.Write("ftp", "default", true)
 	sysdb.Write("ftp", "default", true)
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 //Stop the FTP server by request
 //Stop the FTP server by request
@@ -133,12 +134,12 @@ func storageHandleFTPServerStop(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 	sysdb.Write("ftp", "default", false)
 	sysdb.Write("ftp", "default", false)
 	log.Println("FTP Server Stopped")
 	log.Println("FTP Server Stopped")
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 //Update UPnP setting on FTP server
 //Update UPnP setting on FTP server
 func storageHandleFTPuPnP(w http.ResponseWriter, r *http.Request) {
 func storageHandleFTPuPnP(w http.ResponseWriter, r *http.Request) {
-	enable, _ := mv(r, "enable", false)
+	enable, _ := common.Mv(r, "enable", false)
 	if enable == "true" {
 	if enable == "true" {
 		log.Println("Enabling UPnP on FTP Server Port")
 		log.Println("Enabling UPnP on FTP Server Port")
 		sysdb.Write("ftp", "upnp", true)
 		sysdb.Write("ftp", "upnp", true)
@@ -152,15 +153,15 @@ func storageHandleFTPuPnP(w http.ResponseWriter, r *http.Request) {
 		storageFTPServerStart()
 		storageFTPServerStart()
 	}
 	}
 
 
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 //Update access permission on FTP server
 //Update access permission on FTP server
 func storageHandleFTPAccessUpdate(w http.ResponseWriter, r *http.Request) {
 func storageHandleFTPAccessUpdate(w http.ResponseWriter, r *http.Request) {
 	//Get groups paramter from post req
 	//Get groups paramter from post req
-	groupString, err := mv(r, "groups", true)
+	groupString, err := common.Mv(r, "groups", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "groups not defined")
+		common.SendErrorResponse(w, "groups not defined")
 		return
 		return
 	}
 	}
 
 
@@ -168,7 +169,7 @@ func storageHandleFTPAccessUpdate(w http.ResponseWriter, r *http.Request) {
 	groups := []string{}
 	groups := []string{}
 	err = json.Unmarshal([]byte(groupString), &groups)
 	err = json.Unmarshal([]byte(groupString), &groups)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Unable to parse groups")
+		common.SendErrorResponse(w, "Unable to parse groups")
 		return
 		return
 	}
 	}
 
 
@@ -176,20 +177,20 @@ func storageHandleFTPAccessUpdate(w http.ResponseWriter, r *http.Request) {
 	//Set the accessable group
 	//Set the accessable group
 	ftp.UpdateAccessableGroups(sysdb, groups)
 	ftp.UpdateAccessableGroups(sysdb, groups)
 
 
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 func storageHandleFTPSetPort(w http.ResponseWriter, r *http.Request) {
 func storageHandleFTPSetPort(w http.ResponseWriter, r *http.Request) {
-	port, err := mv(r, "port", true)
+	port, err := common.Mv(r, "port", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Port not defined")
+		common.SendErrorResponse(w, "Port not defined")
 		return
 		return
 	}
 	}
 
 
 	//Try parse the port into int
 	//Try parse the port into int
 	portInt, err := strconv.Atoi(port)
 	portInt, err := strconv.Atoi(port)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid port number")
+		common.SendErrorResponse(w, "Invalid port number")
 		return
 		return
 	}
 	}
 
 
@@ -199,7 +200,7 @@ func storageHandleFTPSetPort(w http.ResponseWriter, r *http.Request) {
 	//Restart the FTP server
 	//Restart the FTP server
 	storageFTPServerStart()
 	storageFTPServerStart()
 
 
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 func storageHandleFTPServerStatus(w http.ResponseWriter, r *http.Request) {
 func storageHandleFTPServerStatus(w http.ResponseWriter, r *http.Request) {
@@ -280,7 +281,7 @@ func storageHandleFTPServerStatus(w http.ResponseWriter, r *http.Request) {
 		UserGroups:     userGroups,
 		UserGroups:     userGroups,
 		PassiveMode:    forcePassiveMode,
 		PassiveMode:    forcePassiveMode,
 	})
 	})
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 }
 }
 
 
 func storageFTPServerStart() error {
 func storageFTPServerStart() error {

+ 2 - 1
network.go

@@ -5,6 +5,7 @@ import (
 	"net/http"
 	"net/http"
 	"strconv"
 	"strconv"
 
 
+	"imuslab.com/arozos/mod/common"
 	network "imuslab.com/arozos/mod/network"
 	network "imuslab.com/arozos/mod/network"
 	mdns "imuslab.com/arozos/mod/network/mdns"
 	mdns "imuslab.com/arozos/mod/network/mdns"
 	"imuslab.com/arozos/mod/network/netstat"
 	"imuslab.com/arozos/mod/network/netstat"
@@ -29,7 +30,7 @@ func NetworkServiceInit() {
 		AdminOnly:   false,
 		AdminOnly:   false,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 

+ 7 - 6
network.webdav.go

@@ -10,6 +10,7 @@ import (
 	"encoding/json"
 	"encoding/json"
 	"net/http"
 	"net/http"
 
 
+	"imuslab.com/arozos/mod/common"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 	awebdav "imuslab.com/arozos/mod/storage/webdav"
 	awebdav "imuslab.com/arozos/mod/storage/webdav"
 )
 )
@@ -48,7 +49,7 @@ func WebDAVInit() {
 		AdminOnly:   false,
 		AdminOnly:   false,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -60,22 +61,22 @@ func WebDAVInit() {
 		userinfo, _ := userHandler.GetUserInfoFromRequest(w, r)
 		userinfo, _ := userHandler.GetUserInfoFromRequest(w, r)
 		isAdmin := userinfo.IsAdmin()
 		isAdmin := userinfo.IsAdmin()
 
 
-		set, _ := mv(r, "set", false)
+		set, _ := common.Mv(r, "set", false)
 		if set == "" {
 		if set == "" {
 			//Return the current status
 			//Return the current status
 			results := []bool{WebDavHandler.Enabled, isAdmin}
 			results := []bool{WebDavHandler.Enabled, isAdmin}
 			js, _ := json.Marshal(results)
 			js, _ := json.Marshal(results)
-			sendJSONResponse(w, string(js))
+			common.SendJSONResponse(w, string(js))
 		} else if isAdmin && set == "disable" {
 		} else if isAdmin && set == "disable" {
 			WebDavHandler.Enabled = false
 			WebDavHandler.Enabled = false
 			sysdb.Write("webdav", "enabled", false)
 			sysdb.Write("webdav", "enabled", false)
-			sendOK(w)
+			common.SendOK(w)
 		} else if isAdmin && set == "enable" {
 		} else if isAdmin && set == "enable" {
 			WebDavHandler.Enabled = true
 			WebDavHandler.Enabled = true
 			sysdb.Write("webdav", "enabled", true)
 			sysdb.Write("webdav", "enabled", true)
-			sendOK(w)
+			common.SendOK(w)
 		} else {
 		} else {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		}
 		}
 	})
 	})
 
 

+ 2 - 1
notification.go

@@ -5,6 +5,7 @@ import (
 	"strconv"
 	"strconv"
 	"time"
 	"time"
 
 
+	fs "imuslab.com/arozos/mod/filesystem"
 	notification "imuslab.com/arozos/mod/notification"
 	notification "imuslab.com/arozos/mod/notification"
 	"imuslab.com/arozos/mod/notification/agents/smtpn"
 	"imuslab.com/arozos/mod/notification/agents/smtpn"
 )
 )
@@ -32,7 +33,7 @@ func notificationInit() {
 	}
 	}
 
 
 	smtpnConfigPath := "./system/smtp_conf.json"
 	smtpnConfigPath := "./system/smtp_conf.json"
-	if !fileExists(smtpnConfigPath) {
+	if !fs.FileExists(smtpnConfigPath) {
 		//Create an empty one
 		//Create an empty one
 		smtpn.GenerateEmptyConfigFile(smtpnConfigPath)
 		smtpn.GenerateEmptyConfigFile(smtpnConfigPath)
 	}
 	}

+ 3 - 2
permission.go

@@ -5,6 +5,7 @@ import (
 	"log"
 	"log"
 	"net/http"
 	"net/http"
 
 
+	"imuslab.com/arozos/mod/common"
 	permission "imuslab.com/arozos/mod/permission"
 	permission "imuslab.com/arozos/mod/permission"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 )
 )
@@ -27,7 +28,7 @@ func permissionInit() {
 		AdminOnly:   true,
 		AdminOnly:   true,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -36,7 +37,7 @@ func permissionInit() {
 		if authAgent.GetUserCounts() == 0 {
 		if authAgent.GetUserCounts() == 0 {
 			//There is no user within the system. Only allow register of admin account
 			//There is no user within the system. Only allow register of admin account
 			js, _ := json.Marshal([]string{"administrator"})
 			js, _ := json.Marshal([]string{"administrator"})
-			sendJSONResponse(w, string(js))
+			common.SendJSONResponse(w, string(js))
 			//permissionHandler.HandleListGroup(w, r)
 			//permissionHandler.HandleListGroup(w, r)
 		} else {
 		} else {
 			//There are already users in the system. Only allow authorized users
 			//There are already users in the system. Only allow authorized users

+ 14 - 13
quota.go

@@ -9,6 +9,7 @@ import (
 	"sort"
 	"sort"
 	"strings"
 	"strings"
 
 
+	"imuslab.com/arozos/mod/common"
 	fs "imuslab.com/arozos/mod/filesystem"
 	fs "imuslab.com/arozos/mod/filesystem"
 	//user "imuslab.com/arozos/mod/user"
 	//user "imuslab.com/arozos/mod/user"
 )
 )
@@ -46,45 +47,45 @@ func system_disk_quota_updateAllUserQuotaEstimation() {
 func system_disk_quota_setQuota(w http.ResponseWriter, r *http.Request) {
 func system_disk_quota_setQuota(w http.ResponseWriter, r *http.Request) {
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Unknown User")
+		common.SendErrorResponse(w, "Unknown User")
 		return
 		return
 	}
 	}
 
 
 	//Check if admin
 	//Check if admin
 	if !userinfo.IsAdmin() {
 	if !userinfo.IsAdmin() {
-		sendErrorResponse(w, "Permission Denied")
+		common.SendErrorResponse(w, "Permission Denied")
 		return
 		return
 	}
 	}
 
 
-	groupname, err := mv(r, "groupname", true)
+	groupname, err := common.Mv(r, "groupname", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Group name not defned")
+		common.SendErrorResponse(w, "Group name not defned")
 		return
 		return
 	}
 	}
 
 
-	quotaSizeString, err := mv(r, "quota", true)
+	quotaSizeString, err := common.Mv(r, "quota", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Quota not defined")
+		common.SendErrorResponse(w, "Quota not defined")
 		return
 		return
 	}
 	}
 
 
-	quotaSize, err := StringToInt64(quotaSizeString)
+	quotaSize, err := common.StringToInt64(quotaSizeString)
 	if err != nil || quotaSize < 0 {
 	if err != nil || quotaSize < 0 {
-		sendErrorResponse(w, "Invalid quota size given")
+		common.SendErrorResponse(w, "Invalid quota size given")
 		return
 		return
 	}
 	}
 	//Qutasize unit is in MB
 	//Qutasize unit is in MB
 	quotaSize = quotaSize << 20
 	quotaSize = quotaSize << 20
 
 
 	log.Println("Updating "+groupname+" to ", quotaSize, "WIP")
 	log.Println("Updating "+groupname+" to ", quotaSize, "WIP")
-	sendOK(w)
+	common.SendOK(w)
 
 
 }
 }
 
 
 func system_disk_quota_handleQuotaInfo(w http.ResponseWriter, r *http.Request) {
 func system_disk_quota_handleQuotaInfo(w http.ResponseWriter, r *http.Request) {
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Unknown User")
+		common.SendErrorResponse(w, "Unknown User")
 		return
 		return
 	}
 	}
 
 
@@ -101,7 +102,7 @@ func system_disk_quota_handleQuotaInfo(w http.ResponseWriter, r *http.Request) {
 		Total:     userinfo.StorageQuota.TotalStorageQuota,
 		Total:     userinfo.StorageQuota.TotalStorageQuota,
 	})
 	})
 
 
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 
 
 	go func() {
 	go func() {
 		//Update this user's quota estimation in go routine
 		//Update this user's quota estimation in go routine
@@ -113,7 +114,7 @@ func system_disk_quota_handleQuotaInfo(w http.ResponseWriter, r *http.Request) {
 func system_disk_quota_handleFileDistributionView(w http.ResponseWriter, r *http.Request) {
 func system_disk_quota_handleFileDistributionView(w http.ResponseWriter, r *http.Request) {
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Unknown User")
+		common.SendErrorResponse(w, "Unknown User")
 		return
 		return
 	}
 	}
 
 
@@ -157,5 +158,5 @@ func system_disk_quota_handleFileDistributionView(w http.ResponseWriter, r *http
 
 
 	//Return the distrubution using json string
 	//Return the distrubution using json string
 	jsonString, _ := json.Marshal(ss)
 	jsonString, _ := json.Marshal(ss)
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 }
 }

+ 15 - 14
register.go

@@ -6,6 +6,7 @@ import (
 	"net/http"
 	"net/http"
 
 
 	reg "imuslab.com/arozos/mod/auth/register"
 	reg "imuslab.com/arozos/mod/auth/register"
+	"imuslab.com/arozos/mod/common"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 )
 )
 
 
@@ -38,7 +39,7 @@ func RegisterSystemInit() {
 		AdminOnly:   false,
 		AdminOnly:   false,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -61,7 +62,7 @@ func RegisterSystemInit() {
 		AdminOnly:   true,
 		AdminOnly:   true,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -84,14 +85,14 @@ func RegisterSystemInit() {
 func register_handleRegisterCleaning(w http.ResponseWriter, r *http.Request) {
 func register_handleRegisterCleaning(w http.ResponseWriter, r *http.Request) {
 	//Get all user emails from the registerHandler
 	//Get all user emails from the registerHandler
 	registerHandler.CleanRegisters()
 	registerHandler.CleanRegisters()
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 func register_handleEmailListing(w http.ResponseWriter, r *http.Request) {
 func register_handleEmailListing(w http.ResponseWriter, r *http.Request) {
 	//Get all user emails from the registerHandler
 	//Get all user emails from the registerHandler
 	userRegisterInfos := registerHandler.ListAllUserEmails()
 	userRegisterInfos := registerHandler.ListAllUserEmails()
 
 
-	useCSV, _ := mv(r, "csv", false)
+	useCSV, _ := common.Mv(r, "csv", false)
 	if useCSV == "true" {
 	if useCSV == "true" {
 		//Prase as csv
 		//Prase as csv
 		csvString := "Username,Email,Still Registered\n"
 		csvString := "Username,Email,Still Registered\n"
@@ -110,41 +111,41 @@ func register_handleEmailListing(w http.ResponseWriter, r *http.Request) {
 	} else {
 	} else {
 		//Prase as json
 		//Prase as json
 		jsonString, _ := json.Marshal(userRegisterInfos)
 		jsonString, _ := json.Marshal(userRegisterInfos)
-		sendJSONResponse(w, string(jsonString))
+		common.SendJSONResponse(w, string(jsonString))
 	}
 	}
 
 
 }
 }
 
 
 func register_handleSetDefaultGroup(w http.ResponseWriter, r *http.Request) {
 func register_handleSetDefaultGroup(w http.ResponseWriter, r *http.Request) {
-	getDefaultGroup, _ := mv(r, "get", true)
+	getDefaultGroup, _ := common.Mv(r, "get", true)
 	if getDefaultGroup == "true" {
 	if getDefaultGroup == "true" {
 		jsonString, _ := json.Marshal(registerHandler.DefaultUserGroup)
 		jsonString, _ := json.Marshal(registerHandler.DefaultUserGroup)
-		sendJSONResponse(w, string(jsonString))
+		common.SendJSONResponse(w, string(jsonString))
 		return
 		return
 	}
 	}
-	newDefaultGroup, err := mv(r, "defaultGroup", true)
+	newDefaultGroup, err := common.Mv(r, "defaultGroup", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "defaultGroup not defined")
+		common.SendErrorResponse(w, "defaultGroup not defined")
 		return
 		return
 	}
 	}
 	err = registerHandler.SetDefaultUserGroup(newDefaultGroup)
 	err = registerHandler.SetDefaultUserGroup(newDefaultGroup)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 func register_handleGetAllowRegistry(w http.ResponseWriter, r *http.Request) {
 func register_handleGetAllowRegistry(w http.ResponseWriter, r *http.Request) {
 	jsonString, _ := json.Marshal(registerHandler.AllowRegistry)
 	jsonString, _ := json.Marshal(registerHandler.AllowRegistry)
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 }
 }
 
 
 func register_handleToggleRegistry(w http.ResponseWriter, r *http.Request) {
 func register_handleToggleRegistry(w http.ResponseWriter, r *http.Request) {
-	allowReg, err := mv(r, "allow", true)
+	allowReg, err := common.Mv(r, "allow", true)
 	if err != nil {
 	if err != nil {
 		allowReg = "false"
 		allowReg = "false"
 	}
 	}
 	registerHandler.SetAllowRegistry(allowReg == "true")
 	registerHandler.SetAllowRegistry(allowReg == "true")
-	sendOK(w)
+	common.SendOK(w)
 }
 }

+ 2 - 1
scheduler.go

@@ -4,6 +4,7 @@ import (
 	"log"
 	"log"
 	"net/http"
 	"net/http"
 
 
+	"imuslab.com/arozos/mod/common"
 	module "imuslab.com/arozos/mod/modules"
 	module "imuslab.com/arozos/mod/modules"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 	"imuslab.com/arozos/mod/time/nightly"
 	"imuslab.com/arozos/mod/time/nightly"
@@ -47,7 +48,7 @@ func SchedulerInit() {
 		AdminOnly:   false,
 		AdminOnly:   false,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 

+ 2 - 1
security.go

@@ -4,6 +4,7 @@ import (
 	"net/http"
 	"net/http"
 	"time"
 	"time"
 
 
+	"imuslab.com/arozos/mod/common"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 	"imuslab.com/arozos/mod/security/csrf"
 	"imuslab.com/arozos/mod/security/csrf"
 )
 )
@@ -30,7 +31,7 @@ func security_init() {
 		AdminOnly:   false,
 		AdminOnly:   false,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 

+ 2 - 1
setting.advance.go

@@ -4,6 +4,7 @@ import (
 	"net/http"
 	"net/http"
 
 
 	autologin "imuslab.com/arozos/mod/auth/autologin"
 	autologin "imuslab.com/arozos/mod/auth/autologin"
+	"imuslab.com/arozos/mod/common"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 )
 )
 
 
@@ -24,7 +25,7 @@ func AdvanceSettingInit() {
 		AdminOnly:   true,
 		AdminOnly:   true,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 

+ 6 - 5
setting.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"encoding/json"
 	"net/http"
 	"net/http"
 
 
+	"imuslab.com/arozos/mod/common"
 	module "imuslab.com/arozos/mod/modules"
 	module "imuslab.com/arozos/mod/modules"
 )
 )
 
 
@@ -121,12 +122,12 @@ func registerSetting(thismodule settingModule) {
 func system_setting_handleListing(w http.ResponseWriter, r *http.Request) {
 func system_setting_handleListing(w http.ResponseWriter, r *http.Request) {
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 
 
 	allSettingGroups := system_setting_getSettingGroups()
 	allSettingGroups := system_setting_getSettingGroups()
-	listGroup, _ := mv(r, "listGroup", false)
+	listGroup, _ := common.Mv(r, "listGroup", false)
 	if len(listGroup) > 0 {
 	if len(listGroup) > 0 {
 		//List the given group
 		//List the given group
 		var results []settingModule
 		var results []settingModule
@@ -146,18 +147,18 @@ func system_setting_handleListing(w http.ResponseWriter, r *http.Request) {
 
 
 		if len(results) > 0 {
 		if len(results) > 0 {
 			jsonString, _ := json.Marshal(results)
 			jsonString, _ := json.Marshal(results)
-			sendJSONResponse(w, string(jsonString))
+			common.SendJSONResponse(w, string(jsonString))
 			return
 			return
 		} else {
 		} else {
 			//This group not found,
 			//This group not found,
-			sendErrorResponse(w, "Group not found")
+			common.SendErrorResponse(w, "Group not found")
 			return
 			return
 		}
 		}
 
 
 	} else {
 	} else {
 		//List all root groups
 		//List all root groups
 		jsonString, _ := json.Marshal(allSettingGroups)
 		jsonString, _ := json.Marshal(allSettingGroups)
-		sendJSONResponse(w, string(jsonString))
+		common.SendJSONResponse(w, string(jsonString))
 		return
 		return
 	}
 	}
 
 

+ 9 - 8
startup.flags.go

@@ -5,6 +5,7 @@ import (
 	"log"
 	"log"
 	"net/http"
 	"net/http"
 
 
+	"imuslab.com/arozos/mod/common"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 )
 )
 
 
@@ -32,7 +33,7 @@ func StartupFlagsInit() {
 		AdminOnly:   true,
 		AdminOnly:   true,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -49,7 +50,7 @@ func handleBootFlagsFunction(w http.ResponseWriter, r *http.Request) {
 		EnableHomePage    bool
 		EnableHomePage    bool
 		EnableDirListing  bool
 		EnableDirListing  bool
 	}
 	}
-	opr, _ := mv(r, "opr", true)
+	opr, _ := common.Mv(r, "opr", true)
 	if opr == "" {
 	if opr == "" {
 		//List the current boot flag, all units in MB
 		//List the current boot flag, all units in MB
 		js, _ := json.Marshal(bootFlags{
 		js, _ := json.Marshal(bootFlags{
@@ -62,12 +63,12 @@ func handleBootFlagsFunction(w http.ResponseWriter, r *http.Request) {
 			*enable_dir_listing,
 			*enable_dir_listing,
 		})
 		})
 
 
-		sendJSONResponse(w, string(js))
+		common.SendJSONResponse(w, string(js))
 	} else if opr == "set" {
 	} else if opr == "set" {
 		//Set and update the boot flags
 		//Set and update the boot flags
-		newSettings, err := mv(r, "value", true)
+		newSettings, err := common.Mv(r, "value", true)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Invalid new seting value")
+			common.SendErrorResponse(w, "Invalid new seting value")
 			return
 			return
 		}
 		}
 
 
@@ -83,7 +84,7 @@ func handleBootFlagsFunction(w http.ResponseWriter, r *http.Request) {
 		}
 		}
 		err = json.Unmarshal([]byte(newSettings), &newConfig)
 		err = json.Unmarshal([]byte(newSettings), &newConfig)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, err.Error())
+			common.SendErrorResponse(w, err.Error())
 			return
 			return
 		}
 		}
 
 
@@ -97,8 +98,8 @@ func handleBootFlagsFunction(w http.ResponseWriter, r *http.Request) {
 		*allow_homepage = newConfig.EnableHomePage
 		*allow_homepage = newConfig.EnableHomePage
 		*enable_dir_listing = newConfig.EnableDirListing
 		*enable_dir_listing = newConfig.EnableDirListing
 
 
-		sendOK(w)
+		common.SendOK(w)
 	} else {
 	} else {
-		sendErrorResponse(w, "Unknown operation")
+		common.SendErrorResponse(w, "Unknown operation")
 	}
 	}
 }
 }

+ 4 - 3
startup.go

@@ -12,13 +12,14 @@ import (
 
 
 	db "imuslab.com/arozos/mod/database"
 	db "imuslab.com/arozos/mod/database"
 	"imuslab.com/arozos/mod/filesystem"
 	"imuslab.com/arozos/mod/filesystem"
+	fs "imuslab.com/arozos/mod/filesystem"
 )
 )
 
 
 func RunStartup() {
 func RunStartup() {
 	//1. Initiate the main system database
 	//1. Initiate the main system database
 
 
 	//Check if system or web both not exists and web.tar.gz exists. Unzip it for the user
 	//Check if system or web both not exists and web.tar.gz exists. Unzip it for the user
-	if (!fileExists("system/") || !fileExists("web/")) && fileExists("./web.tar.gz") {
+	if (!fs.FileExists("system/") || !fs.FileExists("web/")) && fs.FileExists("./web.tar.gz") {
 		log.Println("Unzipping system critical files from archive")
 		log.Println("Unzipping system critical files from archive")
 		extErr := filesystem.ExtractTarGzipFile("./web.tar.gz", "./")
 		extErr := filesystem.ExtractTarGzipFile("./web.tar.gz", "./")
 		if extErr != nil {
 		if extErr != nil {
@@ -35,12 +36,12 @@ func RunStartup() {
 		}
 		}
 	}
 	}
 
 
-	if !fileExists("system/") {
+	if !fs.FileExists("system/") {
 		fmt.Println("▒▒ ERROR: SYSTEM FOLDER NOT FOUND ▒▒")
 		fmt.Println("▒▒ ERROR: SYSTEM FOLDER NOT FOUND ▒▒")
 		panic("This error occurs because the system folder is missing. Please follow the installation guide and don't just download a binary and run it.")
 		panic("This error occurs because the system folder is missing. Please follow the installation guide and don't just download a binary and run it.")
 	}
 	}
 
 
-	if !fileExists("web/") {
+	if !fs.FileExists("web/") {
 		fmt.Println("▒▒ ERROR: WEB FOLDER NOT FOUND ▒▒")
 		fmt.Println("▒▒ ERROR: WEB FOLDER NOT FOUND ▒▒")
 		panic("This error occurs because the web folder is missing. Please follow the installation guide and don't just download a binary and run it.")
 		panic("This error occurs because the web folder is missing. Please follow the installation guide and don't just download a binary and run it.")
 	}
 	}

+ 2 - 2
storage.go

@@ -25,7 +25,7 @@ var (
 
 
 func StorageInit() {
 func StorageInit() {
 	//Load the default handler for the user storage root
 	//Load the default handler for the user storage root
-	if !fileExists(filepath.Clean(*root_directory) + "/") {
+	if !fs.FileExists(filepath.Clean(*root_directory) + "/") {
 		os.MkdirAll(filepath.Clean(*root_directory)+"/", 0755)
 		os.MkdirAll(filepath.Clean(*root_directory)+"/", 0755)
 	}
 	}
 
 
@@ -148,7 +148,7 @@ func GroupStoragePoolInit() {
 
 
 func LoadStoragePoolForGroup(pg *permission.PermissionGroup) error {
 func LoadStoragePoolForGroup(pg *permission.PermissionGroup) error {
 	expectedConfigPath := "./system/storage/" + pg.Name + ".json"
 	expectedConfigPath := "./system/storage/" + pg.Name + ".json"
-	if fileExists(expectedConfigPath) {
+	if fs.FileExists(expectedConfigPath) {
 		//Read the config file
 		//Read the config file
 		pgStorageConfig, err := ioutil.ReadFile(expectedConfigPath)
 		pgStorageConfig, err := ioutil.ReadFile(expectedConfigPath)
 		if err != nil {
 		if err != nil {

+ 61 - 60
storage.pool.go

@@ -11,6 +11,7 @@ import (
 	"strings"
 	"strings"
 	"time"
 	"time"
 
 
+	"imuslab.com/arozos/mod/common"
 	"imuslab.com/arozos/mod/database"
 	"imuslab.com/arozos/mod/database"
 	"imuslab.com/arozos/mod/permission"
 	"imuslab.com/arozos/mod/permission"
 	"imuslab.com/arozos/mod/storage/bridge"
 	"imuslab.com/arozos/mod/storage/bridge"
@@ -36,7 +37,7 @@ func StoragePoolEditorInit() {
 		AdminOnly:   true,
 		AdminOnly:   true,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -53,17 +54,17 @@ func StoragePoolEditorInit() {
 
 
 //Handle editing of a given File System Handler
 //Handle editing of a given File System Handler
 func HandleFSHEdit(w http.ResponseWriter, r *http.Request) {
 func HandleFSHEdit(w http.ResponseWriter, r *http.Request) {
-	opr, _ := mv(r, "opr", false)
+	opr, _ := common.Mv(r, "opr", false)
 
 
-	uuid, err := mv(r, "uuid", false)
+	uuid, err := common.Mv(r, "uuid", false)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid UUID")
+		common.SendErrorResponse(w, "Invalid UUID")
 		return
 		return
 	}
 	}
 
 
-	group, err := mv(r, "group", false)
+	group, err := common.Mv(r, "group", false)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid group given")
+		common.SendErrorResponse(w, "Invalid group given")
 		return
 		return
 	}
 	}
 
 
@@ -71,7 +72,7 @@ func HandleFSHEdit(w http.ResponseWriter, r *http.Request) {
 		//Load
 		//Load
 		fshOption, err := getFSHConfigFromGroupAndUUID(group, uuid)
 		fshOption, err := getFSHConfigFromGroupAndUUID(group, uuid)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, err.Error())
+			common.SendErrorResponse(w, err.Error())
 			return
 			return
 		}
 		}
 		//Hide the password info
 		//Hide the password info
@@ -80,7 +81,7 @@ func HandleFSHEdit(w http.ResponseWriter, r *http.Request) {
 
 
 		//Return as JSON
 		//Return as JSON
 		js, _ := json.Marshal(fshOption)
 		js, _ := json.Marshal(fshOption)
-		sendJSONResponse(w, string(js))
+		common.SendJSONResponse(w, string(js))
 		return
 		return
 	} else if opr == "set" {
 	} else if opr == "set" {
 		//Set
 		//Set
@@ -98,7 +99,7 @@ func HandleFSHEdit(w http.ResponseWriter, r *http.Request) {
 
 
 	} else {
 	} else {
 		//Unknown
 		//Unknown
-		sendErrorResponse(w, "Unknown opr given")
+		common.SendErrorResponse(w, "Unknown opr given")
 		return
 		return
 	}
 	}
 }
 }
@@ -114,12 +115,12 @@ func getFSHConfigFromGroupAndUUID(group string, uuid string) (*fs.FileSystemOpti
 	}
 	}
 
 
 	//Check if file exists.
 	//Check if file exists.
-	if !fileExists(targerFile) {
+	if !fs.FileExists(targerFile) {
 		log.Println("Config file not found: ", targerFile)
 		log.Println("Config file not found: ", targerFile)
 		return nil, errors.New("Configuration file not found")
 		return nil, errors.New("Configuration file not found")
 	}
 	}
 
 
-	if !fileExists(filepath.Dir(targerFile)) {
+	if !fs.FileExists(filepath.Dir(targerFile)) {
 		os.MkdirAll(filepath.Dir(targerFile), 0775)
 		os.MkdirAll(filepath.Dir(targerFile), 0775)
 	}
 	}
 
 
@@ -157,12 +158,12 @@ func setFSHConfigByGroupAndId(group string, uuid string, options fs.FileSystemOp
 	}
 	}
 
 
 	//Check if file exists.
 	//Check if file exists.
-	if !fileExists(targerFile) {
+	if !fs.FileExists(targerFile) {
 		log.Println("Config file not found: ", targerFile)
 		log.Println("Config file not found: ", targerFile)
 		return errors.New("Configuration file not found")
 		return errors.New("Configuration file not found")
 	}
 	}
 
 
-	if !fileExists(filepath.Dir(targerFile)) {
+	if !fs.FileExists(filepath.Dir(targerFile)) {
 		os.MkdirAll(filepath.Dir(targerFile), 0775)
 		os.MkdirAll(filepath.Dir(targerFile), 0775)
 	}
 	}
 
 
@@ -197,27 +198,27 @@ func setFSHConfigByGroupAndId(group string, uuid string, options fs.FileSystemOp
 
 
 //Handle Storage Pool toggle on-off
 //Handle Storage Pool toggle on-off
 func HandleFSHToggle(w http.ResponseWriter, r *http.Request) {
 func HandleFSHToggle(w http.ResponseWriter, r *http.Request) {
-	fsh, _ := mv(r, "fsh", true)
+	fsh, _ := common.Mv(r, "fsh", true)
 	if fsh == "" {
 	if fsh == "" {
-		sendErrorResponse(w, "Invalid File System Handler ID")
+		common.SendErrorResponse(w, "Invalid File System Handler ID")
 		return
 		return
 	}
 	}
 
 
-	group, _ := mv(r, "group", true)
+	group, _ := common.Mv(r, "group", true)
 	if group == "" {
 	if group == "" {
-		sendErrorResponse(w, "Invalid group ID")
+		common.SendErrorResponse(w, "Invalid group ID")
 		return
 		return
 	}
 	}
 
 
 	//Check if group exists
 	//Check if group exists
 	if group != "system" && !permissionHandler.GroupExists(group) {
 	if group != "system" && !permissionHandler.GroupExists(group) {
-		sendErrorResponse(w, "Group not exists")
+		common.SendErrorResponse(w, "Group not exists")
 		return
 		return
 	}
 	}
 
 
 	//Not allow to modify system reserved fsh
 	//Not allow to modify system reserved fsh
 	if fsh == "user" || fsh == "tmp" {
 	if fsh == "user" || fsh == "tmp" {
-		sendErrorResponse(w, "Cannot toggle system reserved File System Handler")
+		common.SendErrorResponse(w, "Cannot toggle system reserved File System Handler")
 		return
 		return
 	}
 	}
 
 
@@ -241,7 +242,7 @@ func HandleFSHToggle(w http.ResponseWriter, r *http.Request) {
 
 
 	//Target File System Handler not found
 	//Target File System Handler not found
 	if targetFSH == nil {
 	if targetFSH == nil {
-		sendErrorResponse(w, "Target File System Handler not found, given: "+fsh)
+		common.SendErrorResponse(w, "Target File System Handler not found, given: "+fsh)
 		return
 		return
 	}
 	}
 
 
@@ -250,7 +251,7 @@ func HandleFSHToggle(w http.ResponseWriter, r *http.Request) {
 		aofsPath := filepath.ToSlash(filepath.Clean(targetFSH.Path)) + "/aofs.db"
 		aofsPath := filepath.ToSlash(filepath.Clean(targetFSH.Path)) + "/aofs.db"
 		conn, err := database.NewDatabase(aofsPath, false)
 		conn, err := database.NewDatabase(aofsPath, false)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Filesystme database startup failed")
+			common.SendErrorResponse(w, "Filesystme database startup failed")
 			return
 			return
 		}
 		}
 
 
@@ -266,13 +267,13 @@ func HandleFSHToggle(w http.ResponseWriter, r *http.Request) {
 	time.Sleep(1 * time.Second)
 	time.Sleep(1 * time.Second)
 
 
 	//Return ok
 	//Return ok
-	sendOK(w)
+	common.SendOK(w)
 
 
 }
 }
 
 
 //Handle reload of storage pool
 //Handle reload of storage pool
 func HandleStoragePoolReload(w http.ResponseWriter, r *http.Request) {
 func HandleStoragePoolReload(w http.ResponseWriter, r *http.Request) {
-	pool, _ := mv(r, "pool", true)
+	pool, _ := common.Mv(r, "pool", true)
 
 
 	//Basepool super long string just to prevent any typo
 	//Basepool super long string just to prevent any typo
 	if pool == "1eb201a3-d0f6-6630-5e6d-2f40480115c5" {
 	if pool == "1eb201a3-d0f6-6630-5e6d-2f40480115c5" {
@@ -333,7 +334,7 @@ func HandleStoragePoolReload(w http.ResponseWriter, r *http.Request) {
 		} else {
 		} else {
 			//Reload the given storage pool
 			//Reload the given storage pool
 			if !permissionHandler.GroupExists(pool) {
 			if !permissionHandler.GroupExists(pool) {
-				sendErrorResponse(w, "Permission Pool owner not exists")
+				common.SendErrorResponse(w, "Permission Pool owner not exists")
 				return
 				return
 			}
 			}
 
 
@@ -355,38 +356,38 @@ func HandleStoragePoolReload(w http.ResponseWriter, r *http.Request) {
 		}
 		}
 	}
 	}
 
 
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 func HandleStoragePoolRemove(w http.ResponseWriter, r *http.Request) {
 func HandleStoragePoolRemove(w http.ResponseWriter, r *http.Request) {
-	groupname, err := mv(r, "group", true)
+	groupname, err := common.Mv(r, "group", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "group not defined")
+		common.SendErrorResponse(w, "group not defined")
 		return
 		return
 	}
 	}
 
 
-	uuid, err := mv(r, "uuid", true)
+	uuid, err := common.Mv(r, "uuid", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "File system handler UUID not defined")
+		common.SendErrorResponse(w, "File system handler UUID not defined")
 		return
 		return
 	}
 	}
 
 
 	targetConfigFile := "./system/storage.json"
 	targetConfigFile := "./system/storage.json"
 	if groupname == "system" {
 	if groupname == "system" {
 		if uuid == "user" || uuid == "tmp" {
 		if uuid == "user" || uuid == "tmp" {
-			sendErrorResponse(w, "Cannot remove system reserved file system handlers")
+			common.SendErrorResponse(w, "Cannot remove system reserved file system handlers")
 			return
 			return
 		}
 		}
 		//Ok to continue
 		//Ok to continue
 	} else {
 	} else {
 		//Check group exists
 		//Check group exists
 		if !permissionHandler.GroupExists(groupname) {
 		if !permissionHandler.GroupExists(groupname) {
-			sendErrorResponse(w, "Group not exists")
+			common.SendErrorResponse(w, "Group not exists")
 			return
 			return
 		}
 		}
 
 
 		targetConfigFile = "./system/storage/" + groupname + ".json"
 		targetConfigFile = "./system/storage/" + groupname + ".json"
-		if !fileExists(targetConfigFile) {
+		if !fs.FileExists(targetConfigFile) {
 			//No config. Create an empty one
 			//No config. Create an empty one
 			initConfig := []fs.FileSystemOption{}
 			initConfig := []fs.FileSystemOption{}
 			js, _ := json.MarshalIndent(initConfig, "", " ")
 			js, _ := json.MarshalIndent(initConfig, "", " ")
@@ -400,18 +401,18 @@ func HandleStoragePoolRemove(w http.ResponseWriter, r *http.Request) {
 		//Bridged FSH. Remove it from bridge config
 		//Bridged FSH. Remove it from bridge config
 		basePool, err := GetStoragePoolByOwner(groupname)
 		basePool, err := GetStoragePoolByOwner(groupname)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, err.Error())
+			common.SendErrorResponse(w, err.Error())
 			return
 			return
 		}
 		}
 		err = DebridgeFSHandlerFromGroup(uuid, basePool)
 		err = DebridgeFSHandlerFromGroup(uuid, basePool)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, err.Error())
+			common.SendErrorResponse(w, err.Error())
 			return
 			return
 		}
 		}
 
 
 		//Remove it from the config
 		//Remove it from the config
 		bridgeManager.RemoveFromConfig(uuid, groupname)
 		bridgeManager.RemoveFromConfig(uuid, groupname)
-		sendOK(w)
+		common.SendOK(w)
 		return
 		return
 	} else {
 	} else {
 		//Remove it from the json file
 		//Remove it from the json file
@@ -420,7 +421,7 @@ func HandleStoragePoolRemove(w http.ResponseWriter, r *http.Request) {
 		originalConfigFile, _ := ioutil.ReadFile(targetConfigFile)
 		originalConfigFile, _ := ioutil.ReadFile(targetConfigFile)
 		err = json.Unmarshal(originalConfigFile, &oldConfigs)
 		err = json.Unmarshal(originalConfigFile, &oldConfigs)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Failed to parse original config file")
+			common.SendErrorResponse(w, "Failed to parse original config file")
 			return
 			return
 		}
 		}
 
 
@@ -442,7 +443,7 @@ func HandleStoragePoolRemove(w http.ResponseWriter, r *http.Request) {
 		}
 		}
 	}
 	}
 
 
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 //Constract a fsoption from form
 //Constract a fsoption from form
@@ -510,7 +511,7 @@ func HandleStorageNewFsHandler(w http.ResponseWriter, r *http.Request) {
 
 
 	//If file exists, merge it to
 	//If file exists, merge it to
 	oldConfigs := []fs.FileSystemOption{}
 	oldConfigs := []fs.FileSystemOption{}
-	if fileExists(configFile) {
+	if fs.FileExists(configFile) {
 		originalConfigFile, _ := ioutil.ReadFile(configFile)
 		originalConfigFile, _ := ioutil.ReadFile(configFile)
 		err := json.Unmarshal(originalConfigFile, &oldConfigs)
 		err := json.Unmarshal(originalConfigFile, &oldConfigs)
 		if err != nil {
 		if err != nil {
@@ -539,7 +540,7 @@ func HandleStorageNewFsHandler(w http.ResponseWriter, r *http.Request) {
 }
 }
 
 
 func HandleListStoragePoolsConfig(w http.ResponseWriter, r *http.Request) {
 func HandleListStoragePoolsConfig(w http.ResponseWriter, r *http.Request) {
-	target, _ := mv(r, "target", false)
+	target, _ := common.Mv(r, "target", false)
 	if target == "" {
 	if target == "" {
 		target = "system"
 		target = "system"
 	}
 	}
@@ -552,27 +553,27 @@ func HandleListStoragePoolsConfig(w http.ResponseWriter, r *http.Request) {
 		targetFile = "./system/storage/" + target + ".json"
 		targetFile = "./system/storage/" + target + ".json"
 	}
 	}
 
 
-	if !fileExists(targetFile) {
+	if !fs.FileExists(targetFile) {
 		//Assume no storage.
 		//Assume no storage.
 		nofsh := []*fs.FileSystemOption{}
 		nofsh := []*fs.FileSystemOption{}
 		js, _ := json.Marshal(nofsh)
 		js, _ := json.Marshal(nofsh)
-		sendJSONResponse(w, string(js))
+		common.SendJSONResponse(w, string(js))
 		return
 		return
 	}
 	}
 
 
 	//Read and serve it
 	//Read and serve it
 	configContent, err := ioutil.ReadFile(targetFile)
 	configContent, err := ioutil.ReadFile(targetFile)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	} else {
 	} else {
-		sendJSONResponse(w, string(configContent))
+		common.SendJSONResponse(w, string(configContent))
 	}
 	}
 }
 }
 
 
 //Return all storage pool mounted to the system, aka base pool + pg pools
 //Return all storage pool mounted to the system, aka base pool + pg pools
 func HandleListStoragePools(w http.ResponseWriter, r *http.Request) {
 func HandleListStoragePools(w http.ResponseWriter, r *http.Request) {
-	filter, _ := mv(r, "filter", false)
+	filter, _ := common.Mv(r, "filter", false)
 
 
 	storagePools := []*storage.StoragePool{}
 	storagePools := []*storage.StoragePool{}
 
 
@@ -597,15 +598,15 @@ func HandleListStoragePools(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 
 
 	js, _ := json.Marshal(storagePools)
 	js, _ := json.Marshal(storagePools)
-	sendJSONResponse(w, string(js))
+	common.SendJSONResponse(w, string(js))
 }
 }
 
 
 //Handler for bridging two FSH, require admin permission
 //Handler for bridging two FSH, require admin permission
 func HandleFSHBridging(w http.ResponseWriter, r *http.Request) {
 func HandleFSHBridging(w http.ResponseWriter, r *http.Request) {
 	//Get the target pool and fsh to bridge
 	//Get the target pool and fsh to bridge
-	basePool, err := mv(r, "base", true)
+	basePool, err := common.Mv(r, "base", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid base pool")
+		common.SendErrorResponse(w, "Invalid base pool")
 		return
 		return
 	}
 	}
 
 
@@ -613,25 +614,25 @@ func HandleFSHBridging(w http.ResponseWriter, r *http.Request) {
 	basePoolObject, err := GetStoragePoolByOwner(basePool)
 	basePoolObject, err := GetStoragePoolByOwner(basePool)
 	if err != nil {
 	if err != nil {
 		log.Println("Bridge FSH failed: ", err.Error())
 		log.Println("Bridge FSH failed: ", err.Error())
-		sendErrorResponse(w, "Storage pool not found")
+		common.SendErrorResponse(w, "Storage pool not found")
 		return
 		return
 	}
 	}
 
 
-	targetFSH, err := mv(r, "fsh", true)
+	targetFSH, err := common.Mv(r, "fsh", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid fsh given")
+		common.SendErrorResponse(w, "Invalid fsh given")
 		return
 		return
 	}
 	}
 
 
 	fsh, err := GetFsHandlerByUUID(targetFSH)
 	fsh, err := GetFsHandlerByUUID(targetFSH)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Given FSH UUID does not exists")
+		common.SendErrorResponse(w, "Given FSH UUID does not exists")
 		return
 		return
 	}
 	}
 
 
 	err = BridgeFSHandlerToGroup(fsh, basePoolObject)
 	err = BridgeFSHandlerToGroup(fsh, basePoolObject)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
@@ -643,31 +644,31 @@ func HandleFSHBridging(w http.ResponseWriter, r *http.Request) {
 	//Write changes to file
 	//Write changes to file
 	err = bridgeManager.AppendToConfig(&bridgeConfig)
 	err = bridgeManager.AppendToConfig(&bridgeConfig)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 func HandleFSHBridgeCheck(w http.ResponseWriter, r *http.Request) {
 func HandleFSHBridgeCheck(w http.ResponseWriter, r *http.Request) {
-	basePool, err := mv(r, "base", true)
+	basePool, err := common.Mv(r, "base", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid base pool")
+		common.SendErrorResponse(w, "Invalid base pool")
 		return
 		return
 	}
 	}
 
 
-	fsh, err := mv(r, "fsh", true)
+	fsh, err := common.Mv(r, "fsh", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid fsh UUID")
+		common.SendErrorResponse(w, "Invalid fsh UUID")
 		return
 		return
 	}
 	}
 
 
 	isBridged, err := bridgeManager.IsBridgedFSH(fsh, basePool)
 	isBridged, err := bridgeManager.IsBridgedFSH(fsh, basePool)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	js, _ := json.Marshal(isBridged)
 	js, _ := json.Marshal(isBridged)
-	sendJSONResponse(w, string(js))
+	common.SendJSONResponse(w, string(js))
 }
 }

+ 4 - 2
subservice.go

@@ -5,6 +5,8 @@ import (
 	"os"
 	"os"
 	"path/filepath"
 	"path/filepath"
 
 
+	"imuslab.com/arozos/mod/common"
+	fs "imuslab.com/arozos/mod/filesystem"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 	subservice "imuslab.com/arozos/mod/subservice"
 	subservice "imuslab.com/arozos/mod/subservice"
 )
 )
@@ -50,7 +52,7 @@ func SubserviceInit() {
 		AdminOnly:   false,
 		AdminOnly:   false,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -65,7 +67,7 @@ func SubserviceInit() {
 	//Scan and load all subservice modules
 	//Scan and load all subservice modules
 	subservices, _ := filepath.Glob("./subservice/*")
 	subservices, _ := filepath.Glob("./subservice/*")
 	for _, servicePath := range subservices {
 	for _, servicePath := range subservices {
-		if IsDir(servicePath) && !fileExists(servicePath+"/.disabled") {
+		if fs.IsDir(servicePath) && !fs.FileExists(servicePath+"/.disabled") {
 			//Only enable module with no suspended config file
 			//Only enable module with no suspended config file
 			ssRouter.Launch(servicePath, true)
 			ssRouter.Launch(servicePath, true)
 		}
 		}

+ 9 - 7
system.go

@@ -9,6 +9,8 @@ import (
 	"strings"
 	"strings"
 
 
 	uuid "github.com/satori/go.uuid"
 	uuid "github.com/satori/go.uuid"
+	"imuslab.com/arozos/mod/common"
+	fs "imuslab.com/arozos/mod/filesystem"
 )
 )
 
 
 /*
 /*
@@ -61,7 +63,7 @@ func SystemIDInit() {
 	})
 	})
 
 
 	//Register vendor information
 	//Register vendor information
-	if fileExists("web/SystemAO/vendor/index.html") {
+	if fs.FileExists("web/SystemAO/vendor/index.html") {
 		registerSetting(settingModule{
 		registerSetting(settingModule{
 			Name:     "Vendor",
 			Name:     "Vendor",
 			Desc:     "Vendor Notes",
 			Desc:     "Vendor Notes",
@@ -90,11 +92,11 @@ func systemIdHandlePing(w http.ResponseWriter, r *http.Request) {
 	}{
 	}{
 		"OK",
 		"OK",
 	})
 	})
-	sendJSONResponse(w, string(js))
+	common.SendJSONResponse(w, string(js))
 }
 }
 
 
 func systemIdGenerateSystemUUID() {
 func systemIdGenerateSystemUUID() {
-	if !fileExists("./system/dev.uuid") {
+	if !fs.FileExists("./system/dev.uuid") {
 		//UUID not exist. Create one
 		//UUID not exist. Create one
 		thisuuid := uuid.NewV4().String()
 		thisuuid := uuid.NewV4().String()
 		if *system_uuid != "" {
 		if *system_uuid != "" {
@@ -136,13 +138,13 @@ func systemHandleListLicense(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 
 
 	js, _ := json.Marshal(results)
 	js, _ := json.Marshal(results)
-	sendJSONResponse(w, string(js))
+	common.SendJSONResponse(w, string(js))
 }
 }
 
 
 func systemIdHandleRequest(w http.ResponseWriter, r *http.Request) {
 func systemIdHandleRequest(w http.ResponseWriter, r *http.Request) {
 	//Check if user has logged in
 	//Check if user has logged in
 	if authAgent.CheckAuth(r) == false {
 	if authAgent.CheckAuth(r) == false {
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 
 
@@ -170,7 +172,7 @@ func systemIdHandleRequest(w http.ResponseWriter, r *http.Request) {
 		VendorIcon: iconVendor,
 		VendorIcon: iconVendor,
 	})
 	})
 
 
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 }
 }
 
 
 func systemIdResponseBetaScan(w http.ResponseWriter, r *http.Request) {
 func systemIdResponseBetaScan(w http.ResponseWriter, r *http.Request) {
@@ -207,5 +209,5 @@ func systemIdGetDriveStates(w http.ResponseWriter, r *http.Request) {
 		"-1B/-1B",
 		"-1B/-1B",
 	})
 	})
 	jsonString, _ := json.Marshal(results)
 	jsonString, _ := json.Marshal(results)
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 }
 }

+ 5 - 5
system.info.go

@@ -25,7 +25,7 @@ func SystemInfoInit() {
 		AdminOnly:   false,
 		AdminOnly:   false,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -34,7 +34,7 @@ func SystemInfoInit() {
 		AdminOnly:   true,
 		AdminOnly:   true,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -134,7 +134,7 @@ func SystemInfoInit() {
 			adminRouter.HandleFunc("/system/update/restart", func(w http.ResponseWriter, r *http.Request) {
 			adminRouter.HandleFunc("/system/update/restart", func(w http.ResponseWriter, r *http.Request) {
 				launcherVersion, err := updates.GetLauncherVersion()
 				launcherVersion, err := updates.GetLauncherVersion()
 				if err != nil {
 				if err != nil {
-					sendErrorResponse(w, err.Error())
+					common.SendErrorResponse(w, err.Error())
 					return
 					return
 				}
 				}
 				execute, _ := common.Mv(r, "exec", true)
 				execute, _ := common.Mv(r, "exec", true)
@@ -170,7 +170,7 @@ func InfoHandleGetRuntimeInfo(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 
 
 	js, _ := json.Marshal(runtimeInfo)
 	js, _ := json.Marshal(runtimeInfo)
-	sendJSONResponse(w, string(js))
+	common.SendJSONResponse(w, string(js))
 }
 }
 
 
 func InfoHandleTaskInfo(w http.ResponseWriter, r *http.Request) {
 func InfoHandleTaskInfo(w http.ResponseWriter, r *http.Request) {
@@ -191,5 +191,5 @@ func InfoHandleTaskInfo(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 
 
 	js, _ := json.Marshal(info)
 	js, _ := json.Marshal(info)
-	sendJSONResponse(w, string(js))
+	common.SendJSONResponse(w, string(js))
 }
 }

+ 20 - 20
system.resetpw.go

@@ -22,52 +22,52 @@ func system_resetpw_init() {
 
 
 //Validate if the ysername and rkey is valid
 //Validate if the ysername and rkey is valid
 func system_resetpw_validateResetKeyHandler(w http.ResponseWriter, r *http.Request) {
 func system_resetpw_validateResetKeyHandler(w http.ResponseWriter, r *http.Request) {
-	username, err := mv(r, "username", true)
+	username, err := common.Mv(r, "username", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid username or key")
+		common.SendErrorResponse(w, "Invalid username or key")
 		return
 		return
 	}
 	}
-	rkey, err := mv(r, "rkey", true)
+	rkey, err := common.Mv(r, "rkey", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid username or key")
+		common.SendErrorResponse(w, "Invalid username or key")
 		return
 		return
 	}
 	}
 
 
 	if username == "" || rkey == "" {
 	if username == "" || rkey == "" {
-		sendErrorResponse(w, "Invalid username or rkey")
+		common.SendErrorResponse(w, "Invalid username or rkey")
 		return
 		return
 	}
 	}
 
 
 	//Check if the pair is valid
 	//Check if the pair is valid
 	err = system_resetpw_validateResetKey(username, rkey)
 	err = system_resetpw_validateResetKey(username, rkey)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
-	sendOK(w)
+	common.SendOK(w)
 
 
 }
 }
 
 
 func system_resetpw_confirmReset(w http.ResponseWriter, r *http.Request) {
 func system_resetpw_confirmReset(w http.ResponseWriter, r *http.Request) {
-	username, _ := mv(r, "username", true)
-	rkey, _ := mv(r, "rkey", true)
-	newpw, _ := mv(r, "pw", true)
+	username, _ := common.Mv(r, "username", true)
+	rkey, _ := common.Mv(r, "rkey", true)
+	newpw, _ := common.Mv(r, "pw", true)
 	if username == "" || rkey == "" || newpw == "" {
 	if username == "" || rkey == "" || newpw == "" {
-		sendErrorResponse(w, "Internal Server Error")
+		common.SendErrorResponse(w, "Internal Server Error")
 		return
 		return
 	}
 	}
 
 
 	//Check user exists
 	//Check user exists
 	if !authAgent.UserExists(username) {
 	if !authAgent.UserExists(username) {
-		sendErrorResponse(w, "Username not exists")
+		common.SendErrorResponse(w, "Username not exists")
 		return
 		return
 	}
 	}
 
 
 	//Validate rkey
 	//Validate rkey
 	err := system_resetpw_validateResetKey(username, rkey)
 	err := system_resetpw_validateResetKey(username, rkey)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
@@ -75,11 +75,11 @@ func system_resetpw_confirmReset(w http.ResponseWriter, r *http.Request) {
 	newHashedPassword := auth.Hash(newpw)
 	newHashedPassword := auth.Hash(newpw)
 	err = sysdb.Write("auth", "passhash/"+username, newHashedPassword)
 	err = sysdb.Write("auth", "passhash/"+username, newHashedPassword)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
-	sendOK(w)
+	common.SendOK(w)
 
 
 }
 }
 
 
@@ -102,13 +102,13 @@ func system_resetpw_validateResetKey(username string, key string) error {
 
 
 func system_resetpw_handlePasswordReset(w http.ResponseWriter, r *http.Request) {
 func system_resetpw_handlePasswordReset(w http.ResponseWriter, r *http.Request) {
 	//Check if the user click on this link with reset password key string. If not, ask the user to input one
 	//Check if the user click on this link with reset password key string. If not, ask the user to input one
-	acc, err := mv(r, "acc", false)
+	acc, err := common.Mv(r, "acc", false)
 	if err != nil || acc == "" {
 	if err != nil || acc == "" {
 		system_resetpw_serveIdEnterInterface(w, r)
 		system_resetpw_serveIdEnterInterface(w, r)
 		return
 		return
 	}
 	}
 
 
-	resetkey, err := mv(r, "rkey", false)
+	resetkey, err := common.Mv(r, "rkey", false)
 	if err != nil || resetkey == "" {
 	if err != nil || resetkey == "" {
 		system_resetpw_serveIdEnterInterface(w, r)
 		system_resetpw_serveIdEnterInterface(w, r)
 		return
 		return
@@ -117,12 +117,12 @@ func system_resetpw_handlePasswordReset(w http.ResponseWriter, r *http.Request)
 	//Check if the code is valid
 	//Check if the code is valid
 	err = system_resetpw_validateResetKey(acc, resetkey)
 	err = system_resetpw_validateResetKey(acc, resetkey)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Invalid username or resetKey")
+		common.SendErrorResponse(w, "Invalid username or resetKey")
 		return
 		return
 	}
 	}
 
 
 	//OK. Create the New Password Entering UI
 	//OK. Create the New Password Entering UI
-	imageBase64, _ := LoadImageAsBase64("./web/" + iconVendor)
+	imageBase64, _ := common.LoadImageAsBase64("./web/" + iconVendor)
 	template, err := common.Templateload("system/reset/resetPasswordTemplate.html", map[string]interface{}{
 	template, err := common.Templateload("system/reset/resetPasswordTemplate.html", map[string]interface{}{
 		"vendor_logo": imageBase64,
 		"vendor_logo": imageBase64,
 		"host_name":   *host_name,
 		"host_name":   *host_name,
@@ -138,7 +138,7 @@ func system_resetpw_handlePasswordReset(w http.ResponseWriter, r *http.Request)
 
 
 func system_resetpw_serveIdEnterInterface(w http.ResponseWriter, r *http.Request) {
 func system_resetpw_serveIdEnterInterface(w http.ResponseWriter, r *http.Request) {
 	//Reset Key or Username not found, Serve entering interface
 	//Reset Key or Username not found, Serve entering interface
-	imageBase64, _ := LoadImageAsBase64("./web/" + iconVendor)
+	imageBase64, _ := common.LoadImageAsBase64("./web/" + iconVendor)
 	template, err := common.Templateload("system/reset/resetCodeTemplate.html", map[string]interface{}{
 	template, err := common.Templateload("system/reset/resetCodeTemplate.html", map[string]interface{}{
 		"vendor_logo": imageBase64,
 		"vendor_logo": imageBase64,
 		"host_name":   *host_name,
 		"host_name":   *host_name,

+ 51 - 50
user.go

@@ -16,6 +16,7 @@ import (
 	uuid "github.com/satori/go.uuid"
 	uuid "github.com/satori/go.uuid"
 
 
 	auth "imuslab.com/arozos/mod/auth"
 	auth "imuslab.com/arozos/mod/auth"
+	"imuslab.com/arozos/mod/common"
 	module "imuslab.com/arozos/mod/modules"
 	module "imuslab.com/arozos/mod/modules"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 	user "imuslab.com/arozos/mod/user"
 	user "imuslab.com/arozos/mod/user"
@@ -35,7 +36,7 @@ func UserSystemInit() {
 			AdminOnly:   false,
 			AdminOnly:   false,
 			UserHandler: userHandler,
 			UserHandler: userHandler,
 			DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 			DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-				sendErrorResponse(w, "Permission Denied")
+				common.SendErrorResponse(w, "Permission Denied")
 			},
 			},
 		})
 		})
 	*/
 	*/
@@ -78,7 +79,7 @@ func UserSystemInit() {
 		AdminOnly:   true,
 		AdminOnly:   true,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -90,33 +91,33 @@ func UserSystemInit() {
 
 
 //Remove a user from the system
 //Remove a user from the system
 func user_handleUserRemove(w http.ResponseWriter, r *http.Request) {
 func user_handleUserRemove(w http.ResponseWriter, r *http.Request) {
-	username, err := mv(r, "username", true)
+	username, err := common.Mv(r, "username", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Username not defined")
+		common.SendErrorResponse(w, "Username not defined")
 		return
 		return
 	}
 	}
 
 
 	if !authAgent.UserExists(username) {
 	if !authAgent.UserExists(username) {
-		sendErrorResponse(w, "User not exists")
+		common.SendErrorResponse(w, "User not exists")
 		return
 		return
 	}
 	}
 
 
 	userinfo, err := userHandler.GetUserInfoFromUsername(username)
 	userinfo, err := userHandler.GetUserInfoFromUsername(username)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	currentUserinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	currentUserinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
 		//This user has not logged in
 		//This user has not logged in
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 
 
 	if currentUserinfo.Username == userinfo.Username {
 	if currentUserinfo.Username == userinfo.Username {
 		//This user has not logged in
 		//This user has not logged in
-		sendErrorResponse(w, "You can't remove yourself")
+		common.SendErrorResponse(w, "You can't remove yourself")
 		return
 		return
 	}
 	}
 
 
@@ -125,27 +126,27 @@ func user_handleUserRemove(w http.ResponseWriter, r *http.Request) {
 
 
 	//Clearn Up FileSystem preferences
 	//Clearn Up FileSystem preferences
 	system_fs_removeUserPreferences(username)
 	system_fs_removeUserPreferences(username)
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 func user_handleUserEdit(w http.ResponseWriter, r *http.Request) {
 func user_handleUserEdit(w http.ResponseWriter, r *http.Request) {
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
 		//This user has not logged in
 		//This user has not logged in
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 
 
 	if userinfo.IsAdmin() == false {
 	if userinfo.IsAdmin() == false {
 		//Require admin access
 		//Require admin access
-		sendErrorResponse(w, "Permission Denied")
+		common.SendErrorResponse(w, "Permission Denied")
 		return
 		return
 	}
 	}
 
 
-	opr, _ := mv(r, "opr", true)
-	username, _ := mv(r, "username", true)
+	opr, _ := common.Mv(r, "opr", true)
+	username, _ := common.Mv(r, "username", true)
 	if !authAgent.UserExists(username) {
 	if !authAgent.UserExists(username) {
-		sendErrorResponse(w, "User not exists")
+		common.SendErrorResponse(w, "User not exists")
 		return
 		return
 	}
 	}
 
 
@@ -160,7 +161,7 @@ func user_handleUserEdit(w http.ResponseWriter, r *http.Request) {
 		iconData := getUserIcon(username)
 		iconData := getUserIcon(username)
 		userGroup, err := permissionHandler.GetUsersPermissionGroup(username)
 		userGroup, err := permissionHandler.GetUsersPermissionGroup(username)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Unable to get user group")
+			common.SendErrorResponse(w, "Unable to get user group")
 			return
 			return
 		}
 		}
 
 
@@ -180,27 +181,27 @@ func user_handleUserEdit(w http.ResponseWriter, r *http.Request) {
 			Quota:     userinfo.StorageQuota.GetUserStorageQuota(),
 			Quota:     userinfo.StorageQuota.GetUserStorageQuota(),
 		})
 		})
 
 
-		sendJSONResponse(w, string(jsonString))
+		common.SendJSONResponse(w, string(jsonString))
 	} else if opr == "updateUserGroup" {
 	} else if opr == "updateUserGroup" {
 		//Update the target user's group
 		//Update the target user's group
-		newgroup, err := mv(r, "newgroup", true)
+		newgroup, err := common.Mv(r, "newgroup", true)
 		if err != nil {
 		if err != nil {
 			log.Println(err.Error())
 			log.Println(err.Error())
-			sendErrorResponse(w, "New Group not defined")
+			common.SendErrorResponse(w, "New Group not defined")
 			return
 			return
 		}
 		}
 
 
-		newQuota, err := mv(r, "quota", true)
+		newQuota, err := common.Mv(r, "quota", true)
 		if err != nil {
 		if err != nil {
 			log.Println(err.Error())
 			log.Println(err.Error())
-			sendErrorResponse(w, "Quota not defined")
+			common.SendErrorResponse(w, "Quota not defined")
 			return
 			return
 		}
 		}
 
 
 		quotaInt, err := strconv.Atoi(newQuota)
 		quotaInt, err := strconv.Atoi(newQuota)
 		if err != nil {
 		if err != nil {
 			log.Println(err.Error())
 			log.Println(err.Error())
-			sendErrorResponse(w, "Invalid Quota Value")
+			common.SendErrorResponse(w, "Invalid Quota Value")
 			return
 			return
 		}
 		}
 
 
@@ -208,19 +209,19 @@ func user_handleUserEdit(w http.ResponseWriter, r *http.Request) {
 		err = json.Unmarshal([]byte(newgroup), &newGroupKeys)
 		err = json.Unmarshal([]byte(newgroup), &newGroupKeys)
 		if err != nil {
 		if err != nil {
 			log.Println(err.Error())
 			log.Println(err.Error())
-			sendErrorResponse(w, "Unable to parse new groups")
+			common.SendErrorResponse(w, "Unable to parse new groups")
 			return
 			return
 		}
 		}
 
 
 		if len(newGroupKeys) == 0 {
 		if len(newGroupKeys) == 0 {
-			sendErrorResponse(w, "User must be in at least one user permission group")
+			common.SendErrorResponse(w, "User must be in at least one user permission group")
 			return
 			return
 		}
 		}
 
 
 		//Check if each group exists
 		//Check if each group exists
 		for _, thisgp := range newGroupKeys {
 		for _, thisgp := range newGroupKeys {
 			if !permissionHandler.GroupExists(thisgp) {
 			if !permissionHandler.GroupExists(thisgp) {
-				sendErrorResponse(w, "Group not exists, given: "+thisgp)
+				common.SendErrorResponse(w, "Group not exists, given: "+thisgp)
 				return
 				return
 			}
 			}
 		}
 		}
@@ -228,7 +229,7 @@ func user_handleUserEdit(w http.ResponseWriter, r *http.Request) {
 		//OK to proceed
 		//OK to proceed
 		userinfo, err := userHandler.GetUserInfoFromUsername(username)
 		userinfo, err := userHandler.GetUserInfoFromUsername(username)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, err.Error())
+			common.SendErrorResponse(w, err.Error())
 			return
 			return
 		}
 		}
 
 
@@ -236,12 +237,12 @@ func user_handleUserEdit(w http.ResponseWriter, r *http.Request) {
 		allAdministratorGroupUsers, err := userHandler.GetUsersInPermissionGroup("administrator")
 		allAdministratorGroupUsers, err := userHandler.GetUsersInPermissionGroup("administrator")
 		if err == nil {
 		if err == nil {
 			//Skip checking if error
 			//Skip checking if error
-			if len(allAdministratorGroupUsers) == 1 && userinfo.UserIsInOneOfTheGroupOf([]string{"administrator"}) && !stringInSlice("administrator", newGroupKeys) {
+			if len(allAdministratorGroupUsers) == 1 && userinfo.UserIsInOneOfTheGroupOf([]string{"administrator"}) && !common.StringInArray(newGroupKeys, "administrator") {
 				//Current administrator group only contain 1 user
 				//Current administrator group only contain 1 user
 				//This user is in the administrator group
 				//This user is in the administrator group
 				//The user want to unset himself from administrator group
 				//The user want to unset himself from administrator group
 				//Reject the operation as this will cause system lockdown
 				//Reject the operation as this will cause system lockdown
-				sendErrorResponse(w, "You are the only administrator. You cannot remove yourself from the administrator group.")
+				common.SendErrorResponse(w, "You are the only administrator. You cannot remove yourself from the administrator group.")
 				return
 				return
 			}
 			}
 		}
 		}
@@ -252,14 +253,14 @@ func user_handleUserEdit(w http.ResponseWriter, r *http.Request) {
 		//Set the user's permission to these groups
 		//Set the user's permission to these groups
 		userinfo.SetUserPermissionGroup(newPermissioGroups)
 		userinfo.SetUserPermissionGroup(newPermissioGroups)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, err.Error())
+			common.SendErrorResponse(w, err.Error())
 			return
 			return
 		}
 		}
 
 
 		//Write to quota handler
 		//Write to quota handler
 		userinfo.StorageQuota.SetUserStorageQuota(int64(quotaInt))
 		userinfo.StorageQuota.SetUserStorageQuota(int64(quotaInt))
 
 
-		sendOK(w)
+		common.SendOK(w)
 	} else if opr == "resetPassword" {
 	} else if opr == "resetPassword" {
 		//Reset password for this user
 		//Reset password for this user
 		//Generate a random password for this user
 		//Generate a random password for this user
@@ -267,14 +268,14 @@ func user_handleUserEdit(w http.ResponseWriter, r *http.Request) {
 		hashedPassword := auth.Hash(tmppassword)
 		hashedPassword := auth.Hash(tmppassword)
 		err := sysdb.Write("auth", "passhash/"+username, hashedPassword)
 		err := sysdb.Write("auth", "passhash/"+username, hashedPassword)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, err.Error())
+			common.SendErrorResponse(w, err.Error())
 			return
 			return
 		}
 		}
 		//Finish. Send back the reseted password
 		//Finish. Send back the reseted password
-		sendJSONResponse(w, "\""+tmppassword+"\"")
+		common.SendJSONResponse(w, "\""+tmppassword+"\"")
 
 
 	} else {
 	} else {
-		sendErrorResponse(w, "Not supported opr")
+		common.SendErrorResponse(w, "Not supported opr")
 		return
 		return
 	}
 	}
 }
 }
@@ -284,7 +285,7 @@ func user_getInterfaceInfo(w http.ResponseWriter, r *http.Request) {
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
 		//User not logged in
 		//User not logged in
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 
 
@@ -296,23 +297,23 @@ func user_getInterfaceInfo(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 
 
 	jsonString, _ := json.Marshal(interfaceModuleInfos)
 	jsonString, _ := json.Marshal(interfaceModuleInfos)
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 }
 }
 
 
 func user_handleUserInfo(w http.ResponseWriter, r *http.Request) {
 func user_handleUserInfo(w http.ResponseWriter, r *http.Request) {
 	username, err := authAgent.GetUserName(w, r)
 	username, err := authAgent.GetUserName(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
-	opr, _ := mv(r, "opr", true)
+	opr, _ := common.Mv(r, "opr", true)
 
 
 	if opr == "" {
 	if opr == "" {
 		//Listing mode
 		//Listing mode
 		iconData := getUserIcon(username)
 		iconData := getUserIcon(username)
 		userGroup, err := permissionHandler.GetUsersPermissionGroup(username)
 		userGroup, err := permissionHandler.GetUsersPermissionGroup(username)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Unable to get user group")
+			common.SendErrorResponse(w, "Unable to get user group")
 			return
 			return
 		}
 		}
 
 
@@ -331,13 +332,13 @@ func user_handleUserInfo(w http.ResponseWriter, r *http.Request) {
 			Usergroup: userGroupNames,
 			Usergroup: userGroupNames,
 		})
 		})
 
 
-		sendJSONResponse(w, string(jsonString))
+		common.SendJSONResponse(w, string(jsonString))
 		return
 		return
 	} else if opr == "changepw" {
 	} else if opr == "changepw" {
-		oldpw, _ := mv(r, "oldpw", true)
-		newpw, _ := mv(r, "newpw", true)
+		oldpw, _ := common.Mv(r, "oldpw", true)
+		newpw, _ := common.Mv(r, "newpw", true)
 		if oldpw == "" || newpw == "" {
 		if oldpw == "" || newpw == "" {
-			sendErrorResponse(w, "Password cannot be empty")
+			common.SendErrorResponse(w, "Password cannot be empty")
 			return
 			return
 		}
 		}
 		//valid the old password
 		//valid the old password
@@ -346,24 +347,24 @@ func user_handleUserInfo(w http.ResponseWriter, r *http.Request) {
 		err = sysdb.Read("auth", "passhash/"+username, &passwordInDB)
 		err = sysdb.Read("auth", "passhash/"+username, &passwordInDB)
 		if hashedPassword != passwordInDB {
 		if hashedPassword != passwordInDB {
 			//Old password entry invalid.
 			//Old password entry invalid.
-			sendErrorResponse(w, "Invalid old password.")
+			common.SendErrorResponse(w, "Invalid old password.")
 			return
 			return
 		}
 		}
 		//OK! Change user password
 		//OK! Change user password
 		newHashedPassword := auth.Hash(newpw)
 		newHashedPassword := auth.Hash(newpw)
 		sysdb.Write("auth", "passhash/"+username, newHashedPassword)
 		sysdb.Write("auth", "passhash/"+username, newHashedPassword)
-		sendOK(w)
+		common.SendOK(w)
 	} else if opr == "changeprofilepic" {
 	} else if opr == "changeprofilepic" {
-		picdata, _ := mv(r, "picdata", true)
+		picdata, _ := common.Mv(r, "picdata", true)
 		if picdata != "" {
 		if picdata != "" {
 			setUserIcon(username, picdata)
 			setUserIcon(username, picdata)
-			sendOK(w)
+			common.SendOK(w)
 		} else {
 		} else {
-			sendErrorResponse(w, "Empty image data received.")
+			common.SendErrorResponse(w, "Empty image data received.")
 			return
 			return
 		}
 		}
 	} else {
 	} else {
-		sendErrorResponse(w, "Not supported opr")
+		common.SendErrorResponse(w, "Not supported opr")
 		return
 		return
 	}
 	}
 }
 }
@@ -372,7 +373,7 @@ func user_handleList(w http.ResponseWriter, r *http.Request) {
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	userinfo, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
 		//This user has not logged in
 		//This user has not logged in
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 	if authAgent.CheckAuth(r) {
 	if authAgent.CheckAuth(r) {
@@ -396,9 +397,9 @@ func user_handleList(w http.ResponseWriter, r *http.Request) {
 		}
 		}
 
 
 		jsonString, _ := json.Marshal(results)
 		jsonString, _ := json.Marshal(results)
-		sendJSONResponse(w, string(jsonString))
+		common.SendJSONResponse(w, string(jsonString))
 	} else {
 	} else {
-		sendErrorResponse(w, "Permission Denied")
+		common.SendErrorResponse(w, "Permission Denied")
 	}
 	}
 }
 }
 
 

+ 2 - 0
web/SystemAO/security/connlog.html

@@ -124,6 +124,8 @@
                             $("#recordTables").parent().dropdown("set selected", getCurrentMonthTable());
                             $("#recordTables").parent().dropdown("set selected", getCurrentMonthTable());
                         }, 500);
                         }, 500);
                         loadRecordsByTableName(getCurrentMonthTable());
                         loadRecordsByTableName(getCurrentMonthTable());
+                    }else{
+                        $("#normalStatus").text("No Record");
                     }
                     }
               
               
                     
                     

+ 40 - 39
wifi.go

@@ -6,6 +6,7 @@ import (
 	"net/http"
 	"net/http"
 	"strings"
 	"strings"
 
 
+	"imuslab.com/arozos/mod/common"
 	wifi "imuslab.com/arozos/mod/network/wifi"
 	wifi "imuslab.com/arozos/mod/network/wifi"
 	prout "imuslab.com/arozos/mod/prouter"
 	prout "imuslab.com/arozos/mod/prouter"
 )
 )
@@ -31,7 +32,7 @@ func WiFiInit() {
 		AdminOnly:   true,
 		AdminOnly:   true,
 		UserHandler: userHandler,
 		UserHandler: userHandler,
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
 		DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
-			sendErrorResponse(w, "Permission Denied")
+			common.SendErrorResponse(w, "Permission Denied")
 		},
 		},
 	})
 	})
 
 
@@ -77,21 +78,21 @@ func network_wifi_handleWiFiPower(w http.ResponseWriter, r *http.Request) {
 	//Require admin permission to scan and connect wifi
 	//Require admin permission to scan and connect wifi
 	user, err := userHandler.GetUserInfoFromRequest(w, r)
 	user, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Internal Server Error")
+		common.SendErrorResponse(w, "Internal Server Error")
 		return
 		return
 	}
 	}
 
 
 	if !user.IsAdmin() {
 	if !user.IsAdmin() {
-		sendErrorResponse(w, "Permission Denied")
+		common.SendErrorResponse(w, "Permission Denied")
 		return
 		return
 	}
 	}
 
 
-	status, _ := mv(r, "status", true)
+	status, _ := common.Mv(r, "status", true)
 	if status == "" {
 	if status == "" {
 		//Show current power status
 		//Show current power status
 		infs, err := wifiManager.GetWirelessInterfaces()
 		infs, err := wifiManager.GetWirelessInterfaces()
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, err.Error())
+			common.SendErrorResponse(w, err.Error())
 			return
 			return
 		}
 		}
 
 
@@ -109,33 +110,33 @@ func network_wifi_handleWiFiPower(w http.ResponseWriter, r *http.Request) {
 			})
 			})
 		}
 		}
 
 
-		js, _ := json.Marshal(results);
-		sendJSONResponse(w, string(js))
+		js, _ := json.Marshal(results)
+		common.SendJSONResponse(w, string(js))
 
 
 	} else {
 	} else {
 		//Change current power status
 		//Change current power status
-		wlaninterface, err := mv(r, "interface", true)
+		wlaninterface, err := common.Mv(r, "interface", true)
 		if err != nil {
 		if err != nil {
-			sendErrorResponse(w, "Invalid interface")
+			common.SendErrorResponse(w, "Invalid interface")
 			return
 			return
 		}
 		}
 
 
 		if status == "on" {
 		if status == "on" {
 			err := wifiManager.SetInterfacePower(wlaninterface, true)
 			err := wifiManager.SetInterfacePower(wlaninterface, true)
 			if err != nil {
 			if err != nil {
-				sendErrorResponse(w, err.Error())
+				common.SendErrorResponse(w, err.Error())
 			} else {
 			} else {
-				sendOK(w)
+				common.SendOK(w)
 			}
 			}
 		} else if status == "off" {
 		} else if status == "off" {
 			err := wifiManager.SetInterfacePower(wlaninterface, false)
 			err := wifiManager.SetInterfacePower(wlaninterface, false)
 			if err != nil {
 			if err != nil {
-				sendErrorResponse(w, err.Error())
+				common.SendErrorResponse(w, err.Error())
 			} else {
 			} else {
-				sendOK(w)
+				common.SendOK(w)
 			}
 			}
 		} else {
 		} else {
-			sendErrorResponse(w, "Invalid status")
+			common.SendErrorResponse(w, "Invalid status")
 		}
 		}
 	}
 	}
 
 
@@ -145,75 +146,75 @@ func network_wifi_handleScan(w http.ResponseWriter, r *http.Request) {
 	//Require admin permission to scan and connect wifi
 	//Require admin permission to scan and connect wifi
 	user, err := userHandler.GetUserInfoFromRequest(w, r)
 	user, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Internal Server Error")
+		common.SendErrorResponse(w, "Internal Server Error")
 		return
 		return
 	}
 	}
 
 
 	if !user.IsAdmin() {
 	if !user.IsAdmin() {
-		sendErrorResponse(w, "Permission Denied")
+		common.SendErrorResponse(w, "Permission Denied")
 		return
 		return
 	}
 	}
 
 
 	//Get a list of current on system wireless interface
 	//Get a list of current on system wireless interface
 	wirelessInterfaces, err := wifiManager.GetWirelessInterfaces()
 	wirelessInterfaces, err := wifiManager.GetWirelessInterfaces()
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 
 
 	if len(wirelessInterfaces) == 0 {
 	if len(wirelessInterfaces) == 0 {
 		//No wireless interface
 		//No wireless interface
-		sendErrorResponse(w, "Wireless Interface Not Found")
+		common.SendErrorResponse(w, "Wireless Interface Not Found")
 		return
 		return
 	}
 	}
 
 
 	//Get the first ethernet interface and use it to scan nearby wifi
 	//Get the first ethernet interface and use it to scan nearby wifi
 	scannedWiFiInfo, err := wifiManager.ScanNearbyWiFi(wirelessInterfaces[0])
 	scannedWiFiInfo, err := wifiManager.ScanNearbyWiFi(wirelessInterfaces[0])
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 	jsonString, _ := json.Marshal(scannedWiFiInfo)
 	jsonString, _ := json.Marshal(scannedWiFiInfo)
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 }
 }
 
 
 func network_wifi_handleConnect(w http.ResponseWriter, r *http.Request) {
 func network_wifi_handleConnect(w http.ResponseWriter, r *http.Request) {
 	user, err := userHandler.GetUserInfoFromRequest(w, r)
 	user, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Internal Server Error")
+		common.SendErrorResponse(w, "Internal Server Error")
 		return
 		return
 	}
 	}
 	//Get information from client and create a new network config file
 	//Get information from client and create a new network config file
 	if !user.IsAdmin() {
 	if !user.IsAdmin() {
-		sendErrorResponse(w, "Permission denied")
+		common.SendErrorResponse(w, "Permission denied")
 		return
 		return
 	}
 	}
 
 
-	ssid, err := mv(r, "ESSID", true)
+	ssid, err := common.Mv(r, "ESSID", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "ESSID not given")
+		common.SendErrorResponse(w, "ESSID not given")
 		return
 		return
 	}
 	}
-	connType, _ := mv(r, "ConnType", true)
-	password, _ := mv(r, "pwd", true)
+	connType, _ := common.Mv(r, "ConnType", true)
+	password, _ := common.Mv(r, "pwd", true)
 	log.Println("WiFi Switch Request Received. Genering Network Configuration...")
 	log.Println("WiFi Switch Request Received. Genering Network Configuration...")
 
 
-	identity, err := mv(r, "identity", true)
+	identity, err := common.Mv(r, "identity", true)
 	if err != nil {
 	if err != nil {
 		identity = ""
 		identity = ""
 	}
 	}
 
 
 	result, err := wifiManager.ConnectWiFi(ssid, password, connType, identity)
 	result, err := wifiManager.ConnectWiFi(ssid, password, connType, identity)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
 	jsonString, err := json.Marshal(result)
 	jsonString, err := json.Marshal(result)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 		return
 		return
 	}
 	}
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 
 
 	log.Println("WiFi Connected")
 	log.Println("WiFi Connected")
 
 
@@ -223,40 +224,40 @@ func network_wifi_handleWiFiRemove(w http.ResponseWriter, r *http.Request) {
 	//Require admin permission to scan and connect wifi
 	//Require admin permission to scan and connect wifi
 	user, err := userHandler.GetUserInfoFromRequest(w, r)
 	user, err := userHandler.GetUserInfoFromRequest(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Internal Server Error")
+		common.SendErrorResponse(w, "Internal Server Error")
 		return
 		return
 	}
 	}
 
 
 	if !user.IsAdmin() {
 	if !user.IsAdmin() {
-		sendErrorResponse(w, "Permission Denied")
+		common.SendErrorResponse(w, "Permission Denied")
 		return
 		return
 	}
 	}
 
 
 	//Get ESSID from post request
 	//Get ESSID from post request
-	ESSID, err := mv(r, "ESSID", true)
+	ESSID, err := common.Mv(r, "ESSID", true)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "ESSID not given")
+		common.SendErrorResponse(w, "ESSID not given")
 		return
 		return
 	}
 	}
 
 
 	err = wifiManager.RemoveWifi(ESSID)
 	err = wifiManager.RemoveWifi(ESSID)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, err.Error())
+		common.SendErrorResponse(w, err.Error())
 	}
 	}
-	sendOK(w)
+	common.SendOK(w)
 }
 }
 
 
 func network_wifi_handleWiFiInfo(w http.ResponseWriter, r *http.Request) {
 func network_wifi_handleWiFiInfo(w http.ResponseWriter, r *http.Request) {
 	//Get and return the current conencted WiFi Information
 	//Get and return the current conencted WiFi Information
 	_, err := authAgent.GetUserName(w, r)
 	_, err := authAgent.GetUserName(w, r)
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "User not logged in")
+		common.SendErrorResponse(w, "User not logged in")
 		return
 		return
 	}
 	}
 
 
 	ESSID, interfaceName, err := wifiManager.GetConnectedWiFi()
 	ESSID, interfaceName, err := wifiManager.GetConnectedWiFi()
 	if err != nil {
 	if err != nil {
-		sendErrorResponse(w, "Failed to retrieve WiFi Information")
+		common.SendErrorResponse(w, "Failed to retrieve WiFi Information")
 		return
 		return
 	}
 	}
 
 
@@ -264,5 +265,5 @@ func network_wifi_handleWiFiInfo(w http.ResponseWriter, r *http.Request) {
 		"ESSID":     ESSID,
 		"ESSID":     ESSID,
 		"Interface": interfaceName,
 		"Interface": interfaceName,
 	})
 	})
-	sendJSONResponse(w, string(jsonString))
+	common.SendJSONResponse(w, string(jsonString))
 }
 }

Some files were not shown because too many files changed in this diff