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:
 | 
			
		||||
                        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)
 | 
			
		||||
            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)
 | 
			
		||||
        except KeyError:
 | 
			
		||||
            return Response('Not enough data provided', 400)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue