56 lines
1.1 KiB
Python
Executable file
56 lines
1.1 KiB
Python
Executable file
#!/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 = 'abuse@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.run(port=5001)
|