From 6217542494de4df8f00d1af29404a3d2585313da Mon Sep 17 00:00:00 2001 From: lxnay Date: Mon, 30 Jun 2008 13:15:06 +0000 Subject: [PATCH] Entropy/Repository Client Interface: - implement login method (only used w/SSL) - implement logout method (only used w/SSL) Entropy/SocketHostInterface: - fix login and logout cmds (my fault) git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@2203 cd1c1023-2f26-0410-ae45-c471fc1f0318 --- libraries/entropy.py | 83 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 65 insertions(+), 18 deletions(-) diff --git a/libraries/entropy.py b/libraries/entropy.py index 15e0b3d9c..2354af187 100644 --- a/libraries/entropy.py +++ b/libraries/entropy.py @@ -13190,17 +13190,17 @@ class SocketHostInterface: 'auth': False, 'built_in': True, 'cb': self.docmd_login, - 'args': ["self.transmit", "authenticator", "self.client_address", "myargs"], + 'args': ["self.transmit", "authenticator", "session", "self.client_address", "myargs"], 'as_user': False, 'desc': "login on the running server (allows running extra commands)", - 'syntax': " login ", + 'syntax': " login >", 'from': str(self), }, 'logout': { 'auth': True, 'built_in': True, 'cb': self.docmd_logout, - 'args': ["self.transmit", "authenticator", "myargs"], + 'args': ["self.transmit", "authenticator", "session", "myargs"], 'as_user': False, 'desc': "logout on the running server", 'syntax': " logout ", @@ -13274,7 +13274,7 @@ class SocketHostInterface: return False,"invalid config option" - def docmd_login(self, transmitter, authenticator, client_address, myargs): + def docmd_login(self, transmitter, authenticator, session, client_address, myargs): # is already auth'd? auth_uid = self.HostInterface.sessions[session]['auth_uid'] @@ -13315,7 +13315,7 @@ class SocketHostInterface: transmitter(self.HostInterface.answers['no']) return False,reason - def docmd_logout(self, transmitter, authenticator, myargs): + def docmd_logout(self, transmitter, authenticator, session, myargs): status, user, reason = authenticator.docmd_logout(myargs) if status: self.HostInterface.updateProgress( @@ -17468,11 +17468,11 @@ class EntropyRepositorySocketClientCommands(EntropySocketClientCommands): self.Entropy.updateProgress( "[%s:%s|%s:%s|%s:%s] %s" % ( darkblue(_("repo")), - bold(repository), + bold(str(repository)), darkred(_("arch")), - bold(arch), + bold(str(arch)), darkgreen(_("product")), - bold(product), + bold(str(product)), blue(mytxt), ), importance = 1, @@ -17485,11 +17485,11 @@ class EntropyRepositorySocketClientCommands(EntropySocketClientCommands): self.Entropy.updateProgress( "[%s:%s|%s:%s|%s:%s] %s" % ( darkblue(_("repo")), - bold(repository), + bold(str(repository)), darkred(_("arch")), - bold(arch), + bold(str(arch)), darkgreen(_("product")), - bold(product), + bold(str(product)), blue(mytxt), ), importance = 1, @@ -17502,11 +17502,11 @@ class EntropyRepositorySocketClientCommands(EntropySocketClientCommands): self.Entropy.updateProgress( "[%s:%s|%s:%s|%s:%s] %s: %s" % ( darkblue(_("repo")), - bold(repository), + bold(str(repository)), darkred(_("arch")), - bold(arch), + bold(str(arch)), darkgreen(_("product")), - bold(product), + bold(str(product)), blue(mytxt), repr(data), ), @@ -17564,13 +17564,13 @@ class EntropyRepositorySocketClientCommands(EntropySocketClientCommands): myidlist = ' '.join([str(x) for x in idpackages]) cmd = "%s %s %s %s %s %s" % (session_id, 'dbdiff', repository, arch, product, myidlist,) - data = self.retrieve_command_answer(cmd, repository, arch, product, compression, session_id) + data = self.retrieve_command_answer(cmd, session_id, repository, arch, product, compression) if close_session: self.Service.close_session(session_id) return data - def retrieve_command_answer(self, cmd, repository, arch, product, compression, session_id): + def retrieve_command_answer(self, cmd, session_id, repository = None, arch = None, product = None, compression = False): tries = 3 lasterr = None @@ -17618,7 +17618,7 @@ class EntropyRepositorySocketClientCommands(EntropySocketClientCommands): ' '.join([str(x) for x in idpackages]), ) - data = self.retrieve_command_answer(cmd, repository, arch, product, compression, session_id) + data = self.retrieve_command_answer(cmd, session_id, repository, arch, product, compression) if close_session: self.Service.close_session(session_id) return data @@ -17639,7 +17639,7 @@ class EntropyRepositorySocketClientCommands(EntropySocketClientCommands): product, ) - data = self.retrieve_command_answer(cmd, repository, arch, product, compression, session_id) + data = self.retrieve_command_answer(cmd, session_id, repository, arch, product, compression) if close_session: self.Service.close_session(session_id) return data @@ -17687,6 +17687,53 @@ class EntropyRepositorySocketClientCommands(EntropySocketClientCommands): if tries == 0: raise + def service_login(self, username, password, session_id): + + self.Service.check_socket_connection() + + tries = 10 + while 1: + try: + return self.service_login_handler(username, password, session_id) + except (self.socket.error,self.struct.error,): + self.Service.reconnect_socket() + tries -= 1 + if tries == 0: + raise + + def service_login_handler(self, username, password, session_id): + + cmd = "%s %s %s %s" % ( + session_id, + 'login', + username, + password, + ) + + return self.retrieve_command_answer(cmd, session_id) + + def service_logout(self, username, session_id): + + self.Service.check_socket_connection() + + tries = 10 + while 1: + try: + return self.service_logout_handler(username, session_id) + except (self.socket.error,self.struct.error,): + self.Service.reconnect_socket() + tries -= 1 + if tries == 0: + raise + + def service_logout_handler(self, username, session_id): + + cmd = "%s %s %s" % ( + session_id, + 'logout', + username, + ) + return self.retrieve_command_answer(cmd, session_id) def set_gzip_compression_on_rc(self, session, do): self.Service.check_socket_connection()