diff --git a/changelogs/fragments/py3-jira.yaml b/changelogs/fragments/py3-jira.yaml new file mode 100644 index 0000000000..09846e6b9a --- /dev/null +++ b/changelogs/fragments/py3-jira.yaml @@ -0,0 +1,3 @@ +bugfixes: +- jira module - Fix bytes/text handling for base64 encoding authentication tokens + https://github.com/ansible/ansible/pull/33862 diff --git a/lib/ansible/modules/web_infrastructure/jira.py b/lib/ansible/modules/web_infrastructure/jira.py index 8701421912..9d84bb7ee5 100644 --- a/lib/ansible/modules/web_infrastructure/jira.py +++ b/lib/ansible/modules/web_infrastructure/jira.py @@ -233,6 +233,7 @@ EXAMPLES = """ import base64 import json import sys +from ansible.module_utils._text import to_text, to_bytes from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.urls import fetch_url @@ -249,7 +250,8 @@ def request(url, user, passwd, timeout, data=None, method=None): # resulting in unexpected results. To work around this we manually # inject the basic-auth header up-front to ensure that JIRA treats # the requests as authorized for this user. - auth = base64.encodestring('%s:%s' % (user, passwd)).replace('\n', '') + auth = to_text(base64.b64encode(to_bytes('{0}:{1}'.format(user, passwd), errors='surrogate_or_strict'))) + response, info = fetch_url(module, url, data=data, method=method, timeout=timeout, headers={'Content-Type': 'application/json', 'Authorization': "Basic %s" % auth})