add config set command (#130)

update the params of ~/.micromdm/default.json using the CLI
This commit is contained in:
Victor Vrantchan
2017-03-27 23:50:06 -04:00
committed by GitHub
parent ab5b25dd63
commit 0b83c65939
3 changed files with 110 additions and 5 deletions

View File

@@ -2,24 +2,125 @@ package main
import (
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"net/url"
"os"
"os/user"
"strings"
)
func NewClientConfig() (*ClientConfig, error) {
type configCommand struct {
config *ClientConfig
}
func (cmd *configCommand) Run(args []string) error {
if len(args) < 1 {
cmd.Usage()
os.Exit(1)
}
var config *ClientConfig
if cfg, err := LoadClientConfig(); err == nil {
config = cfg
} else {
config = new(ClientConfig)
}
var run func(*ClientConfig, []string) error
switch strings.ToLower(args[0]) {
case "set":
run = setCmd
default:
cmd.Usage()
os.Exit(1)
}
return run(config, args[1:])
}
func (cmd *configCommand) Usage() error {
const help = `
mdmctl config set -h
`
fmt.Println(help)
return nil
}
func setCmd(cfg *ClientConfig, args []string) error {
flagset := flag.NewFlagSet("set", flag.ExitOnError)
var (
flToken = flagset.String("api-token", "", "api token to connect to micromdm server")
flServerURL = flagset.String("server-url", "", "server url of micromdm server")
)
flagset.Usage = usageFor(flagset, "mdmctl config set [flags]")
if err := flagset.Parse(args); err != nil {
return err
}
if *flToken != "" {
cfg.APIToken = *flToken
}
if *flServerURL != "" {
if !strings.HasPrefix(*flServerURL, "http") ||
!strings.HasPrefix(*flServerURL, "https") {
*flServerURL = "https://" + *flServerURL
}
u, err := url.Parse(*flServerURL)
if err != nil {
return err
}
u.Scheme = "https"
u.Path = "/"
cfg.ServerURL = u.String()
}
return SaveClientConfig(cfg)
}
func clientConfigPath() (string, error) {
usr, err := user.Current()
if err != nil {
return "", err
}
path := usr.HomeDir + "/.micromdm/default.json"
return path, nil
}
func SaveClientConfig(cfg *ClientConfig) error {
path, err := clientConfigPath()
if err != nil {
return err
}
f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
return err
}
defer f.Close()
if cfg == nil {
cfg = new(ClientConfig)
}
enc := json.NewEncoder(f)
enc.SetIndent("", " ")
return enc.Encode(cfg)
}
func LoadClientConfig() (*ClientConfig, error) {
path, err := clientConfigPath()
if err != nil {
return nil, err
}
cfgData, err := ioutil.ReadFile(usr.HomeDir + "/.micromdm/default.json")
cfgData, err := ioutil.ReadFile(path)
if err != nil {
return nil, fmt.Errorf("unable to load default config file: %s", err)
}
var cfg ClientConfig
err = json.Unmarshal(cfgData, &cfg)
if err != nil {
return nil, fmt.Errorf("failed to unmarshal ~/.micromdm/default.json %s", err)
return nil, fmt.Errorf("failed to unmarshal %s : %s", path, err)
}
return &cfg, nil
}

View File

@@ -18,7 +18,7 @@ type getCommand struct {
}
func (cmd *getCommand) setup() error {
cfg, err := NewClientConfig()
cfg, err := LoadClientConfig()
if err != nil {
return err
}
@@ -86,7 +86,7 @@ func (out *devicesTableOutput) BasicFooter() {
func (cmd *getCommand) getDevices(args []string) error {
flagset := flag.NewFlagSet("devices", flag.ExitOnError)
flagset.Usage = usageFor(flagset, "micromdm get devices [flags]")
flagset.Usage = usageFor(flagset, "mdmctl get devices [flags]")
if err := flagset.Parse(args); err != nil {
return err
}

View File

@@ -20,6 +20,9 @@ func main() {
case "version", "-version":
version.Print()
return
case "config":
cmd := &configCommand{}
run = cmd.Run
case "get":
cmd := &getCommand{}
run = cmd.Run
@@ -39,6 +42,7 @@ func usage() error {
Available Commands:
get
config
version
Use micromdm <command> -h for additional usage of each command.