web
This commit is contained in:
parent
da627a9c48
commit
e001971596
@ -1,5 +1,5 @@
|
|||||||
from fastapi import FastAPI, Form, Request, Depends, HTTPException
|
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_mail import FastMail, MessageSchema, ConnectionConfig
|
||||||
from fastapi.templating import Jinja2Templates
|
from fastapi.templating import Jinja2Templates
|
||||||
import jwt
|
import jwt
|
||||||
@ -10,6 +10,8 @@ from pydantic import BaseModel, EmailStr
|
|||||||
from starlette.middleware.sessions import SessionMiddleware
|
from starlette.middleware.sessions import SessionMiddleware
|
||||||
from starlette.responses import Response
|
from starlette.responses import Response
|
||||||
from utils.auth import create_access_token, verify_access_token
|
from utils.auth import create_access_token, verify_access_token
|
||||||
|
from utils.model import FileSystemDatabase, ObjNotFound
|
||||||
|
import os
|
||||||
|
|
||||||
# Initialize FastAPI app
|
# Initialize FastAPI app
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
@ -36,6 +38,9 @@ SECRET_KEY = "your_jwt_secret_key"
|
|||||||
ALGORITHM = "HS256"
|
ALGORITHM = "HS256"
|
||||||
ACCESS_TOKEN_EXPIRE_MINUTES = 30
|
ACCESS_TOKEN_EXPIRE_MINUTES = 30
|
||||||
|
|
||||||
|
# Initialize FileSystemDatabase
|
||||||
|
fs_db = FileSystemDatabase(base_dir="data")
|
||||||
|
|
||||||
# Step 1: Render login page to accept email
|
# Step 1: Render login page to accept email
|
||||||
@app.get("/", response_class=HTMLResponse)
|
@app.get("/", response_class=HTMLResponse)
|
||||||
async def login_form(request: Request):
|
async def login_form(request: Request):
|
||||||
@ -101,3 +106,20 @@ async def get_user_info(request: Request):
|
|||||||
return RedirectResponse(url="/signup")
|
return RedirectResponse(url="/signup")
|
||||||
|
|
||||||
return templates.TemplateResponse("info.html", {"request": request, "email": email})
|
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