Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
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