forked from micromdm/micromdm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdevice.go
73 lines (63 loc) · 1.49 KB
/
device.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package main
import (
"errors"
"flag"
"fmt"
"github.com/boltdb/bolt"
"github.com/micromdm/micromdm/device"
)
// TODO this is a temporary command to get some stuff working
// we need to remove this and add more robust/general "list/describe" commands
func dev(args []string) error {
flagset := flag.NewFlagSet("devinfo", flag.ExitOnError)
var (
flList = flagset.Bool("list", false, "list all bucket keys")
flDescribe = flagset.String("describe", "", "describe a serial")
)
flagset.Usage = usageFor(flagset, "micromdm serve [flags]")
if err := flagset.Parse(args); err != nil {
return err
}
sm := &config{}
sm.setupBolt()
db, err := device.NewDB(sm.db, nil)
if err != nil {
return err
}
if *flDescribe != "" {
err := describeDevice(db, *flDescribe)
return err
}
if *flList {
err := listDevices(db)
return err
}
return nil
}
func describeDevice(db *device.DB, serial string) error {
dev, err := db.DeviceBySerial(serial)
if err != nil {
return err
}
fmt.Printf(" udid=%s\n", dev.UDID)
fmt.Printf(" serial=%s\n", dev.SerialNumber)
fmt.Printf(" prduct_name=%s\n", dev.ProductName)
return nil
}
func listDevices(db *device.DB) error {
err := db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(device.DeviceBucket))
if b == nil {
return errors.New("no device bucket found")
}
c := b.Cursor()
for k, v := c.First(); k != nil; k, v = c.Next() {
fmt.Printf("key=%s, value=%s\n", k, v)
}
return nil
})
if err != nil {
return err
}
return nil
}