Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 33 additions & 5 deletions common/emqx/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,8 @@


class EMQXClient:
def __init__(self) -> None:
def __init__(self, token: str | None = None) -> None:
self.session = requests.Session()
self.session.auth = (
settings.EMQX_API_APP_ID,
settings.EMQX_API_APP_SECRET,
)
self.base_url = settings.EMQX_API_URL.rstrip("/")
self.rule_prefix = getattr(settings, "EMQX_RULE_ID", "rabbitmq_device_messages")
self.default_rule_sql = getattr(
Expand All @@ -31,6 +27,38 @@ def __init__(self) -> None:
'SELECT * FROM "tenant/+/device/data"',
)

self.token = token
if not self.token:
username = getattr(settings, "EMQX_USERNAME")
password = getattr(settings, "EMQX_PASSWORD")
if username and password:
self.token = self.get_token(username, password)
if self.token:
self.session.headers.update({"Authorization": f"Bearer {self.token}"})
logger.debug("EMQXClient initialized with Bearer token authentication")
else:
logger.warning("EMQXClient initialized without authentication token")

def get_token(self, username: str, password: str) -> str:
try:
resp = self.session.post(
f"{self.base_url}/login",
json={"username": username, "password": password},
)
resp.raise_for_status()
payload = resp.json()
token = payload.get("token")
if not token:
raise ValueError("No token returned from EMQX login endpoint")

return token
except requests.HTTPError as e:
logger.error(f"Failed to authenticate with EMQX: {str(e)}")
raise
except Exception as e:
logger.error(f"Error getting EMQX token for user: {e}")
raise

def _log_and_raise(self, resp: requests.Response) -> None:
try:
payload = resp.json()
Expand Down
3 changes: 3 additions & 0 deletions common/rabitmq/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from .rabbitmq_provisioner import RabbitMQProvisioner, RabbitMQProvisionerError

__all__ = ["RabbitMQProvisioner", "RabbitMQProvisionerError"]
Loading