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"{repo_name}" return f"{repo_name} - {repo_description}" @lru_cache(maxsize=16) def get_projects(): projects_data = get_projects_cached(limit=5) projects = "" for project in projects_data: projects += f"""{project["name"]} - {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"}, )