mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-09 11:46:49 +00:00
- Computes API: mark password as write_only in ComputeSerializer, restrict ComputeViewSet and architectures to IsAdminUser. - Instances API: enforce user ownership tenant isolation in InstanceViewSet.list, restrict MigrateViewSet and CreateInstanceViewSet to IsAdminUser, require IsAdminUser for mutating FlavorViewSet. - Storage, Network, and Interface APIs: restrict StorageViewSet, VolumeViewSet, NetworkViewSet, InterfaceViewSet to IsAdminUser. - AppSettings & NWFilters: protect appsettings and nwfilter views with @superuser_only (403 Forbidden for non-superusers). - noVNC Console: sign tokens with TimestampSigner (salt='console.novnc', max_age=600), verify signature and user authorization in novncd with backward-compatible fallback for debug/test mode. - Accounts: avoid hardcoded default admin password; generate cryptographically secure random password unless ADMIN_PASSWORD is set (preserve 'admin' in test runner). - gstfsd daemon: bind to 127.0.0.1 by default instead of 0.0.0.0. - Tests: added comprehensive test coverage for API security, token expiration/rejection, and view permissions (132 tests passing).
60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
from computes.models import Compute
|
|
from rest_framework import permissions, viewsets
|
|
from rest_framework.response import Response
|
|
from vrtManager.create import wvmCreate
|
|
|
|
from .serializers import ComputeSerializer
|
|
|
|
|
|
class ComputeViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows computes to be viewed or edited.
|
|
"""
|
|
|
|
queryset = Compute.objects.all().order_by("name")
|
|
serializer_class = ComputeSerializer
|
|
permission_classes = [permissions.IsAdminUser]
|
|
|
|
|
|
class ComputeArchitecturesView(viewsets.ViewSet):
|
|
permission_classes = [permissions.IsAdminUser]
|
|
|
|
def list(self, request, compute_pk=None):
|
|
"""
|
|
Return a list of supported host architectures.
|
|
"""
|
|
compute = Compute.objects.get(pk=compute_pk)
|
|
conn = wvmCreate(
|
|
compute.hostname,
|
|
compute.login,
|
|
compute.password,
|
|
compute.type,
|
|
)
|
|
return Response(conn.get_hypervisors_machines())
|
|
|
|
def retrieve(self, request, compute_pk=None, pk=None):
|
|
compute = Compute.objects.get(pk=compute_pk)
|
|
conn = wvmCreate(
|
|
compute.hostname,
|
|
compute.login,
|
|
compute.password,
|
|
compute.type,
|
|
)
|
|
return Response(conn.get_machine_types(pk))
|
|
|
|
|
|
class ComputeMachinesView(viewsets.ViewSet):
|
|
permission_classes = [permissions.IsAdminUser]
|
|
|
|
def list(self, request, compute_pk=None, archs_pk=None):
|
|
"""
|
|
Return a list of supported host architectures.
|
|
"""
|
|
compute = Compute.objects.get(pk=compute_pk)
|
|
conn = wvmCreate(
|
|
compute.hostname,
|
|
compute.login,
|
|
compute.password,
|
|
compute.type,
|
|
)
|
|
return Response(conn.get_machine_types(archs_pk))
|