remove old mesh/firmware API
This commit is contained in:
parent
7a95d74fd6
commit
6205ac1431
2 changed files with 0 additions and 92 deletions
|
@ -21,7 +21,6 @@ from c3nav.mapdata.api import (AccessRestrictionGroupViewSet, AccessRestrictionV
|
|||
from c3nav.mapdata.newapi.map import map_api_router
|
||||
from c3nav.mapdata.newapi.mapdata import mapdata_api_router
|
||||
from c3nav.mapdata.utils.user import can_access_editor
|
||||
from c3nav.mesh.api import FirmwareViewSet
|
||||
from c3nav.mesh.newapi import mesh_api_router
|
||||
from c3nav.routing.api import RoutingViewSet
|
||||
from c3nav.routing.newapi.positioning import positioning_api_router
|
||||
|
@ -76,7 +75,6 @@ router.register(r'editor', EditorViewSet, basename='editor')
|
|||
router.register(r'changesets', ChangeSetViewSet)
|
||||
router.register(r'session', SessionViewSet, basename='session')
|
||||
|
||||
router.register(r'firmwares', FirmwareViewSet, basename='firmware')
|
||||
|
||||
|
||||
class APIRoot(GenericAPIView):
|
||||
|
|
|
@ -1,90 +0,0 @@
|
|||
import hashlib
|
||||
import json
|
||||
|
||||
from django.db import transaction
|
||||
from rest_framework.authentication import SessionAuthentication
|
||||
from rest_framework.exceptions import ParseError, PermissionDenied
|
||||
from rest_framework.mixins import CreateModelMixin
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.status import HTTP_201_CREATED
|
||||
from rest_framework.viewsets import ReadOnlyModelViewSet
|
||||
|
||||
from c3nav.control.models import UserPermissions
|
||||
from c3nav.mesh.dataformats import ChipType
|
||||
from c3nav.mesh.models import FirmwareVersion
|
||||
|
||||
|
||||
class FirmwareViewSet(CreateModelMixin, ReadOnlyModelViewSet):
|
||||
"""
|
||||
List and download firmwares, ordered by last update descending. Use ?offset= to specify an offset.
|
||||
Don't forget to set X-Csrftoken for POST requests!
|
||||
"""
|
||||
queryset = FirmwareVersion.objects.all()
|
||||
|
||||
def get_queryset(self):
|
||||
# todo: permissions
|
||||
return FirmwareVersion.objects.all()
|
||||
|
||||
def _list(self, request, qs):
|
||||
offset = 0
|
||||
if 'offset' in request.GET:
|
||||
if not request.GET['offset'].isdigit():
|
||||
raise ParseError('offset has to be a positive integer.')
|
||||
offset = int(request.GET['offset'])
|
||||
return Response([obj.serialize() for obj in qs.order_by('-created')[offset:offset+20]])
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
return self._list(request, self.get_queryset())
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
|
||||
# todo: this should probably be tested
|
||||
if not isinstance(request._auth, UserPermissions):
|
||||
# check only for not-secret auth
|
||||
SessionAuthentication().enforce_csrf(request)
|
||||
|
||||
if not request.user.is_superuser:
|
||||
# todo: make this proper
|
||||
raise PermissionDenied()
|
||||
|
||||
# todo: permissions
|
||||
try:
|
||||
with transaction.atomic():
|
||||
version_data = json.loads(request.data["version"])
|
||||
|
||||
version = FirmwareVersion.objects.create(
|
||||
project_name=version_data["project_name"],
|
||||
version=version_data["version"],
|
||||
idf_version=version_data["idf_version"],
|
||||
uploader=request.user,
|
||||
)
|
||||
|
||||
for variant, build_data in version_data["builds"].items():
|
||||
bin_file = request.data[f"build_{variant}"]
|
||||
|
||||
if bin_file.size > 4*1024*1024:
|
||||
raise ValueError # todo: better error
|
||||
|
||||
h = hashlib.sha256()
|
||||
h.update(bin_file.open('rb').read())
|
||||
sha256_bin_file = h.hexdigest()
|
||||
|
||||
if sha256_bin_file != build_data["sha256_hash"]:
|
||||
raise ValueError
|
||||
|
||||
build = version.builds.create(
|
||||
variant=variant,
|
||||
chip=[chiptype.value for chiptype in ChipType
|
||||
if chiptype.name.replace('_', '').lower() == build_data["chip"]][0],
|
||||
sha256_hash=sha256_bin_file,
|
||||
project_description=build_data["project_description"],
|
||||
binary=bin_file,
|
||||
)
|
||||
|
||||
for board in build_data["boards"]:
|
||||
build.firmwarebuildboard_set.create(board=board)
|
||||
|
||||
except: # noqa
|
||||
raise # todo: better error handling
|
||||
|
||||
return Response(version.serialize(), status=HTTP_201_CREATED)
|
Loading…
Add table
Add a link
Reference in a new issue