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'} |