Re-add the link logging

This commit is contained in:
Parker M. 2024-11-05 21:39:25 -06:00
parent ddb984d0cd
commit eadc928933
Signed by: parker
GPG Key ID: 505ED36FC12B5D5E

View File

@ -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}"},
)