@@ -21,17 +21,20 @@ const (
2121 envCurlCommand = "IAP_CURL_BIN"
2222)
2323
24+ // Config represents
2425type Config struct {
2526 Services []Service `json:"services"`
2627
2728 path string
2829}
2930
31+ // Service is the URL and its Env pair
3032type Service struct {
3133 URL string `json:"url"`
3234 Env Env `json:"env"`
3335}
3436
37+ // Env represents the environment variables needed to request to IAP-protected app
3538type Env struct {
3639 Credentials string `json:"GOOGLE_APPLICATION_CREDENTIALS"`
3740 ClientID string `json:"IAP_CLIENT_ID"`
@@ -60,21 +63,16 @@ func configDir() (string, error) {
6063 return dir , nil
6164}
6265
63- func ( cfg * Config ) LoadFile ( file string ) error {
64- cfg . path = file
65- _ , err := os .Stat (file )
66+ // Create creates config file if it doesn't exist
67+ func ( cfg * Config ) Create () error {
68+ _ , err := os .Stat (cfg . path )
6669 if err == nil {
67- raw , _ := ioutil .ReadFile (file )
68- if err := json .Unmarshal (raw , cfg ); err != nil {
69- return err
70- }
7170 return nil
7271 }
73-
7472 if ! os .IsNotExist (err ) {
7573 return err
7674 }
77- f , err := os .Create (file )
75+ f , err := os .Create (cfg . path )
7876 if err != nil {
7977 return err
8078 }
@@ -91,7 +89,22 @@ func (cfg *Config) LoadFile(file string) error {
9189 }}
9290 }
9391
94- return json .NewEncoder (f ).Encode (cfg )
92+ enc := json .NewEncoder (f )
93+ enc .SetIndent ("" , " " )
94+ return enc .Encode (cfg )
95+ }
96+
97+ // Load loads config file to struct
98+ func (cfg * Config ) Load () error {
99+ dir , _ := configDir ()
100+ file := filepath .Join (dir , "config.json" )
101+ cfg .path = file
102+ _ , err := os .Stat (cfg .path )
103+ if err != nil {
104+ return err
105+ }
106+ raw , _ := ioutil .ReadFile (cfg .path )
107+ return json .Unmarshal (raw , cfg )
95108}
96109
97110func (cfg * Config ) getEnvFromFile (url string ) (env Env , err error ) {
@@ -106,6 +119,7 @@ func (cfg *Config) getEnvFromFile(url string) (env Env, err error) {
106119 return
107120}
108121
122+ // GetEnv returns Env includes url
109123func (cfg * Config ) GetEnv (url string ) (env Env , err error ) {
110124 env , _ = cfg .getEnvFromFile (url )
111125 credentials := os .Getenv (envCredentials )
@@ -136,21 +150,25 @@ func (cfg *Config) GetEnv(url string) (env Env, err error) {
136150 }, nil
137151}
138152
153+ // GetURLs returns URLs described in config file
139154func (cfg * Config ) GetURLs () (list []string ) {
140155 for _ , service := range cfg .Services {
141156 list = append (list , service .URL )
142157 }
143158 return
144159}
145160
161+ // Edit edits config file
162+ // If it doesn't exist, it will be automatically created
146163func (cfg * Config ) Edit () error {
147- dir , _ := configDir ()
148- json := filepath .Join (dir , "config.json" )
164+ if err := cfg .Create (); err != nil {
165+ return err
166+ }
149167 editor := os .Getenv ("EDITOR" )
150168 if editor == "" {
151169 editor = "vim"
152170 }
153- command := fmt .Sprintf ("%s %s" , editor , json )
171+ command := fmt .Sprintf ("%s %s" , editor , cfg . path )
154172 var cmd * exec.Cmd
155173 if runtime .GOOS == "windows" {
156174 cmd = exec .Command ("cmd" , "/c" , command )
@@ -163,6 +181,7 @@ func (cfg *Config) Edit() error {
163181 return cmd .Run ()
164182}
165183
184+ // Registered returns true if url exists in config file
166185func (cfg * Config ) Registered (url string ) bool {
167186 u1 , _ := neturl .Parse (url )
168187 for _ , service := range cfg .Services {
@@ -174,6 +193,7 @@ func (cfg *Config) Registered(url string) bool {
174193 return false
175194}
176195
196+ // Register registers service to config file
177197func (cfg * Config ) Register (s Service ) error {
178198 cfg .Services = append (cfg .Services , s )
179199 b , err := json .Marshal (cfg )
@@ -184,7 +204,10 @@ func (cfg *Config) Register(s Service) error {
184204 if err := json .Indent (& out , b , "" , " " ); err != nil {
185205 return err
186206 }
187- file , _ := os .OpenFile (cfg .path , os .O_WRONLY , 0644 )
207+ file , err := os .OpenFile (cfg .path , os .O_WRONLY , 0644 )
208+ if err != nil {
209+ return err
210+ }
188211 w := bufio .NewWriter (file )
189212 w .Write (out .Bytes ())
190213 return w .Flush ()
0 commit comments