Skip to content

Commit

Permalink
Add back reference to sources in Cred API. Closes #612.
Browse files Browse the repository at this point in the history
  • Loading branch information
chambridge committed Feb 7, 2018
1 parent c05a274 commit c4f1476
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 7 deletions.
4 changes: 4 additions & 0 deletions docs/swagger.yml
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,10 @@ definitions:
become_password:
type: "string"
description: "The privilege escalation password to be used when running a network scan."
sources:
type: "array"
items:
$ref: "#/definitions/SourceMin"
CredentialMin:
type: "object"
required:
Expand Down
34 changes: 27 additions & 7 deletions quipucords/api/credential/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,11 @@
from filters import mixins
from api.filters import ListFilter
from api.serializers import CredentialSerializer
from api.models import Credential
from api.models import Credential, Source

IDENTIFIER_KEY = 'id'
NAME_KEY = 'name'
SOURCES_KEY = 'sources'
PASSWORD_KEY = 'password'
BECOME_PASSWORD_KEY = 'become_password'
SSH_PASSPHRASE_KEY = 'ssh_passphrase'
Expand All @@ -47,6 +50,23 @@ def mask_credential(cred):
return cred


def format_credential(cred):
"""Update the credential with sources information and mask sensitive data.
:param cred: a dictionary of values that may be masked
:returns: the masked dictionary if it contains sensitive data
and added sources if present
"""
identifier = cred.get(IDENTIFIER_KEY)
if identifier:
slim_sources = Source.objects.filter(
credentials__pk=identifier).values(IDENTIFIER_KEY, NAME_KEY)
if slim_sources:
cred[SOURCES_KEY] = slim_sources

return mask_credential(cred)


class CredentialFilter(FilterSet):
"""Filter for host credentials by name."""

Expand Down Expand Up @@ -83,12 +103,12 @@ def list(self, request): # pylint: disable=unused-argument
if page is not None:
serializer = self.get_serializer(page, many=True)
for cred in serializer.data:
cred = mask_credential(cred)
cred = format_credential(cred)
return self.get_paginated_response(serializer.data)

serializer = CredentialSerializer(queryset, many=True)
for cred in serializer.data:
cred = mask_credential(cred)
cred = format_credential(cred)
return Response(serializer.data)

def create(self, request, *args, **kwargs):
Expand All @@ -97,15 +117,15 @@ def create(self, request, *args, **kwargs):
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
cred = mask_credential(serializer.data)
cred = format_credential(serializer.data)
return Response(cred, status=status.HTTP_201_CREATED,
headers=headers)

def retrieve(self, request, pk=None): # pylint: disable=unused-argument
"""Get a host credential."""
host_cred = get_object_or_404(self.queryset, pk=pk)
serializer = CredentialSerializer(host_cred)
cred = mask_credential(serializer.data)
cred = format_credential(serializer.data)
return Response(cred)

# pylint: disable=unused-argument
Expand All @@ -117,7 +137,7 @@ def update(self, request, *args, **kwargs):
partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
cred = mask_credential(serializer.data)
cred = format_credential(serializer.data)
return Response(cred)

def partial_update(self, request, *args, **kwargs):
Expand All @@ -128,5 +148,5 @@ def partial_update(self, request, *args, **kwargs):
partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
cred = mask_credential(serializer.data)
cred = format_credential(serializer.data)
return Response(cred)

0 comments on commit c4f1476

Please sign in to comment.