Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / auth.py @ 9a94c0f1

History | View | Annotate | Download (3.3 kB)

1 1808f7bc Giorgos Korfiatis
# Copyright 2013 GRNET S.A. All rights reserved.
2 1808f7bc Giorgos Korfiatis
#
3 1808f7bc Giorgos Korfiatis
# Redistribution and use in source and binary forms, with or
4 1808f7bc Giorgos Korfiatis
# without modification, are permitted provided that the following
5 1808f7bc Giorgos Korfiatis
# conditions are met:
6 1808f7bc Giorgos Korfiatis
#
7 1808f7bc Giorgos Korfiatis
#   1. Redistributions of source code must retain the above
8 1808f7bc Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
9 1808f7bc Giorgos Korfiatis
#      disclaimer.
10 1808f7bc Giorgos Korfiatis
#
11 1808f7bc Giorgos Korfiatis
#   2. Redistributions in binary form must reproduce the above
12 1808f7bc Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
13 1808f7bc Giorgos Korfiatis
#      disclaimer in the documentation and/or other materials
14 1808f7bc Giorgos Korfiatis
#      provided with the distribution.
15 1808f7bc Giorgos Korfiatis
#
16 1808f7bc Giorgos Korfiatis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 1808f7bc Giorgos Korfiatis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 1808f7bc Giorgos Korfiatis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 1808f7bc Giorgos Korfiatis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 1808f7bc Giorgos Korfiatis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 1808f7bc Giorgos Korfiatis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 1808f7bc Giorgos Korfiatis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 1808f7bc Giorgos Korfiatis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 1808f7bc Giorgos Korfiatis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 1808f7bc Giorgos Korfiatis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 1808f7bc Giorgos Korfiatis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 1808f7bc Giorgos Korfiatis
# POSSIBILITY OF SUCH DAMAGE.
28 1808f7bc Giorgos Korfiatis
#
29 1808f7bc Giorgos Korfiatis
# The views and conclusions contained in the software and
30 1808f7bc Giorgos Korfiatis
# documentation are those of the authors and should not be
31 1808f7bc Giorgos Korfiatis
# interpreted as representing official policies, either expressed
32 1808f7bc Giorgos Korfiatis
# or implied, of GRNET S.A.
33 1808f7bc Giorgos Korfiatis
34 1808f7bc Giorgos Korfiatis
import datetime
35 1808f7bc Giorgos Korfiatis
from astakos.im import models
36 2c960473 Giorgos Korfiatis
from astakos.im import functions
37 1808f7bc Giorgos Korfiatis
38 1808f7bc Giorgos Korfiatis
39 1808f7bc Giorgos Korfiatis
def _finalize_astakosuser_object(user, has_signed_terms=False):
40 1808f7bc Giorgos Korfiatis
    user.fix_username()
41 1808f7bc Giorgos Korfiatis
    if has_signed_terms:
42 1808f7bc Giorgos Korfiatis
        user.has_signed_terms = True
43 1808f7bc Giorgos Korfiatis
        user.date_signed_terms = datetime.datetime.now()
44 1808f7bc Giorgos Korfiatis
45 1808f7bc Giorgos Korfiatis
    user.renew_verification_code()
46 2c960473 Giorgos Korfiatis
    project = functions.make_base_project(user.username)
47 2c960473 Giorgos Korfiatis
    user.base_project = project
48 2c960473 Giorgos Korfiatis
    user.uuid = project.uuid
49 1808f7bc Giorgos Korfiatis
    user.renew_token()
50 1808f7bc Giorgos Korfiatis
    user.save()
51 1808f7bc Giorgos Korfiatis
52 1808f7bc Giorgos Korfiatis
53 1808f7bc Giorgos Korfiatis
def set_local_auth(user):
54 1808f7bc Giorgos Korfiatis
    user.add_auth_provider('local', auth_backend='astakos')
55 1808f7bc Giorgos Korfiatis
56 1808f7bc Giorgos Korfiatis
57 1808f7bc Giorgos Korfiatis
def make_user(email, first_name="", last_name="", password=None,
58 1808f7bc Giorgos Korfiatis
              has_signed_terms=False):
59 1808f7bc Giorgos Korfiatis
    # delete previously unverified accounts
60 1808f7bc Giorgos Korfiatis
    models.AstakosUser.objects.unverified_namesakes(email).delete()
61 1808f7bc Giorgos Korfiatis
62 1808f7bc Giorgos Korfiatis
    user = models.AstakosUser(
63 1808f7bc Giorgos Korfiatis
        email=email, first_name=first_name, last_name=last_name,
64 1808f7bc Giorgos Korfiatis
        is_active=False)
65 1808f7bc Giorgos Korfiatis
    if password is None:
66 1808f7bc Giorgos Korfiatis
        user.set_unusable_password()
67 1808f7bc Giorgos Korfiatis
    else:
68 1808f7bc Giorgos Korfiatis
        user.set_password(password)
69 1808f7bc Giorgos Korfiatis
70 1808f7bc Giorgos Korfiatis
    user.date_joined = datetime.datetime.now()
71 1808f7bc Giorgos Korfiatis
    _finalize_astakosuser_object(user, has_signed_terms)
72 1808f7bc Giorgos Korfiatis
    return user
73 1808f7bc Giorgos Korfiatis
74 1808f7bc Giorgos Korfiatis
75 1808f7bc Giorgos Korfiatis
def make_local_user(email, **kwargs):
76 1808f7bc Giorgos Korfiatis
    user = make_user(email, **kwargs)
77 1808f7bc Giorgos Korfiatis
    set_local_auth(user)
78 1808f7bc Giorgos Korfiatis
    return user
79 1808f7bc Giorgos Korfiatis
80 1808f7bc Giorgos Korfiatis
81 1808f7bc Giorgos Korfiatis
def extend_superuser(user):
82 1808f7bc Giorgos Korfiatis
    extended_user = models.AstakosUser(user_ptr_id=user.pk)
83 1808f7bc Giorgos Korfiatis
    extended_user.__dict__.update(user.__dict__)
84 1808f7bc Giorgos Korfiatis
    _finalize_astakosuser_object(extended_user, has_signed_terms=True)
85 1808f7bc Giorgos Korfiatis
    set_local_auth(extended_user)
86 1808f7bc Giorgos Korfiatis
    return extended_user
87 1808f7bc Giorgos Korfiatis
88 1808f7bc Giorgos Korfiatis
89 1808f7bc Giorgos Korfiatis
def fix_superusers():
90 1808f7bc Giorgos Korfiatis
    admins = models.User.objects.filter(is_superuser=True)
91 1808f7bc Giorgos Korfiatis
    fixed = []
92 1808f7bc Giorgos Korfiatis
    for u in admins:
93 1808f7bc Giorgos Korfiatis
        try:
94 1808f7bc Giorgos Korfiatis
            models.AstakosUser.objects.get(user_ptr=u.pk)
95 1808f7bc Giorgos Korfiatis
        except models.AstakosUser.DoesNotExist:
96 1808f7bc Giorgos Korfiatis
            fixed.append(extend_superuser(u))
97 1808f7bc Giorgos Korfiatis
    return fixed