Skip to content

Commit

Permalink
fix auto csrf protection integration
Browse files Browse the repository at this point in the history
  • Loading branch information
vangheem committed Mar 12, 2014
1 parent fc15814 commit e80de82
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 7 deletions.
5 changes: 5 additions & 0 deletions plone/app/portlets/browser/manage.py
Expand Up @@ -32,6 +32,7 @@

from plone.app.portlets import utils
from plone.memoize.view import memoize
from plone.protect.authenticator import createToken


class ManageContextualPortlets(BrowserView):
Expand Down Expand Up @@ -111,6 +112,10 @@ class ManageDashboardPortlets(BrowserView):

# IManagePortletsView implementation

@property
def auth_token(self):
return createToken()

@property
def macros(self):
return self.index.macros
Expand Down
2 changes: 1 addition & 1 deletion plone/app/portlets/browser/templates/manage-dashboard.pt
Expand Up @@ -45,7 +45,7 @@
</li>
<li class="selected">
<a href=""
tal:attributes="href string:${context/@@plone_portal_state/navigation_root_url}/@@manage-dashboard"
tal:attributes="href string:${context/@@plone_portal_state/navigation_root_url}/@@manage-dashboard?_authenticator=${view/auth_token}"
i18n:translate="label_edit">Edit</a>
</li>
</ul>
Expand Down
14 changes: 9 additions & 5 deletions plone/app/portlets/tests/testMemberDashboard.txt
Expand Up @@ -6,6 +6,7 @@ Setup::
>>> uf.userFolderAddUser(user1, pass1, ['Member'], [])
>>> uf.userFolderAddUser(user2, pass2, ['Member'], [])
>>> import re
>>> from plone.protect.authenticator import createToken


bug: 11174: Portal Members can't add portlets to their dashboard
Expand All @@ -22,7 +23,8 @@ Login as the 'user1' user

Go to the dashboard and check that portlets are addable here

>>> browser.open(portal.absolute_url()+'/@@manage-dashboard')
>>> browser.open(portal.absolute_url()+'/@@dashboard')
>>> browser.getLink('Edit').click()
>>> 'Add portlet' in browser.contents
True

Expand Down Expand Up @@ -66,25 +68,27 @@ Using the addview, let's see that we cannot add a portlet for another user
>>> browser.getControl(name='__ac_password').value = 'pass2'
>>> browser.getControl(name='submit').click()

>>> browser.open(portalURL+'/@@manage-dashboard')
>>> self.login('user2')

>>> browser.open(portalURL+'/@@manage-dashboard?_authenticator=' + createToken())
>>> bool(re.search('\<\/span\>\s+Search\s+\<\/div\>', browser.contents))
False

Now, we try to open the @@manage-portlets view and also try to call the addview
for a portlet. We shouldn't be able to do any of this

>>> browser.open(portalURL+'/@@manage-portlets')
>>> browser.open(portalURL+'/@@manage-portlets?_authenticator=' + createToken())
>>> "Insufficient Privileges" in browser.contents
True
>>> browser.open(portalURL + "/++contextportlets++plone.leftcolumn/+/portlets.Search")
>>> browser.open(portalURL + "/++contextportlets++plone.leftcolumn/+/portlets.Search?_authenticator=" + createToken())
>>> "Insufficient Privileges" in browser.contents
True

Finally, if we add the "Member" role to the "Portlets: Manage portlets" permission, we should be able to call
those views

>>> portal.manage_permission('Portlets: Manage portlets', roles=['Manager', 'Member'], acquire=0)
>>> browser.open(portalURL+'/@@manage-portlets')
>>> browser.open(portalURL+'/@@manage-portlets?_authenticator=' + createToken())
>>> "Insufficient Privileges" in browser.contents
False
>>> bool(re.search('\<\/span\>\s+Search\s+\<\/div\>', browser.contents))
Expand Down
3 changes: 2 additions & 1 deletion plone/app/portlets/tests/testViewName.txt
Expand Up @@ -108,7 +108,8 @@ Now customize the manage dashboard view and check the name is in place too::

Add a portlet in the dashboard and try to delete it::

>>> browser.open(portal.absolute_url()+'/@@manage-dashboard')
>>> browser.open(portal.absolute_url()+'/dashboard')
>>> browser.getLink('Edit').click()
>>> browser.getControl(name=':action',index=0).value = ['/++dashboard++plone.dashboard1+test_user_1_/+/portlets.Search']
>>> browser.getForm(index=1).submit()
>>> browser.getControl('Save').click() # This submits the now shown add form.
Expand Down

1 comment on commit e80de82

@mister-roboto
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TESTS PASSED
Mr.Roboto url : http://jenkins.plone.org/roboto/get_info?push=8b72264dd8a74c408b53c5d3379e9ade
[SUCCESS] kgs-plone.app.portlets-plone-5.0-python-2.7 kgs

Please sign in to comment.