mirror of
https://github.com/ansible/awx.git
synced 2026-01-11 01:57:35 -03:30
this resolves an issue that causes an endless hang on with Cyberark AIM lookups when a certificate *and* key are specified the underlying issue here is that we can't rely on the underyling Python ssl implementation to *only* read from the fifo that stores the pem data *only once*; in reality, we need to just use *actual* tempfiles for stability purposes see: https://github.com/ansible/awx/issues/6986 see: https://github.com/urllib3/urllib3/issues/1880
95 lines
2.6 KiB
Python
95 lines
2.6 KiB
Python
from .plugin import CredentialPlugin, CertFiles
|
|
|
|
from urllib.parse import quote, urlencode, urljoin
|
|
|
|
from django.utils.translation import ugettext_lazy as _
|
|
import requests
|
|
|
|
aim_inputs = {
|
|
'fields': [{
|
|
'id': 'url',
|
|
'label': _('CyberArk AIM URL'),
|
|
'type': 'string',
|
|
'format': 'url',
|
|
}, {
|
|
'id': 'app_id',
|
|
'label': _('Application ID'),
|
|
'type': 'string',
|
|
'secret': True,
|
|
}, {
|
|
'id': 'client_key',
|
|
'label': _('Client Key'),
|
|
'type': 'string',
|
|
'secret': True,
|
|
'multiline': True,
|
|
}, {
|
|
'id': 'client_cert',
|
|
'label': _('Client Certificate'),
|
|
'type': 'string',
|
|
'secret': True,
|
|
'multiline': True,
|
|
}, {
|
|
'id': 'verify',
|
|
'label': _('Verify SSL Certificates'),
|
|
'type': 'boolean',
|
|
'default': True,
|
|
}],
|
|
'metadata': [{
|
|
'id': 'object_query',
|
|
'label': _('Object Query'),
|
|
'type': 'string',
|
|
'help_text': _('Lookup query for the object. Ex: Safe=TestSafe;Object=testAccountName123'),
|
|
}, {
|
|
'id': 'object_query_format',
|
|
'label': _('Object Query Format'),
|
|
'type': 'string',
|
|
'default': 'Exact',
|
|
'choices': ['Exact', 'Regexp']
|
|
}, {
|
|
'id': 'reason',
|
|
'label': _('Reason'),
|
|
'type': 'string',
|
|
'help_text': _('Object request reason. This is only needed if it is required by the object\'s policy.')
|
|
}],
|
|
'required': ['url', 'app_id', 'object_query'],
|
|
}
|
|
|
|
|
|
def aim_backend(**kwargs):
|
|
url = kwargs['url']
|
|
client_cert = kwargs.get('client_cert', None)
|
|
client_key = kwargs.get('client_key', None)
|
|
verify = kwargs['verify']
|
|
app_id = kwargs['app_id']
|
|
object_query = kwargs['object_query']
|
|
object_query_format = kwargs['object_query_format']
|
|
reason = kwargs.get('reason', None)
|
|
|
|
query_params = {
|
|
'AppId': app_id,
|
|
'Query': object_query,
|
|
'QueryFormat': object_query_format,
|
|
}
|
|
if reason:
|
|
query_params['reason'] = reason
|
|
|
|
request_qs = '?' + urlencode(query_params, quote_via=quote)
|
|
request_url = urljoin(url, '/'.join(['AIMWebService', 'api', 'Accounts']))
|
|
|
|
with CertFiles(client_cert, client_key) as cert:
|
|
res = requests.get(
|
|
request_url + request_qs,
|
|
timeout=30,
|
|
cert=cert,
|
|
verify=verify,
|
|
)
|
|
res.raise_for_status()
|
|
return res.json()['Content']
|
|
|
|
|
|
aim_plugin = CredentialPlugin(
|
|
'CyberArk AIM Central Credential Provider Lookup',
|
|
inputs=aim_inputs,
|
|
backend=aim_backend
|
|
)
|