1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
  | 
package main
// functions to import and export the protobuf
// data to and from config files
import (
	"errors"
	"fmt"
	"os"
	"path/filepath"
	"go.wit.com/log"
)
func (m *Portmaps) ConfigSave() error {
	if m == nil {
		return fmt.Errorf("ConfigSave() nil")
	}
	s := m.FormatTEXT()
	log.Info("proto.Marshal() worked len", len(s))
	configWrite(argv.Config, []byte(s))
	return nil
}
func ConfigLoad() *Portmaps {
	var fullname string
	if os.Getenv("CLOUD_HOME") != "" {
		fullname = filepath.Join(os.Getenv("CLOUD_HOME"), "gus.text")
		if argv.Config == "" {
			argv.Config = fullname
		}
	}
	if argv.Config != "" {
		fullname = argv.Config
	}
	if fullname == "" {
		homeDir, _ := os.UserHomeDir()
		fullname = filepath.Join(homeDir, ".config/cloud", "gus.text")
		argv.Config = fullname
	}
	var data []byte
	var err error
	if data, err = loadFile(fullname); err != nil {
		log.Warn("config file failed to load", err)
		// something went wrong loading the file
		return nil
	}
	if data == nil {
		return nil
	}
	p := new(Portmaps)
	if err = p.UnmarshalTEXT(data); err != nil {
		log.Warn("unmarshal failed on config file", err)
		return nil
	}
	log.Log(INFO, "gus.ConfigLoad() has", p.Len(), "port mappings")
	return p
}
func EventLoad() *Events {
	pb := new(Events)
	var fullname string
	base, _ := filepath.Split(argv.Config)
	fullname = filepath.Join(base, "events.pb")
	var data []byte
	var err error
	if data, err = loadFile(fullname); err != nil {
		log.Warn("event file failed to load", err)
		// something went wrong loading the file
		return pb
	}
	if data == nil {
		return pb
	}
	if err = pb.Unmarshal(data); err != nil {
		log.Warn("unmarshal failed on config file", err)
		return pb
	}
	log.Log(INFO, "gus.EventLoad() has", pb.Len(), "port mappings")
	return pb
}
func (e *Events) Save() {
	var fullname string
	base, _ := filepath.Split(argv.Config)
	fullname = filepath.Join(base, "events.pb")
	data, err := e.Marshal()
	if err != nil {
		log.Info("proto.Marshal() failed", err)
		return
	}
	log.Info("proto.Marshal() worked len", len(data))
	configWrite(fullname, data)
}
func loadFile(fullname string) ([]byte, error) {
	data, err := os.ReadFile(fullname)
	if errors.Is(err, os.ErrNotExist) {
		// if file does not exist, just return nil. this
		return nil, nil
	}
	if err != nil {
		// log.Info("open config file :", err)
		return nil, err
	}
	return data, nil
}
func (m *Portmaps) loadFile(fullname string) ([]byte, error) {
	data, err := os.ReadFile(fullname)
	if err != nil {
		// log.Info("open config file :", err)
		return nil, err
	}
	return data, nil
}
func configWrite(fullname string, data []byte) error {
	if _, base := filepath.Split(fullname); base == "" {
		return fmt.Errorf("--config option not set")
	}
	cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
	defer cfgfile.Close()
	if err != nil {
		log.Warn("open config file :", err)
		return err
	}
	cfgfile.Write(data)
	return nil
}
func (m *Portmaps) configWrite(fullname string, data []byte) error {
	if _, base := filepath.Split(fullname); base == "" {
		return fmt.Errorf("--config option not set")
	}
	cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
	defer cfgfile.Close()
	if err != nil {
		log.Warn("open config file :", err)
		return err
	}
	cfgfile.Write(data)
	return nil
}
  |