Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / auth_backends.py @ 792fad7a

History | View | Annotate | Download (3.5 kB)

1 d5fae5f0 Sofia Papagiannaki
# Copyright 2011 GRNET S.A. All rights reserved.
2 d5fae5f0 Sofia Papagiannaki
#
3 d5fae5f0 Sofia Papagiannaki
# Redistribution and use in source and binary forms, with or
4 d5fae5f0 Sofia Papagiannaki
# without modification, are permitted provided that the following
5 d5fae5f0 Sofia Papagiannaki
# conditions are met:
6 d5fae5f0 Sofia Papagiannaki
#
7 d5fae5f0 Sofia Papagiannaki
#   1. Redistributions of source code must retain the above
8 d5fae5f0 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
9 d5fae5f0 Sofia Papagiannaki
#      disclaimer.
10 d5fae5f0 Sofia Papagiannaki
#
11 d5fae5f0 Sofia Papagiannaki
#   2. Redistributions in binary form must reproduce the above
12 d5fae5f0 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
13 d5fae5f0 Sofia Papagiannaki
#      disclaimer in the documentation and/or other materials
14 d5fae5f0 Sofia Papagiannaki
#      provided with the distribution.
15 d5fae5f0 Sofia Papagiannaki
#
16 d5fae5f0 Sofia Papagiannaki
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 d5fae5f0 Sofia Papagiannaki
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 d5fae5f0 Sofia Papagiannaki
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 d5fae5f0 Sofia Papagiannaki
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 d5fae5f0 Sofia Papagiannaki
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 d5fae5f0 Sofia Papagiannaki
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 d5fae5f0 Sofia Papagiannaki
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 d5fae5f0 Sofia Papagiannaki
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 d5fae5f0 Sofia Papagiannaki
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 d5fae5f0 Sofia Papagiannaki
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 d5fae5f0 Sofia Papagiannaki
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 d5fae5f0 Sofia Papagiannaki
# POSSIBILITY OF SUCH DAMAGE.
28 d5fae5f0 Sofia Papagiannaki
#
29 d5fae5f0 Sofia Papagiannaki
# The views and conclusions contained in the software and
30 d5fae5f0 Sofia Papagiannaki
# documentation are those of the authors and should not be
31 d5fae5f0 Sofia Papagiannaki
# interpreted as representing official policies, either expressed
32 d5fae5f0 Sofia Papagiannaki
# or implied, of GRNET S.A.
33 d5fae5f0 Sofia Papagiannaki
34 0905ccd2 Sofia Papagiannaki
from django.contrib.auth.backends import ModelBackend
35 0905ccd2 Sofia Papagiannaki
36 0905ccd2 Sofia Papagiannaki
from astakos.im.models import AstakosUser
37 63dcff93 Sofia Papagiannaki
from astakos.im.settings import LOGGING_LEVEL
38 63dcff93 Sofia Papagiannaki
39 63dcff93 Sofia Papagiannaki
import logging
40 63dcff93 Sofia Papagiannaki
41 63dcff93 Sofia Papagiannaki
logger = logging.getLogger(__name__)
42 0905ccd2 Sofia Papagiannaki
43 5ce3ce4f Sofia Papagiannaki
44 5ed6816e Sofia Papagiannaki
class TokenBackend(ModelBackend):
45 794852f2 Sofia Papagiannaki
    """
46 5ed6816e Sofia Papagiannaki
    AuthenticationBackend used to authenticate using token instead
47 794852f2 Sofia Papagiannaki
    """
48 5ed6816e Sofia Papagiannaki
    def authenticate(self, email=None, auth_token=None):
49 0905ccd2 Sofia Papagiannaki
        try:
50 789a5951 Sofia Papagiannaki
            user = AstakosUser.objects.get(email__iexact=email, is_active=True)
51 5ed6816e Sofia Papagiannaki
            if user.auth_token == auth_token:
52 0905ccd2 Sofia Papagiannaki
                return user
53 0905ccd2 Sofia Papagiannaki
        except AstakosUser.DoesNotExist:
54 0905ccd2 Sofia Papagiannaki
            return None
55 63dcff93 Sofia Papagiannaki
        else:
56 63dcff93 Sofia Papagiannaki
            msg = 'Invalid token during authentication for %s' % email
57 63dcff93 Sofia Papagiannaki
            logger._log(LOGGING_LEVEL, msg, [])
58 0905ccd2 Sofia Papagiannaki
59 0905ccd2 Sofia Papagiannaki
    def get_user(self, user_id):
60 0905ccd2 Sofia Papagiannaki
        try:
61 0905ccd2 Sofia Papagiannaki
            return AstakosUser.objects.get(pk=user_id)
62 0905ccd2 Sofia Papagiannaki
        except AstakosUser.DoesNotExist:
63 0905ccd2 Sofia Papagiannaki
            return None
64 890b0eaf Sofia Papagiannaki
65 5ce3ce4f Sofia Papagiannaki
66 5ed6816e Sofia Papagiannaki
class EmailBackend(ModelBackend):
67 794852f2 Sofia Papagiannaki
    """
68 5ed6816e Sofia Papagiannaki
    If the ``username`` parameter is actually an email uses email to authenticate
69 5ed6816e Sofia Papagiannaki
    the user else tries the username.
70 5ce3ce4f Sofia Papagiannaki

71 5ed6816e Sofia Papagiannaki
    Used from ``astakos.im.forms.LoginForm`` to authenticate.
72 794852f2 Sofia Papagiannaki
    """
73 5ed6816e Sofia Papagiannaki
    def authenticate(self, username=None, password=None):
74 792fad7a Sofia Papagiannaki
        # First check whether a user having this email exists
75 792fad7a Sofia Papagiannaki
        users = AstakosUser.objects.filter(email__iexact=username)
76 792fad7a Sofia Papagiannaki
        for user in users:
77 792fad7a Sofia Papagiannaki
            if  user.check_password(password):
78 792fad7a Sofia Papagiannaki
                return user
79 792fad7a Sofia Papagiannaki
        
80 792fad7a Sofia Papagiannaki
        # Since no user has been found by email try with the username
81 792fad7a Sofia Papagiannaki
        try:
82 792fad7a Sofia Papagiannaki
            user = AstakosUser.objects.get(username=username)
83 792fad7a Sofia Papagiannaki
        except AstakosUser.DoesNotExist:
84 792fad7a Sofia Papagiannaki
            return None
85 792fad7a Sofia Papagiannaki
        
86 5ed6816e Sofia Papagiannaki
        if user.check_password(password):
87 5ed6816e Sofia Papagiannaki
            return user
88 63dcff93 Sofia Papagiannaki
        else:
89 63dcff93 Sofia Papagiannaki
            msg = 'Invalid password during authentication for %s' % username
90 63dcff93 Sofia Papagiannaki
            logger._log(LOGGING_LEVEL, msg, [])
91 c0b26605 Sofia Papagiannaki
92 5ce3ce4f Sofia Papagiannaki
93 890b0eaf Sofia Papagiannaki
    def get_user(self, user_id):
94 890b0eaf Sofia Papagiannaki
        try:
95 890b0eaf Sofia Papagiannaki
            return AstakosUser.objects.get(pk=user_id)
96 890b0eaf Sofia Papagiannaki
        except AstakosUser.DoesNotExist:
97 5ce3ce4f Sofia Papagiannaki
            return None