From c92183720d2e36d138d5c98fd42b138c4dbaea98 Mon Sep 17 00:00:00 2001 From: Edwin Eames Date: Wed, 24 Sep 2025 16:39:05 -0400 Subject: [PATCH] Added call updates --- __pycache__/settings_dev.cpython-39.pyc | Bin 1342 -> 1392 bytes app/__pycache__/main.cpython-39.pyc | Bin 3939 -> 4260 bytes app/main.py | 37 ++++++++++++++++++++---- settings_dev.py | 3 ++ 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/__pycache__/settings_dev.cpython-39.pyc b/__pycache__/settings_dev.cpython-39.pyc index dc11585da270c9ceafcae6e98bd4b150142d4130..9f353c3855b2e0a16e37a12df50f870ad525a8f2 100644 GIT binary patch delta 187 zcmdnT^?{2ok(ZZ?0SLsCE@wz{Oyp~3Ts3jhT%lCHEdB)oDMAYwqa;##aeQJyW_)RJYEfQdZtAVc zQY5yigIoVAn{A`vs3d{G8Bmc9Z@7Uxt~RgQD^cl7F|ZZ$5N*h8bG_9&Chz2D&pcQD@dR~$ZyI$+< zh8z&`fu4|pRJ}U_sS>K-fRw+2LvL{LmA`>Y3kq*uoH~X|c=djsH^14LH}hupkJ{7e zl%?y*kof(Q`R(v&@kwfueD>t}C%q8FoRph3(j){SP@Hi$V`QWpcd~BI$O&16gp+p* zM!_u_MY&Hp6K=^UNm+BsZpEmO5Y=D|bVxz^G-6a~^=Oi&sd_X8f08XS7?YI{g6pv>nr<;z4r?o!{k4k-UlSt|6CfyEAJV1fzizF*k+Vz{5-roKky`M*o1(7KA?VJ zVxWDGiR8iV9QfDyr;!O#J3EeiOUN{j#va620Rwy-`@A)cuc?=g*%Z3EI37yUsV<$0 zlbd#D-@C>Cj5Wv-|4Vt3?9oi4Wqt`~vGw(Q{X5g8=-8HRt+dJ+ATl`+4LDu=XRygY=76>WxACnukW#QIP zfCiTByom0fz&cyOGpr)CIMJ%5iVz<*Q%pk@R+v>0=J*Y5rZ;+Eb^{q5;Vp!l0-nX$ zJL1pKhcz{AV7HLRq}Uq5+X$~K-!PdrbsU+vxoQb(e^CJcU2BrfvvX~O%$3mvhGH8C z?;_kr7)>bOYt~@Wm=tpySoPK;T`rVqNYePrjn#4RyIqLMX{<`@((_Od3OK+ delta 1155 zcmah{&2JM&6!-JzdTp;A$9C-a0~5rDfuxDs0u3fr)k;m$szo9Pv?^L{^Cr&HwRbhU z0ku7FC>(=I<{tow0|+?fQi&q^KlJ8ng~SmdwFjhD%$qbo5E8qZ-^{$=2 zSIe+-IXxo3-_QTKetrCg(SWHN$G*Fgz@%#o@@9TeFbfdD1g6}vLD4L#wdRfwN@fWn zEQ4v(F@xF7m|14!n-$F60yHpxHS!CX6UtJMmN6_UOO=%`R&X3keZcZ&6e~EP>@{hh z#45{OtYfVYU*qIv4C~lXWJ8h7T~cu^+^4vv;@W$-{Wzt#7Q(qm=YaSXPHjc+i>I-B ztx;;gg23)GGk?i*{6S!G7Wm#UV4XPE#Dn$ROxeAcx%tniQUU*E}f~bT@ zjCaIuspD{D`$?(_P!<1a%a9jK>BHp|9aO>6ay5$Ch+G%f((_Ohf21o%-=(p{y^WAr zp=Sk-Z`rG>-o`MT+tLrhiS0vr55N$snO^It3}_~ig|_3qh_7A7d48O-O%u$BN11vx zFPGnR46c!hr1CL>rg)Z_y0BLopCyKRl+O`#CEQK%lX5b1uj^nr$Uh{$NbnKC#{_TR zLwMO5EQ-g*94u@<%=Tc}AU6ufPZ4}VFi-G?Xu18V*bcq+=gf8eb#KVp2fFPe{51K! zx{UbDXnxrwQ=A|{&?9*NjrbYzQ`Oulsnl7Gc9Dc8Kb2f(pZLf40vh6UzHue@fA6lk z4jYC$;pr(&4eikW-VPY2s+!4xhs+Js>&X)PK3D20l#7~+cO;DBz88dMW^rZZtks>J zwZ8p|pCEF9fO5Z~ONm=j4X5>F^bMCSfOH9{EE;IghOERA6y%(ZMnV1mCKDRyX*mi8 N=!qie6*=lfcnQQ2|11Ci diff --git a/app/main.py b/app/main.py index 5acf70a..550337f 100644 --- a/app/main.py +++ b/app/main.py @@ -4,15 +4,42 @@ sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) from settings_dev import settings import requests from fastapi import FastAPI, HTTPException, status +from fastapi.middleware.cors import CORSMiddleware +from starlette.middleware.base import BaseHTTPMiddleware +from starlette.responses import JSONResponse from .voipms_client import update_did_routing, get_forwardings from .database import Session from .models import Call +# class AuthMiddleware(BaseHTTPMiddleware): +# async def dispatch(self, request, call_next): +# auth_header = request.headers.get('authorization') +# expected_token = f"Bearer {settings.voipms_api_token}" +# if auth_header != expected_token: +# return JSONResponse(status_code=401, content={"detail": "Unauthorized"}) +# response = await call_next(request) +# return response + app = FastAPI( title="EAMCO VoIP.ms Controller", description="An API to manage routing for a VoIP.ms DID.", version="1.0.0", ) + +app.add_middleware( + CORSMiddleware, + allow_origins=settings.origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +@app.get("/", tags=["General"]) +def read_root(): + """A simple root endpoint to confirm the API is running.""" + return {"message": f"Welcome to the VoIP.ms API for DID: {settings.target_did}"} + +# app.add_middleware(AuthMiddleware) @app.get("/test/forwardings") def test_get_forwardings(): try: @@ -23,6 +50,8 @@ def test_get_forwardings(): } except HTTPException as e: raise e + + @app.get("/test/did") def test_did_info(): params = { @@ -40,11 +69,7 @@ def test_did_info(): return {"error": f"Failed to connect to VoIP.ms API: {str(e)}", "params": params} except Exception as e: return {"error": f"Unexpected error: {str(e)}", "params": params} -@app.get("/", tags=["General"]) -def read_root(): - """A simple root endpoint to confirm the API is running.""" - return {"message": f"Welcome to the VoIP.ms API for DID: {settings.target_did}"} - + @app.post("/route/sip", status_code=status.HTTP_200_OK, tags=["DID Routing"]) def route_to_sip_account(): @@ -123,4 +148,4 @@ def route_to_cellphone_2(): "voipms_response": result } except HTTPException as e: - raise e \ No newline at end of file + raise e diff --git a/settings_dev.py b/settings_dev.py index 9bab9fe..7f5ed4c 100644 --- a/settings_dev.py +++ b/settings_dev.py @@ -53,6 +53,9 @@ class ApplicationConfig: # VoIP.ms API endpoint voipms_api_url = os.environ.get('VOIPMS_API_URL', "https://voip.ms/api/v1/rest.php") + # API Token for Frontend Authentication + voipms_api_token = os.environ.get('VOIPMS_API_TOKEN') + # Create a single instance of the settings to be used throughout the app settings = ApplicationConfig()