Source code for atmo.keys.models

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, you can obtain one at http://mozilla.org/MPL/2.0/.
from autorepr import autorepr, autostr
from django.db import models

from ..models import CreatedByModel, EditedAtModel, URLActionModel
from .utils import calculate_fingerprint


[docs]class SSHKey(CreatedByModel, EditedAtModel, URLActionModel): """ A Django data model to store public SSH keys for logged-in users to be used in the :mod:`on-demand clusters <atmo.clusters>`. """ #: The list of valid SSH key data prefixes, will be validated #: on save. VALID_PREFIXES = [ 'ssh-rsa', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', ] title = models.CharField( max_length=100, help_text='Name to give to this public key', ) key = models.TextField( help_text='Should start with one of the following prefixes: %s' % ', '.join(VALID_PREFIXES), ) fingerprint = models.CharField( max_length=48, blank=True, ) class Meta: permissions = [ ('view_sshkey', 'Can view SSH key'), ] unique_together = ( ('created_by', 'fingerprint') ) __str__ = autostr('{self.title}') __repr__ = autorepr(['title', 'fingerprint']) url_prefix = 'keys' url_actions = ['detail', 'delete', 'raw'] def get_absolute_url(self): return self.urls.detail @property def prefix(self): """ The prefix of the key data, one of the :data:`~atmo.keys.models.SSHKey.VALID_PREFIXES`. """ return self.key.strip().split()[0]
[docs] def save(self, *args, **kwargs): self.fingerprint = calculate_fingerprint(self.key) super().save(*args, **kwargs)