frontend.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import sqlite3, time, uuid, json
  2. from flask import Flask, request, render_template, jsonify
  3. conn = sqlite3.connect('texts.db', check_same_thread=False)
  4. conn.row_factory = sqlite3.Row
  5. def load_config():
  6. with open('config/api.json') as config:
  7. api = json.load(config)
  8. config = {
  9. "api": api
  10. }
  11. return config
  12. config = load_config()
  13. app = Flask(__name__)
  14. @app.route('/', methods=['GET'])
  15. def index():
  16. numbers = conn.execute('SELECT (SELECT body FROM public_messages WHERE `to` = msisdn ORDER BY timestamp), (SELECT `from` FROM public_messages WHERE `to` = msisdn ORDER BY timestamp), * FROM public_numbers;').fetchall()
  17. return render_template('index.html', numbers=numbers)
  18. @app.route('/public/<uid>', methods=['GET'])
  19. def show_public(uid):
  20. num = conn.execute("SELECT msisdn, country FROM public_numbers WHERE uid = ?;", [uid]).fetchone()
  21. if num is None:
  22. return 'Not found', 404
  23. messages = conn.execute("SELECT * FROM public_messages WHERE `to` = ?;", [num['msisdn']]).fetchall()
  24. return render_template('messages.html', num=num, messages=messages);
  25. @app.route('/api/receive', methods=['PUT'])
  26. def receive():
  27. message = request.get_json()
  28. if 'key' not in message or message['key'] != config["api"]["key"]:
  29. return 'Forbidden', 403
  30. numbers = list()
  31. for n in conn.execute('SELECT msisdn FROM public_numbers;').fetchall():
  32. numbers.append(n[0])
  33. if message['msisdn'] not in numbers:
  34. conn.execute('INSERT INTO public_numbers (uid, msisdn, country) VALUES (?, ?, ?);', (str(uuid.uuid4()), message['msisdn'], 'it'))
  35. conn.commit()
  36. try:
  37. conn.execute('INSERT INTO public_messages (uid, `to`, `from`, body, `timestamp`) VALUES (?, ?, ?, ?, ?);', [str(uuid.uuid4()), message['msisdn'], message['from'], message['text'], int(time.time())])
  38. conn.commit()
  39. return jsonify('Ok'), 200
  40. if __name__ == "__main__":
  41. app.run()