all: uninstall service if got invalid config from API

This commit is contained in:
Cuong Manh Le authored and Cuong Manh Le committed 2023-01-20 21:37:44 +07:00
1 parent 3a5c71514c
commit 53306235dc
2 files changed
+28 -8

No files matched your search

+15 -2
View File
@@ -348,7 +348,7 @@ func readConfigFile(writeDefaultConfig bool) bool {
// If err == nil, there's a config supplied via `--config`, no default config written. // If err == nil, there's a config supplied via `--config`, no default config written.
err := v.ReadInConfig() err := v.ReadInConfig()
if err == nil { if err == nil {
fmt.Println("loading config file from: ", v.ConfigFileUsed()) fmt.Println("loading config file from:", v.ConfigFileUsed())
return true return true
} }
@@ -419,8 +419,21 @@ func processCDFlags() {
return return
} }
resolverConfig, err := controld.FetchResolverConfig(cdUID) resolverConfig, err := controld.FetchResolverConfig(cdUID)
if uer, ok := err.(*controld.UtilityErrorResponse); ok && uer.ErrorField.Code == controld.InvalidConfigCode {
s, err := service.New(&prog{}, svcConfig)
if err != nil {
stderrMsg(err.Error())
return
}
tasks := []task{{s.Uninstall, true}}
if doTasks(tasks) {
log.Println("uninstalled service")
}
log.Fatalf("failed to fetch resolver config: %v", uer)
}
if err != nil { if err != nil {
log.Fatalf("failed to fetch resolver config: %v", err) log.Printf("could not fetch resolver config: %v", err)
return
} }
cfg = ctrld.Config{} cfg = ctrld.Config{}
+13 -6
View File
@@ -3,13 +3,15 @@ package controld
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"net/http" "net/http"
"time" "time"
) )
const resolverDataURL = "https://api.controld.com/utility" const (
resolverDataURL = "https://api.controld.com/utility"
InvalidConfigCode = 40401
)
// ResolverConfig represents Control D resolver data. // ResolverConfig represents Control D resolver data.
type ResolverConfig struct { type ResolverConfig struct {
@@ -24,12 +26,17 @@ type utilityResponse struct {
} `json:"body"` } `json:"body"`
} }
type utilityErrorResponse struct { type UtilityErrorResponse struct {
Error struct { ErrorField struct {
Message string `json:"message"` Message string `json:"message"`
Code int `json:"code"`
} `json:"error"` } `json:"error"`
} }
func (u UtilityErrorResponse) Error() string {
return u.ErrorField.Message
}
type utilityRequest struct { type utilityRequest struct {
UID string `json:"uid"` UID string `json:"uid"`
} }
@@ -53,11 +60,11 @@ func FetchResolverConfig(uid string) (*ResolverConfig, error) {
defer resp.Body.Close() defer resp.Body.Close()
d := json.NewDecoder(resp.Body) d := json.NewDecoder(resp.Body)
if resp.StatusCode != http.StatusOK { if resp.StatusCode != http.StatusOK {
errResp := &utilityErrorResponse{} errResp := &UtilityErrorResponse{}
if err := d.Decode(errResp); err != nil { if err := d.Decode(errResp); err != nil {
return nil, err return nil, err
} }
return nil, errors.New(errResp.Error.Message) return nil, errResp
} }
ur := &utilityResponse{} ur := &utilityResponse{}