Add SSH form to hosting VM buy flow also
This commit is contained in:
parent
85f7d73442
commit
34c917acc2
2 changed files with 60 additions and 2 deletions
|
@ -198,6 +198,35 @@
|
||||||
{% block submit_btn %}
|
{% block submit_btn %}
|
||||||
<form method="post" id="virtual_machine_create_form">
|
<form method="post" id="virtual_machine_create_form">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
{% comment %}
|
||||||
|
We are in VM buy flow and we want user to click the "Place order" button.
|
||||||
|
At this point, we also want the user to input the SSH key for the VM.
|
||||||
|
{% endcomment %}
|
||||||
|
|
||||||
|
{% if messages %}
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
{% for message in messages %}
|
||||||
|
<span>{{ message }}</span>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="dashboard-container-head">
|
||||||
|
<h2 class="dashboard-title-thin"><i class="fa fa-key" aria-hidden="true"></i> {% trans "Add your public SSH key" %}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="existing-keys">
|
||||||
|
{% if keys|length > 0 %}
|
||||||
|
<div class="existing-keys-title">Existing keys</div>
|
||||||
|
{% endif %}
|
||||||
|
{% for key in keys %}
|
||||||
|
<textarea class="form-control input-no-border" style="width: 100%" readonly rows="6">
|
||||||
|
{{key}}
|
||||||
|
</textarea>
|
||||||
|
<br/>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% for field in form %}
|
||||||
|
{% bootstrap_field field %}
|
||||||
|
{% endfor %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<div class="dcl-place-order-text">{% blocktrans with vm_price=vm.total_price|floatformat:2|intcomma %}By clicking "Place order" this plan will charge your credit card account with {{ vm_price }} CHF/month{% endblocktrans %}.</div>
|
<div class="dcl-place-order-text">{% blocktrans with vm_price=vm.total_price|floatformat:2|intcomma %}By clicking "Place order" this plan will charge your credit card account with {{ vm_price }} CHF/month{% endblocktrans %}.</div>
|
||||||
|
|
|
@ -838,13 +838,19 @@ class PaymentVMView(LoginRequiredMixin, FormView):
|
||||||
return self.form_invalid(form)
|
return self.form_invalid(form)
|
||||||
|
|
||||||
|
|
||||||
class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
|
class OrdersHostingDetailView(LoginRequiredMixin, DetailView, FormView):
|
||||||
|
form_class = UserHostingKeyForm
|
||||||
template_name = "hosting/order_detail.html"
|
template_name = "hosting/order_detail.html"
|
||||||
context_object_name = "order"
|
context_object_name = "order"
|
||||||
login_url = reverse_lazy('hosting:login')
|
login_url = reverse_lazy('hosting:login')
|
||||||
permission_required = ['view_hostingorder']
|
permission_required = ['view_hostingorder']
|
||||||
model = HostingOrder
|
model = HostingOrder
|
||||||
|
|
||||||
|
def get_form_kwargs(self):
|
||||||
|
kwargs = super(OrdersHostingDetailView, self).get_form_kwargs()
|
||||||
|
kwargs.update({'request': self.request})
|
||||||
|
return kwargs
|
||||||
|
|
||||||
def get_object(self, queryset=None):
|
def get_object(self, queryset=None):
|
||||||
order_id = self.kwargs.get('pk')
|
order_id = self.kwargs.get('pk')
|
||||||
try:
|
try:
|
||||||
|
@ -869,6 +875,8 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
|
||||||
|
|
||||||
if self.request.GET.get('page') == 'payment':
|
if self.request.GET.get('page') == 'payment':
|
||||||
context['page_header_text'] = _('Confirm Order')
|
context['page_header_text'] = _('Confirm Order')
|
||||||
|
context['form'] = UserHostingKeyForm(request=self.request)
|
||||||
|
context['keys'] = get_all_public_keys(self.request.user)
|
||||||
else:
|
else:
|
||||||
context['page_header_text'] = _('Invoice')
|
context['page_header_text'] = _('Invoice')
|
||||||
if not self.request.user.has_perm(
|
if not self.request.user.has_perm(
|
||||||
|
@ -994,6 +1002,27 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
|
||||||
|
|
||||||
@method_decorator(decorators)
|
@method_decorator(decorators)
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
|
# Check ssh public key and then proceed
|
||||||
|
form = self.get_form()
|
||||||
|
required = 'add_ssh' in self.request.POST
|
||||||
|
|
||||||
|
# SSH key is required only if the user doesn't have an existing
|
||||||
|
# key
|
||||||
|
if len(get_all_public_keys(self.request.user)) == 0:
|
||||||
|
form.fields['name'].required = required
|
||||||
|
form.fields['public_key'].required = required
|
||||||
|
if not form.is_valid():
|
||||||
|
response = {
|
||||||
|
'status': False,
|
||||||
|
'msg_title': str(_('SSH key related error occurred')),
|
||||||
|
'msg_body': "<br/>".join([str(v) for k,v in form.errors.items()]),
|
||||||
|
}
|
||||||
|
return JsonResponse(response)
|
||||||
|
|
||||||
|
# We have a valid SSH key from the user, save it in opennebula and db
|
||||||
|
# and proceed further
|
||||||
|
form.save()
|
||||||
|
|
||||||
template = request.session.get('template')
|
template = request.session.get('template')
|
||||||
specs = request.session.get('specs')
|
specs = request.session.get('specs')
|
||||||
stripe_utils = StripeUtils()
|
stripe_utils = StripeUtils()
|
||||||
|
@ -1641,7 +1670,7 @@ class VirtualMachineView(LoginRequiredMixin, View):
|
||||||
"manager.delete_vm returned False. Hence, error making "
|
"manager.delete_vm returned False. Hence, error making "
|
||||||
"xml-rpc call to delete vm failed."
|
"xml-rpc call to delete vm failed."
|
||||||
)
|
)
|
||||||
response['text'] = str(_('Error terminating VM ')) + str(vm.id)
|
response['text'] = str(_('Error terminating VM')) + str(vm.id)
|
||||||
else:
|
else:
|
||||||
for t in range(15):
|
for t in range(15):
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in a new issue