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 membership.models import CustomUser | ||||
| from django.contrib.auth import authenticate | ||||
|  | @ -7,6 +9,10 @@ from django.utils.translation import ugettext_lazy as _ | |||
| 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): | ||||
| 
 | ||||
|     email = forms.CharField(widget=forms.EmailInput()) | ||||
|  | @ -64,7 +70,7 @@ class UserHostingKeyForm(forms.ModelForm): | |||
|     ) | ||||
|     user = forms.models.ModelChoiceField(queryset=CustomUser.objects.all(), | ||||
|                                          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',})) | ||||
| 
 | ||||
|     def __init__(self, *args, **kwargs): | ||||
|  | @ -80,7 +86,8 @@ class UserHostingKeyForm(forms.ModelForm): | |||
| 
 | ||||
|     def clean(self): | ||||
|         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'): | ||||
|             private_key, public_key = UserHostingKey.generate_keys() | ||||
|             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 tbody tr td{ | ||||
|     color: #717274; | ||||
|  | @ -97,29 +100,48 @@ | |||
|     display: flex; | ||||
|     flex-direction: row; | ||||
|     align-items: center; | ||||
|     justify-content: center; | ||||
|     justify-content: space-between; | ||||
| } | ||||
| .choice-container div:first-of-type{ | ||||
|     border-right: 1px solid #c9c6c6; | ||||
| } | ||||
| 
 | ||||
| .choice-container div{ | ||||
|     padding-top: 30px; | ||||
|     padding-bottom: 30px; | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     flex-direction: column; | ||||
|     width: 50%; | ||||
|     width: 49%; | ||||
| } | ||||
| .choice-container div h3{ | ||||
|     margin: auto; | ||||
|     width: 95%; | ||||
|     text-align: center; | ||||
|     font-family: 'Lato-Light', sans-serif; | ||||
| } | ||||
| .choice-container div h3 img:hover{ | ||||
|     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; | ||||
|     } | ||||
| .choice-button{ | ||||
|  | @ -128,14 +150,19 @@ | |||
|     border-radius: 0; | ||||
|     color: white; | ||||
|     margin-top: 70px; | ||||
| } | ||||
| .choice-button a{ | ||||
|     color: white; | ||||
|     font-size: 20px; | ||||
| } | ||||
| @media screen and (max-width: 768px){ | ||||
|     .choice-button{ | ||||
|         margin-top: 20px; | ||||
|     } | ||||
| } | ||||
| .upload-btn{ | ||||
|     background-color: #337ab7; | ||||
| } | ||||
| .form_key_name{ | ||||
|     width:60%; | ||||
| } | ||||
| .form_public_key, | ||||
| .form_key_name{ | ||||
|     border:none; | ||||
|  | @ -233,3 +260,6 @@ | |||
| .form-ssh h3{ | ||||
|     margin-bottom: 40px; | ||||
| } | ||||
| .custom_form_button{ | ||||
|     border-radius: 0; | ||||
| } | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
| {% load staticfiles bootstrap3 i18n %} | ||||
| {% block content %} | ||||
| <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="col-md-12"> | ||||
| 				 <div  class="col-sm-12"> | ||||
|  | @ -20,17 +20,24 @@ | |||
|                              <h3>I want to generate a new key pair. | ||||
|                                  <sup><sup><img src="{% static 'hosting/img/g222.png' %}"/></sup></sup> | ||||
|                              </h3> | ||||
|                              <button type="button" class="btn btn-success choice-button generate-btn"> | ||||
|                                  <a href="#">{% trans "Generate"%}</a> | ||||
|                              <form action="#" method="post"> | ||||
|                                  {% csrf_token %} | ||||
|                                  <button type="submit" class="btn btn-success choice-button generate-btn"> | ||||
|                                      {% trans "Generate"%} | ||||
|                                  </button> | ||||
|                              </form> | ||||
| 
 | ||||
|                          </div> | ||||
|                          <div class="choice-container-line"></div> | ||||
|                          <div class="right-choice-container"> | ||||
|                              <h3>I want to use my existing public key. | ||||
|                                  <sup><sup><img src="{% static 'hosting/img/g222.png' %}"/></sup></sup> | ||||
|                              </h3> | ||||
|                              <button type="button" class="btn btn-primary choice-button upload-btn"> | ||||
|                                  <a  href="{% url 'hosting:create_ssh_key' %}">{% trans "Upload"%}</a> | ||||
|                              <form action="{% url 'hosting:create_ssh_key' %}"> | ||||
|                                  <button type="submit" class="btn btn-primary choice-button upload-btn"> | ||||
|                                      {% trans "Upload"%} | ||||
|                                  </button> | ||||
|                              </form> | ||||
|                          </div> | ||||
| 
 | ||||
|                      </div> | ||||
|  |  | |||
|  | @ -22,13 +22,13 @@ | |||
|                         {% buttons %} | ||||
|                         <div class="underform-contaner"> | ||||
|                             <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"%} | ||||
|                             </button> | ||||
|                         </div> | ||||
|                         <div class="underform-contaner"> | ||||
|                             <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> | ||||
|                         </div> | ||||
| 
 | ||||
|  |  | |||
|  | @ -24,7 +24,7 @@ from utils.forms import BillingAddressForm, PasswordResetRequestForm, UserBillin | |||
| from utils.views import PasswordResetViewMixin, PasswordResetConfirmViewMixin, LoginViewMixin | ||||
| from utils.mailer import BaseEmail | ||||
| 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 opennebula_api.models import OpenNebulaManager | ||||
|  | @ -376,6 +376,13 @@ class SSHKeyChoiceView(LoginRequiredMixin, View): | |||
|         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): | ||||
|     form_class = UserHostingKeyForm | ||||
|  | @ -430,6 +437,9 @@ class SSHKeyCreateView(LoginRequiredMixin, FormView): | |||
|     def post(self, request, *args, **kwargs): | ||||
|         print(self.request.POST.dict()) | ||||
|         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(): | ||||
|             return self.form_valid(form) | ||||
|         else: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue