Skip to content

Commit

Permalink
Fix munki & monolith enrollment
Browse files Browse the repository at this point in the history
  • Loading branch information
np5 committed Jul 9, 2018
1 parent 93652ab commit a000fb3
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 6 deletions.
43 changes: 43 additions & 0 deletions tests/monolith/test_setup_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import json
import uuid
from django.core.urlresolvers import reverse
from django.test import TestCase
from django.utils.crypto import get_random_string
from zentral.contrib.inventory.models import MetaBusinessUnit, EnrollmentSecret
from zentral.contrib.monolith.models import Configuration, EnrolledMachine, Enrollment, Manifest


class MonolithSetupViewsTestCase(TestCase):
def post_as_json(self, url_name, data):
return self.client.post(reverse("monolith:{}".format(url_name)),
json.dumps(data),
content_type="application/json")

def create_enrollment(self):
mbu = MetaBusinessUnit.objects.create(name=get_random_string(64))
mbu.create_enrollment_business_unit()
secret = EnrollmentSecret.objects.create(meta_business_unit=mbu)
configuration = Configuration.objects.create(name=get_random_string(64))
manifest = Manifest.objects.create(meta_business_unit=mbu)
return Enrollment.objects.create(secret=secret, manifest=manifest, configuration=configuration)

def test_enroll_view(self):
enrollment = self.create_enrollment()
response = self.post_as_json("enroll", {})
self.assertEqual(response.status_code, 400)
machine_serial_number = get_random_string(32)
response = self.post_as_json("enroll", {"secret": "yolo",
"uuid": str(uuid.uuid4()),
"serial_number": machine_serial_number})
self.assertEqual(response.status_code, 400)
response = self.post_as_json("enroll", {"secret": enrollment.secret.secret,
"uuid": str(uuid.uuid4()),
"serial_number": machine_serial_number})
self.assertEqual(response.status_code, 200)
self.assertEqual(response['Content-Type'], "application/json")
json_response = response.json()
self.assertCountEqual(["token"], json_response.keys())
token = json_response["token"]
enrolled_machine = EnrolledMachine.objects.get(enrollment=enrollment,
serial_number=machine_serial_number)
self.assertEqual(token, enrolled_machine.token)
10 changes: 5 additions & 5 deletions zentral/contrib/monolith/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,16 +114,16 @@ def get_context_data(self, **kwargs):
class EnrollView(View):
def post(self, request, *args, **kwargs):
user_agent, ip = user_agent_and_ip_address_from_request(request)
request_json = json.load(request)
secret = request_json["secret"]
serial_number = request_json["serial_number"]
uuid = request_json["uuid"]
try:
request_json = json.loads(request.body.decode("utf-8"))
secret = request_json["secret"]
serial_number = request_json["serial_number"]
uuid = request_json["uuid"]
es_request = verify_enrollment_secret(
"monolith_enrollment", secret,
user_agent, ip, serial_number, uuid
)
except EnrollmentSecretVerificationFailed as error:
except (KeyError, ValueError, EnrollmentSecretVerificationFailed):
raise SuspiciousOperation
else:
# get or create enrolled machine
Expand Down
2 changes: 1 addition & 1 deletion zentral/contrib/munki/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ class EnrollView(View):
def post(self, request, *args, **kwargs):
user_agent, ip = user_agent_and_ip_address_from_request(request)
try:
request_json = json.load(request)
request_json = json.loads(request.body.decode("utf-8"))
secret = request_json["secret"]
serial_number = request_json["serial_number"]
uuid = request_json["uuid"]
Expand Down

0 comments on commit a000fb3

Please sign in to comment.