Add core devterm module files
Some checks failed
CI / test (3.10) (push) Failing after 30s
CI / test (3.12) (push) Has been cancelled
CI / test (3.11) (push) Has been cancelled
CI / test (3.8) (push) Has been cancelled
CI / test (3.9) (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / typecheck (push) Has been cancelled
CI / build-package (push) Has been cancelled

This commit is contained in:
2026-01-29 11:10:54 +00:00
parent 73b0396902
commit 0792d9980e

141
devterm/server/routes.py Normal file
View File

@@ -0,0 +1,141 @@
from fastapi import APIRouter, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from pathlib import Path
from devterm.tools.json_tool import format_json, validate_json
from devterm.tools.jwt_tool import decode_jwt
from devterm.tools.cron_tool import validate_cron, get_next_run
from devterm.tools.base64_tool import encode_base64, decode_base64
from devterm.tools.url_tool import encode_url, decode_url
router = APIRouter()
templates = Jinja2Templates(directory=str(Path(__file__).parent.parent / "templates"))
async def get_body(request: Request) -> str:
body = await request.body()
return body.decode("utf-8") if body else ""
@router.get("/json", response_class=HTMLResponse)
async def json_page(request: Request):
return templates.TemplateResponse("json.html", {"request": request})
@router.post("/json/format")
async def format_json_endpoint(request: Request):
data = await get_body(request)
try:
if not data:
return {"error": "No data provided"}
result = format_json(data)
return {"result": result, "valid": True}
except Exception as e:
return {"error": str(e), "valid": False}
@router.post("/json/validate")
async def validate_json_endpoint(request: Request):
data = await get_body(request)
try:
if not data:
return {"error": "No data provided"}
is_valid = validate_json(data)
return {"valid": is_valid}
except Exception as e:
return {"error": str(e), "valid": False}
@router.get("/jwt", response_class=HTMLResponse)
async def jwt_page(request: Request):
return templates.TemplateResponse("jwt.html", {"request": request})
@router.post("/jwt/decode")
async def decode_jwt_endpoint(request: Request):
token = await get_body(request)
try:
if not token:
return {"error": "No token provided"}
result = decode_jwt(token)
return result
except Exception as e:
return {"error": str(e)}
@router.get("/cron", response_class=HTMLResponse)
async def cron_page(request: Request):
return templates.TemplateResponse("cron.html", {"request": request})
@router.post("/cron/validate")
async def validate_cron_endpoint(request: Request):
cron_expr = await get_body(request)
try:
if not cron_expr:
return {"error": "No cron expression provided"}
is_valid = validate_cron(cron_expr)
next_run = get_next_run(cron_expr) if is_valid else None
return {"valid": is_valid, "next_run": next_run}
except Exception as e:
return {"error": str(e), "valid": False}
@router.get("/base64", response_class=HTMLResponse)
async def base64_page(request: Request):
return templates.TemplateResponse("base64.html", {"request": request})
@router.post("/base64/encode")
async def encode_base64_endpoint(request: Request):
data = await get_body(request)
try:
if not data:
return {"error": "No data provided"}
result = encode_base64(data)
return {"result": result}
except Exception as e:
return {"error": str(e)}
@router.post("/base64/decode")
async def decode_base64_endpoint(request: Request):
data = await get_body(request)
try:
if not data:
return {"error": "No data provided"}
result = decode_base64(data)
return {"result": result}
except Exception as e:
return {"error": str(e)}
@router.get("/url", response_class=HTMLResponse)
async def url_page(request: Request):
return templates.TemplateResponse("url.html", {"request": request})
@router.post("/url/encode")
async def encode_url_endpoint(request: Request):
data = await get_body(request)
try:
if not data:
return {"error": "No data provided"}
result = encode_url(data)
return {"result": result}
except Exception as e:
return {"error": str(e)}
@router.post("/url/decode")
async def decode_url_endpoint(request: Request):
data = await get_body(request)
try:
if not data:
return {"error": "No data provided"}
result = decode_url(data)
return {"result": result}
except Exception as e:
return {"error": str(e)}