mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-09-29 13:51:51 +02:00
all: uninstall service if got invalid config from API
This commit is contained in:
1 parent
3a5c71514c
commit
53306235dc
2 files changed
+28
-8
No files matched your search
+15
-2
@@ -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{}
|
||||||
|
|||||||
@@ -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{}
|
||||||
|
|||||||
Reference in new issue
Block a user