mirror of
https://github.com/micromdm/micromdm/
synced 2026-08-12 04:55:39 +08:00
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:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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":
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE devices DROP COLUMN last_query_response;
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE devices ADD COLUMN last_query_response JSONB;
|
||||
Reference in New Issue
Block a user