e4841cae9420c7f4febe7bacdd31046f537cc76b
[cas.git] / src / ssh_keys / models.py
1 from django.conf import settings
2 from django.db import models
3 from django.utils.translation import ugettext_lazy as _
4 from .utils import get_key_details
5
6
7 class SSHKey(models.Model):
8     user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name=_('user'))
9     key = models.TextField(_('key'))
10     comment = models.CharField(_('comment'), max_length=255, editable=False)
11     algorithm = models.CharField(_('algorithm'), max_length=32, editable=False)
12     bit_length = models.IntegerField(_('bit length'), null=True, editable=False)
13     md5_hash = models.CharField(_('MD5 hash'), max_length=128, editable=False)
14     created_at = models.DateTimeField(_('created at'), auto_now_add=True)
15     last_seen_at = models.DateTimeField(_('last seen at'), null=True, editable=False)
16
17     class Meta:
18         ordering = ['created_at']
19         verbose_name = _('SSH key')
20         verbose_name_plural = _('SSH keys')
21         unique_together = [('algorithm', 'bit_length', 'md5_hash')]
22
23     def __str__(self):
24         return self.comment
25
26     def save(self, *args, **kwargs):
27         det = get_key_details(self.key)
28         self.comment = det['comment'][:255]
29         self.algorithm = det['algo']
30         self.bit_length = det['bits']
31         self.md5_hash = det['md5']
32         return super().save(*args, **kwargs)