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