def create(self, user, description, public_key): """ :param user: user or user_id :param description: description of SshKey :param publickey: public key text Will raise SshKeyModelException on errors """ try: keytype, _pub, comment = ssh.parse_pub_key(public_key) except ssh.SshKeyParseError as e: raise SshKeyModelException(_('SSH key %r is invalid: %s') % (public_key, e.args[0])) if not description.strip(): description = comment.strip() user = User.guess_instance(user) new_ssh_key = UserSshKeys() new_ssh_key.user_id = user.user_id new_ssh_key.description = description new_ssh_key.public_key = public_key for ssh_key in UserSshKeys.query().filter(UserSshKeys.fingerprint == new_ssh_key.fingerprint).all(): raise SshKeyModelException(_('SSH key %s is already used by %s') % (new_ssh_key.fingerprint, ssh_key.user.username)) Session().add(new_ssh_key) return new_ssh_key
def test_fingerprint_generation(self): key_model = UserSshKeys() key_model.public_key = public_key expected = 'Ke3oUCNJM87P0jJTb3D+e3shjceP2CqMpQKVd75E9I8' assert expected == key_model.fingerprint