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
c061d4f2
Commit
c061d4f2
authored
5 years ago
by
Erik Johnston
Browse files
Options
Downloads
Patches
Plain Diff
Fixup from review comments.
parent
d0b849c8
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
synapse/handlers/admin.py
+22
-17
22 additions, 17 deletions
synapse/handlers/admin.py
tests/handlers/test_admin.py
+5
-5
5 additions, 5 deletions
tests/handlers/test_admin.py
with
27 additions
and
22 deletions
synapse/handlers/admin.py
+
22
−
17
View file @
c061d4f2
...
...
@@ -99,7 +99,7 @@ class AdminHandler(BaseHandler):
defer
.
returnValue
(
ret
)
@defer.inlineCallbacks
def
ex
filtrate
_user_data
(
self
,
user_id
,
writer
):
def
ex
port
_user_data
(
self
,
user_id
,
writer
):
"""
Write all data we have on the user to the given writer.
Args:
...
...
@@ -107,7 +107,8 @@ class AdminHandler(BaseHandler):
writer (ExfiltrationWriter)
Returns:
defer.Deferred
defer.Deferred: Resolves when all data for a user has been written.
The returned value is that returned by `writer.finished()`.
"""
# Get all rooms the user is in or has been in
rooms
=
yield
self
.
store
.
get_rooms_for_user_where_membership_is
(
...
...
@@ -134,7 +135,7 @@ class AdminHandler(BaseHandler):
forgotten
=
yield
self
.
store
.
did_forget
(
user_id
,
room_id
)
if
forgotten
:
logger
.
info
(
"
[%s] User forgot room %d, ignoring
"
,
room_id
)
logger
.
info
(
"
[%s] User forgot room %d, ignoring
"
,
user_id
,
room_id
)
continue
if
room_id
not
in
rooms_user_has_been_in
:
...
...
@@ -172,9 +173,10 @@ class AdminHandler(BaseHandler):
# dict[str, set[str]].
event_to_unseen_prevs
=
{}
# The reverse mapping to above, i.e. map from unseen event to parent
# events. dict[str, set[str]]
unseen_event_to_parents
=
{}
# The reverse mapping to above, i.e. map from unseen event to events
# that have the unseen event in their prev_events, i.e. the unseen
# events "children". dict[str, set[str]]
unseen_to_child_events
=
{}
# We fetch events in the room the user could see by fetching *all*
# events that we have and then filtering, this isn't the most
...
...
@@ -200,14 +202,14 @@ class AdminHandler(BaseHandler):
if
unseen_events
:
event_to_unseen_prevs
[
event
.
event_id
]
=
unseen_events
for
unseen
in
unseen_events
:
unseen_
event_to_par
ents
.
setdefault
(
unseen
,
set
()).
add
(
unseen_
to_child_ev
ents
.
setdefault
(
unseen
,
set
()).
add
(
event
.
event_id
)
# Now check if this event is an unseen prev event, if so
# then we remove this event from the appropriate dicts.
for
event
_id
in
unseen_
event_to_par
ents
.
pop
(
event
.
event_id
,
[]):
event_to_unseen_prevs
.
get
(
event
_id
,
set
()).
discard
(
for
child
_id
in
unseen_
to_child_ev
ents
.
pop
(
event
.
event_id
,
[]):
event_to_unseen_prevs
.
get
(
child
_id
,
set
()).
discard
(
event
.
event_id
)
...
...
@@ -233,7 +235,7 @@ class AdminHandler(BaseHandler):
class
ExfiltrationWriter
(
object
):
"""
Interface used to specify how to write ex
filtra
ted data.
"""
Interface used to specify how to write ex
por
ted data.
"""
def
write_events
(
self
,
room_id
,
events
):
...
...
@@ -254,7 +256,7 @@ class ExfiltrationWriter(object):
Args:
room_id (str)
event_id (str)
state (
list[
FrozenEvent])
state (
dict[tuple[str, str],
FrozenEvent])
"""
pass
...
...
@@ -264,13 +266,16 @@ class ExfiltrationWriter(object):
Args:
room_id (str)
event (FrozenEvent)
state (list[dict]): A subset of the state at the invite, with a
subset of the event keys (type, state_key, content and sender)
state (dict[tuple[str, str], dict]): A subset of the state at the
invite, with a subset of the event keys (type, state_key
content and sender)
"""
def
finished
(
self
):
"""
Called when exfiltration is complete, and the return valus is passed
to the requester.
"""
Called when all data has succesfully been exported and written.
This functions return value is passed to the caller of
`export_user_data`.
"""
pass
...
...
@@ -281,7 +286,7 @@ class FileExfiltrationWriter(ExfiltrationWriter):
Returns the directory location on completion.
Args:
user_id (str): The user whose data is being ex
filtra
ted.
user_id (str): The user whose data is being ex
por
ted.
directory (str|None): The directory to write the data to. If None then
will write to a temporary directory.
"""
...
...
@@ -293,7 +298,7 @@ class FileExfiltrationWriter(ExfiltrationWriter):
self
.
base_directory
=
directory
else
:
self
.
base_directory
=
tempfile
.
mkdtemp
(
prefix
=
"
synapse-ex
filtra
te__%s__
"
%
(
user_id
,)
prefix
=
"
synapse-ex
por
te
d
__%s__
"
%
(
user_id
,)
)
os
.
makedirs
(
self
.
base_directory
,
exist_ok
=
True
)
...
...
This diff is collapsed.
Click to expand it.
tests/handlers/test_admin.py
+
5
−
5
View file @
c061d4f2
...
...
@@ -55,7 +55,7 @@ class ExfiltrateData(unittest.HomeserverTestCase):
writer
=
Mock
()
self
.
get_success
(
self
.
admin_handler
.
ex
filtrate
_user_data
(
self
.
user2
,
writer
))
self
.
get_success
(
self
.
admin_handler
.
ex
port
_user_data
(
self
.
user2
,
writer
))
writer
.
write_events
.
assert_called
()
...
...
@@ -94,7 +94,7 @@ class ExfiltrateData(unittest.HomeserverTestCase):
writer
=
Mock
()
self
.
get_success
(
self
.
admin_handler
.
ex
filtrate
_user_data
(
self
.
user2
,
writer
))
self
.
get_success
(
self
.
admin_handler
.
ex
port
_user_data
(
self
.
user2
,
writer
))
writer
.
write_events
.
assert_called
()
...
...
@@ -127,7 +127,7 @@ class ExfiltrateData(unittest.HomeserverTestCase):
writer
=
Mock
()
self
.
get_success
(
self
.
admin_handler
.
ex
filtrate
_user_data
(
self
.
user2
,
writer
))
self
.
get_success
(
self
.
admin_handler
.
ex
port
_user_data
(
self
.
user2
,
writer
))
writer
.
write_events
.
assert_called
()
...
...
@@ -169,7 +169,7 @@ class ExfiltrateData(unittest.HomeserverTestCase):
writer
=
Mock
()
self
.
get_success
(
self
.
admin_handler
.
ex
filtrate
_user_data
(
self
.
user2
,
writer
))
self
.
get_success
(
self
.
admin_handler
.
ex
port
_user_data
(
self
.
user2
,
writer
))
writer
.
write_events
.
assert_called_once
()
...
...
@@ -198,7 +198,7 @@ class ExfiltrateData(unittest.HomeserverTestCase):
writer
=
Mock
()
self
.
get_success
(
self
.
admin_handler
.
ex
filtrate
_user_data
(
self
.
user2
,
writer
))
self
.
get_success
(
self
.
admin_handler
.
ex
port
_user_data
(
self
.
user2
,
writer
))
writer
.
write_events
.
assert_not_called
()
writer
.
write_state
.
assert_not_called
()
...
...
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