init.go 1.52 KB
package service

import (
	"os"
	"path"
	"path/filepath"
	"time"

	"cocogo/pkg/common"
	"cocogo/pkg/config"
	"cocogo/pkg/logger"
)

var client = common.NewClient(30, "")
var authClient = common.NewClient(30, "")

func Initial() {
	keyPath := config.Conf.AccessKeyFile
	client.BaseHost = config.Conf.CoreHost
	authClient.BaseHost = config.Conf.CoreHost

	if !path.IsAbs(config.Conf.AccessKeyFile) {
		keyPath = filepath.Join(config.Conf.RootPath, keyPath)
	}
	ak := AccessKey{Value: config.Conf.AccessKey, Path: keyPath}
	_ = ak.Load()
	authClient.Auth = ak
	validateAccessAuth()
	go KeepSyncConfigWithServer()
}

func validateAccessAuth() {
	maxTry := 30
	count := 0
	for {
		user, err := GetProfile()
		if err == nil && user.Role == "App" {
			break
		}
		if err != nil {
			msg := "Connect server error or access key is invalid, remove %s run again"
			logger.Errorf(msg, config.Conf.AccessKeyFile)
		} else if user.Role != "App" {
			logger.Error("Access role is not App, is: ", user.Role)
		}
		count++
		time.Sleep(3 * time.Second)
		if count >= maxTry {
			os.Exit(1)
		}
	}
}

func MustLoadServerConfigOnce() {

}

func LoadConfigFromServer(conf *config.Config) (err error) {
	conf.Mux.Lock()
	defer conf.Mux.Unlock()
	err = authClient.Get(TerminalConfigURL, conf)
	if err != nil {
		logger.Warn("Sync config with server error: ", err)
	}
	return err
}

func KeepSyncConfigWithServer() {
	for {
		err := LoadConfigFromServer(config.Conf)
		if err != nil {
			logger.Warn("Sync config with server error: ", err)
		}
		time.Sleep(60 * time.Second)
	}
}