Merge master into task/3730/refactor_price_parameter
This commit is contained in:
		
				commit
				
					
						c17604e5c1
					
				
			
		
					 11 changed files with 199 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,13 +33,16 @@ 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.hosting_utils import get_vm_price | ||||
| 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 | ||||
|  | @ -47,6 +50,7 @@ from .mixins import ProcessVMSelectionMixin | |||
| from .models import HostingOrder, HostingBill, HostingPlan, UserHostingKey | ||||
| from datacenterlight.models import VMTemplate | ||||
| 
 | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| CONNECTION_ERROR = "Your VMs cannot be displayed at the moment due to a \ | ||||
|  | @ -282,6 +286,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 +331,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