|
from flask import Flask, request, jsonify |
|
import os |
|
from datetime import datetime |
|
import json |
|
import traceback |
|
|
|
app = Flask(__name__) |
|
BASE_DIR = "markdown_files" |
|
LOG_FILE = "error.log" |
|
os.makedirs(BASE_DIR, exist_ok=True) |
|
|
|
def log_error(req, error_msg): |
|
try: |
|
with open(LOG_FILE, "a", encoding="utf-8") as f: |
|
f.write("\n--- Error Log ---\n") |
|
f.write(f"Time: {datetime.utcnow().isoformat()} UTC\n") |
|
f.write(f"Remote Addr: {request.remote_addr}\n") |
|
f.write(f"Path: {request.path}\n") |
|
f.write(f"Headers: {dict(req.headers)}\n") |
|
f.write(f"Args: {dict(req.args)}\n") |
|
f.write(f"Form: {dict(req.form)}\n") |
|
f.write(f"Raw Data: {req.data.decode('utf-8', errors='ignore')}\n") |
|
f.write(f"Error: {error_msg}\n") |
|
f.write(f"Traceback:\n{traceback.format_exc()}\n") |
|
f.write("------------------\n") |
|
except Exception as e: |
|
print("Logging failed:", e) |
|
|
|
def extract_data(request): |
|
try: |
|
return request.get_json(force=True) |
|
except: |
|
pass |
|
|
|
if "title" in request.args and "content" in request.args: |
|
return { |
|
"title": request.args.get("title"), |
|
"content": request.args.get("content"), |
|
"tag": request.args.get("tag", "untagged") |
|
} |
|
|
|
if "X-Title" in request.headers and "X-Content" in request.headers: |
|
return { |
|
"title": request.headers.get("X-Title"), |
|
"content": request.headers.get("X-Content"), |
|
"tag": request.headers.get("X-Tag", "untagged") |
|
} |
|
|
|
return None |
|
|
|
@app.route("/create-md", methods=["POST"]) |
|
def create_markdown(): |
|
try: |
|
data = extract_data(request) |
|
if not data or "title" not in data or "content" not in data: |
|
raise ValueError("Missing 'title' or 'content' in body, query, or headers.") |
|
|
|
title = data["title"].strip() |
|
content = data["content"] |
|
tag = data.get("tag", "untagged").strip().replace(" ", "_") |
|
|
|
tag_dir = os.path.join(BASE_DIR, tag) |
|
os.makedirs(tag_dir, exist_ok=True) |
|
|
|
filename = f"{title.replace(' ', '_')}_{int(datetime.utcnow().timestamp())}.md" |
|
filepath = os.path.join(tag_dir, filename) |
|
|
|
with open(filepath, "w", encoding="utf-8") as f: |
|
f.write(f"# {title}\n\n{content}") |
|
|
|
return jsonify({ |
|
"message": "Markdown file created", |
|
"filename": filename, |
|
"tag": tag, |
|
"path": filepath |
|
}), 201 |
|
|
|
except Exception as e: |
|
log_error(request, str(e)) |
|
return jsonify({"error": str(e)}), 400 |
|
|
|
if __name__ == "__main__": |
|
app.run(host="0.0.0.0", port=7860) |
|
|