From 8cf48d0becfb517d157d4b6e7f8935175d8b1616 Mon Sep 17 00:00:00 2001 From: Rafael Monnerat <rafael@nexedi.com> Date: Tue, 6 Mar 2018 03:16:19 +0000 Subject: [PATCH] erp5_oauth_facebook_login: Search Login avoiding security_uids This makes exponentially faster, if you have way too many security uids. --- .../extension.erp5.FacebookLoginUtility.py | 10 +++++++ .../ERP5Site_getFacebookLogin.xml | 28 +++++++++++++++++++ .../ERP5Site_getPersonFromFacebookLogin.py | 14 +++++----- 3 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 bt5/erp5_oauth_facebook_login/SkinTemplateItem/portal_skins/erp5_oauth_facebook_login/ERP5Site_getFacebookLogin.xml diff --git a/bt5/erp5_oauth_facebook_login/ExtensionTemplateItem/portal_components/extension.erp5.FacebookLoginUtility.py b/bt5/erp5_oauth_facebook_login/ExtensionTemplateItem/portal_components/extension.erp5.FacebookLoginUtility.py index f3c711a853..165273cd31 100644 --- a/bt5/erp5_oauth_facebook_login/ExtensionTemplateItem/portal_components/extension.erp5.FacebookLoginUtility.py +++ b/bt5/erp5_oauth_facebook_login/ExtensionTemplateItem/portal_components/extension.erp5.FacebookLoginUtility.py @@ -2,6 +2,7 @@ import facebook from ZTUtils import make_query from Products.ERP5Security.ERP5ExternalOauth2ExtractionPlugin import getFacebookUserEntry +from zExceptions import Unauthorized def _getFacebookClientIdAndSecretKey(portal, reference="default"): """Returns facebook client id and secret key. @@ -44,5 +45,14 @@ def unrestrictedSearchFacebookConnector(self): validation_state="validated", limit=2) +def unrestrictedSearchFacebookLogin(self, login, REQUEST=None): + if REQUEST is not None: + raise Unauthorized + + return self.getPortalObject().portal_catalog.unrestrictedSearchResults( + portal_type="Facebook Login", + reference=login, + validation_state="validated", limit=1) + def getUserEntry(token): return getFacebookUserEntry(token) diff --git a/bt5/erp5_oauth_facebook_login/SkinTemplateItem/portal_skins/erp5_oauth_facebook_login/ERP5Site_getFacebookLogin.xml b/bt5/erp5_oauth_facebook_login/SkinTemplateItem/portal_skins/erp5_oauth_facebook_login/ERP5Site_getFacebookLogin.xml new file mode 100644 index 0000000000..ea0d8cf8ac --- /dev/null +++ b/bt5/erp5_oauth_facebook_login/SkinTemplateItem/portal_skins/erp5_oauth_facebook_login/ERP5Site_getFacebookLogin.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_function</string> </key> + <value> <string>unrestrictedSearchFacebookLogin</string> </value> + </item> + <item> + <key> <string>_module</string> </key> + <value> <string>FacebookLoginUtility</string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>ERP5Site_getFacebookLogin</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_oauth_facebook_login/SkinTemplateItem/portal_skins/erp5_oauth_facebook_login/ERP5Site_getPersonFromFacebookLogin.py b/bt5/erp5_oauth_facebook_login/SkinTemplateItem/portal_skins/erp5_oauth_facebook_login/ERP5Site_getPersonFromFacebookLogin.py index 9377113f98..8d8132b800 100644 --- a/bt5/erp5_oauth_facebook_login/SkinTemplateItem/portal_skins/erp5_oauth_facebook_login/ERP5Site_getPersonFromFacebookLogin.py +++ b/bt5/erp5_oauth_facebook_login/SkinTemplateItem/portal_skins/erp5_oauth_facebook_login/ERP5Site_getPersonFromFacebookLogin.py @@ -3,12 +3,12 @@ from zExceptions import Unauthorized if REQUEST is not None: raise Unauthorized -portal_catalog = context.getPortalObject().portal_catalog +login = context.ERP5Site_getFacebookLogin(login) -login = portal_catalog.getResultValue( - portal_type="Facebook Login", - reference=login, - validation_state="validated") +if login is None: + return login -if login is not None: - return login.getParentValue().getRelativeUrl() +if len(login) > 1: + raise ValueError("Duplicated User") + +return login[0].getParentValue().getRelativeUrl() -- 2.30.9