🚧 Update certificate management
This commit is contained in:
@@ -19,6 +19,7 @@ from app.deps import CurrentUser, require_roles
|
||||
from app.dynsec import DynsecError, dynsec_client
|
||||
from app.models import ManagementRole, MqttClientMetadata
|
||||
from app.schemas import (
|
||||
ClientIdUpdate,
|
||||
ClientRoleAssign,
|
||||
GroupIn,
|
||||
GroupMemberAssign,
|
||||
@@ -219,6 +220,38 @@ def reset_password(
|
||||
return MqttPasswordReset(username=username, password=password)
|
||||
|
||||
|
||||
@router.put("/clients/{username}/clientid", status_code=status.HTTP_204_NO_CONTENT)
|
||||
def set_client_id(
|
||||
username: str,
|
||||
body: ClientIdUpdate,
|
||||
request: Request,
|
||||
db: DbDep,
|
||||
_user: BrokerAdmin,
|
||||
):
|
||||
"""Bind (or clear) the expected client ID (spec section 11).
|
||||
|
||||
With a bound client id, connections must present exactly that id —
|
||||
preventing one device's credentials from being reused by another
|
||||
program. The broker kicks active connections when the id changes.
|
||||
"""
|
||||
_guard_mgmt_identity(username)
|
||||
clientid = body.clientid.strip() or None
|
||||
try:
|
||||
dynsec_client.set_client_id(username, clientid)
|
||||
except DynsecError as exc:
|
||||
raise HTTPException(status.HTTP_404_NOT_FOUND, str(exc)) from exc
|
||||
audit.record(
|
||||
db,
|
||||
"CLIENT_ID_BOUND" if clientid else "CLIENT_ID_CLEARED",
|
||||
request=request,
|
||||
object_type="mqtt_client",
|
||||
object_id=username,
|
||||
old_value=None,
|
||||
new_value={"clientid": clientid or ""},
|
||||
)
|
||||
return None
|
||||
|
||||
|
||||
@router.post("/clients/{username}/roles", status_code=status.HTTP_204_NO_CONTENT)
|
||||
def assign_client_role(
|
||||
username: str,
|
||||
|
||||
Reference in New Issue
Block a user