Push code

This commit is contained in:
kpcyrd 2015-02-02 23:30:51 +00:00
parent 661a3820cb
commit 4babb07e94
9 changed files with 157 additions and 0 deletions

2
.gitignore vendored
View file

@ -5,6 +5,8 @@ __pycache__/
# C extensions
*.so
/db/
# Distribution / packaging
.Python
env/

3
blacklist.txt Normal file
View file

@ -0,0 +1,3 @@
www
jabber
hamburg

31
build.py Executable file
View file

@ -0,0 +1,31 @@
#!/usr/bin/env python
from glob import glob
import json
import os
DOMAIN = 'ff-hh.net'
OUT = '/etc/nginx/v6helper.d/'
template = '''
server {
listen 80;
listen [::]:80;
server_name %%s.%s;
access_log off;
error_log /dev/null crit;
location / {
proxy_pass http://[%%s];
include /etc/nginx/proxy_params;
}
}
''' % DOMAIN
for path in glob('db/*'):
with open(path) as f:
x = json.load(f)
with open(os.path.join(OUT, x['name']), 'w') as f:
pass
f.write(template % (x['name'], x['ipv6']))

0
db/.gitkeep Normal file
View file

56
server.py Executable file
View file

@ -0,0 +1,56 @@
#!/usr/bin/env python
from flask import Flask, render_template, request, redirect
import socket
import json
import os
import re
app = Flask(__name__)
DOMAIN = 'ff-hh.net'
ABUSE = 'rm-pls@hamburg.freifunk.net'
DB = 'db/'
kwargs = dict(domain=DOMAIN, abuse=ABUSE)
@app.route('/')
def index():
return render_template('index.html', **kwargs)
@app.route('/add', methods=['POST'])
def add():
name = request.form['name']
ipv6 = request.form['ipv6']
if not re.match('^[a-z0-9]+$', name):
return 'name rejected'
with open('blacklist.txt') as f:
blacklist = [x.strip() for x in f if x.strip()]
if name in blacklist:
return 'name is blacklisted'
if os.path.exists(os.path.join(DB, name)):
return 'name exists'
try:
socket.inet_pton(socket.AF_INET6, ipv6)
except socket.error:
return 'invalid ipv6'
else:
with open(os.path.join(DB, name), 'w') as f:
json.dump({'name': name, 'ipv6': ipv6}, f)
return redirect('/done')
@app.route('/done')
def done():
return render_template('done.html', **kwargs)
if __name__ == '__main__':
app.debug = True
app.run(port=5001)

8
static/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

3
static/style.css Normal file
View file

@ -0,0 +1,3 @@
.container {
max-width: 500px;
}

1
templates/done.html Normal file
View file

@ -0,0 +1 @@
yey

53
templates/index.html Normal file
View file

@ -0,0 +1,53 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>{{ domain }}</title>
<link rel="stylesheet" href="/static/bootstrap.min.css">
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
<div class="container">
<h1>{{ domain }}</h1>
<form method="post" action="/add">
<div class="form-group">
<label for="name">Name</label>
<div class="input-group">
<input class="form-control" id="name" name="name" placeholder="yourname">
<div class="input-group-addon">.{{ domain }}</div>
</div>
</div>
<div class="form-group">
<label for="name">IPv6</label>
<input class="form-control" id="ipv6" name="ipv6" placeholder="2a03:2267::dead:beef">
</div>
<div class="text-right">
<input class="btn btn-primary" type="submit" value="Hinzufügen">
</div>
</form>
<div class="row">
<div class="col-md-6">
<h3>Name</h3>
<p>Der Name unter dem deine Seite erreichbar sein soll. Wenn du den Namen foo eingibst, ist sie danach unter foo.mesh.hamburg erreichbar.</p>
</div>
<div class="col-md-6">
<h3>IPv6</h3>
<p>Die IPv6 Adresse von deinem Gerät, dass du öffentlich erreichbar machen möchtest.</p>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3>Gentle*man Agreement</h3>
<p>Kein Missbrauch pls.</p>
</div>
<div class="col-md-6">
<h3>Missbrauch melden</h3>
<p>Wenn du eine Seite findest die dir nicht gefällt, schreibe uns doch einfach eine Email an &lt;<a href="mailto:{{ abuse }}">{{ abuse }}</a>&gt; und wir kümmern uns drum.</p>
</div>
</div>
</div>
</body>
</html>