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)