Refactor MDM service to return a payload from check-ins (#764)

* Refactor MDM service to return a payload from check-ins

* Documented public methods, add documentation to main service interface

* Remove interface-implementing comments
This commit is contained in:
Jesse Peterson
2021-07-01 16:13:39 -07:00
committed by GitHub
parent 1dfa0a8fd0
commit 4e684a40d2
5 changed files with 32 additions and 23 deletions

View File

@@ -85,32 +85,32 @@ func (mw *udidCertAuthMiddleware) Acknowledge(ctx context.Context, req mdm.Ackno
return mw.next.Acknowledge(ctx, req)
}
func (mw *udidCertAuthMiddleware) Checkin(ctx context.Context, req mdm.CheckinEvent) error {
func (mw *udidCertAuthMiddleware) Checkin(ctx context.Context, req mdm.CheckinEvent) ([]byte, error) {
// only validate device enrollments, user enrollments should be separate.
if req.Command.EnrollmentID != "" {
return mw.next.Checkin(ctx, req)
}
devcert, err := mdm.DeviceCertificateFromContext(ctx)
if err != nil {
return errors.Wrap(err, "error retrieving device certificate")
return nil, errors.Wrap(err, "error retrieving device certificate")
}
switch req.Command.MessageType {
case "Authenticate":
// unconditionally save the cert hash on Authenticate message
if err := mw.store.SaveUDIDCertHash([]byte(req.Command.UDID), hashCertRaw(devcert.Raw)); err != nil {
return err
return nil, err
}
return mw.next.Checkin(ctx, req)
case "TokenUpdate", "CheckOut":
matched, err := mw.validateUDIDCertAuth([]byte(req.Command.UDID), hashCertRaw(devcert.Raw))
if err != nil {
return err
return nil, err
}
if !matched && !mw.warnOnly {
return errors.New("device certifcate UDID mismatch")
return nil, errors.New("device certifcate UDID mismatch")
}
return mw.next.Checkin(ctx, req)
default:
return errors.Errorf("unknown checkin message type %s", req.Command.MessageType)
return nil, errors.Errorf("unknown checkin message type %s", req.Command.MessageType)
}
}