Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Add an Admin API endpoint for looking up users based on 3PID #14405

Merged
merged 5 commits into from
Nov 11, 2022

Conversation

ashfame
Copy link
Contributor

@ashfame ashfame commented Nov 10, 2022

This PR adds an admin API endpoint for finding users with their Three PID.

As of now, it isn't possible to query users by their 3PID without database access, as documented in #13490

Signed-off-by: Ashish Kumar ashfame@users.noreply.github.com

@ashfame
Copy link
Contributor Author

ashfame commented Nov 10, 2022

Also, please advice on how _Added in Synapse 1.XX.X._ in docs/admin_api/user_admin_api.md is to be managed.

Copy link
Contributor

@DMRobertson DMRobertson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, this looks great. Other than a small tweak to the docs and changelog I think this is good to go.

docs/admin_api/user_admin_api.md Show resolved Hide resolved
@@ -1197,3 +1197,42 @@ Returns a `404` HTTP status code if no user was found, with a response body like
```

_Added in Synapse 1.68.0._


### Find a user based on their Third Party ID (ThreePID or 3PID)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is only going to find local users, i.e. we won't contact an identity server to lookup a 3PID bound to another homeserver? If so, it'd be good to say so in a short sentence.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that was my intention. I am not sure if its supposed to do remote user lookups too?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It shouldn't. The function that gets called is

async def get_user_id_by_threepid(self, medium: str, address: str) -> Optional[str]:
"""Returns user id from threepid
Args:
medium: threepid medium e.g. email
address: threepid address e.g. me@example.com. This must already be
in canonical form.
Returns:
The user ID or None if no user id/threepid mapping exists
"""
user_id = await self.db_pool.runInteraction(
"get_user_id_by_threepid", self.get_user_id_by_threepid_txn, medium, address
)
return user_id
def get_user_id_by_threepid_txn(
self, txn: LoggingTransaction, medium: str, address: str
) -> Optional[str]:
"""Returns user id from threepid
Args:
txn (cursor):
medium: threepid medium e.g. email
address: threepid address e.g. me@example.com
Returns:
user id, or None if no user id/threepid mapping exists
"""
ret = self.db_pool.simple_select_one_txn(
txn,
"user_threepids",
{"medium": medium, "address": address},
["user_id"],
True,
)
if ret:
return ret["user_id"]
return None

which amounts to SELECT user_id FROM user_threepids WHERE medium = ? AND address = ? LIMIT 1. AFAIK that table only contains threepids for local users.

docs/admin_api/user_admin_api.md Outdated Show resolved Hide resolved
changelog.d/14405.feature Outdated Show resolved Hide resolved
Co-authored-by: David Robertson <david.m.robertson1@gmail.com>
@DMRobertson
Copy link
Contributor

Can you merge in develop to see if that makes CI happy?

@ashfame
Copy link
Contributor Author

ashfame commented Nov 10, 2022

CI is not completely happy :(

@DMRobertson
Copy link
Contributor

CI is not completely happy :(

That's a known flake (#13199).

Copy link
Contributor

@DMRobertson DMRobertson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@ashfame
Copy link
Contributor Author

ashfame commented Nov 11, 2022

@DMRobertson This probably needs to be merged manually because of the flaky test?

@DMRobertson
Copy link
Contributor

Thanks. I saw the failure and noted it on #13565, but forgot to manually merge.

@DMRobertson DMRobertson merged commit a3623af into matrix-org:develop Nov 11, 2022
@ashfame ashfame deleted the admin_api_3pid branch November 11, 2022 15:38
bradtgmurray added a commit to beeper/synapse-legacy-fork that referenced this pull request Nov 22, 2022
Synapse 1.72.0 (2022-11-22)
===========================

Please note that Synapse now only supports PostgreSQL 11+, because PostgreSQL 10 has reached end-of-life, c.f. our [Deprecation Policy](https://github.com/matrix-org/synapse/blob/develop/docs/deprecation_policy.md).

Bugfixes
--------

- Update forgotten references to legacy metrics in the included Grafana dashboard. ([\matrix-org#14477](matrix-org#14477))

Synapse 1.72.0rc1 (2022-11-16)
==============================

Features
--------

- Add experimental support for [MSC3912](matrix-org/matrix-spec-proposals#3912): Relation-based redactions. ([\matrix-org#14260](matrix-org#14260))
- Build Debian packages for Ubuntu 22.10 (Kinetic Kudu). ([\matrix-org#14396](matrix-org#14396))
- Add an [Admin API](https://matrix-org.github.io/synapse/latest/usage/administration/admin_api/index.html) endpoint for user lookup based on third-party ID (3PID). Contributed by @ashfame. ([\matrix-org#14405](matrix-org#14405))
- Faster joins: include heroes' membership events in the partial join response, for rooms without a name or canonical alias. ([\matrix-org#14442](matrix-org#14442))

Bugfixes
--------

- Faster joins: do not block creation of or queries for room aliases during the resync. ([\matrix-org#14292](matrix-org#14292))
- Fix a bug introduced in Synapse 1.64.0rc1 which could cause log spam when fetching events from other homeservers. ([\matrix-org#14347](matrix-org#14347))
- Fix a bug introduced in 1.66 which would not send certain pushrules to clients. Contributed by Nico. ([\matrix-org#14356](matrix-org#14356))
- Fix a bug introduced in v1.71.0rc1 where the power level event was incorrectly created during initial room creation. ([\matrix-org#14361](matrix-org#14361))
- Fix the refresh token endpoint to be under /r0 and /v3 instead of /v1. Contributed by Tulir @ Beeper. ([\matrix-org#14364](matrix-org#14364))
- Fix a long-standing bug where Synapse would raise an error when encountering an unrecognised field in a `/sync` filter, instead of ignoring it for forward compatibility. ([\matrix-org#14369](matrix-org#14369))
- Fix a background database update, introduced in Synapse 1.64.0, which could cause poor database performance. ([\matrix-org#14374](matrix-org#14374))
- Fix PostgreSQL sometimes using table scans for queries against the `event_search` table, taking a long time and a large amount of IO. ([\matrix-org#14409](matrix-org#14409))
- Fix rendering of some HTML templates (including emails). Introduced in v1.71.0. ([\matrix-org#14448](matrix-org#14448))
- Fix a bug introduced in Synapse 1.70.0 where the background updates to add non-thread unique indexes on receipts could fail when upgrading from 1.67.0 or earlier. ([\matrix-org#14453](matrix-org#14453))

Updates to the Docker image
---------------------------

- Add all Stream Writer worker types to `configure_workers_and_start.py`. ([\matrix-org#14197](matrix-org#14197))
- Remove references to legacy worker types in the multi-worker Dockerfile. ([\matrix-org#14294](matrix-org#14294))

Improved Documentation
----------------------

- Upload documentation PRs to Netlify. ([\matrix-org#12947](matrix-org#12947), [\matrix-org#14370](matrix-org#14370))
- Add addtional TURN server configuration example based on [eturnal](https://github.com/processone/eturnal) and adjust general TURN server doc structure. ([\matrix-org#14293](matrix-org#14293))
- Add example on how to load balance /sync requests. Contributed by [aceArt](https://aceart.de). ([\matrix-org#14297](matrix-org#14297))
- Edit sample Nginx reverse proxy configuration to use HTTP/1.1. Contributed by Brad Jones. ([\matrix-org#14414](matrix-org#14414))

Deprecations and Removals
-------------------------

- Remove support for PostgreSQL 10. ([\matrix-org#14392](matrix-org#14392), [\matrix-org#14397](matrix-org#14397))

Internal Changes
----------------

- Run unit tests against Python 3.11. ([\matrix-org#13812](matrix-org#13812))
- Add TLS support for generic worker endpoints. ([\matrix-org#14128](matrix-org#14128), [\matrix-org#14455](matrix-org#14455))
- Switch to a maintained action for installing Rust in CI. ([\matrix-org#14313](matrix-org#14313))
- Add override ability to `complement.sh` command line script to request certain types of workers. ([\matrix-org#14324](matrix-org#14324))
- Enabling testing of [MSC3874](matrix-org/matrix-spec-proposals#3874) (filtering of `/messages` by relation type) in complement. ([\matrix-org#14339](matrix-org#14339))
- Concisely log a failure to resolve state due to missing `prev_events`. ([\matrix-org#14346](matrix-org#14346))
- Use a maintained Github action to install Rust. ([\matrix-org#14351](matrix-org#14351))
- Cleanup old worker datastore classes. Contributed by Nick @ Beeper (@Fizzadar). ([\matrix-org#14375](matrix-org#14375))
- Test against PostgreSQL 15 in CI. ([\matrix-org#14394](matrix-org#14394))
- Remove unreachable code. ([\matrix-org#14410](matrix-org#14410))
- Clean-up event persistence code. ([\matrix-org#14411](matrix-org#14411))
- Update docstring to clarify that `get_partial_state_events_batch` does not just give you completely arbitrary partial-state events. ([\matrix-org#14417](matrix-org#14417))
- Fix mypy errors introduced by bumping the locked version of `attrs` and `gitpython`. ([\matrix-org#14433](matrix-org#14433))
- Make Dependabot only bump Rust deps in the lock file. ([\matrix-org#14434](matrix-org#14434))
- Fix an incorrect stub return type for `PushRuleEvaluator.run`. ([\matrix-org#14451](matrix-org#14451))
- Improve performance of `/context` in large rooms. ([\matrix-org#14461](matrix-org#14461))
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Nov 27, 2022
Synapse 1.72.0 (2022-11-22)
===========================

Please note that Synapse now only supports PostgreSQL 11+, because
PostgreSQL 10 has reached end-of-life, c.f. our [Deprecation
Policy](https://github.com/matrix-org/synapse/blob/develop/docs/deprecation_policy.md).

Features
--------

- Add experimental support for
  [MSC3912](matrix-org/matrix-spec-proposals#3912):
  Relation-based
  redactions. ([\#14260](matrix-org/synapse#14260))

- Build Debian packages for Ubuntu 22.10 (Kinetic
  Kudu). ([\#14396](matrix-org/synapse#14396))

- Add an [Admin
  API](https://matrix-org.github.io/synapse/latest/usage/administration/admin_api/index.html)
  endpoint for user lookup based on third-party ID (3PID). Contributed
  by
  @ashfame. ([\#14405](matrix-org/synapse#14405))

- Faster joins: include heroes' membership events in the partial join
  response, for rooms without a name or canonical
  alias. ([\#14442](matrix-org/synapse#14442))

Deprecations and Removals
-------------------------

- Remove support for PostgreSQL
  10. ([\#14392](matrix-org/synapse#14392),
  [\#14397](matrix-org/synapse#14397))
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants