from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from timezones.fields import TimeZoneField
from operator import itemgetter, attrgetter
+from django.core.mail import EmailMultiAlternatives
+from core.middleware import get_request
# Create your models here.
class UserManager(BaseUserManager):
- def get_query_set(self):
- return super(UserManager, self).get_query_set().filter(deleted=False)
-
def create_user(self, email, firstname, lastname, password=None):
"""
Creates and saves a User with the given email, date of
user.save(using=self._db)
return user
+class DeletedUserManager(UserManager):
+ def get_query_set(self):
+ return super(UserManager, self).get_query_set().filter(deleted=True)
class User(AbstractBaseUser):
dashboards = models.ManyToManyField('DashboardView', through='UserDashboardView', blank=True)
objects = UserManager()
+ deleted_objects = DeletedUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['firstname', 'lastname']
# The user is identified by their email address
return self.email
+ def delete(self, *args, **kwds):
+ # so we have something to give the observer
+ purge = kwds.get('purge',False)
+ try:
+ purge = purge or observer_disabled
+ except NameError:
+ pass
+
+ if (purge):
+ super(User, self).delete(*args, **kwds)
+ else:
+ self.deleted = True
+ self.enacted=None
+ self.save(update_fields=['enacted','deleted'])
+
@property
def keyname(self):
return self.email[:self.email.find('@')]
def save(self, *args, **kwds):
if not self.id:
- self.set_password(self.password)
+ self.set_password(self.password)
+ if self.is_active:
+ if self.password=="!":\r
+ self.send_temporary_password()\r
+\r
self.username = self.email
- super(User, self).save(*args, **kwds)
+ super(User, self).save(*args, **kwds)
+
+ def send_temporary_password(self):
+ password = User.objects.make_random_password()
+ self.set_password(password)\r
+ subject, from_email, to = 'OpenCloud Account Credentials', 'support@opencloud.us', str(self.email)\r
+ text_content = 'This is an important message.'\r
+ userUrl=get_request().META['HTTP_ORIGIN']\r
+ html_content = """<p>Your account has been created on OpenCloud. Please log in <a href="""+userUrl+""">here</a> to activate your account<br><br>Username: """+self.email+"""<br>Temporary Password: """+password+"""<br>Please change your password once you successully login into the site.</p>"""\r
+ msg = EmailMultiAlternatives(subject,text_content, from_email, [to])\r
+ msg.attach_alternative(html_content, "text/html")\r
+ msg.send()
@staticmethod
def select_by_user(user):
sites = [sp.site for sp in site_privs if sp.role.role == 'pi']
# get site privs of users at these sites
site_privs = SitePrivilege.objects.filter(site__in=sites)
- user_ids = [sp.user.id for sp in site_privs] + [user.id]
+ user_ids = [sp.user.id for sp in site_privs] + [user.id]
qs = User.objects.filter(Q(site__in=sites) | Q(id__in=user_ids))
- return qs
+ return qs
class UserDashboardView(PlCoreBase):
user = models.ForeignKey(User, related_name="dashboardViews")