src/pyams_security/zmi/plugin/admin.py
changeset 0 f04e1d0a0723
child 8 67acb59f115e
equal deleted inserted replaced
-1:000000000000 0:f04e1d0a0723
       
     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'