diff --git a/Makefile b/Makefile index aa1bb04..678232a 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # Image name and tag IMAGE_NAME := amqtt IMAGE_TAG := latest -VERSION_TAG := 0.11.3-rc.1 +VERSION_TAG := 0.11.3 REGISTRY := amqtt/$(IMAGE_NAME) # Platforms to build for diff --git a/README.md b/README.md index 6dbec8a..6e5673e 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,21 @@ ## Features - Full set of [MQTT 3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html) protocol specifications -- Communication over TCP and/or websocket, including support for SSL/TLS +- Communication over multiple TCP and/or websocket ports, including support for SSL/TLS - Support QoS 0, QoS 1 and QoS 2 messages flow - Client auto-reconnection on network lost -- Custom functionality expansion; plugins included: authentication, `$SYS` topic publishing, session persistence + +- Plugin framework for functionality expansion; included plugins: + - `$SYS` topic publishing + - AWS IOT-style shadow states + - x509 certificate authentication (including cli cert creation) + - Secure file-based password authentication + - Configuration-based topic authorization + - MySQL, Postgres & SQLite user and/or topic auth (including cli manager) + - External server (HTTP) user and/or topic auth + - LDAP user and/or topic auth + - JWT user and/or topic auth + - Fail over session persistence ## Installation diff --git a/amqtt/__init__.py b/amqtt/__init__.py index 64d1c91..a7b71f4 100644 --- a/amqtt/__init__.py +++ b/amqtt/__init__.py @@ -1,3 +1,3 @@ """INIT.""" -__version__ = "0.11.3-rc.1" +__version__ = "0.11.3" diff --git a/amqtt/adapters.py b/amqtt/adapters.py index d427ad3..62ee96a 100644 --- a/amqtt/adapters.py +++ b/amqtt/adapters.py @@ -217,6 +217,9 @@ class BufferWriter(WriterAdapter): This adapter simply adapts writing to a byte buffer. """ + def get_ssl_info(self) -> ssl.SSLObject | None: + return None + def __init__(self, buffer: bytes = b"") -> None: self._stream = io.BytesIO(buffer) diff --git a/docs/changelog.md b/docs/changelog.md index 6dd69d2..e969414 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,29 @@ # Changelog +## 0.11.3 + +* Structural elements for the 0.11.3 release https://github.com/Yakifo/amqtt/pull/265 +* Release Candidate Branch for 0.11.3 https://github.com/Yakifo/amqtt/pull/272 +* update the configuration for the broker running at test.amqtt.io https://github.com/Yakifo/amqtt/pull/271 +* Improved broker script logging https://github.com/Yakifo/amqtt/pull/277 +* test.amqtt.io dashboard cleanup https://github.com/Yakifo/amqtt/pull/278 +* Structured broker and client configurations https://github.com/Yakifo/amqtt/pull/269 +* Determine auth & topic access via external http server https://github.com/Yakifo/amqtt/pull/262 +* Plugin: authentication against a relational database https://github.com/Yakifo/amqtt/pull/280 +* Fixes #247 : expire disconnected sessions https://github.com/Yakifo/amqtt/pull/279 +* Expanded structure for plugin documentation https://github.com/Yakifo/amqtt/pull/281 +* Yakifo/amqtt#120 confirms : validate example is functioning https://github.com/Yakifo/amqtt/pull/284 +* Yakifo/amqtt#39 : adding W0718 'broad exception caught' https://github.com/Yakifo/amqtt/pull/285 +* Documentation improvement for 0.11.3 https://github.com/Yakifo/amqtt/pull/286 +* Plugin naming convention https://github.com/Yakifo/amqtt/pull/288 +* embed amqtt into an existing server https://github.com/Yakifo/amqtt/pull/283 +* Plugin: rebuild of session persistence https://github.com/Yakifo/amqtt/pull/256 +* Plugin: determine authentication based on X509 certificates https://github.com/Yakifo/amqtt/pull/264 +* Plugin: device 'shadows' to bridge device online/offline states https://github.com/Yakifo/amqtt/pull/282 +* Plugin: authenticate against LDAP server https://github.com/Yakifo/amqtt/pull/287 +* Sample: broker and client communicating with mqtt over unix socket https://github.com/Yakifo/amqtt/pull/291 +* Plugin: jwt authentication and authorization https://github.com/Yakifo/amqtt/pull/289 + ## 0.11.2 - config-file based plugin loading [PR #240](https://github.com/Yakifo/amqtt/pull/240) diff --git a/docs_web/index.md b/docs_web/index.md index 3f933d6..89adb6c 100644 --- a/docs_web/index.md +++ b/docs_web/index.md @@ -7,10 +7,20 @@ ## Features - Full set of [MQTT 3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html) protocol specifications -- Communication over TCP and/or websocket, including support for SSL/TLS +- Communication over multiple TCP and/or websocket ports, including support for SSL/TLS - Support QoS 0, QoS 1 and QoS 2 messages flow - Client auto-reconnection on network lost -- Custom functionality expansion; plugins included: authentication, `$SYS` topic publishing, session persistence +- Plugin framework for functionality expansion; included plugins: + - `$SYS` topic publishing + - AWS IOT-style shadow states + - x509 certificate authentication (including cli cert creation) + - Secure file-based password authentication + - Configuration-based topic authorization + - MySQL, Postgres & SQLite user and/or topic auth (including cli manager) + - External server (HTTP) user and/or topic auth + - LDAP user and/or topic auth + - JWT user and/or topic auth + - Fail over session persistence ## Installation diff --git a/pyproject.toml b/pyproject.toml index 9e9ea8b..9727bf8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ classifiers = [ "Programming Language :: Python :: 3.13" ] -version = "0.11.3-rc.1" +version = "0.11.3" requires-python = ">=3.10.0" readme = "README.md" license = { text = "MIT" } diff --git a/samples/unix_sockets.py b/samples/unix_sockets.py index 6bafd97..d96d579 100644 --- a/samples/unix_sockets.py +++ b/samples/unix_sockets.py @@ -1,6 +1,7 @@ import contextlib import logging import asyncio +import ssl from asyncio import StreamWriter, StreamReader, Event from functools import partial from pathlib import Path @@ -76,6 +77,9 @@ class UnixStreamWriterAdapter(WriterAdapter): with contextlib.suppress(AttributeError): await self._writer.wait_closed() + def get_ssl_info(self) -> ssl.SSLObject | None: + pass + async def run_broker(socket_file: Path): diff --git a/uv.lock b/uv.lock index c8efd63..b22c439 100644 --- a/uv.lock +++ b/uv.lock @@ -129,7 +129,7 @@ wheels = [ [[package]] name = "amqtt" -version = "0.11.3rc1" +version = "0.11.3" source = { editable = "." } dependencies = [ { name = "aiohttp" },