Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / target / local.py @ 304acb60

History | View | Annotate | Download (3.3 kB)

1 aba1e498 Antony Chazapis
# Copyright 2011-2012 GRNET S.A. All rights reserved.
2 64cd4730 Antony Chazapis
#
3 64cd4730 Antony Chazapis
# Redistribution and use in source and binary forms, with or
4 64cd4730 Antony Chazapis
# without modification, are permitted provided that the following
5 64cd4730 Antony Chazapis
# conditions are met:
6 64cd4730 Antony Chazapis
#
7 64cd4730 Antony Chazapis
#   1. Redistributions of source code must retain the above
8 64cd4730 Antony Chazapis
#      copyright notice, this list of conditions and the following
9 64cd4730 Antony Chazapis
#      disclaimer.
10 64cd4730 Antony Chazapis
#
11 64cd4730 Antony Chazapis
#   2. Redistributions in binary form must reproduce the above
12 64cd4730 Antony Chazapis
#      copyright notice, this list of conditions and the following
13 64cd4730 Antony Chazapis
#      disclaimer in the documentation and/or other materials
14 64cd4730 Antony Chazapis
#      provided with the distribution.
15 64cd4730 Antony Chazapis
#
16 64cd4730 Antony Chazapis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 64cd4730 Antony Chazapis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 64cd4730 Antony Chazapis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 64cd4730 Antony Chazapis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 64cd4730 Antony Chazapis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 64cd4730 Antony Chazapis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 64cd4730 Antony Chazapis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 64cd4730 Antony Chazapis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 64cd4730 Antony Chazapis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 64cd4730 Antony Chazapis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 64cd4730 Antony Chazapis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 64cd4730 Antony Chazapis
# POSSIBILITY OF SUCH DAMAGE.
28 64cd4730 Antony Chazapis
#
29 64cd4730 Antony Chazapis
# The views and conclusions contained in the software and
30 64cd4730 Antony Chazapis
# documentation are those of the authors and should not be
31 64cd4730 Antony Chazapis
# interpreted as representing official policies, either expressed
32 64cd4730 Antony Chazapis
# or implied, of GRNET S.A.
33 64cd4730 Antony Chazapis
34 63ecdd20 Sofia Papagiannaki
from django.http import HttpResponseBadRequest
35 0905ccd2 Sofia Papagiannaki
from django.shortcuts import render_to_response
36 0905ccd2 Sofia Papagiannaki
from django.template import RequestContext
37 0905ccd2 Sofia Papagiannaki
from django.contrib.auth import authenticate
38 890b0eaf Sofia Papagiannaki
from django.contrib import messages
39 0905ccd2 Sofia Papagiannaki
from django.utils.translation import ugettext as _
40 12550ed2 Sofia Papagiannaki
from django.views.decorators.csrf import csrf_exempt
41 64cd4730 Antony Chazapis
42 c9e0b7e8 Sofia Papagiannaki
from astakos.im.util import prepare_response, get_query
43 63ecdd20 Sofia Papagiannaki
from astakos.im.views import requires_anonymous
44 0905ccd2 Sofia Papagiannaki
from astakos.im.models import AstakosUser
45 5ed6816e Sofia Papagiannaki
from astakos.im.forms import LoginForm
46 672d445a Sofia Papagiannaki
from astakos.im.settings import RATELIMIT_RETRIES_ALLOWED
47 672d445a Sofia Papagiannaki
48 672d445a Sofia Papagiannaki
from ratelimit.decorators import ratelimit
49 672d445a Sofia Papagiannaki
50 672d445a Sofia Papagiannaki
retries = RATELIMIT_RETRIES_ALLOWED-1
51 672d445a Sofia Papagiannaki
rate = str(retries)+'/m'
52 64cd4730 Antony Chazapis
53 12550ed2 Sofia Papagiannaki
@csrf_exempt
54 15efc749 Sofia Papagiannaki
@requires_anonymous
55 672d445a Sofia Papagiannaki
@ratelimit(field='username', method='POST', rate=rate)
56 1e685275 Sofia Papagiannaki
def login(request, on_failure='im/login.html'):
57 0905ccd2 Sofia Papagiannaki
    """
58 b90b602c Sofia Papagiannaki
    on_failure: the template name to render on login failure
59 0905ccd2 Sofia Papagiannaki
    """
60 672d445a Sofia Papagiannaki
    was_limited = getattr(request, 'limited', False)
61 672d445a Sofia Papagiannaki
    form = LoginForm(data=request.POST, was_limited=was_limited, request=request)
62 c9e0b7e8 Sofia Papagiannaki
    next = get_query(request).get('next', '')
63 0905ccd2 Sofia Papagiannaki
    if not form.is_valid():
64 0905ccd2 Sofia Papagiannaki
        return render_to_response(on_failure,
65 8f5a3a06 Sofia Papagiannaki
                                  {'login_form':form,
66 2234662f Sofia Papagiannaki
                                   'next':next},
67 0905ccd2 Sofia Papagiannaki
                                  context_instance=RequestContext(request))
68 890b0eaf Sofia Papagiannaki
    # get the user from the cash
69 890b0eaf Sofia Papagiannaki
    user = form.user_cache
70 64cd4730 Antony Chazapis
    
71 890b0eaf Sofia Papagiannaki
    message = None
72 0905ccd2 Sofia Papagiannaki
    if not user:
73 0905ccd2 Sofia Papagiannaki
        message = _('Cannot authenticate account')
74 0905ccd2 Sofia Papagiannaki
    elif not user.is_active:
75 0905ccd2 Sofia Papagiannaki
        message = _('Inactive account')
76 890b0eaf Sofia Papagiannaki
    if message:
77 24406ae3 Sofia Papagiannaki
        messages.error(request, message)
78 0905ccd2 Sofia Papagiannaki
        return render_to_response(on_failure,
79 890b0eaf Sofia Papagiannaki
                                  {'form':form},
80 0905ccd2 Sofia Papagiannaki
                                  context_instance=RequestContext(request))
81 64cd4730 Antony Chazapis
    
82 64cd4730 Antony Chazapis
    return prepare_response(request, user, next)