Revision 18ffbee1 snf-astakos-app/astakos/im/models.py
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
33 | 33 |
|
34 | 34 |
import hashlib |
35 | 35 |
import uuid |
36 |
import logging |
|
36 | 37 |
|
37 | 38 |
from time import asctime |
38 | 39 |
from datetime import datetime, timedelta |
... | ... | |
41 | 42 |
from random import randint |
42 | 43 |
|
43 | 44 |
from django.db import models |
44 |
from django.contrib.auth.models import User, UserManager |
|
45 |
from django.contrib.auth.models import User, UserManager, Group
|
|
45 | 46 |
|
46 | 47 |
from astakos.im.settings import DEFAULT_USER_LEVEL, INVITATIONS_PER_LEVEL, AUTH_TOKEN_DURATION, BILLING_FIELDS, QUEUE_CONNECTION |
47 | 48 |
from astakos.im.queue.userevent import UserEvent |
... | ... | |
49 | 50 |
|
50 | 51 |
QUEUE_CLIENT_ID = 3 # Astakos. |
51 | 52 |
|
53 |
logger = logging.getLogger(__name__) |
|
54 |
|
|
52 | 55 |
class AstakosUser(User): |
53 | 56 |
""" |
54 | 57 |
Extends ``django.contrib.auth.models.User`` by defining additional fields. |
... | ... | |
81 | 84 |
has_signed_terms = models.BooleanField('Agree with the terms?', default=False) |
82 | 85 |
date_signed_terms = models.DateTimeField('Signed terms date', null=True) |
83 | 86 |
|
87 |
__has_signed_terms = False |
|
88 |
__groupnames = [] |
|
89 |
|
|
90 |
def __init__(self, *args, **kwargs): |
|
91 |
super(AstakosUser, self).__init__(*args, **kwargs) |
|
92 |
self.__has_signed_terms = self.has_signed_terms |
|
93 |
if self.id: |
|
94 |
self.__groupnames = [g.name for g in self.groups.all()] |
|
95 |
else: |
|
96 |
self.is_active = False |
|
97 |
|
|
84 | 98 |
@property |
85 | 99 |
def realname(self): |
86 | 100 |
return '%s %s' %(self.first_name, self.last_name) |
... | ... | |
106 | 120 |
if not self.id: |
107 | 121 |
self.date_joined = datetime.now() |
108 | 122 |
self.updated = datetime.now() |
123 |
|
|
124 |
# update date_signed_terms if necessary |
|
125 |
if self.__has_signed_terms != self.has_signed_terms: |
|
126 |
self.date_signed_terms = datetime.now() |
|
127 |
|
|
109 | 128 |
if not self.id: |
110 | 129 |
# set username |
111 | 130 |
while not self.username: |
... | ... | |
114 | 133 |
AstakosUser.objects.get(username = username) |
115 | 134 |
except AstakosUser.DoesNotExist, e: |
116 | 135 |
self.username = username |
117 |
self.is_active = False |
|
118 | 136 |
if not self.provider: |
119 | 137 |
self.provider = 'local' |
120 | 138 |
report_user_event(self) |
121 | 139 |
super(AstakosUser, self).save(**kwargs) |
140 |
|
|
141 |
# set group if does not exist |
|
142 |
groupname = 'shibboleth' if self.provider == 'shibboleth' else 'default' |
|
143 |
if groupname not in self.__groupnames: |
|
144 |
try: |
|
145 |
group = Group.objects.get(name = groupname) |
|
146 |
self.groups.add(group) |
|
147 |
except Group.DoesNotExist, e: |
|
148 |
logger.exception(e) |
|
122 | 149 |
|
123 | 150 |
def renew_token(self): |
124 | 151 |
md5 = hashlib.md5() |
... | ... | |
159 | 186 |
accepted = models.DateTimeField('Acceptance date', null=True, blank=True) |
160 | 187 |
consumed = models.DateTimeField('Consumption date', null=True, blank=True) |
161 | 188 |
|
162 |
def save(self, **kwargs): |
|
189 |
def __init__(self, *args, **kwargs): |
|
190 |
super(Invitation, self).__init__(*args, **kwargs) |
|
163 | 191 |
if not self.id: |
164 | 192 |
self.code = _generate_invitation_code() |
165 |
super(Invitation, self).save(**kwargs) |
|
166 | 193 |
|
167 | 194 |
def consume(self): |
168 | 195 |
self.is_consumed = True |
Also available in: Unified diff