connect service Acknowledge updates information in devices table for QueryResponses

devices datastore updates QueryResponses into json column `last_query_response`, and some other main attributes into the devices table.
add migration to support column `last_query_response`.
This commit is contained in:
Mosen
2016-06-22 18:46:16 +10:00
parent 92dbc339b3
commit 621f5faf02
4 changed files with 65 additions and 2 deletions

View File

@@ -28,6 +28,24 @@ type service struct {
}
func (svc service) Acknowledge(ctx context.Context, req mdmConnectRequest) (int, error) {
var err error
switch req.RequestType {
case "DeviceInformation":
err = svc.ackQueryResponses(req)
if err != nil {
return 0, err
}
default:
// Need to handle the absence of RequestType in IOS8 devices
if req.QueryResponses.UDID != "" {
err = svc.ackQueryResponses(req)
if err != nil {
return 0, err
}
}
}
total, err := svc.commands.DeleteCommand(req.UDID, req.CommandUUID)
if err != nil {
return total, err
@@ -66,6 +84,6 @@ func (svc service) checkRequeue(deviceUDID string) (int, error) {
}
// Acknowledge Queries sent with DeviceInformation command
func (svc service) ackQueryResponses() (error) {
return nil
func (svc service) ackQueryResponses(req mdmConnectRequest) error {
return svc.devices.UpdateDeviceQueryResponseByUDID(req.UDID, req.QueryResponses)
}

View File

@@ -9,6 +9,8 @@ import (
"github.com/jmoiron/sqlx"
_ "github.com/lib/pq" // postgres driver
"github.com/pkg/errors"
"github.com/micromdm/mdm"
"encoding/json"
)
var (
@@ -78,6 +80,7 @@ type Datastore interface {
New(src string, d *Device) (string, error)
GetDeviceByUDID(udid string, fields ...string) (*Device, error)
GetDeviceByUUID(uuid string, fields ...string) (*Device, error)
UpdateDeviceQueryResponseByUDID(udid string, responses mdm.QueryResponses) (error)
Devices(params ...interface{}) ([]Device, error)
Save(msg string, dev *Device) error
}
@@ -118,6 +121,45 @@ func (store pgStore) GetDeviceByUUID(uuid string, fields ...string) (*Device, er
return &device, sqlx.Get(store, &device, query, uuid)
}
func (store pgStore) UpdateDeviceQueryResponseByUDID(udid string, responses mdm.QueryResponses) (error) {
jsonValue, err := json.Marshal(responses)
if (err != nil) {
return err
}
query := `UPDATE devices SET last_query_response = $2 WHERE udid = $1`
_, err = store.Exec(query, udid, jsonValue)
if (err != nil) {
return err
}
devicesStmt := `UPDATE devices SET
os_version = $2,
model = $3,
build_version = $4,
product_name = $5,
imei = $6,
meid = $7,
serial_number = $8
WHERE udid=$1`
_, err = store.Exec(
devicesStmt,
udid,
responses.OSVersion,
responses.Model,
responses.BuildVersion,
responses.ProductName,
responses.IMEI,
responses.MEID,
responses.SerialNumber,
)
return err
}
func (store pgStore) New(src string, d *Device) (string, error) {
switch src {
case "fetch":

View File

@@ -0,0 +1,2 @@
ALTER TABLE devices DROP COLUMN last_query_response;

View File

@@ -0,0 +1 @@
ALTER TABLE devices ADD COLUMN last_query_response JSONB;