Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / auth_backends.py @ f6ff3033

History | View | Annotate | Download (3.3 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 8998f09a Sofia Papagiannaki
from astakos.im import settings
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 e5966bd9 Kostas Papadimitriou
            user = AstakosUser.objects.get_by_identifier(email, is_active=True,
51 8fb8d0cf Giorgos Korfiatis
                                                         auth_token=auth_token)
52 e5966bd9 Kostas Papadimitriou
            return user
53 0905ccd2 Sofia Papagiannaki
        except AstakosUser.DoesNotExist:
54 0905ccd2 Sofia Papagiannaki
            return None
55 63dcff93 Sofia Papagiannaki
        else:
56 d59f5608 Sofia Papagiannaki
            msg = 'Invalid token during authentication for %s'
57 d59f5608 Sofia Papagiannaki
            logger.log(settings.LOGGING_LEVEL, msg, email)
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 8fb8d0cf Giorgos Korfiatis
    If the ``username`` parameter is actually an email uses email to
69 8fb8d0cf Giorgos Korfiatis
    authenticate 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 e5966bd9 Kostas Papadimitriou
        try:
76 b93a38c5 Kostas Papadimitriou
            user = AstakosUser.objects.get_by_identifier(username)
77 792fad7a Sofia Papagiannaki
        except AstakosUser.DoesNotExist:
78 792fad7a Sofia Papagiannaki
            return None
79 e5966bd9 Kostas Papadimitriou
80 5ed6816e Sofia Papagiannaki
        if user.check_password(password):
81 5ed6816e Sofia Papagiannaki
            return user
82 63dcff93 Sofia Papagiannaki
        else:
83 d59f5608 Sofia Papagiannaki
            msg = 'Invalid password during authentication for %s'
84 d59f5608 Sofia Papagiannaki
            logger.log(settings.LOGGING_LEVEL, msg, username)
85 c0b26605 Sofia Papagiannaki
86 890b0eaf Sofia Papagiannaki
    def get_user(self, user_id):
87 890b0eaf Sofia Papagiannaki
        try:
88 890b0eaf Sofia Papagiannaki
            return AstakosUser.objects.get(pk=user_id)
89 890b0eaf Sofia Papagiannaki
        except AstakosUser.DoesNotExist:
90 5ce3ce4f Sofia Papagiannaki
            return None