def _wrapped_view(request, *args, **kwargs): site = AmpCmsSite.objects.get_by_request(request) module_name = kwargs.get(C.URL_KEY_MODULE) page_name = kwargs.get(C.URL_KEY_PAGE) if not site.private: try: module, page = get_public_module_and_page(site, module_name, page_name, request.user) except: # Redirect to the public home page return HttpResponseRedirect(public_url) else: if page is None and (module.redirect_url or module.redirect_module): if module.redirect_url: log.debug('Successfully loaded module. Redirecting to %s' % module.redirect_url) return HttpResponsePermanentRedirect(module.redirect_url) elif module.redirect_module is not None: if request.is_secure(): redirect_url = 'https://%s%s?%s' % (module.redirect_module.site.domain, module.redirect_module.get_absolute_url(), request.GET.urlencode()) else: redirect_url = 'http://%s%s?%s' % (module.redirect_module.site.domain, module.redirect_module.get_absolute_url(), request.GET.urlencode()) log.debug('Successfully loaded module. Redirecting to %s' % redirect_url) return HttpResponsePermanentRedirect(redirect_url) else: log.debug('Successfully loaded module and page: User %s viewing %s and %s' % (request.user.username, module.name, page.name)) if page.private and not request.user.is_authenticated(): log.debug('Site is private and no user is logged in. Redirecting to login.') return HttpResponseRedirect('%s?%s=%s' % (login_url, REDIRECT_FIELD_NAME, urlquote(request.get_full_path()))) elif request.user.is_authenticated(): # Attempt to load module and page try: module, page = get_private_module_and_page(site, module_name, page_name, request.user) except PageDoesNotExist: return HttpResponseRedirect(permission_denied_url) except NoPermissions: return HttpResponseRedirect(settings.AMPCMS_ACCOUNT_NO_PERMISSIONS_URL) else: log.debug('Successfully loaded module and page: User %s viewing page %s.%s' % (request.user.username, module.name, page.name)) else: return HttpResponseRedirect('%s?%s=%s' % (login_url, REDIRECT_FIELD_NAME, urlquote(request.get_full_path()))) kwargs.update({ C.EXTRA_KWARGS_SITE : site, C.EXTRA_KWARGS_MODULE : module, C.EXTRA_KWARGS_PAGE : page }) if not site.private or request.user.has_acl(module, page): return view_func(request, *args, **kwargs) else: log.warning('User ACL rejected for %s viewing %s.%s' % (request.user, module.name, page.name)) return HttpResponseRedirect(permission_denied_url)
def account_handling(request, **kwargs): view_url = kwargs.get('url', '/login') view, view_args, view_kwargs = resolve(view_url, settings.AMPCMS_ACCOUNT_URLCONF) if request.GET.has_key('next'): kwargs.update({'callback_url': request.GET['next']}) else: kwargs.update({'callback_url': '/'}) request.is_ampcms = True response = view(request, *view_args, **view_kwargs) if isinstance(response, HttpResponseRedirect): return response site = AmpCmsSite.objects.get_by_request(request) if site.skin is not None: base_template = ['%s/%s/base.html' % (settings.AMPCMS_SKIN_FOLDER, site.skin)] try: select_template(base_template) except TemplateNotFound: base_template = 'base.html' else: base_template = 'base.html' if not site.private: module, page = get_public_module_and_page(site, None, None, request.user) kwargs['site_model'] = site page_content = pages.page_mapper.get_item(page.page_class)(request=request, request_kwargs=kwargs, page=page) layout = layouts.PCLayout(request=request, request_kwargs=kwargs, page=page_content) menus = layout.children() else: page_content = None menus = None context = RequestContext(request) context['menus'] = menus context['page'] = page_content if isinstance(response, AmpCmsTemplateResponse): pagelet_content = response.rendered_content elif hasattr(response, 'render'): pagelet_content = response.render().content elif hasattr(response, 'content'): pagelet_content = response.content else: pagelet_content = response context['content'] = Markup(force_unicode(pagelet_content)) context['base'] = base_template if hasattr(response, 'ampcms_media') and response.ampcms_media.title: context['title'] = response.ampcms_media.title else: context['title'] = kwargs.get('title') response = render_to_response('ampcms/account_handling.html', context) return response