|
1 # |
|
2 # Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net> |
|
3 # All Rights Reserved. |
|
4 # |
|
5 # This software is subject to the provisions of the Zope Public License, |
|
6 # Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. |
|
7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED |
|
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
|
10 # FOR A PARTICULAR PURPOSE. |
|
11 # |
|
12 |
|
13 __docformat__ = 'restructuredtext' |
|
14 |
|
15 # import standard library |
|
16 |
|
17 # import interfaces |
|
18 from pyams_security.interfaces import IAdminAuthenticationPlugin, ISecurityManager |
|
19 from pyams_security.zmi.interfaces import ISecurityManagerToolbarAddingMenu |
|
20 from pyams_skin.interfaces import IContentHelp |
|
21 from pyams_skin.layer import IPyAMSLayer |
|
22 from z3c.form.interfaces import DISPLAY_MODE |
|
23 from zope.component.interfaces import ISite |
|
24 |
|
25 # import packages |
|
26 from pyams_form.form import AJAXAddForm, AJAXEditForm |
|
27 from pyams_pagelet.pagelet import pagelet_config |
|
28 from pyams_security.plugin.admin import AdminAuthenticationPlugin |
|
29 from pyams_security.zmi.utility import SecurityManagerPluginsTable |
|
30 from pyams_skin.help import ContentHelp |
|
31 from pyams_skin.viewlet.toolbar import ToolbarMenuItem |
|
32 from pyams_utils.adapter import adapter_config |
|
33 from pyams_utils.registry import query_utility |
|
34 from pyams_viewlet.viewlet import viewlet_config |
|
35 from pyams_zmi.form import AdminDialogEditForm, AdminDialogAddForm |
|
36 from pyams_zmi.layer import IAdminLayer |
|
37 from pyramid.url import resource_url |
|
38 from pyramid.view import view_config |
|
39 from z3c.form import field |
|
40 |
|
41 from pyams_security import _ |
|
42 |
|
43 |
|
44 @viewlet_config(name='add-admin-authentication.menu', context=ISite, layer=IAdminLayer, |
|
45 view=SecurityManagerPluginsTable, manager=ISecurityManagerToolbarAddingMenu, |
|
46 permission='system.manage', weight=1) |
|
47 class AdminAuthenticationAddMenu(ToolbarMenuItem): |
|
48 """Admin authentication add menu""" |
|
49 |
|
50 label = _("Add admin authentication...") |
|
51 label_css_class = 'fa fa-fw fa-support' |
|
52 url = 'add_admin_authentication.html' |
|
53 modal_target = True |
|
54 |
|
55 |
|
56 @pagelet_config(name='add_admin_authentication.html', context=ISite, layer=IPyAMSLayer, |
|
57 permission='system.manage') |
|
58 class AdminAuthenticationAddForm(AdminDialogAddForm): |
|
59 """Admin authentication plug-in add form""" |
|
60 |
|
61 title = _("System security manager") |
|
62 legend = _("Add administration authentication plug-in") |
|
63 icon_css_class = 'fa fa-fw fa-support' |
|
64 |
|
65 fields = field.Fields(IAdminAuthenticationPlugin).omit('__name__', '__parent__') |
|
66 ajax_handler = 'add_admin_authentication.json' |
|
67 edit_permission = 'system.manage' |
|
68 |
|
69 def create(self, data): |
|
70 return AdminAuthenticationPlugin() |
|
71 |
|
72 def add(self, plugin): |
|
73 context = query_utility(ISecurityManager) |
|
74 context[plugin.prefix] = plugin |
|
75 |
|
76 def nextURL(self): |
|
77 return resource_url(self.context, self.request, 'security-manager.html') |
|
78 |
|
79 |
|
80 @view_config(name='add_admin_authentication.json', context=ISite, request_type=IPyAMSLayer, |
|
81 permission='system.manage', renderer='json', xhr=True) |
|
82 class AdminAuthenticationAJAXAddForm(AJAXAddForm, AdminAuthenticationAddForm): |
|
83 """Admin authentication plug-in add form, AJAX handler""" |
|
84 |
|
85 |
|
86 @pagelet_config(name='properties.html', context=IAdminAuthenticationPlugin, layer=IPyAMSLayer, |
|
87 permission='system.view') |
|
88 class AdminAuthenticationEditForm(AdminDialogEditForm): |
|
89 """Admin authentication plug-in edit form""" |
|
90 |
|
91 @property |
|
92 def title(self): |
|
93 return self.context.title |
|
94 |
|
95 legend = _("Edit administration authentication plug-in") |
|
96 icon_css_class = 'fa fa-fw fa-support' |
|
97 |
|
98 fields = field.Fields(IAdminAuthenticationPlugin).omit('__name__', '__parent__') |
|
99 ajax_handler = 'properties.json' |
|
100 edit_permission = 'system.manage' |
|
101 |
|
102 def updateWidgets(self, prefix=None): |
|
103 super(AdminAuthenticationEditForm, self).updateWidgets() |
|
104 self.widgets['prefix'].mode = DISPLAY_MODE |
|
105 |
|
106 |
|
107 @view_config(name='properties.json', context=IAdminAuthenticationPlugin, request_type=IPyAMSLayer, |
|
108 permission='system.manage', renderer='json', xhr=True) |
|
109 class AdminAuthenticationAJAXEditForm(AJAXEditForm, AdminAuthenticationEditForm): |
|
110 """Admin authentication plug-in edit form, AJAX handler""" |
|
111 |
|
112 |
|
113 @adapter_config(context=(IAdminAuthenticationPlugin, IAdminLayer, AdminAuthenticationEditForm), provides=IContentHelp) |
|
114 class AdminAuthenticationHelpAdapter(ContentHelp): |
|
115 """Admin authentication edit form help adapter""" |
|
116 |
|
117 header = _("WARNING") |
|
118 status = 'danger' |
|
119 message = _("""Before disabling plug-in, please verify that you have other administration access!""") |
|
120 message_format = 'rest' |