diff --git a/public/about.html b/public/about.html deleted file mode 100644 index c7ece39..0000000 --- a/public/about.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "/base.html" %} -{% block title %}About Nercone{% endblock %} -{% block title_prefix %}About{% endblock %} -{% block description %}Nerconeについて{% endblock %} -{% block content %} -
思いついたものを適当に作っているただの学生です。
-作ろうと思ったものをとりあえず作ってみていったらいつの間にかこうなってました。
-低レイヤに興味を持ちつつ結局いつもPythonを使ってしまう残念な人です。
-名前からもわかると思いますが圧倒的猫派です。理由?可愛いからに決まってるじゃないですか。
-カーネルレベルからOSを作ることと、Linuxディストリビューションを作ることと、会社建てるかAppleに入ること。
-Apple, macOS, ARM, Linux, 自作OS, OSINT, 機械学習 など
- - - - - -{% endblock %} diff --git a/public/about.md b/public/about.md new file mode 100644 index 0000000..bbd69d7 --- /dev/null +++ b/public/about.md @@ -0,0 +1,26 @@ +--- +title: About Nercone +title_prefix: About +description: Nerconeについて +--- + +思いついたものを適当に作っているただの学生です。 + +作ろうと思ったものをとりあえず作ってみていったらいつの間にかこうなってました。 + +低レイヤに興味を持ちつつ結局いつもPythonを使ってしまう残念な人です。 + +名前からもわかると思いますが圧倒的猫派です。理由?可愛いからに決まってるじゃないですか。 + +### 今の目標 +カーネルレベルからOSを作ることと、Linuxディストリビューションを作ることと、会社建てるかAppleに入ること。 + +### 興味 +Apple, macOS, ARM, Linux, 自作OS, OSINT, 機械学習 など + + + + + + + diff --git a/public/assets/fonts/InterBIZUD-Bold.ttf b/public/assets/fonts/InterBIZUD-Bold.ttf new file mode 100644 index 0000000..1b34752 Binary files /dev/null and b/public/assets/fonts/InterBIZUD-Bold.ttf differ diff --git a/public/assets/fonts/InterBIZUD-BoldItalic.ttf b/public/assets/fonts/InterBIZUD-BoldItalic.ttf new file mode 100644 index 0000000..eeda514 Binary files /dev/null and b/public/assets/fonts/InterBIZUD-BoldItalic.ttf differ diff --git a/public/assets/fonts/InterBIZUD-Italic.ttf b/public/assets/fonts/InterBIZUD-Italic.ttf new file mode 100644 index 0000000..ada2ef4 Binary files /dev/null and b/public/assets/fonts/InterBIZUD-Italic.ttf differ diff --git a/public/assets/fonts/InterBIZUD-Regular.ttf b/public/assets/fonts/InterBIZUD-Regular.ttf new file mode 100644 index 0000000..9753bef Binary files /dev/null and b/public/assets/fonts/InterBIZUD-Regular.ttf differ diff --git a/public/assets/fonts/MesloBIZUD-Bold.ttf b/public/assets/fonts/MesloBIZUD-Bold.ttf new file mode 100644 index 0000000..1c892a3 Binary files /dev/null and b/public/assets/fonts/MesloBIZUD-Bold.ttf differ diff --git a/public/assets/fonts/MesloBIZUD-BoldItalic.ttf b/public/assets/fonts/MesloBIZUD-BoldItalic.ttf new file mode 100644 index 0000000..b8ef09c Binary files /dev/null and b/public/assets/fonts/MesloBIZUD-BoldItalic.ttf differ diff --git a/public/assets/fonts/MesloBIZUD-Italic.ttf b/public/assets/fonts/MesloBIZUD-Italic.ttf new file mode 100644 index 0000000..08f31f0 Binary files /dev/null and b/public/assets/fonts/MesloBIZUD-Italic.ttf differ diff --git a/public/assets/fonts/MesloBIZUD-Regular.ttf b/public/assets/fonts/MesloBIZUD-Regular.ttf new file mode 100644 index 0000000..e5ffa2d Binary files /dev/null and b/public/assets/fonts/MesloBIZUD-Regular.ttf differ diff --git a/public/assets/thumbnails/error.svg b/public/assets/thumbnails/error.svg new file mode 100644 index 0000000..b3a86d0 --- /dev/null +++ b/public/assets/thumbnails/error.svg @@ -0,0 +1,59 @@ + + diff --git a/public/assets/thumbnails/normal.svg b/public/assets/thumbnails/normal.svg new file mode 100644 index 0000000..957704f --- /dev/null +++ b/public/assets/thumbnails/normal.svg @@ -0,0 +1,47 @@ + + diff --git a/public/base.html b/public/base.html index 5f5d5b8..f690652 100644 --- a/public/base.html +++ b/public/base.html @@ -29,14 +29,14 @@ - + - + diff --git a/public/error.html b/public/error.html index 63da15e..88963cc 100644 --- a/public/error.html +++ b/public/error.html @@ -2,6 +2,8 @@ {% block title %}{{ status_code }} {{ status_code_name }} - Nercone{% endblock %} {% block title_suffix %}{{ status_code }}{% endblock %} {% block header_desc %}{{ joke_message }}{% endblock %} +{% block description %}{{ message }}{% endblock %} +{% block thumbnail_template %}error{% endblock %} {% block content %}{{ message }}
diff --git a/pyproject.toml b/pyproject.toml index 6f94176..78056bd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,6 +7,7 @@ name = "nercone-website" version = "1.0.0" requires-python = ">=3.8" dependencies = [ + "resvg-py", "rjsmin", "rcssmin", "mistune", diff --git a/src/nercone_website/server.py b/src/nercone_website/server.py index 5d5e149..81351f6 100644 --- a/src/nercone_website/server.py +++ b/src/nercone_website/server.py @@ -3,6 +3,8 @@ import json import yaml import random import mistune +import resvg_py +from html import escape from pathlib import Path from bs4 import BeautifulSoup from markitdown import MarkItDown @@ -99,6 +101,32 @@ welcome to nercone.dev! async def fake_error_page(request: Request, code: str): return error_page(templates=templates, request=request, status_code=int(code)) +@app.api_route("/assets/thumbnail/{path:path}", methods=["GET"]) +async def thumbnail(request: Request, path: str) -> Response: + title = request.query_params.get("title", "Untitled Page") + description = request.query_params.get("description", "No description.") + template_type = request.query_params.get("template", "normal") + + parts = [p for p in path.strip("/").split("/") if p] + path_display = "nercone.dev / " + " / ".join(parts) if parts else "nercone.dev" + + svg_filename = "error.svg" if template_type == "error" else "normal.svg" + fonts_dir = Path.cwd().joinpath("public", "assets", "fonts") + + svg_path = Path.cwd().joinpath("public", "assets", "thumbnails", svg_filename) + svg = svg_path.read_text(encoding="utf-8") + svg = svg.replace("__PATH__", escape(path_display)) + svg = svg.replace("__TITLE__", escape(title)) + svg = svg.replace("__DESCRIPTION__", escape(description)) + + font_files = [ + str(fonts_dir / "MesloBIZUD-Regular.ttf"), + str(fonts_dir / "InterBIZUD-Regular.ttf"), + str(fonts_dir / "InterBIZUD-Bold.ttf"), + ] + png = resvg_py.svg_to_bytes(svg, font_files=font_files, width=1200, height=600) + return Response(content=png, media_type="image/png") + @app.api_route("/{full_path:path}", methods=["GET", "POST", "HEAD"]) async def default_response(request: Request, full_path: str) -> Response: if not full_path.endswith(".html") and not full_path.endswith(".md"):