diff --git a/awx/main/models/credential/__init__.py b/awx/main/models/credential/__init__.py index 5d76d735ef..1de7b76c52 100644 --- a/awx/main/models/credential/__init__.py +++ b/awx/main/models/credential/__init__.py @@ -383,6 +383,8 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique, ResourceMixin): super(Credential, self).save(*args, **kwargs) def encrypt_field(self, field, ask): + if not hasattr(self, field): + return None encrypted = encrypt_field(self, field, ask=ask) if encrypted: self.inputs[field] = encrypted diff --git a/awx/main/tests/unit/models/test_credential.py b/awx/main/tests/unit/models/test_credential.py index f71d7fa0ae..bbe2e990f2 100644 --- a/awx/main/tests/unit/models/test_credential.py +++ b/awx/main/tests/unit/models/test_credential.py @@ -15,3 +15,24 @@ def test_unique_hash_with_unicode(): credential_type_id=42 ) assert cred.unique_hash(display=True) == u'Vรคult (id=๐Ÿ‰๐Ÿ‰๐Ÿ‰)' + + +def test_custom_cred_with_empty_encrypted_field(): + ct = CredentialType( + name='My Custom Cred', + kind='custom', + inputs={ + 'fields': [{ + 'id': 'some_field', + 'label': 'My Field', + 'secret': True + }] + } + ) + cred = Credential( + id=4, + name='Testing 1 2 3', + credential_type=ct, + inputs={} + ) + assert cred.encrypt_field('some_field', None) is None