Check if VM belongs to user against opennebula backend
This commit is contained in:
parent
63a78a537e
commit
496178f44c
1 changed files with 21 additions and 11 deletions
|
@ -26,11 +26,11 @@ from django.views.generic import (
|
|||
View, CreateView, FormView, ListView, DetailView, DeleteView,
|
||||
TemplateView, UpdateView
|
||||
)
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.renderers import JSONRenderer
|
||||
from guardian.mixins import PermissionRequiredMixin
|
||||
from oca.pool import WrongIdError
|
||||
from rest_framework.renderers import JSONRenderer
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
from stored_messages.api import mark_read
|
||||
from stored_messages.models import Message
|
||||
from stored_messages.settings import stored_messages_settings
|
||||
|
@ -1778,13 +1778,23 @@ class CheckUserVM(APIView):
|
|||
response = check_otp(user, realm, token)
|
||||
if response != 200:
|
||||
return Response('Invalid token', 403)
|
||||
uservms = VMDetail.objects.filter(user__email=email)
|
||||
if len(uservms) > 0:
|
||||
for i in range(len(uservms)):
|
||||
if uservms[i].ipv4 == ip or uservms[i].ipv6 == ip:
|
||||
manager = OpenNebulaManager()
|
||||
# not the best way to lookup vms by ip
|
||||
# TODO: make this optimal
|
||||
vms = manager.get_vms()
|
||||
users_vms = [VirtualMachineSerializer(vm).data for vm in vms
|
||||
if vm.uname == email]
|
||||
if len(users_vms) == 0:
|
||||
return Response('No VM found with the given email address',
|
||||
404)
|
||||
for vm in users_vms:
|
||||
for nic in vm.template.nics:
|
||||
if hasattr(nic, 'ip6_global'):
|
||||
if nic.ip6_global == ip:
|
||||
return Response('success', 200)
|
||||
elif hasattr(nic, 'ip'):
|
||||
if nic.ip == ip:
|
||||
return Response('success', 200)
|
||||
return Response('No VM found matching the ip address provided', 404)
|
||||
else:
|
||||
return Response('No VM found with the given email address', 404)
|
||||
except KeyError:
|
||||
return Response('Not enough data provided', 400)
|
||||
|
|
Loading…
Reference in a new issue