Re-add the link logging
This commit is contained in:
parent
ddb984d0cd
commit
eadc928933
73
app/main.py
73
app/main.py
@ -1,4 +1,4 @@
|
|||||||
from fastapi import FastAPI, Depends, Request
|
from fastapi import FastAPI, Depends, Request, Path
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
from fastapi.responses import RedirectResponse, JSONResponse
|
from fastapi.responses import RedirectResponse, JSONResponse
|
||||||
from fastapi.templating import Jinja2Templates
|
from fastapi.templating import Jinja2Templates
|
||||||
@ -10,11 +10,15 @@ from fastapi.exceptions import HTTPException
|
|||||||
from starlette.status import HTTP_404_NOT_FOUND
|
from starlette.status import HTTP_404_NOT_FOUND
|
||||||
|
|
||||||
from app.util.authentication import get_current_user_from_cookie
|
from app.util.authentication import get_current_user_from_cookie
|
||||||
|
from app.util.db_dependency import get_db
|
||||||
|
from app.util.log import log
|
||||||
from app.schemas.auth_schemas import User
|
from app.schemas.auth_schemas import User
|
||||||
|
from models import Link
|
||||||
|
|
||||||
|
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
title="LinkLogger API",
|
title="LinkLogger API",
|
||||||
version="1.0",
|
version="2.0",
|
||||||
summary="Public API for a combined link shortener and IP logger",
|
summary="Public API for a combined link shortener and IP logger",
|
||||||
license_info={
|
license_info={
|
||||||
"name": "The Unlicense",
|
"name": "The Unlicense",
|
||||||
@ -63,32 +67,32 @@ async def dashboard(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# @app.get("/{link}")
|
@app.get("/c/{link}")
|
||||||
# async def log_redirect(
|
async def log_redirect(
|
||||||
# link: Annotated[str, Path(title="Redirect link")],
|
link: Annotated[str, Path(title="Redirect link")],
|
||||||
# request: Request,
|
request: Request,
|
||||||
# db=Depends(get_db),
|
db=Depends(get_db),
|
||||||
# ):
|
):
|
||||||
# link = link.upper()
|
link = link.upper()
|
||||||
# # If `link` is not exactly 5 characters, return redirect to base url
|
# Links must be 5 characters long
|
||||||
# if len(link) != 5:
|
if len(link) != 5:
|
||||||
# return RedirectResponse(url="/login")
|
return RedirectResponse(url="/login")
|
||||||
|
|
||||||
# # Make sure the link exists in the database
|
# Make sure the link exists in the database
|
||||||
# link_record: Link = db.query(Link).filter(Link.link == link).first()
|
link_record: Link = db.query(Link).filter(Link.link == link).first()
|
||||||
# if not link_record:
|
if not link_record:
|
||||||
# db.close()
|
db.close()
|
||||||
# return RedirectResponse(url="/login")
|
return RedirectResponse(url="/login")
|
||||||
# else:
|
else:
|
||||||
# # Log the visit
|
# Get the IP and log the request
|
||||||
# if request.headers.get("X-Real-IP"):
|
if request.headers.get("X-Real-IP"):
|
||||||
# ip = request.headers.get("X-Real-IP").split(",")[0]
|
ip = request.headers.get("X-Real-IP").split(",")[0]
|
||||||
# else:
|
else:
|
||||||
# ip = request.client.host
|
ip = request.client.host
|
||||||
# user_agent = request.headers.get("User-Agent")
|
user_agent = request.headers.get("User-Agent")
|
||||||
# log(link, ip, user_agent)
|
log(link, ip, user_agent)
|
||||||
# db.close()
|
db.close()
|
||||||
# return RedirectResponse(url=link_record.redirect_link)
|
return RedirectResponse(url=link_record.redirect_link)
|
||||||
|
|
||||||
|
|
||||||
# Redirect /api -> /api/docs
|
# Redirect /api -> /api/docs
|
||||||
@ -100,12 +104,11 @@ async def redirect_to_docs():
|
|||||||
# Custom handler for 404 errors
|
# Custom handler for 404 errors
|
||||||
@app.exception_handler(HTTP_404_NOT_FOUND)
|
@app.exception_handler(HTTP_404_NOT_FOUND)
|
||||||
async def custom_404_handler(request: Request, exc: HTTPException):
|
async def custom_404_handler(request: Request, exc: HTTPException):
|
||||||
|
# If the request is from /api, return a JSON response
|
||||||
|
if request.url.path.startswith("/api"):
|
||||||
|
return JSONResponse(
|
||||||
|
status_code=404,
|
||||||
|
content={"message": "Resource not found"},
|
||||||
|
)
|
||||||
|
# Otherwise, redirect to the login page
|
||||||
return RedirectResponse(url="/login")
|
return RedirectResponse(url="/login")
|
||||||
|
|
||||||
|
|
||||||
@app.exception_handler(HTTPException)
|
|
||||||
async def http_exception_handler(request, exc):
|
|
||||||
return JSONResponse(
|
|
||||||
status_code=exc.status_code,
|
|
||||||
content={"detail": f"{exc.detail}"},
|
|
||||||
)
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user