59 lines
No EOL
2 KiB
Python
59 lines
No EOL
2 KiB
Python
import paho.mqtt.client as mqtt
|
|
from dbHelper import MaDbHelper
|
|
import random
|
|
import string
|
|
|
|
class MlmAccess:
|
|
def __init__(self):
|
|
self._initDb()
|
|
self._initMqtt()
|
|
|
|
def _initDb(self):
|
|
self.db = MaDbHelper()
|
|
initUsers = [
|
|
("backend", "backend", ["mlmAccess/#"], ["mlmAccess/#"]),
|
|
("pair-actor", "pair-actor", ["mlmAccess/pair/request/actor"], ["mlmAccess/pair/response/actor"])
|
|
]
|
|
|
|
for username, password, publishAclPatterns, subscribeAclPatterns in initUsers:
|
|
if not self.db.addUser(username, password, publishAclPatterns, subscribeAclPatterns):
|
|
self.db.updateUser(username, password, publishAclPatterns, subscribeAclPatterns)
|
|
|
|
def _initMqtt(self):
|
|
self.mqtt = client = mqtt.Client(client_id="backend")
|
|
self.mqtt.username_pw_set("backend", "backend")
|
|
|
|
self.mqtt.on_connect = self._mqttOnConnect
|
|
self.mqtt.on_message = self._mqttOnMessage
|
|
|
|
print("connecting to broker")
|
|
print(self.mqtt.connect("localhost", 1883, 60))
|
|
|
|
self.mqtt.loop_forever()
|
|
|
|
def _handleActorPairRequest(self, id):
|
|
print(f"Pair request for type actor with ID {id}")
|
|
if not self.db.userExists(id):
|
|
password = ''.join(random.choices(string.ascii_uppercase + string.digits, k=10))
|
|
self.db.addUser(f"actor-{id}", password, [f"mlmAccess/actor/{id}/status"], [f"mlmAccess/actor/{id}/action"])
|
|
|
|
self.mqtt.publish("mlmAccess/pair/response/actor", password)
|
|
else:
|
|
self.mqtt.publish("mlmAccess/pair/response/actor", "")
|
|
|
|
def _mqttOnConnect(self, client, userdata, flags, rc):
|
|
print("Connected with result code "+str(rc))
|
|
|
|
if rc != 0:
|
|
print("")
|
|
|
|
print(client.subscribe("mlmAccess/pair/request/actor"))
|
|
|
|
def _mqttOnMessage(self, client, userdata, message):
|
|
if message.topic == "mlmAccess/pair/request/actor":
|
|
self._handleActorPairRequest(str(message.payload.decode("utf-8")))
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
MlmAccess() |