comms: rename numeric guests via db
This commit is contained in:
parent
59305ca27c
commit
831f368493
@ -42,12 +42,25 @@ spec:
|
|||||||
value: http://matrix-authentication-service:8080/oauth2/token
|
value: http://matrix-authentication-service:8080/oauth2/token
|
||||||
- name: SEEDER_USER
|
- name: SEEDER_USER
|
||||||
value: othrys-seeder
|
value: othrys-seeder
|
||||||
|
- name: PGHOST
|
||||||
|
value: postgres-service.postgres.svc.cluster.local
|
||||||
|
- name: PGPORT
|
||||||
|
value: "5432"
|
||||||
|
- name: PGDATABASE
|
||||||
|
value: synapse
|
||||||
|
- name: PGUSER
|
||||||
|
value: synapse
|
||||||
|
- name: PGPASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: synapse-db
|
||||||
|
key: POSTGRES_PASSWORD
|
||||||
command:
|
command:
|
||||||
- /bin/sh
|
- /bin/sh
|
||||||
- -c
|
- -c
|
||||||
- |
|
- |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
pip install --no-cache-dir requests >/dev/null
|
pip install --no-cache-dir requests psycopg2-binary >/dev/null
|
||||||
python - <<'PY'
|
python - <<'PY'
|
||||||
import base64
|
import base64
|
||||||
import os
|
import os
|
||||||
@ -55,6 +68,7 @@ spec:
|
|||||||
import requests
|
import requests
|
||||||
import time
|
import time
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
import psycopg2
|
||||||
|
|
||||||
ADJ = [
|
ADJ = [
|
||||||
"brisk","calm","eager","gentle","merry","nifty","rapid","sunny","witty","zesty",
|
"brisk","calm","eager","gentle","merry","nifty","rapid","sunny","witty","zesty",
|
||||||
@ -74,6 +88,7 @@ spec:
|
|||||||
MAS_TOKEN_URL = os.environ["MAS_TOKEN_URL"]
|
MAS_TOKEN_URL = os.environ["MAS_TOKEN_URL"]
|
||||||
SEEDER_USER = os.environ["SEEDER_USER"]
|
SEEDER_USER = os.environ["SEEDER_USER"]
|
||||||
ROOM_ALIAS = "#othrys:live.bstein.dev"
|
ROOM_ALIAS = "#othrys:live.bstein.dev"
|
||||||
|
SERVER_NAME = "live.bstein.dev"
|
||||||
|
|
||||||
def mas_admin_token():
|
def mas_admin_token():
|
||||||
with open(MAS_ADMIN_CLIENT_SECRET_FILE, "r", encoding="utf-8") as f:
|
with open(MAS_ADMIN_CLIENT_SECRET_FILE, "r", encoding="utf-8") as f:
|
||||||
@ -241,6 +256,51 @@ spec:
|
|||||||
def needs_rename_display(display):
|
def needs_rename_display(display):
|
||||||
return not display or display.isdigit() or display.startswith("guest-")
|
return not display or display.isdigit() or display.startswith("guest-")
|
||||||
|
|
||||||
|
def db_rename_numeric(existing_names):
|
||||||
|
user_ids = []
|
||||||
|
profiles = {}
|
||||||
|
conn = psycopg2.connect(
|
||||||
|
host=os.environ["PGHOST"],
|
||||||
|
port=int(os.environ["PGPORT"]),
|
||||||
|
dbname=os.environ["PGDATABASE"],
|
||||||
|
user=os.environ["PGUSER"],
|
||||||
|
password=os.environ["PGPASSWORD"],
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
with conn:
|
||||||
|
with conn.cursor() as cur:
|
||||||
|
cur.execute(
|
||||||
|
"SELECT name FROM users WHERE name ~ %s",
|
||||||
|
(f\"^@\\\\d+:{SERVER_NAME}$\",),
|
||||||
|
)
|
||||||
|
user_ids = [row[0] for row in cur.fetchall()]
|
||||||
|
if not user_ids:
|
||||||
|
return
|
||||||
|
cur.execute(
|
||||||
|
\"SELECT user_id, displayname FROM profiles WHERE user_id = ANY(%s)\",
|
||||||
|
(user_ids,),
|
||||||
|
)
|
||||||
|
profiles = {row[0]: row[1] for row in cur.fetchall()}
|
||||||
|
for user_id in user_ids:
|
||||||
|
display = profiles.get(user_id)
|
||||||
|
if display and not needs_rename_display(display):
|
||||||
|
continue
|
||||||
|
new = None
|
||||||
|
for _ in range(30):
|
||||||
|
candidate = f\"{random.choice(ADJ)}-{random.choice(NOUN)}\"
|
||||||
|
if candidate not in existing_names:
|
||||||
|
new = candidate
|
||||||
|
existing_names.add(candidate)
|
||||||
|
break
|
||||||
|
if not new:
|
||||||
|
continue
|
||||||
|
cur.execute(
|
||||||
|
\"INSERT INTO profiles (user_id, displayname) VALUES (%s, %s) ON CONFLICT (user_id) DO UPDATE SET displayname = EXCLUDED.displayname\",
|
||||||
|
(user_id, new),
|
||||||
|
)
|
||||||
|
finally:
|
||||||
|
conn.close()
|
||||||
|
|
||||||
admin_token = mas_admin_token()
|
admin_token = mas_admin_token()
|
||||||
seeder_id = mas_user_id(admin_token, SEEDER_USER)
|
seeder_id = mas_user_id(admin_token, SEEDER_USER)
|
||||||
seeder_token, seeder_session = mas_personal_session(admin_token, seeder_id)
|
seeder_token, seeder_session = mas_personal_session(admin_token, seeder_id)
|
||||||
@ -307,6 +367,7 @@ spec:
|
|||||||
continue
|
continue
|
||||||
if not set_displayname_admin(seeder_token, user_id, new):
|
if not set_displayname_admin(seeder_token, user_id, new):
|
||||||
continue
|
continue
|
||||||
|
db_rename_numeric(existing)
|
||||||
finally:
|
finally:
|
||||||
mas_revoke_session(admin_token, seeder_session)
|
mas_revoke_session(admin_token, seeder_session)
|
||||||
PY
|
PY
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user