aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/src/meshbay_node/roster.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/roster.py')
-rw-r--r--packages/meshbay-node/src/meshbay_node/roster.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/roster.py b/packages/meshbay-node/src/meshbay_node/roster.py
index 80bf16d..8144373 100644
--- a/packages/meshbay-node/src/meshbay_node/roster.py
+++ b/packages/meshbay-node/src/meshbay_node/roster.py
@@ -54,6 +54,10 @@ CODE_LEN = 8 # 8 × 5 bits = 40 bits of entropy
# node-wide lockout.
DEFAULT_INVITE_TTL = 7 * 24 * 3600 # seconds — member invitations
DEFAULT_PAIR_TTL = 24 * 3600 # seconds — operator pairing
+# An invitation link is a bearer secret that may travel through any messaging
+# service, so its lifetime is fixed rather than the operator's setting: the
+# hub clamps its ticket to the same seven days.
+LINK_INVITE_TTL = 7 * 24 * 3600
# A device-add code is read off one screen and typed into another, in one
# sitting. An hour is comfort, not security: the code is bound to the requesting
# keys by its hash, so a longer window widens nothing an attacker can use.
@@ -1109,7 +1113,7 @@ class Roster:
return code
async def create_link_invite(
- self, group_id: str, created_by: str, ttl: int = DEFAULT_INVITE_TTL,
+ self, group_id: str, created_by: str, ttl: int = LINK_INVITE_TTL,
) -> tuple[str, str, str]:
"""
Issue a code bound to no account: `(code, invite_id, expires_at)`.