Initial commit

This commit is contained in:
2025-10-27 14:55:00 +08:00
commit a8383c8019
5 changed files with 74 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.venv
__pycache__

10
Dockerfile Normal file
View File

@ -0,0 +1,10 @@
FROM python:3.11-alpine
WORKDIR /app
COPY requirements.txt .
RUN python -m pip install --no-cache-dir -r requirements.txt
COPY index.html .
COPY main.py .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

20
index.html Normal file
View File

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html>
<head>
<title>小司的个人网站</title>
</head>
<body>
<h1>小司的个人网站</h1>
<p>大家好!欢迎来到我的个人网站!</p>
<form action="/login" method="POST">
<label for="username">用户名:</label>
<input type="text" name="username" value="">
<label for="password">密码:</label>
<input type="password" name="password" value="" placeholder="******">
<input type="submit" value="登录">
</form>
</body>
</html>

39
main.py Normal file
View File

@ -0,0 +1,39 @@
from pathlib import Path
from typing import Annotated
import uvicorn
from fastapi import FastAPI, Form
from fastapi.responses import HTMLResponse, PlainTextResponse
app = FastAPI()
SECRET_PATH = Path("./secret/flag.txt")
HTML_PATH = Path("./index.html")
if not SECRET_PATH.exists():
flag = "konaph{example_flag}"
else:
flag = SECRET_PATH.read_text()
@app.get("/")
async def _() -> HTMLResponse:
return HTMLResponse(content=HTML_PATH.read_text())
@app.post("/login")
async def _(username: Annotated[str, Form()], password: Annotated[str, Form()]):
if username == "im_tsukasa" and password == "ker0r0_k4w4ii":
return PlainTextResponse(f"登录成功!答案为 {flag}\n给此方 BOT 私发:提交答案 {flag}")
return PlainTextResponse("用户名或密码错误!", status_code=401)
if __name__ == "__main__":
uvicorn.run(
app=app,
host="0.0.0.0",
port=8000,
)

3
requirements.txt Normal file
View File

@ -0,0 +1,3 @@
fastapi
uvicorn
python-multipart