summaryrefslogtreecommitdiffstats
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.py18
1 files changed, 14 insertions, 4 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/roster.py b/packages/meshbay-node/src/meshbay_node/roster.py
index dab1497..6bda56b 100644
--- a/packages/meshbay-node/src/meshbay_node/roster.py
+++ b/packages/meshbay-node/src/meshbay_node/roster.py
@@ -77,6 +77,7 @@ CREATE TABLE IF NOT EXISTS invites (
code_hash TEXT PRIMARY KEY,
group_id TEXT NOT NULL,
user_id TEXT NOT NULL,
+ username TEXT NOT NULL DEFAULT '',
role TEXT NOT NULL,
created_by TEXT NOT NULL,
created_at TEXT NOT NULL,
@@ -142,6 +143,15 @@ class Roster:
# WAL: the CLI writes invites (`operator pair`) while the daemon reads them.
await self._db.execute("PRAGMA journal_mode=WAL")
await self._db.executescript(_SCHEMA)
+ # invites.username was added after the first deployments: the name is what
+ # the operator types, and it cannot be recovered from the JWT because the
+ # hub does not put one there. CREATE TABLE IF NOT EXISTS will not add a
+ # column to a table that already exists.
+ async with self._db.execute("PRAGMA table_info(invites)") as cur:
+ columns = {r[1] for r in await cur.fetchall()}
+ if "username" not in columns:
+ await self._db.execute(
+ "ALTER TABLE invites ADD COLUMN username TEXT NOT NULL DEFAULT ''")
await self._db.commit()
async def close(self) -> None:
@@ -289,6 +299,7 @@ class Roster:
role: str,
created_by: str,
ttl: int = DEFAULT_INVITE_TTL,
+ username: str = "",
) -> str:
"""
Issue a one-time code. Returns it in the clear — this is the only moment it
@@ -305,10 +316,9 @@ class Roster:
code = generate_code()
expires = datetime.now(timezone.utc) + timedelta(seconds=ttl)
await self._db.execute(
- "INSERT INTO invites "
- "(code_hash, group_id, user_id, role, created_by, created_at, expires_at) "
- "VALUES (?, ?, ?, ?, ?, ?, ?)",
- (hash_code(code), group_id, user_id, role, created_by, _now(),
+ "INSERT INTO invites (code_hash, group_id, user_id, username, role, "
+ "created_by, created_at, expires_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
+ (hash_code(code), group_id, user_id, username, role, created_by, _now(),
expires.isoformat(timespec="seconds")),
)
await self._db.commit()