Skip to content

Admin API implementation - #253

Open
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api
Open

Admin API implementation#253
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api

Conversation

@slipeer

Copy link
Copy Markdown

Admin API implementation in separate module.
Implemented methods:

  • purge_hostory
  • purge_hostory_status
  • media_in_room
  • whois
  • deactivate
  • reset_password
  • quarantine_media
  • shutdown_room

Based on https://github.com/matrix-org/synapse/tree/master/docs/admin_api docs
And synapse sources: https://github.com/matrix-org/synapse/blob/master/synapse/rest/client/v1/admin.py

Signed-off-by: Pavel Kardash slipeer@gmail.com

@Zil0Zil0 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cool PR! I took a first look at it and left some thoughts. I'm not done since I still need to read the Synapse bits it is based on, try out the code, and look at the tests.

Other general thoughts:

I think the filename admin_api.py should be changed to something indicating that it concerns Synapse (or else what to do when it'll come to implement the admin endpoints of another HS?).
Maybe it could even live in a submodule, by putting the file in synapse/admin_api.py, as it is maybe too specific to live directly in matrix_client.

Last thing, the documentation you added will not be present in the Sphinx rendering automatically. You have to do something like this c95c67c.

)
"""
def purge_history(self, room_id, event_id):
"""Perform /admin/purge_hostory.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

Admin api part.
Args:
room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why not simply have two optional arguments? It would look clearer to me, and simplify the code.

room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.
"""
if isinstance(event_id, basestring):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not relevant if you choose to follow the comment above, but it looks like swapping the if/else blocks here would allow to test for isinstance(event_id, int) and get rid of the ugly basestring hack.

else:
content = {
"delete_local_events": True,
"purge_up_to_ts": int(event_id)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

According to the docstring, this is already an int. I don't think we want to try to catch user misuses, especially in API level methods.

return self._send("POST", "/admin/purge_history/%s" % room_id, content)

def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

There should be a newline after this one (applies to most of the docstrings here).


def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.
Admin api part.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I doubt this line is useful, but if you want to keep it it needs a newline after (applies to every docstrings).

return self._send("POST", "/admin/reset_password/%s" % user_id, content)

def quarantine_media(self, room_id):
"""Quarantine all media in room so that no one can download it via thi server.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

return self._send("POST", "/admin/quarantine_media/%s" % room_id)

def shutdown_room(self, room_id, new_room_user_id, room_name=False, message=False):
"""Shuts down a room by removing all local users from the room and blocking

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The first line of a docstring should be a single sentence, ie not split across multiple lines.

@DecaTec

Copy link
Copy Markdown

This PR is pretty old. Is anyone still working on it or are there any chances that this will be merged soon?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@slipeer@DecaTec@Zil0
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Admin API implementation by slipeer · Pull Request #253 · matrix-org/matrix-python-sdk · GitHub
Skip to content

Admin API implementation - #253

Open
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api
Open

Admin API implementation#253
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api

Conversation

@slipeer

Copy link
Copy Markdown

Admin API implementation in separate module.
Implemented methods:

  • purge_hostory
  • purge_hostory_status
  • media_in_room
  • whois
  • deactivate
  • reset_password
  • quarantine_media
  • shutdown_room

Based on https://github.com/matrix-org/synapse/tree/master/docs/admin_api docs
And synapse sources: https://github.com/matrix-org/synapse/blob/master/synapse/rest/client/v1/admin.py

Signed-off-by: Pavel Kardash slipeer@gmail.com

@Zil0Zil0 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cool PR! I took a first look at it and left some thoughts. I'm not done since I still need to read the Synapse bits it is based on, try out the code, and look at the tests.

Other general thoughts:

I think the filename admin_api.py should be changed to something indicating that it concerns Synapse (or else what to do when it'll come to implement the admin endpoints of another HS?).
Maybe it could even live in a submodule, by putting the file in synapse/admin_api.py, as it is maybe too specific to live directly in matrix_client.

Last thing, the documentation you added will not be present in the Sphinx rendering automatically. You have to do something like this c95c67c.

)
"""
def purge_history(self, room_id, event_id):
"""Perform /admin/purge_hostory.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

Admin api part.
Args:
room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why not simply have two optional arguments? It would look clearer to me, and simplify the code.

room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.
"""
if isinstance(event_id, basestring):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not relevant if you choose to follow the comment above, but it looks like swapping the if/else blocks here would allow to test for isinstance(event_id, int) and get rid of the ugly basestring hack.

else:
content = {
"delete_local_events": True,
"purge_up_to_ts": int(event_id)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

According to the docstring, this is already an int. I don't think we want to try to catch user misuses, especially in API level methods.

return self._send("POST", "/admin/purge_history/%s" % room_id, content)

def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

There should be a newline after this one (applies to most of the docstrings here).


def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.
Admin api part.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I doubt this line is useful, but if you want to keep it it needs a newline after (applies to every docstrings).

return self._send("POST", "/admin/reset_password/%s" % user_id, content)

def quarantine_media(self, room_id):
"""Quarantine all media in room so that no one can download it via thi server.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

return self._send("POST", "/admin/quarantine_media/%s" % room_id)

def shutdown_room(self, room_id, new_room_user_id, room_name=False, message=False):
"""Shuts down a room by removing all local users from the room and blocking

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The first line of a docstring should be a single sentence, ie not split across multiple lines.

@DecaTec

Copy link
Copy Markdown

This PR is pretty old. Is anyone still working on it or are there any chances that this will be merged soon?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@slipeer@DecaTec@Zil0
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Admin API implementation by slipeer · Pull Request #253 · matrix-org/matrix-python-sdk · GitHub
Skip to content

Admin API implementation - #253

Open
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api
Open

Admin API implementation#253
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api

Conversation

@slipeer

Copy link
Copy Markdown

Admin API implementation in separate module.
Implemented methods:

  • purge_hostory
  • purge_hostory_status
  • media_in_room
  • whois
  • deactivate
  • reset_password
  • quarantine_media
  • shutdown_room

Based on https://github.com/matrix-org/synapse/tree/master/docs/admin_api docs
And synapse sources: https://github.com/matrix-org/synapse/blob/master/synapse/rest/client/v1/admin.py

Signed-off-by: Pavel Kardash slipeer@gmail.com

@Zil0Zil0 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cool PR! I took a first look at it and left some thoughts. I'm not done since I still need to read the Synapse bits it is based on, try out the code, and look at the tests.

Other general thoughts:

I think the filename admin_api.py should be changed to something indicating that it concerns Synapse (or else what to do when it'll come to implement the admin endpoints of another HS?).
Maybe it could even live in a submodule, by putting the file in synapse/admin_api.py, as it is maybe too specific to live directly in matrix_client.

Last thing, the documentation you added will not be present in the Sphinx rendering automatically. You have to do something like this c95c67c.

)
"""
def purge_history(self, room_id, event_id):
"""Perform /admin/purge_hostory.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

Admin api part.
Args:
room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why not simply have two optional arguments? It would look clearer to me, and simplify the code.

room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.
"""
if isinstance(event_id, basestring):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not relevant if you choose to follow the comment above, but it looks like swapping the if/else blocks here would allow to test for isinstance(event_id, int) and get rid of the ugly basestring hack.

else:
content = {
"delete_local_events": True,
"purge_up_to_ts": int(event_id)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

According to the docstring, this is already an int. I don't think we want to try to catch user misuses, especially in API level methods.

return self._send("POST", "/admin/purge_history/%s" % room_id, content)

def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

There should be a newline after this one (applies to most of the docstrings here).


def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.
Admin api part.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I doubt this line is useful, but if you want to keep it it needs a newline after (applies to every docstrings).

return self._send("POST", "/admin/reset_password/%s" % user_id, content)

def quarantine_media(self, room_id):
"""Quarantine all media in room so that no one can download it via thi server.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

return self._send("POST", "/admin/quarantine_media/%s" % room_id)

def shutdown_room(self, room_id, new_room_user_id, room_name=False, message=False):
"""Shuts down a room by removing all local users from the room and blocking

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The first line of a docstring should be a single sentence, ie not split across multiple lines.

@DecaTec

Copy link
Copy Markdown

This PR is pretty old. Is anyone still working on it or are there any chances that this will be merged soon?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@slipeer@DecaTec@Zil0
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Admin API implementation by slipeer · Pull Request #253 · matrix-org/matrix-python-sdk · GitHub
Skip to content

Admin API implementation - #253

Open
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api
Open

Admin API implementation#253
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api

Conversation

@slipeer

Copy link
Copy Markdown

Admin API implementation in separate module.
Implemented methods:

  • purge_hostory
  • purge_hostory_status
  • media_in_room
  • whois
  • deactivate
  • reset_password
  • quarantine_media
  • shutdown_room

Based on https://github.com/matrix-org/synapse/tree/master/docs/admin_api docs
And synapse sources: https://github.com/matrix-org/synapse/blob/master/synapse/rest/client/v1/admin.py

Signed-off-by: Pavel Kardash slipeer@gmail.com

@Zil0Zil0 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cool PR! I took a first look at it and left some thoughts. I'm not done since I still need to read the Synapse bits it is based on, try out the code, and look at the tests.

Other general thoughts:

I think the filename admin_api.py should be changed to something indicating that it concerns Synapse (or else what to do when it'll come to implement the admin endpoints of another HS?).
Maybe it could even live in a submodule, by putting the file in synapse/admin_api.py, as it is maybe too specific to live directly in matrix_client.

Last thing, the documentation you added will not be present in the Sphinx rendering automatically. You have to do something like this c95c67c.

)
"""
def purge_history(self, room_id, event_id):
"""Perform /admin/purge_hostory.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

Admin api part.
Args:
room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why not simply have two optional arguments? It would look clearer to me, and simplify the code.

room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.
"""
if isinstance(event_id, basestring):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not relevant if you choose to follow the comment above, but it looks like swapping the if/else blocks here would allow to test for isinstance(event_id, int) and get rid of the ugly basestring hack.

else:
content = {
"delete_local_events": True,
"purge_up_to_ts": int(event_id)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

According to the docstring, this is already an int. I don't think we want to try to catch user misuses, especially in API level methods.

return self._send("POST", "/admin/purge_history/%s" % room_id, content)

def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

There should be a newline after this one (applies to most of the docstrings here).


def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.
Admin api part.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I doubt this line is useful, but if you want to keep it it needs a newline after (applies to every docstrings).

return self._send("POST", "/admin/reset_password/%s" % user_id, content)

def quarantine_media(self, room_id):
"""Quarantine all media in room so that no one can download it via thi server.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

return self._send("POST", "/admin/quarantine_media/%s" % room_id)

def shutdown_room(self, room_id, new_room_user_id, room_name=False, message=False):
"""Shuts down a room by removing all local users from the room and blocking

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The first line of a docstring should be a single sentence, ie not split across multiple lines.

@DecaTec

Copy link
Copy Markdown

This PR is pretty old. Is anyone still working on it or are there any chances that this will be merged soon?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@slipeer@DecaTec@Zil0
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Admin API implementation by slipeer · Pull Request #253 · matrix-org/matrix-python-sdk · GitHub
Skip to content

Admin API implementation - #253

Open
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api
Open

Admin API implementation#253
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api

Conversation

@slipeer

Copy link
Copy Markdown

Admin API implementation in separate module.
Implemented methods:

  • purge_hostory
  • purge_hostory_status
  • media_in_room
  • whois
  • deactivate
  • reset_password
  • quarantine_media
  • shutdown_room

Based on https://github.com/matrix-org/synapse/tree/master/docs/admin_api docs
And synapse sources: https://github.com/matrix-org/synapse/blob/master/synapse/rest/client/v1/admin.py

Signed-off-by: Pavel Kardash slipeer@gmail.com

@Zil0Zil0 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cool PR! I took a first look at it and left some thoughts. I'm not done since I still need to read the Synapse bits it is based on, try out the code, and look at the tests.

Other general thoughts:

I think the filename admin_api.py should be changed to something indicating that it concerns Synapse (or else what to do when it'll come to implement the admin endpoints of another HS?).
Maybe it could even live in a submodule, by putting the file in synapse/admin_api.py, as it is maybe too specific to live directly in matrix_client.

Last thing, the documentation you added will not be present in the Sphinx rendering automatically. You have to do something like this c95c67c.

)
"""
def purge_history(self, room_id, event_id):
"""Perform /admin/purge_hostory.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

Admin api part.
Args:
room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why not simply have two optional arguments? It would look clearer to me, and simplify the code.

room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.
"""
if isinstance(event_id, basestring):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not relevant if you choose to follow the comment above, but it looks like swapping the if/else blocks here would allow to test for isinstance(event_id, int) and get rid of the ugly basestring hack.

else:
content = {
"delete_local_events": True,
"purge_up_to_ts": int(event_id)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

According to the docstring, this is already an int. I don't think we want to try to catch user misuses, especially in API level methods.

return self._send("POST", "/admin/purge_history/%s" % room_id, content)

def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

There should be a newline after this one (applies to most of the docstrings here).


def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.
Admin api part.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I doubt this line is useful, but if you want to keep it it needs a newline after (applies to every docstrings).

return self._send("POST", "/admin/reset_password/%s" % user_id, content)

def quarantine_media(self, room_id):
"""Quarantine all media in room so that no one can download it via thi server.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

return self._send("POST", "/admin/quarantine_media/%s" % room_id)

def shutdown_room(self, room_id, new_room_user_id, room_name=False, message=False):
"""Shuts down a room by removing all local users from the room and blocking

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The first line of a docstring should be a single sentence, ie not split across multiple lines.

@DecaTec

Copy link
Copy Markdown

This PR is pretty old. Is anyone still working on it or are there any chances that this will be merged soon?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@slipeer@DecaTec@Zil0
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Admin API implementation by slipeer · Pull Request #253 · matrix-org/matrix-python-sdk · GitHub
Skip to content

Admin API implementation - #253

Open
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api
Open

Admin API implementation#253
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api

Conversation

@slipeer

Copy link
Copy Markdown

Admin API implementation in separate module.
Implemented methods:

  • purge_hostory
  • purge_hostory_status
  • media_in_room
  • whois
  • deactivate
  • reset_password
  • quarantine_media
  • shutdown_room

Based on https://github.com/matrix-org/synapse/tree/master/docs/admin_api docs
And synapse sources: https://github.com/matrix-org/synapse/blob/master/synapse/rest/client/v1/admin.py

Signed-off-by: Pavel Kardash slipeer@gmail.com

@Zil0Zil0 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cool PR! I took a first look at it and left some thoughts. I'm not done since I still need to read the Synapse bits it is based on, try out the code, and look at the tests.

Other general thoughts:

I think the filename admin_api.py should be changed to something indicating that it concerns Synapse (or else what to do when it'll come to implement the admin endpoints of another HS?).
Maybe it could even live in a submodule, by putting the file in synapse/admin_api.py, as it is maybe too specific to live directly in matrix_client.

Last thing, the documentation you added will not be present in the Sphinx rendering automatically. You have to do something like this c95c67c.

)
"""
def purge_history(self, room_id, event_id):
"""Perform /admin/purge_hostory.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

Admin api part.
Args:
room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why not simply have two optional arguments? It would look clearer to me, and simplify the code.

room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.
"""
if isinstance(event_id, basestring):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not relevant if you choose to follow the comment above, but it looks like swapping the if/else blocks here would allow to test for isinstance(event_id, int) and get rid of the ugly basestring hack.

else:
content = {
"delete_local_events": True,
"purge_up_to_ts": int(event_id)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

According to the docstring, this is already an int. I don't think we want to try to catch user misuses, especially in API level methods.

return self._send("POST", "/admin/purge_history/%s" % room_id, content)

def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

There should be a newline after this one (applies to most of the docstrings here).


def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.
Admin api part.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I doubt this line is useful, but if you want to keep it it needs a newline after (applies to every docstrings).

return self._send("POST", "/admin/reset_password/%s" % user_id, content)

def quarantine_media(self, room_id):
"""Quarantine all media in room so that no one can download it via thi server.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

return self._send("POST", "/admin/quarantine_media/%s" % room_id)

def shutdown_room(self, room_id, new_room_user_id, room_name=False, message=False):
"""Shuts down a room by removing all local users from the room and blocking

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The first line of a docstring should be a single sentence, ie not split across multiple lines.

@DecaTec

Copy link
Copy Markdown

This PR is pretty old. Is anyone still working on it or are there any chances that this will be merged soon?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@slipeer@DecaTec@Zil0
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Admin API implementation by slipeer · Pull Request #253 · matrix-org/matrix-python-sdk · GitHub
Skip to content

Admin API implementation - #253

Open
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api
Open

Admin API implementation#253
slipeer wants to merge 1 commit into
matrix-org:masterfrom
slipeer:admin_api

Conversation

@slipeer

Copy link
Copy Markdown

Admin API implementation in separate module.
Implemented methods:

  • purge_hostory
  • purge_hostory_status
  • media_in_room
  • whois
  • deactivate
  • reset_password
  • quarantine_media
  • shutdown_room

Based on https://github.com/matrix-org/synapse/tree/master/docs/admin_api docs
And synapse sources: https://github.com/matrix-org/synapse/blob/master/synapse/rest/client/v1/admin.py

Signed-off-by: Pavel Kardash slipeer@gmail.com

@Zil0Zil0 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cool PR! I took a first look at it and left some thoughts. I'm not done since I still need to read the Synapse bits it is based on, try out the code, and look at the tests.

Other general thoughts:

I think the filename admin_api.py should be changed to something indicating that it concerns Synapse (or else what to do when it'll come to implement the admin endpoints of another HS?).
Maybe it could even live in a submodule, by putting the file in synapse/admin_api.py, as it is maybe too specific to live directly in matrix_client.

Last thing, the documentation you added will not be present in the Sphinx rendering automatically. You have to do something like this c95c67c.

)
"""
def purge_history(self, room_id, event_id):
"""Perform /admin/purge_hostory.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

Admin api part.
Args:
room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why not simply have two optional arguments? It would look clearer to me, and simplify the code.

room_id (str): Room_id to purge.
event_id (str or int): Event_id or ts to purge before.
"""
if isinstance(event_id, basestring):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not relevant if you choose to follow the comment above, but it looks like swapping the if/else blocks here would allow to test for isinstance(event_id, int) and get rid of the ugly basestring hack.

else:
content = {
"delete_local_events": True,
"purge_up_to_ts": int(event_id)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

According to the docstring, this is already an int. I don't think we want to try to catch user misuses, especially in API level methods.

return self._send("POST", "/admin/purge_history/%s" % room_id, content)

def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

There should be a newline after this one (applies to most of the docstrings here).


def purge_history_status(self, purge_id):
"""Perform /admin/purge_history_status.
Admin api part.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I doubt this line is useful, but if you want to keep it it needs a newline after (applies to every docstrings).

return self._send("POST", "/admin/reset_password/%s" % user_id, content)

def quarantine_media(self, room_id):
"""Quarantine all media in room so that no one can download it via thi server.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

typo

return self._send("POST", "/admin/quarantine_media/%s" % room_id)

def shutdown_room(self, room_id, new_room_user_id, room_name=False, message=False):
"""Shuts down a room by removing all local users from the room and blocking

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The first line of a docstring should be a single sentence, ie not split across multiple lines.

@DecaTec

Copy link
Copy Markdown

This PR is pretty old. Is anyone still working on it or are there any chances that this will be merged soon?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@slipeer@DecaTec@Zil0