Compare commits

...

7 Commits

Author SHA1 Message Date
reivilibre
04d059d9e9
Merge ad336e578269611cfd95f993519702fb445607f5 into 1c093509ceb04ee8ce0eb6a408b76b0fda3ac87c 2025-10-02 17:03:18 +01:00
Eric Eastwood
1c093509ce
Switch task scheduler from raw logcontext manipulation (set_current_context) to utils (PreserveLoggingContext) (#18990)
Prefer the utils over raw logcontext manipulation.

Spawning from adding some logcontext debug logs in
https://github.com/element-hq/synapse/pull/18966 and since we're not
logging at the `set_current_context(...)` level (see reasoning there),
this removes some usage of `set_current_context(...)`.
2025-10-02 10:22:25 -05:00
dependabot[bot]
0615b64bb4
Bump phonenumbers from 9.0.14 to 9.0.15 (#18991)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-01 13:50:12 +01:00
Olivier 'reivilibre
ad336e5782 Use more basic function to check user 2025-07-18 12:15:37 +01:00
Olivier 'reivilibre
390ce4056c Add a test 2025-06-05 13:05:52 +01:00
Olivier 'reivilibre
bcc54857a2 Newsfile
Signed-off-by: Olivier 'reivilibre <oliverw@matrix.org>
2025-06-05 13:02:27 +01:00
Olivier 'reivilibre
d37d442376 User /login Admin API: check if user exists first 2025-06-05 13:01:32 +01:00
6 changed files with 25 additions and 8 deletions

1
changelog.d/18518.bugfix Normal file
View File

@ -0,0 +1 @@
Fix the 'Login as a user' Admin API not checking if the user exists before issuing an access token.

1
changelog.d/18990.misc Normal file
View File

@ -0,0 +1 @@
Switch task scheduler from raw logcontext manipulation to using the dedicated logcontext utils.

6
poetry.lock generated
View File

@ -1589,14 +1589,14 @@ files = [
[[package]]
name = "phonenumbers"
version = "9.0.14"
version = "9.0.15"
description = "Python version of Google's common library for parsing, formatting, storing and validating international phone numbers."
optional = false
python-versions = "*"
groups = ["main"]
files = [
{file = "phonenumbers-9.0.14-py2.py3-none-any.whl", hash = "sha256:6bdf5c46dbfefa1d941d122432d1958418d1dfe3f8c8c81d4c8e80f5442ea41f"},
{file = "phonenumbers-9.0.14.tar.gz", hash = "sha256:98afb3e86bf9ae02cc7c98ca44fa8827babb72842f90da9884c5d998937572ae"},
{file = "phonenumbers-9.0.15-py2.py3-none-any.whl", hash = "sha256:269b73bc05258e8fd57582770b9559307099ea677c8f1dc5272476f661344776"},
{file = "phonenumbers-9.0.15.tar.gz", hash = "sha256:345ff7f23768332d866f37732f815cdf1d33c7f0961246562a5c5b78c12c3ff3"},
]
[[package]]

View File

@ -1118,6 +1118,7 @@ class UserTokenRestServlet(RestServlet):
self.store = hs.get_datastores().main
self.auth = hs.get_auth()
self.auth_handler = hs.get_auth_handler()
self.admin_handler = hs.get_admin_handler()
self.is_mine_id = hs.is_mine_id
async def on_POST(
@ -1132,6 +1133,12 @@ class UserTokenRestServlet(RestServlet):
HTTPStatus.BAD_REQUEST, "Only local users can be logged in as"
)
# Validate user_id
UserID.from_string(user_id)
_user_info_dict = await self.store.get_user_by_id(user_id)
if not _user_info_dict:
raise NotFoundError("User not found")
body = parse_json_object_from_request(request, allow_empty_body=True)
valid_until_ms = body.get("valid_until_ms")

View File

@ -27,8 +27,8 @@ from twisted.python.failure import Failure
from synapse.logging.context import (
ContextResourceUsage,
LoggingContext,
PreserveLoggingContext,
nested_logging_context,
set_current_context,
)
from synapse.metrics import SERVER_NAME_LABEL, LaterGauge
from synapse.metrics.background_process_metrics import (
@ -422,14 +422,11 @@ class TaskScheduler:
"""
current_time = self._clock.time()
calling_context = set_current_context(task_log_context)
try:
with PreserveLoggingContext(task_log_context):
usage = task_log_context.get_resource_usage()
TaskScheduler._log_task_usage(
"continuing", task, usage, current_time - start_time
)
finally:
set_current_context(calling_context)
async def wrapper() -> None:
with nested_logging_context(task.id) as log_context:

View File

@ -4289,6 +4289,17 @@ class UserTokenRestTestCase(unittest.HomeserverTestCase):
self.assertEqual(403, channel.code, msg=channel.json_body)
def test_no_user(self) -> None:
"""Try to log in as a user that doesn't exist."""
channel = self.make_request(
"POST",
"/_synapse/admin/v1/users/%s/login" % urllib.parse.quote("@ghost:test"),
b"{}",
access_token=self.admin_user_tok,
)
self.assertEqual(404, channel.code, msg=channel.json_body)
self.assertEqual(Codes.NOT_FOUND, channel.json_body["errcode"])
def test_send_event(self) -> None:
"""Test that sending event as a user works."""
# Create a room.