author | Adrien Di Mascio <Adrien.DiMascio@logilab.fr> |
Fri, 27 Aug 2010 13:44:55 +0200 | |
branch | stable |
changeset 6165 | 7da7c270bbbd |
parent 6109 | 47d9c0e0f7b7 |
child 6453 | 7fdd780d87e4 |
permissions | -rw-r--r-- |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
1 |
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
2 |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
3 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
4 |
# This file is part of CubicWeb. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
5 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
6 |
# CubicWeb is free software: you can redistribute it and/or modify it under the |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
7 |
# terms of the GNU Lesser General Public License as published by the Free |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
8 |
# Software Foundation, either version 2.1 of the License, or (at your option) |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
9 |
# any later version. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
10 |
# |
5424
8ecbcbff9777
replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5421
diff
changeset
|
11 |
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
12 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
13 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
14 |
# details. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
15 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
16 |
# You should have received a copy of the GNU Lesser General Public License along |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4714
diff
changeset
|
17 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
5528 | 18 |
"""security management and error screens""" |
0 | 19 |
|
20 |
__docformat__ = "restructuredtext en" |
|
1641 | 21 |
_ = unicode |
0 | 22 |
|
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2270
diff
changeset
|
23 |
from logilab.mtconverter import xml_escape |
0 | 24 |
|
1877
10b9feeb7905
anon should not see security management view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1806
diff
changeset
|
25 |
from cubicweb.selectors import yes, none_rset, match_user_groups, authenticated_user |
4706
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
26 |
from cubicweb.view import AnyRsetView, StartupView, EntityView, View |
4023
eae23c40627a
drop common subpackage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3998
diff
changeset
|
27 |
from cubicweb.uilib import html_traceback, rest_traceback |
2270
70c0da0f2181
should use a hidden text area for error description, not an hidden input (else the browser may remove line breaks)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2052
diff
changeset
|
28 |
from cubicweb.web import formwidgets as wdgs |
1402
04b7afb14b50
new style security management forms
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
29 |
from cubicweb.web.formfields import guess_field |
5234
e2476d78b060
ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
5232
diff
changeset
|
30 |
from cubicweb.web.views.schema import SecurityViewMixIn |
0 | 31 |
|
5232
78c1a531f7b3
ticket #787032, schema view improvement
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
4714
diff
changeset
|
32 |
from yams.buildobjs import EntityType |
0 | 33 |
|
1388
6d5f0ccf31b8
new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents:
836
diff
changeset
|
34 |
SUBMIT_MSGID = _('Submit bug report') |
6d5f0ccf31b8
new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents:
836
diff
changeset
|
35 |
MAIL_SUBMIT_MSGID = _('Submit bug report by mail') |
0 | 36 |
|
5234
e2476d78b060
ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
5232
diff
changeset
|
37 |
class SecurityManagementView(SecurityViewMixIn, EntityView): |
0 | 38 |
"""display security information for a given entity""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3230
diff
changeset
|
39 |
__regid__ = 'security' |
1877
10b9feeb7905
anon should not see security management view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1806
diff
changeset
|
40 |
__select__ = EntityView.__select__ & authenticated_user() |
10b9feeb7905
anon should not see security management view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1806
diff
changeset
|
41 |
|
0 | 42 |
title = _('security') |
1941
4f38e8b81a1a
egroup -> cwgroup #343418
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1877
diff
changeset
|
43 |
|
1569
99a19875ef1e
set progress div in call() to avoid duplication when applied on multiple entities
sylvain.thenault@logilab.fr
parents:
1568
diff
changeset
|
44 |
def call(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
45 |
self.w(u'<div id="progress">%s</div>' % self._cw._('validating...')) |
1569
99a19875ef1e
set progress div in call() to avoid duplication when applied on multiple entities
sylvain.thenault@logilab.fr
parents:
1568
diff
changeset
|
46 |
super(SecurityManagementView, self).call() |
602
1454282a8b45
[views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
431
diff
changeset
|
47 |
|
0 | 48 |
def cell_call(self, row, col): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
49 |
self._cw.add_js('cubicweb.edition.js') |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
50 |
self._cw.add_css('cubicweb.acl.css') |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
51 |
entity = self.cw_rset.get_entity(row, col) |
0 | 52 |
w = self.w |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
53 |
_ = self._cw._ |
0 | 54 |
w(u'<h1><span class="etype">%s</span> <a href="%s">%s</a></h1>' |
55 |
% (entity.dc_type().capitalize(), |
|
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2270
diff
changeset
|
56 |
xml_escape(entity.absolute_url()), |
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2270
diff
changeset
|
57 |
xml_escape(entity.dc_title()))) |
0 | 58 |
# first show permissions defined by the schema |
59 |
self.w('<h2>%s</h2>' % _('schema\'s permissions definitions')) |
|
5234
e2476d78b060
ticket #787103, relation schema view enhancements
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
5232
diff
changeset
|
60 |
self.permissions_table(entity.e_schema) |
0 | 61 |
self.w('<h2>%s</h2>' % _('manage security')) |
62 |
# ownership information |
|
4045
f4a52abb6f4f
cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
4023
diff
changeset
|
63 |
if self._cw.vreg.schema.rschema('owned_by').has_perm(self._cw, 'add', |
0 | 64 |
fromeid=entity.eid): |
65 |
self.owned_by_edit_form(entity) |
|
66 |
else: |
|
67 |
self.owned_by_information(entity) |
|
1518 | 68 |
# cwpermissions |
0 | 69 |
if 'require_permission' in entity.e_schema.subject_relations(): |
70 |
w('<h3>%s</h3>' % _('permissions for this entity')) |
|
4045
f4a52abb6f4f
cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
4023
diff
changeset
|
71 |
reqpermschema = self._cw.vreg.schema.rschema('require_permission') |
0 | 72 |
self.require_permission_information(entity, reqpermschema) |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
73 |
if reqpermschema.has_perm(self._cw, 'add', fromeid=entity.eid): |
0 | 74 |
self.require_permission_edit_form(entity) |
75 |
||
76 |
def owned_by_edit_form(self, entity): |
|
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
77 |
self.w('<h3>%s</h3>' % self._cw._('ownership')) |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
78 |
msg = self._cw._('ownerships have been changed') |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
79 |
form = self._cw.vreg['forms'].select('base', self._cw, entity=entity, |
2650
18aec79ec3a3
R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2433
diff
changeset
|
80 |
form_renderer_id='base', submitmsg=msg, |
18aec79ec3a3
R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2433
diff
changeset
|
81 |
form_buttons=[wdgs.SubmitButton()], |
18aec79ec3a3
R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2433
diff
changeset
|
82 |
domid='ownership%s' % entity.eid, |
18aec79ec3a3
R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2433
diff
changeset
|
83 |
__redirectvid='security', |
18aec79ec3a3
R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2433
diff
changeset
|
84 |
__redirectpath=entity.rest_path()) |
4045
f4a52abb6f4f
cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
4023
diff
changeset
|
85 |
field = guess_field(entity.e_schema, self._cw.vreg.schema.rschema('owned_by')) |
1453
a9841184be7c
guess_field now takes an entity schema as first argument, not an entity class
sylvain.thenault@logilab.fr
parents:
1402
diff
changeset
|
86 |
form.append_field(field) |
4297
5f2081181055
3.6 api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4252
diff
changeset
|
87 |
self.w(form.render(display_progress_div=False)) |
0 | 88 |
|
89 |
def owned_by_information(self, entity): |
|
90 |
ownersrset = entity.related('owned_by') |
|
91 |
if ownersrset: |
|
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
92 |
self.w('<h3>%s</h3>' % self._cw._('ownership')) |
0 | 93 |
self.w(u'<div class="ownerInfo">') |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
94 |
self.w(self._cw._('this entity is currently owned by') + ' ') |
0 | 95 |
self.wview('csv', entity.related('owned_by'), 'null') |
96 |
self.w(u'</div>') |
|
97 |
# else we don't know if this is because entity has no owner or becayse |
|
98 |
# user as no access to owner users entities |
|
99 |
||
100 |
def require_permission_information(self, entity, reqpermschema): |
|
101 |
if entity.require_permission: |
|
102 |
w = self.w |
|
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
103 |
_ = self._cw._ |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
104 |
if reqpermschema.has_perm(self._cw, 'delete', fromeid=entity.eid): |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
105 |
delurl = self._cw.build_url('edit', __redirectvid='security', |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
106 |
__redirectpath=entity.rest_path()) |
0 | 107 |
delurl = delurl.replace('%', '%%') |
108 |
# don't give __delete value to build_url else it will be urlquoted |
|
109 |
# and this will replace %s by %25s |
|
110 |
delurl += '&__delete=%s:require_permission:%%s' % entity.eid |
|
2996
866a2c135c33
B #345282 xhtml requires to use   instead of
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2670
diff
changeset
|
111 |
dellinktempl = u'[<a href="%s" title="%s">-</a>] ' % ( |
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2270
diff
changeset
|
112 |
xml_escape(delurl), _('delete this permission')) |
0 | 113 |
else: |
114 |
dellinktempl = None |
|
115 |
w(u'<table class="schemaInfo">') |
|
116 |
w(u'<tr><th>%s</th><th>%s</th></tr>' % (_("permission"), |
|
117 |
_('granted to groups'))) |
|
1518 | 118 |
for cwperm in entity.require_permission: |
0 | 119 |
w(u'<tr>') |
120 |
if dellinktempl: |
|
1518 | 121 |
w(u'<td>%s%s</td>' % (dellinktempl % cwperm.eid, |
122 |
cwperm.view('oneline'))) |
|
0 | 123 |
else: |
1518 | 124 |
w(u'<td>%s</td>' % cwperm.view('oneline')) |
5973
eaf305258bbe
[3.6]Â fix deprecation warnings
Stephanie Marcu <stephanie.marcu@logilab.fr>
parents:
5545
diff
changeset
|
125 |
w(u'<td>%s</td>' % self._cw.view('csv', cwperm.related('require_group'), 'null')) |
0 | 126 |
w(u'</tr>\n') |
127 |
w(u'</table>') |
|
128 |
else: |
|
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
129 |
self.w(self._cw._('no associated permissions')) |
0 | 130 |
|
131 |
def require_permission_edit_form(self, entity): |
|
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
132 |
newperm = self._cw.vreg['etypes'].etype_class('CWPermission')(self._cw) |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
133 |
newperm.eid = self._cw.varmaker.next() |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
134 |
self.w(u'<p>%s</p>' % self._cw._('add a new permission')) |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
135 |
form = self._cw.vreg['forms'].select('base', self._cw, entity=newperm, |
2650
18aec79ec3a3
R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2433
diff
changeset
|
136 |
form_buttons=[wdgs.SubmitButton()], |
18aec79ec3a3
R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2433
diff
changeset
|
137 |
domid='reqperm%s' % entity.eid, |
18aec79ec3a3
R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2433
diff
changeset
|
138 |
__redirectvid='security', |
18aec79ec3a3
R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2433
diff
changeset
|
139 |
__redirectpath=entity.rest_path()) |
4164
119a374c5eb4
form_add_hidden -> add_hidden
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4045
diff
changeset
|
140 |
form.add_hidden('require_permission', entity.eid, role='object', |
119a374c5eb4
form_add_hidden -> add_hidden
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4045
diff
changeset
|
141 |
eidparam=True) |
1402
04b7afb14b50
new style security management forms
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
142 |
permnames = getattr(entity, '__permissions__', None) |
1453
a9841184be7c
guess_field now takes an entity schema as first argument, not an entity class
sylvain.thenault@logilab.fr
parents:
1402
diff
changeset
|
143 |
cwpermschema = newperm.e_schema |
1402
04b7afb14b50
new style security management forms
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
144 |
if permnames is not None: |
4045
f4a52abb6f4f
cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
4023
diff
changeset
|
145 |
field = guess_field(cwpermschema, self._cw.vreg.schema.rschema('name'), |
2270
70c0da0f2181
should use a hidden text area for error description, not an hidden input (else the browser may remove line breaks)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2052
diff
changeset
|
146 |
widget=wdgs.Select({'size': 1}), |
1531 | 147 |
choices=permnames) |
0 | 148 |
else: |
4045
f4a52abb6f4f
cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
4023
diff
changeset
|
149 |
field = guess_field(cwpermschema, self._cw.vreg.schema.rschema('name')) |
1402
04b7afb14b50
new style security management forms
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
150 |
form.append_field(field) |
4045
f4a52abb6f4f
cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
4023
diff
changeset
|
151 |
field = guess_field(cwpermschema, self._cw.vreg.schema.rschema('label')) |
1402
04b7afb14b50
new style security management forms
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
152 |
form.append_field(field) |
4045
f4a52abb6f4f
cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
4023
diff
changeset
|
153 |
field = guess_field(cwpermschema, self._cw.vreg.schema.rschema('require_group')) |
1402
04b7afb14b50
new style security management forms
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
154 |
form.append_field(field) |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
155 |
renderer = self._cw.vreg['formrenderers'].select( |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
156 |
'htable', self._cw, rset=None, display_progress_div=False) |
3953
19aefd78f61b
[forms] deprecate form_render(**kwargs) in favor of render(formvalues=None, rendervalues=None, renderer=None)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
157 |
self.w(form.render(renderer=renderer)) |
0 | 158 |
|
159 |
||
160 |
class ErrorView(AnyRsetView): |
|
161 |
"""default view when no result has been found""" |
|
731
ac4a94e50b60
some more s/__selectors__/__select__ but still more to come
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
691
diff
changeset
|
162 |
__select__ = yes() |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3230
diff
changeset
|
163 |
__regid__ = 'error' |
602
1454282a8b45
[views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
431
diff
changeset
|
164 |
|
0 | 165 |
def page_title(self): |
166 |
"""returns a title according to the result set - used for the |
|
167 |
title in the HTML header |
|
168 |
""" |
|
6109
47d9c0e0f7b7
integrate Celso's work on translation file: proper/complete spanish translation, fixed some typos in french translation, occured -> occurred fix in various places
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5973
diff
changeset
|
169 |
return self._cw._('an error occurred') |
0 | 170 |
|
171 |
def call(self): |
|
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
172 |
req = self._cw.reset_headers() |
1388
6d5f0ccf31b8
new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents:
836
diff
changeset
|
173 |
w = self.w |
0 | 174 |
ex = req.data.get('ex')#_("unable to find exception information")) |
175 |
excinfo = req.data.get('excinfo') |
|
6109
47d9c0e0f7b7
integrate Celso's work on translation file: proper/complete spanish translation, fixed some typos in french translation, occured -> occurred fix in various places
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5973
diff
changeset
|
176 |
title = self._cw._('an error occurred') |
602
1454282a8b45
[views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
431
diff
changeset
|
177 |
w(u'<h2>%s</h2>' % title) |
0 | 178 |
if 'errmsg' in req.data: |
179 |
ex = req.data['errmsg'] |
|
174
a2966960d550
get actual exception class instead of 'unicode' in the error view
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
0
diff
changeset
|
180 |
exclass = None |
0 | 181 |
else: |
174
a2966960d550
get actual exception class instead of 'unicode' in the error view
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
0
diff
changeset
|
182 |
exclass = ex.__class__.__name__ |
0 | 183 |
ex = exc_message(ex, req.encoding) |
3733
c3feb6a33f58
remove some warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3451
diff
changeset
|
184 |
if excinfo is not None and self._cw.vreg.config['print-traceback']: |
174
a2966960d550
get actual exception class instead of 'unicode' in the error view
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
0
diff
changeset
|
185 |
if exclass is None: |
602
1454282a8b45
[views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
431
diff
changeset
|
186 |
w(u'<div class="tb">%s</div>' |
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2270
diff
changeset
|
187 |
% xml_escape(ex).replace("\n","<br />")) |
174
a2966960d550
get actual exception class instead of 'unicode' in the error view
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
0
diff
changeset
|
188 |
else: |
602
1454282a8b45
[views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
431
diff
changeset
|
189 |
w(u'<div class="tb">%s: %s</div>' |
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2270
diff
changeset
|
190 |
% (exclass, xml_escape(ex).replace("\n","<br />"))) |
602
1454282a8b45
[views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
431
diff
changeset
|
191 |
w(u'<hr />') |
1454282a8b45
[views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
431
diff
changeset
|
192 |
w(u'<div class="tb">%s</div>' % html_traceback(excinfo, ex, '')) |
0 | 193 |
else: |
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2270
diff
changeset
|
194 |
w(u'<div class="tb">%s</div>' % (xml_escape(ex).replace("\n","<br />"))) |
0 | 195 |
# if excinfo is not None, it's probably not a bug |
196 |
if excinfo is None: |
|
197 |
return |
|
3733
c3feb6a33f58
remove some warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3451
diff
changeset
|
198 |
vcconf = self._cw.vreg.config.vc_config() |
602
1454282a8b45
[views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
431
diff
changeset
|
199 |
w(u"<div>") |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
200 |
eversion = vcconf.get('cubicweb', self._cw._('no version information')) |
0 | 201 |
# NOTE: tuple wrapping needed since eversion is itself a tuple |
602
1454282a8b45
[views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
431
diff
changeset
|
202 |
w(u"<b>CubicWeb version:</b> %s<br/>\n" % (eversion,)) |
1388
6d5f0ccf31b8
new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents:
836
diff
changeset
|
203 |
cversions = [] |
3733
c3feb6a33f58
remove some warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3451
diff
changeset
|
204 |
for cube in self._cw.vreg.config.cubes(): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
205 |
cubeversion = vcconf.get(cube, self._cw._('no version information')) |
5435
cc7d00a1b36e
[management] fix vocab: use cube instead of package
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
5426
diff
changeset
|
206 |
w(u"<b>Cube %s version:</b> %s<br/>\n" % (cube, cubeversion)) |
1388
6d5f0ccf31b8
new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents:
836
diff
changeset
|
207 |
cversions.append((cube, cubeversion)) |
602
1454282a8b45
[views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
431
diff
changeset
|
208 |
w(u"</div>") |
3200
747d17498cca
#345461: drop support for cube_eid / direct bug submission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2996
diff
changeset
|
209 |
# creates a bug submission link if submit-mail is set |
3733
c3feb6a33f58
remove some warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3451
diff
changeset
|
210 |
if self._cw.vreg.config['submit-mail']: |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
211 |
form = self._cw.vreg['forms'].select('base', self._cw, rset=None, |
5358
d4d294610ee7
[forms] no crash if restore_previous_post has not be called, has in report bug form in management.py for instance
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5234
diff
changeset
|
212 |
mainform=False) |
1388
6d5f0ccf31b8
new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents:
836
diff
changeset
|
213 |
binfo = text_error_description(ex, excinfo, req, eversion, cversions) |
4164
119a374c5eb4
form_add_hidden -> add_hidden
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4045
diff
changeset
|
214 |
form.add_hidden('description', binfo, |
119a374c5eb4
form_add_hidden -> add_hidden
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4045
diff
changeset
|
215 |
# we must use a text area to keep line breaks |
119a374c5eb4
form_add_hidden -> add_hidden
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4045
diff
changeset
|
216 |
widget=wdgs.TextArea({'class': 'hidden'})) |
119a374c5eb4
form_add_hidden -> add_hidden
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4045
diff
changeset
|
217 |
form.add_hidden('__bugreporting', '1') |
3200
747d17498cca
#345461: drop support for cube_eid / direct bug submission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2996
diff
changeset
|
218 |
form.form_buttons = [wdgs.SubmitButton(MAIL_SUBMIT_MSGID)] |
747d17498cca
#345461: drop support for cube_eid / direct bug submission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2996
diff
changeset
|
219 |
form.action = req.build_url('reportbug') |
3953
19aefd78f61b
[forms] deprecate form_render(**kwargs) in favor of render(formvalues=None, rendervalues=None, renderer=None)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
220 |
w(form.render()) |
0 | 221 |
|
222 |
||
223 |
def exc_message(ex, encoding): |
|
224 |
try: |
|
225 |
return unicode(ex) |
|
226 |
except: |
|
227 |
try: |
|
228 |
return unicode(str(ex), encoding, 'replace') |
|
229 |
except: |
|
230 |
return unicode(repr(ex), encoding, 'replace') |
|
602
1454282a8b45
[views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
431
diff
changeset
|
231 |
|
0 | 232 |
def text_error_description(ex, excinfo, req, eversion, cubes): |
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2270
diff
changeset
|
233 |
binfo = rest_traceback(excinfo, xml_escape(ex)) |
0 | 234 |
binfo += u'\n\n:URL: %s\n' % req.url() |
235 |
if not '__bugreporting' in req.form: |
|
236 |
binfo += u'\n:form params:\n' |
|
237 |
binfo += u'\n'.join(u' * %s = %s' % (k, v) for k, v in req.form.iteritems()) |
|
238 |
binfo += u'\n\n:CubicWeb version: %s\n' % (eversion,) |
|
239 |
for pkg, pkgversion in cubes: |
|
5435
cc7d00a1b36e
[management] fix vocab: use cube instead of package
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
5426
diff
changeset
|
240 |
binfo += u":Cube %s version: %s\n" % (pkg, pkgversion) |
0 | 241 |
binfo += '\n' |
242 |
return binfo |
|
243 |
||
1877
10b9feeb7905
anon should not see security management view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1806
diff
changeset
|
244 |
|
4706
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
245 |
class CwStats(View): |
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
246 |
"""A textual stats output for monitoring tools such as munin """ |
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
247 |
|
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
248 |
__regid__ = 'processinfo' |
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
249 |
content_type = 'text/txt' |
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
250 |
templatable = False |
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
251 |
__select__ = none_rset() & match_user_groups('users', 'managers') |
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
252 |
|
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
253 |
def call(self): |
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
254 |
stats = self._cw.vreg.config.repository(None).stats() |
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
255 |
results = [] |
6035e96b64dd
added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents:
4297
diff
changeset
|
256 |
for element in stats: |
4713
785299dfc2c0
[i18n] nothing to translate here
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4706
diff
changeset
|
257 |
results.append(u'%s %s' % (element, stats[element])) |
785299dfc2c0
[i18n] nothing to translate here
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4706
diff
changeset
|
258 |
self.w(u'\n'.join(results)) |