61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
from django.http import JsonResponse, Http404
|
|
from django.views.generic.base import TemplateView
|
|
from device.models import Device
|
|
|
|
|
|
class PublicDeviceWebView(TemplateView):
|
|
template_name = "device_web.html"
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
self.pk = kwargs['pk']
|
|
self.object = Device(id=self.pk)
|
|
|
|
if not self.object.last_evidence:
|
|
raise Http404
|
|
|
|
if self.request.headers.get('Accept') == 'application/json':
|
|
return self.get_json_response()
|
|
return super().get(request, *args, **kwargs)
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
self.object.initial()
|
|
context.update({
|
|
'object': self.object
|
|
})
|
|
return context
|
|
|
|
@property
|
|
def public_fields(self):
|
|
return {
|
|
'id': self.object.id,
|
|
'shortid': self.object.shortid,
|
|
'uuids': self.object.uuids,
|
|
'hids': self.object.hids,
|
|
'components': self.remove_serial_number_from(self.object.components),
|
|
}
|
|
|
|
@property
|
|
def authenticated_fields(self):
|
|
return {
|
|
'serial_number': self.object.serial_number,
|
|
'components': self.object.components,
|
|
}
|
|
|
|
def remove_serial_number_from(self, components):
|
|
for component in components:
|
|
if 'serial_number' in component:
|
|
del component['SerialNumber']
|
|
return components
|
|
|
|
def get_device_data(self):
|
|
data = self.public_fields
|
|
if self.request.user.is_authenticated:
|
|
data.update(self.authenticated_fields)
|
|
return data
|
|
|
|
def get_json_response(self):
|
|
device_data = self.get_device_data()
|
|
return JsonResponse(device_data)
|
|
|