feat(forwarding): enhance ForwardingManager to support dynamic routing and delivery callbacks
This commit is contained in:
@@ -1,15 +1,19 @@
|
|||||||
import base64
|
import base64
|
||||||
|
import os
|
||||||
|
|
||||||
|
import LXMF
|
||||||
import RNS
|
import RNS
|
||||||
|
|
||||||
from .database import Database
|
from .database import Database
|
||||||
|
|
||||||
|
|
||||||
class ForwardingManager:
|
class ForwardingManager:
|
||||||
def __init__(self, db: Database, message_router):
|
def __init__(self, db: Database, storage_path: str, delivery_callback):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.message_router = message_router
|
self.storage_path = storage_path
|
||||||
|
self.delivery_callback = delivery_callback
|
||||||
self.forwarding_destinations = {}
|
self.forwarding_destinations = {}
|
||||||
|
self.forwarding_routers = {}
|
||||||
|
|
||||||
def load_aliases(self):
|
def load_aliases(self):
|
||||||
mappings = self.db.messages.get_all_forwarding_mappings()
|
mappings = self.db.messages.get_all_forwarding_mappings()
|
||||||
@@ -19,10 +23,26 @@ class ForwardingManager:
|
|||||||
mapping["alias_identity_private_key"]
|
mapping["alias_identity_private_key"]
|
||||||
)
|
)
|
||||||
alias_identity = RNS.Identity.from_bytes(private_key_bytes)
|
alias_identity = RNS.Identity.from_bytes(private_key_bytes)
|
||||||
alias_destination = self.message_router.register_delivery_identity(
|
alias_hash = mapping["alias_hash"]
|
||||||
|
|
||||||
|
# create temp router for this alias
|
||||||
|
router_storage_path = os.path.join(
|
||||||
|
self.storage_path, "forwarding", alias_hash
|
||||||
|
)
|
||||||
|
os.makedirs(router_storage_path, exist_ok=True)
|
||||||
|
|
||||||
|
router = LXMF.LXMRouter(
|
||||||
|
identity=alias_identity, storagepath=router_storage_path
|
||||||
|
)
|
||||||
|
router.register_delivery_callback(self.delivery_callback)
|
||||||
|
|
||||||
|
alias_destination = router.register_delivery_identity(
|
||||||
identity=alias_identity
|
identity=alias_identity
|
||||||
)
|
)
|
||||||
self.forwarding_destinations[mapping["alias_hash"]] = alias_destination
|
|
||||||
|
self.forwarding_destinations[alias_hash] = alias_destination
|
||||||
|
self.forwarding_routers[alias_hash] = router
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Failed to load forwarding alias {mapping['alias_hash']}: {e}")
|
print(f"Failed to load forwarding alias {mapping['alias_hash']}: {e}")
|
||||||
|
|
||||||
@@ -38,10 +58,23 @@ class ForwardingManager:
|
|||||||
alias_identity = RNS.Identity()
|
alias_identity = RNS.Identity()
|
||||||
alias_hash = alias_identity.hash.hex()
|
alias_hash = alias_identity.hash.hex()
|
||||||
|
|
||||||
alias_destination = self.message_router.register_delivery_identity(
|
# create temp router for this alias
|
||||||
alias_identity
|
router_storage_path = os.path.join(
|
||||||
|
self.storage_path, "forwarding", alias_hash
|
||||||
)
|
)
|
||||||
|
os.makedirs(router_storage_path, exist_ok=True)
|
||||||
|
|
||||||
|
router = LXMF.LXMRouter(
|
||||||
|
identity=alias_identity, storagepath=router_storage_path
|
||||||
|
)
|
||||||
|
router.register_delivery_callback(self.delivery_callback)
|
||||||
|
|
||||||
|
alias_destination = router.register_delivery_identity(
|
||||||
|
identity=alias_identity
|
||||||
|
)
|
||||||
|
|
||||||
self.forwarding_destinations[alias_hash] = alias_destination
|
self.forwarding_destinations[alias_hash] = alias_destination
|
||||||
|
self.forwarding_routers[alias_hash] = router
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
"alias_identity_private_key": base64.b64encode(
|
"alias_identity_private_key": base64.b64encode(
|
||||||
|
|||||||
Reference in New Issue
Block a user