Module: deluge Branch: master Commit: 350d4d7260c32e8daa59ffe4902f37d7d02dbe52
Author: Andrew Resch <[email protected]> Date: Sat Sep 4 12:31:27 2010 -0700 Add rpc to check if authorized to call a rpc: daemon.authorized_call() --- deluge/core/daemon.py | 15 +++++++++++++++ deluge/core/rpcserver.py | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+), 0 deletions(-) diff --git a/deluge/core/daemon.py b/deluge/core/daemon.py index a943ac7..44b7912 100644 --- a/deluge/core/daemon.py +++ b/deluge/core/daemon.py @@ -204,3 +204,18 @@ class Daemon(object): Returns a list of the exported methods. """ return self.rpcserver.get_method_list() + + @export(1) + def authorized_call(self, rpc): + """ + Returns True if authorized to call rpc. + + :param rpc: a rpc, eg, "core.get_torrents_status" + :type rpc: string + + """ + if not rpc in self.get_method_list(): + return False + + auth_level = self.rpcserver.get_session_auth_level() + return auth_level >= self.rpcserver.get_rpc_auth_level() diff --git a/deluge/core/rpcserver.py b/deluge/core/rpcserver.py index 3ef39e8..ef088fe 100644 --- a/deluge/core/rpcserver.py +++ b/deluge/core/rpcserver.py @@ -443,6 +443,24 @@ class RPCServer(component.Component): # No connections made yet return "" + def get_session_auth_level(self): + """ + Returns the auth level of the user calling the current RPC. + + :returns: the auth level + :rtype: int + """ + return self.factory.authorized_sessions[self.get_session_id()][0] + + def get_rpc_auth_level(self, rpc): + """ + Returns the auth level requirement for an exported rpc. + + :returns: the auth level + :rtype: int + """ + self.factory.methods[rpc]._rpcserver_auth_level + def is_session_valid(self, session_id): """ Checks if the session is still valid, eg, if the client is still connected. -- You received this message because you are subscribed to the Google Groups "deluge-commit" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/deluge-commit?hl=en.
