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.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/roster.py b/packages/meshbay-node/src/meshbay_node/roster.py
index eb8c031..07b9ea6 100644
--- a/packages/meshbay-node/src/meshbay_node/roster.py
+++ b/packages/meshbay-node/src/meshbay_node/roster.py
@@ -398,6 +398,24 @@ class Roster:
(user_id,)) as cur:
return [dict(r) for r in await cur.fetchall()]
+ async def name_identity(self, user_id: str, username: str) -> bool:
+ """
+ Give a nameless account the name its hub token carries.
+
+ Only an empty name is filled: an invitation names the person the
+ operator meant, and that stays. Links, devices and open groups pin an
+ account with no name, which left the audit log showing a bare id.
+ """
+ assert self._db
+ if not username:
+ return False
+ cur = await self._db.execute(
+ "UPDATE identities SET username = ? "
+ "WHERE user_id = ? AND username = ''",
+ (username, user_id))
+ await self._db.commit()
+ return cur.rowcount > 0
+
async def revoke_device(self, user_id: str, pk_ed25519: str) -> bool:
"""
Retire one device, leaving the account's others alone.