This commit is contained in:
lda committed 2025-12-18 22:48:13 +07:00
1 parent d4fc121506
commit 57a73e9c17
3 files changed
+120 -2

No files matched your search

+20 -1
View File
@@ -34,7 +34,26 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card" style="margin-block: 1em">
<h2>Scan this page</h2>
<p>Connect your phone to the same Wi-Fi and scan this.</p>
<div
class="qrcode"
style="padding: 1rem; background: white; border-radius: 8px"
id="page_url"
></div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/qrcode.js"></script>
<script>
new QRCode(document.getElementById("page_url"), {
text: "{{ page_url }}",
width: 256,
height: 256,
colorDark: "#000000",
colorLight: "#ffffff",
correctLevel: QRCode.CorrectLevel.L,
});
</script>
</div>
<details> <details>
<summary>System Routes</summary> <summary>System Routes</summary>
<div class="route-list"> <div class="route-list">
+22
View File
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>paste pad</title>
</head>
<body>
<input id="n" />
<textarea id="pc"></textarea>
<button type="button" id="s">sendit</button>
<script>
/** @type {HTMLInputElement} */
const name = document.getElementById("n");
/** @type {HTMLTextAreaElement} */
const content = document.getElementById("pc");
/** @type {HTMLButtonElement} */
(document.getElementById("s")).addEventListener("click", () => {});
</script>
</body>
</html>
+78 -1
View File
@@ -1,7 +1,11 @@
"gemini converted" "gemini converted"
from random import choice
import socket
from collections import deque from collections import deque
from itertools import islice from itertools import islice
import string
from typing import Optional
from urllib.parse import urlsplit, urlunsplit from urllib.parse import urlsplit, urlunsplit
from fastapi import FastAPI, Form, Request from fastapi import FastAPI, Form, Request
@@ -15,6 +19,19 @@ templates = Jinja2Templates(directory="templates")
queue: deque[str] = deque() # fifo ahh queue: deque[str] = deque() # fifo ahh
def get_local_ip():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
# doesn't even have to be reachable
s.connect(("10.255.255.255", 1))
IP = s.getsockname()[0]
except Exception:
IP = "127.0.0.1"
finally:
s.close()
return IP
def link_extract_from_onetab(line: str) -> str: def link_extract_from_onetab(line: str) -> str:
"link | title" "link | title"
link = line.split("|", 1)[0].strip() link = line.split("|", 1)[0].strip()
@@ -24,7 +41,14 @@ def link_extract_from_onetab(line: str) -> str:
@app.get("/", response_class=HTMLResponse) @app.get("/", response_class=HTMLResponse)
async def index(request: Request): async def index(request: Request):
"idgaf" "idgaf"
return templates.TemplateResponse(request, "index.html", {"routes": app.routes}) # Construct the URL using the local IP
port = request.url.port or 2222
local_ip = get_local_ip()
page_url = f"{request.url.scheme}://{local_ip}:{port}"
return templates.TemplateResponse(
request, "index.html", {"routes": app.routes, "page_url": page_url}
)
@app.get("/q", response_class=HTMLResponse) @app.get("/q", response_class=HTMLResponse)
@@ -101,6 +125,59 @@ async def send_queue(lines: str = Form("")):
return RedirectResponse(url="/queuein", status_code=303) return RedirectResponse(url="/queuein", status_code=303)
texts: dict[str, str] = {} # name (auto or rewrite): content
@app.get("/pastepad")
async def pastepad_ui(request: Request):
return templates.TemplateResponse(request, "pastepad.html", {"texts": texts})
def random_str(l: int = 8, s=string.ascii_letters + string.digits):
return "".join(choice(s) for _ in range(l))
@app.post("/api/pastepad")
async def paste_in(content: str, name: Optional[str] = None):
if name in texts:
return {"name": name, "content": texts[name]}
if name is None:
name = random_str()
texts[name] = content
return {"name": name, "content": texts[name]}
@app.get("/api/pastepad")
async def paste_query(name: str):
if name in texts:
return {"name": name, "content": texts[name]}
return {"name": None, "content": None}
@app.get("/api/pastepad/all")
async def paste_dump():
return list({"name": n, "content": c} for n, c in texts.items())
@app.delete("/api/pastepad")
async def paste_delete(name: str):
if name in texts:
t = texts[name]
del texts[name]
return {"name": name, "content": t}
return {"name": None, "content": None}
@app.put("/api/pastepad")
@app.patch("/api/pastepad")
async def paste_put(name: str, content: str):
if name in texts:
t = texts[name]
texts[name] = content
return {"name": name, "content": t}
return {"name": None, "content": None}
if __name__ == "__main__": if __name__ == "__main__":
import uvicorn import uvicorn