Revision bf0c6de5 snf-astakos-app/astakos/im/models.py
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
49 | 49 |
from django.template.loader import render_to_string |
50 | 50 |
from django.core.mail import send_mail |
51 | 51 |
from django.db import transaction |
52 |
from django.db.models.signals import post_save, post_syncdb |
|
52 |
from django.db.models.signals import post_save, pre_save, post_syncdb
|
|
53 | 53 |
from django.db.models import Q |
54 | 54 |
from django.conf import settings |
55 |
from django.utils.importlib import import_module |
|
55 | 56 |
|
56 |
from astakos.im.settings import DEFAULT_USER_LEVEL, INVITATIONS_PER_LEVEL, \ |
|
57 |
AUTH_TOKEN_DURATION, BILLING_FIELDS, QUEUE_CONNECTION, SITENAME, \ |
|
57 |
from astakos.im.settings import ( |
|
58 |
DEFAULT_USER_LEVEL, INVITATIONS_PER_LEVEL, |
|
59 |
AUTH_TOKEN_DURATION, BILLING_FIELDS, QUEUE_CONNECTION, SITENAME, |
|
58 | 60 |
EMAILCHANGE_ACTIVATION_DAYS, LOGGING_LEVEL |
61 |
) |
|
59 | 62 |
|
60 | 63 |
QUEUE_CLIENT_ID = 3 # Astakos. |
61 | 64 |
|
... | ... | |
165 | 168 |
except Group.DoesNotExist, e: |
166 | 169 |
logger.exception(e) |
167 | 170 |
|
168 |
def renew_token(self): |
|
171 |
def renew_token(self, flush_sessions=False, current_key=None):
|
|
169 | 172 |
md5 = hashlib.md5() |
170 | 173 |
md5.update(settings.SECRET_KEY) |
171 | 174 |
md5.update(self.username) |
172 | 175 |
md5.update(self.realname.encode('ascii', 'ignore')) |
173 | 176 |
md5.update(asctime()) |
174 |
|
|
177 |
|
|
175 | 178 |
self.auth_token = b64encode(md5.digest()) |
176 | 179 |
self.auth_token_created = datetime.now() |
177 | 180 |
self.auth_token_expires = self.auth_token_created + \ |
178 | 181 |
timedelta(hours=AUTH_TOKEN_DURATION) |
182 |
if flush_sessions: |
|
183 |
self.flush_sessions(current_key) |
|
179 | 184 |
msg = 'Token renewed for %s' % self.email |
180 | 185 |
logger._log(LOGGING_LEVEL, msg, []) |
181 | 186 |
|
187 |
def flush_sessions(self, current_key=None): |
|
188 |
q = self.sessions |
|
189 |
if current_key: |
|
190 |
q = q.exclude(session_key=current_key) |
|
191 |
|
|
192 |
keys = q.values_list('session_key', flat=True) |
|
193 |
if keys: |
|
194 |
msg = 'Flushing sessions: %s' % ','.join(keys) |
|
195 |
logger._log(LOGGING_LEVEL, msg, []) |
|
196 |
engine = import_module(settings.SESSION_ENGINE) |
|
197 |
for k in keys: |
|
198 |
s = engine.SessionStore(k) |
|
199 |
s.flush() |
|
200 |
# q.all().delete() |
|
201 |
|
|
182 | 202 |
def __unicode__(self): |
183 | 203 |
return self.username |
184 | 204 |
|
... | ... | |
355 | 375 |
auth_token_created = models.DateTimeField('Token creation date', null=True) |
356 | 376 |
auth_token_expires = models.DateTimeField('Token expiration date', null=True) |
357 | 377 |
|
358 |
def save(self, **kwargs): |
|
359 |
if not self.id: |
|
360 |
self.renew_token() |
|
361 |
self.full_clean() |
|
362 |
super(Service, self).save(**kwargs) |
|
363 |
|
|
364 | 378 |
def renew_token(self): |
365 | 379 |
md5 = hashlib.md5() |
366 | 380 |
md5.update(settings.SECRET_KEY) |
... | ... | |
372 | 386 |
self.auth_token_created = datetime.now() |
373 | 387 |
self.auth_token_expires = self.auth_token_created + \ |
374 | 388 |
timedelta(hours=AUTH_TOKEN_DURATION) |
389 |
msg = 'Token renewed for %s' % self.name |
|
390 |
logger._log(LOGGING_LEVEL, msg, []) |
|
375 | 391 |
|
376 | 392 |
class AdditionalMail(models.Model): |
377 | 393 |
""" |
... | ... | |
419 | 435 |
self.username = username |
420 | 436 |
super(PendingThirdPartyUser, self).save(**kwargs) |
421 | 437 |
|
438 |
class SessionCatalog(models.Model): |
|
439 |
session_key = models.CharField(_('session key'), max_length=40) |
|
440 |
user = models.ForeignKey(AstakosUser, related_name='sessions', null=True) |
|
441 |
|
|
422 | 442 |
def create_astakos_user(u): |
423 | 443 |
try: |
424 | 444 |
AstakosUser.objects.get(user_ptr=u.pk) |
425 | 445 |
except AstakosUser.DoesNotExist: |
426 | 446 |
extended_user = AstakosUser(user_ptr_id=u.pk) |
427 | 447 |
extended_user.__dict__.update(u.__dict__) |
428 |
extended_user.renew_token() |
|
429 | 448 |
extended_user.save() |
430 | 449 |
except: |
431 | 450 |
pass |
... | ... | |
443 | 462 |
if instance.is_superuser: |
444 | 463 |
create_astakos_user(instance) |
445 | 464 |
|
446 |
post_save.connect(superuser_post_save, sender=User) |
|
465 |
def astakosuser_post_save(sender, instance, **kwargs): |
|
466 |
pass |
|
467 |
|
|
468 |
post_save.connect(superuser_post_save, sender=User) |
|
469 |
|
|
470 |
def renew_token(sender, instance, **kwargs): |
|
471 |
if not instance.id: |
|
472 |
instance.renew_token() |
|
473 |
|
|
474 |
pre_save.connect(renew_token, sender=AstakosUser) |
|
475 |
pre_save.connect(renew_token, sender=Service) |
Also available in: Unified diff