Compare commits
3 commits
master
...
8773/add-c
Author | SHA1 | Date | |
---|---|---|---|
|
73c53a7a61 | ||
|
409405f296 | ||
|
e68e0b32f8 |
19 changed files with 137 additions and 66 deletions
.dockerignoreDockerfileMakefile
datacenterlight
digitalglarus/locale/de/LC_MESSAGES
dynamicweb/settings
hosting
release.shrequirements.txttemplates/gdpr
utils
|
@ -1 +0,0 @@
|
||||||
.git
|
|
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 rsync_upload '
|
||||||
@echo ' make install_debian_packages '
|
@echo ' make install_debian_packages '
|
||||||
|
|
||||||
buildimage:
|
|
||||||
docker build -t dynamicweb:$$(git describe) .
|
|
||||||
|
|
||||||
releaseimage: buildimage
|
|
||||||
./release.sh
|
|
||||||
|
|
||||||
collectstatic:
|
collectstatic:
|
||||||
$(PY?) $(BASEDIR)/manage.py collectstatic
|
$(PY?) $(BASEDIR)/manage.py collectstatic
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from cms.plugin_base import CMSPluginBase
|
from cms.plugin_base import CMSPluginBase
|
||||||
from cms.plugin_pool import plugin_pool
|
from cms.plugin_pool import plugin_pool
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from .cms_models import (
|
from .cms_models import (
|
||||||
DCLBannerItemPluginModel, DCLBannerListPluginModel, DCLContactPluginModel,
|
DCLBannerItemPluginModel, DCLBannerListPluginModel, DCLContactPluginModel,
|
||||||
|
@ -10,7 +11,9 @@ from .cms_models import (
|
||||||
DCLSectionPromoPluginModel, DCLCalculatorPluginModel
|
DCLSectionPromoPluginModel, DCLCalculatorPluginModel
|
||||||
)
|
)
|
||||||
from .models import VMTemplate
|
from .models import VMTemplate
|
||||||
from datacenterlight.utils import clear_all_session_vars
|
from datacenterlight.utils import clear_all_session_vars, get_ip_address
|
||||||
|
|
||||||
|
import ipaddress
|
||||||
|
|
||||||
|
|
||||||
@plugin_pool.register_plugin
|
@plugin_pool.register_plugin
|
||||||
|
@ -170,6 +173,25 @@ class DCLContactPlugin(CMSPluginBase):
|
||||||
render_template = "datacenterlight/cms/contact.html"
|
render_template = "datacenterlight/cms/contact.html"
|
||||||
cache = False
|
cache = False
|
||||||
|
|
||||||
|
def render(self, context, instance, placeholder):
|
||||||
|
context = super(DCLContactPlugin, self).render(
|
||||||
|
context, instance, placeholder
|
||||||
|
)
|
||||||
|
request_ip_address = get_ip_address(context['request'])
|
||||||
|
request_v4v6 = ''
|
||||||
|
if (type(ipaddress.ip_address(request_ip_address)) ==
|
||||||
|
ipaddress.IPv4Address):
|
||||||
|
request_v4v6 = 'IPv4'
|
||||||
|
elif (type(ipaddress.ip_address(request_ip_address)) ==
|
||||||
|
ipaddress.IPv6Address):
|
||||||
|
request_v4v6 = 'IPv6'
|
||||||
|
context['ip_address_label_title'] = _(
|
||||||
|
"You are requesting this website from "
|
||||||
|
"{ip_address}.".format(ip_address=request_ip_address))
|
||||||
|
context['ip_address_label'] = _(
|
||||||
|
"Enter '{v4v6}':".format(v4v6=request_v4v6))
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
@plugin_pool.register_plugin
|
@plugin_pool.register_plugin
|
||||||
class DCLFooterPlugin(CMSPluginBase):
|
class DCLFooterPlugin(CMSPluginBase):
|
||||||
|
|
|
@ -1,9 +1,42 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
from datacenterlight.utils import get_ip_address
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
from .models import ContactUs
|
from .models import ContactUs
|
||||||
|
|
||||||
|
import ipaddress
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class ContactForm(forms.ModelForm):
|
class ContactForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
fields = ['name', 'email', 'message']
|
fields = ['name', 'email', 'message', 'ip_address']
|
||||||
model = ContactUs
|
model = ContactUs
|
||||||
|
labels = {
|
||||||
|
"ip_address": _("You are requesting this website from "
|
||||||
|
"{{ip_address}}. Enter 'IPv{{v4v6}}':".format(
|
||||||
|
ip_address='test', v4v6='4'
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.request = kwargs.pop('request', None)
|
||||||
|
super(ContactForm, self).__init__(*args, **kwargs)
|
||||||
|
self.fields['ip_address'] = forms.CharField(required=True)
|
||||||
|
|
||||||
|
def clean_ip_address(self):
|
||||||
|
input_ip_address_text = self.cleaned_data.get('ip_address')
|
||||||
|
request_ip_address = get_ip_address(self.request)
|
||||||
|
ip_address_type_text = 'ipv4'
|
||||||
|
if (type(ipaddress.ip_address(request_ip_address))
|
||||||
|
== ipaddress.IPv4Address):
|
||||||
|
ip_address_type_text = 'ipv4'
|
||||||
|
elif (type(ipaddress.ip_address(request_ip_address))
|
||||||
|
== ipaddress.IPv6Address):
|
||||||
|
ip_address_type_text = 'ipv6'
|
||||||
|
if input_ip_address_text.strip().lower() == ip_address_type_text:
|
||||||
|
return request_ip_address
|
||||||
|
else:
|
||||||
|
raise forms.ValidationError(_("Input correct IP address type"))
|
||||||
|
|
20
datacenterlight/migrations/0032_contactus_ip_address.py
Normal file
20
datacenterlight/migrations/0032_contactus_ip_address.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.4 on 2021-02-11 10:12
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('datacenterlight', '0031_vmpricing_stripe_coupon_id'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='contactus',
|
||||||
|
name='ip_address',
|
||||||
|
field=models.TextField(default='', null=True),
|
||||||
|
),
|
||||||
|
]
|
|
@ -118,6 +118,7 @@ class ContactUs(models.Model):
|
||||||
name = models.CharField(max_length=250)
|
name = models.CharField(max_length=250)
|
||||||
email = models.CharField(max_length=250)
|
email = models.CharField(max_length=250)
|
||||||
message = models.TextField()
|
message = models.TextField()
|
||||||
|
ip_address = models.TextField(default='', null=True)
|
||||||
field = models.DateTimeField(auto_now_add=True)
|
field = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|
|
@ -195,7 +195,7 @@ def handle_metadata_and_emails(order_id, vm_id, manager, user, specs,
|
||||||
email_data = {
|
email_data = {
|
||||||
'subject': settings.DCL_TEXT + " Order from %s" % context['email'],
|
'subject': settings.DCL_TEXT + " Order from %s" % context['email'],
|
||||||
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
||||||
'to': ['dcl-orders@ungleich.ch'],
|
'to': ['info@ungleich.ch'],
|
||||||
'body': "\n".join(
|
'body': "\n".join(
|
||||||
["%s=%s" % (k, v) for (k, v) in context.items()]),
|
["%s=%s" % (k, v) for (k, v) in context.items()]),
|
||||||
'reply_to': [context['email']],
|
'reply_to': [context['email']],
|
||||||
|
@ -233,4 +233,4 @@ def handle_metadata_and_emails(order_id, vm_id, manager, user, specs,
|
||||||
|
|
||||||
logger.debug("New VM ID is {vm_id}".format(vm_id=vm_id))
|
logger.debug("New VM ID is {vm_id}".format(vm_id=vm_id))
|
||||||
if vm_id > 0:
|
if vm_id > 0:
|
||||||
get_or_create_vm_detail(custom_user, manager, vm_id)
|
get_or_create_vm_detail(custom_user, manager, vm_id)
|
|
@ -26,7 +26,7 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-2" for="name">{% trans "Name" %}</label>
|
<label class="control-label col-sm-2" for="name">{% trans "Name" %}</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<input type="text" name="name" class="form-control" data-minlength="3" data-error="{% trans 'Please enter your name.' %}" required>
|
<input id="name" type="text" name="name" class="form-control" data-minlength="3" data-error="{% trans 'Please enter your name.' %}" required value="{{contact_form.name.value}}">
|
||||||
<div class="help-block with-errors"></div>
|
<div class="help-block with-errors"></div>
|
||||||
{{contact_form.name.errors}}
|
{{contact_form.name.errors}}
|
||||||
</div>
|
</div>
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-2" for="email">{% trans "Email" %}</label>
|
<label class="control-label col-sm-2" for="email">{% trans "Email" %}</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<input name="email" type="email" pattern="^[^@\s]+@([^@\s]+\.)+[^@\s]+$" class="form-control" data-error="{% trans 'Please enter a valid email address.' %}" required>
|
<input name="email" type="email" id="email" pattern="^[^@\s]+@([^@\s]+\.)+[^@\s]+$" class="form-control" data-error="{% trans 'Please enter a valid email address.' %}" required value="{{contact_form.email.value}}">
|
||||||
<div class="help-block with-errors"></div>
|
<div class="help-block with-errors"></div>
|
||||||
{{contact_form.email.errors}}
|
{{contact_form.email.errors}}
|
||||||
</div>
|
</div>
|
||||||
|
@ -42,11 +42,19 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-2" for="message">{% trans "Message" %}</label>
|
<label class="control-label col-sm-2" for="message">{% trans "Message" %}</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<textarea class="form-control" name="message" id="message" rows="6" required></textarea>
|
<textarea class="form-control" name="message" id="message" rows="6" required>{{contact_form.message.value}}</textarea>
|
||||||
<div class="help-block with-errors"></div>
|
<div class="help-block with-errors"></div>
|
||||||
{{contact_form.message.errors}}
|
{{contact_form.message.errors}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row"><div class="col-sm-2"> </div><div class="col-sm-10">{{ ip_address_label_title }}{{contact_form.message.errors}}</div></div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-sm-2" for="ip_address" style="white-space: nowrap;" >{{ ip_address_label }}</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input name="ip_address" id="ip_address" type="text" class="form-control"data-error="{% trans 'Please enter the text IPv4 or IPv6 based on your IP address.' %}" required value="{{contact_form.ip_address.value}}">
|
||||||
|
<div class="help-block with-errors">{{contact_form.ip_address.errors}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-sm-offset-2 col-sm-10 text-right">
|
<div class="col-sm-offset-2 col-sm-10 text-right">
|
||||||
<div class="form-error hide">{% trans "Sorry, there was an unexpected error. Kindly retry." %}</div>
|
<div class="form-error hide">{% trans "Sorry, there was an unexpected error. Kindly retry." %}</div>
|
||||||
|
|
|
@ -20,7 +20,7 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
eu_countries = ['at', 'be', 'bg', 'ch', 'cy', 'cz', 'hr', 'dk',
|
eu_countries = ['at', 'be', 'bg', 'ch', 'cy', 'cz', 'hr', 'dk',
|
||||||
'ee', 'fi', 'fr', 'mc', 'de', 'gr', 'hu', 'ie', 'it',
|
'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']
|
'se', 'gb']
|
||||||
|
|
||||||
|
|
||||||
|
@ -303,3 +303,12 @@ def create_tax_id(stripe_customer_id, billing_address_id, type,
|
||||||
billing_address.vat_validation_status = tax_id_obj.verification.status
|
billing_address.vat_validation_status = tax_id_obj.verification.status
|
||||||
billing_address.save()
|
billing_address.save()
|
||||||
return tax_id_obj
|
return tax_id_obj
|
||||||
|
|
||||||
|
|
||||||
|
def get_ip_address(request):
|
||||||
|
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
|
||||||
|
if x_forwarded_for:
|
||||||
|
ip = x_forwarded_for.split(',')[-1].strip()
|
||||||
|
else:
|
||||||
|
ip = request.META.get('REMOTE_ADDR')
|
||||||
|
return ip
|
|
@ -49,11 +49,30 @@ class ContactUsView(FormView):
|
||||||
template_name = "datacenterlight/contact_form.html"
|
template_name = "datacenterlight/contact_form.html"
|
||||||
form_class = ContactForm
|
form_class = ContactForm
|
||||||
|
|
||||||
|
def get_form_kwargs(self):
|
||||||
|
kw = super(ContactUsView, self).get_form_kwargs()
|
||||||
|
kw['request'] = self.request
|
||||||
|
return kw
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
return HttpResponseRedirect(reverse('datacenterlight:index'))
|
return HttpResponseRedirect(reverse('datacenterlight:index'))
|
||||||
|
|
||||||
def form_invalid(self, form):
|
def form_invalid(self, form):
|
||||||
if self.request.is_ajax():
|
if self.request.is_ajax():
|
||||||
|
logger.debug(form)
|
||||||
|
# request_ip_address = get_ip_address(self.request)
|
||||||
|
# request_v4v6 = ''
|
||||||
|
# if (type(ipaddress.ip_address(request_ip_address)) ==
|
||||||
|
# ipaddress.IPv4Address):
|
||||||
|
# request_v4v6 = 'IPv4'
|
||||||
|
# elif (type(ipaddress.ip_address(request_ip_address)) ==
|
||||||
|
# ipaddress.IPv6Address):
|
||||||
|
# request_v4v6 = 'IPv6'
|
||||||
|
# context['ip_address_label_title'] = _(
|
||||||
|
# "You are requesting this website from "
|
||||||
|
# "{ip_address}.".format(ip_address=request_ip_address))
|
||||||
|
# context['ip_address_label'] = _(
|
||||||
|
# "Enter '{v4v6}':".format(v4v6=request_v4v6))
|
||||||
return self.render_to_response(
|
return self.render_to_response(
|
||||||
self.get_context_data(contact_form=form))
|
self.get_context_data(contact_form=form))
|
||||||
else:
|
else:
|
||||||
|
@ -1333,7 +1352,7 @@ def do_provisioning_generic(
|
||||||
'subject': (settings.DCL_TEXT +
|
'subject': (settings.DCL_TEXT +
|
||||||
" Payment received from %s" % context['email']),
|
" Payment received from %s" % context['email']),
|
||||||
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
||||||
'to': ['dcl-orders@ungleich.ch'],
|
'to': ['info@ungleich.ch'],
|
||||||
'body': "\n".join(
|
'body': "\n".join(
|
||||||
["%s=%s" % (k, v) for (k, v) in context.items()]),
|
["%s=%s" % (k, v) for (k, v) in context.items()]),
|
||||||
'reply_to': [context['email']],
|
'reply_to': [context['email']],
|
||||||
|
@ -1507,7 +1526,7 @@ def do_provisioning(request, stripe_api_cus_id, card_details_response,
|
||||||
'subject': (settings.DCL_TEXT +
|
'subject': (settings.DCL_TEXT +
|
||||||
" Payment received from %s" % context['email']),
|
" Payment received from %s" % context['email']),
|
||||||
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
||||||
'to': ['dcl-orders@ungleich.ch'],
|
'to': ['info@ungleich.ch'],
|
||||||
'body': "\n".join(
|
'body': "\n".join(
|
||||||
["%s=%s" % (k, v) for (k, v) in context.items()]),
|
["%s=%s" % (k, v) for (k, v) in context.items()]),
|
||||||
'reply_to': [context['email']],
|
'reply_to': [context['email']],
|
||||||
|
|
|
@ -376,6 +376,8 @@ msgid ""
|
||||||
" digitalglarus.ch<br/>\n"
|
" digitalglarus.ch<br/>\n"
|
||||||
" hack4lgarus.ch<br/>\n"
|
" hack4lgarus.ch<br/>\n"
|
||||||
" ipv6onlyhosting.com<br/>\n"
|
" ipv6onlyhosting.com<br/>\n"
|
||||||
|
" ipv6onlyhosting.ch<br/>\n"
|
||||||
|
" ipv6onlyhosting.net<br/>\n"
|
||||||
" django-hosting.ch<br/>\n"
|
" django-hosting.ch<br/>\n"
|
||||||
" rails-hosting.ch<br/>\n"
|
" rails-hosting.ch<br/>\n"
|
||||||
" node-hosting.ch<br/>\n"
|
" node-hosting.ch<br/>\n"
|
||||||
|
@ -634,8 +636,8 @@ msgstr ""
|
||||||
"Internetangebot der ungleich glarus ag, welches unter den nachfolgenden "
|
"Internetangebot der ungleich glarus ag, welches unter den nachfolgenden "
|
||||||
"Domains erreichbar ist:<br/><br/>ungleich.ch<br/>datacenterlight.ch<br/"
|
"Domains erreichbar ist:<br/><br/>ungleich.ch<br/>datacenterlight.ch<br/"
|
||||||
">devuanhosting.com<br/>devuanhosting.ch<br/>digitalglarus.ch<br/>hack4lgarus."
|
">devuanhosting.com<br/>devuanhosting.ch<br/>digitalglarus.ch<br/>hack4lgarus."
|
||||||
"ch<br/>ipv6onlyhosting.com<br/>django-hosting.ch<br/>rails-hosting.ch"
|
"ch<br/>ipv6onlyhosting.com<br/>ipv6onlyhosting.ch<br/>ipv6onlyhosting.net<br/"
|
||||||
"<br/>node-hosting.ch<br/>blog."
|
">django-hosting.ch<br/>rails-hosting.ch<br/>node-hosting.ch<br/>blog."
|
||||||
"ungleich.ch<br/><br/>Der Datenschutzbeauftragte des Verantwortlichen ist:<br/"
|
"ungleich.ch<br/><br/>Der Datenschutzbeauftragte des Verantwortlichen ist:<br/"
|
||||||
"><br/>Sanghee Kim<br/>ungleich glarus ag<br/>Bahnhofstrasse 1<br/>8783 "
|
"><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."
|
"Linthal (CH)<br/>E-Mail: <a href=\"mailto:sanghee.kim@ungleich.ch\">sanghee."
|
||||||
|
@ -836,4 +838,3 @@ msgstr ""
|
||||||
|
|
||||||
#~ msgid "index/?$"
|
#~ msgid "index/?$"
|
||||||
#~ msgstr "index/?$"
|
#~ msgstr "index/?$"
|
||||||
|
|
||||||
|
|
|
@ -631,6 +631,8 @@ GOOGLE_ANALYTICS_PROPERTY_IDS = {
|
||||||
'datacenterlight.ch': 'UA-62285904-8',
|
'datacenterlight.ch': 'UA-62285904-8',
|
||||||
'devuanhosting.ch': 'UA-62285904-9',
|
'devuanhosting.ch': 'UA-62285904-9',
|
||||||
'devuanhosting.com': 'UA-62285904-9',
|
'devuanhosting.com': 'UA-62285904-9',
|
||||||
|
'ipv6onlyhosting.ch': 'UA-62285904-10',
|
||||||
|
'ipv6onlyhosting.net': 'UA-62285904-10',
|
||||||
'ipv6onlyhosting.com': 'UA-62285904-10',
|
'ipv6onlyhosting.com': 'UA-62285904-10',
|
||||||
'comic.ungleich.ch': 'UA-62285904-13',
|
'comic.ungleich.ch': 'UA-62285904-13',
|
||||||
'127.0.0.1:8000': 'localhost',
|
'127.0.0.1:8000': 'localhost',
|
||||||
|
|
|
@ -28,7 +28,9 @@ ALLOWED_HOSTS = [
|
||||||
".devuanhosting.ch",
|
".devuanhosting.ch",
|
||||||
".devuanhosting.com",
|
".devuanhosting.com",
|
||||||
".digitalezukunft.ch",
|
".digitalezukunft.ch",
|
||||||
|
".ipv6onlyhosting.ch",
|
||||||
".ipv6onlyhosting.com",
|
".ipv6onlyhosting.com",
|
||||||
|
".ipv6onlyhosting.net",
|
||||||
".digitalglarus.ch",
|
".digitalglarus.ch",
|
||||||
".hack4glarus.ch",
|
".hack4glarus.ch",
|
||||||
".xn--nglarus-n2a.ch"
|
".xn--nglarus-n2a.ch"
|
||||||
|
|
|
@ -1315,8 +1315,7 @@ class InvoiceListView(LoginRequiredMixin, TemplateView):
|
||||||
logger.debug("User does not exist")
|
logger.debug("User does not exist")
|
||||||
cu = self.request.user
|
cu = self.request.user
|
||||||
invs = stripe.Invoice.list(customer=cu.stripecustomer.stripe_id,
|
invs = stripe.Invoice.list(customer=cu.stripecustomer.stripe_id,
|
||||||
count=100,
|
count=100)
|
||||||
status='paid')
|
|
||||||
paginator = Paginator(invs.data, 10)
|
paginator = Paginator(invs.data, 10)
|
||||||
try:
|
try:
|
||||||
invs_page = paginator.page(page)
|
invs_page = paginator.page(page)
|
||||||
|
@ -1911,7 +1910,7 @@ class VirtualMachineView(LoginRequiredMixin, View):
|
||||||
'subject': ("Deleted " if response['status']
|
'subject': ("Deleted " if response['status']
|
||||||
else "ERROR deleting ") + admin_msg_sub,
|
else "ERROR deleting ") + admin_msg_sub,
|
||||||
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
||||||
'to': ['dcl-orders@ungleich.ch'],
|
'to': ['info@ungleich.ch'],
|
||||||
'body': "\n".join(
|
'body': "\n".join(
|
||||||
["%s=%s" % (k, v) for (k, v) in admin_email_body.items()]),
|
["%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
|
django-debug-toolbar==1.4
|
||||||
python-dotenv==0.10.3
|
python-dotenv==0.10.3
|
||||||
django-extensions==1.6.7
|
django-extensions==1.6.7
|
||||||
django-filer==2.1.2
|
django-filer==1.2.0
|
||||||
django-filter==0.13.0
|
django-filter==0.13.0
|
||||||
django-formtools==1.0
|
django-formtools==1.0
|
||||||
django-guardian==1.4.4
|
django-guardian==1.4.4
|
||||||
|
@ -83,7 +83,7 @@ stripe==2.41.0
|
||||||
wheel==0.29.0
|
wheel==0.29.0
|
||||||
django-admin-honeypot==1.0.0
|
django-admin-honeypot==1.0.0
|
||||||
coverage==4.3.4
|
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
|
djangorestframework==3.6.3
|
||||||
flake8==3.3.0
|
flake8==3.3.0
|
||||||
python-memcached==1.58
|
python-memcached==1.58
|
||||||
|
|
|
@ -134,6 +134,8 @@
|
||||||
digitalglarus.ch<br/>
|
digitalglarus.ch<br/>
|
||||||
hack4lgarus.ch<br/>
|
hack4lgarus.ch<br/>
|
||||||
ipv6onlyhosting.com<br/>
|
ipv6onlyhosting.com<br/>
|
||||||
|
ipv6onlyhosting.ch<br/>
|
||||||
|
ipv6onlyhosting.net<br/>
|
||||||
django-hosting.ch<br/>
|
django-hosting.ch<br/>
|
||||||
rails-hosting.ch<br/>
|
rails-hosting.ch<br/>
|
||||||
node-hosting.ch<br/>
|
node-hosting.ch<br/>
|
||||||
|
|
|
@ -3,7 +3,6 @@ import hashlib
|
||||||
import random
|
import random
|
||||||
import ldap3
|
import ldap3
|
||||||
import logging
|
import logging
|
||||||
import unicodedata
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
@ -102,7 +101,7 @@ class LdapManager:
|
||||||
"uidNumber": [str(uidNumber)],
|
"uidNumber": [str(uidNumber)],
|
||||||
"gidNumber": [str(settings.LDAP_CUSTOMER_GROUP_ID)],
|
"gidNumber": [str(settings.LDAP_CUSTOMER_GROUP_ID)],
|
||||||
"loginShell": ["/bin/bash"],
|
"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"),
|
"mail": email.encode("utf-8"),
|
||||||
"userPassword": [self._ssha_password(
|
"userPassword": [self._ssha_password(
|
||||||
password.encode("utf-8")
|
password.encode("utf-8")
|
||||||
|
|
Loading…
Add table
Reference in a new issue