Commit bbf420a5 authored by Jérome Perrin's avatar Jérome Perrin

Google login in ERP5JS

Change login button to comply with Google's branding guidelines.

Add support for google login in ERP5JS.


See merge request nexedi/erp5!1166
parents b1da02b9 64c0bb5d
...@@ -56,7 +56,9 @@ ...@@ -56,7 +56,9 @@
<label>&nbsp;</label> <label>&nbsp;</label>
<div class="input"> <div class="input">
<a tal:attributes="href string:${here/portal_url}/ERP5Site_redirectToGoogleLoginPage" <a tal:attributes="href string:${here/portal_url}/ERP5Site_redirectToGoogleLoginPage"
i18n:translate="" i18n:domain="ui" class="zocial google">Login with Google</a> i18n:translate="" i18n:domain="ui" class="google">
<img alt="Sign in with Google" src="data:image/png;base64,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"/>
</a>
</div> </div>
</div> </div>
</tal:block> </tal:block>
......
...@@ -36,6 +36,7 @@ elif code is not None: ...@@ -36,6 +36,7 @@ elif code is not None:
method = getattr(context, "ERP5Site_createGoogleUserToOAuth", None) method = getattr(context, "ERP5Site_createGoogleUserToOAuth", None)
if method is not None: if method is not None:
method(user_reference, user_dict) method(user_reference, user_dict)
return response.redirect(request.get("came_from") or context.absolute_url()) # XXX for ERP5JS web sites without a rewrite rule, we make sure there's a trailing /
return response.redirect(request.get("came_from") or context.absolute_url() + '/')
return handleError('') return handleError('')
...@@ -27,6 +27,9 @@ ...@@ -27,6 +27,9 @@
import uuid import uuid
import mock import mock
import lxml
import urlparse
import httplib
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from Products.ERP5Type.tests.utils import createZODBPythonScript from Products.ERP5Type.tests.utils import createZODBPythonScript
...@@ -89,8 +92,7 @@ def getUserEntry(access_token): ...@@ -89,8 +92,7 @@ def getUserEntry(access_token):
} }
class TestGoogleLogin(ERP5TypeTestCase): class GoogleLoginTestCase(ERP5TypeTestCase):
def afterSetUp(self): def afterSetUp(self):
""" """
This is ran before anything, used to set the environment This is ran before anything, used to set the environment
...@@ -123,6 +125,8 @@ class TestGoogleLogin(ERP5TypeTestCase): ...@@ -123,6 +125,8 @@ class TestGoogleLogin(ERP5TypeTestCase):
self.tic() self.tic()
self.logout() self.logout()
class TestGoogleLogin(GoogleLoginTestCase):
def test_redirect(self): def test_redirect(self):
""" """
Check URL generate to redirect to Google Check URL generate to redirect to Google
...@@ -279,7 +283,9 @@ return credential_request ...@@ -279,7 +283,9 @@ return credential_request
google_hash = self.portal.REQUEST.RESPONSE.cookies.get("__ac_google_hash")["value"] google_hash = self.portal.REQUEST.RESPONSE.cookies.get("__ac_google_hash")["value"]
self.assertEqual("b01533abb684a658dc71c81da4e67546", google_hash) self.assertEqual("b01533abb684a658dc71c81da4e67546", google_hash)
self.assertEqual(self.portal.absolute_url(), response) absolute_url = self.portal.absolute_url()
self.assertNotEqual(absolute_url[-1], '/')
self.assertEqual(absolute_url + '/', response)
cache_dict = self.portal.Base_getBearerToken(google_hash, "google_server_auth_token_cache_factory") cache_dict = self.portal.Base_getBearerToken(google_hash, "google_server_auth_token_cache_factory")
self.assertEqual(CLIENT_ID, cache_dict["client_id"]) self.assertEqual(CLIENT_ID, cache_dict["client_id"])
self.assertEqual(ACCESS_TOKEN, cache_dict["access_token"]) self.assertEqual(ACCESS_TOKEN, cache_dict["access_token"])
...@@ -300,3 +306,30 @@ return credential_request ...@@ -300,3 +306,30 @@ return credential_request
person = credential_request.getDestinationDecisionValue() person = credential_request.getDestinationDecisionValue()
google_login = person.objectValues(portal_types="Google Login")[0] google_login = person.objectValues(portal_types="Google Login")[0]
self.assertEqual(getUserId(None), google_login.getReference()) self.assertEqual(getUserId(None), google_login.getReference())
def test_logout(self):
resp = self.publish(self.portal.getId() + '/logout')
self.assertEqual(resp.getCookie("__ac_google_hash")['value'], 'deleted')
class TestERP5JSGoogleLogin(GoogleLoginTestCase):
def _getWebSite(self):
return self.portal.web_site_module.renderjs_runner
def test_login_form(self):
resp = self.publish(self._getWebSite().getPath() + '/login_form')
tree = lxml.etree.fromstring(resp.getBody(), parser=lxml.etree.HTMLParser())
google_login_link, = [
img.getparent().attrib['href']
for img in tree.findall('.//a/img')
if img.attrib['alt'] == 'Sign in with Google'
]
self.assertIn('/ERP5Site_redirectToGoogleLoginPage', google_login_link)
resp = self.publish(urlparse.urlparse(google_login_link).path)
# this request redirects to google
self.assertEqual(resp.getStatus(), httplib.FOUND)
self.assertIn('google.com', resp.getHeader('Location'))
def test_logout(self):
resp = self.publish(self._getWebSite().getPath() + '/WebSite_logout')
self.assertEqual(resp.getCookie("__ac_google_hash")['value'], 'deleted')
erp5_full_text_myisam_catalog erp5_full_text_myisam_catalog
erp5_credential erp5_credential
\ No newline at end of file erp5_web_renderjs_ui
\ No newline at end of file
...@@ -1045,6 +1045,19 @@ div[data-gadget-scope='header'] .ui-header ul { ...@@ -1045,6 +1045,19 @@ div[data-gadget-scope='header'] .ui-header ul {
.gadget-content button[name='action_update']:active { .gadget-content button[name='action_update']:active {
background-color: #a9a9a9; background-color: #a9a9a9;
} }
.gadget-content .sign_in_with_google {
height: 46px;
width: 191px;
display: inline-block;
overflow: hidden;
margin-top: 6pt;
}
.gadget-content .sign_in_with_google img:hover {
margin-top: -46px;
}
.gadget-content .sign_in_with_google img:active {
margin-top: -92px;
}
@media not screen and (max-width: 85em) { @media not screen and (max-width: 85em) {
div[data-role='page']:not(.desktop-panel-hidden) .gadget-content { div[data-role='page']:not(.desktop-panel-hidden) .gadget-content {
margin-left: 180pt; margin-left: 180pt;
......
...@@ -262,8 +262,8 @@ ...@@ -262,8 +262,8 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1579787106.93</float> <float>1593579172.65</float>
<string>UTC</string> <string>GMT+2</string>
</tuple> </tuple>
</state> </state>
</object> </object>
......
""" """
Default logout handler, overwritten to give website specific portal status message. Default logout handler, overwritten to give website specific portal status message.
""" """
portal = context.getPortalObject()
REQUEST = context.REQUEST REQUEST = context.REQUEST
if REQUEST.has_key('portal_skin'): if REQUEST.has_key('portal_skin'):
context.portal_skins.clearSkinCookie() portal.portal_skins.clearSkinCookie()
REQUEST.RESPONSE.expireCookie('__ac', path='/') REQUEST.RESPONSE.expireCookie('__ac', path='/')
if getattr(portal.portal_skins, "erp5_oauth_google_login", None):
REQUEST.RESPONSE.expireCookie('__ac_google_hash', path='/')
if getattr(portal.portal_skins, "erp5_oauth_facebook_login", None):
REQUEST.RESPONSE.expireCookie('__ac_facebook_hash', path='/')
REQUEST.RESPONSE.setHeader('Location', came_from or context.getPermanentURL(context)) REQUEST.RESPONSE.setHeader('Location', came_from or context.getPermanentURL(context))
REQUEST.RESPONSE.setStatus(303) REQUEST.RESPONSE.setStatus(303)
# REQUEST.RESPONSE.redirect(came_from or context.getPermanentURL(context)); # REQUEST.RESPONSE.redirect(came_from or context.getPermanentURL(context));
...@@ -1200,6 +1200,20 @@ div[data-gadget-scope='header'] .ui-header { ...@@ -1200,6 +1200,20 @@ div[data-gadget-scope='header'] .ui-header {
.renderPageSubmitButton(@grey); .renderPageSubmitButton(@grey);
} }
.sign_in_with_google {
height: 46px;
width: 191px;
display: inline-block;
overflow: hidden;
margin-top: @margin-size;
}
.sign_in_with_google img:hover {
margin-top: -46px;
}
.sign_in_with_google img:active {
margin-top: -92px;
}
@media @desktop { @media @desktop {
div[data-role='page']:not(.desktop-panel-hidden) & { div[data-role='page']:not(.desktop-panel-hidden) & {
// Keep the panel always visible // Keep the panel always visible
......
<html tal:define="form_action string:WebSite_login; <html tal:define="form_action string:WebSite_login;
absolute_url context/absolute_url; absolute_url context/absolute_url;
portal context/getPortalObject"> portal context/getPortalObject;
available_oauth_login_list python: portal.ERP5Site_getAvailableOAuthLoginList();
enable_google_login python: 'google' in available_oauth_login_list;
">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
...@@ -60,10 +63,18 @@ ...@@ -60,10 +63,18 @@
<input type="submit" value="Login" i18n:attributes="value" i18n:domain="ui" tal:attributes="name python: '%s:method' % (form_action, )"/> <input type="submit" value="Login" i18n:attributes="value" i18n:domain="ui" tal:attributes="name python: '%s:method' % (form_action, )"/>
<a i18n:domain="ui" i18n:translate="" tal:attributes="href python: '%s/WebSite_viewRecoverAccount?came_from=%s' % (absolute_url, absolute_url)">I forgot my password!</a> <a i18n:domain="ui" i18n:translate="" tal:attributes="href python: '%s/WebSite_viewRecoverAccount?came_from=%s' % (absolute_url, absolute_url)">I forgot my password!</a>
</div> </div>
<div class="dialog_button_container" tal:condition="enable_google_login">
<a tal:attributes="href string:${here/portal_url}/ERP5Site_redirectToGoogleLoginPage"
i18n:translate=""
i18n:domain="ui"
class="sign_in_with_google"
>
<img alt="Sign in with Google" src="data:image/png;base64,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"/>
</a>
</div>
</div> </div>
</div> </div>
<input type="hidden" name="url" tal:attributes="value absolute_url" /> <input type="hidden" name="url" tal:attributes="value absolute_url" />
<input tal:condition="exists: request/came_from" <input tal:condition="exists: request/came_from"
type="hidden" name="came_from" type="hidden" name="came_from"
......
...@@ -423,6 +423,22 @@ fieldset.bottom > .field > label { ...@@ -423,6 +423,22 @@ fieldset.bottom > .field > label {
border-width: 0; border-width: 0;
} }
.login a.google {
height: 46px;
width: 191px;
display: inline-block;
overflow: hidden;
}
.login a.google img:hover {
margin-top: -46px;
}
.login a.google img:active {
margin-top: -92px;
}
.content .field { .content .field {
padding-bottom: 3px; padding-bottom: 3px;
} }
......
...@@ -55,7 +55,9 @@ ...@@ -55,7 +55,9 @@
<label>&nbsp;</label> <label>&nbsp;</label>
<div class="input"> <div class="input">
<a tal:attributes="href string:${here/portal_url}/ERP5Site_redirectToGoogleLoginPage" <a tal:attributes="href string:${here/portal_url}/ERP5Site_redirectToGoogleLoginPage"
i18n:translate="" i18n:domain="ui" class="zocial google">Login with Google</a> i18n:translate="" i18n:domain="ui" class="google">
<img alt="Sign in with Google" src="data:image/png;base64,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"/>
</a>
</div> </div>
</div> </div>
</tal:block> </tal:block>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment