Session sin expiracion, mostrar IP de red
This commit is contained in:
@@ -1,95 +1,103 @@
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
|
||||
from fastapi import FastAPI, Request, Depends
|
||||
from fastapi.responses import RedirectResponse
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from fastapi.templating import Jinja2Templates
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
import uvicorn
|
||||
|
||||
from app.database import init_db
|
||||
from app.auth import decode_token
|
||||
|
||||
app = FastAPI(title="RIPS Manager", version="1.0.0")
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["*"],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
templates = Jinja2Templates(
|
||||
directory=os.path.join(os.path.dirname(__file__), "app", "templates")
|
||||
)
|
||||
app.state.templates = templates
|
||||
|
||||
|
||||
def get_user_from_request(request: Request):
|
||||
cookies = dict(request.cookies)
|
||||
token = cookies.get("token")
|
||||
if not token:
|
||||
auth = request.headers.get("Authorization", "")
|
||||
if auth.startswith("Bearer "):
|
||||
token = auth[7:]
|
||||
if token:
|
||||
decoded = decode_token(token)
|
||||
if decoded:
|
||||
return decoded
|
||||
print(f" [AUTH] Invalid token: {token[:30]}...", flush=True)
|
||||
return None
|
||||
|
||||
|
||||
@app.middleware("http")
|
||||
async def auth_middleware(request: Request, call_next):
|
||||
public_paths = ["/auth/login", "/auth/register", "/auth/api/login"]
|
||||
if request.url.path in public_paths or request.url.path.startswith("/static"):
|
||||
return await call_next(request)
|
||||
|
||||
if request.url.path.startswith("/auth"):
|
||||
return await call_next(request)
|
||||
|
||||
user = get_user_from_request(request)
|
||||
print(f" [AUTH] path={request.url.path} user={user['username'] if user else None} cookies={dict(request.cookies)}", flush=True)
|
||||
if not user:
|
||||
if request.url.path.startswith("/api/"):
|
||||
from fastapi.responses import JSONResponse
|
||||
print(f" [AUTH] -> 401 JSON for /api/ path", flush=True)
|
||||
return JSONResponse({"detail": "Not authenticated"}, status_code=401)
|
||||
print(f" [AUTH] -> 307 redirect to /auth/login", flush=True)
|
||||
return RedirectResponse(url="/auth/login")
|
||||
|
||||
request.state.user = user
|
||||
return await call_next(request)
|
||||
|
||||
|
||||
@app.on_event("startup")
|
||||
async def startup():
|
||||
init_db()
|
||||
|
||||
|
||||
@app.get("/")
|
||||
async def root():
|
||||
return RedirectResponse(url="/dashboard")
|
||||
|
||||
|
||||
# Register routes
|
||||
from app.routes import auth, dashboard, config, queries, terceros, transaccion, logs, automation
|
||||
|
||||
app.include_router(auth.router)
|
||||
app.include_router(dashboard.router)
|
||||
app.include_router(config.router)
|
||||
app.include_router(queries.router)
|
||||
app.include_router(terceros.router)
|
||||
app.include_router(transaccion.router)
|
||||
app.include_router(logs.router)
|
||||
app.include_router(automation.router)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
uvicorn.run("main:app", host="0.0.0.0", port=8080, reload=True)
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
|
||||
from fastapi import FastAPI, Request, Depends
|
||||
from fastapi.responses import RedirectResponse
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from fastapi.templating import Jinja2Templates
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
import uvicorn
|
||||
|
||||
from app.database import init_db
|
||||
from app.auth import decode_token
|
||||
|
||||
app = FastAPI(title="RIPS Manager", version="1.0.0")
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["*"],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
templates = Jinja2Templates(
|
||||
directory=os.path.join(os.path.dirname(__file__), "app", "templates")
|
||||
)
|
||||
app.state.templates = templates
|
||||
|
||||
|
||||
def get_user_from_request(request: Request):
|
||||
cookies = dict(request.cookies)
|
||||
token = cookies.get("token")
|
||||
if not token:
|
||||
auth = request.headers.get("Authorization", "")
|
||||
if auth.startswith("Bearer "):
|
||||
token = auth[7:]
|
||||
if token:
|
||||
decoded = decode_token(token)
|
||||
if decoded:
|
||||
return decoded
|
||||
print(f" [AUTH] Invalid token: {token[:30]}...", flush=True)
|
||||
return None
|
||||
|
||||
|
||||
@app.middleware("http")
|
||||
async def auth_middleware(request: Request, call_next):
|
||||
public_paths = ["/auth/login", "/auth/register", "/auth/api/login"]
|
||||
if request.url.path in public_paths or request.url.path.startswith("/static"):
|
||||
return await call_next(request)
|
||||
|
||||
if request.url.path.startswith("/auth"):
|
||||
return await call_next(request)
|
||||
|
||||
user = get_user_from_request(request)
|
||||
print(f" [AUTH] path={request.url.path} user={user['username'] if user else None} cookies={dict(request.cookies)}", flush=True)
|
||||
if not user:
|
||||
if request.url.path.startswith("/api/"):
|
||||
from fastapi.responses import JSONResponse
|
||||
print(f" [AUTH] -> 401 JSON for /api/ path", flush=True)
|
||||
return JSONResponse({"detail": "Not authenticated"}, status_code=401)
|
||||
print(f" [AUTH] -> 307 redirect to /auth/login", flush=True)
|
||||
return RedirectResponse(url="/auth/login")
|
||||
|
||||
request.state.user = user
|
||||
return await call_next(request)
|
||||
|
||||
|
||||
@app.on_event("startup")
|
||||
async def startup():
|
||||
init_db()
|
||||
|
||||
|
||||
@app.get("/")
|
||||
async def root():
|
||||
return RedirectResponse(url="/dashboard")
|
||||
|
||||
|
||||
# Register routes
|
||||
from app.routes import auth, dashboard, config, queries, terceros, transaccion, logs, automation
|
||||
|
||||
app.include_router(auth.router)
|
||||
app.include_router(dashboard.router)
|
||||
app.include_router(config.router)
|
||||
app.include_router(queries.router)
|
||||
app.include_router(terceros.router)
|
||||
app.include_router(transaccion.router)
|
||||
app.include_router(logs.router)
|
||||
app.include_router(automation.router)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import socket
|
||||
hostname = socket.gethostname()
|
||||
try:
|
||||
lan_ip = socket.gethostbyname(hostname)
|
||||
except:
|
||||
lan_ip = "0.0.0.0"
|
||||
print(f" Local: http://localhost:8080")
|
||||
print(f" Red: http://{lan_ip}:8080")
|
||||
uvicorn.run("main:app", host="0.0.0.0", port=8080, reload=False)
|
||||
|
||||
Reference in New Issue
Block a user