remove old mesh/firmware API

This commit is contained in:
Laura Klünder 2023-11-30 23:09:32 +01:00
parent 7a95d74fd6
commit 6205ac1431
2 changed files with 0 additions and 92 deletions

View file

@ -21,7 +21,6 @@ from c3nav.mapdata.api import (AccessRestrictionGroupViewSet, AccessRestrictionV
from c3nav.mapdata.newapi.map import map_api_router from c3nav.mapdata.newapi.map import map_api_router
from c3nav.mapdata.newapi.mapdata import mapdata_api_router from c3nav.mapdata.newapi.mapdata import mapdata_api_router
from c3nav.mapdata.utils.user import can_access_editor 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.mesh.newapi import mesh_api_router
from c3nav.routing.api import RoutingViewSet from c3nav.routing.api import RoutingViewSet
from c3nav.routing.newapi.positioning import positioning_api_router 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'changesets', ChangeSetViewSet)
router.register(r'session', SessionViewSet, basename='session') router.register(r'session', SessionViewSet, basename='session')
router.register(r'firmwares', FirmwareViewSet, basename='firmware')
class APIRoot(GenericAPIView): class APIRoot(GenericAPIView):

View file

@ -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)