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 |     * #3484: [dcl, hosting] Refactored account activation, password reset, VM order and cancellation email | ||||||
|     * #3731: [dcl, hosting] Added cdist ssh key handler  |     * #3731: [dcl, hosting] Added cdist ssh key handler  | ||||||
|     * #3628: [dcl] on hosting, VM is created at credit card info submit |     * #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 |     * #3786: [hosting] Redesigned the hosting invoice and order-confirmation page | ||||||
|     * #3728: [hosting] VM Termination animation added |     * #3728: [hosting] VM Termination animation added | ||||||
|     * #3777: [hosting] Create new VM calculator added like dcl landing |     * #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 |     * Feature: [cms, blog] Added /cms prefix for all the django-cms generated urls | ||||||
|     * Bugfix: [dcl, hosting] added host to celery error mails |     * Bugfix: [dcl, hosting] added host to celery error mails | ||||||
|     * Bugfix: [ungleich] Fixed wrong subdomain digitalglarus.ungleich.ch |     * Bugfix: [ungleich] Fixed wrong subdomain digitalglarus.ungleich.ch | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: PACKAGE VERSION\n" | "Project-Id-Version: PACKAGE VERSION\n" | ||||||
| "Report-Msgid-Bugs-To: \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" | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | "Language-Team: LANGUAGE <LL@li.org>\n" | ||||||
|  | @ -28,10 +28,10 @@ msgid "User does not exist" | ||||||
| msgstr "Der Benutzer existiert nicht" | msgstr "Der Benutzer existiert nicht" | ||||||
| 
 | 
 | ||||||
| msgid "Paste here your public key" | 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" | msgid "Give a name to your key" | ||||||
| msgstr "Gebe deinem SSH-Key einen Name" | msgstr "Gebe Deinem SSH-Key einen Name" | ||||||
| 
 | 
 | ||||||
| msgid "Key name" | msgid "Key name" | ||||||
| msgstr "Key-Name" | msgstr "Key-Name" | ||||||
|  | @ -156,10 +156,10 @@ msgid "Upload" | ||||||
| msgstr "Hochladen" | msgstr "Hochladen" | ||||||
| 
 | 
 | ||||||
| msgid "Your VM hosted in Switzerland" | msgid "Your VM hosted in Switzerland" | ||||||
| msgstr "deine VM in der Schweiz" | msgstr "Deine VM in der Schweiz" | ||||||
| 
 | 
 | ||||||
| msgid "Set your new password" | msgid "Set your new password" | ||||||
| msgstr "Setze dein neues Passwort" | msgstr "Setze Dein neues Passwort" | ||||||
| 
 | 
 | ||||||
| msgid "Reset" | msgid "Reset" | ||||||
| msgstr "Zurücksetzen" | msgstr "Zurücksetzen" | ||||||
|  | @ -180,7 +180,7 @@ msgid "My VMs" | ||||||
| msgstr "Meine VMs" | msgstr "Meine VMs" | ||||||
| 
 | 
 | ||||||
| msgid "My SSH Keys" | msgid "My SSH Keys" | ||||||
| msgstr "Meine SSH Keys" | msgstr "Meine SSH-Keys" | ||||||
| 
 | 
 | ||||||
| msgid "My Bills" | msgid "My Bills" | ||||||
| msgstr "Meine Rechnungen" | msgstr "Meine Rechnungen" | ||||||
|  | @ -229,10 +229,10 @@ msgid "" | ||||||
| "Thank you!\n" | "Thank you!\n" | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "\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" | "%(site_name)s zurücksetzen möchtest.<br/>\n" | ||||||
| "Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" | "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" | "dann ignoriere diese E-Mail.<br/>\n" | ||||||
| "Dankeschön!\n" | "Dankeschön!\n" | ||||||
| 
 | 
 | ||||||
|  | @ -245,10 +245,10 @@ msgid "" | ||||||
| "If you didn't request a new password, ignore this e-mail.\n" | "If you didn't request a new password, ignore this e-mail.\n" | ||||||
| "Thank you!\n" | "Thank you!\n" | ||||||
| msgstr "" | 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" | "%(site_name)s zurücksetzen möchtest.\n" | ||||||
| "Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" | "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" | "dann ignoriere diese E-Mail.\n" | ||||||
| "Dankeschön!\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 " | "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" | "href=\"%(base_url)s%(my_virtual_machines_url)s\">this link</a>.<br/>\n" | ||||||
| msgstr "" | 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" | "wurde.<br/>\n" | ||||||
| "Um deinen Auftragsstatus zu sehen, klicke auf die [my VM page] unten.<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 " | "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 " | "tun, indem Du <a href=\"%(base_url)s%(my_virtual_machines_url)s\">diesen " | ||||||
| "Link klickst</a>.<br/>\n" | "Link klickst</a>.<br/>\n" | ||||||
| 
 | 
 | ||||||
| msgid "My VM page" | msgid "My VM page" | ||||||
|  | @ -280,12 +280,12 @@ msgid "" | ||||||
| "link.\n" | "link.\n" | ||||||
| "%(base_url)s%(my_virtual_machines_url)s\n" | "%(base_url)s%(my_virtual_machines_url)s\n" | ||||||
| msgstr "" | 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" | "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" | "%(base_url)s%(vm_order_url)s\n" | ||||||
| "Falls du eine neue virtuelle Maschine bestellen möchtest, kannst du dies " | "Falls Du eine neue virtuelle Maschine bestellen möchtest, kannst Du dies " | ||||||
| "tun, indem du diesen Link klickst.\n" | "tun, indem Du diesen Link klickst.\n" | ||||||
| "%(base_url)s%(my_virtual_machines_url)s\n" | "%(base_url)s%(my_virtual_machines_url)s\n" | ||||||
| 
 | 
 | ||||||
| msgid "Toggle navigation" | msgid "Toggle navigation" | ||||||
|  | @ -306,6 +306,9 @@ msgstr "Registrieren" | ||||||
| msgid "Forgot your password ? " | msgid "Forgot your password ? " | ||||||
| msgstr "Passwort vergessen?" | msgstr "Passwort vergessen?" | ||||||
| 
 | 
 | ||||||
|  | msgid "Resend activation link" | ||||||
|  | msgstr "Aktivierungslink noch einmal senden" | ||||||
|  | 
 | ||||||
| msgid "Notifications" | msgid "Notifications" | ||||||
| msgstr "Benachrichtigungen" | msgstr "Benachrichtigungen" | ||||||
| 
 | 
 | ||||||
|  | @ -353,7 +356,7 @@ msgid "Order summary" | ||||||
| msgstr "Bestellungsübersicht" | msgstr "Bestellungsübersicht" | ||||||
| 
 | 
 | ||||||
| msgid "Product" | msgid "Product" | ||||||
| msgstr "" | msgstr "Produkt" | ||||||
| 
 | 
 | ||||||
| msgid "Cores" | msgid "Cores" | ||||||
| msgstr "Prozessorkerne" | msgstr "Prozessorkerne" | ||||||
|  | @ -588,7 +591,7 @@ msgid "We are here to help you!" | ||||||
| msgstr "Wir sind hier, um Dir zu helfen!" | msgstr "Wir sind hier, um Dir zu helfen!" | ||||||
| 
 | 
 | ||||||
| msgid "CONTACT" | msgid "CONTACT" | ||||||
| msgstr "KONTACT" | msgstr "KONTAKT" | ||||||
| 
 | 
 | ||||||
| msgid "Terminate your Virtual Machine" | msgid "Terminate your Virtual Machine" | ||||||
| msgstr "Deine Virtuelle Maschine beenden" | msgstr "Deine Virtuelle Maschine beenden" | ||||||
|  | @ -601,8 +604,11 @@ msgstr "" | ||||||
| 
 | 
 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "" | msgid "" | ||||||
| "Your Virtual Machine %(virtual_machine.name)s is successfully terminated!" | "Your Virtual Machine <strong>%(machine_name)s</strong> is successfully " | ||||||
| msgstr "Deine Virtuelle Machine (VM) %(virtual_machine.name)s wurde erfolgreich beendet!" | "terminated!" | ||||||
|  | msgstr "" | ||||||
|  | "Deine Virtuelle Machine (VM) <strong>%(machine_name)s</strong> wurde erfolgreich " | ||||||
|  | "beendet!" | ||||||
| 
 | 
 | ||||||
| msgid "Virtual Machines" | msgid "Virtual Machines" | ||||||
| msgstr "Virtuelle Maschinen" | msgstr "Virtuelle Maschinen" | ||||||
|  | @ -644,13 +650,13 @@ msgid "Sorry. Your request is invalid." | ||||||
| msgstr "Entschuldigung, deine Anfrage ist ungültig." | msgstr "Entschuldigung, deine Anfrage ist ungültig." | ||||||
| 
 | 
 | ||||||
| msgid "Password has been reset." | msgid "Password has been reset." | ||||||
| msgstr "" | msgstr "Dein Passwort wurde erfolgreich zurückgesetzt." | ||||||
| 
 | 
 | ||||||
| msgid "Password reset has not been successful." | 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." | 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" | msgid "Invalid credit card" | ||||||
| msgstr "Ungültige Kreditkarte" | msgstr "Ungültige Kreditkarte" | ||||||
|  | @ -707,7 +713,7 @@ msgstr "VM Kündigung" | ||||||
| #~ msgstr "VM %(VM_ID)s erfolgreich beendet" | #~ msgstr "VM %(VM_ID)s erfolgreich beendet" | ||||||
| 
 | 
 | ||||||
| #~ msgid "days" | #~ msgid "days" | ||||||
| #~ msgstr "tage" | #~ msgstr "Tage" | ||||||
| 
 | 
 | ||||||
| #~ msgid "New Virtual Machine" | #~ msgid "New Virtual Machine" | ||||||
| #~ msgstr "Neue virtuelle Maschine" | #~ msgstr "Neue virtuelle Maschine" | ||||||
|  | @ -740,7 +746,7 @@ msgstr "VM Kündigung" | ||||||
| #~ msgstr "Meine Bestellungen" | #~ msgstr "Meine Bestellungen" | ||||||
| 
 | 
 | ||||||
| #~ msgid "SSH Keys" | #~ msgid "SSH Keys" | ||||||
| #~ msgstr "SSH Key" | #~ msgstr "SSH Keys" | ||||||
| 
 | 
 | ||||||
| #~ msgid "Notifications " | #~ msgid "Notifications " | ||||||
| #~ msgstr "Benachrichtigungen" | #~ msgstr "Benachrichtigungen" | ||||||
|  | @ -788,19 +794,19 @@ msgstr "VM Kündigung" | ||||||
| #~ msgstr "Hinzufügen" | #~ msgstr "Hinzufügen" | ||||||
| 
 | 
 | ||||||
| #~ msgid "Keys" | #~ msgid "Keys" | ||||||
| #~ msgstr "Schlüssel" | #~ msgstr "Keys" | ||||||
| 
 | 
 | ||||||
| #~ msgid "Log in" | #~ msgid "Log in" | ||||||
| #~ msgstr "Anmelden" | #~ msgstr "Anmelden" | ||||||
| 
 | 
 | ||||||
| #~ msgid "You haven been logged out" | #~ msgid "You haven been logged out" | ||||||
| #~ msgstr "Sie wurden abgmeldet" | #~ msgstr "Du wurdest abgemeldet" | ||||||
| 
 | 
 | ||||||
| #~ msgid "How it works" | #~ msgid "How it works" | ||||||
| #~ msgstr "So funktioniert es" | #~ msgstr "So funktioniert es" | ||||||
| 
 | 
 | ||||||
| #~ msgid "Your infrastructure" | #~ msgid "Your infrastructure" | ||||||
| #~ msgstr "deine Infrastruktur" | #~ msgstr "Deine Infrastruktur" | ||||||
| 
 | 
 | ||||||
| #~ msgid "Our inftrastructure" | #~ msgid "Our inftrastructure" | ||||||
| #~ msgstr "Unsere Infrastruktur" | #~ msgstr "Unsere Infrastruktur" | ||||||
|  | @ -809,10 +815,10 @@ msgstr "VM Kündigung" | ||||||
| #~ msgstr "Preise" | #~ msgstr "Preise" | ||||||
| 
 | 
 | ||||||
| #~ msgid "Access Key" | #~ msgid "Access Key" | ||||||
| #~ msgstr "Zugriffsschlüssel" | #~ msgstr "SSH Key" | ||||||
| 
 | 
 | ||||||
| #~ msgid "Upload your own key. " | #~ msgid "Upload your own key. " | ||||||
| #~ msgstr "Lade deinen Key hoch" | #~ msgstr "Lade Deinen Key hoch" | ||||||
| 
 | 
 | ||||||
| #~ msgid "Generate Key Pair" | #~ msgid "Generate Key Pair" | ||||||
| #~ msgstr "Schlüsselpaar generieren" | #~ msgstr "Schlüsselpaar generieren" | ||||||
|  | @ -836,5 +842,5 @@ msgstr "VM Kündigung" | ||||||
| #~ "Your SSH private key was already generated and downloaded, if you lost " | #~ "Your SSH private key was already generated and downloaded, if you lost " | ||||||
| #~ "it, contact us. " | #~ "it, contact us. " | ||||||
| #~ msgstr "" | #~ msgstr "" | ||||||
| #~ "Dein privater SSH Schlüssel wurde bereits generiert und heruntergeladen. " | #~ "Dein privater SSH Key wurde bereits generiert und heruntergeladen. " | ||||||
| #~ "Falls du ihn verloren hast, kontaktiere uns." | #~ "Falls Du ihn verloren hast, kontaktiere uns." | ||||||
|  |  | ||||||
|  | @ -44,6 +44,8 @@ | ||||||
|                         <a class="unlink" href="{% url 'hosting:signup' %}">{% trans "Sign up"%}</a> |                         <a class="unlink" href="{% url 'hosting:signup' %}">{% trans "Sign up"%}</a> | ||||||
|                         <span class="text"> or </span> |                         <span class="text"> or </span> | ||||||
|                         <a class="unlink" href="{% url 'hosting:reset_password' %}">{% trans "Forgot your password ? "%}</a> |                         <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> |                 </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, |     MarkAsReadNotificationView, PasswordResetView, PasswordResetConfirmView, | ||||||
|     HostingPricingView, CreateVirtualMachinesView, HostingBillListView, |     HostingPricingView, CreateVirtualMachinesView, HostingBillListView, | ||||||
|     HostingBillDetailView, SSHKeyDeleteView, SSHKeyCreateView, SSHKeyListView, |     HostingBillDetailView, SSHKeyDeleteView, SSHKeyCreateView, SSHKeyListView, | ||||||
|     SSHKeyChoiceView, DashboardView, SettingsView) |     SSHKeyChoiceView, DashboardView, SettingsView, ResendActivationEmailView) | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| urlpatterns = [ | urlpatterns = [ | ||||||
|     url(r'index/?$', IndexView.as_view(), name='index'), |     url(r'index/?$', IndexView.as_view(), name='index'), | ||||||
|  | @ -52,6 +51,8 @@ urlpatterns = [ | ||||||
|     url(r'signup/?$', SignupView.as_view(), name='signup'), |     url(r'signup/?$', SignupView.as_view(), name='signup'), | ||||||
|     url(r'signup-validate/?$', SignupValidateView.as_view(), |     url(r'signup-validate/?$', SignupValidateView.as_view(), | ||||||
|         name='signup-validate'), |         name='signup-validate'), | ||||||
|  |     url(r'resend-activation-link/?$', ResendActivationEmailView.as_view(), | ||||||
|  |         name='resend_activation_link'), | ||||||
|     url(r'reset-password/?$', PasswordResetView.as_view(), |     url(r'reset-password/?$', PasswordResetView.as_view(), | ||||||
|         name='reset_password'), |         name='reset_password'), | ||||||
|     url(r'reset-password-confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', |     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.models import OpenNebulaManager | ||||||
| from opennebula_api.serializers import VirtualMachineSerializer, \ | from opennebula_api.serializers import VirtualMachineSerializer, \ | ||||||
|     VirtualMachineTemplateSerializer, VMTemplateSerializer |     VirtualMachineTemplateSerializer, VMTemplateSerializer | ||||||
| from utils.forms import BillingAddressForm, PasswordResetRequestForm, \ | from utils.forms import ( | ||||||
|     UserBillingAddressForm |     BillingAddressForm, PasswordResetRequestForm, UserBillingAddressForm, | ||||||
|  |     ResendActivationEmailForm | ||||||
|  | ) | ||||||
| from utils.mailer import BaseEmail | from utils.mailer import BaseEmail | ||||||
| from utils.stripe_utils import StripeUtils | from utils.stripe_utils import StripeUtils | ||||||
| from utils.views import ( | from utils.views import ( | ||||||
|     PasswordResetViewMixin, PasswordResetConfirmViewMixin, LoginViewMixin |     PasswordResetViewMixin, PasswordResetConfirmViewMixin, LoginViewMixin, | ||||||
|  |     ResendActivationLinkViewMixin | ||||||
| ) | ) | ||||||
| from .forms import HostingUserSignupForm, HostingUserLoginForm, \ | from .forms import HostingUserSignupForm, HostingUserLoginForm, \ | ||||||
|     UserHostingKeyForm, generate_ssh_key_name |     UserHostingKeyForm, generate_ssh_key_name | ||||||
|  | @ -282,6 +285,14 @@ class SignupValidatedView(SignupValidateView): | ||||||
|         return context |         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): | class PasswordResetView(PasswordResetViewMixin): | ||||||
|     site = 'dcl' |     site = 'dcl' | ||||||
|     template_name = 'hosting/reset_password.html' |     template_name = 'hosting/reset_password.html' | ||||||
|  | @ -319,7 +330,7 @@ class PasswordResetConfirmView(PasswordResetConfirmViewMixin): | ||||||
|                 messages.success(request, _('Password has been reset.')) |                 messages.success(request, _('Password has been reset.')) | ||||||
| 
 | 
 | ||||||
|                 # Change opennebula password |                 # Change opennebula password | ||||||
|                 opennebula_client.change_user_password(new_password) |                 opennebula_client.change_user_password(user.password) | ||||||
| 
 | 
 | ||||||
|                 return self.form_valid(form) |                 return self.form_valid(form) | ||||||
|             else: |             else: | ||||||
|  |  | ||||||
|  | @ -438,11 +438,11 @@ class OpenNebulaManager(): | ||||||
|         self.oneadmin_client.call(oca.VmTemplate.METHODS[ |         self.oneadmin_client.call(oca.VmTemplate.METHODS[ | ||||||
|                                       'delete'], template_id, False) |                                       'delete'], template_id, False) | ||||||
| 
 | 
 | ||||||
|     def change_user_password(self, new_password): |     def change_user_password(self, passwd_hash): | ||||||
|         self.oneadmin_client.call( |         self.oneadmin_client.call( | ||||||
|             oca.User.METHODS['passwd'], |             oca.User.METHODS['passwd'], | ||||||
|             self.opennebula_user.id, |             self.opennebula_user.id, | ||||||
|             new_password |             passwd_hash | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|     def add_public_key(self, user, public_key='', merge=False): |     def add_public_key(self, user, public_key='', merge=False): | ||||||
|  |  | ||||||
|  | @ -96,5 +96,4 @@ pyflakes==1.5.0 | ||||||
| billiard==3.5.0.3 | billiard==3.5.0.3 | ||||||
| amqp==2.2.1 | amqp==2.2.1 | ||||||
| vine==1.1.4 | vine==1.1.4 | ||||||
| #git+https://github.com/ungleich/cdist.git#egg=cdist | cdist==4.7.0 | ||||||
| file:///home/app/cdist#egg=cdist |  | ||||||
|  |  | ||||||
|  | @ -18,7 +18,8 @@ class SignupFormMixin(forms.ModelForm): | ||||||
|         model = CustomUser |         model = CustomUser | ||||||
|         fields = ['name', 'email', 'password'] |         fields = ['name', 'email', 'password'] | ||||||
|         widgets = { |         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): |     def clean_confirm_password(self): | ||||||
|  | @ -42,7 +43,7 @@ class LoginFormMixin(forms.Form): | ||||||
|         is_auth = authenticate(email=email, password=password) |         is_auth = authenticate(email=email, password=password) | ||||||
|         if not is_auth: |         if not is_auth: | ||||||
|             raise forms.ValidationError( |             raise forms.ValidationError( | ||||||
|                 "Your username and/or password were incorrect.") |                 _("Your username and/or password were incorrect.")) | ||||||
|         return self.cleaned_data |         return self.cleaned_data | ||||||
| 
 | 
 | ||||||
|     def clean_email(self): |     def clean_email(self): | ||||||
|  | @ -51,7 +52,24 @@ class LoginFormMixin(forms.Form): | ||||||
|             CustomUser.objects.get(email=email) |             CustomUser.objects.get(email=email) | ||||||
|             return email |             return email | ||||||
|         except CustomUser.DoesNotExist: |         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): | class PasswordResetRequestForm(forms.Form): | ||||||
|  | @ -66,7 +84,7 @@ class PasswordResetRequestForm(forms.Form): | ||||||
|             CustomUser.objects.get(email=email) |             CustomUser.objects.get(email=email) | ||||||
|             return email |             return email | ||||||
|         except CustomUser.DoesNotExist: |         except CustomUser.DoesNotExist: | ||||||
|             raise forms.ValidationError("User does not exist") |             raise forms.ValidationError(_("User does not exist")) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class SetPasswordForm(forms.Form): | class SetPasswordForm(forms.Form): | ||||||
|  | @ -75,11 +93,11 @@ class SetPasswordForm(forms.Form): | ||||||
|     password |     password | ||||||
|     """ |     """ | ||||||
|     error_messages = { |     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) |                                     widget=forms.PasswordInput) | ||||||
|     new_password2 = forms.CharField(label=("New password confirmation"), |     new_password2 = forms.CharField(label=_("New password confirmation"), | ||||||
|                                     widget=forms.PasswordInput) |                                     widget=forms.PasswordInput) | ||||||
| 
 | 
 | ||||||
|     def clean_new_password2(self): |     def clean_new_password2(self): | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: PACKAGE VERSION\n" | "Project-Id-Version: PACKAGE VERSION\n" | ||||||
| "Report-Msgid-Bugs-To: \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" | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | "Language-Team: LANGUAGE <LL@li.org>\n" | ||||||
|  | @ -738,6 +738,24 @@ msgstr "" | ||||||
| msgid "Enter your name or company name" | msgid "Enter your name or company name" | ||||||
| msgstr "Geben Sie Ihren Namen oder der Ihrer Firma ein" | 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" | msgid "Cardholder Name" | ||||||
| msgstr "Name des Kartenbesitzer" | msgstr "Name des Kartenbesitzer" | ||||||
| 
 | 
 | ||||||
|  | @ -768,17 +786,25 @@ msgstr "Telefon" | ||||||
| msgid "Message" | msgid "Message" | ||||||
| msgstr "Nachricht" | 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" | 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" | msgid "Password Reset" | ||||||
| msgstr "" | msgstr "Passwort zurücksetzen" | ||||||
| 
 | 
 | ||||||
| msgid "Password has been reset." | msgid "Password has been reset." | ||||||
| msgstr "Das Passwort wurde zur?ckgesetzt." | msgstr "Das Passwort wurde zurückgesetzt." | ||||||
| 
 | 
 | ||||||
| msgid "Password reset has not been successful." | 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." | 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 import messages | ||||||
| from django.contrib.auth import authenticate, login | from django.contrib.auth import authenticate, login | ||||||
| from django.contrib.auth.tokens import default_token_generator | from django.contrib.auth.tokens import default_token_generator | ||||||
|  | from django.core.urlresolvers import reverse_lazy | ||||||
| from django.http import HttpResponseRedirect | from django.http import HttpResponseRedirect | ||||||
| from django.utils.encoding import force_bytes | from django.utils.encoding import force_bytes | ||||||
| from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode | 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) |         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): | class PasswordResetViewMixin(FormView): | ||||||
|     # template_name = 'hosting/reset_password.html' |  | ||||||
|     # form_class = PasswordResetRequestForm |  | ||||||
|     success_message = _( |     success_message = _( | ||||||
|         "The link to reset your email has been sent to your email") |         "The link to reset your email has been sent to your email") | ||||||
|     site = '' |     site = '' | ||||||
|  | @ -78,7 +115,6 @@ class PasswordResetViewMixin(FormView): | ||||||
|             'site_name': 'ungleich' if self.site != 'dcl' else settings.DCL_TEXT, |             'site_name': 'ungleich' if self.site != 'dcl' else settings.DCL_TEXT, | ||||||
|             'base_url': "{0}://{1}".format(self.request.scheme, |             'base_url': "{0}://{1}".format(self.request.scheme, | ||||||
|                                            self.request.get_host()) |                                            self.request.get_host()) | ||||||
| 
 |  | ||||||
|         } |         } | ||||||
|         return context |         return context | ||||||
| 
 | 
 | ||||||
|  | @ -104,11 +140,8 @@ class PasswordResetViewMixin(FormView): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class PasswordResetConfirmViewMixin(FormView): | class PasswordResetConfirmViewMixin(FormView): | ||||||
|     # template_name = 'hosting/confirm_reset_password.html' |  | ||||||
|     form_class = SetPasswordForm |     form_class = SetPasswordForm | ||||||
| 
 | 
 | ||||||
|     # success_url = reverse_lazy('hosting:login') |  | ||||||
| 
 |  | ||||||
|     def post(self, request, uidb64=None, token=None, *arg, **kwargs): |     def post(self, request, uidb64=None, token=None, *arg, **kwargs): | ||||||
|         try: |         try: | ||||||
|             uid = urlsafe_base64_decode(uidb64) |             uid = urlsafe_base64_decode(uidb64) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue