mirror of
https://github.com/MickMake/GoSungrow.git
synced 2025-12-11 13:12:47 +01:00
381 lines
7.1 KiB
Go
381 lines
7.1 KiB
Go
package cmd
|
|
|
|
import (
|
|
"GoSungro/Only"
|
|
"GoSungro/google"
|
|
"GoSungro/iSolarCloud"
|
|
"GoSungro/iSolarCloud/web"
|
|
"GoSungro/lsgo"
|
|
"GoSungro/mmGit"
|
|
"errors"
|
|
"fmt"
|
|
"github.com/spf13/cobra"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
//goland:noinspection SpellCheckingInspection
|
|
const (
|
|
DefaultBinaryName = "GoSungro"
|
|
EnvPrefix = "SunGro"
|
|
defaultConfigFile = "config.json"
|
|
|
|
flagConfigFile = "config"
|
|
flagDebug = "debug"
|
|
flagQuiet = "quiet"
|
|
|
|
flagApiUrl = "host"
|
|
flagApiTimeout = "timeout"
|
|
flagApiUsername = "user"
|
|
flagApiPassword = "password"
|
|
flagApiAppKey = "appkey"
|
|
flagApiTokenExpiry = "token-expiry"
|
|
|
|
flagGoogleSheet = "google-sheet"
|
|
flagGoogleSheetUpdate = "update"
|
|
|
|
flagGitUsername = "git-username"
|
|
flagGitPassword = "git-password"
|
|
flagGitKeyFile = "git-sshkey"
|
|
flagGitToken = "git-token"
|
|
flagGitRepo = "git-repo"
|
|
flagGitRepoDir = "git-dir"
|
|
flagGitDiffCmd = "diff-cmd"
|
|
|
|
defaultHost = "https://augateway.isolarcloud.com"
|
|
defaultUsername = "harry@potter.net"
|
|
defaultPassword = "hogwarts"
|
|
|
|
defaultTimeout = time.Duration(time.Second * 30)
|
|
)
|
|
|
|
var DefaultAreas = []string{"domain", "site", "department", "user", "presence", "device", "model", "profile", "contact"}
|
|
|
|
type CommandArgs struct {
|
|
ConfigDir string
|
|
ConfigFile string
|
|
WriteConfig bool
|
|
Quiet bool
|
|
Debug bool
|
|
OutputType string
|
|
OutputFile string
|
|
|
|
// iSolarCloud api
|
|
ApiTimeout time.Duration
|
|
ApiUrl string
|
|
ApiUsername string
|
|
ApiPassword string
|
|
ApiAppKey string
|
|
ApiTokenExpiry string
|
|
|
|
// Google sheets
|
|
GoogleSheet string
|
|
GoogleSheetUpdate bool
|
|
|
|
// GitHub api
|
|
GitRepo string
|
|
GitRepoDir string
|
|
GitUsername string
|
|
GitPassword string
|
|
GitKeyFile string
|
|
GitToken string
|
|
GitDiffCmd string
|
|
|
|
Args []string
|
|
|
|
Valid bool
|
|
Error error
|
|
}
|
|
|
|
func (ca *CommandArgs) IsValid() error {
|
|
for range Only.Once {
|
|
if !ca.Valid {
|
|
ca.Error = errors.New("args are not valid")
|
|
break
|
|
}
|
|
}
|
|
|
|
return ca.Error
|
|
}
|
|
|
|
//goland:noinspection GoUnusedParameter
|
|
func (ca *CommandArgs) ProcessArgs(cmd *cobra.Command, args []string) error {
|
|
for range Only.Once {
|
|
ca.Args = args
|
|
|
|
SunGro = iSolarCloud.NewSunGro(ca.ApiUrl)
|
|
if SunGro.Error != nil {
|
|
break
|
|
}
|
|
|
|
Cmd.Error = SunGro.Init()
|
|
if Cmd.Error != nil {
|
|
break
|
|
}
|
|
|
|
auth := web.SunGroAuth {
|
|
TokenExpiry: ca.ApiTokenExpiry,
|
|
AppKey: ca.ApiAppKey,
|
|
Username: ca.ApiUsername,
|
|
Password: ca.ApiPassword,
|
|
}
|
|
ca.Error = SunGro.SetAuth(auth)
|
|
if ca.Error != nil {
|
|
break
|
|
}
|
|
|
|
if SunGro.HasTokenChanged() {
|
|
ca.ApiTokenExpiry = SunGro.GetTokenExpiry()
|
|
ca.Error = writeConfig()
|
|
}
|
|
|
|
if Cmd.GoogleSheetUpdate {
|
|
SunGro.OutputType = iSolarCloud.TypeGoogle
|
|
}
|
|
|
|
//Git.Error = Cmd.GitSet()
|
|
//if Cmd.Error != nil {
|
|
// break
|
|
//}
|
|
|
|
ca.Valid = true
|
|
}
|
|
|
|
return ca.Error
|
|
}
|
|
|
|
func (ca *CommandArgs) GitSet() error {
|
|
for range Only.Once {
|
|
if Git != nil {
|
|
break
|
|
}
|
|
|
|
Git = mmGit.New()
|
|
if Git.Error != nil {
|
|
ca.Error = Git.Error
|
|
break
|
|
}
|
|
|
|
//Cmd.Error = Git.SetAuth(ca.GitUsername, ca.GitPassword)
|
|
//if Cmd.Error != nil {
|
|
// break
|
|
//}
|
|
|
|
Cmd.Error = Git.SetKeyFile(ca.GitKeyFile)
|
|
if Cmd.Error != nil {
|
|
break
|
|
}
|
|
|
|
Cmd.Error = Git.SetToken(ca.GitToken)
|
|
if Cmd.Error != nil {
|
|
break
|
|
}
|
|
|
|
Cmd.Error = Git.SetRepo(ca.GitRepo)
|
|
if Cmd.Error != nil {
|
|
break
|
|
}
|
|
|
|
Cmd.Error = Git.SetDir(ca.GitRepoDir)
|
|
if Cmd.Error != nil {
|
|
break
|
|
}
|
|
|
|
Cmd.Error = Git.SetDiffCmd(ca.GitDiffCmd)
|
|
if Cmd.Error != nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
return Cmd.Error
|
|
}
|
|
|
|
func (ca *CommandArgs) GitLs(options ...string) error {
|
|
for range Only.Once {
|
|
os.Args = []string{"GitLs"}
|
|
os.Args = append(os.Args, options...)
|
|
ca.Error = os.Chdir(ca.GitRepoDir)
|
|
if ca.Error != nil {
|
|
break
|
|
}
|
|
|
|
// ls-go is a standalone GoLang executable,
|
|
// but I've modified it to be a package and so directly callable.
|
|
ca.Error = lsgo.LsGo()
|
|
if ca.Error != nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
return Cmd.Error
|
|
}
|
|
|
|
func (ca *CommandArgs) GitSync(msg string, entities ...string) error {
|
|
for range Only.Once {
|
|
Cmd.Error = Git.Pull()
|
|
if Cmd.Error != nil {
|
|
break
|
|
}
|
|
|
|
Cmd.Error = ca.GitSave(entities...)
|
|
if Cmd.Error != nil {
|
|
break
|
|
}
|
|
|
|
Cmd.Error = Git.Add(".")
|
|
if Cmd.Error != nil {
|
|
break
|
|
}
|
|
|
|
if msg == "" {
|
|
msg = fmt.Sprintf("Updated %d files.", len(entities))
|
|
}
|
|
Cmd.Error = Git.Commit(msg)
|
|
if Cmd.Error != nil {
|
|
break
|
|
}
|
|
|
|
Cmd.Error = Git.Push()
|
|
if Cmd.Error != nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
return Cmd.Error
|
|
}
|
|
|
|
func (ca *CommandArgs) GitSave(entities ...string) error {
|
|
for range Only.Once {
|
|
if len(entities) == 0 {
|
|
entities = DefaultAreas
|
|
}
|
|
fmt.Printf("Saving %d entities from the SunGro to Git...\n", len(entities))
|
|
|
|
//SunGro.OutputType = iSolarCloud.StringTypeJson
|
|
SunGro.OutputType = iSolarCloud.TypeJson
|
|
//domain := SunGro.VerifyDomain("")
|
|
//user := SunGro.VerifyUser("")
|
|
|
|
for _, entity := range entities {
|
|
// Remove plurals.
|
|
entity = strings.TrimSuffix(entity, "s")
|
|
SunGro.OutputString = ""
|
|
|
|
switch entity {
|
|
case "domain":
|
|
SunGro.Error = SunGro.Init()
|
|
}
|
|
if SunGro.Error != nil {
|
|
break
|
|
}
|
|
|
|
jf := AddJsonSuffix(entity)
|
|
Cmd.Error = Git.SaveFile(jf, []byte(SunGro.OutputString))
|
|
if Cmd.Error != nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
fmt.Printf("Saved %d files.", len(entities))
|
|
}
|
|
|
|
return Cmd.Error
|
|
}
|
|
|
|
|
|
func (ca *CommandArgs) GoogleUpdate(entities ...string) error {
|
|
|
|
for range Only.Once {
|
|
SunGro.OutputType = iSolarCloud.TypeGoogle
|
|
//domain := SunGro.VerifyDomain("")
|
|
//user := SunGro.VerifyUser("")
|
|
|
|
if len(entities) == 0 {
|
|
entities = DefaultAreas
|
|
}
|
|
fmt.Printf("Saving %d entities from the SunGro to Google Docs...\n", len(entities))
|
|
|
|
for _, entity := range entities {
|
|
switch entity {
|
|
case "domain":
|
|
ca.Error = SunGro.Init()
|
|
if ca.Error != nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
sheet := google.Sheet {
|
|
Id: "",
|
|
Credentials: nil,
|
|
SheetName: entity,
|
|
Range: "",
|
|
Data: SunGro.OutputArray,
|
|
}
|
|
sheet.Set(sheet)
|
|
ca.Error = sheet.WriteSheet()
|
|
if ca.Error != nil {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
return ca.Error
|
|
}
|
|
|
|
//func (ca *CommandArgs) UpdateGoogleSheet(name string, data [][]interface{}) error {
|
|
//
|
|
// for range Only.Once {
|
|
// sheet := google.Sheet{
|
|
// Id: "",
|
|
// Credentials: nil,
|
|
// SheetName: name,
|
|
// Range: "",
|
|
// Data: data,
|
|
// }
|
|
// sheet.Set(sheet)
|
|
// ca.Error = sheet.WriteSheet()
|
|
// if ca.Error != nil {
|
|
// break
|
|
// }
|
|
// }
|
|
//
|
|
// return p.Error
|
|
//}
|
|
|
|
|
|
//goland:noinspection GoUnusedFunction
|
|
func showArgs(cmd *cobra.Command, args []string) {
|
|
for range Only.Once {
|
|
flargs := cmd.Flags().Args()
|
|
if flargs != nil {
|
|
fmt.Printf("'%s' called with '%s'\n", cmd.CommandPath(), strings.Join(flargs, " "))
|
|
break
|
|
}
|
|
|
|
fmt.Printf("'%s' called with '%s'\n", cmd.CommandPath(), strings.Join(args, " "))
|
|
break
|
|
}
|
|
|
|
fmt.Println("")
|
|
}
|
|
|
|
func fillArray(count int, args []string) []string {
|
|
var ret []string
|
|
for range Only.Once {
|
|
//
|
|
//if len(args) == 0 {
|
|
// break
|
|
//}
|
|
ret = make([]string, count)
|
|
for i, e := range args {
|
|
ret[i] = e
|
|
}
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func AddJsonSuffix(fn string) string {
|
|
return strings.TrimSuffix(fn, ".json") + ".json"
|
|
}
|