~grupoesoc/cubicerp-addons/7.0

« back to all changes in this revision

Viewing changes to report_geraldo/lib/geraldo/site/newsite/site-geraldo/django/contrib/auth/__init__.py

  • Committer: Cubic ERP
  • Date: 2014-01-07 15:38:09 UTC
  • Revision ID: info@cubicerp.com-20140107153809-4jmif3zoi8rcveve
[ADD] cubicReport

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import datetime
 
2
from django.core.exceptions import ImproperlyConfigured
 
3
 
 
4
SESSION_KEY = '_auth_user_id'
 
5
BACKEND_SESSION_KEY = '_auth_user_backend'
 
6
REDIRECT_FIELD_NAME = 'next'
 
7
 
 
8
def load_backend(path):
 
9
    i = path.rfind('.')
 
10
    module, attr = path[:i], path[i+1:]
 
11
    try:
 
12
        mod = __import__(module, {}, {}, [attr])
 
13
    except ImportError, e:
 
14
        raise ImproperlyConfigured, 'Error importing authentication backend %s: "%s"' % (module, e)
 
15
    except ValueError, e:
 
16
        raise ImproperlyConfigured, 'Error importing authentication backends. Is AUTHENTICATION_BACKENDS a correctly defined list or tuple?'
 
17
    try:
 
18
        cls = getattr(mod, attr)
 
19
    except AttributeError:
 
20
        raise ImproperlyConfigured, 'Module "%s" does not define a "%s" authentication backend' % (module, attr)
 
21
    return cls()
 
22
 
 
23
def get_backends():
 
24
    from django.conf import settings
 
25
    backends = []
 
26
    for backend_path in settings.AUTHENTICATION_BACKENDS:
 
27
        backends.append(load_backend(backend_path))
 
28
    return backends
 
29
 
 
30
def authenticate(**credentials):
 
31
    """
 
32
    If the given credentials are valid, return a User object.
 
33
    """
 
34
    for backend in get_backends():
 
35
        try:
 
36
            user = backend.authenticate(**credentials)
 
37
        except TypeError:
 
38
            # This backend doesn't accept these credentials as arguments. Try the next one.
 
39
            continue
 
40
        if user is None:
 
41
            continue
 
42
        # Annotate the user object with the path of the backend.
 
43
        user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
 
44
        return user
 
45
 
 
46
def login(request, user):
 
47
    """
 
48
    Persist a user id and a backend in the request. This way a user doesn't
 
49
    have to reauthenticate on every request.
 
50
    """
 
51
    if user is None:
 
52
        user = request.user
 
53
    # TODO: It would be nice to support different login methods, like signed cookies.
 
54
    user.last_login = datetime.datetime.now()
 
55
    user.save()
 
56
 
 
57
    if SESSION_KEY in request.session:
 
58
        if request.session[SESSION_KEY] != user.id:
 
59
            # To avoid reusing another user's session, create a new, empty
 
60
            # session if the existing session corresponds to a different
 
61
            # authenticated user.
 
62
            request.session.flush()
 
63
    else:
 
64
        request.session.cycle_key()
 
65
    request.session[SESSION_KEY] = user.id
 
66
    request.session[BACKEND_SESSION_KEY] = user.backend
 
67
    if hasattr(request, 'user'):
 
68
        request.user = user
 
69
 
 
70
def logout(request):
 
71
    """
 
72
    Removes the authenticated user's ID from the request and flushes their
 
73
    session data.
 
74
    """
 
75
    request.session.flush()
 
76
    if hasattr(request, 'user'):
 
77
        from django.contrib.auth.models import AnonymousUser
 
78
        request.user = AnonymousUser()
 
79
 
 
80
def get_user(request):
 
81
    from django.contrib.auth.models import AnonymousUser
 
82
    try:
 
83
        user_id = request.session[SESSION_KEY]
 
84
        backend_path = request.session[BACKEND_SESSION_KEY]
 
85
        backend = load_backend(backend_path)
 
86
        user = backend.get_user(user_id) or AnonymousUser()
 
87
    except KeyError:
 
88
        user = AnonymousUser()
 
89
    return user