diff --git a/app/main.py b/app/main.py index 6396921..b450ed0 100644 --- a/app/main.py +++ b/app/main.py @@ -1,19 +1,40 @@ ''' Simple Geolocation with FastAPI ''' +import os from ipaddress import IPv4Address, IPv4Network, IPv6Address, IPv6Network from typing import Annotated, Optional, Union import geoip2.database -from geoip2.errors import AddressNotFoundError -from fastapi import FastAPI, Path, Body, Request, Response, status +from dotenv import load_dotenv +from fastapi import Body, FastAPI, Path, Request, Response, status +from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import RedirectResponse +from geoip2.errors import AddressNotFoundError from pydantic import BaseModel +# Load environment variables +load_dotenv() + app = FastAPI() -GEOLITE2_ASN_DB = '/usr/local/share/GeoIP/GeoLite2-ASN.mmdb' -GEOLITE2_CITY_DB = '/usr/local/share/GeoIP/GeoLite2-City.mmdb' +# Configure CORS from environment variables +cors_origins = os.getenv('CORS_ALLOW_ORIGINS', 'http://localhost') +allow_origins = [origin.strip() for origin in cors_origins.split(',') + if origin.strip()] + +app.add_middleware( + CORSMiddleware, + allow_origins=allow_origins, + allow_credentials=True, + allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"], + allow_headers=["*"], +) + +GEOLITE2_ASN_DB = os.getenv('GEOLITE2_ASN_DB', + '/usr/local/share/GeoIP/GeoLite2-ASN.mmdb') +GEOLITE2_CITY_DB = os.getenv('GEOLITE2_CITY_DB', + '/usr/local/share/GeoIP/GeoLite2-City.mmdb') class IPAddressParam(BaseModel):