diff --git a/grepodata.py b/grepodata.py new file mode 100644 index 0000000..e4b5f3e --- /dev/null +++ b/grepodata.py @@ -0,0 +1,61 @@ +from flask import Flask, request, jsonify +from flask_cors import CORS +import json +import os +import re +from datetime import datetime # āœ… minimal timestamp support + +app = Flask(__name__) +CORS(app) + +def sanitize_filename(name): + """Remove unsafe characters from filename.""" + safe = re.sub(r'[\/:*?"<>|]', '', name) + return safe[:50] if len(safe) > 50 else safe + +def save_payload_as_player_file(payload): + """Save payload to a file named after the player, overwriting if exists.""" + try: + player_name = payload.get("player", "default_player") + filename = sanitize_filename(player_name) + ".json" + + with open(filename, "w", encoding="utf-8") as f: + json.dump(payload, f, ensure_ascii=False, indent=2) + + print(f"šŸ“ Payload saved to {filename}") + except Exception as e: + print("āŒ Failed to save payload:", e) + +@app.route('/api/grepolis-data', methods=['POST']) +def receive_data(): + print("\nšŸ“¬ New request to /api/grepolis-data") + + try: + payload = request.get_json(force=True) + print("āœ… Parsed JSON:", payload) + + # Inject server-side timestamp (system time) + payload["server_received_at"] = datetime.now().isoformat() + + save_payload_as_player_file(payload) + + return jsonify({ + "status": "success", + "message": "Grepolis data received and saved", + "server_received_at": payload["server_received_at"] + }), 200 + + except Exception as e: + print("āŒ JSON parse error:", e) + return jsonify({ + "status": "error", + "message": f"Invalid JSON: {str(e)}" + }), 400 + +@app.errorhandler(Exception) +def handle_error(e): + print("šŸ’„ Unhandled server error:", e) + return jsonify({"error": str(e)}), 500 + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000) \ No newline at end of file