125 lines
3.7 KiB
Python
125 lines
3.7 KiB
Python
from flask import Flask, request, jsonify
|
|
import os
|
|
import json
|
|
from datetime import datetime
|
|
|
|
app = Flask(__name__)
|
|
|
|
# Route to get configuration
|
|
@app.route('/getconfig', methods=['POST'])
|
|
def get_config():
|
|
try:
|
|
token_id = request.headers.get('ID')
|
|
|
|
if not token_id:
|
|
return jsonify({'error': 'Token ID is missing'}), 400
|
|
|
|
config_file = os.path.join('config', f'{token_id}.json')
|
|
|
|
if not os.path.exists(config_file):
|
|
return jsonify({'error': 'Config not found for the specified token'}), 404
|
|
|
|
with open(config_file, 'r') as file:
|
|
config = json.load(file)
|
|
|
|
|
|
data_file = os.path.join('config', f'{token_id}.json')
|
|
|
|
with open(data_file, 'r') as file:
|
|
data = json.load(file)
|
|
# Extract and include last timestamp in the response
|
|
try:
|
|
config['last_timestamp'] = data['timestamps'][len(data['timestamps'])-1]
|
|
except:
|
|
config['last_timestamp']=0
|
|
return jsonify(config), 200
|
|
|
|
except Exception as e:
|
|
return jsonify({'error': str(e)}), 500
|
|
|
|
# Route to set new data
|
|
|
|
|
|
|
|
@app.route('/setdata', methods=['POST'])
|
|
def set_data():
|
|
# Token-ID aus den Request-Headern extrahieren
|
|
token_id = request.headers.get('ID')
|
|
|
|
# Neue Daten aus den Request-Headern laden
|
|
new_data = request.headers.get('JSON')
|
|
|
|
try:
|
|
# Versuche, das JSON zu laden
|
|
new_data = json.loads(new_data)
|
|
except json.JSONDecodeError:
|
|
# Wenn das JSON nicht korrekt formatiert ist, schreibe das neue JSON in die Datei und beende die Funktion
|
|
write_json_file(token_id, new_data)
|
|
return 'Invalid JSON format. New JSON data has been written to the file and overwritten existing data.'
|
|
|
|
# Pfad zum Datenordner und Datei für die Token-ID erstellen
|
|
data_folder = 'data'
|
|
file_path = os.path.join(data_folder, f'{token_id}.json')
|
|
|
|
# Überprüfen, ob die Datei existiert und Daten enthält
|
|
if os.path.exists(file_path) and os.path.getsize(file_path) > 0:
|
|
# Bestehende Daten aus der Datei laden
|
|
with open(file_path, 'r') as file:
|
|
existing_data = json.load(file)
|
|
|
|
# Merge der beiden JSON-Objekte
|
|
merged_data = merge_json(existing_data, new_data)
|
|
else:
|
|
# Wenn die Datei nicht existiert oder leer ist, neue Daten verwenden
|
|
merged_data = new_data
|
|
|
|
# Daten in die Datei schreiben
|
|
with open(file_path, 'w') as file:
|
|
json.dump(merged_data, file)
|
|
|
|
return 'Data successfully set!'
|
|
|
|
def write_json_file(token_id, new_data):
|
|
"""
|
|
Funktion zum Schreiben von JSON-Daten in eine Datei.
|
|
"""
|
|
# Pfad zum Datenordner und Datei für die Token-ID erstellen
|
|
data_folder = 'data'
|
|
file_path = os.path.join(data_folder, f'{token_id}.json')
|
|
|
|
# Neue Daten in die Datei schreiben
|
|
with open(file_path, 'w') as file:
|
|
json.dump(new_data, file)
|
|
|
|
def merge_json(old_json, new_json):
|
|
if not isinstance(old_json, dict) or not isinstance(new_json, dict):
|
|
return old_json
|
|
|
|
for key, value in new_json.items():
|
|
if key not in old_json:
|
|
old_json[key] = value
|
|
elif isinstance(value, list):
|
|
if key not in old_json:
|
|
old_json[key] = []
|
|
if key == "timestamps":
|
|
for item in value:
|
|
if item not in old_json[key]:
|
|
old_json[key].append(item)
|
|
else:
|
|
old_json[key].extend(value)
|
|
elif isinstance(value, dict):
|
|
old_json[key] = merge_json(old_json.get(key, {}), value)
|
|
else:
|
|
old_json[key] = value
|
|
|
|
return old_json
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=False)
|