Since there's no default username for authentication, update hostlist to include the username.
Remove debug prints or extreme debugging. Minor code cleanup. Remove un-used imports.
This commit is contained in:
parent
86a1b801f5
commit
e44cac0eaa
|
@ -104,7 +104,8 @@ class AuthManager(component.Component):
|
|||
from hashlib import sha1 as sha_hash
|
||||
except ImportError:
|
||||
from sha import new as sha_hash
|
||||
return "localclient:" + sha_hash(str(random.random())).hexdigest() + ":" + str(AUTH_LEVEL_ADMIN) + "\n"
|
||||
return ("localclient:" + sha_hash(str(random.random())).hexdigest() +
|
||||
":" + str(AUTH_LEVEL_ADMIN) + "\n")
|
||||
|
||||
def __load_auth_file(self):
|
||||
auth_file = configmanager.get_config_dir("auth")
|
||||
|
@ -135,7 +136,9 @@ class AuthManager(component.Component):
|
|||
continue
|
||||
if len(lsplit) == 2:
|
||||
username, password = lsplit
|
||||
log.warning("Your auth entry for %s contains no auth level, using AUTH_LEVEL_DEFAULT(%s)..", username, AUTH_LEVEL_DEFAULT)
|
||||
log.warning("Your auth entry for %s contains no auth level, "
|
||||
"using AUTH_LEVEL_DEFAULT(%s)..", username,
|
||||
AUTH_LEVEL_DEFAULT)
|
||||
level = AUTH_LEVEL_DEFAULT
|
||||
elif len(lsplit) == 3:
|
||||
username, password, level = lsplit
|
||||
|
|
|
@ -44,7 +44,6 @@ except ImportError:
|
|||
import zlib
|
||||
|
||||
import deluge.common
|
||||
import deluge.component as component
|
||||
from deluge.log import LOG as log
|
||||
from deluge.error import AuthenticationRequired
|
||||
from deluge.event import known_events
|
||||
|
@ -111,8 +110,10 @@ class DelugeRPCRequest(object):
|
|||
|
||||
:returns: a properly formated RPCRequest
|
||||
"""
|
||||
if self.request_id is None or self.method is None or self.args is None or self.kwargs is None:
|
||||
raise TypeError("You must set the properties of this object before calling format_message!")
|
||||
if self.request_id is None or self.method is None or self.args is None \
|
||||
or self.kwargs is None:
|
||||
raise TypeError("You must set the properties of this object "
|
||||
"before calling format_message!")
|
||||
|
||||
return (self.request_id, self.method, self.args, self.kwargs)
|
||||
|
||||
|
@ -163,7 +164,8 @@ class DelugeRPCProtocol(Protocol):
|
|||
log.debug("Received invalid message: type is not tuple")
|
||||
return
|
||||
if len(request) < 3:
|
||||
log.debug("Received invalid message: number of items in response is %s", len(3))
|
||||
log.debug("Received invalid message: number of items in "
|
||||
"response is %s", len(3))
|
||||
return
|
||||
|
||||
message_type = request[0]
|
||||
|
@ -192,7 +194,8 @@ class DelugeRPCProtocol(Protocol):
|
|||
elif message_type == RPC_ERROR:
|
||||
# Create the DelugeRPCError to pass to the errback
|
||||
r = self.__rpc_requests[request_id]
|
||||
e = DelugeRPCError(r.method, r.args, r.kwargs, request[2][0], request[2][1], request[2][2])
|
||||
e = DelugeRPCError(r.method, r.args, r.kwargs, request[2][0],
|
||||
request[2][1], request[2][2])
|
||||
# Run the errbacks registered with this Deferred object
|
||||
d.errback(e)
|
||||
|
||||
|
@ -281,7 +284,9 @@ class DaemonSSLProxy(DaemonProxy):
|
|||
log.debug("sslproxy.connect()")
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.__connector = reactor.connectSSL(self.host, self.port, self.__factory, ssl.ClientContextFactory())
|
||||
self.__connector = reactor.connectSSL(self.host, self.port,
|
||||
self.__factory,
|
||||
ssl.ClientContextFactory())
|
||||
self.connect_deferred = defer.Deferred()
|
||||
self.daemon_info_deferred = defer.Deferred()
|
||||
|
||||
|
@ -389,17 +394,13 @@ class DaemonSSLProxy(DaemonProxy):
|
|||
"""
|
||||
try:
|
||||
if error_data.check(AuthenticationRequired):
|
||||
print error_data.value.__dict__
|
||||
return error_data
|
||||
except:
|
||||
pass
|
||||
|
||||
# print 1234567, error_data
|
||||
# Get the DelugeRPCError object from the error_data
|
||||
error = error_data.value
|
||||
|
||||
# if error.exception_type == "AuthenticationRequired":
|
||||
# return
|
||||
# Create a delugerpcrequest to print out a nice RPCRequest string
|
||||
r = DelugeRPCRequest()
|
||||
r.method = error.method
|
||||
|
@ -423,7 +424,8 @@ class DaemonSSLProxy(DaemonProxy):
|
|||
self.daemon_info_deferred.callback(daemon_info)
|
||||
|
||||
def on_info_fail(reason):
|
||||
log.debug("Failed to get info from daemon: %s", reason)
|
||||
log.debug("Failed to get info from daemon")
|
||||
log.exception(reason)
|
||||
self.daemon_info_deferred.errback(reason)
|
||||
|
||||
self.call("daemon.info").addCallback(on_info).addErrback(on_info_fail)
|
||||
|
@ -431,7 +433,6 @@ class DaemonSSLProxy(DaemonProxy):
|
|||
|
||||
def __on_connect_fail(self, reason):
|
||||
log.debug("__on_connect_fail called")
|
||||
log.debug("connect_fail: %s", reason)
|
||||
log.exception(reason)
|
||||
self.daemon_info_deferred.errback(reason)
|
||||
|
||||
|
@ -574,13 +575,6 @@ class Client(object):
|
|||
:returns: a Deferred object that will be called once the connection
|
||||
has been established or fails
|
||||
"""
|
||||
log.debug("real client connect")
|
||||
# if not username and host in ("127.0.0.1", "localhost"):
|
||||
# # No username was provided and it's the localhost, so we can try
|
||||
# # to grab the credentials from the auth file.
|
||||
# import common
|
||||
# username, password = common.get_localhost_auth()
|
||||
|
||||
self._daemon_proxy = DaemonSSLProxy(dict(self.__event_handlers))
|
||||
self._daemon_proxy.set_disconnect_callback(self.__on_disconnect)
|
||||
d = self._daemon_proxy.connect(host, port)
|
||||
|
@ -604,35 +598,16 @@ class Client(object):
|
|||
auth_deferred.errback(reason)
|
||||
|
||||
def on_connected(daemon_version):
|
||||
log.debug("Client.connect.on_connected: %s", daemon_version)
|
||||
print 1234, self._daemon_proxy
|
||||
log.debug("Client.connect.on_connected. Daemon version: %s",
|
||||
daemon_version)
|
||||
d = self._daemon_proxy.authenticate(username, password)
|
||||
print 1234, d
|
||||
d.addCallback(on_authenticate, daemon_version)
|
||||
d.addErrback(on_authenticate_fail)
|
||||
# return d
|
||||
|
||||
d.addCallback(on_connected)
|
||||
return auth_deferred
|
||||
return d
|
||||
|
||||
|
||||
# def authenticate(self, username="", password=""):
|
||||
# if not self.connected():
|
||||
# raise Exception("You first need to call connect")
|
||||
# if not username and self._daemon_proxy.host in ("127.0.0.1", "localhost"):
|
||||
# # No username was provided and it's the localhost, so we can try
|
||||
# # to grab the credentials from the auth file.
|
||||
# import common
|
||||
# username, password = common.get_localhost_auth()
|
||||
#
|
||||
# def on_authenticate_fail(reason):
|
||||
# log.debug("Failed to authenticate %s@%s:%s")
|
||||
#
|
||||
# d = self._daemon_proxy.authenticate(username, password)
|
||||
# d.addErrback(on_authenticate_fail)
|
||||
# return d
|
||||
|
||||
def disconnect(self):
|
||||
"""
|
||||
Disconnects from the daemon.
|
||||
|
|
|
@ -41,12 +41,10 @@ import logging
|
|||
from twisted.internet import reactor
|
||||
|
||||
import deluge.component as component
|
||||
import deluge.common
|
||||
import common
|
||||
import deluge.configmanager
|
||||
from deluge.ui.client import client
|
||||
import deluge.ui.client
|
||||
import deluge.ui.common
|
||||
from deluge.configmanager import ConfigManager
|
||||
from deluge.error import AuthenticationRequired
|
||||
from deluge.log import LOG as log
|
||||
|
@ -58,7 +56,8 @@ DEFAULT_HOST = "127.0.0.1"
|
|||
DEFAULT_PORT = 58846
|
||||
|
||||
DEFAULT_CONFIG = {
|
||||
"hosts": [(hashlib.sha1(str(time.time())).hexdigest(), DEFAULT_HOST, DEFAULT_PORT, "", "")]
|
||||
"hosts": [(hashlib.sha1(str(time.time())).hexdigest(), DEFAULT_HOST,
|
||||
DEFAULT_PORT, "localclient", "")]
|
||||
}
|
||||
|
||||
HOSTLIST_COL_ID = 0
|
||||
|
@ -145,7 +144,11 @@ class ConnectionManager(component.Component):
|
|||
# Create status pixbufs
|
||||
if not HOSTLIST_PIXBUFS:
|
||||
for stock_id in (gtk.STOCK_NO, gtk.STOCK_YES, gtk.STOCK_CONNECT):
|
||||
HOSTLIST_PIXBUFS.append(self.connection_manager.render_icon(stock_id, gtk.ICON_SIZE_MENU))
|
||||
HOSTLIST_PIXBUFS.append(
|
||||
self.connection_manager.render_icon(
|
||||
stock_id, gtk.ICON_SIZE_MENU
|
||||
)
|
||||
)
|
||||
|
||||
# Create the host list gtkliststore
|
||||
# id-hash, hostname, port, status, username, password, version
|
||||
|
@ -176,7 +179,9 @@ class ConnectionManager(component.Component):
|
|||
|
||||
# Connect the signals to the handlers
|
||||
self.glade.signal_autoconnect(self)
|
||||
self.hostlist.get_selection().connect("changed", self.on_hostlist_selection_changed)
|
||||
self.hostlist.get_selection().connect(
|
||||
"changed", self.on_hostlist_selection_changed
|
||||
)
|
||||
|
||||
self.__update_list()
|
||||
|
||||
|
@ -208,7 +213,8 @@ class ConnectionManager(component.Component):
|
|||
# Check to see if there is already an entry for this host and return
|
||||
# if thats the case
|
||||
for entry in self.liststore:
|
||||
if [entry[HOSTLIST_COL_HOST], entry[HOSTLIST_COL_PORT], entry[HOSTLIST_COL_USER]] == [host, port, username]:
|
||||
if [entry[HOSTLIST_COL_HOST], entry[HOSTLIST_COL_PORT],
|
||||
entry[HOSTLIST_COL_USER]] == [host, port, username]:
|
||||
raise Exception("Host already in list!")
|
||||
|
||||
# Host isn't in the list, so lets add it
|
||||
|
@ -417,8 +423,7 @@ class ConnectionManager(component.Component):
|
|||
self.glade.get_widget("button_startdaemon").set_sensitive(False)
|
||||
|
||||
# Make sure label is displayed correctly using mnemonics
|
||||
self.glade.get_widget("label_startdaemon").set_use_underline(
|
||||
True)
|
||||
self.glade.get_widget("label_startdaemon").set_use_underline(True)
|
||||
|
||||
def start_daemon(self, port, config):
|
||||
"""
|
||||
|
@ -431,8 +436,9 @@ class ConnectionManager(component.Component):
|
|||
if e.errno == 2:
|
||||
dialogs.ErrorDialog(
|
||||
_("Unable to start daemon!"),
|
||||
_("Deluge cannot find the 'deluged' executable, it is likely \
|
||||
that you forgot to install the deluged package or it's not in your PATH.")).run()
|
||||
_("Deluge cannot find the 'deluged' executable, it is "
|
||||
"likely that you forgot to install the deluged package "
|
||||
"or it's not in your PATH.")).run()
|
||||
else:
|
||||
raise e
|
||||
except Exception, e:
|
||||
|
@ -465,9 +471,7 @@ that you forgot to install the deluged package or it's not in your PATH.")).run(
|
|||
component.start()
|
||||
|
||||
def __on_connected_failed(self, reason, host_id, host, port, user):
|
||||
log.exception(reason.value)
|
||||
# log.debug(reason.__dict__)
|
||||
# log.debug(reason.value.__dict__)
|
||||
log.debug("Failed to connect: %s", reason)
|
||||
if reason.check(AuthenticationRequired):
|
||||
log.debug("PasswordRequired exception")
|
||||
dialog = dialogs.AuthenticationDialog(reason.value.message,
|
||||
|
@ -499,7 +503,8 @@ that you forgot to install the deluged package or it's not in your PATH.")).run(
|
|||
user = model[row][HOSTLIST_COL_USER]
|
||||
password = model[row][HOSTLIST_COL_PASS]
|
||||
|
||||
if status == _("Offline") and self.glade.get_widget("chk_autostart").get_active() and\
|
||||
if status == _("Offline") and \
|
||||
self.glade.get_widget("chk_autostart").get_active() and \
|
||||
host in ("127.0.0.1", "localhost"):
|
||||
# We need to start this localhost
|
||||
self.start_daemon(port, deluge.configmanager.get_config_dir())
|
||||
|
@ -515,7 +520,6 @@ that you forgot to install the deluged package or it's not in your PATH.")).run(
|
|||
do_retry_connect(try_counter)
|
||||
return result
|
||||
def do_retry_connect(try_counter):
|
||||
log.debug("user: %s pass: %s", user, password)
|
||||
d = client.connect(host, port, user, password)
|
||||
d.addCallback(self.__on_connected, host_id)
|
||||
d.addErrback(on_connect_fail, try_counter)
|
||||
|
@ -548,7 +552,8 @@ that you forgot to install the deluged package or it's not in your PATH.")).run(
|
|||
|
||||
# We add the host
|
||||
try:
|
||||
self.add_host(hostname, port_spinbutton.get_value_as_int(), username, password)
|
||||
self.add_host(hostname, port_spinbutton.get_value_as_int(),
|
||||
username, password)
|
||||
except Exception, e:
|
||||
from deluge.ui.gtkui.dialogs import ErrorDialog
|
||||
ErrorDialog(_("Error Adding Host"), e).run()
|
||||
|
|
|
@ -192,7 +192,7 @@ class ErrorDialog(BaseDialog):
|
|||
|
||||
class AuthenticationDialog(BaseDialog):
|
||||
"""
|
||||
Displays a dialog with an entry field asking for a password.
|
||||
Displays a dialog with entry fields asking for username and password.
|
||||
|
||||
When run(), it will return either a gtk.RESPONSE_CANCEL or a
|
||||
gtk.RESPONSE_OK.
|
||||
|
|
Loading…
Reference in New Issue