Merge pull request #8 from PeerD/patch-1

Add option to replace 3PIDs in synapse if removed/changed in the backend
jdbi_and_liquibase
Max Dor 6 years ago committed by GitHub
commit 776f3da0de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -87,14 +87,16 @@ If you would like to change the behaviour, you can use the following configurati
```
3PIDs received from the backend are merged with the ones already linked to the account.
If you would like to change this behaviour, you can use the following configuration item:
If you would like to change this behaviour, you can use the following configuration items:
```yaml
config:
policy:
all:
threepid:
update: false
replace: false
```
If update is set to `false`, the 3PIDs will not be changed at all. If replace is set to `true`, all 3PIDs not available in the backend anymore will be deleted from synapse.
## Integrate
To use this module with your back-end, you will need to implement a single REST endpoint:

@ -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