Skip to content
This repository has been archived by the owner on Apr 9, 2023. It is now read-only.

Commit

Permalink
Merge pull request #66 from plone/html-renderer-fixes
Browse files Browse the repository at this point in the history
HTML renderer can now handle html responses correctly
  • Loading branch information
bloodbare committed Feb 23, 2017
2 parents 85881f7 + 744efbe commit 3c8ae42
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 19 deletions.
3 changes: 2 additions & 1 deletion buildout.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -94,4 +94,5 @@ eggs =
[versions]
pycodestyle = 2.2.0
flake8 = 3.2.1
yarl = 0.9.3
yarl = 0.9.8
aiohttp = 1.3.3
4 changes: 2 additions & 2 deletions docs/source/security.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ get_principals_with_access_content(obj)


# Code to get all the security info
from plone.server.auth import settingsForObject
settingsForObject(obj)
from plone.server.auth import settings_for_object
settings_for_object(obj)

# Code to get the Interaction object ( security object )
from zope.security.interfaces import IInteraction
Expand Down
8 changes: 7 additions & 1 deletion src/plone.server/CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
1.0a12 (unreleased)
-------------------

- Nothing changed yet.
Fixes:

- HTML renderer can now handle html responses correctly
[vangheem]

- Renamed settingsForObject to settings_for_object
[vangheem]


1.0a11 (2017-02-22)
Expand Down
4 changes: 2 additions & 2 deletions src/plone.server/plone/server/api/content.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
from plone.server.interfaces import IResourceSerializeToJson
from plone.server.utils import get_authenticated_user_id
from plone.server.utils import iter_parents
from plone.server.auth import settingsForObject
from plone.server.auth import settings_for_object
from zope.component import getMultiAdapter
from zope.component import queryMultiAdapter
from plone.server.auth.role import local_roles
Expand Down Expand Up @@ -209,7 +209,7 @@ async def sharing_get(context, request):
@configure.service(context=IResource, method='GET', permission='plone.SeePermissions',
name='@all_permissions')
async def all_permissions(context, request):
result = settingsForObject(context)
result = settings_for_object(context)
await notify(ObjectPermissionsViewEvent(context))
return result

Expand Down
4 changes: 2 additions & 2 deletions src/plone.server/plone/server/auth/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def get_principals_with_access_content(obj, request=None):
return list(users.keys())


def settingsForObject(ob):
def settings_for_object(ob):
"""Analysis tool to show all of the grants to a process
"""
result = []
Expand Down Expand Up @@ -122,4 +122,4 @@ def settingsForObject(ob):
{'permission': p, 'role': r, 'setting': s}
for (p, r, s) in settings]

return result
return result
14 changes: 5 additions & 9 deletions src/plone.server/plone/server/configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ def load_behavior(_context, behavior):
real_factory = resolve_or_get(factory)
schema = resolve_or_get(conf['provides'])
classImplements(real_factory, schema)

plone.behavior.metaconfigure.behaviorDirective(
_context,
conf.get('title', ''),
Expand Down Expand Up @@ -402,12 +402,8 @@ def grant_directive(
def grantAll_directive(_context, principal=None, role=None):
"""Grant all permissions to a role or principal
"""
from plone.server.auth import \
rolePermissionManager as role_perm_mgr
from plone.server.auth import \
principalPermissionManager as principal_perm_mgr
from plone.server.auth import \
principalRoleManager as principal_role_mgr
from plone.server.auth import role_permission_manager
from plone.server.auth import principal_permission_manager
nspecified = ((principal is not None)
+ (role is not None))

Expand All @@ -420,13 +416,13 @@ def grantAll_directive(_context, principal=None, role=None):
_context.action(
discriminator=('grantAllPermissionsToPrincipal',
principal),
callable=principal_perm_mgr.grantAllPermissionsToPrincipal,
callable=principal_permission_manager.grantAllPermissionsToPrincipal,
args=(principal, ),
)
else:
_context.action(
discriminator=('grantAllPermissionsToRole', role),
callable=role_perm_mgr.grantAllPermissionsToRole,
callable=role_permission_manager.grantAllPermissionsToRole,
args=(role, ),
)

Expand Down
18 changes: 16 additions & 2 deletions src/plone.server/plone/server/renderers.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,13 +96,17 @@ def __init__(self, renderformat, view, request):
self.renderformat = renderformat


def _is_pserver_response(resp):
return hasattr(resp, '__class__') and issubclass(resp.__class__, Response)


@configure.adapter(
for_=(IRendererFormatJson, IView, IRequest),
provides=IRendered)
class RendererJson(Renderer):
async def __call__(self, value):
headers = {}
if hasattr(value, '__class__') and issubclass(value.__class__, Response):
if _is_pserver_response(value):
json_value = value.response
headers = value.headers
status = value.status
Expand Down Expand Up @@ -131,6 +135,16 @@ async def __call__(self, value):
class RendererHtml(Renderer):
async def __call__(self, value):
# Safe html transformation
if _is_pserver_response(value):
body = value.response
if not isinstance(body, str):
body = json.dumps(value.response)
value = aioResponse(
body=body.encode('utf8'), status=value.status,
headers=value.headers)
value.headers.update({
'content-type': 'text/html'
})
return value


Expand All @@ -145,7 +159,7 @@ def guess_response(self, value):
resp = aioResponse(body=bytes(json.dumps(resp, cls=PServerJSONEncoder), 'utf-8'))
resp.headers['Content-Type'] = 'application/json'
elif isinstance(resp, list):
resp = aioResponse(body=bytes(json.dumps(resp, cls=PServerJSONEncoder ), 'utf-8'))
resp = aioResponse(body=bytes(json.dumps(resp, cls=PServerJSONEncoder), 'utf-8'))
resp.headers['Content-Type'] = 'application/json'
elif isinstance(resp, str):
resp = aioResponse(body=bytes(resp, 'utf-8'))
Expand Down

0 comments on commit 3c8ae42

Please sign in to comment.