Allow toggle to enable/disable merging 3PIDs in profile

This commit is contained in:
Max Dor
2019-02-19 22:29:55 +01:00
parent 3d5fe63d01
commit f87df5204e
2 changed files with 39 additions and 18 deletions

View File

@@ -75,6 +75,14 @@ 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. 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:
```yaml
config:
policy:
all:
threepid:
update: false
```
## Integrate ## Integrate
To use this module with your back-end, you will need to implement a single REST endpoint: To use this module with your back-end, you will need to implement a single REST endpoint:

View File

@@ -87,25 +87,28 @@ class RestAuthProvider(object):
else: else:
logger.info("Display name was not set because it was not given or policy restricted it") logger.info("Display name was not set because it was not given or policy restricted it")
if "three_pids" in profile: if (self.config.updateThreepid):
logger.info("Handling 3PIDs") if "three_pids" in profile:
for threepid in profile["three_pids"]: logger.info("Handling 3PIDs")
medium = threepid["medium"].lower() for threepid in profile["three_pids"]:
address = threepid["address"].lower() medium = threepid["medium"].lower()
logger.info("Looking for 3PID %s:%s in user profile", medium, address) address = threepid["address"].lower()
logger.info("Looking for 3PID %s:%s in user profile", medium, address)
validated_at = self.account_handler.hs.get_clock().time_msec() validated_at = self.account_handler.hs.get_clock().time_msec()
if not (yield store.get_user_id_by_threepid(medium, address)): if not (yield store.get_user_id_by_threepid(medium, address)):
logger.info("3PID is not present, adding") logger.info("3PID is not present, adding")
yield store.user_add_threepid( yield store.user_add_threepid(
user_id, user_id,
medium, medium,
address, address,
validated_at, validated_at,
validated_at validated_at
) )
else: else:
logger.info("3PID is present, skipping") logger.info("3PID is present, skipping")
else:
logger.info("3PIDs were not updated due to policy")
else: else:
logger.info("No profile data") logger.info("No profile data")
@@ -121,6 +124,7 @@ class RestAuthProvider(object):
regLower = True regLower = True
setNameOnRegister = True setNameOnRegister = True
setNameOnLogin = False setNameOnLogin = False
updateThreepid = True
rest_config = _RestConfig() rest_config = _RestConfig()
rest_config.endpoint = config["endpoint"] rest_config.endpoint = config["endpoint"]
@@ -152,6 +156,15 @@ class RestAuthProvider(object):
# we don't care # we don't care
pass pass
try:
rest_config.updateThreepid = config['policy']['all']['threepid']['update']
except TypeError:
# we don't care
pass
except KeyError:
# we don't care
pass
return rest_config return rest_config
def _require_keys(config, required): def _require_keys(config, required):