src/pyams_security/views/login.py
changeset 51 550988fcf228
parent 42 07229ac2497b
child 62 9f4dec677e75
equal deleted inserted replaced
50:a6d994c60822 51:550988fcf228
    14 
    14 
    15 
    15 
    16 # import standard library
    16 # import standard library
    17 
    17 
    18 # import interfaces
    18 # import interfaces
       
    19 from pyams_form.interfaces.form import IFormHeaderViewletsManager, IFormPrefixViewletsManager, \
       
    20     IFormSuffixViewletsManager
    19 from pyams_security.interfaces import ILoginView, ISecurityManager, LOGIN_REFERER_KEY
    21 from pyams_security.interfaces import ILoginView, ISecurityManager, LOGIN_REFERER_KEY
    20 from pyams_skin.interfaces import IModalFullPage
    22 from pyams_skin.interfaces import IModalFullPage
       
    23 from pyams_skin.interfaces.configuration import IBackOfficeConfiguration
    21 from pyams_skin.layer import IPyAMSLayer
    24 from pyams_skin.layer import IPyAMSLayer
       
    25 from pyams_utils.interfaces.site import IConfigurationManager
    22 from z3c.form.interfaces import IDataExtractedEvent
    26 from z3c.form.interfaces import IDataExtractedEvent
    23 
    27 
    24 # import packages
    28 # import packages
    25 from pyams_form.form import AddForm, AJAXAddForm, DialogAddForm
    29 from pyams_form.form import AddForm, AJAXAddForm, DialogAddForm
    26 from pyams_form.schema import ResetButton, CloseButton
    30 from pyams_form.schema import ResetButton, CloseButton
    27 from pyams_pagelet.pagelet import pagelet_config
    31 from pyams_pagelet.pagelet import pagelet_config
    28 from pyams_security.credential import Credentials
    32 from pyams_security.credential import Credentials
       
    33 from pyams_template.template import template_config
    29 from pyams_utils.registry import query_utility
    34 from pyams_utils.registry import query_utility
       
    35 from pyams_utils.text import text_to_html
       
    36 from pyams_utils.traversing import get_parent
       
    37 from pyams_viewlet.viewlet import viewlet_config, Viewlet
    30 from pyramid.events import subscriber
    38 from pyramid.events import subscriber
    31 from pyramid.httpexceptions import HTTPFound
    39 from pyramid.httpexceptions import HTTPFound
    32 from pyramid.response import Response
    40 from pyramid.response import Response
    33 from pyramid.security import remember, forget
    41 from pyramid.security import remember, forget
    34 from pyramid.view import view_config, forbidden_view_config
    42 from pyramid.view import view_config, forbidden_view_config
   127         else:
   135         else:
   128             status['location'] = '/'
   136             status['location'] = '/'
   129         return status
   137         return status
   130 
   138 
   131 
   139 
       
   140 @viewlet_config(name='header', context=Interface, layer=IPyAMSLayer, view=LoginForm, manager=IFormHeaderViewletsManager)
       
   141 @template_config(template='templates/login-header.pt', layer=IPyAMSLayer)
       
   142 class LoginFormHeaderViewlet(Viewlet):
       
   143     """Login form header viewlet"""
       
   144 
       
   145 
       
   146 @viewlet_config(name='form_prefix', context=Interface, layer=IPyAMSLayer, view=LoginForm,
       
   147                 manager=IFormPrefixViewletsManager)
       
   148 class LoginFormPrefixViewlet(Viewlet):
       
   149     """Login form prefix viewlet"""
       
   150 
       
   151     def __new__(cls, context, request, view, manager):
       
   152         manager = get_parent(context, IConfigurationManager)
       
   153         if manager is not None:
       
   154             config = IBackOfficeConfiguration(manager)
       
   155             if not config.login_header:
       
   156                 return None
       
   157         return Viewlet.__new__(cls)
       
   158 
       
   159     def render(self):
       
   160         manager = get_parent(self.context, IConfigurationManager)
       
   161         config = IBackOfficeConfiguration(manager)
       
   162         return text_to_html(config.login_header, renderer='rest')
       
   163 
       
   164 
       
   165 @viewlet_config(name='form_suffix', context=Interface, layer=IPyAMSLayer, view=LoginForm,
       
   166                 manager=IFormSuffixViewletsManager)
       
   167 class LoginFormSuffixViewlet(Viewlet):
       
   168     """Login form suffix viewlet"""
       
   169 
       
   170     def __new__(cls, context, request, view, manager):
       
   171         manager = get_parent(context, IConfigurationManager)
       
   172         if manager is not None:
       
   173             config = IBackOfficeConfiguration(manager)
       
   174             if not config.login_footer:
       
   175                 return None
       
   176         return Viewlet.__new__(cls)
       
   177 
       
   178     def render(self):
       
   179         manager = get_parent(self.context, IConfigurationManager)
       
   180         config = IBackOfficeConfiguration(manager)
       
   181         return text_to_html(config.login_footer, renderer='rest')
       
   182 
       
   183 
   132 @forbidden_view_config(request_type=IPyAMSLayer, renderer='json', xhr=True)
   184 @forbidden_view_config(request_type=IPyAMSLayer, renderer='json', xhr=True)
   133 def ForbiddenAJAXView(request):
   185 def ForbiddenAJAXView(request):
   134     """AJAX call forbidden view"""
   186     """AJAX call forbidden view"""
   135     return {'status': 'modal',
   187     return {'status': 'modal',
   136             'location': 'login-dialog.html'}
   188             'location': 'login-dialog.html'}