add get command to fetch resources

This commit is contained in:
Victor Vrantchan
2017-03-18 20:05:34 +00:00
committed by Victor Vrantchan
parent 5754f9e77b
commit 7afb826135
3 changed files with 128 additions and 5 deletions

109
get.go Normal file
View File

@@ -0,0 +1,109 @@
package main
import (
"encoding/json"
"errors"
"flag"
"fmt"
"os"
"strings"
"github.com/micromdm/dep"
)
func getResource(args []string) error {
if len(args) < 1 {
return errors.New("get requires at least one resource name")
}
var run func([]string) error
switch strings.ToLower(args[0]) {
case "dep":
run = getDep
default:
usage()
os.Exit(1)
}
if err := run(args[1:]); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}
return nil
}
func getDep(args []string) error {
if len(args) < 1 {
return errors.New("get dep requires at least one resource name")
}
sm := &config{}
sm.setupBolt()
client, err := sm.depClient()
if err != nil {
return err
}
var run func(dep.Client, []string) error
switch strings.ToLower(args[0]) {
case "account-info":
acc, err := client.Account()
if err != nil {
return err
}
enc := json.NewEncoder(os.Stdout)
enc.SetIndent("", " ")
err = enc.Encode(acc)
return err
case "device":
run = getDepDevice
case "profile":
run = getDepProfile
}
if err := run(client, args[1:]); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}
return nil
}
func getDepProfile(client dep.Client, args []string) error {
flagset := flag.NewFlagSet("profile", flag.ExitOnError)
var (
flUUID = flagset.String("uuid", "", "profile uuid")
)
if err := flagset.Parse(args); err != nil {
return err
}
profile, err := client.FetchProfile(*flUUID)
if err != nil {
return err
}
enc := json.NewEncoder(os.Stdout)
enc.SetIndent("", " ")
err = enc.Encode(profile)
return err
}
func getDepDevice(client dep.Client, args []string) error {
flagset := flag.NewFlagSet("device", flag.ExitOnError)
var (
flSerial = flagset.String("serial", "", "device serial number")
)
if err := flagset.Parse(args); err != nil {
return err
}
resp, err := client.DeviceDetails([]string{*flSerial})
if err != nil {
return err
}
if dev, ok := resp.Devices[*flSerial]; ok && dev.SerialNumber != "" {
enc := json.NewEncoder(os.Stdout)
enc.SetIndent("", " ")
err = enc.Encode(dev)
return err
}
return nil
}

View File

@@ -25,6 +25,8 @@ func main() {
run = serve
case "deptoken":
run = depToken
case "get":
run = getResource
default:
usage()
os.Exit(1)
@@ -41,6 +43,7 @@ func usage() error {
Available Commands:
serve
get
deptoken
version

View File

@@ -432,11 +432,10 @@ func topicFromCert(cert *x509.Certificate) (string, error) {
// the CA.
const scepCACertName = "/var/db/micromdm/SCEPCACert.pem"
func (c *config) setupDEPSync() {
func (c *config) depClient() (dep.Client, error) {
if c.err != nil {
return
return nil, c.err
}
// depsim config
depsim := true
conf := &dep.Config{
@@ -472,8 +471,7 @@ func (c *config) setupDEPSync() {
return nil
})
if err != nil {
c.err = err
return
return nil, err
}
depServerURL := "https://mdmenrollment.apple.com"
@@ -481,6 +479,19 @@ func (c *config) setupDEPSync() {
depServerURL = "http://dep.micromdm.io:9000"
}
client, err := dep.NewClient(conf, dep.ServerURL(depServerURL))
if err != nil {
return nil, err
}
return client, nil
}
func (c *config) setupDEPSync() {
if c.err != nil {
return
}
client, err := c.depClient()
if err != nil {
c.err = err
return