Skip to content
Snippets Groups Projects
Verified Commit 310505e8 authored by Frank Sauerburger's avatar Frank Sauerburger
Browse files

Add ssh key add view

parent 136c8d1f
No related branches found
No related tags found
1 merge request!1Resolve "Add SSH keys"
import re
from django import forms
from django.core.exceptions import ValidationError
class KeyStringField(forms.CharField):
def __init__(self, *args, **kwds):
kwds["widget"] = forms.Textarea
super().__init__(*args, **kwds)
def to_python(self, value):
"""Split keystring on whitespace"""
if not value:
return []
return re.split("\s+", value)
def validate(self, value):
"""Check if there are at least two tokens"""
super().validate(value)
if len(value) < 2:
raise ValidationError("KeyString needs type and key part")
class PublicKeyCreateForm(forms.Form):
keystring = KeyStringField()
hostname = forms.CharField(max_length=128)
port = forms.IntegerField(required=False)
client_cert = forms.BooleanField(required=False)
public = forms.BooleanField(required=False)
{% extends 'keys/base.html' %}
{% block content %}
<h2>Add public key</h2>
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Add</button>
</form>
{% endblock %}
{% extends 'keys/base.html' %}
{% block content %}
{% if perms.ssh.add_sshpublickey %}
<a href="{% url 'ssh-create' %}">Add public key</a>
{% endif %}
{% if sshpublickey_list %}
<ul>
{% for publickey in sshpublickey_list %}
......
......@@ -5,5 +5,5 @@ from . import views
urlpatterns = [
path("", views.PublicKeyListView.as_view(), name="ssh-list"),
path("<int:pk>", views.PublicKeyDetailView.as_view(), name="ssh-detail"),
path("new", views.publickey_create, name="ssh-create"),
]
from django.shortcuts import render
from django.shortcuts import render, reverse
from django.views.generic import DetailView, ListView, CreateView
from django.http import HttpResponseRedirect
from guardian.mixins import PermissionRequiredMixin, PermissionListMixin
from guardian.decorators import permission_required
from guardian.shortcuts import assign_perm
from guardian.utils import get_anonymous_user
from . import models
from . import forms
class PublicKeyListView(PermissionListMixin, ListView):
model = models.SSHPublicKey
permission_required = ['view_sshpublickey']
class PublicKeyDetailView(PermissionRequiredMixin, DetailView):
model = models.SSHPublicKey
permission_required = ['view_sshpublickey']
@permission_required('ssh.add_sshpublickey')
def publickey_create(request):
if request.method == 'POST':
form = forms.PublicKeyCreateForm(request.POST)
if form.is_valid():
pk = models.SSHPublicKey()
pk.hostname = form.cleaned_data['hostname']
pk.port = form.cleaned_data['port']
pk.client_cert = form.cleaned_data['client_cert']
pk.keytype, pk.key = form.cleaned_data['keystring'][:2]
pk.save()
assign_perm('view_sshpublickey', request.user, pk)
assign_perm('change_sshpublickey', request.user, pk)
if form.cleaned_data['public']:
assign_perm('view_sshpublickey',
get_anonymous_user(),
pk)
return HttpResponseRedirect(reverse('ssh-list'))
# if a GET (or any other method) we'll create a blank form
else:
form = forms.PublicKeyCreateForm()
return render(request,
'ssh/sshpublickey_create.html',
{'form': form})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment