Statistics
| Branch: | Tag: | Revision:

root / ui / userdata / models.py @ c72a830d

History | View | Annotate | Download (993 Bytes)

1 eee0487e Kostas Papadimitriou
from django.db import models
2 c72a830d Kostas Papadimitriou
from django.conf import settings
3 c72a830d Kostas Papadimitriou
from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
4 c72a830d Kostas Papadimitriou
5 eee0487e Kostas Papadimitriou
from synnefo.db import models as synnefo_models
6 eee0487e Kostas Papadimitriou
7 eee0487e Kostas Papadimitriou
User = synnefo_models.SynnefoUser
8 eee0487e Kostas Papadimitriou
9 eee0487e Kostas Papadimitriou
class ProfileModel(models.Model):
10 eee0487e Kostas Papadimitriou
    """
11 eee0487e Kostas Papadimitriou
    Abstract model, provides a basic interface for models that store
12 eee0487e Kostas Papadimitriou
    user specific information
13 eee0487e Kostas Papadimitriou
    """
14 eee0487e Kostas Papadimitriou
15 eee0487e Kostas Papadimitriou
    user = models.ForeignKey(User)
16 eee0487e Kostas Papadimitriou
17 eee0487e Kostas Papadimitriou
    class Meta:
18 eee0487e Kostas Papadimitriou
        abstract = True
19 26bade45 Kostas Papadimitriou
        app_label = 'userdata'
20 eee0487e Kostas Papadimitriou
21 eee0487e Kostas Papadimitriou
22 eee0487e Kostas Papadimitriou
class PublicKeyPair(ProfileModel):
23 eee0487e Kostas Papadimitriou
    """
24 eee0487e Kostas Papadimitriou
    Public key model
25 eee0487e Kostas Papadimitriou
    """
26 eee0487e Kostas Papadimitriou
    name = models.CharField(max_length=255, null=False, blank=False)
27 eee0487e Kostas Papadimitriou
    content = models.TextField()
28 eee0487e Kostas Papadimitriou
29 26bade45 Kostas Papadimitriou
    class Meta:
30 26bade45 Kostas Papadimitriou
        app_label = 'userdata'
31 c72a830d Kostas Papadimitriou
32 c72a830d Kostas Papadimitriou
    def clean(self):
33 c72a830d Kostas Papadimitriou
        if PublicKeyPair.user_limit_exceeded(self.user):
34 c72a830d Kostas Papadimitriou
            raise ValidationError("SSH keys limit exceeded.")
35 c72a830d Kostas Papadimitriou
36 c72a830d Kostas Papadimitriou
    @classmethod
37 c72a830d Kostas Papadimitriou
    def user_limit_exceeded(cls, user):
38 c72a830d Kostas Papadimitriou
        return PublicKeyPair.objects.filter(user=user).count() >= settings.MAX_SSH_KEYS_PER_USER