Problem: Embedding 401 page (not author ized) for "edit" with standard_error_message

Heiko Besemann <[email protected]> Fri, 17 Jul 2009 17:24:18 +0200
Newsgroups gmane.comp.web.zope.silva.devel
Message-ID <b6b10958f357e2230ed7b89f51e6fbfc@localhost>
Hi there,

sorry for bugging the dev-list with my problems. However I run into a
strange thing tonight I can not explain and need someones professional
advice how to get this fixed.

Well, Silva uses the "standard_error_message" for rendering custom errors
like 404 (not found), 500 (system problems) and 401 (not authorized). When
one of these errors happends my wish is that Silva will not render the
standard_error_message template but uses my custom skins content area to
display the message.

So for 404, 401 and 500 I did the following thing:

<tal:block tal:condition="python: error_type == 'NotFound'">
<html metal:use-macro="context/@@mywonderfullcustomskin/main">
<head>
<title metal:fill-slot="title">
404 &ndash; Resource not found
</title>
</head>
<body>
<div metal:fill-slot="body">
<h2>404 &ndash; Resource not found</h2>
<p>
Huhu, where is my page gone?
</p>
</div>
</body>
</html>
</tal:block>
</tal:block>

Now this works if I type something like
"http://www.wattwanderinfo.de/where_is_my_page". The error message will get
displayed withing my custom skin.

Next thing I wanted was to render are "401" errors. The above code differs
only for the condition check but everthing else is the same. I use my
context/@@mywonderfullcustomskin macro aso. 

If I try to authenticate as "manager" to get into ZMI and cancel the
authentication request, yes I get that permission denied stuff shown
correctly on my page. However (and this is the thing I dont understand) if
I try to authenticate as "edit" and cancel authentication I get some error
like the following on my webpage:

-- snipp --
You are not authorized to access this resource.
Username and password are not correct.

(Also, the following error occurred while attempting to render the standard
error message, please see the event log for full details:
(<Products.Silva.SilvaObject.Zope3ViewAttribute object at 0x01CF2450>,
'mywonderfullcustomskin'))
-- snapp --

Zope event logfile shows me:

-- snipp --
2009-07-17T17:17:52 ERROR root Exception while rendering an error message
Traceback (most recent call last):
File "C:\Zope\2.11.1\Zope\lib\python\OFS\SimpleItem.py", line 227, in
raise_standardErrorMessage
v = s(**kwargs)
File "C:\Zope\2.11.1\Zope\lib\python\Shared\DC\Scripts\Bindings.py", line
313, in __call__
return self._bindAndExec(args, kw, None)
File "C:\Zope\2.11.1\Zope\lib\python\Shared\DC\Scripts\Bindings.py", line
350, in _bindAndExec
return self._exec(bound_data, args, kw)
File
"C:\Zope\2.11.1\Zope\lib\python\Products\PageTemplates\ZopePageTemplate.py",
line 330, in _exec
result = self.pt_render(extra_context=bound_names)
File
"C:\Zope\2.11.1\Zope\lib\python\Products\PageTemplates\ZopePageTemplate.py",
line 427, in pt_render
result = PageTemplate.pt_render(self, source, extra_context)
File
"C:\Zope\2.11.1\Zope\lib\python\Products\PageTemplates\PageTemplate.py",
line 96, in pt_render
showtal=showtal)
File "C:\Zope\2.11.1\Zope\lib\python\zope\pagetemplate\pagetemplate.py",
line 115, in pt_render
strictinsert=0, sourceAnnotations=sourceAnnotations)()
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 271,
in __call__
self.interpret(self.program)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 346,
in interpret
handlers[opcode](self, args)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 536,
in do_optTag_tal
self.do_optTag(stuff)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 521,
in do_optTag
return self.no_tag(start, program)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 516,
in no_tag
self.interpret(program)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 346,
in interpret
handlers[opcode](self, args)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 855,
in do_condition
self.interpret(block)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 346,
in interpret
handlers[opcode](self, args)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 536,
in do_optTag_tal
self.do_optTag(stuff)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 521,
in do_optTag
return self.no_tag(start, program)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 516,
in no_tag
self.interpret(program)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 346,
in interpret
handlers[opcode](self, args)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tal\talinterpreter.py", line 870,
in do_useMacro
macro = self.engine.evaluateMacro(macroExpr)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tales\tales.py", line 696, in
evaluate
return expression(self)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tales\expressions.py", line 217,
in __call__
return self._eval(econtext)
File
"C:\Zope\2.11.1\Zope\lib\python\Products\PageTemplates\Expressions.py",
line 131, in _eval
ob = self._subexprs[-1](econtext)
File "C:\Zope\2.11.1\Zope\lib\python\zope\tales\expressions.py", line 124,
in _eval
ob = self._traverser(ob, element, econtext)
File
"C:\Zope\2.11.1\Zope\lib\python\Products\PageTemplates\Expressions.py",
line 83, in boboAwareZopeTraverse
request=request)
File "C:\Zope\2.11.1\Zope\lib\python\zope\traversing\adapters.py", line
154, in traversePathElement
return namespaceLookup(ns, nm, obj, request)
File "C:\Zope\2.11.1\Zope\lib\python\zope\traversing\namespace.py", line
112, in namespaceLookup
return traverser.traverse(name, ())
File "C:\Zope\2.11.1\Zope\lib\python\zope\traversing\namespace.py", line
345, in traverse
raise TraversalError(self.context, name)
TraversalError: (<Products.Silva.SilvaObject.Zope3ViewAttribute object at
0x01CF2450>, 'mywonderfullcustomskin')

-- snapp --

So why is everything working fine for 404 and 401 (with manage
authentication), but not for 401 with "edit" authentication?

Cheers,
Heiko