Revision 6d4190ba snf-astakos-app/astakos/im/models.py
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
38 | 38 |
import math |
39 | 39 |
import copy |
40 | 40 |
|
41 |
import time |
|
42 | 41 |
from datetime import datetime, timedelta |
43 |
from base64 import b64encode
|
|
42 |
import base64
|
|
44 | 43 |
from urllib import quote |
45 | 44 |
from random import randint |
45 |
import os |
|
46 | 46 |
|
47 | 47 |
from django.db import models, IntegrityError, transaction |
48 | 48 |
from django.contrib.auth.models import User, UserManager, Group, Permission |
... | ... | |
93 | 93 |
inf = float('inf') |
94 | 94 |
|
95 | 95 |
|
96 |
def generate_token(*args): |
|
97 |
md5 = hashlib.md5() |
|
98 |
md5.update(settings.SECRET_KEY) |
|
99 |
for arg in args: |
|
100 |
md5.update(arg) |
|
101 |
md5.update("%.15f" % time.time()) |
|
102 |
return b64encode(md5.digest()) |
|
96 |
def generate_token(): |
|
97 |
s = os.urandom(32) |
|
98 |
return base64.urlsafe_b64encode(s) |
|
103 | 99 |
|
104 | 100 |
|
105 | 101 |
class Component(models.Model): |
... | ... | |
107 | 103 |
db_index=True) |
108 | 104 |
url = models.CharField(_('Component url'), max_length=1024, null=True, |
109 | 105 |
help_text=_("URL the component is accessible from")) |
110 |
auth_token = models.CharField(_('Authentication Token'), max_length=32,
|
|
106 |
auth_token = models.CharField(_('Authentication Token'), max_length=64,
|
|
111 | 107 |
null=True, blank=True, unique=True) |
112 | 108 |
auth_token_created = models.DateTimeField(_('Token creation date'), |
113 | 109 |
null=True) |
... | ... | |
116 | 112 |
|
117 | 113 |
def renew_token(self, expiration_date=None): |
118 | 114 |
for i in range(10): |
119 |
data = (self.name.encode('ascii', 'ignore'),) |
|
120 |
if self.url is not None: |
|
121 |
data += (self.url.encode('ascii', 'ignore'),) |
|
122 |
new_token = generate_token(*data) |
|
115 |
new_token = generate_token() |
|
123 | 116 |
count = Component.objects.filter(auth_token=new_token).count() |
124 | 117 |
if count == 0: |
125 | 118 |
break |
... | ... | |
359 | 352 |
_('Invitations left'), default=astakos_settings.INVITATIONS_PER_LEVEL.get(user_level, 0)) |
360 | 353 |
|
361 | 354 |
auth_token = models.CharField(_('Authentication Token'), |
362 |
max_length=32,
|
|
355 |
max_length=64,
|
|
363 | 356 |
unique=True, |
364 | 357 |
null=True, |
365 | 358 |
blank=True, |
... | ... | |
540 | 533 |
|
541 | 534 |
def renew_token(self, flush_sessions=False, current_key=None): |
542 | 535 |
for i in range(10): |
543 |
data = (self.username, self.realname.encode('ascii', 'ignore')) |
|
544 |
new_token = generate_token(*data) |
|
536 |
new_token = generate_token() |
|
545 | 537 |
count = AstakosUser.objects.filter(auth_token=new_token).count() |
546 | 538 |
if count == 0: |
547 | 539 |
break |
Also available in: Unified diff