Skip to content

Commit

Permalink
Merge 4ae3bad into 7c05b67
Browse files Browse the repository at this point in the history
  • Loading branch information
elnappo committed Jan 30, 2018
2 parents 7c05b67 + 4ae3bad commit 28d0a8e
Show file tree
Hide file tree
Showing 24 changed files with 166 additions and 189 deletions.
14 changes: 7 additions & 7 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,23 @@ env:
- TEST_OPTS=""
- COVERAGE=""
matrix:
- DJANGO=1.8.1
- DJANGO=1.11

matrix:
exclude:
- python: "2.7"
env: DJANGO=1.8.1
env: DJANGO=1.11
- python: "3.6"
env: DJANGO=1.8.1
env: DJANGO=1.11
- python: "3.6-dev"
env: DJANGO=1.8.1
env: DJANGO=1.11
include:
- python: "2.7"
env: DJANGO=1.8.1 COVERAGE="coverage run -m" TEST_K="not ddns_client" TEST_OPTS="--pep8"
env: DJANGO=1.11 COVERAGE="coverage run -m" TEST_K="not ddns_client" TEST_OPTS="--pep8"
- python: "3.6"
env: DJANGO=1.8.18
- python: "3.6-dev"
env: DJANGO=1.11
- python: "3.6-dev"
env: DJANGO=2.0

install:
- ./scripts/travis/install.sh
Expand Down
30 changes: 14 additions & 16 deletions nsupdate/accounts/_tests/test_accounts.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@

import pytest

from django.core.urlresolvers import reverse

from django.urls import reverse

USERNAME = 'test'
PASSWORD = 'pass'
Expand All @@ -29,17 +28,16 @@ def test_views_anon(client):
assert response.status_code == status_code


def test_views_logged_in(client):
client.login(username=USERNAME, password=PASSWORD)
for view, kwargs, status_code in [
('account_profile', dict(), 200),
('account_settings', dict(), 200),
('account_delete', dict(), 200),
('registration_disallowed', dict(), 200),
('registration_complete', dict(), 200),
('registration_register', dict(), 200),
('registration_activation_complete', dict(), 200),
]:
print("%s, %s, %s" % (view, kwargs, status_code))
response = client.get(reverse(view, kwargs=kwargs))
assert response.status_code == status_code
@pytest.mark.parametrize("view,view_kwargs,status_code", (
('account_profile', dict(), 200),
('account_settings', dict(), 200),
('account_delete', dict(), 200),
('registration_disallowed', dict(), 200),
('registration_complete', dict(), 200),
('registration_register', dict(), 302),
('registration_activation_complete', dict(), 200),
))
def test_views_logged_in(client, view, view_kwargs, status_code):
assert client.login(username=USERNAME, password=PASSWORD)
response = client.get(reverse(view, kwargs=view_kwargs))
assert response.status_code == status_code
2 changes: 1 addition & 1 deletion nsupdate/accounts/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class UserProfile(models.Model):
stuff we need additionally to what Django stores in User model
"""
user = models.OneToOneField(settings.AUTH_USER_MODEL, primary_key=True, related_name='profile',
verbose_name=_('user'))
verbose_name=_('user'), on_delete=models.CASCADE)
language = models.CharField(max_length=10, choices=settings.LANGUAGES,
default='', blank=True, null=True,
verbose_name=_('language'))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ <h3 class="panel-title">{% trans 'Change password' %}</h3>
{{ form|bootstrap_horizontal:"col-sm-3 col-lg-3" }}
<div class="form-group">
<div class="col-sm-offset-3 col-sm-8">
<input type="submit" class="btn btn-primary" value="{% trans 'Change my password' %}" /> <a href="{% url 'django.contrib.auth.views.password_reset' %}">{% trans 'Forgot your password?' %}</a>
<input type="submit" class="btn btn-primary" value="{% trans 'Change my password' %}" /> <a href="{% url 'password_reset' %}">{% trans 'Forgot your password?' %}</a>
</div>
</div>
</form>
Expand Down
4 changes: 1 addition & 3 deletions nsupdate/accounts/urls.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from django.conf.urls import patterns
from django.conf.urls import url
from django.views.generic.base import TemplateView

Expand All @@ -8,8 +7,7 @@
from .views import UserProfileView, DeleteUserView, UserChangePasswordView


urlpatterns = patterns(
'',
urlpatterns = (
url(r'^profile/', UserProfileView.as_view(), name="account_profile"),
url(r'^settings/', UserChangePasswordView.as_view(), name='account_settings'),
url(r'^delete/', DeleteUserView.as_view(), name="account_delete"),
Expand Down
2 changes: 1 addition & 1 deletion nsupdate/accounts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_protect
from django.views.decorators.debug import sensitive_post_parameters
from django.core.urlresolvers import reverse, reverse_lazy
from django.urls import reverse, reverse_lazy
from django.shortcuts import redirect
from django.contrib import messages
from django.utils.translation import ugettext_lazy as _
Expand Down
2 changes: 1 addition & 1 deletion nsupdate/api/_tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import base64
from netaddr import IPSet, IPAddress, IPNetwork

from django.core.urlresolvers import reverse
from django.urls import reverse

from nsupdate.main.dnstools import query_ns, FQDN
from nsupdate.main.models import Domain
Expand Down
4 changes: 2 additions & 2 deletions nsupdate/login/templates/login.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ <h2>{% trans "Login with a local Account" %}</h2>
{% if form.errors %}
<p>{% trans "Your username and password didn't match. Please try again." %}</p>
{% endif %}
<form class="form-horizontal" role="form" method="post" action="{% url 'django.contrib.auth.views.login' %}">
<form class="form-horizontal" role="form" method="post" action="{% url 'login' %}">
{% csrf_token %}
{{ form|bootstrap_horizontal:"col-sm-3 col-lg-3" }}
<div class="form-group">
Expand All @@ -21,7 +21,7 @@ <h2>{% trans "Login with a local Account" %}</h2>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<input type="submit" class="btn btn-primary" value="{% trans 'Log in' %}" /> <a href="{% url 'django.contrib.auth.views.password_reset' %}">{% trans 'Forgot your password?' %}</a>
<input type="submit" class="btn btn-primary" value="{% trans 'Log in' %}" /> <a href="{% url 'password_reset' %}">{% trans 'Forgot your password?' %}</a>
<p></p>
<p><a href="{% url 'registration_register' %}">{% trans "Sign up for a new account..." %}</a></p>
</div>
Expand Down
2 changes: 1 addition & 1 deletion nsupdate/login/templates/logout.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<div class="container">
<div class="form-signin">
<p>{% trans "Thanks for spending some quality time with the Web site today." %}</p>
<p><a href="{% url 'django.contrib.auth.views.login' %}">{% trans 'Log in again' %}</a></p>
<p><a href="{% url 'login' %}">{% trans 'Log in again' %}</a></p>
</div>
</div>
{% endblock %}
25 changes: 13 additions & 12 deletions nsupdate/login/urls.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, url
from django.conf.urls import url
from django.contrib.auth.views import login, logout, password_reset, password_reset_done, \
password_reset_confirm, password_reset_complete

urlpatterns = patterns(
'',
urlpatterns = (
# login and logout url
url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}, name='login'),
# or use 'django.contrib.auth.views.logout' with template 'logout.html
url(r'^logout/$', 'django.contrib.auth.views.logout_then_login', name='logout'),
url(r'^login/$', login, {'template_name': 'login.html'}, name='login'),
# or use logout with template 'logout.html'
url(r'^logout/$', logout, name='logout'),

# password reset urls
url(r'^password_reset/$', 'django.contrib.auth.views.password_reset',
{'template_name': 'password_reset.html'}, name='password_reset'),
url(r'^password_reset_done/$', 'django.contrib.auth.views.password_reset_done',
url(r'^password_reset/$', password_reset, {'template_name': 'password_reset.html'},
name='password_reset'),
url(r'^password_reset_done/$', password_reset_done,
{'template_name': 'password_reset_done.html'}, name='password_reset_done'),
url(r'^password_reset_confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$',
'django.contrib.auth.views.password_reset_confirm',
{'template_name': 'password_reset_confirm.html'}, name='password_reset_confirm'),
url(r'^password_reset_complete/$', 'django.contrib.auth.views.password_reset_complete',
password_reset_confirm, {'template_name': 'password_reset_confirm.html'},
name='password_reset_confirm'),
url(r'^password_reset_complete/$', password_reset_complete,
{'template_name': 'password_reset_complete.html'}, name='password_reset_complete'),
)
2 changes: 1 addition & 1 deletion nsupdate/main/_tests/test_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import pytest

from django.core.urlresolvers import reverse
from django.urls import reverse


USERNAME = 'test'
Expand Down
30 changes: 17 additions & 13 deletions nsupdate/main/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
from django.utils.encoding import python_2_unicode_compatible
from django.utils.six import text_type


from . import dnstools

RESULT_MSG_LEN = 255
Expand All @@ -47,7 +46,7 @@ class BlacklistedHost(models.Model):
created_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name='blacklisted_domains',
verbose_name=_('created by'))
verbose_name=_('created by'), on_delete=models.CASCADE)

def __str__(self):
return self.name_re
Expand All @@ -64,6 +63,7 @@ def host_blacklist_validator(value):


from collections import namedtuple

UpdateAlgorithm = namedtuple("update_algorithm", "bitlength bind_name")

UPDATE_ALGORITHM_DEFAULT = 'HMAC_SHA512'
Expand Down Expand Up @@ -128,7 +128,8 @@ class Domain(models.Model):

last_update = models.DateTimeField(_("last update"), auto_now=True)
created = models.DateTimeField(_("created at"), auto_now_add=True)
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='domains', verbose_name=_("created by"))
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='domains', verbose_name=_("created by"),
on_delete=models.CASCADE)

def __str__(self):
return self.name
Expand All @@ -149,7 +150,7 @@ def get_bind9_algorithm(self):
class Meta:
verbose_name = _('domain')
verbose_name_plural = _('domains')
ordering = ('name', )
ordering = ('name',)


@python_2_unicode_compatible
Expand Down Expand Up @@ -249,14 +250,15 @@ class Host(models.Model):

last_update = models.DateTimeField(_("last update"), auto_now=True)
created = models.DateTimeField(_("created at"), auto_now_add=True)
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='hosts', verbose_name=_("created by"),)
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='hosts', verbose_name=_("created by"),
on_delete=models.CASCADE)

def __str__(self):
return u"%s.%s" % (self.name, self.domain.name)

class Meta(object):
unique_together = (('name', 'domain'), )
index_together = (('name', 'domain'), )
unique_together = (('name', 'domain'),)
index_together = (('name', 'domain'),)
verbose_name = _('host')
verbose_name_plural = _('hosts')
ordering = ('domain', 'name') # groupby domain and sort by name
Expand Down Expand Up @@ -345,10 +347,11 @@ def pre_delete_host(sender, **kwargs):
except (dnstools.Timeout, dnstools.NameServerNotAvailable):
# well, we tried to clean up, but we didn't reach the nameserver
pass
except (dnstools.DnsUpdateError, ):
except (dnstools.DnsUpdateError,):
# e.g. PeerBadSignature if host is protected by a key we do not have
pass


pre_delete.connect(pre_delete_host, sender=Host)


Expand All @@ -360,10 +363,11 @@ def post_save_host(sender, **kwargs):
except (dnstools.Timeout, dnstools.NameServerNotAvailable):
# well, we tried to clean up, but we didn't reach the nameserver
pass
except (dnstools.DnsUpdateError, ):
except (dnstools.DnsUpdateError,):
# e.g. PeerBadSignature if host is protected by a key we do not have
pass


post_save.connect(post_save_host, sender=Host)


Expand Down Expand Up @@ -411,7 +415,7 @@ def __str__(self):
return u"%s.%s" % (self.name, text_type(self.main_host))

class Meta(object):
unique_together = (('name', 'main_host'), )
unique_together = (('name', 'main_host'),)
verbose_name = _('related host')
verbose_name_plural = _('related hosts')
ordering = ('main_host', 'name')
Expand Down Expand Up @@ -475,7 +479,7 @@ class ServiceUpdater(models.Model):
created_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name='serviceupdater',
verbose_name=_("created by"))
verbose_name=_("created by"), on_delete=models.CASCADE)

def __str__(self):
return self.name
Expand Down Expand Up @@ -525,10 +529,10 @@ class ServiceUpdaterHostConfig(models.Model):
created_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name='serviceupdaterhostconfigs',
verbose_name=_("created by"))
verbose_name=_("created by"), on_delete=models.CASCADE)

def __str__(self):
return u"%s (%s)" % (self.hostname, self.service.name, )
return u"%s (%s)" % (self.hostname, self.service.name,)

class Meta(object):
verbose_name = _('service updater host config')
Expand Down
5 changes: 2 additions & 3 deletions nsupdate/main/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
main app url dispatching
"""

from django.conf.urls import patterns, url
from django.conf.urls import url

from .views import (
HomeView, OverviewView, HostView, AddHostView, DeleteHostView, AboutView, GenerateSecretView, GenerateNSSecretView,
Expand All @@ -14,8 +14,7 @@
NicDeleteView, AuthorizedNicDeleteView)


urlpatterns = patterns(
'',
urlpatterns = (
# interactive web ui
url(r'^$', HomeView.as_view(), name="home"),
url(r'^about/$', AboutView.as_view(), name="about"),
Expand Down
8 changes: 4 additions & 4 deletions nsupdate/main/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from django.contrib.auth import get_user_model
from django.contrib import messages
from django.utils.decorators import method_decorator
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.http import Http404
from django import template
from django.utils.timezone import now
Expand Down Expand Up @@ -195,7 +195,7 @@ def get_context_data(self, **kwargs):
.only("name", "comment", "available", "client_faults", "server_faults", "abuse_blocked", "abuse",
"last_update_ipv4", "tls_update_ipv4", "last_update_ipv6", "tls_update_ipv6", "domain__name")
context['your_domains'] = Domain.objects.filter(
created_by=self.request.user).select_related("created_by__username")\
created_by=self.request.user).select_related("created_by__profile")\
.only("name", "public", "available", "comment", "created_by__username")
context['public_domains'] = Domain.objects.filter(
public=True).exclude(created_by=self.request.user).select_related("created_by")\
Expand All @@ -215,7 +215,7 @@ def dispatch(self, *args, **kwargs):
def get_success_url(self):
return reverse('generate_secret_view', args=(self.object.pk,))

def get_form(self, form_class):
def get_form(self, form_class=None):
form = super(AddHostView, self).get_form(form_class)
form.fields['domain'].queryset = Domain.objects.filter(
Q(created_by=self.request.user) | Q(public=True))
Expand Down Expand Up @@ -347,7 +347,7 @@ def dispatch(self, *args, **kwargs):
def get_success_url(self):
return reverse('related_host_overview', args=(self.object.main_host.pk, ))

def get_form(self, form_class):
def get_form(self, form_class=None):
form = super(AddRelatedHostView, self).get_form(form_class)
return form

Expand Down

0 comments on commit 28d0a8e

Please sign in to comment.