Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
6997261c6b | ||
![]() |
6cfb5cb14c | ||
![]() |
8567d6034f | ||
![]() |
e06368f8cd | ||
![]() |
4b37a4706f | ||
![]() |
7b1564947d | ||
![]() |
f5652a667b | ||
![]() |
3b2c865a58 | ||
![]() |
db0e683d01 | ||
![]() |
e29a9e0394 | ||
![]() |
edf65f4f52 | ||
![]() |
98677fd602 |
@@ -45,7 +45,7 @@ The latest source code for SleekXMPP may be found on `Github
|
||||
``develop`` branch.
|
||||
|
||||
**Latest Release**
|
||||
- `1.1 <http://github.com/fritzy/SleekXMPP/zipball/1.1>`_
|
||||
- `1.1.3 <http://github.com/fritzy/SleekXMPP/zipball/1.1.3>`_
|
||||
|
||||
**Develop Releases**
|
||||
- `Latest Develop Version <http://github.com/fritzy/SleekXMPP/zipball/develop>`_
|
||||
|
@@ -737,7 +737,8 @@ class BaseXMPP(XMLStream):
|
||||
if not self.is_component and not presence['to'].bare:
|
||||
presence['to'] = self.boundjid
|
||||
|
||||
self.event("presence_%s" % presence['type'], presence)
|
||||
self.event('presence', presence)
|
||||
self.event('presence_%s' % presence['type'], presence)
|
||||
|
||||
# Check for changes in subscription state.
|
||||
if presence['type'] in ('subscribe', 'subscribed',
|
||||
|
@@ -79,7 +79,7 @@ class ComponentXMPP(BaseXMPP):
|
||||
self._handle_probe)
|
||||
|
||||
def connect(self, host=None, port=None, use_ssl=False,
|
||||
use_tls=True, reattempt=True):
|
||||
use_tls=False, reattempt=True):
|
||||
"""Connect to the server.
|
||||
|
||||
Setting ``reattempt`` to ``True`` will cause connection attempts to
|
||||
@@ -104,10 +104,13 @@ class ComponentXMPP(BaseXMPP):
|
||||
|
||||
self.server_name = self.boundjid.host
|
||||
|
||||
if use_tls:
|
||||
log.info("XEP-0114 components can not use TLS")
|
||||
|
||||
log.debug("Connecting to %s:%s", host, port)
|
||||
return XMLStream.connect(self, host=host, port=port,
|
||||
use_ssl=use_ssl,
|
||||
use_tls=use_tls,
|
||||
use_tls=False,
|
||||
reattempt=reattempt)
|
||||
|
||||
def incoming_filter(self, xml):
|
||||
|
@@ -50,7 +50,7 @@ class XEP_0077(BasePlugin):
|
||||
# We have already logged in with an account
|
||||
return False
|
||||
|
||||
if self.create_account:
|
||||
if self.create_account and self.xmpp.event_handled('register'):
|
||||
form = self.get_registration()
|
||||
self.xmpp.event('register', form, direct=True)
|
||||
return True
|
||||
|
@@ -119,7 +119,12 @@ class RosterNode(object):
|
||||
"""Return a dictionary mapping group names to JIDs."""
|
||||
result = {}
|
||||
for jid in self._jids:
|
||||
for group in self._jids[jid]['groups']:
|
||||
groups = self._jids[jid]['groups']
|
||||
if not groups:
|
||||
if '' not in result:
|
||||
result[''] = []
|
||||
result[''].append(jid)
|
||||
for group in groups:
|
||||
if group not in result:
|
||||
result[group] = []
|
||||
result[group].append(jid)
|
||||
|
@@ -9,5 +9,5 @@
|
||||
# We don't want to have to import the entire library
|
||||
# just to get the version info for setup.py
|
||||
|
||||
__version__ = '1.1.0'
|
||||
__version_info__ = (1, 1, 0, '', 0)
|
||||
__version__ = '1.1.3'
|
||||
__version_info__ = (1, 1, 3, '', 0)
|
||||
|
@@ -493,7 +493,8 @@ class XMLStream(object):
|
||||
|
||||
ssl_socket = ssl.wrap_socket(self.socket,
|
||||
ca_certs=self.ca_certs,
|
||||
cert_reqs=cert_policy)
|
||||
cert_reqs=cert_policy,
|
||||
do_handshake_on_connect=False)
|
||||
|
||||
if hasattr(self.socket, 'socket'):
|
||||
# We are using a testing socket, so preserve the top
|
||||
@@ -511,6 +512,16 @@ class XMLStream(object):
|
||||
self.socket.connect(self.address)
|
||||
|
||||
if self.use_ssl and self.ssl_support:
|
||||
try:
|
||||
self.socket.do_handshake()
|
||||
except (Socket.error, ssl.SSLError):
|
||||
log.error('CERT: Invalid certificate trust chain.')
|
||||
if not self.event_handled('ssl_invalid_chain'):
|
||||
self.disconnect(self.auto_reconnect, send_close=False)
|
||||
else:
|
||||
self.event('ssl_invalid_chain', direct=True)
|
||||
return False
|
||||
|
||||
self._der_cert = self.socket.getpeercert(binary_form=True)
|
||||
pem_cert = ssl.DER_cert_to_PEM_cert(self._der_cert)
|
||||
log.debug('CERT: %s', pem_cert)
|
||||
@@ -520,8 +531,10 @@ class XMLStream(object):
|
||||
cert.verify(self._expected_server_name, self._der_cert)
|
||||
except cert.CertificateError as err:
|
||||
log.error(err.message)
|
||||
self.event('ssl_invalid_cert', cert, direct=True)
|
||||
self.disconnect(send_close=False)
|
||||
if not self.event_handled('ssl_invalid_cert'):
|
||||
self.disconnect(send_close=False)
|
||||
else:
|
||||
self.event('ssl_invalid_cert', cert, direct=True)
|
||||
|
||||
self.set_socket(self.socket, ignore=True)
|
||||
#this event is where you should set your application state
|
||||
@@ -788,10 +801,12 @@ class XMLStream(object):
|
||||
|
||||
try:
|
||||
self.socket.do_handshake()
|
||||
except:
|
||||
except (Socket.error, ssl.SSLError):
|
||||
log.error('CERT: Invalid certificate trust chain.')
|
||||
self.event('ssl_invalid_chain', direct=True)
|
||||
self.disconnect(self.auto_reconnect, send_close=False)
|
||||
if not self.event_handled('ssl_invalid_chain'):
|
||||
self.disconnect(self.auto_reconnect, send_close=False)
|
||||
else:
|
||||
self.event('ssl_invalid_chain', direct=True)
|
||||
return False
|
||||
|
||||
self._der_cert = self.socket.getpeercert(binary_form=True)
|
||||
@@ -803,9 +818,10 @@ class XMLStream(object):
|
||||
cert.verify(self._expected_server_name, self._der_cert)
|
||||
except cert.CertificateError as err:
|
||||
log.error(err.message)
|
||||
self.event('ssl_invalid_cert', cert, direct=True)
|
||||
if not self.event_handled('ssl_invalid_cert'):
|
||||
self.disconnect(self.auto_reconnect, send_close=False)
|
||||
else:
|
||||
self.event('ssl_invalid_cert', cert, direct=True)
|
||||
|
||||
self.set_socket(self.socket)
|
||||
return True
|
||||
@@ -816,9 +832,20 @@ class XMLStream(object):
|
||||
def _cert_expiration(self, event):
|
||||
"""Schedule an event for when the TLS certificate expires."""
|
||||
|
||||
if not self.use_tls and not self.use_ssl:
|
||||
return
|
||||
|
||||
if not self._der_cert:
|
||||
log.warn("TLS or SSL was enabled, but no certificate was found.")
|
||||
return
|
||||
|
||||
def restart():
|
||||
log.warn("The server certificate has expired. Restarting.")
|
||||
self.reconnect()
|
||||
if not self.event_handled('ssl_expired_cert'):
|
||||
log.warn("The server certificate has expired. Restarting.")
|
||||
self.reconnect()
|
||||
else:
|
||||
pem_cert = ssl.DER_cert_to_PEM_cert(self._der_cert)
|
||||
self.event('ssl_expired_cert', pem_cert)
|
||||
|
||||
cert_ttl = cert.get_ttl(self._der_cert)
|
||||
if cert_ttl is None:
|
||||
|
Reference in New Issue
Block a user