Merge branch 'master' into tiwariav-task/3756/landing_billing_page
This commit is contained in:
		
				commit
				
					
						e33e9cd1ae
					
				
			
		
					 11 changed files with 198 additions and 64 deletions
				
			
		| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
Pre-changelog: 1.2.3 2017-09-20
 | 
			
		||||
1.2.3: 2017-09-25
 | 
			
		||||
    * #3484: [dcl, hosting] Refactored account activation, password reset, VM order and cancellation email
 | 
			
		||||
    * #3731: [dcl, hosting] Added cdist ssh key handler 
 | 
			
		||||
    * #3628: [dcl] on hosting, VM is created at credit card info submit
 | 
			
		||||
| 
						 | 
				
			
			@ -6,6 +6,8 @@ Pre-changelog: 1.2.3 2017-09-20
 | 
			
		|||
    * #3786: [hosting] Redesigned the hosting invoice and order-confirmation page
 | 
			
		||||
    * #3728: [hosting] VM Termination animation added
 | 
			
		||||
    * #3777: [hosting] Create new VM calculator added like dcl landing
 | 
			
		||||
    * #3781: [hosting] Resend activation mail
 | 
			
		||||
    * #3806: [hosting] Fix can not create VMs after password reset
 | 
			
		||||
    * Feature: [cms, blog] Added /cms prefix for all the django-cms generated urls
 | 
			
		||||
    * Bugfix: [dcl, hosting] added host to celery error mails
 | 
			
		||||
    * Bugfix: [ungleich] Fixed wrong subdomain digitalglarus.ungleich.ch
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ msgid ""
 | 
			
		|||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2017-09-23 19:00+0530\n"
 | 
			
		||||
"POT-Creation-Date: 2017-09-24 12:34+0000\n"
 | 
			
		||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
			
		||||
| 
						 | 
				
			
			@ -28,10 +28,10 @@ msgid "User does not exist"
 | 
			
		|||
msgstr "Der Benutzer existiert nicht"
 | 
			
		||||
 | 
			
		||||
msgid "Paste here your public key"
 | 
			
		||||
msgstr "Füge deinen Public Key ein"
 | 
			
		||||
msgstr "Füge Deinen Public Key ein"
 | 
			
		||||
 | 
			
		||||
msgid "Give a name to your key"
 | 
			
		||||
msgstr "Gebe deinem SSH-Key einen Name"
 | 
			
		||||
msgstr "Gebe Deinem SSH-Key einen Name"
 | 
			
		||||
 | 
			
		||||
msgid "Key name"
 | 
			
		||||
msgstr "Key-Name"
 | 
			
		||||
| 
						 | 
				
			
			@ -156,10 +156,10 @@ msgid "Upload"
 | 
			
		|||
msgstr "Hochladen"
 | 
			
		||||
 | 
			
		||||
msgid "Your VM hosted in Switzerland"
 | 
			
		||||
msgstr "deine VM in der Schweiz"
 | 
			
		||||
msgstr "Deine VM in der Schweiz"
 | 
			
		||||
 | 
			
		||||
msgid "Set your new password"
 | 
			
		||||
msgstr "Setze dein neues Passwort"
 | 
			
		||||
msgstr "Setze Dein neues Passwort"
 | 
			
		||||
 | 
			
		||||
msgid "Reset"
 | 
			
		||||
msgstr "Zurücksetzen"
 | 
			
		||||
| 
						 | 
				
			
			@ -180,7 +180,7 @@ msgid "My VMs"
 | 
			
		|||
msgstr "Meine VMs"
 | 
			
		||||
 | 
			
		||||
msgid "My SSH Keys"
 | 
			
		||||
msgstr "Meine SSH Keys"
 | 
			
		||||
msgstr "Meine SSH-Keys"
 | 
			
		||||
 | 
			
		||||
msgid "My Bills"
 | 
			
		||||
msgstr "Meine Rechnungen"
 | 
			
		||||
| 
						 | 
				
			
			@ -229,10 +229,10 @@ msgid ""
 | 
			
		|||
"Thank you!\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"\n"
 | 
			
		||||
"Du erhälst diese E-Mail da du dein Passwort für deinen Account bei "
 | 
			
		||||
"Du erhälst diese E-Mail da Du Dein Passwort für Deinen Account bei "
 | 
			
		||||
"%(site_name)s zurücksetzen möchtest.<br/>\n"
 | 
			
		||||
"Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s"
 | 
			
		||||
"%(password_reset_url)s Solltest du kein neues Passwort angefordert haben, "
 | 
			
		||||
"%(password_reset_url)s Solltest Du kein neues Passwort angefordert haben, "
 | 
			
		||||
"dann ignoriere diese E-Mail.<br/>\n"
 | 
			
		||||
"Dankeschön!\n"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -245,10 +245,10 @@ msgid ""
 | 
			
		|||
"If you didn't request a new password, ignore this e-mail.\n"
 | 
			
		||||
"Thank you!\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Du erhälst diese E-Mail da du dein Passwort für deinen Account bei "
 | 
			
		||||
"Du erhälst diese E-Mail da Du Dein Passwort für Deinen Account bei "
 | 
			
		||||
"%(site_name)s zurücksetzen möchtest.\n"
 | 
			
		||||
"Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s"
 | 
			
		||||
"%(password_reset_url)s Solltest du kein neues Passwort angefordert haben, "
 | 
			
		||||
"%(password_reset_url)s Solltest Du kein neues Passwort angefordert haben, "
 | 
			
		||||
"dann ignoriere diese E-Mail.\n"
 | 
			
		||||
"Dankeschön!\n"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -260,11 +260,11 @@ msgid ""
 | 
			
		|||
"If you want to order a new virtual machine, you can do it by clicking <a "
 | 
			
		||||
"href=\"%(base_url)s%(my_virtual_machines_url)s\">this link</a>.<br/>\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] gekündigt "
 | 
			
		||||
"Du erhälst diese E-Mail, Da Deine virtuelle Maschine [%(vm_name)s] gekündigt "
 | 
			
		||||
"wurde.<br/>\n"
 | 
			
		||||
"Um deinen Auftragsstatus zu sehen, klicke auf die [my VM page] unten.<br/>\n"
 | 
			
		||||
"Falls du eine neue virtuelle Maschine bestellen möchtest, kannst du dies "
 | 
			
		||||
"tun, indem du <a href=\"%(base_url)s%(my_virtual_machines_url)s\">diesen "
 | 
			
		||||
"Um Deinen Auftragsstatus zu sehen, klicke auf die [my VM page] unten.<br/>\n"
 | 
			
		||||
"Falls Du eine neue virtuelle Maschine bestellen möchtest, kannst Du dies "
 | 
			
		||||
"tun, indem Du <a href=\"%(base_url)s%(my_virtual_machines_url)s\">diesen "
 | 
			
		||||
"Link klickst</a>.<br/>\n"
 | 
			
		||||
 | 
			
		||||
msgid "My VM page"
 | 
			
		||||
| 
						 | 
				
			
			@ -280,12 +280,12 @@ msgid ""
 | 
			
		|||
"link.\n"
 | 
			
		||||
"%(base_url)s%(my_virtual_machines_url)s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] gekündigt "
 | 
			
		||||
"Du erhälst diese E-Mail, da Deine virtuelle Maschine [%(vm_name)s] gekündigt "
 | 
			
		||||
"wurde.\n"
 | 
			
		||||
"Um deinen Auftragsstatus zu sehen, klicke hier.\n"
 | 
			
		||||
"Um Deinen Auftragsstatus zu sehen, klicke hier.\n"
 | 
			
		||||
"%(base_url)s%(vm_order_url)s\n"
 | 
			
		||||
"Falls du eine neue virtuelle Maschine bestellen möchtest, kannst du dies "
 | 
			
		||||
"tun, indem du diesen Link klickst.\n"
 | 
			
		||||
"Falls Du eine neue virtuelle Maschine bestellen möchtest, kannst Du dies "
 | 
			
		||||
"tun, indem Du diesen Link klickst.\n"
 | 
			
		||||
"%(base_url)s%(my_virtual_machines_url)s\n"
 | 
			
		||||
 | 
			
		||||
msgid "Toggle navigation"
 | 
			
		||||
| 
						 | 
				
			
			@ -306,6 +306,9 @@ msgstr "Registrieren"
 | 
			
		|||
msgid "Forgot your password ? "
 | 
			
		||||
msgstr "Passwort vergessen?"
 | 
			
		||||
 | 
			
		||||
msgid "Resend activation link"
 | 
			
		||||
msgstr "Aktivierungslink noch einmal senden"
 | 
			
		||||
 | 
			
		||||
msgid "Notifications"
 | 
			
		||||
msgstr "Benachrichtigungen"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -353,7 +356,7 @@ msgid "Order summary"
 | 
			
		|||
msgstr "Bestellungsübersicht"
 | 
			
		||||
 | 
			
		||||
msgid "Product"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgstr "Produkt"
 | 
			
		||||
 | 
			
		||||
msgid "Cores"
 | 
			
		||||
msgstr "Prozessorkerne"
 | 
			
		||||
| 
						 | 
				
			
			@ -588,7 +591,7 @@ msgid "We are here to help you!"
 | 
			
		|||
msgstr "Wir sind hier, um Dir zu helfen!"
 | 
			
		||||
 | 
			
		||||
msgid "CONTACT"
 | 
			
		||||
msgstr "KONTACT"
 | 
			
		||||
msgstr "KONTAKT"
 | 
			
		||||
 | 
			
		||||
msgid "Terminate your Virtual Machine"
 | 
			
		||||
msgstr "Deine Virtuelle Maschine beenden"
 | 
			
		||||
| 
						 | 
				
			
			@ -601,8 +604,11 @@ msgstr ""
 | 
			
		|||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Your Virtual Machine %(virtual_machine.name)s is successfully terminated!"
 | 
			
		||||
msgstr "Deine Virtuelle Machine (VM) %(virtual_machine.name)s wurde erfolgreich beendet!"
 | 
			
		||||
"Your Virtual Machine <strong>%(machine_name)s</strong> is successfully "
 | 
			
		||||
"terminated!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Deine Virtuelle Machine (VM) <strong>%(machine_name)s</strong> wurde erfolgreich "
 | 
			
		||||
"beendet!"
 | 
			
		||||
 | 
			
		||||
msgid "Virtual Machines"
 | 
			
		||||
msgstr "Virtuelle Maschinen"
 | 
			
		||||
| 
						 | 
				
			
			@ -644,13 +650,13 @@ msgid "Sorry. Your request is invalid."
 | 
			
		|||
msgstr "Entschuldigung, deine Anfrage ist ungültig."
 | 
			
		||||
 | 
			
		||||
msgid "Password has been reset."
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgstr "Dein Passwort wurde erfolgreich zurückgesetzt."
 | 
			
		||||
 | 
			
		||||
msgid "Password reset has not been successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgstr "Dein Passwort konnte nicht zurückgesetzt werden."
 | 
			
		||||
 | 
			
		||||
msgid "The reset password link is no longer valid."
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgstr "Der Link zum Zurücksetzen Deines Passwortes ist nicht mehr gültig."
 | 
			
		||||
 | 
			
		||||
msgid "Invalid credit card"
 | 
			
		||||
msgstr "Ungültige Kreditkarte"
 | 
			
		||||
| 
						 | 
				
			
			@ -707,7 +713,7 @@ msgstr "VM Kündigung"
 | 
			
		|||
#~ msgstr "VM %(VM_ID)s erfolgreich beendet"
 | 
			
		||||
 | 
			
		||||
#~ msgid "days"
 | 
			
		||||
#~ msgstr "tage"
 | 
			
		||||
#~ msgstr "Tage"
 | 
			
		||||
 | 
			
		||||
#~ msgid "New Virtual Machine"
 | 
			
		||||
#~ msgstr "Neue virtuelle Maschine"
 | 
			
		||||
| 
						 | 
				
			
			@ -740,7 +746,7 @@ msgstr "VM Kündigung"
 | 
			
		|||
#~ msgstr "Meine Bestellungen"
 | 
			
		||||
 | 
			
		||||
#~ msgid "SSH Keys"
 | 
			
		||||
#~ msgstr "SSH Key"
 | 
			
		||||
#~ msgstr "SSH Keys"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Notifications "
 | 
			
		||||
#~ msgstr "Benachrichtigungen"
 | 
			
		||||
| 
						 | 
				
			
			@ -788,19 +794,19 @@ msgstr "VM Kündigung"
 | 
			
		|||
#~ msgstr "Hinzufügen"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Keys"
 | 
			
		||||
#~ msgstr "Schlüssel"
 | 
			
		||||
#~ msgstr "Keys"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Log in"
 | 
			
		||||
#~ msgstr "Anmelden"
 | 
			
		||||
 | 
			
		||||
#~ msgid "You haven been logged out"
 | 
			
		||||
#~ msgstr "Sie wurden abgmeldet"
 | 
			
		||||
#~ msgstr "Du wurdest abgemeldet"
 | 
			
		||||
 | 
			
		||||
#~ msgid "How it works"
 | 
			
		||||
#~ msgstr "So funktioniert es"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Your infrastructure"
 | 
			
		||||
#~ msgstr "deine Infrastruktur"
 | 
			
		||||
#~ msgstr "Deine Infrastruktur"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Our inftrastructure"
 | 
			
		||||
#~ msgstr "Unsere Infrastruktur"
 | 
			
		||||
| 
						 | 
				
			
			@ -809,10 +815,10 @@ msgstr "VM Kündigung"
 | 
			
		|||
#~ msgstr "Preise"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Access Key"
 | 
			
		||||
#~ msgstr "Zugriffsschlüssel"
 | 
			
		||||
#~ msgstr "SSH Key"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Upload your own key. "
 | 
			
		||||
#~ msgstr "Lade deinen Key hoch"
 | 
			
		||||
#~ msgstr "Lade Deinen Key hoch"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Generate Key Pair"
 | 
			
		||||
#~ msgstr "Schlüsselpaar generieren"
 | 
			
		||||
| 
						 | 
				
			
			@ -836,5 +842,5 @@ msgstr "VM Kündigung"
 | 
			
		|||
#~ "Your SSH private key was already generated and downloaded, if you lost "
 | 
			
		||||
#~ "it, contact us. "
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Dein privater SSH Schlüssel wurde bereits generiert und heruntergeladen. "
 | 
			
		||||
#~ "Falls du ihn verloren hast, kontaktiere uns."
 | 
			
		||||
#~ "Dein privater SSH Key wurde bereits generiert und heruntergeladen. "
 | 
			
		||||
#~ "Falls Du ihn verloren hast, kontaktiere uns."
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,6 +44,8 @@
 | 
			
		|||
                        <a class="unlink" href="{% url 'hosting:signup' %}">{% trans "Sign up"%}</a>
 | 
			
		||||
                        <span class="text"> or </span>
 | 
			
		||||
                        <a class="unlink" href="{% url 'hosting:reset_password' %}">{% trans "Forgot your password ? "%}</a>
 | 
			
		||||
                        <span class="text"> or </span><br/>
 | 
			
		||||
                        <a class="unlink" href="{% url 'hosting:resend_activation_link' %}">{% trans "Resend activation link"%}</a>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										36
									
								
								hosting/templates/hosting/resend_activation_link.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								hosting/templates/hosting/resend_activation_link.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
{% extends "hosting/base_short.html" %}
 | 
			
		||||
{% load staticfiles bootstrap3%}
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
 | 
			
		||||
{% block navbar %}
 | 
			
		||||
    {% include  'hosting/includes/_navbar_transparent.html' %}
 | 
			
		||||
{% endblock navbar %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
<div class="auth-container">
 | 
			
		||||
   <div class="auth-bg"></div>
 | 
			
		||||
        <div class="auth-center">
 | 
			
		||||
            <div class="auth-title">
 | 
			
		||||
                <h2>{% trans "Your VM hosted in Switzerland"%}</h2>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="auth-content">
 | 
			
		||||
                <div class="intro-message auth-box sign-up">
 | 
			
		||||
                    <h2  class="section-heading">{% trans "Resend activation link"%}</h2>
 | 
			
		||||
                    <form action="{% url 'hosting:resend_activation_link' %}" method="post" class="form" novalidate>
 | 
			
		||||
                        {% csrf_token %}
 | 
			
		||||
                        {% for field in form %}
 | 
			
		||||
                            {% bootstrap_field field show_label=False %}
 | 
			
		||||
                        {% endfor %}
 | 
			
		||||
                        {% buttons %}
 | 
			
		||||
                            <button type="submit" class="btn btn-block btn-success">
 | 
			
		||||
                                {% trans "Submit"%}
 | 
			
		||||
                            </button>
 | 
			
		||||
                        {% endbuttons %}
 | 
			
		||||
                    </form>
 | 
			
		||||
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
</div>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
| 
						 | 
				
			
			@ -8,8 +8,7 @@ from .views import (
 | 
			
		|||
    MarkAsReadNotificationView, PasswordResetView, PasswordResetConfirmView,
 | 
			
		||||
    HostingPricingView, CreateVirtualMachinesView, HostingBillListView,
 | 
			
		||||
    HostingBillDetailView, SSHKeyDeleteView, SSHKeyCreateView, SSHKeyListView,
 | 
			
		||||
    SSHKeyChoiceView, DashboardView, SettingsView)
 | 
			
		||||
 | 
			
		||||
    SSHKeyChoiceView, DashboardView, SettingsView, ResendActivationEmailView)
 | 
			
		||||
 | 
			
		||||
urlpatterns = [
 | 
			
		||||
    url(r'index/?$', IndexView.as_view(), name='index'),
 | 
			
		||||
| 
						 | 
				
			
			@ -52,6 +51,8 @@ urlpatterns = [
 | 
			
		|||
    url(r'signup/?$', SignupView.as_view(), name='signup'),
 | 
			
		||||
    url(r'signup-validate/?$', SignupValidateView.as_view(),
 | 
			
		||||
        name='signup-validate'),
 | 
			
		||||
    url(r'resend-activation-link/?$', ResendActivationEmailView.as_view(),
 | 
			
		||||
        name='resend_activation_link'),
 | 
			
		||||
    url(r'reset-password/?$', PasswordResetView.as_view(),
 | 
			
		||||
        name='reset_password'),
 | 
			
		||||
    url(r'reset-password-confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,12 +33,15 @@ from membership.models import CustomUser, StripeCustomer
 | 
			
		|||
from opennebula_api.models import OpenNebulaManager
 | 
			
		||||
from opennebula_api.serializers import VirtualMachineSerializer, \
 | 
			
		||||
    VirtualMachineTemplateSerializer, VMTemplateSerializer
 | 
			
		||||
from utils.forms import BillingAddressForm, PasswordResetRequestForm, \
 | 
			
		||||
    UserBillingAddressForm
 | 
			
		||||
from utils.forms import (
 | 
			
		||||
    BillingAddressForm, PasswordResetRequestForm, UserBillingAddressForm,
 | 
			
		||||
    ResendActivationEmailForm
 | 
			
		||||
)
 | 
			
		||||
from utils.mailer import BaseEmail
 | 
			
		||||
from utils.stripe_utils import StripeUtils
 | 
			
		||||
from utils.views import (
 | 
			
		||||
    PasswordResetViewMixin, PasswordResetConfirmViewMixin, LoginViewMixin
 | 
			
		||||
    PasswordResetViewMixin, PasswordResetConfirmViewMixin, LoginViewMixin,
 | 
			
		||||
    ResendActivationLinkViewMixin
 | 
			
		||||
)
 | 
			
		||||
from .forms import HostingUserSignupForm, HostingUserLoginForm, \
 | 
			
		||||
    UserHostingKeyForm, generate_ssh_key_name
 | 
			
		||||
| 
						 | 
				
			
			@ -282,6 +285,14 @@ class SignupValidatedView(SignupValidateView):
 | 
			
		|||
        return context
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ResendActivationEmailView(ResendActivationLinkViewMixin):
 | 
			
		||||
    template_name = 'hosting/resend_activation_link.html'
 | 
			
		||||
    form_class = ResendActivationEmailForm
 | 
			
		||||
    success_url = reverse_lazy('hosting:login')
 | 
			
		||||
    email_template_path = 'datacenterlight/emails/'
 | 
			
		||||
    email_template_name = 'user_activation'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PasswordResetView(PasswordResetViewMixin):
 | 
			
		||||
    site = 'dcl'
 | 
			
		||||
    template_name = 'hosting/reset_password.html'
 | 
			
		||||
| 
						 | 
				
			
			@ -319,7 +330,7 @@ class PasswordResetConfirmView(PasswordResetConfirmViewMixin):
 | 
			
		|||
                messages.success(request, _('Password has been reset.'))
 | 
			
		||||
 | 
			
		||||
                # Change opennebula password
 | 
			
		||||
                opennebula_client.change_user_password(new_password)
 | 
			
		||||
                opennebula_client.change_user_password(user.password)
 | 
			
		||||
 | 
			
		||||
                return self.form_valid(form)
 | 
			
		||||
            else:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -438,11 +438,11 @@ class OpenNebulaManager():
 | 
			
		|||
        self.oneadmin_client.call(oca.VmTemplate.METHODS[
 | 
			
		||||
                                      'delete'], template_id, False)
 | 
			
		||||
 | 
			
		||||
    def change_user_password(self, new_password):
 | 
			
		||||
    def change_user_password(self, passwd_hash):
 | 
			
		||||
        self.oneadmin_client.call(
 | 
			
		||||
            oca.User.METHODS['passwd'],
 | 
			
		||||
            self.opennebula_user.id,
 | 
			
		||||
            new_password
 | 
			
		||||
            passwd_hash
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def add_public_key(self, user, public_key='', merge=False):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -96,5 +96,4 @@ pyflakes==1.5.0
 | 
			
		|||
billiard==3.5.0.3
 | 
			
		||||
amqp==2.2.1
 | 
			
		||||
vine==1.1.4
 | 
			
		||||
#git+https://github.com/ungleich/cdist.git#egg=cdist
 | 
			
		||||
file:///home/app/cdist#egg=cdist
 | 
			
		||||
cdist==4.7.0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,8 @@ class SignupFormMixin(forms.ModelForm):
 | 
			
		|||
        model = CustomUser
 | 
			
		||||
        fields = ['name', 'email', 'password']
 | 
			
		||||
        widgets = {
 | 
			
		||||
            'name': forms.TextInput(attrs={'placeholder': _('Enter your name or company name')}),
 | 
			
		||||
            'name': forms.TextInput(
 | 
			
		||||
                attrs={'placeholder': _('Enter your name or company name')}),
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    def clean_confirm_password(self):
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +43,7 @@ class LoginFormMixin(forms.Form):
 | 
			
		|||
        is_auth = authenticate(email=email, password=password)
 | 
			
		||||
        if not is_auth:
 | 
			
		||||
            raise forms.ValidationError(
 | 
			
		||||
                "Your username and/or password were incorrect.")
 | 
			
		||||
                _("Your username and/or password were incorrect."))
 | 
			
		||||
        return self.cleaned_data
 | 
			
		||||
 | 
			
		||||
    def clean_email(self):
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +52,24 @@ class LoginFormMixin(forms.Form):
 | 
			
		|||
            CustomUser.objects.get(email=email)
 | 
			
		||||
            return email
 | 
			
		||||
        except CustomUser.DoesNotExist:
 | 
			
		||||
            raise forms.ValidationError("User does not exist")
 | 
			
		||||
            raise forms.ValidationError(_("User does not exist"))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ResendActivationEmailForm(forms.Form):
 | 
			
		||||
    email = forms.CharField(widget=forms.EmailInput())
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        fields = ['email']
 | 
			
		||||
 | 
			
		||||
    def clean_email(self):
 | 
			
		||||
        email = self.cleaned_data.get('email')
 | 
			
		||||
        try:
 | 
			
		||||
            c = CustomUser.objects.get(email=email)
 | 
			
		||||
            if c.validated == 1:
 | 
			
		||||
                raise forms.ValidationError(_("The account is already active."))
 | 
			
		||||
            return email
 | 
			
		||||
        except CustomUser.DoesNotExist:
 | 
			
		||||
            raise forms.ValidationError(_("User does not exist"))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PasswordResetRequestForm(forms.Form):
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +84,7 @@ class PasswordResetRequestForm(forms.Form):
 | 
			
		|||
            CustomUser.objects.get(email=email)
 | 
			
		||||
            return email
 | 
			
		||||
        except CustomUser.DoesNotExist:
 | 
			
		||||
            raise forms.ValidationError("User does not exist")
 | 
			
		||||
            raise forms.ValidationError(_("User does not exist"))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SetPasswordForm(forms.Form):
 | 
			
		||||
| 
						 | 
				
			
			@ -75,11 +93,11 @@ class SetPasswordForm(forms.Form):
 | 
			
		|||
    password
 | 
			
		||||
    """
 | 
			
		||||
    error_messages = {
 | 
			
		||||
        'password_mismatch': ("The two password fields didn't match."),
 | 
			
		||||
        'password_mismatch': _("The two password fields didn't match."),
 | 
			
		||||
    }
 | 
			
		||||
    new_password1 = forms.CharField(label=("New password"),
 | 
			
		||||
    new_password1 = forms.CharField(label=_("New password"),
 | 
			
		||||
                                    widget=forms.PasswordInput)
 | 
			
		||||
    new_password2 = forms.CharField(label=("New password confirmation"),
 | 
			
		||||
    new_password2 = forms.CharField(label=_("New password confirmation"),
 | 
			
		||||
                                    widget=forms.PasswordInput)
 | 
			
		||||
 | 
			
		||||
    def clean_new_password2(self):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ msgid ""
 | 
			
		|||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2017-09-02 11:50+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2017-09-25 20:11+0000\n"
 | 
			
		||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
			
		||||
| 
						 | 
				
			
			@ -738,6 +738,24 @@ msgstr ""
 | 
			
		|||
msgid "Enter your name or company name"
 | 
			
		||||
msgstr "Geben Sie Ihren Namen oder der Ihrer Firma ein"
 | 
			
		||||
 | 
			
		||||
msgid "Your username and/or password were incorrect."
 | 
			
		||||
msgstr "Dein Benutzername und/oder Dein Passwort ist falsch."
 | 
			
		||||
 | 
			
		||||
msgid "User does not exist"
 | 
			
		||||
msgstr "Der Benutzer existiert nicht"
 | 
			
		||||
 | 
			
		||||
msgid "The account is already active."
 | 
			
		||||
msgstr "Das Benutzerkonto ist bereits aktiv."
 | 
			
		||||
 | 
			
		||||
msgid "The two password fields didn't match."
 | 
			
		||||
msgstr "Die beiden Passwörter stimmen nicht überein."
 | 
			
		||||
 | 
			
		||||
msgid "New password"
 | 
			
		||||
msgstr "Neues Passwort"
 | 
			
		||||
 | 
			
		||||
msgid "New password confirmation"
 | 
			
		||||
msgstr "Neues Passwort Bestätigung"
 | 
			
		||||
 | 
			
		||||
msgid "Cardholder Name"
 | 
			
		||||
msgstr "Name des Kartenbesitzer"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -768,17 +786,25 @@ msgstr "Telefon"
 | 
			
		|||
msgid "Message"
 | 
			
		||||
msgstr "Nachricht"
 | 
			
		||||
 | 
			
		||||
msgid "An email with the activation link has been sent to your email"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Der Link zum Zurücksetzen deines Passwortes wurde an deine E-Mail gesendet"
 | 
			
		||||
 | 
			
		||||
msgid "Account Activation"
 | 
			
		||||
msgstr "Accountaktivierung"
 | 
			
		||||
 | 
			
		||||
msgid "The link to reset your email has been sent to your email"
 | 
			
		||||
msgstr "Der Link zum Zur?cksetzen deines Passwortes wurde an deine E-Mail gesendet"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Der Link zum Zurücksetzen deines Passwortes wurde an deine E-Mail gesendet"
 | 
			
		||||
 | 
			
		||||
msgid "Password Reset"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgstr "Passwort zurücksetzen"
 | 
			
		||||
 | 
			
		||||
msgid "Password has been reset."
 | 
			
		||||
msgstr "Das Passwort wurde zur?ckgesetzt."
 | 
			
		||||
msgstr "Das Passwort wurde zurückgesetzt."
 | 
			
		||||
 | 
			
		||||
msgid "Password reset has not been successful."
 | 
			
		||||
msgstr "Das Zur?cksetzen war nicht erfolgreich."
 | 
			
		||||
msgstr "Das Zurücksetzen war nicht erfolgreich."
 | 
			
		||||
 | 
			
		||||
msgid "The reset password link is no longer valid."
 | 
			
		||||
msgstr "Der Link zum Zur?cksetzen deines Passwortes ist nicht l?nger g?ltig."
 | 
			
		||||
msgstr "Der Link zum Zurücksetzen Deines Passwortes ist nicht länger gültig."
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@ from django.conf import settings
 | 
			
		|||
from django.contrib import messages
 | 
			
		||||
from django.contrib.auth import authenticate, login
 | 
			
		||||
from django.contrib.auth.tokens import default_token_generator
 | 
			
		||||
from django.core.urlresolvers import reverse_lazy
 | 
			
		||||
from django.http import HttpResponseRedirect
 | 
			
		||||
from django.utils.encoding import force_bytes
 | 
			
		||||
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
 | 
			
		||||
| 
						 | 
				
			
			@ -63,9 +64,45 @@ class LoginViewMixin(FormView):
 | 
			
		|||
        return super(LoginViewMixin, self).get(request, *args, **kwargs)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ResendActivationLinkViewMixin(FormView):
 | 
			
		||||
    success_message = _(
 | 
			
		||||
        "An email with the activation link has been sent to your email")
 | 
			
		||||
 | 
			
		||||
    def generate_email_context(self, user):
 | 
			
		||||
        context = {
 | 
			
		||||
            'base_url': "{0}://{1}".format(self.request.scheme,
 | 
			
		||||
                                           self.request.get_host()),
 | 
			
		||||
            'activation_link': reverse_lazy(
 | 
			
		||||
                'hosting:validate',
 | 
			
		||||
                kwargs={'validate_slug': user.validation_slug}
 | 
			
		||||
            ),
 | 
			
		||||
            'dcl_text': settings.DCL_TEXT,
 | 
			
		||||
        }
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
    def form_valid(self, form):
 | 
			
		||||
        email = form.cleaned_data.get('email')
 | 
			
		||||
        user = CustomUser.objects.get(email=email)
 | 
			
		||||
        messages.add_message(self.request, messages.SUCCESS,
 | 
			
		||||
                             self.success_message)
 | 
			
		||||
        context = self.generate_email_context(user)
 | 
			
		||||
        email_data = {
 | 
			
		||||
            'subject': '{dcl_text} {account_activation}'.format(
 | 
			
		||||
                dcl_text=settings.DCL_TEXT,
 | 
			
		||||
                account_activation=_('Account Activation')
 | 
			
		||||
            ),
 | 
			
		||||
            'to': email,
 | 
			
		||||
            'context': context,
 | 
			
		||||
            'template_name': self.email_template_name,
 | 
			
		||||
            'template_path': self.email_template_path,
 | 
			
		||||
            'from_address': settings.DCL_SUPPORT_FROM_ADDRESS
 | 
			
		||||
        }
 | 
			
		||||
        email = BaseEmail(**email_data)
 | 
			
		||||
        email.send()
 | 
			
		||||
        return HttpResponseRedirect(self.get_success_url())
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PasswordResetViewMixin(FormView):
 | 
			
		||||
    # template_name = 'hosting/reset_password.html'
 | 
			
		||||
    # form_class = PasswordResetRequestForm
 | 
			
		||||
    success_message = _(
 | 
			
		||||
        "The link to reset your email has been sent to your email")
 | 
			
		||||
    site = ''
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +115,6 @@ class PasswordResetViewMixin(FormView):
 | 
			
		|||
            'site_name': 'ungleich' if self.site != 'dcl' else settings.DCL_TEXT,
 | 
			
		||||
            'base_url': "{0}://{1}".format(self.request.scheme,
 | 
			
		||||
                                           self.request.get_host())
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -104,11 +140,8 @@ class PasswordResetViewMixin(FormView):
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
class PasswordResetConfirmViewMixin(FormView):
 | 
			
		||||
    # template_name = 'hosting/confirm_reset_password.html'
 | 
			
		||||
    form_class = SetPasswordForm
 | 
			
		||||
 | 
			
		||||
    # success_url = reverse_lazy('hosting:login')
 | 
			
		||||
 | 
			
		||||
    def post(self, request, uidb64=None, token=None, *arg, **kwargs):
 | 
			
		||||
        try:
 | 
			
		||||
            uid = urlsafe_base64_decode(uidb64)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue