1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

bitwarden lookup fix get_field (#7061)

* bitwarden lookup rewrite `get_field`

* add changelog fragment

* PEP8 add newline

* Update changelogs/fragments/7061-fix-bitwarden-get_field.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/lookup/bitwarden.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/lookup/bitwarden.py

Co-authored-by: Felix Fontein <felix@fontein.de>

* Update plugins/lookup/bitwarden.py

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Simon <simonleary@umass.edu>
Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
simonLeary42 2023-08-11 07:22:26 -04:00 committed by GitHub
parent e7a6412ec4
commit e75dc74613
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 12 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- bitwarden lookup plugin - the plugin made assumptions about the structure of a Bitwarden JSON object which may have been broken by an update in the Bitwarden API. Remove assumptions, and allow queries for general fields such as ``notes`` (https://github.com/ansible-collections/community.general/pull/7061).

View file

@ -132,20 +132,29 @@ class Bitwarden(object):
If field is None, return the whole record for each match. If field is None, return the whole record for each match.
""" """
matches = self._get_matches(search_value, search_field, collection_id) matches = self._get_matches(search_value, search_field, collection_id)
if not field:
if field in ['autofillOnPageLoad', 'password', 'passwordRevisionDate', 'totp', 'uris', 'username']:
return [match['login'][field] for match in matches]
elif not field:
return matches return matches
else: field_matches = []
custom_field_matches = [] for match in matches:
for match in matches: # if there are no custom fields, then `match` has no key 'fields'
if 'fields' in match:
custom_field_found = False
for custom_field in match['fields']: for custom_field in match['fields']:
if custom_field['name'] == field: if field == custom_field['name']:
custom_field_matches.append(custom_field['value']) field_matches.append(custom_field['value'])
if matches and not custom_field_matches: custom_field_found = True
raise AnsibleError("Custom field {field} does not exist in {search_value}".format(field=field, search_value=search_value)) break
return custom_field_matches if custom_field_found:
continue
if 'login' in match and field in match['login']:
field_matches.append(match['login'][field])
continue
if field in match:
field_matches.append(match[field])
continue
if matches and not field_matches:
raise AnsibleError("field {field} does not exist in {search_value}".format(field=field, search_value=search_value))
return field_matches
class LookupModule(LookupBase): class LookupModule(LookupBase):