12 |
12 |
13 from PyQt4.QtCore import pyqtSlot, pyqtSignal, Qt, QByteArray, QTimer |
13 from PyQt4.QtCore import pyqtSlot, pyqtSignal, Qt, QByteArray, QTimer |
14 from PyQt4.QtGui import QWidget, QToolButton, QLabel, QTabWidget |
14 from PyQt4.QtGui import QWidget, QToolButton, QLabel, QTabWidget |
15 from PyQt4.QtNetwork import QTcpSocket, QAbstractSocket |
15 from PyQt4.QtNetwork import QTcpSocket, QAbstractSocket |
16 try: |
16 try: |
17 from PyQt4.QtNetwork import QSslSocket, QSslError # __IGNORE_EXCEPTION__ __IGNORE_WARNING__ |
17 from PyQt4.QtNetwork import QSslSocket, QSslConfiguration |
|
18 from E5Network.E5SslErrorHandler import E5SslErrorHandler |
18 SSL_AVAILABLE = True |
19 SSL_AVAILABLE = True |
19 except ImportError: |
20 except ImportError: |
20 SSL_AVAILABLE = False |
21 SSL_AVAILABLE = False |
21 |
22 |
22 from E5Gui import E5MessageBox |
23 from E5Gui import E5MessageBox |
86 |
87 |
87 self.__buffer = "" |
88 self.__buffer = "" |
88 self.__userPrefix = {} |
89 self.__userPrefix = {} |
89 |
90 |
90 self.__socket = None |
91 self.__socket = None |
|
92 if SSL_AVAILABLE: |
|
93 self.__sslErrorHandler = E5SslErrorHandler(self) |
|
94 else: |
|
95 self.__sslErrorHandler = None |
91 |
96 |
92 self.__patterns = [ |
97 self.__patterns = [ |
93 # :foo_!n=foo@foohost.bar.net PRIVMSG bar_ :some long message |
98 # :foo_!n=foo@foohost.bar.net PRIVMSG bar_ :some long message |
94 (re.compile(r":([^!]+)!([^ ]+)\sPRIVMSG\s([^ ]+)\s:(.*)"), self.__query), |
99 (re.compile(r":([^!]+)!([^ ]+)\sPRIVMSG\s([^ ]+)\s:(.*)"), self.__query), |
95 # :foo.bar.net COMMAND some message |
100 # :foo.bar.net COMMAND some message |
726 """ |
731 """ |
727 Private slot to handle SSL errors. |
732 Private slot to handle SSL errors. |
728 |
733 |
729 @param errors list of SSL errors (list of QSslError) |
734 @param errors list of SSL errors (list of QSslError) |
730 """ |
735 """ |
731 errorString = "" |
736 ignore, defaultChanged = self.__sslErrorHandler.sslErrors( |
732 if errors: |
737 errors, self.__server.getName(), self.__server.getPort()) |
733 self.__sslErrorLock = True |
738 if ignore: |
734 errorStrings = [] |
739 if defaultChanged: |
735 for err in errors: |
740 self.__socket.setSslConfiguration( |
736 errorStrings.append(err.errorString()) |
741 QSslConfiguration.defaultConfiguration()) |
737 errorString = '.<br/>'.join(errorStrings) |
|
738 ret = E5MessageBox.yesNo(self, |
|
739 self.trUtf8("SSL Errors"), |
|
740 self.trUtf8("""<p>SSL Errors:</p>""" |
|
741 """<p>{0}</p>""" |
|
742 """<p>Do you want to ignore these errors?</p>""")\ |
|
743 .format(errorString), |
|
744 icon=E5MessageBox.Warning) |
|
745 self.__sslErrorLock = False |
|
746 else: |
|
747 ret = True |
|
748 if ret: |
|
749 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), |
742 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), |
750 self.trUtf8("""The SSL certificate for the server {0} (port {1})""" |
743 self.trUtf8("""The SSL certificate for the server {0} (port {1})""" |
751 """ failed the authenticity check.""").format( |
744 """ failed the authenticity check.""").format( |
752 self.__server.getName(), self.__server.getPort())) |
745 self.__server.getName(), self.__server.getPort())) |
753 if self.__connectionState == IrcWidget.ServerConnecting: |
746 if self.__connectionState == IrcWidget.ServerConnecting: |
755 else: |
748 else: |
756 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), |
749 self.networkWidget.addErrorMessage(self.trUtf8("SSL Error"), |
757 self.trUtf8("""Could not connect to {0} (port {1}) using an SSL""" |
750 self.trUtf8("""Could not connect to {0} (port {1}) using an SSL""" |
758 """ encrypted connection. Either the server does not""" |
751 """ encrypted connection. Either the server does not""" |
759 """ support SSL (did you use the correct port?) or""" |
752 """ support SSL (did you use the correct port?) or""" |
760 """ you rejected the certificate.<br/>{2}""").format( |
753 """ you rejected the certificate.""").format( |
761 self.__server.getName(), self.__server.getPort(), errorString)) |
754 self.__server.getName(), self.__server.getPort())) |
762 self.__socket.close() |
755 self.__socket.close() |
763 |
756 |
764 def __setUserPrivilegePrefix(self, prefix1, prefix2): |
757 def __setUserPrivilegePrefix(self, prefix1, prefix2): |
765 """ |
758 """ |
766 Private method to set the user privilege prefix. |
759 Private method to set the user privilege prefix. |