diff --git a/CHANGELOG.md b/CHANGELOG.md index eacad356..84292c30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## [v1.3.2]() TBD + +* Fix URL params decoding. + ## [v1.3.1](https://github.com/micromdm/micromdm/compare/v1.3.0...master) (Unreleased) * Update base container to Alpine 3.7 (#437) diff --git a/mdm/acknowledge.go b/mdm/acknowledge.go index 3e1783df..084589cb 100644 --- a/mdm/acknowledge.go +++ b/mdm/acknowledge.go @@ -6,7 +6,6 @@ import ( "time" "github.com/go-kit/kit/endpoint" - "github.com/gorilla/mux" "github.com/groob/plist" "github.com/pkg/errors" uuid "github.com/satori/go.uuid" @@ -51,7 +50,11 @@ func (d *requestDecoder) decodeAcknowledgeRequest(ctx context.Context, r *http.R return nil, errors.Wrap(err, "unmarshal MDM Response plist") } - params := mux.Vars(r) + values := r.URL.Query() + params := make(map[string]string, len(values)) + for k, v := range values { + params[k] = v[0] + } event := AcknowledgeEvent{ ID: uuid.NewV4().String(), diff --git a/mdm/checkin.go b/mdm/checkin.go index 7eae930b..17ac9aac 100644 --- a/mdm/checkin.go +++ b/mdm/checkin.go @@ -6,7 +6,6 @@ import ( "time" "github.com/go-kit/kit/endpoint" - "github.com/gorilla/mux" "github.com/groob/plist" "github.com/pkg/errors" uuid "github.com/satori/go.uuid" @@ -84,7 +83,12 @@ func (d *requestDecoder) decodeCheckinRequest(ctx context.Context, r *http.Reque return nil, errors.Wrap(err, "unmarshal MDM Checkin Request plist") } - params := mux.Vars(r) + values := r.URL.Query() + params := make(map[string]string, len(values)) + for k, v := range values { + params[k] = v[0] + } + event := CheckinEvent{ ID: uuid.NewV4().String(), Time: time.Now().UTC(), diff --git a/mdm/checkin_test.go b/mdm/checkin_test.go new file mode 100644 index 00000000..d9390177 --- /dev/null +++ b/mdm/checkin_test.go @@ -0,0 +1,43 @@ +package mdm + +import ( + "bytes" + "context" + "net/http/httptest" + "testing" +) + +func Test_decodeCheckinRequest(t *testing.T) { + // test that url values from checkin and acknowledge requests are passed to the event. + req := httptest.NewRequest("GET", "/mdm/checkin?id=1111", bytes.NewReader([]byte(sampleCheckinRequest))) + dec := &requestDecoder{} + resp, err := dec.decodeCheckinRequest(context.Background(), req) + if err != nil { + t.Fatal(err) + } + response := resp.(checkinRequest) + if have, want := response.Event.Params["id"], "1111"; have != want { + t.Errorf("have %s, want %s", have, want) + } +} + +const sampleCheckinRequest = ` + + + + AwaitingConfiguration + + MessageType + TokenUpdate + PushMagic + AB62BB8A-7757-4130-94CC-CC8C5333D481 + Token + + YWJjZGUK + + Topic + com.apple.mgmt.External.80bb2169-e864-4685-9a96-faa734f0b978 + UDID + BC5E2DA4-7FB6-5E70-9928-4981680DAFBF + +`