Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
7
Merge Requests
7
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
Jérome Perrin
erp5
Commits
159b0817
Commit
159b0817
authored
Nov 18, 2020
by
Vincent Pelletier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
erp5_web_renderjs_ui: Add minimal oauth2 token support.
This should evolve to become a browser-side OAuth2 client.
parent
035d099a
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
381 additions
and
169 deletions
+381
-169
bt5/erp5_configurator_standard/TestTemplateItem/portal_components/test.erp5.testOfficeJSSDKConfigurator.py
...ortal_components/test.erp5.testOfficeJSSDKConfigurator.py
+1
-0
bt5/erp5_officejs_support_request_ui_test/PathTemplateItem/portal_tests/officejs_support_request_ui_zuite/zzz_logout_test/testLogin.zpt
...js_support_request_ui_zuite/zzz_logout_test/testLogin.zpt
+13
-18
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs/WebSection_viewRenderJSPreference.xml
...s/erp5_web_renderjs/WebSection_viewRenderJSPreference.xml
+1
-0
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs/WebSection_viewRenderJSPreference/my_configuration_oauth2_client_connector_id.xml
...reference/my_configuration_oauth2_client_connector_id.xml
+96
-0
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/Base_redirect.py
...teItem/portal_skins/erp5_web_renderjs_ui/Base_redirect.py
+18
-0
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/Base_redirect.xml
...eItem/portal_skins/erp5_web_renderjs_ui/Base_redirect.xml
+62
-0
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/login_form.py
...plateItem/portal_skins/erp5_web_renderjs_ui/login_form.py
+23
-0
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/login_form.xml
...lateItem/portal_skins/erp5_web_renderjs_ui/login_form.xml
+19
-15
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/login_once_form.xml
...tem/portal_skins/erp5_web_renderjs_ui/login_once_form.xml
+58
-0
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/login_once_form.zpt
...tem/portal_skins/erp5_web_renderjs_ui/login_once_form.zpt
+37
-29
bt5/erp5_web_renderjs_ui/bt/dependency_list
bt5/erp5_web_renderjs_ui/bt/dependency_list
+2
-1
bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_disable_xhtml_zuite/testDisableXHtmlStyle.zpt
...renderjs_ui_disable_xhtml_zuite/testDisableXHtmlStyle.zpt
+18
-56
bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_logout_zuite/testRenderjsLogout.zpt
...tal_tests/renderjs_ui_logout_zuite/testRenderjsLogout.zpt
+18
-30
bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_recover_password_zuite/testRenderjsRecoverPassword.zpt
...ui_recover_password_zuite/testRenderjsRecoverPassword.zpt
+15
-20
No files found.
bt5/erp5_configurator_standard/TestTemplateItem/portal_components/test.erp5.testOfficeJSSDKConfigurator.py
View file @
159b0817
...
@@ -218,6 +218,7 @@ class TestOfficeJSSDKConfigurator(SecurityTestCase):
...
@@ -218,6 +218,7 @@ class TestOfficeJSSDKConfigurator(SecurityTestCase):
'erp5_monaco_editor'
,
'erp5_monaco_editor'
,
'erp5_multimedia'
,
'erp5_multimedia'
,
'erp5_notebook'
,
'erp5_notebook'
,
'erp5_oauth2_resource'
,
'erp5_officejs'
,
'erp5_officejs'
,
'erp5_officejs_connector'
,
'erp5_officejs_connector'
,
'erp5_officejs_jquery_app'
,
'erp5_officejs_jquery_app'
,
...
...
bt5/erp5_officejs_support_request_ui_test/PathTemplateItem/portal_tests/officejs_support_request_ui_zuite/zzz_logout_test/testLogin.zpt
View file @
159b0817
...
@@ -62,12 +62,12 @@
...
@@ -62,12 +62,12 @@
<!-- Then access the homepage to make sure the login form still can appear -->
<!-- Then access the homepage to make sure the login form still can appear -->
<tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
waitForElementPresent
</td>
<td>
//input[@
name="WebSite_login:method
"]
</td>
<td>
//input[@
value="Login
"]
</td>
<td></td>
<td></td>
</tr>
</tr>
<tr>
<tr>
<td>
assertElementPresent
</td>
<td>
assertElementPresent
</td>
<td>
//input[@
name="WebSite_login:method
"]
</td>
<td>
//input[@
value="Login
"]
</td>
<td></td>
<td></td>
</tr>
</tr>
<tr>
<tr>
...
@@ -77,24 +77,19 @@
...
@@ -77,24 +77,19 @@
</tr>
</tr>
<tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
waitForElementPresent
</td>
<td>
//input[@
name="WebSite_login:method
"]
</td>
<td>
//input[@
value="Login
"]
</td>
<td></td>
<td></td>
</tr>
</tr>
<tr>
<tal:block
tal:define=
"
<td>
type
</td>
login_form_url python: None;
<td>
//input[@name='__ac_name']
</td>
wait python: False;
<td>
user_logout_test
</td>
submit_name python: '//input[@value=\'Login\']';
</tr>
"
>
<tr>
<tal:block
metal:use-macro=
"python: context.Zuite_CommonTemplate.macros['login']"
>
<td>
type
</td>
<tal:block
metal:fill-slot=
"username"
>
user_logout_test
</tal:block>
<td>
//input[@name='__ac_password']
</td>
<tal:block
metal:fill-slot=
"password"
>
user_logout_test
</tal:block>
<td>
user_logout_test
</td>
</tal:block>
</tr>
</tal:block>
<tr>
<td>
click
</td>
<td>
WebSite_login:method
</td>
<td></td>
</tr>
<tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
waitForElementPresent
</td>
<td>
//div[contains(@data-gadget-url, 'gadget_erp5_header.html')]//h1
</td>
<td>
//div[contains(@data-gadget-url, 'gadget_erp5_header.html')]//h1
</td>
...
...
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs/WebSection_viewRenderJSPreference.xml
View file @
159b0817
...
@@ -91,6 +91,7 @@
...
@@ -91,6 +91,7 @@
<string>
my_configuration_stylesheet_url
</string>
<string>
my_configuration_stylesheet_url
</string>
<string>
my_configuration_wallpaper_url
</string>
<string>
my_configuration_wallpaper_url
</string>
<string>
my_configuration_icon_url
</string>
<string>
my_configuration_icon_url
</string>
<string>
my_configuration_oauth2_client_connector_id
</string>
</list>
</list>
</value>
</value>
</item>
</item>
...
...
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs/WebSection_viewRenderJSPreference/my_configuration_oauth2_client_connector_id.xml
0 → 100644
View file @
159b0817
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"ProxyField"
module=
"Products.ERP5Form.ProxyField"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
delegated_list
</string>
</key>
<value>
<list>
<string>
title
</string>
</list>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
my_configuration_oauth2_client_connector_id
</string>
</value>
</item>
<item>
<key>
<string>
message_values
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
external_validator_failed
</string>
</key>
<value>
<string>
The input failed the external validator.
</string>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key>
<string>
overrides
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
field_id
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
form_id
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
target
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key>
<string>
tales
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
field_id
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
form_id
</string>
</key>
<value>
<string></string>
</value>
</item>
<item>
<key>
<string>
target
</string>
</key>
<value>
<string></string>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key>
<string>
values
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
field_id
</string>
</key>
<value>
<string>
my_view_mode_reference
</string>
</value>
</item>
<item>
<key>
<string>
form_id
</string>
</key>
<value>
<string>
Base_viewFieldLibrary
</string>
</value>
</item>
<item>
<key>
<string>
target
</string>
</key>
<value>
<string>
Click to edit the target
</string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string>
OAuth2 Client Connector Id
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/Base_redirect.py
0 → 100644
View file @
159b0817
# XXX: minimal copy of xhtml_style's implementation, used by OAuth2 authentication.
# This should be removed once erp5js implements outh2 protocol directly instead of going through login forms
from
ZTUtils
import
make_query
# BBB: originally, form_id was the first positional argument
if
not
redirect_url
or
'/'
not
in
redirect_url
:
form_id
=
redirect_url
or
form_id
redirect_url
=
context
.
absolute_url
()
if
form_id
:
if
not
redirect_url
.
endswith
(
'/'
):
redirect_url
+=
'/'
redirect_url
+=
form_id
if
keep_items
:
redirect_url
+=
'?'
+
make_query
(
keep_items
)
context
.
getPortalObject
().
REQUEST
.
RESPONSE
.
redirect
(
redirect_url
,
status
=
status_code
,
)
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/Base_redirect.xml
0 → 100644
View file @
159b0817
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
Script_magic
</string>
</key>
<value>
<int>
3
</int>
</value>
</item>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
redirect_url=None, keep_items=(), status_code=302, form_id=None
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
Base_redirect
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/login_form.py
0 → 100644
View file @
159b0817
# Short-circuit old (pre-oauth2) web-mode "login_form"s
import
urllib
web_section_value
=
context
.
getWebSectionValue
()
client_id
=
context
.
getPortalObject
().
ERP5Site_getOAuth2ClientConnectorClientId
(
connector_id
=
(
None
if
web_section_value
is
None
else
web_section_value
.
getLayoutProperty
(
'configuration_oauth2_client_connector_id'
,
default
=
None
)
),
)
if
client_id
is
None
:
# BBB: OAuth2 is not enabled
return
context
.
login_once_form
(
has_oauth2
=
False
)
if
came_from
:
# Make the user go through WebSite_login after authentication, so it does its url de-templatification magic
came_from
=
context
.
absolute_url
()
+
'/WebSite_login?'
+
urllib
.
urlencode
(((
'came_from'
,
came_from
),
))
return
context
.
skinSuper
(
'erp5_web_renderjs_ui'
,
script
.
id
)(
REQUEST
=
REQUEST
,
RESPONSE
=
RESPONSE
,
client_id
=
client_id
,
came_from
=
came_from
,
portal_status_message
=
portal_status_message
,
)
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/login_form.xml
View file @
159b0817
...
@@ -2,10 +2,14 @@
...
@@ -2,10 +2,14 @@
<ZopeData>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<pickle>
<global
name=
"
ZopePageTemplate"
module=
"Products.PageTemplates.ZopePageTemplate
"
/>
<global
name=
"
PythonScript"
module=
"Products.PythonScripts.PythonScript
"
/>
</pickle>
</pickle>
<pickle>
<pickle>
<dictionary>
<dictionary>
<item>
<key>
<string>
Script_magic
</string>
</key>
<value>
<int>
3
</int>
</value>
</item>
<item>
<item>
<key>
<string>
_bind_names
</string>
</key>
<key>
<string>
_bind_names
</string>
</key>
<value>
<value>
...
@@ -20,6 +24,18 @@
...
@@ -20,6 +24,18 @@
<key>
<string>
_asgns
</string>
</key>
<key>
<string>
_asgns
</string>
</key>
<value>
<value>
<dictionary>
<dictionary>
<item>
<key>
<string>
name_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<item>
<item>
<key>
<string>
name_subpath
</string>
</key>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
<value>
<string>
traverse_subpath
</string>
</value>
...
@@ -33,25 +49,13 @@
...
@@ -33,25 +49,13 @@
</value>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
content_type
</string>
</key>
<key>
<string>
_params
</string>
</key>
<value>
<string>
text/html
</string>
</value>
<value>
<string>
REQUEST, RESPONSE, came_from=None, portal_status_message=None
</string>
</value>
</item>
<item>
<key>
<string>
expand
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
id
</string>
</key>
<key>
<string>
id
</string>
</key>
<value>
<string>
login_form
</string>
</value>
<value>
<string>
login_form
</string>
</value>
</item>
</item>
<item>
<key>
<string>
output_encoding
</string>
</key>
<value>
<string>
utf-8
</string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<unicode></unicode>
</value>
</item>
</dictionary>
</dictionary>
</pickle>
</pickle>
</record>
</record>
...
...
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/login_once_form.xml
0 → 100644
View file @
159b0817
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"ZopePageTemplate"
module=
"Products.PageTemplates.ZopePageTemplate"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
content_type
</string>
</key>
<value>
<string>
text/html
</string>
</value>
</item>
<item>
<key>
<string>
expand
</string>
</key>
<value>
<int>
0
</int>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
login_once_form
</string>
</value>
</item>
<item>
<key>
<string>
output_encoding
</string>
</key>
<value>
<string>
utf-8
</string>
</value>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<unicode></unicode>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/login_form.zpt
→
bt5/erp5_web_renderjs_ui/SkinTemplateItem/portal_skins/erp5_web_renderjs_ui/login_
once_
form.zpt
View file @
159b0817
<html
tal:define=
"form_action string:WebSite_login;
<html
tal:define=
"
absolute_url context/absolute_url;
ERP5Site python: modules['Products.ERP5.ERP5Site'];
portal context/getPortalObject;
has_oauth2 python: options.get('has_oauth2', True);
form_action python: 'logged_in_once' if has_oauth2 else 'WebSite_login';
absolute_url python: context.absolute_url() + '/';
web_site_value python: context.getWebSiteValue();
portal python: context.getPortalObject();
root_absolute_url python: (portal if web_site_value is None else web_site_value).absolute_url() + '/';
available_oauth_login_list python: portal.ERP5Site_getAvailableOAuthLoginList();
available_oauth_login_list python: portal.ERP5Site_getAvailableOAuthLoginList();
enable_google_login python: 'google' in available_oauth_login_list;
enable_google_login python: 'google' in available_oauth_login_list;
enable_facebook_login python: 'facebook' in available_oauth_login_list;
enable_facebook_login python: 'facebook' in available_oauth_login_list;
...
@@ -9,7 +14,7 @@
...
@@ -9,7 +14,7 @@
<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"
>
<title
tal:content=
"p
ortal/getTitle
"
></title>
<title
tal:content=
"p
ython: portal.getTitle()
"
></title>
<link
rel=
"stylesheet"
href=
"gadget_erp5_nojqm.css"
>
<link
rel=
"stylesheet"
href=
"gadget_erp5_nojqm.css"
>
</head>
</head>
...
@@ -32,42 +37,47 @@
...
@@ -32,42 +37,47 @@
<div
class=
"gadget-content"
>
<div
class=
"gadget-content"
>
<article>
<article>
<section>
<section>
<div
class=
"visible"
data-gadget-scope=
"notification"
tal:condition=
"
exists: request/portal_status_message
"
>
<div
class=
"visible"
data-gadget-scope=
"notification"
tal:condition=
"
python: 'portal_status_message' in request
"
>
<button
type=
"submit"
class=
"error"
tal:attributes=
"data-i18n
request/portal_status_message"
><span
tal:content=
"request/portal_status_message
"
></span></button>
<button
type=
"submit"
class=
"error"
tal:attributes=
"data-i18n
python: request['portal_status_message']"
><span
tal:content=
"python: request['portal_status_message']
"
></span></button>
</div>
</div>
</section>
</section>
<section
tal:condition=
"not: portal/portal_membership/isAnonymousUser"
>
<section>
<p
i18n:domain=
"ui"
i18n:translate=
""
>
It seems you're already authenticated.
</p>
<p><a
tal:condition=
"exists: request/came_from"
tal:attributes=
"href python:context.WebSection_renderCameFromURITemplate(request.came_from)"
>
Go back
</a></p>
</section>
<section
tal:condition=
"portal/portal_membership/isAnonymousUser"
>
<section
class=
"ui-content-header-plain"
>
<section
class=
"ui-content-header-plain"
>
<h3
class=
"ui-content-title ui-body-c"
>
<h3
class=
"ui-content-title ui-body-c"
>
<span
class=
"ui-icon ui-icon-custom ui-icon-sign-in"
></span>
<span
class=
"ui-icon ui-icon-custom ui-icon-sign-in"
></span>
<tal:block
i18n:domain=
"ui"
i18n:translate=
""
>
Log in
</tal:block>
<tal:block
i18n:domain=
"ui"
i18n:translate=
""
>
Log in
</tal:block>
</h3>
</h3>
</section>
</section>
<form
method=
"post"
tal:attributes=
"action python: '%s/' % absolute_url"
class=
"field_container"
>
<form
method=
"post"
tal:attributes=
"action python: absolute_url"
class=
"field_container"
>
<tal:block
tal:condition=
"python: has_oauth2"
>
<input
type=
"hidden"
tal:attributes=
"
name python: ERP5Site.ERP5_AUTHORISATION_EXTRACTOR_MARKER_NAME;
value python: ERP5Site.ERP5_AUTHORISATION_EXTRACTOR_MARKER_VALUE;
"
/>
<input
type=
"hidden"
name=
"login_retry_url"
tal:attributes=
"value python: request.get('login_retry_url', '')"
/>
</tal:block>
<div>
<div>
<div>
<div>
<div
class=
"ui-field-contain"
>
<div
class=
"ui-field-contain"
>
<label
i18n:domain=
"ui"
i18n:translate=
""
>
Username
</label>
<label
i18n:domain=
"ui"
i18n:translate=
""
>
Username
</label>
<div><input
autofocus
type=
"text"
name=
"__ac_name"
value=
""
required=
"
"
></div>
<div><input
autofocus
type=
"text"
value=
""
required=
""
tal:attributes=
"name python: ERP5Site.ERP5_AUTHORISATION_EXTRACTOR_USERNAME_NAME if has_oauth2 else '__ac_name'
"
></div>
</div>
</div>
<div
class=
"ui-field-contain"
>
<div
class=
"ui-field-contain"
>
<label
i18n:domain=
"ui"
i18n:translate=
""
>
Password
</label>
<label
i18n:domain=
"ui"
i18n:translate=
""
>
Password
</label>
<div><input
type=
"password"
name=
"__ac_password"
value=
""
autocomplete=
"off"
/></div>
<div><input
type=
"password"
value=
""
autocomplete=
"off"
tal:attributes=
"name python: ERP5Site.ERP5_AUTHORISATION_EXTRACTOR_PASSWORD_NAME if has_oauth2 else '__ac_password'"
/></div>
</div>
</div>
<div
class=
"dialog_button_container"
>
<div
class=
"dialog_button_container"
>
<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?%s' % (absolute_url, modules['urllib'].urlencode([('came_from', absolute_url)])
)"
>
I forgot my password!
</a>
</div>
</div>
<div
class=
"dialog_button_container"
tal:condition=
"enable_google_login"
<div
class=
"dialog_button_container"
tal:condition=
"enable_google_login"
>
tal:define=
"current_url python: context.getWebSiteValue().absolute_url()"
>
<a
tal:attributes=
"href python: root_absolute_url + 'ERP5Site_redirectToGoogleLoginPage'"
<a
tal:attributes=
"href string:${current_url}/ERP5Site_redirectToGoogleLoginPage"
i18n:translate=
""
i18n:translate=
""
i18n:domain=
"ui"
i18n:domain=
"ui"
class=
"sign_in_with_google"
class=
"sign_in_with_google"
...
@@ -76,9 +86,8 @@
...
@@ -76,9 +86,8 @@
</a>
</a>
</div>
</div>
<div
class=
"dialog_button_container"
tal:condition=
"enable_facebook_login"
<div
class=
"dialog_button_container"
tal:condition=
"enable_facebook_login"
>
tal:define=
"current_url python: context.getWebSiteValue().absolute_url()"
>
<a
tal:attributes=
"href python: root_absolute_url + 'ERP5Site_redirectToFacebookLoginPage'"
<a
tal:attributes=
"href string:${current_url}/ERP5Site_redirectToFacebookLoginPage"
i18n:translate=
""
i18n:translate=
""
i18n:domain=
"ui"
i18n:domain=
"ui"
class=
"sign_in_with_facebook"
class=
"sign_in_with_facebook"
...
@@ -87,9 +96,8 @@
...
@@ -87,9 +96,8 @@
<img
alt=
"Login with Facebook"
src=
"facebook_login_button.png"
>
<img
alt=
"Login with Facebook"
src=
"facebook_login_button.png"
>
</a>
</a>
</div>
</div>
<div
class=
"dialog_button_container"
tal:condition=
"enable_openidconnect_login"
<div
class=
"dialog_button_container"
tal:condition=
"enable_openidconnect_login"
>
tal:define=
"current_url python: context.getWebSiteValue().absolute_url()"
>
<a
tal:attributes=
"href python: root_absolute_url + 'ERP5Site_redirectToOpenIdLoginPage'"
<a
tal:attributes=
"href string:${current_url}/ERP5Site_redirectToOpenIdLoginPage"
i18n:translate=
""
i18n:translate=
""
i18n:domain=
"ui"
i18n:domain=
"ui"
class=
"sign_in_with_openid"
class=
"sign_in_with_openid"
...
@@ -103,13 +111,13 @@
...
@@ -103,13 +111,13 @@
</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=
"
python: 'came_from' in request
"
type=
"hidden"
name=
"came_from"
type=
"hidden"
name=
"came_from"
tal:attributes=
"value
request/came_from
"
/>
tal:attributes=
"value
python: request['came_from']
"
/>
</form>
</form>
</section>
</section>
</article>
</article>
</div>
</div>
</div>
</div>
</body>
</body>
</html>
</html>
\ No newline at end of file
bt5/erp5_web_renderjs_ui/bt/dependency_list
View file @
159b0817
erp5_hal_json_style
erp5_hal_json_style
erp5_dms
erp5_dms
erp5_font
erp5_font
\ No newline at end of file
erp5_oauth2_resource
\ No newline at end of file
bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_disable_xhtml_zuite/testDisableXHtmlStyle.zpt
View file @
159b0817
...
@@ -99,34 +99,15 @@
...
@@ -99,34 +99,15 @@
<td></td>
<td></td>
</tr>
</tr>
<tr>
<tal:block
tal:define=
"
<td>
openAndWait
</td>
login_form_url python: '${base_url}';
<td>
${base_url}
</td>
submit_name python: '//input[@value=\'Login\']';
<td></td>
"
>
</tr>
<tal:block
metal:use-macro=
"python: context.Zuite_CommonTemplate.macros['login']"
>
<tal:block
metal:fill-slot=
"username"
>
user_logout_test
</tal:block>
<tr>
<tal:block
metal:fill-slot=
"password"
>
user_logout_test
</tal:block>
<td>
waitForElementPresent
</td>
</tal:block>
<td>
//input[@name='__ac_name']
</td>
</tal:block>
<td></td>
</tr>
<tr>
<td>
type
</td>
<td>
//input[@name='__ac_name']
</td>
<td>
user_logout_test
</td>
</tr>
<tr>
<td>
type
</td>
<td>
//input[@name='__ac_password']
</td>
<td>
user_logout_test
</td>
</tr>
<tr>
<td>
clickAndWait
</td>
<td>
//input[@value='Login']
</td>
<td></td>
</tr>
<tr>
<tr>
<td>
waitForTextPresent
</td>
<td>
waitForTextPresent
</td>
...
@@ -198,34 +179,15 @@
...
@@ -198,34 +179,15 @@
<td></td>
<td></td>
</tr>
</tr>
<tr>
<tal:block
tal:define=
"
<td>
openAndWait
</td>
login_form_url python: '${base_url}';
<td>
${base_url}
</td>
submit_name python: '//input[@value=\'Login\']';
<td></td>
"
>
</tr>
<tal:block
metal:use-macro=
"python: context.Zuite_CommonTemplate.macros['login']"
>
<tal:block
metal:fill-slot=
"username"
>
user_logout_test
</tal:block>
<tr>
<tal:block
metal:fill-slot=
"password"
>
user_logout_test
</tal:block>
<td>
waitForElementPresent
</td>
</tal:block>
<td>
//input[@name='__ac_name']
</td>
</tal:block>
<td></td>
</tr>
<tr>
<td>
type
</td>
<td>
//input[@name='__ac_name']
</td>
<td>
user_logout_test
</td>
</tr>
<tr>
<td>
type
</td>
<td>
//input[@name='__ac_password']
</td>
<td>
user_logout_test
</td>
</tr>
<tr>
<td>
clickAndWait
</td>
<td>
//input[@value='Login']
</td>
<td></td>
</tr>
<tr>
<tr>
<td>
waitForTextPresent
</td>
<td>
waitForTextPresent
</td>
...
...
bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_logout_zuite/testRenderjsLogout.zpt
View file @
159b0817
...
@@ -83,21 +83,16 @@
...
@@ -83,21 +83,16 @@
<td></td>
<td></td>
</tr>
</tr>
<tr>
<tal:block
tal:define=
"
<td>
type
</td>
login_form_url python: None;
<td>
//input[@name='__ac_name']
</td>
wait python: False;
<td>
user_logout_test
</td>
submit_name python: '//input[@value=\'Login\']';
</tr>
"
>
<tr>
<tal:block
metal:use-macro=
"python: context.Zuite_CommonTemplate.macros['login']"
>
<td>
type
</td>
<tal:block
metal:fill-slot=
"username"
>
user_logout_test
</tal:block>
<td>
//input[@name='__ac_password']
</td>
<tal:block
metal:fill-slot=
"password"
>
user_logout_test
</tal:block>
<td>
user_logout_test
</td>
</tal:block>
</tr>
</tal:block>
<tr>
<td>
click
</td>
<td>
//input[@value='Login']
</td>
<td></td>
</tr>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_app_loaded"
/>
<tal:block
metal:use-macro=
"here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_app_loaded"
/>
...
@@ -181,21 +176,14 @@
...
@@ -181,21 +176,14 @@
</tr>
</tr>
<tr>
<tal:block
tal:define=
"
<td>
type
</td>
login_form_url python: None;
<td>
//input[@name='__ac_name']
</td>
wait python: False;
<td>
user_logout_test
</td>
submit_name python: '//input[@value=\'Login\']';
</tr>
"
><tal:block
metal:use-macro=
"python: context.Zuite_CommonTemplate.macros['login']"
>
<tr>
<tal:block
metal:fill-slot=
"username"
>
user_logout_test
</tal:block>
<td>
type
</td>
<tal:block
metal:fill-slot=
"password"
>
user_logout_test
</tal:block>
<td>
//input[@name='__ac_password']
</td>
</tal:block></tal:block>
<td>
user_logout_test
</td>
</tr>
<tr>
<td>
click
</td>
<td>
//input[@value='Login']
</td>
<td></td>
</tr>
<tr>
<tr>
<td>
waitForElementPresent
</td>
<td>
waitForElementPresent
</td>
...
...
bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_recover_password_zuite/testRenderjsRecoverPassword.zpt
View file @
159b0817
...
@@ -185,13 +185,13 @@
...
@@ -185,13 +185,13 @@
<td></td>
<td></td>
</tr>
</tr>
<tr>
<tr>
<td>
waitFor
Elemen
tPresent
</td>
<td>
waitFor
Tex
tPresent
</td>
<td>
//input[@name='__ac_name']
</td>
<td>
Username
</td>
<td></td>
<td></td>
</tr>
</tr>
<tr>
<tr>
<td>
waitForElemen
tPresent
</td>
<td>
assertTex
tPresent
</td>
<td>
//input[@name='__ac_password']
</td>
<td>
Password
</td>
<td></td>
<td></td>
</tr>
</tr>
<tr>
<tr>
...
@@ -199,25 +199,20 @@
...
@@ -199,25 +199,20 @@
<td>
Password changed.
</td>
<td>
Password changed.
</td>
<td></td>
<td></td>
</tr>
</tr>
<tr>
<tal:block
tal:define=
"
<td>
type
</td>
login_form_url python: None;
<td>
//input[@name='__ac_name']
</td>
wait python: False;
<td>
user_a_test
</td>
submit_name python: '//input[@value=\'Login\']';
</tr>
"
>
<tr>
<tal:block
metal:use-macro=
"python: context.Zuite_CommonTemplate.macros['login']"
>
<td>
type
</td>
<tal:block
metal:fill-slot=
"username"
>
user_a_test
</tal:block>
<td>
//input[@name='__ac_password']
</td>
<tal:block
metal:fill-slot=
"password"
>
123
</tal:block>
<td>
123
</td>
</tal:block>
</tr>
</tal:block>
<tr>
<td>
click
</td>
<td>
//input[@value='Login']
</td>
<td></td>
</tr>
<!--User can access even has no access to it's person document -->
<!--User can access even has no access to it's person document -->
<tr>
<tr>
<td>
waitForElementNotPresent
</td>
<td>
waitForElementNotPresent
</td>
<td>
//input[@
name='__ac_name
']
</td>
<td>
//input[@
value='Login
']
</td>
<td></td>
<td></td>
</tr>
</tr>
<tr>
<tr>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment