X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=authosm%2Fmodels.py;h=790e684ea71bd28eb7fa097fe3844b1b6a49fcee;hb=6e240e970b0f01790b20cff77f2a49d1f66834b6;hp=c48f7382ceba1e2cc600090444e3e04c23484ce8;hpb=099364f3465712ac0232f9535ee15b3b5f902fa9;p=osm%2FLW-UI.git diff --git a/authosm/models.py b/authosm/models.py index c48f738..790e684 100644 --- a/authosm/models.py +++ b/authosm/models.py @@ -18,8 +18,10 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import User, AbstractBaseUser, BaseUserManager, PermissionsMixin from django.utils import timezone -from lib.osm.osmclient.client import Client -import uuid + +from authosm.exceptions import OSMAuthException +from lib.osm.osmclient.clientv2 import Client +import utils class OsmUserManager(BaseUserManager): @@ -58,24 +60,62 @@ class AbstractOsmUser(AbstractBaseUser, PermissionsMixin): * is_superuser """ - username = models.CharField(_('username'), max_length=255, unique=True, db_index=True) - current_project = models.CharField(_('project_id'), max_length=255) - token_project = models.CharField(_('token'), max_length=36) + username = models.CharField(_('username'), primary_key=True, max_length=255, unique=True, db_index=True) + is_admin = models.BooleanField(_('admin status'), default=False) is_basic_user = models.BooleanField(_('basic_user status'), default=False) + current_project = models.CharField(_('project_id'), max_length=255) + + psw = models.CharField(_('psw'), max_length=36) + token = models.CharField(_('token'), max_length=36) + project_id = models.CharField(_('project_id'), max_length=36) + token_expires = models.FloatField(_('token_expires'), max_length=36) objects = OsmUserManager() USERNAME_FIELD = 'username' REQUIRED_FIELDS = [] + @property + def is_authenticated(self): + """Checks for a valid authentication.""" + if self.token is not None and utils.is_token_valid({'expires': self.token_expires}): + return True + else: + return False + + def get_token(self): + if self.is_authenticated: + return {'id': self.token, 'expires': self.token_expires, 'project_id': self.project_id} + return None + + def get_projects(self): + client = Client() + result = client.get_user_info(self.get_token(), self.username) + if 'error' in result and result['error'] is True: + return [] + else: + return result['data']['projects'] + + def switch_project(self, project_id): + client = Client() + result = client.switch_project({'project_id': project_id, 'username': self.username, 'password': self.psw}) + if 'error' in result and result['error'] is True: + raise OSMAuthException(result['data']) + else: + self.token = result['data']['id'] + self.project_id = result['data']['project_id'] + self.token_expires = result['data']['expires'] + self.save() + return True + return False + class Meta: verbose_name = _('custom user') verbose_name_plural = _('custom users') abstract = True - class OsmUser(AbstractOsmUser): """ Concrete class of AbstractCustomUser. @@ -87,6 +127,3 @@ class OsmUser(AbstractOsmUser): class Meta(AbstractOsmUser.Meta): swappable = 'AUTH_USER_MODEL' - def get_projects(self): - client = Client() - return []