def inner_decorator(self, *args, **kwargs): from ralph.account.views import HTTP403 from ralph.util import api # class-based views if args and isinstance(args[0], WSGIRequest): request = args[0] # function-based views elif self and isinstance(self, WSGIRequest): request = self # check for request in kwargs as well, just in case elif 'request' in kwargs: request = kwargs['request'] else: return HttpResponseBadRequest() user = request.user # for API views not handled by Tastypie (e.g. puppet_classifier) if user.is_anonymous(): user = api.get_user(request) if not api.is_authenticated(user, request): return HTTP403(request) profile = user.get_profile() has_perm = profile.has_perm for perm in perms: if not has_perm(perm['perm']): return HTTP403(request, perm['msg']) return func(self, *args, **kwargs)
def dhcp_config_entries(request): if not api.is_authenticated(request): return HttpResponseForbidden('API key required.') dc_names, env_names = _get_params(request) if dc_names and env_names: return HttpResponseForbidden('Only DC or ENV mode available.') data_centers = [] for dc_name in dc_names: try: dc = DataCenter.objects.get(name__iexact=dc_name) except DataCenter.DoesNotExist: return HttpResponseNotFound("Data Center `%s` does not exist." % dc_name) else: data_centers.append(dc) environments = [] for env_name in env_names: try: env = Environment.objects.get(name__iexact=env_name) except Environment.DoesNotExist: return HttpResponseNotFound("Environment `%s` does not exist." % env_name) else: environments.append(env) return HttpResponse( generate_dhcp_config_entries( data_centers=data_centers, environments=environments, disable_networks_validation=DHCP_DISABLE_NETWORKS_VALIDATION, ), content_type="text/plain", )
def dhcp_config_entries(request): if not api.is_authenticated(request): return HttpResponseForbidden('API key required.') dc_names, env_names = _get_params(request) if dc_names and env_names: return HttpResponseForbidden('Only DC or ENV mode available.') data_centers = [] for dc_name in dc_names: try: dc = DataCenter.objects.get(name__iexact=dc_name) except DataCenter.DoesNotExist: return HttpResponseNotFound( "Data Center `%s` does not exist." % dc_name ) else: data_centers.append(dc) environments = [] for env_name in env_names: try: env = Environment.objects.get(name__iexact=env_name) except Environment.DoesNotExist: return HttpResponseNotFound( "Environment `%s` does not exist." % env_name ) else: environments.append(env) return HttpResponse( generate_dhcp_config_entries( data_centers=data_centers, environments=environments, disable_networks_validation=DHCP_DISABLE_NETWORKS_VALIDATION, ), content_type="text/plain", )
def dhcp_synch(request): if not api.is_authenticated(request): return HttpResponseForbidden('API key required.') address = request.META['REMOTE_ADDR'] server, created = DHCPServer.objects.get_or_create(ip=address) server.last_synchronized = datetime.datetime.now() server.save() return HttpResponse('OK', content_type='text/plain')
def dhcp_synch(request): if not api.is_authenticated(request): return HttpResponseForbidden('API key required.') address = remote_addr(request) server = get_object_or_404(DHCPServer, ip=address) server.last_synchronized = datetime.datetime.now() server.save() return HttpResponse('OK', content_type='text/plain')
def preboot_complete_view(request): if not api.is_authenticated(request): return HttpResponseForbidden('API key required.') try: deployment = get_current_deployment(request) deployment.status = DeploymentStatus.resolved_fixed deployment.save() except (Deployment.DoesNotExist): pass return HttpResponse()
def puppet_classifier(request): if not api.is_authenticated(request): return HttpResponseForbidden("API key required.") hostname = request.GET.get("hostname", "").strip() qs = ( Device.objects.filter(Q(name=hostname) | Q(ipaddress__hostname=hostname)) .distinct() .select_related( *( ["venture", "department", "venture_role", "model", "model__group"] + ["__".join(["parent"] * i) for i in range(1, 6)] ) ) ) for device in qs[:1]: break else: raise Http404("Hostname %s not found" % hostname) location = device.get_position() or "" node = device.parent visited = set() while node and node not in visited: visited.add(node) name = node.name or "?" location = name + "__" + location if location else name node = node.parent department = None owners = [] if device.venture: department = device.venture.get_department() ownerships = device.venture.all_ownerships() if hasattr(ownerships, "select_related"): owners = ownerships.select_related() response = { "name": device.name, "device_id": device.id, "venture": device.venture.symbol if device.venture else None, "role": device.venture_role.full_name.replace(" / ", "__") if device.venture_role else None, "department": department.name if department else None, "owners": [ {"first_name": o.owner.first_name, "last_name": o.owner.last_name, "email": o.owner.email, "type": o.type} for o in owners ], "verified": device.verified, "last_seen": device.last_seen.strftime("%Y-%m-%dT%H:%M:%S"), "model": device.model.name if device.model else None, "model_group": device.model.group.name if (device.model and device.model.group) else None, "location": location, "properties": device.venture_role.get_properties(device) if device.venture_role else {}, "property_types": device.venture_role.get_property_types(device) if device.venture_role else {}, "data_center": device.dc, "rack": device.rack, } return HttpResponse(json.dumps(response), content_type="application/json; charset=utf-8")
def dhcp_config_head(request): if not api.is_authenticated(request): return HttpResponseForbidden('API key required.') server_address = request.GET.get('server') if not server_address: server_address = remote_addr(request) dhcp_server = get_object_or_404(DHCPServer, ip=server_address) return HttpResponse( generate_dhcp_config_head(dhcp_server=dhcp_server, ), content_type='text/plain', )
def dhcp_config(request): if not api.is_authenticated(request): return HttpResponseForbidden('API key required.') if request.GET.get('dc'): dc = DataCenter.objects.get(name__iexact=request.GET['dc']) else: dc = None address = remote_addr(request) return HttpResponse( generate_dhcp_config(dc=dc, server_address=address), content_type="text/plain", )
def dhcp_config_head(request): if not api.is_authenticated(request): return HttpResponseForbidden('API key required.') server_address = request.GET.get('server') if not server_address: server_address = remote_addr(request) dhcp_server = get_object_or_404(DHCPServer, ip=server_address) return HttpResponse( generate_dhcp_config_head( dhcp_server=dhcp_server, ), content_type='text/plain', )
def dhcp_config(request): if not api.is_authenticated(request): return HttpResponseForbidden('API key required.') if request.GET.get('dc'): dc = DataCenter.objects.get(name__iexact=request.GET['dc']) else: dc = None with_networks = bool(request.GET.get('with_networks', False)) address = remote_addr(request) return HttpResponse( generate_dhcp_config( dc=dc, server_address=address, with_networks=with_networks, ), content_type="text/plain", )
def dhcp_config(request): if not api.is_authenticated(request): return HttpResponseForbidden('API key required.') return HttpResponse(generate_dhcp_config(), content_type="text/plain")
def puppet_classifier(request): if not api.is_authenticated(request): return HttpResponseForbidden('API key required.') hostname = request.GET.get('hostname', '').strip() qs = Device.objects.filter( Q(name=hostname) | Q(ipaddress__hostname=hostname) ).distinct().select_related(*( [ 'venture', 'department', 'venture_role', 'model', 'model__group', ] + ['__'.join(['parent'] * i) for i in range(1, 6)] )) for device in qs[:1]: break else: raise Http404('Hostname %s not found' % hostname) location = device.get_position() or '' node = device.parent visited = set() while node and node not in visited: visited.add(node) name = node.name or '?' location = name + '__' + location if location else name node = node.parent department = device.venture.get_department() response = { 'name': device.name, 'device_id': device.id, 'venture': device.venture.symbol if device.venture else None, 'role': device.venture_role.full_name.replace( ' / ', '__', ) if device.venture_role else None, 'department': department.name if department else None, 'owners': [ { 'first_name': o.owner.first_name, 'last_name': o.owner.last_name, 'email': o.owner.email, 'type': o.type, } for o in device.venture.all_ownerships().select_related('owner') ] if device.venture else [], 'verified': device.verified, 'last_seen': device.last_seen.strftime('%Y-%m-%dT%H:%M:%S'), 'model': device.model.name if device.model else None, 'model_group': device.model.group.name if ( device.model and device.model.group ) else None, 'location': location, 'properties': device.venture_role.get_properties( device, ) if device.venture_role else {}, 'property_types': device.venture_role.get_property_types( device, ) if device.venture_role else {}, 'data_center': device.dc, 'rack': device.rack, } return HttpResponse( json.dumps(response), content_type='application/json; charset=utf-8', )
def puppet_classifier(request): if not api.is_authenticated(request): return HttpResponseForbidden('API key required.') hostname = request.GET.get('hostname', '').strip() qs = Device.objects.filter( Q(name=hostname) | Q(ipaddress__hostname=hostname)).distinct().select_related(*([ 'venture', 'department', 'venture_role', 'model', 'model__group', ] + ['__'.join(['parent'] * i) for i in range(1, 6)])) for device in qs[:1]: break else: raise Http404('Hostname %s not found' % hostname) location = device.get_position() or '' node = device.parent visited = set() while node and node not in visited: visited.add(node) name = node.name or '?' location = name + '__' + location if location else name node = node.parent department = None owners = [] if device.venture: department = device.venture.get_department() ownerships = device.venture.all_ownerships() if hasattr(ownerships, 'select_related'): owners = ownerships.select_related() response = { 'name': device.name, 'device_id': device.id, 'venture': device.venture.symbol if device.venture else None, 'role': device.venture_role.full_name.replace( ' / ', '__', ) if device.venture_role else None, 'department': department.name if department else None, 'owners': [{ 'first_name': o.owner.first_name, 'last_name': o.owner.last_name, 'email': o.owner.email, 'type': o.type, } for o in owners], 'verified': device.verified, 'last_seen': device.last_seen.strftime('%Y-%m-%dT%H:%M:%S'), 'model': device.model.name if device.model else None, 'model_group': device.model.group.name if (device.model and device.model.group) else None, 'location': location, 'properties': device.venture_role.get_properties(device, ) if device.venture_role else {}, 'property_types': device.venture_role.get_property_types(device, ) if device.venture_role else {}, 'data_center': device.dc, 'rack': device.rack, } return HttpResponse( json.dumps(response), content_type='application/json; charset=utf-8', )