diff --git a/datacenterlight/urls.py b/datacenterlight/urls.py index 65401b13..8a83df71 100644 --- a/datacenterlight/urls.py +++ b/datacenterlight/urls.py @@ -1,6 +1,7 @@ from django.conf.urls import url -from .views import IndexView, BetaProgramView, LandingProgramView, BetaAccessView, PricingView, SuccessView, PaymentOrderView, OrderConfirmationView +from .views import IndexView, BetaProgramView, LandingProgramView, \ + BetaAccessView, PricingView, SuccessView, PaymentOrderView, OrderConfirmationView urlpatterns = [ diff --git a/datacenterlight/views.py b/datacenterlight/views.py index 592d59cb..53abf02d 100644 --- a/datacenterlight/views.py +++ b/datacenterlight/views.py @@ -13,12 +13,11 @@ from django.core.exceptions import ValidationError from django.views.decorators.cache import cache_control from django.conf import settings from utils.forms import BillingAddressForm, UserBillingAddressForm -from membership.models import StripeCustomer -from hosting.models import HostingOrder, HostingBill +from hosting.models import HostingOrder from utils.stripe_utils import StripeUtils from datetime import datetime from membership.models import CustomUser, StripeCustomer - +from oca.pool import WrongIdError from opennebula_api.models import OpenNebulaManager from opennebula_api.serializers import VirtualMachineTemplateSerializer, VirtualMachineSerializer @@ -33,11 +32,12 @@ class SuccessView(TemplateView): def get(self, request, *args, **kwargs): if 'specs' not in request.session or 'user' not in request.session: return HttpResponseRedirect(reverse('datacenterlight:index')) - else : + else: del request.session['specs'] del request.session['user'] return render(request, self.template_name) + class PricingView(TemplateView): template_name = "datacenterlight/pricing.html" @@ -56,7 +56,7 @@ class PricingView(TemplateView): ) context = { 'error': 'connection' - } + } return render(request, self.template_name, context) @@ -93,7 +93,6 @@ class BetaAccessView(FormView): success_message = "Thank you, we will contact you as soon as possible" def form_valid(self, form): - context = { 'base_url': "{0}://{1}".format(self.request.scheme, self.request.get_host()) } @@ -190,9 +189,9 @@ class IndexView(CreateView): @cache_control(no_cache=True, must_revalidate=True, no_store=True) def get(self, request, *args, **kwargs): - if 'specs' in request.session : + if 'specs' in request.session: del request.session['specs'] - if 'user' in request.session : + if 'user' in request.session: del request.session['user'] try: manager = OpenNebulaManager() @@ -207,7 +206,7 @@ class IndexView(CreateView): ) context = { 'error': 'connection' - } + } return render(request, self.template_name, context) def post(self, request): @@ -242,7 +241,7 @@ class IndexView(CreateView): 'disk_size': storage, 'price': price } - + this_user = { 'name': name, 'email': email @@ -332,17 +331,16 @@ class PaymentOrderView(FormView): final_price = specs.get('price') token = form.cleaned_data.get('token') try: - custom_user = CustomUser.objects.get(email=user.get('email')) + CustomUser.objects.get(email=user.get('email')) except CustomUser.DoesNotExist: password = CustomUser.get_random_password() # Register the user, and do not send emails - CustomUser.register(user.get('name'), - password, - user.get('email'), - app='dcl', + CustomUser.register(user.get('name'), + password, + user.get('email'), + app='dcl', base_url=None, send_email=False) - # Get or create stripe customer customer = StripeCustomer.get_or_create(email=user.get('email'), token=token) @@ -368,21 +366,21 @@ class PaymentOrderView(FormView): return render(request, self.template_name, context) charge = charge_response.get('response_object') - + # Create OpenNebulaManager manager = OpenNebulaManager(email=settings.OPENNEBULA_USERNAME, password=settings.OPENNEBULA_PASSWORD) - + # Create a vm using logged user vm_id = manager.create_vm( template_id=vm_template_id, specs=specs, vm_name="{email}-{template_name}-{date}".format( - email=user.get('email'), - template_name=template.get('name'), - date=int(datetime.now().strftime("%s"))) + email=user.get('email'), + template_name=template.get('name'), + date=int(datetime.now().strftime("%s"))) ) - + # Create a Hosting Order order = HostingOrder.create( price=final_price, @@ -390,10 +388,11 @@ class PaymentOrderView(FormView): customer=customer, billing_address=billing_address ) - + # Create a Hosting Bill - bill = HostingBill.create( - customer=customer, billing_address=billing_address) + # not used + # bill = HostingBill.create( + # customer=customer, billing_address=billing_address) # Create Billing Address for User if he does not have one if not customer.user.billing_addresses.count(): @@ -410,9 +409,9 @@ class PaymentOrderView(FormView): # If the Stripe payment was successed, set order status approved order.set_approved() - + vm = VirtualMachineSerializer(manager.get_vm(vm_id)).data - + context = { 'name': user.get('name'), 'email': user.get('email'), @@ -438,10 +437,12 @@ class PaymentOrderView(FormView): else: return self.form_invalid(form) + class OrderConfirmationView(DetailView): template_name = "datacenterlight/order_detail.html" context_object_name = "order" model = HostingOrder + def get_context_data(self, **kwargs): # Get context context = super(DetailView, self).get_context_data(**kwargs) diff --git a/hosting/views.py b/hosting/views.py index c5956ade..a5cea6c9 100644 --- a/hosting/views.py +++ b/hosting/views.py @@ -1,8 +1,9 @@ +from oca.pool import WrongNameError, WrongIdError from django.shortcuts import render from django.http import Http404 from django.core.urlresolvers import reverse_lazy, reverse from django.contrib.auth.mixins import LoginRequiredMixin -from django.views.generic import View, CreateView, FormView, ListView, DetailView,\ +from django.views.generic import View, CreateView, FormView, ListView, DetailView, \ DeleteView, TemplateView, UpdateView from django.http import HttpResponseRedirect from django.contrib import messages @@ -15,9 +16,7 @@ from guardian.mixins import PermissionRequiredMixin from stored_messages.settings import stored_messages_settings from stored_messages.models import Message from stored_messages.api import mark_read -from django.utils.safestring import mark_safe>>>>>>> master -246 - +from django.utils.safestring import mark_safe from membership.models import CustomUser, StripeCustomer from utils.stripe_utils import StripeUtils @@ -29,13 +28,11 @@ from .forms import HostingUserSignupForm, HostingUserLoginForm, UserHostingKeyFo from .mixins import ProcessVMSelectionMixin from opennebula_api.models import OpenNebulaManager -from opennebula_api.serializers import VirtualMachineSerializer,\ +from opennebula_api.serializers import VirtualMachineSerializer, \ VirtualMachineTemplateSerializer from django.utils.translation import ugettext_lazy as _ -from oca.pool import WrongNameError, WrongIdError - CONNECTION_ERROR = "Your VMs cannot be displayed at the moment due to a backend \ connection error. please try again in a few minutes." @@ -140,7 +137,6 @@ class HostingPricingView(ProcessVMSelectionMixin, View): 'templates': templates, 'configuration_options': configuration_options, - } return context @@ -171,7 +167,6 @@ class IndexView(View): return context def get(self, request, *args, **kwargs): - context = self.get_context_data() return render(request, self.template_name, context) @@ -209,15 +204,17 @@ class SignupValidateView(TemplateView): def get_context_data(self, **kwargs): context = super(SignupValidateView, self).get_context_data(**kwargs) - login_url = '' + str(_('login')) +'' + login_url = '' + str(_('login')) + '' home_url = 'Data Center Light' - message='{signup_success_message} {lurl} \ + message = '{signup_success_message} {lurl} \
{go_back} {hurl}.'.format( - signup_success_message = _('Thank you for signing up. We have sent an email to you. Please follow the instructions in it to activate your account. Once activated, you can login using'), - go_back = _('Go back to'), - lurl = login_url, - hurl = home_url - ) + signup_success_message=_( + 'Thank you for signing up. We have sent an email to you. ' + 'Please follow the instructions in it to activate your account. Once activated, you can login using'), + go_back=_('Go back to'), + lurl=login_url, + hurl=home_url + ) context['message'] = mark_safe(message) context['section_title'] = _('Sign up') return context @@ -229,20 +226,20 @@ class SignupValidatedView(SignupValidateView): def get_context_data(self, **kwargs): context = super(SignupValidateView, self).get_context_data(**kwargs) validated = CustomUser.validate_url(self.kwargs['validate_slug']) - login_url = '' + str(_('login')) +'' - section_title=_('Account activation') + login_url = '' + str(_('login')) + '' + section_title = _('Account activation') if validated: - message='{account_activation_string}
{login_string} {lurl}.'.format( - account_activation_string = _("Your account has been activated."), - login_string = _("You can now"), - lurl = login_url) + message = '{account_activation_string}
{login_string} {lurl}.'.format( + account_activation_string=_("Your account has been activated."), + login_string=_("You can now"), + lurl=login_url) else: home_url = 'Data Center Light' message = '{sorry_message}
{go_back_to} {hurl}'.format( - sorry_message = _("Sorry. Your request is invalid."), - go_back_to = _('Go back to'), - hurl = home_url - ) + sorry_message=_("Sorry. Your request is invalid."), + go_back_to=_('Go back to'), + hurl=home_url + ) context['message'] = mark_safe(message) context['section_title'] = section_title return context @@ -545,7 +542,7 @@ class PaymentVMView(LoginRequiredMixin, FormView): return render(request, self.template_name, context) # For now just get first one user_key = UserHostingKey.objects.filter( - user=self.request.user).first() + user=self.request.user).first() # Create a vm using logged user vm_id = manager.create_vm( diff --git a/membership/models.py b/membership/models.py index 68af27ab..96bf4c50 100644 --- a/membership/models.py +++ b/membership/models.py @@ -85,7 +85,8 @@ class CustomUser(AbstractBaseUser, PermissionsMixin): dg.send_mail(to=user.email) elif app == 'dcl': dcl_text = settings.DCL_TEXT - dcl_from_address = settings.DCL_SUPPORT_FROM_ADDRESS + # not used + # dcl_from_address = settings.DCL_SUPPORT_FROM_ADDRESS user.is_active = False if send_email is True: @@ -93,9 +94,10 @@ class CustomUser(AbstractBaseUser, PermissionsMixin): 'subject': str(_('Activate your ')) + dcl_text + str(_(' account')), 'from_address': settings.DCL_SUPPORT_FROM_ADDRESS, 'to': user.email, - 'context': {'base_url' : base_url, - 'activation_link' : reverse('hosting:validate', kwargs={'validate_slug': user.validation_slug}), - 'dcl_text' : dcl_text + 'context': {'base_url': base_url, + 'activation_link': reverse('hosting:validate', + kwargs={'validate_slug': user.validation_slug}), + 'dcl_text': dcl_text }, 'template_name': 'user_activation', 'template_path': 'datacenterlight/emails/' @@ -189,7 +191,7 @@ class StripeCustomer(models.Model): if stripe_data.get('response_object'): stripe_cus_id = stripe_data.get('response_object').get('id') - stripe_customer = StripeCustomer.objects.\ + stripe_customer = StripeCustomer.objects. \ create(user=user, stripe_id=stripe_cus_id) return stripe_customer diff --git a/opennebula_api/models.py b/opennebula_api/models.py index 5b163493..383062f1 100644 --- a/opennebula_api/models.py +++ b/opennebula_api/models.py @@ -208,7 +208,7 @@ class OpenNebulaManager(): except: raise ConnectionRefusedError - def create_vm(self, template_id, specs, ssh_key=None): + def create_vm(self, template_id, specs, ssh_key=None, vm_name=None): template = self.get_template(template_id) vm_specs_formatter = """