replace 3pid option

Adds the option to replace 3pid from the external datasource in synapse. In this case, all 3pids that are not listed in the external store are deleted from synapse on login.
jdbi_and_liquibase
PeerD 6 years ago committed by GitHub
parent 5ae0be505d
commit 25ebf58b7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -90,9 +90,12 @@ class RestAuthProvider(object):
if (self.config.updateThreepid):
if "three_pids" in profile:
logger.info("Handling 3PIDs")
external_3pids = []
for threepid in profile["three_pids"]:
medium = threepid["medium"].lower()
address = threepid["address"].lower()
external_3pids.append({"medium": medium, "address": address})
logger.info("Looking for 3PID %s:%s in user profile", medium, address)
validated_at = self.account_handler.hs.get_clock().time_msec()
@ -107,6 +110,20 @@ class RestAuthProvider(object):
)
else:
logger.info("3PID is present, skipping")
if (self.config.replaceThreepid):
for threepid in (yield store.user_get_threepids(user_id)):
medium = threepid["medium"].lower()
address = threepid["address"].lower()
if {"medium": medium, "address": address} not in external_3pids:
logger.info("3PID is not present in external datastore, deleting")
yield store.user_delete_threepid(
user_id,
medium,
address
)
else:
logger.info("3PIDs were not updated due to policy")
else:
@ -125,6 +142,7 @@ class RestAuthProvider(object):
setNameOnRegister = True
setNameOnLogin = False
updateThreepid = True
replaceThreepid = False
rest_config = _RestConfig()
rest_config.endpoint = config["endpoint"]
@ -165,6 +183,15 @@ class RestAuthProvider(object):
# we don't care
pass
try:
rest_config.replaceThreepid = config['policy']['all']['threepid']['replace']
except TypeError:
# we don't care
pass
except KeyError:
# we don't care
pass
return rest_config
def _require_keys(config, required):
@ -175,4 +202,3 @@ def _require_keys(config, required):
", ".join(missing)
)
)

Loading…
Cancel
Save