1""" 2Connection library for GitHub 3""" 4 5 6import logging 7 8import salt.utils.http 9import salt.utils.json 10 11log = logging.getLogger(__name__) 12 13 14def get_user_pubkeys(users): 15 """ 16 Retrieve a set of public keys from GitHub for the specified list of users. 17 Expects input in list format. Optionally, a value in the list may be a dict 18 whose value is a list of key IDs to be returned. If this is not done, then 19 all keys will be returned. 20 21 Some example data structures that coupld be passed in would look like: 22 23 .. code_block:: yaml 24 25 ['user1', 'user2', 'user3'] 26 27 [ 28 'user1': [ 29 '12345', 30 '67890', 31 ], 32 'user2', 33 'user3', 34 ] 35 """ 36 if not isinstance(users, list): 37 return {"Error": "A list of users is expected"} 38 39 ret = {} 40 for user in users: 41 key_ids = [] 42 if isinstance(user, dict): 43 tmp_user = next(iter(user.keys())) 44 key_ids = user[tmp_user] 45 user = tmp_user 46 47 url = "https://api.github.com/users/{}/keys".format(user) 48 result = salt.utils.http.query( 49 url, 50 "GET", 51 decode=False, 52 text=True, 53 ) 54 55 keys = salt.utils.json.loads(result["text"]) 56 57 ret[user] = {} 58 for key in keys: 59 if key_ids: 60 if str(key["id"]) in key_ids: 61 ret[user][key["id"]] = key["key"] 62 else: 63 ret[user][key["id"]] = key["key"] 64 65 return ret 66