]> git.siccegge.de Git - ksp-webtool.git/blob - server.py
Properly decode UIDs (utf-8 / ignore)
[ksp-webtool.git] / server.py
1 from flask import Flask, request, render_template, make_response, Response
2 from flask import request
3 import hashlib
4 import pgpdump
5 import glob
6 import base64
7 import os.path
8 import math
9
10 basedir = '.'
11 app = Flask(__name__)
12
13 @app.template_filter('base64')
14 def base64_filter(arg):
15 return base64.b64encode(arg)
16
17 @app.template_filter('log2')
18 def log2_filter(arg):
19 return int(math.log(arg, 2) + 1)
20
21 @app.route("/pks/add", methods=['POST'])
22 def add():
23 keytext = request.form['keytext']
24 pgp = pgpdump.AsciiData(keytext)
25 fingerprint = pgp.packets().next().fingerprint
26 with open(os.path.join(basedir, 'data/%s.asc' % fingerprint), 'w') as f:
27 f.write(keytext)
28 return Response("OK", mimetype="text/plain")
29
30 @app.route('/')
31 def index():
32 result = dict()
33 for entry in glob.glob(os.path.join(basedir, 'data/*.asc')):
34 pgp = pgpdump.AsciiData(file(entry).read())
35 uids = []
36 photoids = []
37 subkeys = []
38 public_key = None
39 for packet in pgp.packets():
40 if packet.name == 'Public Key Packet':
41 public_key = packet
42 elif packet.name == 'User ID Packet':
43 uids.append(packet)
44 elif packet.name == 'User Attribute Packet':
45 photoids.append(packet)
46 elif packet.name == 'Public Subkey Packet':
47 subkeys.append(packet)
48 result[public_key.fingerprint] = (public_key, uids, photoids, subkeys)
49 return render_template('index.html', data = result)
50
51 @app.route('/download/')
52 def download():
53 result = []
54 for entry in glob.glob(os.path.join(basedir, 'data/*.asc')):
55 with open(entry) as f:
56 result.append(f.read())
57
58 return Response('\n'.join(result), mimetype='application/pgp')
59
60 @app.route('/fingerprints/')
61 def fingerprints():
62 return Response('\n'.join([ i.split('/')[-1][:-4] for i in
63 glob.glob(os.path.join(basedir, 'data/*.asc')) ]) + '\n',
64 mimetype='text/plain')
65
66 if __name__ == "__main__":
67 app.run(debug=True, port=11371)