diff options
17 files changed, 145 insertions, 104 deletions
diff --git a/sleekxmpp/plugins/google/__init__.py b/sleekxmpp/plugins/google/__init__.py new file mode 100644 index 00000000..bd7ca123 --- /dev/null +++ b/sleekxmpp/plugins/google/__init__.py @@ -0,0 +1,47 @@ +""" + SleekXMPP: The Sleek XMPP Library + Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout + This file is part of SleekXMPP. + + See the file LICENSE for copying permission. +""" + +from sleekxmpp.plugins.base import register_plugin, BasePlugin + +from sleekxmpp.plugins.google.gmail import Gmail +from sleekxmpp.plugins.google.auth import GoogleAuth +from sleekxmpp.plugins.google.settings import GoogleSettings +from sleekxmpp.plugins.google.nosave import GoogleNoSave + + +class Google(BasePlugin): + + """ + Google: Custom GTalk Features + + Also see: <https://developers.google.com/talk/jep_extensions/extensions> + """ + + name = 'google' + description = 'Google: Custom GTalk Features' + dependencies = set([ + 'gmail', + 'google_settings', + 'google_nosave', + 'google_auth' + ]) + + def __getitem__(self, attr): + if attr in ('settings', 'nosave', 'auth'): + return self.xmpp['google_%s' % attr] + elif attr == 'gmail': + return self.xmpp['gmail'] + else: + raise KeyError(attr) + + +register_plugin(Gmail) +register_plugin(GoogleAuth) +register_plugin(GoogleSettings) +register_plugin(GoogleNoSave) +register_plugin(Google) diff --git a/sleekxmpp/plugins/gmail/__init__.py b/sleekxmpp/plugins/google/auth/__init__.py index a87c78bb..5a8feb0d 100644 --- a/sleekxmpp/plugins/gmail/__init__.py +++ b/sleekxmpp/plugins/google/auth/__init__.py @@ -6,10 +6,5 @@ See the file LICENSE for copying permission. """ -from sleekxmpp.plugins.base import register_plugin - -from sleekxmpp.plugins.gmail import stanza -from sleekxmpp.plugins.gmail.notifications import Gmail - - -register_plugin(Gmail) +from sleekxmpp.plugins.google.auth import stanza +from sleekxmpp.plugins.google.auth.auth import GoogleAuth diff --git a/sleekxmpp/plugins/google_domain_discovery/auth.py b/sleekxmpp/plugins/google/auth/auth.py index 4de35f9f..042bd404 100644 --- a/sleekxmpp/plugins/google_domain_discovery/auth.py +++ b/sleekxmpp/plugins/google/auth/auth.py @@ -8,32 +8,31 @@ import logging -from sleekxmpp.stanza import Iq, Message -from sleekxmpp.xmlstream.handler import Callback -from sleekxmpp.xmlstream.matcher import StanzaPath from sleekxmpp.xmlstream import register_stanza_plugin from sleekxmpp.plugins import BasePlugin -from sleekxmpp.plugins.google_domain_discovery import stanza +from sleekxmpp.plugins.google.auth import stanza log = logging.getLogger(__name__) -class GoogleDomainDiscovery(BasePlugin): +class GoogleAuth(BasePlugin): """ - Google: JID Domain Discovery + Google: Auth Extensions (JID Domain Discovery, OAuth2) - Also see <https://developers.google.com/talk/jep_extensions/jid_domain_change + Also see: + <https://developers.google.com/talk/jep_extensions/jid_domain_change> + <https://developers.google.com/talk/jep_extensions/oauth> """ - name = 'google_domain_discovery' - description = 'Google: JID Domain Discovery' + name = 'google_auth' + description = 'Google: Auth Extensions (JID Domain Discovery, OAuth2)' dependencies = set(['feature_mechanisms']) stanza = stanza def plugin_init(self): - self.xmpp.namespace_map[stanza.GoogleAuth.namespace] = 'ga' + self.xmpp.namespace_map['http://www.google.com/talk/protocol/auth'] = 'ga' register_stanza_plugin(self.xmpp['feature_mechanisms'].stanza.Auth, stanza.GoogleAuth) @@ -45,5 +44,9 @@ class GoogleDomainDiscovery(BasePlugin): def _auth(self, stanza): if isinstance(stanza, self.xmpp['feature_mechanisms'].stanza.Auth): - stanza['use_full_bind_result'] = True + stanza.stream = self.xmpp + stanza['google']['client_uses_full_bind_result'] = True + if stanza['mechanism'] == 'X-OAUTH2': + stanza['google']['service'] = 'oauth2' + print(stanza) return stanza diff --git a/sleekxmpp/plugins/google/auth/stanza.py b/sleekxmpp/plugins/google/auth/stanza.py new file mode 100644 index 00000000..49c5cba7 --- /dev/null +++ b/sleekxmpp/plugins/google/auth/stanza.py @@ -0,0 +1,49 @@ +""" + SleekXMPP: The Sleek XMPP Library + Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout + This file is part of SleekXMPP. + + See the file LICENSE for copying permission. +""" + +from sleekxmpp.xmlstream import ElementBase, ET + + +class GoogleAuth(ElementBase): + name = 'auth' + namespace = 'http://www.google.com/talk/protocol/auth' + plugin_attrib = 'google' + interfaces = set(['client_uses_full_bind_result', 'service']) + + discovery_attr= '{%s}client-uses-full-bind-result' % namespace + service_attr= '{%s}service' % namespace + + def setup(self, xml): + """Don't create XML for the plugin.""" + self.xml = ET.Element('') + print('setting up google extension') + + def get_client_uses_full_bind_result(self): + return self.parent()._get_attr(self.disovery_attr) == 'true' + + def set_client_uses_full_bind_result(self, value): + print('>>>', value) + if value in (True, 'true'): + self.parent()._set_attr(self.discovery_attr, 'true') + else: + self.parent()._del_attr(self.discovery_attr) + + def del_client_uses_full_bind_result(self): + self.parent()._del_attr(self.discovery_attr) + + def get_service(self): + return self.parent()._get_attr(self.service_attr, '') + + def set_service(self, value): + if value: + self.parent()._set_attr(self.service_attr, value) + else: + self.parent()._del_attr(self.service_attr) + + def del_service(self): + self.parent()._del_attr(self.service_attr) diff --git a/sleekxmpp/plugins/google/gmail/__init__.py b/sleekxmpp/plugins/google/gmail/__init__.py new file mode 100644 index 00000000..a92e363b --- /dev/null +++ b/sleekxmpp/plugins/google/gmail/__init__.py @@ -0,0 +1,10 @@ +""" + SleekXMPP: The Sleek XMPP Library + Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout + This file is part of SleekXMPP. + + See the file LICENSE for copying permission. +""" + +from sleekxmpp.plugins.google.gmail import stanza +from sleekxmpp.plugins.google.gmail.notifications import Gmail diff --git a/sleekxmpp/plugins/gmail/notifications.py b/sleekxmpp/plugins/google/gmail/notifications.py index dbc68162..6a0ceed4 100644 --- a/sleekxmpp/plugins/gmail/notifications.py +++ b/sleekxmpp/plugins/google/gmail/notifications.py @@ -13,7 +13,7 @@ from sleekxmpp.xmlstream.handler import Callback from sleekxmpp.xmlstream.matcher import MatchXPath from sleekxmpp.xmlstream import register_stanza_plugin from sleekxmpp.plugins import BasePlugin -from sleekxmpp.plugins.gmail import stanza +from sleekxmpp.plugins.google.gmail import stanza log = logging.getLogger(__name__) diff --git a/sleekxmpp/plugins/gmail/stanza.py b/sleekxmpp/plugins/google/gmail/stanza.py index e7e308e1..e7e308e1 100644 --- a/sleekxmpp/plugins/gmail/stanza.py +++ b/sleekxmpp/plugins/google/gmail/stanza.py diff --git a/sleekxmpp/plugins/google/nosave/__init__.py b/sleekxmpp/plugins/google/nosave/__init__.py new file mode 100644 index 00000000..57847af5 --- /dev/null +++ b/sleekxmpp/plugins/google/nosave/__init__.py @@ -0,0 +1,10 @@ +""" + SleekXMPP: The Sleek XMPP Library + Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout + This file is part of SleekXMPP. + + See the file LICENSE for copying permission. +""" + +from sleekxmpp.plugins.google.nosave import stanza +from sleekxmpp.plugins.google.nosave.nosave import GoogleNoSave diff --git a/sleekxmpp/plugins/google_nosave/nosave.py b/sleekxmpp/plugins/google/nosave/nosave.py index 1d3b36db..d6bef615 100644 --- a/sleekxmpp/plugins/google_nosave/nosave.py +++ b/sleekxmpp/plugins/google/nosave/nosave.py @@ -13,7 +13,7 @@ from sleekxmpp.xmlstream.handler import Callback from sleekxmpp.xmlstream.matcher import StanzaPath from sleekxmpp.xmlstream import register_stanza_plugin from sleekxmpp.plugins import BasePlugin -from sleekxmpp.plugins.google_nosave import stanza +from sleekxmpp.plugins.google.nosave import stanza log = logging.getLogger(__name__) diff --git a/sleekxmpp/plugins/google_nosave/stanza.py b/sleekxmpp/plugins/google/nosave/stanza.py index d8701322..d8701322 100644 --- a/sleekxmpp/plugins/google_nosave/stanza.py +++ b/sleekxmpp/plugins/google/nosave/stanza.py diff --git a/sleekxmpp/plugins/google/settings/__init__.py b/sleekxmpp/plugins/google/settings/__init__.py new file mode 100644 index 00000000..c3a0471d --- /dev/null +++ b/sleekxmpp/plugins/google/settings/__init__.py @@ -0,0 +1,10 @@ +""" + SleekXMPP: The Sleek XMPP Library + Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout + This file is part of SleekXMPP. + + See the file LICENSE for copying permission. +""" + +from sleekxmpp.plugins.google.settings import stanza +from sleekxmpp.plugins.google.settings.settings import GoogleSettings diff --git a/sleekxmpp/plugins/google_settings/settings.py b/sleekxmpp/plugins/google/settings/settings.py index 6bd209c7..7122ff56 100644 --- a/sleekxmpp/plugins/google_settings/settings.py +++ b/sleekxmpp/plugins/google/settings/settings.py @@ -13,10 +13,7 @@ from sleekxmpp.xmlstream.handler import Callback from sleekxmpp.xmlstream.matcher import StanzaPath from sleekxmpp.xmlstream import register_stanza_plugin from sleekxmpp.plugins import BasePlugin -from sleekxmpp.plugins.google_settings import stanza - - -log = logging.getLogger(__name__) +from sleekxmpp.plugins.google.settings import stanza class GoogleSettings(BasePlugin): diff --git a/sleekxmpp/plugins/google_settings/stanza.py b/sleekxmpp/plugins/google/settings/stanza.py index d8161770..d8161770 100644 --- a/sleekxmpp/plugins/google_settings/stanza.py +++ b/sleekxmpp/plugins/google/settings/stanza.py diff --git a/sleekxmpp/plugins/google_domain_discovery/__init__.py b/sleekxmpp/plugins/google_domain_discovery/__init__.py deleted file mode 100644 index 828d1859..00000000 --- a/sleekxmpp/plugins/google_domain_discovery/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -""" - SleekXMPP: The Sleek XMPP Library - Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout - This file is part of SleekXMPP. - - See the file LICENSE for copying permission. -""" - -from sleekxmpp.plugins.base import register_plugin - -from sleekxmpp.plugins.google_domain_discovery import stanza -from sleekxmpp.plugins.google_domain_discovery.auth import GoogleDomainDiscovery - - -register_plugin(GoogleDomainDiscovery) diff --git a/sleekxmpp/plugins/google_domain_discovery/stanza.py b/sleekxmpp/plugins/google_domain_discovery/stanza.py deleted file mode 100644 index 8a195afd..00000000 --- a/sleekxmpp/plugins/google_domain_discovery/stanza.py +++ /dev/null @@ -1,35 +0,0 @@ -""" - SleekXMPP: The Sleek XMPP Library - Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout - This file is part of SleekXMPP. - - See the file LICENSE for copying permission. -""" - -from sleekxmpp.xmlstream import ElementBase, ET - - -class GoogleAuth(ElementBase): - name = 'use_full_bind_result' - namespace = 'http://www.google.com/talk/protocol/auth' - plugin_attrib = name - interfaces = set([name]) - is_extension = True - - attribute = '{%s}client-users-full-bind-result' % namespace - - def setup(self, xml): - """Don't create XML for the plugin.""" - self.xml = ET.Element('') - - def get_use_full_bind_result(self): - return self.parent()._get_attr(self.attribute) == 'true' - - def set_use_full_bind_result(self, value): - if value in (True, 'true'): - self.parent()._set_attr(self.attribute, 'true') - else: - self.parent()._del_attr(self.attribute) - - def del_use_full_bind_result(self): - self.parent()._del_attr(self.attribute) diff --git a/sleekxmpp/plugins/google_nosave/__init__.py b/sleekxmpp/plugins/google_nosave/__init__.py deleted file mode 100644 index eba50a35..00000000 --- a/sleekxmpp/plugins/google_nosave/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -""" - SleekXMPP: The Sleek XMPP Library - Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout - This file is part of SleekXMPP. - - See the file LICENSE for copying permission. -""" - -from sleekxmpp.plugins.base import register_plugin - -from sleekxmpp.plugins.google_nosave import stanza -from sleekxmpp.plugins.google_nosave.nosave import GoogleNoSave - - -register_plugin(GoogleNoSave) diff --git a/sleekxmpp/plugins/google_settings/__init__.py b/sleekxmpp/plugins/google_settings/__init__.py deleted file mode 100644 index ef4b2342..00000000 --- a/sleekxmpp/plugins/google_settings/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -""" - SleekXMPP: The Sleek XMPP Library - Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout - This file is part of SleekXMPP. - - See the file LICENSE for copying permission. -""" - -from sleekxmpp.plugins.base import register_plugin - -from sleekxmpp.plugins.google_settings import stanza -from sleekxmpp.plugins.google_settings.settings import GoogleSettings - - -register_plugin(GoogleSettings) |