This commit is contained in:
Michael Woods
2025-12-20 21:59:25 -05:00
parent dba982593a
commit f58f669cef
3 changed files with 33 additions and 6 deletions

2
.gitignore vendored
View File

@@ -1,3 +1,5 @@
.idea* .idea*
.venv* .venv*
*__pycache__* *__pycache__*
build/*
*.egg-info/*

View File

@@ -1,13 +1,18 @@
# packetserver/http/server.py # packetserver/http/server.py
from fastapi import FastAPI, Depends, HTTPException, status from fastapi import FastAPI, Depends, HTTPException, status, Query
from fastapi.security import HTTPBasic, HTTPBasicCredentials from fastapi.security import HTTPBasic, HTTPBasicCredentials
from fastapi.responses import HTMLResponse from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
from starlette.requests import Request from starlette.requests import Request
from typing import Optional
from datetime import datetime
from persistent.mapping import PersistentMapping
import persistent.list
# No database module needed get_db_connection is provided by the runner
# get_http_user logic inlined directly in the dependency (simple and avoids module)
from ..database import get_db_connection # reuse existing helper if available
from .database import get_http_user
from .auth import HttpUser from .auth import HttpUser
app = FastAPI( app = FastAPI(
@@ -24,10 +29,22 @@ templates = Jinja2Templates(directory="packetserver/http/templates")
security = HTTPBasic() security = HTTPBasic()
async def get_current_http_user(credentials: HTTPBasicCredentials = Depends(security)): async def get_current_http_user(credentials: HTTPBasicCredentials = Depends(security)):
db = get_db_connection() # your existing way to get the open DB # get_db_connection is injected by the standalone runner
user: HttpUser | None = get_http_user(db, credentials.username) conn = get_db_connection()
root = conn.root()
# Inline httpUsers mapping access (replaces get_http_user from nonexistent database.py)
http_users = root.get("httpUsers")
if http_users is None:
# No users yet auth fails
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid username or password",
headers={"WWW-Authenticate": "Basic"},
)
user: HttpUser | None = http_users.get(credentials.username.upper())
if not user: if not user:
raise HTTPException( raise HTTPException(

View File

@@ -6,6 +6,12 @@ setup(
packages=find_packages(), packages=find_packages(),
include_package_data=True, include_package_data=True,
install_requires=[ install_requires=[
"fastapi",
"uvicorn[standard]",
"jinja2",
"argon2-cffi",
"ZODB",
"ZEO",
'click', 'click',
'pyham_pe', 'pyham_pe',
'msgpack', 'msgpack',
@@ -19,6 +25,8 @@ setup(
'console_scripts': [ 'console_scripts': [
'packcli = packetserver.client.cli:cli', 'packcli = packetserver.client.cli:cli',
'packcfg = packetserver.server.cli:config', 'packcfg = packetserver.server.cli:config',
"packetserver-http-users = packetserver.runners.http_user_manager:main",
"packetserver-http-server = packetserver.runners.http_server:main",
], ],
}, },
) )