mirror of
https://mau.dev/maunium/synapse.git
synced 2024-10-01 01:36:05 -04:00
Move get_threepid_validation_session into RegistrationWorkerStore
This commit is contained in:
parent
1ab1479a92
commit
e059c5e648
@ -614,6 +614,60 @@ class RegistrationWorkerStore(SQLBaseStore):
|
|||||||
# Convert the integer into a boolean.
|
# Convert the integer into a boolean.
|
||||||
return res == 1
|
return res == 1
|
||||||
|
|
||||||
|
def get_threepid_validation_session(
|
||||||
|
self, medium, client_secret, address=None, sid=None, validated=True
|
||||||
|
):
|
||||||
|
"""Gets a session_id and last_send_attempt (if available) for a
|
||||||
|
client_secret/medium/(address|session_id) combo
|
||||||
|
|
||||||
|
Args:
|
||||||
|
medium (str|None): The medium of the 3PID
|
||||||
|
address (str|None): The address of the 3PID
|
||||||
|
sid (str|None): The ID of the validation session
|
||||||
|
client_secret (str|None): A unique string provided by the client to
|
||||||
|
help identify this validation attempt
|
||||||
|
validated (bool|None): Whether sessions should be filtered by
|
||||||
|
whether they have been validated already or not. None to
|
||||||
|
perform no filtering
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
deferred {str, int}|None: A dict containing the
|
||||||
|
latest session_id and send_attempt count for this 3PID.
|
||||||
|
Otherwise None if there hasn't been a previous attempt
|
||||||
|
"""
|
||||||
|
keyvalues = {"medium": medium, "client_secret": client_secret}
|
||||||
|
if address:
|
||||||
|
keyvalues["address"] = address
|
||||||
|
if sid:
|
||||||
|
keyvalues["session_id"] = sid
|
||||||
|
|
||||||
|
assert address or sid
|
||||||
|
|
||||||
|
def get_threepid_validation_session_txn(txn):
|
||||||
|
sql = """
|
||||||
|
SELECT address, session_id, medium, client_secret,
|
||||||
|
last_send_attempt, validated_at
|
||||||
|
FROM threepid_validation_session WHERE %s
|
||||||
|
""" % (
|
||||||
|
" AND ".join("%s = ?" % k for k in iterkeys(keyvalues)),
|
||||||
|
)
|
||||||
|
|
||||||
|
if validated is not None:
|
||||||
|
sql += " AND validated_at IS " + ("NOT NULL" if validated else "NULL")
|
||||||
|
|
||||||
|
sql += " LIMIT 1"
|
||||||
|
|
||||||
|
txn.execute(sql, list(keyvalues.values()))
|
||||||
|
rows = self.cursor_to_dict(txn)
|
||||||
|
if not rows:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return rows[0]
|
||||||
|
|
||||||
|
return self.runInteraction(
|
||||||
|
"get_threepid_validation_session", get_threepid_validation_session_txn
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class RegistrationStore(
|
class RegistrationStore(
|
||||||
RegistrationWorkerStore, background_updates.BackgroundUpdateStore
|
RegistrationWorkerStore, background_updates.BackgroundUpdateStore
|
||||||
@ -1082,60 +1136,6 @@ class RegistrationStore(
|
|||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
def get_threepid_validation_session(
|
|
||||||
self, medium, client_secret, address=None, sid=None, validated=True
|
|
||||||
):
|
|
||||||
"""Gets a session_id and last_send_attempt (if available) for a
|
|
||||||
client_secret/medium/(address|session_id) combo
|
|
||||||
|
|
||||||
Args:
|
|
||||||
medium (str|None): The medium of the 3PID
|
|
||||||
address (str|None): The address of the 3PID
|
|
||||||
sid (str|None): The ID of the validation session
|
|
||||||
client_secret (str|None): A unique string provided by the client to
|
|
||||||
help identify this validation attempt
|
|
||||||
validated (bool|None): Whether sessions should be filtered by
|
|
||||||
whether they have been validated already or not. None to
|
|
||||||
perform no filtering
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
deferred {str, int}|None: A dict containing the
|
|
||||||
latest session_id and send_attempt count for this 3PID.
|
|
||||||
Otherwise None if there hasn't been a previous attempt
|
|
||||||
"""
|
|
||||||
keyvalues = {"medium": medium, "client_secret": client_secret}
|
|
||||||
if address:
|
|
||||||
keyvalues["address"] = address
|
|
||||||
if sid:
|
|
||||||
keyvalues["session_id"] = sid
|
|
||||||
|
|
||||||
assert address or sid
|
|
||||||
|
|
||||||
def get_threepid_validation_session_txn(txn):
|
|
||||||
sql = """
|
|
||||||
SELECT address, session_id, medium, client_secret,
|
|
||||||
last_send_attempt, validated_at
|
|
||||||
FROM threepid_validation_session WHERE %s
|
|
||||||
""" % (
|
|
||||||
" AND ".join("%s = ?" % k for k in iterkeys(keyvalues)),
|
|
||||||
)
|
|
||||||
|
|
||||||
if validated is not None:
|
|
||||||
sql += " AND validated_at IS " + ("NOT NULL" if validated else "NULL")
|
|
||||||
|
|
||||||
sql += " LIMIT 1"
|
|
||||||
|
|
||||||
txn.execute(sql, list(keyvalues.values()))
|
|
||||||
rows = self.cursor_to_dict(txn)
|
|
||||||
if not rows:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return rows[0]
|
|
||||||
|
|
||||||
return self.runInteraction(
|
|
||||||
"get_threepid_validation_session", get_threepid_validation_session_txn
|
|
||||||
)
|
|
||||||
|
|
||||||
def validate_threepid_session(self, session_id, client_secret, token, current_ts):
|
def validate_threepid_session(self, session_id, client_secret, token, current_ts):
|
||||||
"""Attempt to validate a threepid session using a token
|
"""Attempt to validate a threepid session using a token
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user