From b2af6fe289e1afc3b31bf71465a2d407b68443b0 Mon Sep 17 00:00:00 2001 From: Florian Date: Fri, 3 Oct 2025 19:46:03 +0200 Subject: [PATCH] Moved interal part of API to differen repository --- app_database.sql | 2 +- main.py | 23 +++-------------------- rabbitmq.md | 29 ----------------------------- rabbitmq_handler.py | 21 --------------------- requirements.txt | 5 ++--- 5 files changed, 6 insertions(+), 74 deletions(-) delete mode 100644 rabbitmq.md delete mode 100644 rabbitmq_handler.py diff --git a/app_database.sql b/app_database.sql index 5c43521..a8cdfda 100644 --- a/app_database.sql +++ b/app_database.sql @@ -3,7 +3,7 @@ CREATE TABLE users ( username VARCHAR(100) UNIQUE NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, password_hash CHAR(64) DEFAULT NULL, -- SHA256 hash or similar - api_key CHAR(64) UNIQUE NOT NULL, -- for API authentication + api_key VARCHAR(255) UNIQUE NOT NULL, -- for API authentication created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_login TIMESTAMP NULL DEFAULT NULL, status ENUM('active','inactive','banned') NOT NULL DEFAULT 'active' diff --git a/main.py b/main.py index 3e09125..619c324 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,14 @@ -from fastapi import FastAPI, Query, Depends, HTTPException, Header +from fastapi import FastAPI, Depends, HTTPException from fastapi.responses import JSONResponse from fastapi.security.api_key import APIKeyHeader from starlette.exceptions import HTTPException as StarletteHTTPException -from typing import Optional,List,Dict +from typing import Optional,List from pydantic import BaseModel from validator import is_valid_platform,is_valid_token,verify_api_key from hvac_handler import encrypt_token from db import get_db from logger_handler import setup_logger import uuid -from rabbitmq_handler import send_message_to_rmq from hashlib import sha256 import uvicorn from uvicorn_logging_config import LOGGING_CONFIG @@ -19,7 +18,7 @@ from uvicorn_logging_config import LOGGING_CONFIG logger = setup_logger(__name__) api_key_header = APIKeyHeader(name="X-API-Key") -api_key_header_internal = APIKeyHeader(name="X-API-Key-Internal") + def hash_token(token: str) -> str: return sha256(token.encode()).hexdigest() @@ -32,18 +31,12 @@ class TokenRequest(BaseModel): locale : Optional[str] = None topics : Optional[List[str]] = None -class Notification(BaseModel): - user_id : int - message : Dict - api = FastAPI( title="Device Token Management", description="API for requesting tokens", version="1.0.0" ) -def verify_api_key_dependency_internal(): - return True def verify_api_key_dependency(db=Depends(get_db), api_key: str = Depends(api_key_header)) -> int: cursor = db.cursor() @@ -145,16 +138,6 @@ def unregister_token( return {"status":"unregistered"} -@api.post("/internal/receive-notifications") -def receive_notifications( - notification_data: Notification, - db = Depends(get_db), - is_allowed: bool = Depends(verify_api_key_dependency_internal) -): - send_message_to_rmq(notification_data.user_id,notification_data.message) - return {"status": "queued"} - - if __name__ == "__main__": uvicorn.run( "main:api", diff --git a/rabbitmq.md b/rabbitmq.md deleted file mode 100644 index df91c04..0000000 --- a/rabbitmq.md +++ /dev/null @@ -1,29 +0,0 @@ -rabbitmqctl add_vhost app_notifications -rabbitmqctl add_user notifier strongpassword -rabbitmqctl set_user_tags notifier management -rabbitmqctl set_permissions -p app_notifications notifier ".*" ".*" ".*" -rabbitmqadmin --username "admin" --password "admin" declare exchange --vhost "app_notifications" --name "app_notifications" --type "topic" --durable "true" -rabbitmqadmin --username "admin" --password "admin" declare queue --vhost "app_notifications" --name "notifications_retry" - --durable "true" - rabbitmqadmin --username "admin" --password "admin" declare queue --vhost "app_notifications" --name "notifications_dlq" - --durable "true" -rabbitmqadmin --username "admin" --password "admin" declare queue --vhost "app_notifications" --name "notifications" - --durable "true" - rabbitmqadmin --username "admin" --password "admin" declare binding --vhost "app_notifications" --source "app_notifications" --destination "notifications" --destination-type "queue" --routing-key "notify.*" - - # Retry policy: messages stay for 30s before going back to main queue -rabbitmqctl set_policy \ - --vhost app_notifications \ - retry_policy "^notifications_retry$" \ - '{"dead-letter-exchange":"app_notifications", - "dead-letter-routing-key":"notify.retry", - "message-ttl":30000}' \ - --apply-to queues - -# DLQ policy: permanent dead letter storage -rabbitmqctl set_policy \ - --vhost app_notifications \ - dlq_policy "^notifications$" \ - '{"dead-letter-exchange":"app_notifications", - "dead-letter-routing-key":"notify.dlq"}' \ - --apply-to queues \ No newline at end of file diff --git a/rabbitmq_handler.py b/rabbitmq_handler.py deleted file mode 100644 index d617614..0000000 --- a/rabbitmq_handler.py +++ /dev/null @@ -1,21 +0,0 @@ -import pika -from typing import Dict -import json - -def send_message_to_rmq(user_id: int, message: Dict): - credentials = pika.credentials.PlainCredentials(username="notifier",password="strongpassword") - conn_params = pika.ConnectionParameters(host="localhost", - credentials=credentials,virtual_host="app_notifications") - connection = pika.BlockingConnection(conn_params) - #connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) - channel = connection.channel() - channel.confirm_delivery() - - channel.basic_publish(exchange='app_notifications', - routing_key=f"notify.user.{user_id}", - body=json.dumps(message), - properties=pika.BasicProperties( - content_type="application/json", - delivery_mode=2 - )) - diff --git a/requirements.txt b/requirements.txt index 1e6d838..ba89cb7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,19 +6,18 @@ certifi==2025.8.3 cffi==2.0.0 charset-normalizer==3.4.3 click==8.3.0 -fastapi==0.117.1 +fastapi==0.118.0 h11==0.16.0 hvac==2.3.0 idna==3.10 mysql-connector-python==9.4.0 -pika==1.3.2 pycparser==2.23 pydantic==2.11.9 pydantic_core==2.33.2 requests==2.32.5 sniffio==1.3.1 starlette==0.48.0 -typing-inspection==0.4.1 +typing-inspection==0.4.2 typing_extensions==4.15.0 urllib3==2.5.0 uvicorn==0.37.0