mirror of
https://github.com/micromdm/micromdm/
synced 2026-08-13 05:45:41 +08:00
add config set command (#130)
update the params of ~/.micromdm/default.json using the CLI
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user