Merge branch 'feature/reversedns/check-users-vm-against-opennebula' into 'master'
Feature/reversedns/check users vm against opennebula See merge request ungleich-public/dynamicweb!707
This commit is contained in:
		
				commit
				
					
						cb244e78a1
					
				
			
		
					 2 changed files with 27 additions and 12 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,22 @@ 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 = [vm 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) | ||||
|  |  | |||
|  | @ -212,6 +212,12 @@ class OpenNebulaManager(): | |||
|                 'Could not connect via client, using oneadmin instead') | ||||
|             try: | ||||
|                 vm_pool = oca.VirtualMachinePool(self.oneadmin_client) | ||||
|                 if infoextended: | ||||
|                     vm_pool.infoextended( | ||||
|                         filter=-1,  # User's resources and any of his groups | ||||
|                         vm_state=-1  # Look for VMs in any state, except DONE | ||||
|                     ) | ||||
|                 else: | ||||
|                     vm_pool.info(filter=-2) | ||||
|                 return vm_pool | ||||
|             except: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue