wallaroo.user

 1import json
 2from typing import TYPE_CHECKING, Any, Dict
 3
 4import requests
 5
 6from .version import _user_agent
 7
 8if TYPE_CHECKING:
 9    # Imports that happen below in methods to fix circular import dependency
10    # issues need to also be specified here to satisfy mypy type checking.
11    pass
12
13
14class User:
15    """A platform User."""
16
17    def __init__(self, client, data: Dict[str, Any], standalone=False) -> None:
18        self.client = client
19        self._id = data["id"]
20        self._email = data["email"] if "email" in data else "admin@keycloak"
21        self._username = data["username"]
22        self._enabled = data["enabled"]
23        self._createdTimeastamp = data["createdTimestamp"]
24
25    def __repr__(self):
26        return f"""User({{"id": "{self.id()}", "email": "{self.email()}", "username": "{self.username()}", "enabled": "{self.enabled()})"""
27
28    def id(self) -> str:
29        return self._id
30
31    def email(self) -> str:
32        return self._email
33
34    def username(self) -> str:
35        return self._username
36
37    def enabled(self) -> bool:
38        return self._enabled
39
40    @staticmethod
41    def list_users(
42        auth,
43        api_endpoint: str = "http://api-lb:8080",
44        auth_endpoint: str = "http://api-lb:8080",
45    ):
46        headers = {
47            "authorization": auth._bearer_token_str(),
48            "user-agent": _user_agent,
49        }
50        users = requests.post(
51            f"{api_endpoint}/v1/api/users/query", data="{}", headers=headers
52        )
53        if users.status_code > 299:
54            raise Exception("Failed to list exiting users.")
55        return users.json()["users"].values()
56
57    @staticmethod
58    def invite_user(
59        email,
60        password,
61        auth,
62        api_endpoint: str = "http://api-lb:8080",
63        auth_endpoint: str = "http://api-lb:8080",
64    ):
65        # TODO: Refactor User.list_users() here when this stabilizes
66
67        headers = {
68            "authorization": auth._bearer_token_str(),
69            "user-agent": _user_agent,
70        }
71        users = requests.post(
72            f"{api_endpoint}/v1/api/users/query", data=json.dumps({}), headers=headers
73        )
74        if users.status_code > 299:
75            print(users.content)
76            print(users.text)
77            raise Exception("Failed to list exiting users.")
78        existing_users = users.json()["users"].values()
79        user_present = [user for user in existing_users if user["username"] == email]
80        if len(user_present) == 0:
81            data = {"email": email}
82            if password:
83                data["password"] = password
84            user = response = users = requests.post(
85                f"{api_endpoint}/v1/api/users/invite",
86                json=data,
87                headers=headers,
88            ).json()
89            return user
90        else:
91            return user_present[0]
class User:
15class User:
16    """A platform User."""
17
18    def __init__(self, client, data: Dict[str, Any], standalone=False) -> None:
19        self.client = client
20        self._id = data["id"]
21        self._email = data["email"] if "email" in data else "admin@keycloak"
22        self._username = data["username"]
23        self._enabled = data["enabled"]
24        self._createdTimeastamp = data["createdTimestamp"]
25
26    def __repr__(self):
27        return f"""User({{"id": "{self.id()}", "email": "{self.email()}", "username": "{self.username()}", "enabled": "{self.enabled()})"""
28
29    def id(self) -> str:
30        return self._id
31
32    def email(self) -> str:
33        return self._email
34
35    def username(self) -> str:
36        return self._username
37
38    def enabled(self) -> bool:
39        return self._enabled
40
41    @staticmethod
42    def list_users(
43        auth,
44        api_endpoint: str = "http://api-lb:8080",
45        auth_endpoint: str = "http://api-lb:8080",
46    ):
47        headers = {
48            "authorization": auth._bearer_token_str(),
49            "user-agent": _user_agent,
50        }
51        users = requests.post(
52            f"{api_endpoint}/v1/api/users/query", data="{}", headers=headers
53        )
54        if users.status_code > 299:
55            raise Exception("Failed to list exiting users.")
56        return users.json()["users"].values()
57
58    @staticmethod
59    def invite_user(
60        email,
61        password,
62        auth,
63        api_endpoint: str = "http://api-lb:8080",
64        auth_endpoint: str = "http://api-lb:8080",
65    ):
66        # TODO: Refactor User.list_users() here when this stabilizes
67
68        headers = {
69            "authorization": auth._bearer_token_str(),
70            "user-agent": _user_agent,
71        }
72        users = requests.post(
73            f"{api_endpoint}/v1/api/users/query", data=json.dumps({}), headers=headers
74        )
75        if users.status_code > 299:
76            print(users.content)
77            print(users.text)
78            raise Exception("Failed to list exiting users.")
79        existing_users = users.json()["users"].values()
80        user_present = [user for user in existing_users if user["username"] == email]
81        if len(user_present) == 0:
82            data = {"email": email}
83            if password:
84                data["password"] = password
85            user = response = users = requests.post(
86                f"{api_endpoint}/v1/api/users/invite",
87                json=data,
88                headers=headers,
89            ).json()
90            return user
91        else:
92            return user_present[0]

A platform User.

User(client, data: Dict[str, Any], standalone=False)
18    def __init__(self, client, data: Dict[str, Any], standalone=False) -> None:
19        self.client = client
20        self._id = data["id"]
21        self._email = data["email"] if "email" in data else "admin@keycloak"
22        self._username = data["username"]
23        self._enabled = data["enabled"]
24        self._createdTimeastamp = data["createdTimestamp"]
def id(self) -> str:
29    def id(self) -> str:
30        return self._id
def email(self) -> str:
32    def email(self) -> str:
33        return self._email
def username(self) -> str:
35    def username(self) -> str:
36        return self._username
def enabled(self) -> bool:
38    def enabled(self) -> bool:
39        return self._enabled
@staticmethod
def list_users( auth, api_endpoint: str = 'http://api-lb:8080', auth_endpoint: str = 'http://api-lb:8080'):
41    @staticmethod
42    def list_users(
43        auth,
44        api_endpoint: str = "http://api-lb:8080",
45        auth_endpoint: str = "http://api-lb:8080",
46    ):
47        headers = {
48            "authorization": auth._bearer_token_str(),
49            "user-agent": _user_agent,
50        }
51        users = requests.post(
52            f"{api_endpoint}/v1/api/users/query", data="{}", headers=headers
53        )
54        if users.status_code > 299:
55            raise Exception("Failed to list exiting users.")
56        return users.json()["users"].values()
@staticmethod
def invite_user( email, password, auth, api_endpoint: str = 'http://api-lb:8080', auth_endpoint: str = 'http://api-lb:8080'):
58    @staticmethod
59    def invite_user(
60        email,
61        password,
62        auth,
63        api_endpoint: str = "http://api-lb:8080",
64        auth_endpoint: str = "http://api-lb:8080",
65    ):
66        # TODO: Refactor User.list_users() here when this stabilizes
67
68        headers = {
69            "authorization": auth._bearer_token_str(),
70            "user-agent": _user_agent,
71        }
72        users = requests.post(
73            f"{api_endpoint}/v1/api/users/query", data=json.dumps({}), headers=headers
74        )
75        if users.status_code > 299:
76            print(users.content)
77            print(users.text)
78            raise Exception("Failed to list exiting users.")
79        existing_users = users.json()["users"].values()
80        user_present = [user for user in existing_users if user["username"] == email]
81        if len(user_present) == 0:
82            data = {"email": email}
83            if password:
84                data["password"] = password
85            user = response = users = requests.post(
86                f"{api_endpoint}/v1/api/users/invite",
87                json=data,
88                headers=headers,
89            ).json()
90            return user
91        else:
92            return user_present[0]