forked from ztp-at/RKSV
-
Notifications
You must be signed in to change notification settings - Fork 0
/
receipt_host.py
executable file
·78 lines (61 loc) · 2.4 KB
/
receipt_host.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env python2.7
###########################################################################
# Copyright 2017 ZT Prentner IT GmbH (www.ztp.at)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
###########################################################################
from builtins import int
from builtins import range
import sys
from flask import Flask, abort, jsonify, make_response
import gettext
gettext.install('rktool', './lang', True)
from librksv import depparser
from librksv import receipt
from librksv import utils
receipt_store = None
app = Flask(__name__)
NOT_FOUND = 404
@app.errorhandler(NOT_FOUND)
def not_found(error):
return make_response(jsonify({ 'error': 'Not found'}), NOT_FOUND)
@app.route('/<string:url_hash>', methods = ['GET'])
def get_url_hash(url_hash):
if url_hash not in receipt_store:
abort(NOT_FOUND)
return jsonify({'code': receipt_store[url_hash]})
def usage():
print("Usage: ./receipt_host.py dep")
print(" ./receipt_host.py jws")
sys.exit(0)
if __name__ == "__main__":
if len(sys.argv) != 2:
usage()
receipts = dict()
if sys.argv[1] == 'dep':
parser = depparser.CertlessStreamDEPParser(sys.stdin)
for chunk in parser.parse(utils.depParserChunkSize()):
for recs, cert, cert_list in chunk:
for cr in recs:
r = depparser.expandDEPReceipt(cr)
rec, pre = receipt.Receipt.fromJWSString(r)
receipts[rec.toURLHash(pre)] = rec.toBasicCode(pre)
elif sys.argv[1] == 'jws':
for l in sys.stdin:
rec, pre = receipt.Receipt.fromJWSString(l.strip())
receipts[rec.toURLHash(pre)] = rec.toBasicCode(pre)
else:
usage()
receipt_store = receipts
app.run(debug = True, use_reloader = False)