Compare commits
21 commits
no_ipv4_wi
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
64e4c3813d | ||
|
23674cc061 | ||
|
926c59276b | ||
|
ce6f4c5ff5 | ||
|
32ac399c7f | ||
|
243e10d809 | ||
|
daa48c907f | ||
|
29684a52e0 | ||
|
334043c832 | ||
|
4c9079e025 | ||
|
23c35162ac | ||
|
b9b1a07eeb | ||
|
c6517f091a | ||
|
0733925af0 | ||
|
37e90729c0 | ||
|
559c2c9170 | ||
|
678f6f424e | ||
|
bed453a208 | ||
|
b590f3c497 | ||
|
e2202ae53d | ||
|
047ce05375 |
8 changed files with 124 additions and 26 deletions
|
@ -1,3 +0,0 @@
|
|||
DEBUG=False
|
||||
SECRET_KEY=phaxiz3uqu4eiD4gaipoSh3Ao2Aim9jie6aS2liec1yi0ogi
|
||||
ALLOWED_HOSTS=*,
|
8
CHANGELOG.md
Normal file
8
CHANGELOG.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
# The no-ipv4-here project
|
||||
|
||||
## [Unreleased]
|
||||
- Add a hyperlink to the domain if `back_to` GET parameter is passed
|
||||
|
||||
## [1.0.0] - 2019-02-02
|
||||
### Added
|
||||
- The first basic version of the project
|
74
no_ipv4_here/templates/no_ipv4_here/index.html
Normal file
74
no_ipv4_here/templates/no_ipv4_here/index.html
Normal file
|
@ -0,0 +1,74 @@
|
|||
{% load static from staticfiles %}
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style>
|
||||
.responsive {
|
||||
width: 100%;
|
||||
max-width: 496px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.content-margin {
|
||||
margin: 20px 10%;
|
||||
}
|
||||
body {
|
||||
font-family: Helvetica, sans-serif;
|
||||
font-size: 15pt;
|
||||
color: black;
|
||||
}
|
||||
.para-title{
|
||||
font-weight: 600;
|
||||
}
|
||||
footer{
|
||||
margin: 50px 0 25px;
|
||||
}
|
||||
</style>
|
||||
<title>{{ domain|default:"This part of the Internet" }} is not
|
||||
reachable by IPv4</title>
|
||||
<meta name="keywords" content="IPv6, IPv4, End of IPv4, IPv6 only">
|
||||
<meta name="description" content="The end of the IPv4 Internet">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<img src="{% static 'img/ipv6onlyhosting-ungleich-deadend.jpg' %}"
|
||||
alt="ipv6onlyhosting-ungleich-deadend"
|
||||
class="responsive" width="600" height="400">
|
||||
|
||||
<div class="center content-margin">
|
||||
<p>
|
||||
You have reached the end of the IPv4 Internet.
|
||||
|
||||
{% if back_to_url != "" %}
|
||||
<br>
|
||||
The site {{ domain }} is not reachable by IPv4.
|
||||
To access
|
||||
<a href="{{ back_to_url }}" target="_blank">{{ domain }}</a>,
|
||||
you need to enable IPv6 on your computer.
|
||||
{% endif %}
|
||||
|
||||
<br>
|
||||
Find out
|
||||
<a href="https://ungleich.ch/en-us/cms/blog/2019/02/05/how-to-get-ipv6/">
|
||||
how to enable IPv6</a>.
|
||||
<br>
|
||||
<a href="https://redmine.ungleich.ch/projects/open-infrastructure/wiki/How_to_disable_IPv4_on_your_website">How
|
||||
to use this service</a> for your IPv6 only service.
|
||||
</p>
|
||||
</div>
|
||||
<footer class="center">
|
||||
This service is provided to you by <a href="https://ungleich.ch" target="_blank">ungleich</a>.
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
|
@ -1,23 +1,28 @@
|
|||
from django.http import HttpResponse
|
||||
from urllib.parse import urlsplit
|
||||
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
import re
|
||||
|
||||
# Create your views here.
|
||||
|
||||
def index(request):
|
||||
back_to_url = ""
|
||||
if "back_to" in request.GET:
|
||||
back_to_url = request.GET["back_to"]
|
||||
elif 'HTTP_HOST' in request.META:
|
||||
back_to_url = request.META['HTTP_HOST']
|
||||
if back_to_url != "":
|
||||
return HttpResponse(
|
||||
"""Sorry, <a href="{domain}">this part of domain</a> is not reachable by IPv4.
|
||||
Please upgrade to IPv6 and try to reach {domain} again.""".format(
|
||||
domain=back_to_url
|
||||
)
|
||||
)
|
||||
else:
|
||||
return HttpResponse(
|
||||
"""Sorry, this part of domain is not reachable by IPv4.
|
||||
Please upgrade to IPv6 and try to reach the domain again."""
|
||||
)
|
||||
class IndexView(TemplateView):
|
||||
template_name = 'no_ipv4_here/index.html'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(IndexView, self).get_context_data(**kwargs)
|
||||
back_to_url = ""
|
||||
|
||||
if "back_to" in self.request.GET:
|
||||
back_to_url = self.request.GET["back_to"]
|
||||
elif 'HTTP_HOST' in self.request.META:
|
||||
# Exclude ourselves
|
||||
if not re.match("^(no-ipv4-here.ungleich.ch|localhost)", self.request.META['HTTP_HOST']):
|
||||
back_to_url = "http://{}".format(self.request.META['HTTP_HOST'])
|
||||
|
||||
|
||||
context['back_to_url'] = back_to_url
|
||||
if back_to_url != "":
|
||||
context['domain'] = (urlsplit(back_to_url)).netloc
|
||||
|
||||
return context
|
||||
|
|
BIN
static/img/favicon.ico
Normal file
BIN
static/img/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
static/img/ipv6onlyhosting-ungleich-deadend.jpg
Normal file
BIN
static/img/ipv6onlyhosting-ungleich-deadend.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 133 KiB |
|
@ -62,8 +62,8 @@ ROOT_URLCONF = 'ungleich_no_ipv4_here.urls'
|
|||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [os.path.join(BASE_DIR, 'templates')]
|
||||
,
|
||||
'DIRS': [os.path.join(BASE_DIR,
|
||||
'no_ipv4_here/templates')],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
|
@ -123,3 +123,10 @@ USE_TZ = True
|
|||
# https://docs.djangoproject.com/en/2.1/howto/static-files/
|
||||
|
||||
STATIC_URL = '/static/'
|
||||
|
||||
STATICFILES_DIRS = (
|
||||
os.path.join(BASE_DIR, 'static'),
|
||||
)
|
||||
|
||||
STATIC_ROOT = env.str('STATIC_ROOT', os.path.join(BASE_DIR, '/staticfiles/'))
|
||||
|
||||
|
|
|
@ -13,12 +13,19 @@ Including another URLconf
|
|||
1. Import the include() function: from django.urls import include, path
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.conf.urls import url
|
||||
from django.contrib import admin
|
||||
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
|
||||
from django.urls import path
|
||||
from django.views.generic import RedirectView
|
||||
|
||||
from no_ipv4_here import views
|
||||
from no_ipv4_here.views import IndexView
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.index, name='index'),
|
||||
url(r'^$', IndexView.as_view(), name='index'),
|
||||
path('admin/', admin.site.urls),
|
||||
url(r'^favicon\.ico$',
|
||||
RedirectView.as_view(url='/static/img/favicon.ico')),
|
||||
]
|
||||
|
||||
urlpatterns += staticfiles_urlpatterns()
|
||||
|
|
Loading…
Reference in a new issue