from flask import render_template from tools import getAddress, get_tools_data, getClientIP import os from functools import lru_cache from blueprints.spotify import get_spotify_track from cache_helper import get_git_latest_activity, get_projects as get_projects_cached MAX_WIDTH = 80 def clean_path(path:str): path = path.strip("/ ").lower() # Strip any .html extension if path.endswith(".html"): path = path[:-5] # If the path is empty, set it to "index" if path == "": path = "index" return path @lru_cache(maxsize=1) def get_header(): with open("templates/header.ascii", "r") as f: return f.read() @lru_cache(maxsize=16) def get_current_project(): git = get_git_latest_activity() repo_name = git["repo"]["name"].lower() repo_description = git["repo"]["description"] if not repo_description: return f"[1;36m{repo_name}[0m" return f"[1;36m{repo_name}[0m - [1m{repo_description}[0m" @lru_cache(maxsize=16) def get_projects(): projects_data = get_projects_cached(limit=5) projects = "" for project in projects_data: projects += f"""[1m{project['name']}[0m - {project['description'] if project['description'] else 'No description'} {project['html_url']} """ return projects def curl_response(request): # Check if .ascii exists path = clean_path(request.path) # Handle special cases if path == "index": # Get current project return render_template("index.ascii",repo=get_current_project(), ip=getClientIP(request), spotify=get_spotify_track()), 200, {'Content-Type': 'text/plain; charset=utf-8'} if path == "projects": # Get projects return render_template("projects.ascii",header=get_header(),projects=get_projects()), 200, {'Content-Type': 'text/plain; charset=utf-8'} if path == "donate": # Get donation info return render_template("donate.ascii",header=get_header(), HNS=getAddress("HNS"), BTC=getAddress("BTC"), SOL=getAddress("SOL"), ETH=getAddress("ETH") ), 200, {'Content-Type': 'text/plain; charset=utf-8'} if path == "donate/more": coinList = os.listdir(".well-known/wallets") coinList = [file for file in coinList if file[0] != "."] coinList.sort() return render_template("donate_more.ascii",header=get_header(), coins=coinList ), 200, {'Content-Type': 'text/plain; charset=utf-8'} # For other donation pages, fall back to ascii if it exists if path.startswith("donate/"): coin = path.split("/")[1] address = getAddress(coin) if address != "": return render_template("donate_coin.ascii",header=get_header(),coin=coin.upper(),address=address), 200, {'Content-Type': 'text/plain; charset=utf-8'} if path == "tools": tools = get_tools_data() return render_template("tools.ascii",header=get_header(),tools=tools), 200, {'Content-Type': 'text/plain; charset=utf-8'} if os.path.exists(f"templates/{path}.ascii"): return render_template(f"{path}.ascii",header=get_header()), 200, {'Content-Type': 'text/plain; charset=utf-8'} # Fallback to html if it exists if os.path.exists(f"templates/{path}.html"): return render_template(f"{path}.html") # Return curl error page error = { "code": 404, "message": "The requested resource was not found on this server." } return render_template("error.ascii",header=get_header(),error=error), 404, {'Content-Type': 'text/plain; charset=utf-8'}