web
This commit is contained in:
parent
da627a9c48
commit
e001971596
@ -1,5 +1,5 @@
|
||||
from fastapi import FastAPI, Form, Request, Depends, HTTPException
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse, FileResponse
|
||||
from fastapi_mail import FastMail, MessageSchema, ConnectionConfig
|
||||
from fastapi.templating import Jinja2Templates
|
||||
import jwt
|
||||
@ -10,6 +10,8 @@ from pydantic import BaseModel, EmailStr
|
||||
from starlette.middleware.sessions import SessionMiddleware
|
||||
from starlette.responses import Response
|
||||
from utils.auth import create_access_token, verify_access_token
|
||||
from utils.model import FileSystemDatabase, ObjNotFound
|
||||
import os
|
||||
|
||||
# Initialize FastAPI app
|
||||
app = FastAPI()
|
||||
@ -36,6 +38,9 @@ SECRET_KEY = "your_jwt_secret_key"
|
||||
ALGORITHM = "HS256"
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES = 30
|
||||
|
||||
# Initialize FileSystemDatabase
|
||||
fs_db = FileSystemDatabase(base_dir="data")
|
||||
|
||||
# Step 1: Render login page to accept email
|
||||
@app.get("/", response_class=HTMLResponse)
|
||||
async def login_form(request: Request):
|
||||
@ -101,3 +106,20 @@ async def get_user_info(request: Request):
|
||||
return RedirectResponse(url="/signup")
|
||||
|
||||
return templates.TemplateResponse("info.html", {"request": request, "email": email})
|
||||
|
||||
|
||||
@app.get("/{infoname}/{relative_path:path}", response_class=HTMLResponse)
|
||||
async def serve_file(request: Request, infoname: str, relative_path: str):
|
||||
try:
|
||||
info = fs_db.info_get(infoname)
|
||||
except ObjNotFound:
|
||||
raise HTTPException(status_code=404, detail="Info not found")
|
||||
|
||||
file_path = os.path.join(info.path, relative_path)
|
||||
if not os.path.exists(file_path):
|
||||
raise HTTPException(status_code=404, detail="File not found")
|
||||
|
||||
if file_path.endswith(".pdf"):
|
||||
return templates.TemplateResponse("pdf_viewer.html", {"request": request, "pdf_url": f"/static/{relative_path}"})
|
||||
else:
|
||||
return FileResponse(file_path)
|
||||
|
38
authserver/templates/pdf_viewer.html
Normal file
38
authserver/templates/pdf_viewer.html
Normal file
@ -0,0 +1,38 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>PDF Viewer</title>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://mozilla.github.io/pdf.js/web/viewer.css"
|
||||
/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="viewerContainer" class="pdfViewer singlePageView">
|
||||
<div id="viewer" class="pdfViewer"></div>
|
||||
</div>
|
||||
<script src="https://mozilla.github.io/pdf.js/build/pdf.js"></script>
|
||||
<script src="https://mozilla.github.io/pdf.js/web/viewer.js"></script>
|
||||
<script>
|
||||
const url = "{{ pdf_url }}";
|
||||
const loadingTask = pdfjsLib.getDocument(url);
|
||||
loadingTask.promise.then(function (pdf) {
|
||||
const viewer = document.getElementById("viewer");
|
||||
for (let pageNum = 1; pageNum <= pdf.numPages; pageNum++) {
|
||||
pdf.getPage(pageNum).then(function (page) {
|
||||
const viewport = page.getViewport({ scale: 1.5 });
|
||||
const canvas = document.createElement("canvas");
|
||||
const context = canvas.getContext("2d");
|
||||
canvas.height = viewport.height;
|
||||
canvas.width = viewport.width;
|
||||
viewer.appendChild(canvas);
|
||||
page.render({
|
||||
canvasContext: context,
|
||||
viewport: viewport,
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user