models.py 2.46 KB
Newer Older
1 2
from logging import getLogger

3
from django.conf import settings
4
from django.contrib.auth.models import User
5
from django.contrib.auth.signals import user_logged_in
6 7 8
from django.db.models import (
    Model, ForeignKey, OneToOneField, CharField, IntegerField
)
9
from django.utils.translation import ugettext_lazy as _
10 11 12

from vm.models import Instance

13 14
logger = getLogger(__name__)

15

16 17 18
class Favourite(Model):
    instance = ForeignKey(Instance)
    user = ForeignKey(User)
19 20 21 22 23 24 25 26 27 28 29


class Profile(Model):
    user = OneToOneField(User)
    preferred_language = CharField(verbose_name=_('preferred language'),
                                   choices=settings.LANGUAGES,
                                   max_length=32,
                                   default=settings.LANGUAGE_CODE, blank=False)
    org_id = CharField(  # may be populated from eduPersonOrgId field
        unique=True, blank=True, null=True, max_length=64,
        help_text=_('Unique identifier of the person, e.g. a student number.'))
30
    instance_limit = IntegerField(default=5)
31 32


33
def create_profile(sender, user, request, **kwargs):
34 35
    if not user.pk:
        return False
36 37 38 39 40
    profile, created = Profile.objects.get_or_create(user=user)
    return created

user_logged_in.connect(create_profile)

41
if hasattr(settings, 'SAML_ORG_ID_ATTRIBUTE'):
42
    logger.debug("Register save_org_id to djangosaml2 pre_user_save")
43 44
    from djangosaml2.signals import pre_user_save

45
    def save_org_id(sender, **kwargs):
46
        logger.debug("save_org_id called by %s", sender.username)
47
        attributes = kwargs.pop('attributes')
48
        atr = settings.SAML_ORG_ID_ATTRIBUTE
49 50 51 52 53 54
        try:
            value = attributes[atr][0]
        except Exception as e:
            value = None
            logger.info("save_org_id couldn't find attribute. %s", unicode(e))

55 56 57 58
        if sender.pk is None:
            sender.save()
            logger.debug("save_org_id saved user %s", unicode(sender))

59 60
        profile, created = Profile.objects.get_or_create(user=sender)
        if created or profile.org_id != value:
61 62
            logger.info("org_id of %s added to user %s's profile",
                        value, sender.username)
63 64
            profile.org_id = value
            profile.save()
65 66 67
        else:
            logger.debug("org_id of %s already added to user %s's profile",
                         value, sender.username)
68 69
        return False

70 71
    pre_user_save.connect(save_org_id)

72 73
else:
    logger.debug("Do not register save_org_id to djangosaml2 pre_user_save")