Revision b6496f0c

b/snf-astakos-app/astakos/im/views/decorators.py
33 33

  
34 34
from functools import wraps
35 35

  
36
from django.utils.http import urlquote
36 37
from django.contrib import messages
37
from django.contrib.auth.decorators import login_required
38 38
from django.core.exceptions import PermissionDenied
39 39
from django.core.urlresolvers import reverse
40 40
from django.http import HttpResponse, HttpResponseRedirect
41
from django.utils.decorators import available_attrs
41 42
from django.utils.http import urlencode
42 43

  
43 44
from astakos.im import auth_providers as auth
44 45
from astakos.im.cookie import CookieHandler
45 46

  
47
REDIRECT_FIELD_NAME = 'next'
48

  
49

  
50
def user_passes_test(test_func, login_url=None,
51
                     redirect_field_name=REDIRECT_FIELD_NAME):
52
    """
53
    Decorator for views that checks that the user passes the given test,
54
    redirecting to the log-in page if necessary. The test should be a callable
55
    that takes the user object and returns True if the user passes.
56
    """
57
    if not login_url:
58
        from django.conf import settings
59
        login_url = settings.LOGIN_URL
60

  
61
    def decorator(view_func):
62
        def _wrapped_view(request, *args, **kwargs):
63
            if test_func(request.user):
64
                return view_func(request, *args, **kwargs)
65
            path = urlquote(request.get_full_path())
66
            tup = reverse('login'), redirect_field_name, path
67
            return HttpResponseRedirect('%s?%s=%s' % tup)
68
        return wraps(view_func,
69
                     assigned=available_attrs(view_func))(_wrapped_view)
70
    return decorator
71

  
72

  
73
def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME,
74
                   login_url=None):
75
    """
76
    Decorator for views that checks that the user is logged in, redirecting
77
    to the log-in page if necessary.
78
    """
79
    actual_decorator = user_passes_test(
80
        lambda u: u.is_authenticated(),
81
        redirect_field_name=redirect_field_name,
82

  
83
    )
84
    if function:
85
        return actual_decorator(function)
86
    return actual_decorator
87

  
46 88

  
47 89
def cookie_fix(func):
48 90
    """
......
71 113

  
72 114
def requires_auth_provider(provider_id, **perms):
73 115
    """
116
    View requires specified authentication module to be enabled in
117
    ASTAKOS_IM_MODULES setting.
74 118
    """
75 119
    def decorator(func, *args, **kwargs):
76 120
        @wraps(func)
b/snf-astakos-app/astakos/im/views/im.py
40 40

  
41 41
from django.shortcuts import get_object_or_404
42 42
from django.contrib import messages
43
from django.contrib.auth.decorators import login_required
44 43
from django.contrib.auth.models import User
45 44
from django.core.urlresolvers import reverse
46 45
from django.db import transaction
......
71 70
from astakos.im import quotas
72 71
from astakos.im.views.util import render_response, _resources_catalog
73 72
from astakos.im.views.decorators import cookie_fix, signed_terms_required,\
74
    required_auth_methods_assigned, valid_astakos_user_required
73
    required_auth_methods_assigned, valid_astakos_user_required, login_required
75 74

  
76 75
logger = logging.getLogger(__name__)
77 76

  
b/snf-astakos-app/astakos/im/views/projects.py
40 40

  
41 41
from django.shortcuts import get_object_or_404
42 42
from django.contrib import messages
43
from django.contrib.auth.decorators import login_required
44 43
from django.core.urlresolvers import reverse
45 44
from django.http import Http404
46 45
from django.shortcuts import redirect
......
70 69
from astakos.im.views.util import render_response, _create_object, \
71 70
    _update_object, _resources_catalog, ExceptionHandler
72 71
from astakos.im.views.decorators import cookie_fix, signed_terms_required,\
73
    valid_astakos_user_required
72
    valid_astakos_user_required, login_required
74 73

  
75 74
logger = logging.getLogger(__name__)
76 75

  
b/snf-astakos-app/astakos/im/views/target/local.py
39 39
from django.views.decorators.csrf import csrf_exempt
40 40
from django.views.decorators.http import require_http_methods
41 41
from django.core.urlresolvers import reverse
42
from django.contrib.auth.decorators import login_required
43 42

  
44 43
import django.contrib.auth.views as django_auth_views
45 44

  
......
51 50
import astakos.im.messages as astakos_messages
52 51
from astakos.im import auth_providers as auth
53 52
from astakos.im.views.decorators import cookie_fix, requires_anonymous, \
54
    signed_terms_required, requires_auth_provider
53
    signed_terms_required, requires_auth_provider, login_required
55 54

  
56 55
from ratelimit.decorators import ratelimit
57 56

  
b/snf-astakos-app/astakos/synnefo_settings.py
84 84
    'astakos.im.auth_backends.EmailBackend',
85 85
    'astakos.im.auth_backends.TokenBackend')
86 86

  
87
LOGIN_URL = '/ui/'
88

  
89 87
CUSTOM_USER_MODEL = 'astakos.im.AstakosUser'
90 88

  
91 89
#SOUTH_TESTS_MIGRATE = False

Also available in: Unified diff