mirror of
https://github.com/ansible/awx.git
synced 2026-03-13 15:09:32 -02:30
Merge pull request #6399 from ryanpetrello/fix-6390
fix a bug in POST /api/v1/credential detection of Vault payloads
This commit is contained in:
@@ -2038,6 +2038,7 @@ class CredentialSerializer(BaseSerializer):
|
||||
return ret
|
||||
|
||||
def to_internal_value(self, data):
|
||||
# TODO: remove when API v1 is removed
|
||||
if 'credential_type' not in data:
|
||||
# If `credential_type` is not provided, assume the payload is a
|
||||
# v1 credential payload that specifies a `kind` and a flat list
|
||||
@@ -2054,6 +2055,21 @@ class CredentialSerializer(BaseSerializer):
|
||||
{'credential_type': credential_type}.items() +
|
||||
super(CredentialSerializer, self).to_internal_value(data).items()
|
||||
)
|
||||
|
||||
# Make a set of the keys in the POST/PUT payload
|
||||
# - Subtract real fields (name, organization, inputs)
|
||||
# - Subtract virtual v1 fields defined on the determined credential
|
||||
# type (username, password, etc...)
|
||||
# - Any leftovers are invalid for the determined credential type
|
||||
valid_fields = set(super(CredentialSerializer, self).get_fields().keys())
|
||||
valid_fields.update(V2CredentialFields().get_fields().keys())
|
||||
valid_fields.update(['kind', 'cloud'])
|
||||
|
||||
for field in set(data.keys()) - valid_fields - set(credential_type.defined_fields):
|
||||
if data.get(field):
|
||||
raise serializers.ValidationError(
|
||||
{"detail": _("'%s' is not a valid field for %s") % (field, credential_type.name)}
|
||||
)
|
||||
value.pop('kind', None)
|
||||
return value
|
||||
return super(CredentialSerializer, self).to_internal_value(data)
|
||||
|
||||
Reference in New Issue
Block a user