-#
-# Copyright 2018 CNIT - Consorzio Nazionale Interuniversitario per le Telecomunicazioni
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-from __future__ import unicode_literals
-
-from django.contrib.auth.models import (
- AbstractBaseUser, BaseUserManager, PermissionsMixin)
-from django.utils import timezone
-from django.utils.translation import ugettext_lazy as _
-from django.contrib.sessions.base_session import AbstractBaseSession
-from django.db import models
-
-class CustomUserManager(BaseUserManager):
- """Custom manager for CustomUser."""
-
- def _create_user(self, username, password, is_staff, is_superuser, **extra_fields):
- """Create and save a CustomUser with the given username and password. """
- now = timezone.now()
-
- if not username:
- raise ValueError('The given username must be set')
-
- is_active = extra_fields.pop("is_active", True)
- user = self.model(username=username, is_staff=is_staff, is_active=is_active,
- is_superuser=is_superuser, last_login=now,
- date_joined=now, **extra_fields)
- user.set_password(password)
- user.save(using=self._db)
- return user
-
- """Create and save an CustomUser with the given username and password."""
- def create_superuser(self, username, password, **extra_fields):
- return self._create_user(username, password, True, True, is_admin=True,
- **extra_fields)
-
- """Create and save an FullOperator with the given email and password. """
- def create_full_operator(self, username, password=None, **extra_fields):
- return self._create_user(username, password, False, False, is_full_operator=True,
- **extra_fields)
-
- """Create and save an BasicUser with the given email and password. """
- def create_basic_user(self, username, password=None, **extra_fields):
- return self._create_user(username, password, False, False, is_basic_user=True,
- **extra_fields)
-
- """Create and save an GuestUser with the given email and password. """
- def create_guest_user(self, username, password="guest", **extra_fields):
- return self._create_user(username, password, False, False, is_guest_user=True,
- **extra_fields)
-
-
-class AbstractCustomUser(AbstractBaseUser, PermissionsMixin):
- """Abstract User with the same behaviour as Django's default User.
-
- AbstractCustomUser does not have username field. Uses email as the
- USERNAME_FIELD for authentication.
-
- Use this if you need to extend EmailUser.
-
- Inherits from both the AbstractBaseUser and PermissionMixin.
-
- The following attributes are inherited from the superclasses:
- * password
- * last_login
- * is_superuser
-
- """
- username = models.CharField(_('username'), max_length=255, unique=True, db_index=True)
-
- email = models.EmailField(_('email address'), max_length=255, unique=True)
-
- first_name = models.CharField(_('first name'), max_length=255, blank=True)
- last_name = models.CharField(_('last name'), max_length=255, blank=True)
- phone = models.CharField(_('phone'), max_length=100, blank=True)
- # user_groups = models.ManyToManyField(UserGroup, verbose_name=_('user groups'), blank=True)
-
- is_admin = models.BooleanField(_('admin status'), default=False)
- is_full_operator = models.BooleanField(_('full_operator status'), default=False)
- is_basic_user = models.BooleanField(_('basic_user status'), default=False)
- is_guest_user = models.BooleanField(_('guest_user status'), default=False)
-
- is_staff = models.BooleanField(
- _('staff status'), default=False, help_text=_(
- 'Designates whether the user can log into this admin site.'))
- is_active = models.BooleanField(_('active'), default=True, help_text=_(
- 'Designates whether this user should be treated as '
- 'active. Unselect this instead of deleting accounts.'))
-
- date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
-
- objects = CustomUserManager()
-
- USERNAME_FIELD = 'username'
- REQUIRED_FIELDS = ['email', 'first_name', 'last_name', 'phone', ]
-
- class Meta:
- verbose_name = _('custom user')
- verbose_name_plural = _('custom users')
- abstract = True
-
- def get_full_name(self):
- """Return the fullname."""
- return "%s %s" % (self.last_name, self.first_name)
-
- def get_short_name(self):
- """Return the firstname."""
- return self.first_name
-
-
-class CustomUser(AbstractCustomUser):
- """
- Concrete class of AbstractCustomUser.
-
- Use this if you don't need to extend CustomUser.
-
- """
-
- class Meta(AbstractCustomUser.Meta):
- swappable = 'AUTH_USER_MODEL'
-
- def count_admins(self):
- return CustomUser.objects.filter(is_admin=True).count()
-
- def count_employee(self):
- return CustomUser.objects.filter(is_full_operator=True).count()
-
- def count_basic_users(self):
- return CustomUser.objects.filter(is_basic_user=True).count()
-
- def count_inactives(self):
- return CustomUser.objects.filter(is_active=False).count()
-
- def is_guest(self):
- return self.is_guest_user
-
- def get_avatar(self):
- if self.is_admin:
- return "assets/img/employer.png"
- elif self.is_full_operator:
- return "assets/img/employer.png"
- elif self.is_basic_user:
- return "assets/img/employer.png"
- elif self.is_guest_user:
- return "assets/img/account_circle.png"
-
- def get_user_role(self):
- if self.is_admin:
- return 0, "Admin"
- elif self.is_full_operator:
- return 1, "Full operator"
- elif self.is_basic_user:
- return 2, "Basic user"
- elif self.is_guest_user:
- return 3, "Guest user"
-
- def get_user_role_name(self):
- if self.is_admin:
- return "Admin"
- elif self.is_full_operator:
- return "Full operator"
- elif self.is_basic_user:
- return "Basic user"
- elif self.is_guest_user:
- return "Guest user"
-
- def has_perm(self, perm, obj=None):
- if perm == 'deploymenthandler':
- if self.is_guest_user:
- return False
- else:
- return True
- else:
- super.has_perm(perm, obj)
-
-
-class CustomSession(AbstractBaseSession):
- account_id = models.IntegerField(null=True, db_index=True)
-
- @classmethod
- def get_session_store_class(cls):
- return SessionStore
-