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