Added generation button with no field input required (generate ssh key name)
This commit is contained in:
		
					parent
					
						
							
								7cc70a95ac
							
						
					
				
			
			
				commit
				
					
						8986aa6550
					
				
			
		
					 5 changed files with 76 additions and 22 deletions
				
			
		| 
						 | 
					@ -1,3 +1,5 @@
 | 
				
			||||||
 | 
					import datetime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django import forms
 | 
					from django import forms
 | 
				
			||||||
from membership.models import CustomUser
 | 
					from membership.models import CustomUser
 | 
				
			||||||
from django.contrib.auth import authenticate
 | 
					from django.contrib.auth import authenticate
 | 
				
			||||||
| 
						 | 
					@ -7,6 +9,10 @@ from django.utils.translation import ugettext_lazy as _
 | 
				
			||||||
from .models import UserHostingKey
 | 
					from .models import UserHostingKey
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def generate_ssh_key_name():
 | 
				
			||||||
 | 
					    return 'dcl-generated-key-' + datetime.datetime.now().strftime('%m%d%y%H%M')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class HostingUserLoginForm(forms.Form):
 | 
					class HostingUserLoginForm(forms.Form):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    email = forms.CharField(widget=forms.EmailInput())
 | 
					    email = forms.CharField(widget=forms.EmailInput())
 | 
				
			||||||
| 
						 | 
					@ -64,7 +70,7 @@ class UserHostingKeyForm(forms.ModelForm):
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    user = forms.models.ModelChoiceField(queryset=CustomUser.objects.all(),
 | 
					    user = forms.models.ModelChoiceField(queryset=CustomUser.objects.all(),
 | 
				
			||||||
                                         required=False, widget=forms.HiddenInput())
 | 
					                                         required=False, widget=forms.HiddenInput())
 | 
				
			||||||
    name = forms.CharField(required=True, widget=forms.TextInput(
 | 
					    name = forms.CharField(required=False, widget=forms.TextInput(
 | 
				
			||||||
        attrs={'class': 'form_key_name', 'placeholder': 'Give a name to your key',}))
 | 
					        attrs={'class': 'form_key_name', 'placeholder': 'Give a name to your key',}))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, *args, **kwargs):
 | 
					    def __init__(self, *args, **kwargs):
 | 
				
			||||||
| 
						 | 
					@ -80,7 +86,8 @@ class UserHostingKeyForm(forms.ModelForm):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def clean(self):
 | 
					    def clean(self):
 | 
				
			||||||
        cleaned_data = self.cleaned_data
 | 
					        cleaned_data = self.cleaned_data
 | 
				
			||||||
 | 
					        if not self.cleaned_data.get('name', ''):
 | 
				
			||||||
 | 
					            self.cleaned_data['name'] = generate_ssh_key_name()
 | 
				
			||||||
        if not cleaned_data.get('public_key'):
 | 
					        if not cleaned_data.get('public_key'):
 | 
				
			||||||
            private_key, public_key = UserHostingKey.generate_keys()
 | 
					            private_key, public_key = UserHostingKey.generate_keys()
 | 
				
			||||||
            cleaned_data.update({
 | 
					            cleaned_data.update({
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,6 @@
 | 
				
			||||||
 | 
					h2,h3,h4,h5{
 | 
				
			||||||
 | 
					    font-family: 'Lato-Light', sans-serif;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.ssh-keys-table thead tr th,
 | 
					.ssh-keys-table thead tr th,
 | 
				
			||||||
.ssh-keys-table tbody tr td{
 | 
					.ssh-keys-table tbody tr td{
 | 
				
			||||||
    color: #717274;
 | 
					    color: #717274;
 | 
				
			||||||
| 
						 | 
					@ -97,29 +100,48 @@
 | 
				
			||||||
    display: flex;
 | 
					    display: flex;
 | 
				
			||||||
    flex-direction: row;
 | 
					    flex-direction: row;
 | 
				
			||||||
    align-items: center;
 | 
					    align-items: center;
 | 
				
			||||||
    justify-content: center;
 | 
					    justify-content: space-between;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.choice-container div:first-of-type{
 | 
					 | 
				
			||||||
    border-right: 1px solid #c9c6c6;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.choice-container div{
 | 
					.choice-container div{
 | 
				
			||||||
    padding-top: 30px;
 | 
					    padding-top: 30px;
 | 
				
			||||||
    padding-bottom: 30px;
 | 
					    padding-bottom: 30px;
 | 
				
			||||||
    display: flex;
 | 
					    display: flex;
 | 
				
			||||||
    align-items: center;
 | 
					    align-items: center;
 | 
				
			||||||
    flex-direction: column;
 | 
					    flex-direction: column;
 | 
				
			||||||
    width: 50%;
 | 
					    width: 49%;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.choice-container div h3{
 | 
					.choice-container div h3{
 | 
				
			||||||
    margin: auto;
 | 
					    margin: auto;
 | 
				
			||||||
    width: 95%;
 | 
					    width: 95%;
 | 
				
			||||||
    text-align: center;
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    font-family: 'Lato-Light', sans-serif;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.choice-container div h3 img:hover{
 | 
					.choice-container div h3 img:hover{
 | 
				
			||||||
    cursor: pointer;
 | 
					    cursor: pointer;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.dashboard-container {
 | 
					.choice-container div.choice-container-line{
 | 
				
			||||||
 | 
					    padding-top: 0;
 | 
				
			||||||
 | 
					    padding-bottom: 0;
 | 
				
			||||||
 | 
					    border: 1px solid #c9c6c6;
 | 
				
			||||||
 | 
					    height: 250px;
 | 
				
			||||||
 | 
					    width:1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@media screen and (max-width: 768px){
 | 
				
			||||||
 | 
					    .choice-container div.choice-container-line{
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .choice-container{
 | 
				
			||||||
 | 
					        flex-direction: column;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .choice-container div{
 | 
				
			||||||
 | 
					        width: 100%;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .choice-container div h3 {
 | 
				
			||||||
 | 
					    font-size: 16px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.dashboard-choice-container {
 | 
				
			||||||
     max-width: 930px !important;
 | 
					     max-width: 930px !important;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
.choice-button{
 | 
					.choice-button{
 | 
				
			||||||
| 
						 | 
					@ -128,14 +150,19 @@
 | 
				
			||||||
    border-radius: 0;
 | 
					    border-radius: 0;
 | 
				
			||||||
    color: white;
 | 
					    color: white;
 | 
				
			||||||
    margin-top: 70px;
 | 
					    margin-top: 70px;
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.choice-button a{
 | 
					 | 
				
			||||||
    color: white;
 | 
					 | 
				
			||||||
    font-size: 20px;
 | 
					    font-size: 20px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					@media screen and (max-width: 768px){
 | 
				
			||||||
 | 
					    .choice-button{
 | 
				
			||||||
 | 
					        margin-top: 20px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.upload-btn{
 | 
					.upload-btn{
 | 
				
			||||||
    background-color: #337ab7;
 | 
					    background-color: #337ab7;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					.form_key_name{
 | 
				
			||||||
 | 
					    width:60%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.form_public_key,
 | 
					.form_public_key,
 | 
				
			||||||
.form_key_name{
 | 
					.form_key_name{
 | 
				
			||||||
    border:none;
 | 
					    border:none;
 | 
				
			||||||
| 
						 | 
					@ -233,3 +260,6 @@
 | 
				
			||||||
.form-ssh h3{
 | 
					.form-ssh h3{
 | 
				
			||||||
    margin-bottom: 40px;
 | 
					    margin-bottom: 40px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					.custom_form_button{
 | 
				
			||||||
 | 
					    border-radius: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
{% load staticfiles bootstrap3 i18n %}
 | 
					{% load staticfiles bootstrap3 i18n %}
 | 
				
			||||||
{% block content %}
 | 
					{% block content %}
 | 
				
			||||||
<div>
 | 
					<div>
 | 
				
			||||||
	<div class="container virtual-machine-container dashboard-container ">
 | 
						<div class="container virtual-machine-container dashboard-container dashboard-choice-container">
 | 
				
			||||||
		<div class="row">
 | 
							<div class="row">
 | 
				
			||||||
			<div class="col-md-12">
 | 
								<div class="col-md-12">
 | 
				
			||||||
				 <div  class="col-sm-12">
 | 
									 <div  class="col-sm-12">
 | 
				
			||||||
| 
						 | 
					@ -20,17 +20,24 @@
 | 
				
			||||||
                             <h3>I want to generate a new key pair.
 | 
					                             <h3>I want to generate a new key pair.
 | 
				
			||||||
                                 <sup><sup><img src="{% static 'hosting/img/g222.png' %}"/></sup></sup>
 | 
					                                 <sup><sup><img src="{% static 'hosting/img/g222.png' %}"/></sup></sup>
 | 
				
			||||||
                             </h3>
 | 
					                             </h3>
 | 
				
			||||||
                             <button type="button" class="btn btn-success choice-button generate-btn">
 | 
					                             <form action="#" method="post">
 | 
				
			||||||
                                 <a href="#">{% trans "Generate"%}</a>
 | 
					                                 {% csrf_token %}
 | 
				
			||||||
                             </button>
 | 
					                                 <button type="submit" class="btn btn-success choice-button generate-btn">
 | 
				
			||||||
 | 
					                                     {% trans "Generate"%}
 | 
				
			||||||
 | 
					                                 </button>
 | 
				
			||||||
 | 
					                             </form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
 | 
					                         <div class="choice-container-line"></div>
 | 
				
			||||||
                         <div class="right-choice-container">
 | 
					                         <div class="right-choice-container">
 | 
				
			||||||
                             <h3>I want to use my existing public key.
 | 
					                             <h3>I want to use my existing public key.
 | 
				
			||||||
                                 <sup><sup><img src="{% static 'hosting/img/g222.png' %}"/></sup></sup>
 | 
					                                 <sup><sup><img src="{% static 'hosting/img/g222.png' %}"/></sup></sup>
 | 
				
			||||||
                             </h3>
 | 
					                             </h3>
 | 
				
			||||||
                             <button type="button" class="btn btn-primary choice-button upload-btn">
 | 
					                             <form action="{% url 'hosting:create_ssh_key' %}">
 | 
				
			||||||
                                 <a  href="{% url 'hosting:create_ssh_key' %}">{% trans "Upload"%}</a>
 | 
					                                 <button type="submit" class="btn btn-primary choice-button upload-btn">
 | 
				
			||||||
                             </button>
 | 
					                                     {% trans "Upload"%}
 | 
				
			||||||
 | 
					                                 </button>
 | 
				
			||||||
 | 
					                             </form>
 | 
				
			||||||
                         </div>
 | 
					                         </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                     </div>
 | 
					                     </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,13 +22,13 @@
 | 
				
			||||||
                        {% buttons %}
 | 
					                        {% buttons %}
 | 
				
			||||||
                        <div class="underform-contaner">
 | 
					                        <div class="underform-contaner">
 | 
				
			||||||
                            <h4> {% trans "Use your created key to access to the machine." %} </h4>
 | 
					                            <h4> {% trans "Use your created key to access to the machine." %} </h4>
 | 
				
			||||||
                            <button type="submit" class="btn btn-success">
 | 
					                            <button type="submit" name='add_ssh' class="btn btn-success custom_form_button">
 | 
				
			||||||
                                {% trans "Add SSH key"%}
 | 
					                                {% trans "Add SSH key"%}
 | 
				
			||||||
                            </button>
 | 
					                            </button>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="underform-contaner">
 | 
					                        <div class="underform-contaner">
 | 
				
			||||||
                            <h4>{% trans "Or you can generate a new key pair."%}</h4>
 | 
					                            <h4>{% trans "Or you can generate a new key pair."%}</h4>
 | 
				
			||||||
                            <button class="btn btn-success">{% trans "Generate"%}
 | 
					                            <button type="submit" name='generate' class="btn btn-success custom_form_button">{% trans "Generate"%}
 | 
				
			||||||
                        </button>
 | 
					                        </button>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@ from utils.forms import BillingAddressForm, PasswordResetRequestForm, UserBillin
 | 
				
			||||||
from utils.views import PasswordResetViewMixin, PasswordResetConfirmViewMixin, LoginViewMixin
 | 
					from utils.views import PasswordResetViewMixin, PasswordResetConfirmViewMixin, LoginViewMixin
 | 
				
			||||||
from utils.mailer import BaseEmail
 | 
					from utils.mailer import BaseEmail
 | 
				
			||||||
from .models import HostingOrder, HostingBill, HostingPlan, UserHostingKey
 | 
					from .models import HostingOrder, HostingBill, HostingPlan, UserHostingKey
 | 
				
			||||||
from .forms import HostingUserSignupForm, HostingUserLoginForm, UserHostingKeyForm
 | 
					from .forms import HostingUserSignupForm, HostingUserLoginForm, UserHostingKeyForm, generate_ssh_key_name
 | 
				
			||||||
from .mixins import ProcessVMSelectionMixin
 | 
					from .mixins import ProcessVMSelectionMixin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from opennebula_api.models import OpenNebulaManager
 | 
					from opennebula_api.models import OpenNebulaManager
 | 
				
			||||||
| 
						 | 
					@ -376,6 +376,13 @@ class SSHKeyChoiceView(LoginRequiredMixin, View):
 | 
				
			||||||
        context = {}
 | 
					        context = {}
 | 
				
			||||||
        return render(request, self.template_name, context)
 | 
					        return render(request, self.template_name, context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def post(self, request, *args, **kwargs):
 | 
				
			||||||
 | 
					        print('post method HERE!!!')
 | 
				
			||||||
 | 
					        name = generate_ssh_key_name()
 | 
				
			||||||
 | 
					        private_key, public_key = UserHostingKey.generate_keys()
 | 
				
			||||||
 | 
					        UserHostingKey.objects.create(user=request.user, public_key=public_key, name=name)
 | 
				
			||||||
 | 
					        return redirect(reverse_lazy('hosting:ssh_keys'), foo='bar')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SSHKeyCreateView(LoginRequiredMixin, FormView):
 | 
					class SSHKeyCreateView(LoginRequiredMixin, FormView):
 | 
				
			||||||
    form_class = UserHostingKeyForm
 | 
					    form_class = UserHostingKeyForm
 | 
				
			||||||
| 
						 | 
					@ -430,6 +437,9 @@ class SSHKeyCreateView(LoginRequiredMixin, FormView):
 | 
				
			||||||
    def post(self, request, *args, **kwargs):
 | 
					    def post(self, request, *args, **kwargs):
 | 
				
			||||||
        print(self.request.POST.dict())
 | 
					        print(self.request.POST.dict())
 | 
				
			||||||
        form = self.get_form()
 | 
					        form = self.get_form()
 | 
				
			||||||
 | 
					        required = 'add_ssh' in self.request.POST
 | 
				
			||||||
 | 
					        form.fields['name'].required = required
 | 
				
			||||||
 | 
					        form.fields['public_key'].required = required
 | 
				
			||||||
        if form.is_valid():
 | 
					        if form.is_valid():
 | 
				
			||||||
            return self.form_valid(form)
 | 
					            return self.form_valid(form)
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue