399 lines
6.5 KiB
Go
399 lines
6.5 KiB
Go
package src
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/md5"
|
|
"crypto/rand"
|
|
"encoding/hex"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net"
|
|
"os"
|
|
"os/exec"
|
|
"os/user"
|
|
"path/filepath"
|
|
"runtime"
|
|
"strings"
|
|
"text/template"
|
|
)
|
|
|
|
// --- System Tools ---
|
|
|
|
// Prüft ob der Ordner existiert, falls nicht, wir der Ordner erstellt
|
|
func checkFolder(path string) (err error) {
|
|
|
|
var debug string
|
|
_, err = os.Stat(filepath.Dir(path))
|
|
|
|
if os.IsNotExist(err) {
|
|
// Ordner existiert nicht, wird jetzt erstellt
|
|
|
|
err = os.MkdirAll(getPlatformPath(path), 0755)
|
|
if err == nil {
|
|
|
|
debug = fmt.Sprintf("Create Folder:%s", path)
|
|
showDebug(debug, 1)
|
|
|
|
} else {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Prüft ob die datei im Dateisystem existiert
|
|
func checkFile(filename string) (err error) {
|
|
|
|
var file = getPlatformFile(filename)
|
|
|
|
if _, err = os.Stat(file); os.IsNotExist(err) {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// GetUserHomeDirectory : Benutzer Homer Verzeichnis
|
|
func GetUserHomeDirectory() (userHomeDirectory string) {
|
|
|
|
usr, err := user.Current()
|
|
|
|
if err != nil {
|
|
|
|
for _, name := range []string{"HOME", "USERPROFILE"} {
|
|
|
|
if dir := os.Getenv(name); dir != "" {
|
|
userHomeDirectory = dir
|
|
break
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
userHomeDirectory = usr.HomeDir
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Prüft Dateiberechtigung
|
|
func checkFilePermission(dir string) (err error) {
|
|
|
|
var filename = dir + "permission.test"
|
|
|
|
err = ioutil.WriteFile(filename, []byte(""), 0644)
|
|
if err == nil {
|
|
err = os.RemoveAll(filename)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Ordnerpfad für das laufende OS generieren
|
|
func getPlatformPath(path string) string {
|
|
return filepath.Dir(path) + string(os.PathSeparator)
|
|
}
|
|
|
|
// Dateipfad für das laufende OS generieren
|
|
func getPlatformFile(filename string) (osFilePath string) {
|
|
|
|
path, file := filepath.Split(filename)
|
|
var newPath = filepath.Dir(path)
|
|
osFilePath = newPath + string(os.PathSeparator) + file
|
|
|
|
return
|
|
}
|
|
|
|
// Dateinamen aus dem Dateipfad ausgeben
|
|
func getFilenameFromPath(path string) (file string) {
|
|
return filepath.Base(path)
|
|
}
|
|
|
|
// Nicht mehr verwendete Systemdaten löschen
|
|
func removeOldSystemData() {
|
|
// Temporären Ordner löschen
|
|
os.RemoveAll(System.Folder.Temp)
|
|
}
|
|
|
|
// Sucht eine Datei im OS
|
|
func searchFileInOS(file string) (path string) {
|
|
|
|
switch runtime.GOOS {
|
|
|
|
case "linux", "darwin", "freebsd":
|
|
var args = file
|
|
var cmd = exec.Command("which", strings.Split(args, " ")...)
|
|
|
|
out, err := cmd.CombinedOutput()
|
|
if err == nil {
|
|
path = strings.Trim(string(out), "\r\n")
|
|
}
|
|
|
|
default:
|
|
return
|
|
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
//
|
|
func removeChildItems(dir string) error {
|
|
|
|
files, err := filepath.Glob(filepath.Join(dir, "*"))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, file := range files {
|
|
|
|
err = os.RemoveAll(file)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// JSON
|
|
func mapToJSON(tmpMap interface{}) string {
|
|
|
|
jsonString, err := json.MarshalIndent(tmpMap, "", " ")
|
|
if err != nil {
|
|
return "{}"
|
|
}
|
|
|
|
return string(jsonString)
|
|
}
|
|
|
|
func jsonToMap(content string) map[string]interface{} {
|
|
|
|
var tmpMap = make(map[string]interface{})
|
|
json.Unmarshal([]byte(content), &tmpMap)
|
|
|
|
return (tmpMap)
|
|
}
|
|
|
|
func jsonToMapInt64(content string) map[int64]interface{} {
|
|
|
|
var tmpMap = make(map[int64]interface{})
|
|
json.Unmarshal([]byte(content), &tmpMap)
|
|
|
|
return (tmpMap)
|
|
}
|
|
|
|
func jsonToInterface(content string) (tmpMap interface{}, err error) {
|
|
|
|
err = json.Unmarshal([]byte(content), &tmpMap)
|
|
return
|
|
|
|
}
|
|
|
|
func saveMapToJSONFile(file string, tmpMap interface{}) error {
|
|
|
|
var filename = getPlatformFile(file)
|
|
jsonString, err := json.MarshalIndent(tmpMap, "", " ")
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = ioutil.WriteFile(filename, []byte(jsonString), 0644)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func loadJSONFileToMap(file string) (tmpMap map[string]interface{}, err error) {
|
|
|
|
f, err := os.Open(getPlatformFile(file))
|
|
defer f.Close()
|
|
|
|
content, err := ioutil.ReadAll(f)
|
|
|
|
if err == nil {
|
|
err = json.Unmarshal([]byte(content), &tmpMap)
|
|
}
|
|
|
|
f.Close()
|
|
|
|
return
|
|
}
|
|
|
|
// Binary
|
|
func readByteFromFile(file string) (content []byte, err error) {
|
|
|
|
f, err := os.Open(getPlatformFile(file))
|
|
defer f.Close()
|
|
|
|
content, err = ioutil.ReadAll(f)
|
|
f.Close()
|
|
|
|
return
|
|
}
|
|
|
|
func writeByteToFile(file string, data []byte) (err error) {
|
|
|
|
var filename = getPlatformFile(file)
|
|
err = ioutil.WriteFile(filename, data, 0644)
|
|
|
|
return
|
|
}
|
|
|
|
func readStringFromFile(file string) (str string, err error) {
|
|
|
|
var content []byte
|
|
var filename = getPlatformFile(file)
|
|
|
|
err = checkFile(filename)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
content, err = ioutil.ReadFile(filename)
|
|
if err != nil {
|
|
ShowError(err, 0)
|
|
return
|
|
}
|
|
|
|
str = string(content)
|
|
|
|
return
|
|
}
|
|
|
|
// Netzwerk
|
|
func resolveHostIP() (err error) {
|
|
|
|
netInterfaceAddresses, err := net.InterfaceAddrs()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
for _, netInterfaceAddress := range netInterfaceAddresses {
|
|
|
|
networkIP, ok := netInterfaceAddress.(*net.IPNet)
|
|
System.IPAddressesList = append(System.IPAddressesList, networkIP.IP.String())
|
|
|
|
if ok {
|
|
|
|
var ip = networkIP.IP.String()
|
|
|
|
if networkIP.IP.To4() != nil {
|
|
|
|
System.IPAddressesV4 = append(System.IPAddressesV4, ip)
|
|
|
|
if !networkIP.IP.IsLoopback() && ip[0:7] != "169.254" {
|
|
System.IPAddress = ip
|
|
}
|
|
|
|
} else {
|
|
System.IPAddressesV6 = append(System.IPAddressesV6, ip)
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if len(System.IPAddress) == 0 {
|
|
|
|
switch len(System.IPAddressesV4) {
|
|
|
|
case 0:
|
|
if len(System.IPAddressesV6) > 0 {
|
|
System.IPAddress = System.IPAddressesV6[0]
|
|
}
|
|
|
|
default:
|
|
System.IPAddress = System.IPAddressesV4[0]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
System.Hostname, err = os.Hostname()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Sonstiges
|
|
func randomString(n int) string {
|
|
|
|
const alphanum = "AB1CD2EF3GH4IJ5KL6MN7OP8QR9ST0UVWXYZ"
|
|
|
|
var bytes = make([]byte, n)
|
|
|
|
rand.Read(bytes)
|
|
|
|
for i, b := range bytes {
|
|
bytes[i] = alphanum[b%byte(len(alphanum))]
|
|
}
|
|
|
|
return string(bytes)
|
|
}
|
|
|
|
func parseTemplate(content string, tmpMap map[string]interface{}) (result string) {
|
|
|
|
t := template.Must(template.New("template").Parse(content))
|
|
|
|
var tpl bytes.Buffer
|
|
|
|
if err := t.Execute(&tpl, tmpMap); err != nil {
|
|
ShowError(err, 0)
|
|
}
|
|
result = tpl.String()
|
|
|
|
return
|
|
}
|
|
|
|
func indexOfString(element string, data []string) int {
|
|
|
|
for k, v := range data {
|
|
if element == v {
|
|
return k
|
|
}
|
|
}
|
|
|
|
return -1
|
|
}
|
|
|
|
func indexOfFloat64(element float64, data []float64) int {
|
|
|
|
for k, v := range data {
|
|
if element == v {
|
|
return (k)
|
|
}
|
|
}
|
|
|
|
return -1
|
|
}
|
|
|
|
func indexOfInt(element int, data []int) int {
|
|
|
|
for k, v := range data {
|
|
if element == v {
|
|
return (k)
|
|
}
|
|
}
|
|
|
|
return -1
|
|
}
|
|
|
|
func getMD5(str string) string {
|
|
|
|
md5Hasher := md5.New()
|
|
md5Hasher.Write([]byte(str))
|
|
|
|
return hex.EncodeToString(md5Hasher.Sum(nil))
|
|
}
|