load and save config file
This commit is contained in:
		
							
								
								
									
										98
									
								
								apiGo/config/Config.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								apiGo/config/Config.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,98 @@
 | 
			
		||||
package config
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/pelletier/go-toml/v2"
 | 
			
		||||
	"os"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DatabaseT struct {
 | 
			
		||||
	DBName     string
 | 
			
		||||
	DBPassword string
 | 
			
		||||
	DBUser     string
 | 
			
		||||
	DBPort     uint16
 | 
			
		||||
	DBHost     string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type FileConfT struct {
 | 
			
		||||
	Database DatabaseT
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func defaultConig() *FileConfT {
 | 
			
		||||
	return &FileConfT{Database: DatabaseT{
 | 
			
		||||
		DBName:     "mediacenter",
 | 
			
		||||
		DBPassword: "mediapassword",
 | 
			
		||||
		DBUser:     "mediacenteruser",
 | 
			
		||||
		DBPort:     3306,
 | 
			
		||||
		DBHost:     "127.0.0.1",
 | 
			
		||||
	}}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var liveConf FileConfT
 | 
			
		||||
 | 
			
		||||
func Init() {
 | 
			
		||||
	cfgname := "openmediacenter.cfg"
 | 
			
		||||
	cfgpath := "/etc/"
 | 
			
		||||
 | 
			
		||||
	// load config from disk
 | 
			
		||||
	dat, err := os.ReadFile(cfgpath + cfgname)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		// handle error if not exists or no sufficient read access
 | 
			
		||||
		if _, ok := err.(*os.PathError); ok {
 | 
			
		||||
 | 
			
		||||
			// check if config exists on local dir
 | 
			
		||||
			dat, err = os.ReadFile(cfgname)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				// config really doesn't exist!
 | 
			
		||||
				fmt.Printf("config not existing -- generating new empty config at %s%s\n", cfgpath, cfgname)
 | 
			
		||||
 | 
			
		||||
				// generate new default config
 | 
			
		||||
				obj, _ := toml.Marshal(defaultConig())
 | 
			
		||||
				liveConf = *defaultConig()
 | 
			
		||||
 | 
			
		||||
				err := os.WriteFile(cfgpath+cfgname, obj, 777)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					if errors.Is(err, os.ErrPermission) {
 | 
			
		||||
						// permisson denied to create file try to create at current dir
 | 
			
		||||
						err = os.WriteFile(cfgname, obj, 777)
 | 
			
		||||
						if err != nil {
 | 
			
		||||
							fmt.Println("failed to create default config file!")
 | 
			
		||||
						} else {
 | 
			
		||||
							fmt.Println("config file created at .")
 | 
			
		||||
						}
 | 
			
		||||
					} else {
 | 
			
		||||
						fmt.Println(err.Error())
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				// ok decode local config
 | 
			
		||||
				decodeConfig(&dat)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		} else {
 | 
			
		||||
			// other error
 | 
			
		||||
			fmt.Println(err.Error())
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		decodeConfig(&dat)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func decodeConfig(bin *[]byte) {
 | 
			
		||||
	config := FileConfT{}
 | 
			
		||||
 | 
			
		||||
	err := toml.Unmarshal(*bin, &config)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println(err)
 | 
			
		||||
 | 
			
		||||
	} else {
 | 
			
		||||
		fmt.Println("Successfully loaded config file!")
 | 
			
		||||
 | 
			
		||||
		liveConf = config
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetConfig() *FileConfT {
 | 
			
		||||
	return &liveConf
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user