Compare commits
	
		
			No commits in common. "master" and "8781/set-default-card-error" have entirely different histories.
		
	
	
		
			
				master
			
			...
			
				8781/set-d
			
		
	
		
					 19 changed files with 124 additions and 246 deletions
				
			
		| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
.git
 | 
			
		||||
| 
						 | 
				
			
			@ -1,8 +1,3 @@
 | 
			
		|||
3.2: 2021-02-07
 | 
			
		||||
   * 8816: Update order confirmation text to better prepared for payment dispute
 | 
			
		||||
   * supportticket#22990: Fix: can't add a deleted card
 | 
			
		||||
3.1: 2021-01-11
 | 
			
		||||
   * 8781: Fix error is setting a default card (MR!746)
 | 
			
		||||
3.0: 2021-01-07
 | 
			
		||||
   * 8393: Implement SCA for stripe payments (MR!745)
 | 
			
		||||
   * 8691: Implment check_vm_templates management command (MR!744)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								Dockerfile
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								Dockerfile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,18 +0,0 @@
 | 
			
		|||
FROM python:3.10.0-alpine3.15
 | 
			
		||||
 | 
			
		||||
WORKDIR /usr/src/app
 | 
			
		||||
 | 
			
		||||
RUN apk add --update --no-cache \
 | 
			
		||||
    git \
 | 
			
		||||
    build-base \
 | 
			
		||||
    openldap-dev \
 | 
			
		||||
    python3-dev \
 | 
			
		||||
    libpq-dev \
 | 
			
		||||
    && rm -rf /var/cache/apk/*
 | 
			
		||||
 | 
			
		||||
# FIX https://github.com/python-ldap/python-ldap/issues/432
 | 
			
		||||
RUN echo 'INPUT ( libldap.so )' > /usr/lib/libldap_r.so
 | 
			
		||||
 | 
			
		||||
COPY requirements.txt ./
 | 
			
		||||
RUN pip install --no-cache-dir -r requirements.txt
 | 
			
		||||
COPY ./ .
 | 
			
		||||
							
								
								
									
										6
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -14,12 +14,6 @@ help:
 | 
			
		|||
	@echo '  make rsync_upload                         '
 | 
			
		||||
	@echo '  make install_debian_packages              '
 | 
			
		||||
 | 
			
		||||
buildimage:
 | 
			
		||||
	 docker build -t dynamicweb:$$(git describe) .
 | 
			
		||||
 | 
			
		||||
releaseimage: buildimage
 | 
			
		||||
	./release.sh
 | 
			
		||||
 | 
			
		||||
collectstatic:
 | 
			
		||||
	$(PY?) $(BASEDIR)/manage.py collectstatic
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ msgid ""
 | 
			
		|||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2021-02-07 11:10+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2020-03-24 07:02+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2018-03-30 23:22+0000\n"
 | 
			
		||||
"Last-Translator: b'Anonymous User <coder.purple+25@gmail.com>'\n"
 | 
			
		||||
"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
			
		||||
| 
						 | 
				
			
			@ -451,43 +451,38 @@ msgstr "Dein Gesamtpreis"
 | 
			
		|||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
" By clicking \"Place order\" you agree to our <a href=\"https://"
 | 
			
		||||
"datacenterlight.ch/en-us/cms/terms-of-service/\">Terms of Service</a> and "
 | 
			
		||||
"this plan will charge your credit card account with %(total_price)s CHF/year"
 | 
			
		||||
"By clicking \"Place order\" this plan will charge your credit card account "
 | 
			
		||||
"with %(total_price)s CHF/year"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Indem Du auf \"Bestellung aufgeben\" klickst, erklärst Du dich mit unseren <a href=\"https://"
 | 
			
		||||
"datacenterlight.ch/en-us/cms/terms-of-service/\">Nutzungsbedingungen</a> einverstanden und Dein Kreditkartenkonto wird mit %(total_price)s CHF/Jahr  belastet."
 | 
			
		||||
"Wenn Du \"bestellen\" auswählst, wird Deine Kreditkarte mit %(total_price)s "
 | 
			
		||||
"CHF pro Jahr belastet"
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"\n"
 | 
			
		||||
"                                    By clicking \"Place order\" you agree to "
 | 
			
		||||
"our <a href=\"https://datacenterlight.ch/en-us/cms/terms-of-service/\">Terms "
 | 
			
		||||
"of Service</a> and this plan will charge your credit card account with "
 | 
			
		||||
"%(total_price)s CHF/month"
 | 
			
		||||
"By clicking \"Place order\" this plan will charge your credit card account "
 | 
			
		||||
"with %(total_price)s CHF/month"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"\n"
 | 
			
		||||
"Indem Du auf \"Bestellung aufgeben\" klickst, erklärst Du dich mit unseren <a href=\"https://"
 | 
			
		||||
"datacenterlight.ch/en-us/cms/terms-of-service/\">Nutzungsbedingungen</a> einverstanden und Dein Kreditkartenkonto wird mit %(total_price)s CHF/Monat  belastet."
 | 
			
		||||
"Wenn Du \"bestellen\" auswählst, wird Deine Kreditkarte mit %(total_price)s "
 | 
			
		||||
"CHF pro Monat belastet"
 | 
			
		||||
 | 
			
		||||
#, fuzzy, python-format
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "By clicking \"Place order\" this payment will charge your credit card "
 | 
			
		||||
#| "account with a one time amount of %(total_price)s CHF"
 | 
			
		||||
msgid ""
 | 
			
		||||
"By clicking \"Place order\" this payment will charge your credit card "
 | 
			
		||||
"account with a one time amount of %(total_price)s CHF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Wenn Du \"bestellen\" auswählst, wird Deine Kreditkarte mit "
 | 
			
		||||
"%(vm_total_price)s CHF pro Monat belastet"
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"By clicking \"Place order\" you agree to our <a href=\"https://"
 | 
			
		||||
"datacenterlight.ch/en-us/cms/terms-of-service/\">Terms of Service</a> and "
 | 
			
		||||
"this plan will charge your credit card account with %(total_price)s CHF"
 | 
			
		||||
"By clicking \"Place order\" this plan will charge your credit card account "
 | 
			
		||||
"with %(vm_total_price)s CHF/month"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Indem Du auf \"Bestellung aufgeben\" klickst, erklärst Du dich mit unseren <a href=\"https://"
 | 
			
		||||
"datacenterlight.ch/de/cms/terms-of-service/\">Nutzungsbedingungen</a> einverstanden und Dein Kreditkartenkonto wird mit %(total_price)s CHF belastet."
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"By clicking \"Place order\" you agree to our <a href=\"https://"
 | 
			
		||||
"datacenterlight.ch/en-us/cms/terms-of-service/\">Terms of Service</a> and "
 | 
			
		||||
"this plan will charge your credit card account with %(vm_total_price)s CHF/"
 | 
			
		||||
"month"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Indem Du auf \"Bestellung aufgeben\" klickst, erklärst Du dich mit unseren <a href=\"https://"
 | 
			
		||||
"datacenterlight.ch/de/cms/terms-of-service/\">Nutzungsbedingungen</a> einverstanden und Dein Kreditkartenkonto wird mit %(vm_total_price)s CHF/Monat belastet"
 | 
			
		||||
"Wenn Du \"bestellen\" auswählst, wird Deine Kreditkarte mit "
 | 
			
		||||
"%(vm_total_price)s CHF pro Monat belastet"
 | 
			
		||||
 | 
			
		||||
msgid "Place order"
 | 
			
		||||
msgstr "Bestellen"
 | 
			
		||||
| 
						 | 
				
			
			@ -606,22 +601,16 @@ msgid "Incorrect pricing name. Please contact support{support_email}"
 | 
			
		|||
msgstr ""
 | 
			
		||||
"Ungültige Preisbezeichnung. Bitte kontaktiere den Support{support_email}"
 | 
			
		||||
 | 
			
		||||
#, python-brace-format
 | 
			
		||||
msgid "{user} does not have permission to access the card"
 | 
			
		||||
msgstr "{user} hat keine Erlaubnis auf diese Karte zuzugreifen"
 | 
			
		||||
 | 
			
		||||
msgid "An error occurred. Details: {}"
 | 
			
		||||
msgstr "Ein Fehler ist aufgetreten. Details: {}"
 | 
			
		||||
 | 
			
		||||
msgid "Confirm Order"
 | 
			
		||||
msgstr "Bestellung Bestätigen"
 | 
			
		||||
 | 
			
		||||
#, fuzzy
 | 
			
		||||
#| msgid "Thank you!"
 | 
			
		||||
msgid "Thank you !"
 | 
			
		||||
msgstr "Vielen Dank!"
 | 
			
		||||
 | 
			
		||||
msgid "Your product will be provisioned as soon as we receive the payment."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#, python-brace-format
 | 
			
		||||
msgid "An error occurred while associating the card. Details: {details}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Beim Verbinden der Karte ist ein Fehler aufgetreten. Details: {details}"
 | 
			
		||||
 | 
			
		||||
msgid "Error."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -632,21 +621,10 @@ msgstr ""
 | 
			
		|||
"Es ist ein Fehler bei der Zahlung betreten. Du wirst nach dem Schliessen vom "
 | 
			
		||||
"Popup zur Bezahlseite weitergeleitet."
 | 
			
		||||
 | 
			
		||||
msgid "Thank you for the order."
 | 
			
		||||
msgstr "Danke für Deine Bestellung."
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Your product will be provisioned as soon as we receive a payment "
 | 
			
		||||
"confirmation from Stripe. We will send you a confirmation email. You can "
 | 
			
		||||
"always contact us at support@datacenterlight.ch"
 | 
			
		||||
#, python-brace-format
 | 
			
		||||
msgid "An error occurred while associating the card. Details: {details}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Your VM will be up and running in a few moments. We will send you a "
 | 
			
		||||
"confirmation email as soon as it is ready."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Deine VM ist gleich bereit. Wir senden Dir eine Bestätigungsemail, sobald Du "
 | 
			
		||||
"auf sie zugreifen kannst."
 | 
			
		||||
"Beim Verbinden der Karte ist ein Fehler aufgetreten. Details: {details}"
 | 
			
		||||
 | 
			
		||||
msgid " This is a monthly recurring plan."
 | 
			
		||||
msgstr "Dies ist ein monatlich wiederkehrender Plan."
 | 
			
		||||
| 
						 | 
				
			
			@ -686,31 +664,15 @@ msgstr ""
 | 
			
		|||
"Du wirst bald eine Bestätigungs-E-Mail über die Zahlung erhalten. Du kannst "
 | 
			
		||||
"jederzeit unter info@ungleich.ch kontaktieren."
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "By clicking \"Place order\" this plan will charge your credit card "
 | 
			
		||||
#~ "account with %(total_price)s CHF/month"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Wenn Du \"bestellen\" auswählst, wird Deine Kreditkarte mit "
 | 
			
		||||
#~ "%(total_price)s CHF pro Monat belastet"
 | 
			
		||||
msgid "Thank you for the order."
 | 
			
		||||
msgstr "Danke für Deine Bestellung."
 | 
			
		||||
 | 
			
		||||
#, fuzzy, python-format
 | 
			
		||||
#~| msgid ""
 | 
			
		||||
#~| "By clicking \"Place order\" this payment will charge your credit card "
 | 
			
		||||
#~| "account with a one time amount of %(total_price)s CHF"
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "By clicking \"Place order\" this payment will charge your credit card "
 | 
			
		||||
#~ "account with a one time amount of %(total_price)s CHF"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Wenn Du \"bestellen\" auswählst, wird Deine Kreditkarte mit "
 | 
			
		||||
#~ "%(vm_total_price)s CHF pro Monat belastet"
 | 
			
		||||
 | 
			
		||||
#, python-brace-format
 | 
			
		||||
#~ msgid "{user} does not have permission to access the card"
 | 
			
		||||
#~ msgstr "{user} hat keine Erlaubnis auf diese Karte zuzugreifen"
 | 
			
		||||
 | 
			
		||||
#~ msgid "An error occurred. Details: {}"
 | 
			
		||||
#~ msgstr "Ein Fehler ist aufgetreten. Details: {}"
 | 
			
		||||
msgid ""
 | 
			
		||||
"Your VM will be up and running in a few moments. We will send you a "
 | 
			
		||||
"confirmation email as soon as it is ready."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Deine VM ist gleich bereit. Wir senden Dir eine Bestätigungsemail, sobald Du "
 | 
			
		||||
"auf sie zugreifen kannst."
 | 
			
		||||
 | 
			
		||||
#~ msgid "Price"
 | 
			
		||||
#~ msgstr "Preise"
 | 
			
		||||
| 
						 | 
				
			
			@ -786,6 +748,9 @@ msgstr ""
 | 
			
		|||
#~ "Wir werden dann sobald als möglich Ihren Beta-Zugang erstellen und Sie "
 | 
			
		||||
#~ "daraufhin kontaktieren.Bis dahin bitten wir Sie um etwas Geduld."
 | 
			
		||||
 | 
			
		||||
#~ msgid "Thank you!"
 | 
			
		||||
#~ msgstr "Vielen Dank!"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Thank you for order! Our team will contact you via email"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Vielen Dank für die Bestellung. Unser Team setzt sich sobald wie möglich "
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -195,7 +195,7 @@ def handle_metadata_and_emails(order_id, vm_id, manager, user, specs,
 | 
			
		|||
    email_data = {
 | 
			
		||||
        'subject': settings.DCL_TEXT + " Order from %s" % context['email'],
 | 
			
		||||
        'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
 | 
			
		||||
        'to': ['dcl-orders@ungleich.ch'],
 | 
			
		||||
        'to': ['info@ungleich.ch'],
 | 
			
		||||
        'body': "\n".join(
 | 
			
		||||
            ["%s=%s" % (k, v) for (k, v) in context.items()]),
 | 
			
		||||
        'reply_to': [context['email']],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -278,16 +278,15 @@
 | 
			
		|||
                    {% if generic_payment_details %}
 | 
			
		||||
                        {% if generic_payment_details.recurring %}
 | 
			
		||||
                            {% if generic_payment_details.recurring_interval == 'year' %}
 | 
			
		||||
                                <div class="dcl-place-order-text">{% blocktrans with total_price=generic_payment_details.amount|floatformat:2|intcomma %} By clicking "Place order" you agree to our <a href="https://datacenterlight.ch/en-us/cms/terms-of-service/">Terms of Service</a> and this plan will charge your credit card account with {{ total_price }} CHF/year{% endblocktrans %}.</div>
 | 
			
		||||
                                <div class="dcl-place-order-text">{% blocktrans with total_price=generic_payment_details.amount|floatformat:2|intcomma %}By clicking "Place order" this plan will charge your credit card account with {{total_price}} CHF/year{% endblocktrans %}.</div>
 | 
			
		||||
                            {% else %}
 | 
			
		||||
                                <div class="dcl-place-order-text">{% blocktrans with total_price=generic_payment_details.amount|floatformat:2|intcomma %}
 | 
			
		||||
                                    By clicking "Place order" you agree to our <a href="https://datacenterlight.ch/en-us/cms/terms-of-service/">Terms of Service</a> and this plan will charge your credit card account with {{ total_price }} CHF/month{% endblocktrans %}.</div>
 | 
			
		||||
                                <div class="dcl-place-order-text">{% blocktrans with total_price=generic_payment_details.amount|floatformat:2|intcomma %}By clicking "Place order" this plan will charge your credit card account with {{total_price}} CHF/month{% endblocktrans %}.</div>
 | 
			
		||||
                            {% endif %}
 | 
			
		||||
                        {% else %}
 | 
			
		||||
                            <div class="dcl-place-order-text">{% blocktrans with total_price=generic_payment_details.amount|floatformat:2|intcomma %}By clicking "Place order" you agree to our <a href="https://datacenterlight.ch/en-us/cms/terms-of-service/">Terms of Service</a> and this plan will charge your credit card account with {{ total_price }} CHF{% endblocktrans %}.</div>
 | 
			
		||||
                            <div class="dcl-place-order-text">{% blocktrans with total_price=generic_payment_details.amount|floatformat:2|intcomma %}By clicking "Place order" this payment will charge your credit card account with a one time amount of {{total_price}} CHF{% endblocktrans %}.</div>
 | 
			
		||||
                        {% endif %}
 | 
			
		||||
                    {% else %}
 | 
			
		||||
                        <div class="dcl-place-order-text">{% blocktrans with vm_total_price=vm.total_price|floatformat:2|intcomma %}By clicking "Place order" you agree to our <a href="https://datacenterlight.ch/en-us/cms/terms-of-service/">Terms of Service</a> and this plan will charge your credit card account with {{ vm_total_price }} CHF/month{% endblocktrans %}.</div>
 | 
			
		||||
                        <div class="dcl-place-order-text">{% blocktrans with vm_total_price=vm.total_price|floatformat:2|intcomma %}By clicking "Place order" this plan will charge your credit card account with {{vm_total_price}} CHF/month{% endblocktrans %}.</div>
 | 
			
		||||
                    {% endif %}
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="col-sm-4 order-confirm-btn text-right">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,7 +20,7 @@ logger = logging.getLogger(__name__)
 | 
			
		|||
 | 
			
		||||
eu_countries = ['at', 'be', 'bg', 'ch', 'cy', 'cz', 'hr', 'dk',
 | 
			
		||||
                'ee', 'fi', 'fr', 'mc', 'de', 'gr', 'hu', 'ie', 'it',
 | 
			
		||||
                'lv', 'lu', 'mt', 'nl', 'pl', 'pt', 'ro','sk', 'si', 'es',
 | 
			
		||||
                'lv', 'lu', 'mt', 'nl', 'po', 'pt', 'ro','sk', 'si', 'es',
 | 
			
		||||
                'se', 'gb']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1333,7 +1333,7 @@ def do_provisioning_generic(
 | 
			
		|||
        'subject': (settings.DCL_TEXT +
 | 
			
		||||
                    " Payment received from %s" % context['email']),
 | 
			
		||||
        'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
 | 
			
		||||
        'to': ['dcl-orders@ungleich.ch'],
 | 
			
		||||
        'to': ['info@ungleich.ch'],
 | 
			
		||||
        'body': "\n".join(
 | 
			
		||||
            ["%s=%s" % (k, v) for (k, v) in context.items()]),
 | 
			
		||||
        'reply_to': [context['email']],
 | 
			
		||||
| 
						 | 
				
			
			@ -1507,7 +1507,7 @@ def do_provisioning(request, stripe_api_cus_id, card_details_response,
 | 
			
		|||
            'subject': (settings.DCL_TEXT +
 | 
			
		||||
                        " Payment received from %s" % context['email']),
 | 
			
		||||
            'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
 | 
			
		||||
            'to': ['dcl-orders@ungleich.ch'],
 | 
			
		||||
            'to': ['info@ungleich.ch'],
 | 
			
		||||
            'body': "\n".join(
 | 
			
		||||
                ["%s=%s" % (k, v) for (k, v) in context.items()]),
 | 
			
		||||
            'reply_to': [context['email']],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -376,6 +376,8 @@ msgid ""
 | 
			
		|||
"                    digitalglarus.ch<br/>\n"
 | 
			
		||||
"                    hack4lgarus.ch<br/>\n"
 | 
			
		||||
"                    ipv6onlyhosting.com<br/>\n"
 | 
			
		||||
"                    ipv6onlyhosting.ch<br/>\n"
 | 
			
		||||
"                    ipv6onlyhosting.net<br/>\n"
 | 
			
		||||
"                    django-hosting.ch<br/>\n"
 | 
			
		||||
"                    rails-hosting.ch<br/>\n"
 | 
			
		||||
"                    node-hosting.ch<br/>\n"
 | 
			
		||||
| 
						 | 
				
			
			@ -634,8 +636,8 @@ msgstr ""
 | 
			
		|||
"Internetangebot der ungleich glarus ag, welches unter den nachfolgenden "
 | 
			
		||||
"Domains erreichbar ist:<br/><br/>ungleich.ch<br/>datacenterlight.ch<br/"
 | 
			
		||||
">devuanhosting.com<br/>devuanhosting.ch<br/>digitalglarus.ch<br/>hack4lgarus."
 | 
			
		||||
"ch<br/>ipv6onlyhosting.com<br/>django-hosting.ch<br/>rails-hosting.ch"
 | 
			
		||||
"<br/>node-hosting.ch<br/>blog."
 | 
			
		||||
"ch<br/>ipv6onlyhosting.com<br/>ipv6onlyhosting.ch<br/>ipv6onlyhosting.net<br/"
 | 
			
		||||
">django-hosting.ch<br/>rails-hosting.ch<br/>node-hosting.ch<br/>blog."
 | 
			
		||||
"ungleich.ch<br/><br/>Der Datenschutzbeauftragte des Verantwortlichen ist:<br/"
 | 
			
		||||
"><br/>Sanghee Kim<br/>ungleich glarus ag<br/>Bahnhofstrasse 1<br/>8783 "
 | 
			
		||||
"Linthal (CH)<br/>E-Mail: <a href=\"mailto:sanghee.kim@ungleich.ch\">sanghee."
 | 
			
		||||
| 
						 | 
				
			
			@ -836,4 +838,3 @@ msgstr ""
 | 
			
		|||
 | 
			
		||||
#~ msgid "index/?$"
 | 
			
		||||
#~ msgstr "index/?$"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -631,6 +631,8 @@ GOOGLE_ANALYTICS_PROPERTY_IDS = {
 | 
			
		|||
    'datacenterlight.ch': 'UA-62285904-8',
 | 
			
		||||
    'devuanhosting.ch': 'UA-62285904-9',
 | 
			
		||||
    'devuanhosting.com': 'UA-62285904-9',
 | 
			
		||||
    'ipv6onlyhosting.ch': 'UA-62285904-10',
 | 
			
		||||
    'ipv6onlyhosting.net': 'UA-62285904-10',
 | 
			
		||||
    'ipv6onlyhosting.com': 'UA-62285904-10',
 | 
			
		||||
    'comic.ungleich.ch': 'UA-62285904-13',
 | 
			
		||||
    '127.0.0.1:8000': 'localhost',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,9 @@ ALLOWED_HOSTS = [
 | 
			
		|||
    ".devuanhosting.ch",
 | 
			
		||||
    ".devuanhosting.com",
 | 
			
		||||
    ".digitalezukunft.ch",
 | 
			
		||||
    ".ipv6onlyhosting.ch",
 | 
			
		||||
    ".ipv6onlyhosting.com",
 | 
			
		||||
    ".ipv6onlyhosting.net",
 | 
			
		||||
    ".digitalglarus.ch",
 | 
			
		||||
    ".hack4glarus.ch",
 | 
			
		||||
    ".xn--nglarus-n2a.ch"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ msgid ""
 | 
			
		|||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PACKAGE VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2021-02-07 10:19+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2019-11-15 16:40+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"
 | 
			
		||||
| 
						 | 
				
			
			@ -211,9 +211,6 @@ msgstr "Bezahlbares VM Hosting in der Schweiz"
 | 
			
		|||
msgid "My Dashboard"
 | 
			
		||||
msgstr "Mein Dashboard"
 | 
			
		||||
 | 
			
		||||
msgid "Welcome"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "My VMs"
 | 
			
		||||
msgstr "Meine VMs"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -367,11 +364,6 @@ msgstr "Abgelehnt"
 | 
			
		|||
msgid "Billed to"
 | 
			
		||||
msgstr "Rechnungsadresse"
 | 
			
		||||
 | 
			
		||||
#, fuzzy
 | 
			
		||||
#| msgid "Card Number"
 | 
			
		||||
msgid "VAT Number"
 | 
			
		||||
msgstr "Kreditkartennummer"
 | 
			
		||||
 | 
			
		||||
msgid "Payment method"
 | 
			
		||||
msgstr "Bezahlmethode"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -399,9 +391,6 @@ msgstr "Festplattenkapazität"
 | 
			
		|||
msgid "Subtotal"
 | 
			
		||||
msgstr "Zwischensumme"
 | 
			
		||||
 | 
			
		||||
msgid "VAT for"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "VAT"
 | 
			
		||||
msgstr "Mehrwertsteuer"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -435,22 +424,18 @@ msgstr "ZURÜCK ZUR LISTE"
 | 
			
		|||
msgid "Some problem encountered. Please try again later."
 | 
			
		||||
msgstr "Ein Problem ist aufgetreten. Bitte versuche es später noch einmal."
 | 
			
		||||
 | 
			
		||||
#, fuzzy
 | 
			
		||||
#| msgid "Description"
 | 
			
		||||
msgid "Subscriptions"
 | 
			
		||||
msgstr "Beschreibung"
 | 
			
		||||
 | 
			
		||||
#, fuzzy
 | 
			
		||||
#| msgid "One time payment"
 | 
			
		||||
msgid "One-time payments"
 | 
			
		||||
msgstr "Einmalzahlung"
 | 
			
		||||
 | 
			
		||||
msgid "VM ID"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "IP Address"
 | 
			
		||||
msgstr "IP-Adresse"
 | 
			
		||||
 | 
			
		||||
msgid "See Invoice"
 | 
			
		||||
msgstr "Siehe Rechnung"
 | 
			
		||||
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr "Seite"
 | 
			
		||||
 | 
			
		||||
msgid "Log in"
 | 
			
		||||
msgstr "Anmelden"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -495,13 +480,11 @@ msgstr "Bestellungsübersicht"
 | 
			
		|||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"By clicking \"Place order\" you agree to our <a href=\"https://"
 | 
			
		||||
"datacenterlight.ch/en-us/cms/terms-of-service/\">Terms of Service</a> and "
 | 
			
		||||
"this plan will charge your credit card account with %(vm_price)s CHF/month."
 | 
			
		||||
"By clicking \"Place order\" this plan will charge your credit card account "
 | 
			
		||||
"with %(vm_price)s CHF/month"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Indem Du auf \"Bestellung aufgeben\" klickst, erklärst Du dich mit unseren"
 | 
			
		||||
" <a href=\"https://"
 | 
			
		||||
"datacenterlight.ch/de/cms/terms-of-service/\">Nutzungsbedingungen</a> einverstanden und Dein Kreditkartenkonto wird mit %(vm_price)s CHF/Monat belastet."
 | 
			
		||||
"Wenn Du \"bestellen\" auswählst, wird Deine Kreditkarte mit %(vm_price)s CHF "
 | 
			
		||||
"pro Monat belastet"
 | 
			
		||||
 | 
			
		||||
msgid "Place order"
 | 
			
		||||
msgstr "Bestellen"
 | 
			
		||||
| 
						 | 
				
			
			@ -521,12 +504,6 @@ msgstr "Schliessen"
 | 
			
		|||
msgid "Order Nr."
 | 
			
		||||
msgstr "Bestellung Nr."
 | 
			
		||||
 | 
			
		||||
msgid "See Invoice"
 | 
			
		||||
msgstr "Siehe Rechnung"
 | 
			
		||||
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr "Seite"
 | 
			
		||||
 | 
			
		||||
msgid "Your Order"
 | 
			
		||||
msgstr "Deine Bestellung"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -595,19 +572,6 @@ msgstr "Absenden"
 | 
			
		|||
msgid "Password reset"
 | 
			
		||||
msgstr "Passwort zurücksetzen"
 | 
			
		||||
 | 
			
		||||
#, fuzzy
 | 
			
		||||
#| msgid "Key name"
 | 
			
		||||
msgid "My Username"
 | 
			
		||||
msgstr "Key-Name"
 | 
			
		||||
 | 
			
		||||
msgid "Your VAT number has been verified"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Your VAT number is under validation. VAT will be adjusted, once the "
 | 
			
		||||
"validation is complete."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "UPDATE"
 | 
			
		||||
msgstr "AKTUALISIEREN"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -809,15 +773,21 @@ msgstr "Dein Passwort konnte nicht zurückgesetzt werden."
 | 
			
		|||
msgid "The reset password link is no longer valid."
 | 
			
		||||
msgstr "Der Link zum Zurücksetzen Deines Passwortes ist nicht mehr gültig."
 | 
			
		||||
 | 
			
		||||
msgid "Could not set a default card."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
msgid "Card deassociation successful"
 | 
			
		||||
msgstr "Die Verbindung mit der Karte wurde erfolgreich aufgehoben"
 | 
			
		||||
 | 
			
		||||
msgid "You are not permitted to do this operation"
 | 
			
		||||
msgstr "Du hast keine Erlaubnis um diese Operation durchzuführen"
 | 
			
		||||
 | 
			
		||||
msgid "The selected card does not exist"
 | 
			
		||||
msgstr "Die ausgewählte Karte existiert nicht"
 | 
			
		||||
 | 
			
		||||
msgid "Billing address updated successfully"
 | 
			
		||||
msgstr "Die Rechnungsadresse wurde erfolgreich aktualisiert"
 | 
			
		||||
 | 
			
		||||
msgid "You seem to have already added this card"
 | 
			
		||||
msgstr "Es scheint, als hättest du diese Karte bereits hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#, python-brace-format
 | 
			
		||||
msgid "An error occurred while associating the card. Details: {details}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
| 
						 | 
				
			
			@ -882,8 +852,7 @@ msgstr "Ungültige Speicher-Grösse"
 | 
			
		|||
 | 
			
		||||
#, python-brace-format
 | 
			
		||||
msgid "Incorrect pricing name. Please contact support{support_email}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Ungültige Preisbezeichnung. Bitte kontaktiere den Support{support_email}"
 | 
			
		||||
msgstr "Ungültige Preisbezeichnung. Bitte kontaktiere den Support{support_email}"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"We could not find the requested VM. Please                            "
 | 
			
		||||
| 
						 | 
				
			
			@ -902,9 +871,7 @@ msgstr "Fehler beenden VM"
 | 
			
		|||
msgid ""
 | 
			
		||||
"VM terminate action timed out. Please contact support@datacenterlight.ch for "
 | 
			
		||||
"further information."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"VM beendet wegen Zeitüberschreitung. Bitte kontaktiere "
 | 
			
		||||
"support@datacenterlight.ch für weitere Informationen."
 | 
			
		||||
msgstr "VM beendet wegen Zeitüberschreitung. Bitte kontaktiere support@datacenterlight.ch für weitere Informationen."
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid "Virtual Machine %(vm_name)s Cancelled"
 | 
			
		||||
| 
						 | 
				
			
			@ -915,15 +882,6 @@ msgstr ""
 | 
			
		|||
"Es gab einen Fehler bei der Bearbeitung Deine Anfrage. Bitte versuche es "
 | 
			
		||||
"noch einmal."
 | 
			
		||||
 | 
			
		||||
#~ msgid "You are not permitted to do this operation"
 | 
			
		||||
#~ msgstr "Du hast keine Erlaubnis um diese Operation durchzuführen"
 | 
			
		||||
 | 
			
		||||
#~ msgid "The selected card does not exist"
 | 
			
		||||
#~ msgstr "Die ausgewählte Karte existiert nicht"
 | 
			
		||||
 | 
			
		||||
#~ msgid "You seem to have already added this card"
 | 
			
		||||
#~ msgstr "Es scheint, als hättest du diese Karte bereits hinzugefügt"
 | 
			
		||||
 | 
			
		||||
#, python-format
 | 
			
		||||
#~ msgid "This key exists already with the name \"%(name)s\""
 | 
			
		||||
#~ msgstr "Der SSH-Key mit dem Name \"%(name)s\" existiert bereits"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -218,7 +218,7 @@
 | 
			
		|||
                    {% csrf_token %}
 | 
			
		||||
                    <div class="row">
 | 
			
		||||
                        <div class="col-sm-8">
 | 
			
		||||
                            <div class="dcl-place-order-text">{% blocktrans with vm_price=vm.total_price|floatformat:2|intcomma %}By clicking "Place order" you agree to our <a href="https://datacenterlight.ch/en-us/cms/terms-of-service/">Terms of Service</a> and this plan will charge your credit card account with {{ vm_price }} CHF/month.{% endblocktrans %}.</div>
 | 
			
		||||
                            <div class="dcl-place-order-text">{% blocktrans with vm_price=vm.total_price|floatformat:2|intcomma %}By clicking "Place order" this plan will charge your credit card account with {{ vm_price }} CHF/month{% endblocktrans %}.</div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="col-sm-4 order-confirm-btn text-right">
 | 
			
		||||
                            <button class="btn choice-btn" id="btn-create-vm" data-href="{% url 'hosting:order-confirmation' %}" data-toggle="modal" data-target="#createvm-modal">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -698,10 +698,12 @@ class SettingsView(LoginRequiredMixin, FormView):
 | 
			
		|||
                    email=request.user.email, id_payment_method=id_payment_method
 | 
			
		||||
                )
 | 
			
		||||
                card = card_details['response_object']
 | 
			
		||||
                if UserCardDetail.get_user_card_details(stripe_customer, card):
 | 
			
		||||
                    msg = _('You seem to have already added this card')
 | 
			
		||||
                    messages.add_message(request, messages.ERROR, msg)
 | 
			
		||||
                else:
 | 
			
		||||
                    acc_result = stripe_utils.associate_customer_card(
 | 
			
		||||
                    request.user.stripecustomer.stripe_id,
 | 
			
		||||
                    id_payment_method,
 | 
			
		||||
                    set_as_default=True
 | 
			
		||||
                        request.user.stripecustomer.stripe_id, id_payment_method
 | 
			
		||||
                    )
 | 
			
		||||
                    if acc_result['response_object'] is None:
 | 
			
		||||
                        msg = _(
 | 
			
		||||
| 
						 | 
				
			
			@ -1315,8 +1317,7 @@ class InvoiceListView(LoginRequiredMixin, TemplateView):
 | 
			
		|||
                logger.debug("User does not exist")
 | 
			
		||||
                cu = self.request.user
 | 
			
		||||
            invs = stripe.Invoice.list(customer=cu.stripecustomer.stripe_id,
 | 
			
		||||
                                       count=100,
 | 
			
		||||
                                       status='paid')
 | 
			
		||||
                                       count=100)
 | 
			
		||||
            paginator = Paginator(invs.data, 10)
 | 
			
		||||
            try:
 | 
			
		||||
                invs_page = paginator.page(page)
 | 
			
		||||
| 
						 | 
				
			
			@ -1911,7 +1912,7 @@ class VirtualMachineView(LoginRequiredMixin, View):
 | 
			
		|||
            'subject': ("Deleted " if response['status']
 | 
			
		||||
                        else "ERROR deleting ") + admin_msg_sub,
 | 
			
		||||
            'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
 | 
			
		||||
            'to': ['dcl-orders@ungleich.ch'],
 | 
			
		||||
            'to': ['info@ungleich.ch'],
 | 
			
		||||
            'body': "\n".join(
 | 
			
		||||
                ["%s=%s" % (k, v) for (k, v) in admin_email_body.items()]),
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										21
									
								
								release.sh
									
										
									
									
									
								
							
							
						
						
									
										21
									
								
								release.sh
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,21 +0,0 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
# Nico Schottelius, 2021-12-17
 | 
			
		||||
 | 
			
		||||
current=$(git describe --dirty)
 | 
			
		||||
last_tag=$(git describe --tags --abbrev=0)
 | 
			
		||||
registry=harbor.ungleich.svc.p10.k8s.ooo/ungleich-public
 | 
			
		||||
image_url=$registry/dynamicweb:${current}
 | 
			
		||||
 | 
			
		||||
if echo $current | grep -q -e 'dirty$'; then
 | 
			
		||||
    echo Refusing to release a dirty tree build
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ "$current" != "$last_tag" ]; then
 | 
			
		||||
    echo "Last tag ($last_tag) is not current version ($current)"
 | 
			
		||||
    echo "Only release proper versions"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
docker tag dynamicweb:${current} ${image_url}
 | 
			
		||||
docker push ${image_url}
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ django-compressor==2.0
 | 
			
		|||
django-debug-toolbar==1.4
 | 
			
		||||
python-dotenv==0.10.3
 | 
			
		||||
django-extensions==1.6.7
 | 
			
		||||
django-filer==2.1.2
 | 
			
		||||
django-filer==1.2.0
 | 
			
		||||
django-filter==0.13.0
 | 
			
		||||
django-formtools==1.0
 | 
			
		||||
django-guardian==1.4.4
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +83,7 @@ stripe==2.41.0
 | 
			
		|||
wheel==0.29.0
 | 
			
		||||
django-admin-honeypot==1.0.0
 | 
			
		||||
coverage==4.3.4
 | 
			
		||||
git+https://github.com/ungleich/python-oca.git#egg=oca
 | 
			
		||||
git+https://github.com/ungleich/python-oca.git#egg=python-oca
 | 
			
		||||
djangorestframework==3.6.3
 | 
			
		||||
flake8==3.3.0
 | 
			
		||||
python-memcached==1.58
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -134,6 +134,8 @@
 | 
			
		|||
                    digitalglarus.ch<br/>
 | 
			
		||||
                    hack4lgarus.ch<br/>
 | 
			
		||||
                    ipv6onlyhosting.com<br/>
 | 
			
		||||
                    ipv6onlyhosting.ch<br/>
 | 
			
		||||
                    ipv6onlyhosting.net<br/>
 | 
			
		||||
                    django-hosting.ch<br/>
 | 
			
		||||
                    rails-hosting.ch<br/>
 | 
			
		||||
                    node-hosting.ch<br/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,6 @@ import hashlib
 | 
			
		|||
import random
 | 
			
		||||
import ldap3
 | 
			
		||||
import logging
 | 
			
		||||
import unicodedata
 | 
			
		||||
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -102,7 +101,7 @@ class LdapManager:
 | 
			
		|||
                    "uidNumber": [str(uidNumber)],
 | 
			
		||||
                    "gidNumber": [str(settings.LDAP_CUSTOMER_GROUP_ID)],
 | 
			
		||||
                    "loginShell": ["/bin/bash"],
 | 
			
		||||
                    "homeDirectory": ["/home/{}".format(unicodedata.normalize('NFKD', user).encode('ascii','ignore'))],
 | 
			
		||||
                    "homeDirectory": ["/home/{}".format(user).encode("utf-8")],
 | 
			
		||||
                    "mail": email.encode("utf-8"),
 | 
			
		||||
                    "userPassword": [self._ssha_password(
 | 
			
		||||
                        password.encode("utf-8")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue