Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
synapse
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Terraform modules
Monitor
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Timo Ley
synapse
Commits
dab87b84
Commit
dab87b84
authored
7 years ago
by
Erik Johnston
Browse files
Options
Downloads
Patches
Plain Diff
URL quote path segments over federation
parent
13decdbf
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
synapse/federation/transport/client.py
+80
-48
80 additions, 48 deletions
synapse/federation/transport/client.py
with
80 additions
and
48 deletions
synapse/federation/transport/client.py
+
80
−
48
View file @
dab87b84
...
...
@@ -21,6 +21,7 @@ from synapse.api.urls import FEDERATION_PREFIX as PREFIX
from
synapse.util.logutils
import
log_function
import
logging
import
urllib
logger
=
logging
.
getLogger
(
__name__
)
...
...
@@ -50,7 +51,7 @@ class TransportLayerClient(object):
logger
.
debug
(
"
get_room_state dest=%s, room=%s
"
,
destination
,
room_id
)
path
=
PREFIX
+
"
/state/%s/
"
%
room_id
path
=
_create_path
(
PREFIX
,
"
/state/%s/
"
,
room_id
)
return
self
.
client
.
get_json
(
destination
,
path
=
path
,
args
=
{
"
event_id
"
:
event_id
},
)
...
...
@@ -72,7 +73,7 @@ class TransportLayerClient(object):
logger
.
debug
(
"
get_room_state_ids dest=%s, room=%s
"
,
destination
,
room_id
)
path
=
PREFIX
+
"
/state_ids/%s/
"
%
room_id
path
=
_create_path
(
PREFIX
,
"
/state_ids/%s/
"
,
room_id
)
return
self
.
client
.
get_json
(
destination
,
path
=
path
,
args
=
{
"
event_id
"
:
event_id
},
)
...
...
@@ -94,7 +95,7 @@ class TransportLayerClient(object):
logger
.
debug
(
"
get_pdu dest=%s, event_id=%s
"
,
destination
,
event_id
)
path
=
PREFIX
+
"
/event/%s/
"
%
(
event_id
,
)
path
=
_create_path
(
PREFIX
,
"
/event/%s/
"
,
event_id
)
return
self
.
client
.
get_json
(
destination
,
path
=
path
,
timeout
=
timeout
)
@log_function
...
...
@@ -120,7 +121,7 @@ class TransportLayerClient(object):
# TODO: raise?
return
path
=
PREFIX
+
"
/backfill/%s/
"
%
(
room_id
,
)
path
=
_create_path
(
PREFIX
,
"
/backfill/%s/
"
,
room_id
)
args
=
{
"
v
"
:
event_tuples
,
...
...
@@ -158,9 +159,11 @@ class TransportLayerClient(object):
# generated by the json_data_callback.
json_data
=
transaction
.
get_dict
()
path
=
_create_path
(
PREFIX
,
"
/send/%s/
"
,
transaction
.
transaction_id
)
response
=
yield
self
.
client
.
put_json
(
transaction
.
destination
,
path
=
PREFIX
+
"
/send/%s/
"
%
transaction
.
transaction_id
,
path
=
path
,
data
=
json_data
,
json_data_callback
=
json_data_callback
,
long_retries
=
True
,
...
...
@@ -178,7 +181,7 @@ class TransportLayerClient(object):
@log_function
def
make_query
(
self
,
destination
,
query_type
,
args
,
retry_on_dns_fail
,
ignore_backoff
=
False
):
path
=
PREFIX
+
"
/query/%s
"
%
query_type
path
=
_create_path
(
PREFIX
,
"
/query/%s
"
,
query_type
)
content
=
yield
self
.
client
.
get_json
(
destination
=
destination
,
...
...
@@ -223,7 +226,7 @@ class TransportLayerClient(object):
"
make_membership_event called with membership=
'
%s
'
, must be one of %s
"
%
(
membership
,
"
,
"
.
join
(
valid_memberships
))
)
path
=
PREFIX
+
"
/make_%s/%s/%s
"
%
(
membership
,
room_id
,
user_id
)
path
=
_create_path
(
PREFIX
,
"
/make_%s/%s/%s
"
,
membership
,
room_id
,
user_id
)
ignore_backoff
=
False
retry_on_dns_fail
=
False
...
...
@@ -249,7 +252,7 @@ class TransportLayerClient(object):
@defer.inlineCallbacks
@log_function
def
send_join
(
self
,
destination
,
room_id
,
event_id
,
content
):
path
=
PREFIX
+
"
/send_join/%s/%s
"
%
(
room_id
,
event_id
)
path
=
_create_path
(
PREFIX
,
"
/send_join/%s/%s
"
,
room_id
,
event_id
)
response
=
yield
self
.
client
.
put_json
(
destination
=
destination
,
...
...
@@ -262,7 +265,7 @@ class TransportLayerClient(object):
@defer.inlineCallbacks
@log_function
def
send_leave
(
self
,
destination
,
room_id
,
event_id
,
content
):
path
=
PREFIX
+
"
/send_leave/%s/%s
"
%
(
room_id
,
event_id
)
path
=
_create_path
(
PREFIX
,
"
/send_leave/%s/%s
"
,
room_id
,
event_id
)
response
=
yield
self
.
client
.
put_json
(
destination
=
destination
,
...
...
@@ -281,7 +284,7 @@ class TransportLayerClient(object):
@defer.inlineCallbacks
@log_function
def
send_invite
(
self
,
destination
,
room_id
,
event_id
,
content
):
path
=
PREFIX
+
"
/invite/%s/%s
"
%
(
room_id
,
event_id
)
path
=
_create_path
(
PREFIX
,
"
/invite/%s/%s
"
,
room_id
,
event_id
)
response
=
yield
self
.
client
.
put_json
(
destination
=
destination
,
...
...
@@ -323,7 +326,7 @@ class TransportLayerClient(object):
@defer.inlineCallbacks
@log_function
def
exchange_third_party_invite
(
self
,
destination
,
room_id
,
event_dict
):
path
=
PREFIX
+
"
/exchange_third_party_invite/%s
"
%
(
room_id
,)
path
=
_create_path
(
PREFIX
,
"
/exchange_third_party_invite/%s
"
,
room_id
,)
response
=
yield
self
.
client
.
put_json
(
destination
=
destination
,
...
...
@@ -336,7 +339,7 @@ class TransportLayerClient(object):
@defer.inlineCallbacks
@log_function
def
get_event_auth
(
self
,
destination
,
room_id
,
event_id
):
path
=
PREFIX
+
"
/event_auth/%s/%s
"
%
(
room_id
,
event_id
)
path
=
_create_path
(
PREFIX
,
"
/event_auth/%s/%s
"
,
room_id
,
event_id
)
content
=
yield
self
.
client
.
get_json
(
destination
=
destination
,
...
...
@@ -348,7 +351,7 @@ class TransportLayerClient(object):
@defer.inlineCallbacks
@log_function
def
send_query_auth
(
self
,
destination
,
room_id
,
event_id
,
content
):
path
=
PREFIX
+
"
/query_auth/%s/%s
"
%
(
room_id
,
event_id
)
path
=
_create_path
(
PREFIX
,
"
/query_auth/%s/%s
"
,
room_id
,
event_id
)
content
=
yield
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -410,7 +413,7 @@ class TransportLayerClient(object):
Returns:
A dict containg the device keys.
"""
path
=
PREFIX
+
"
/user/devices/
"
+
user_id
path
=
_create_path
(
PREFIX
,
"
/user/devices/
%s
"
,
user_id
)
content
=
yield
self
.
client
.
get_json
(
destination
=
destination
,
...
...
@@ -460,7 +463,7 @@ class TransportLayerClient(object):
@log_function
def
get_missing_events
(
self
,
destination
,
room_id
,
earliest_events
,
latest_events
,
limit
,
min_depth
,
timeout
):
path
=
PREFIX
+
"
/get_missing_events/%s
"
%
(
room_id
,)
path
=
_create_path
(
PREFIX
,
"
/get_missing_events/%s
"
,
room_id
,)
content
=
yield
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -480,7 +483,7 @@ class TransportLayerClient(object):
def
get_group_profile
(
self
,
destination
,
group_id
,
requester_user_id
):
"""
Get a group profile
"""
path
=
PREFIX
+
"
/groups/%s/profile
"
%
(
group_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/profile
"
,
group_id
,)
return
self
.
client
.
get_json
(
destination
=
destination
,
...
...
@@ -499,7 +502,7 @@ class TransportLayerClient(object):
requester_user_id (str)
content (dict): The new profile of the group
"""
path
=
PREFIX
+
"
/groups/%s/profile
"
%
(
group_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/profile
"
,
group_id
,)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -513,7 +516,7 @@ class TransportLayerClient(object):
def
get_group_summary
(
self
,
destination
,
group_id
,
requester_user_id
):
"""
Get a group summary
"""
path
=
PREFIX
+
"
/groups/%s/summary
"
%
(
group_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/summary
"
,
group_id
,)
return
self
.
client
.
get_json
(
destination
=
destination
,
...
...
@@ -526,7 +529,7 @@ class TransportLayerClient(object):
def
get_rooms_in_group
(
self
,
destination
,
group_id
,
requester_user_id
):
"""
Get all rooms in a group
"""
path
=
PREFIX
+
"
/groups/%s/rooms
"
%
(
group_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/rooms
"
,
group_id
,)
return
self
.
client
.
get_json
(
destination
=
destination
,
...
...
@@ -539,7 +542,7 @@ class TransportLayerClient(object):
content
):
"""
Add a room to a group
"""
path
=
PREFIX
+
"
/groups/%s/room/%s
"
%
(
group_id
,
room_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/room/%s
"
,
group_id
,
room_id
,)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -553,7 +556,10 @@ class TransportLayerClient(object):
config_key
,
content
):
"""
Update room in group
"""
path
=
PREFIX
+
"
/groups/%s/room/%s/config/%s
"
%
(
group_id
,
room_id
,
config_key
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/room/%s/config/%s
"
,
group_id
,
room_id
,
config_key
,
)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -566,7 +572,7 @@ class TransportLayerClient(object):
def
remove_room_from_group
(
self
,
destination
,
group_id
,
requester_user_id
,
room_id
):
"""
Remove a room from a group
"""
path
=
PREFIX
+
"
/groups/%s/room/%s
"
%
(
group_id
,
room_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/room/%s
"
,
group_id
,
room_id
,)
return
self
.
client
.
delete_json
(
destination
=
destination
,
...
...
@@ -579,7 +585,7 @@ class TransportLayerClient(object):
def
get_users_in_group
(
self
,
destination
,
group_id
,
requester_user_id
):
"""
Get users in a group
"""
path
=
PREFIX
+
"
/groups/%s/users
"
%
(
group_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/users
"
,
group_id
,)
return
self
.
client
.
get_json
(
destination
=
destination
,
...
...
@@ -592,7 +598,7 @@ class TransportLayerClient(object):
def
get_invited_users_in_group
(
self
,
destination
,
group_id
,
requester_user_id
):
"""
Get users that have been invited to a group
"""
path
=
PREFIX
+
"
/groups/%s/invited_users
"
%
(
group_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/invited_users
"
,
group_id
,)
return
self
.
client
.
get_json
(
destination
=
destination
,
...
...
@@ -605,7 +611,10 @@ class TransportLayerClient(object):
def
accept_group_invite
(
self
,
destination
,
group_id
,
user_id
,
content
):
"""
Accept a group invite
"""
path
=
PREFIX
+
"
/groups/%s/users/%s/accept_invite
"
%
(
group_id
,
user_id
)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/users/%s/accept_invite
"
,
group_id
,
user_id
,
)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -618,7 +627,7 @@ class TransportLayerClient(object):
def
join_group
(
self
,
destination
,
group_id
,
user_id
,
content
):
"""
Attempts to join a group
"""
path
=
PREFIX
+
"
/groups/%s/users/%s/join
"
%
(
group_id
,
user_id
)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/users/%s/join
"
,
group_id
,
user_id
)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -631,7 +640,7 @@ class TransportLayerClient(object):
def
invite_to_group
(
self
,
destination
,
group_id
,
user_id
,
requester_user_id
,
content
):
"""
Invite a user to a group
"""
path
=
PREFIX
+
"
/groups/%s/users/%s/invite
"
%
(
group_id
,
user_id
)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/users/%s/invite
"
,
group_id
,
user_id
)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -647,7 +656,7 @@ class TransportLayerClient(object):
invited.
"""
path
=
PREFIX
+
"
/groups/local/%s/users/%s/invite
"
%
(
group_id
,
user_id
)
path
=
_create_path
(
PREFIX
,
"
/groups/local/%s/users/%s/invite
"
,
group_id
,
user_id
)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -661,7 +670,7 @@ class TransportLayerClient(object):
user_id
,
content
):
"""
Remove a user fron a group
"""
path
=
PREFIX
+
"
/groups/%s/users/%s/remove
"
%
(
group_id
,
user_id
)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/users/%s/remove
"
,
group_id
,
user_id
)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -678,7 +687,7 @@ class TransportLayerClient(object):
kicked from the group.
"""
path
=
PREFIX
+
"
/groups/local/%s/users/%s/remove
"
%
(
group_id
,
user_id
)
path
=
_create_path
(
PREFIX
,
"
/groups/local/%s/users/%s/remove
"
,
group_id
,
user_id
)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -693,7 +702,7 @@ class TransportLayerClient(object):
the attestations
"""
path
=
PREFIX
+
"
/groups/%s/renew_attestation/%s
"
%
(
group_id
,
user_id
)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/renew_attestation/%s
"
,
group_id
,
user_id
)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -708,11 +717,12 @@ class TransportLayerClient(object):
"""
Update a room entry in a group summary
"""
if
category_id
:
path
=
PREFIX
+
"
/groups/%s/summary/categories/%s/rooms/%s
"
%
(
path
=
_create_path
(
PREFIX
,
"
/groups/%s/summary/categories/%s/rooms/%s
"
,
group_id
,
category_id
,
room_id
,
)
else
:
path
=
PREFIX
+
"
/groups/%s/summary/rooms/%s
"
%
(
group_id
,
room_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/summary/rooms/%s
"
,
group_id
,
room_id
,)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -728,11 +738,12 @@ class TransportLayerClient(object):
"""
Delete a room entry in a group summary
"""
if
category_id
:
path
=
PREFIX
+
"
/groups/%s/summary/categories/%s/rooms/%s
"
%
(
path
=
_create_path
(
PREFIX
+
"
/groups/%s/summary/categories/%s/rooms/%s
"
,
group_id
,
category_id
,
room_id
,
)
else
:
path
=
PREFIX
+
"
/groups/%s/summary/rooms/%s
"
%
(
group_id
,
room_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/summary/rooms/%s
"
,
group_id
,
room_id
,)
return
self
.
client
.
delete_json
(
destination
=
destination
,
...
...
@@ -745,7 +756,7 @@ class TransportLayerClient(object):
def
get_group_categories
(
self
,
destination
,
group_id
,
requester_user_id
):
"""
Get all categories in a group
"""
path
=
PREFIX
+
"
/groups/%s/categories
"
%
(
group_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/categories
"
,
group_id
,)
return
self
.
client
.
get_json
(
destination
=
destination
,
...
...
@@ -758,7 +769,7 @@ class TransportLayerClient(object):
def
get_group_category
(
self
,
destination
,
group_id
,
requester_user_id
,
category_id
):
"""
Get category info in a group
"""
path
=
PREFIX
+
"
/groups/%s/categories/%s
"
%
(
group_id
,
category_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/categories/%s
"
,
group_id
,
category_id
,)
return
self
.
client
.
get_json
(
destination
=
destination
,
...
...
@@ -772,7 +783,7 @@ class TransportLayerClient(object):
content
):
"""
Update a category in a group
"""
path
=
PREFIX
+
"
/groups/%s/categories/%s
"
%
(
group_id
,
category_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/categories/%s
"
,
group_id
,
category_id
,)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -787,7 +798,7 @@ class TransportLayerClient(object):
category_id
):
"""
Delete a category in a group
"""
path
=
PREFIX
+
"
/groups/%s/categories/%s
"
%
(
group_id
,
category_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/categories/%s
"
,
group_id
,
category_id
,)
return
self
.
client
.
delete_json
(
destination
=
destination
,
...
...
@@ -800,7 +811,7 @@ class TransportLayerClient(object):
def
get_group_roles
(
self
,
destination
,
group_id
,
requester_user_id
):
"""
Get all roles in a group
"""
path
=
PREFIX
+
"
/groups/%s/roles
"
%
(
group_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/roles
"
,
group_id
,)
return
self
.
client
.
get_json
(
destination
=
destination
,
...
...
@@ -813,7 +824,7 @@ class TransportLayerClient(object):
def
get_group_role
(
self
,
destination
,
group_id
,
requester_user_id
,
role_id
):
"""
Get a roles info
"""
path
=
PREFIX
+
"
/groups/%s/roles/%s
"
%
(
group_id
,
role_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/roles/%s
"
,
group_id
,
role_id
,)
return
self
.
client
.
get_json
(
destination
=
destination
,
...
...
@@ -827,7 +838,7 @@ class TransportLayerClient(object):
content
):
"""
Update a role in a group
"""
path
=
PREFIX
+
"
/groups/%s/roles/%s
"
%
(
group_id
,
role_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/roles/%s
"
,
group_id
,
role_id
,)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -841,7 +852,7 @@ class TransportLayerClient(object):
def
delete_group_role
(
self
,
destination
,
group_id
,
requester_user_id
,
role_id
):
"""
Delete a role in a group
"""
path
=
PREFIX
+
"
/groups/%s/roles/%s
"
%
(
group_id
,
role_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/roles/%s
"
,
group_id
,
role_id
,)
return
self
.
client
.
delete_json
(
destination
=
destination
,
...
...
@@ -856,11 +867,12 @@ class TransportLayerClient(object):
"""
Update a users entry in a group
"""
if
role_id
:
path
=
PREFIX
+
"
/groups/%s/summary/roles/%s/users/%s
"
%
(
path
=
_create_path
(
PREFIX
,
"
/groups/%s/summary/roles/%s/users/%s
"
,
group_id
,
role_id
,
user_id
,
)
else
:
path
=
PREFIX
+
"
/groups/%s/summary/users/%s
"
%
(
group_id
,
user_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/summary/users/%s
"
,
group_id
,
user_id
,)
return
self
.
client
.
post_json
(
destination
=
destination
,
...
...
@@ -875,7 +887,7 @@ class TransportLayerClient(object):
content
):
"""
Sets the join policy for a group
"""
path
=
PREFIX
+
"
/groups/%s/settings/m.join_policy
"
%
(
group_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/settings/m.join_policy
"
,
group_id
,)
return
self
.
client
.
put_json
(
destination
=
destination
,
...
...
@@ -891,11 +903,12 @@ class TransportLayerClient(object):
"""
Delete a users entry in a group
"""
if
role_id
:
path
=
PREFIX
+
"
/groups/%s/summary/roles/%s/users/%s
"
%
(
path
=
_create_path
(
PREFIX
,
"
/groups/%s/summary/roles/%s/users/%s
"
,
group_id
,
role_id
,
user_id
,
)
else
:
path
=
PREFIX
+
"
/groups/%s/summary/users/%s
"
%
(
group_id
,
user_id
,)
path
=
_create_path
(
PREFIX
,
"
/groups/%s/summary/users/%s
"
,
group_id
,
user_id
,)
return
self
.
client
.
delete_json
(
destination
=
destination
,
...
...
@@ -918,3 +931,22 @@ class TransportLayerClient(object):
data
=
content
,
ignore_backoff
=
True
,
)
def
_create_path
(
prefix
,
path
,
*
args
):
"""
Creates a path from the prefix, path template and args. Ensures that
all args are url encoded.
Example:
_create_path(PREFIX,
"
/event/%s/
"
, event_id)
Args:
prefix (str)
path (str): String template for the path
args: ([str]): Args to insert into path. Each arg will be url encoded
Returns:
str
"""
return
prefix
+
path
%
tuple
(
urllib
.
quote
(
arg
)
for
arg
in
args
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment