Fix jwt-token
This commit is contained in:
@@ -10,10 +10,13 @@ API_BASE_URL=http://localhost:3002/api
|
|||||||
# Base path (should match VITE_BASE_PATH)
|
# Base path (should match VITE_BASE_PATH)
|
||||||
VITE_BASE_PATH=/uggla
|
VITE_BASE_PATH=/uggla
|
||||||
|
|
||||||
# Test authentication credentials
|
# Authentication configuration
|
||||||
TEST_USERNAME=admin
|
TEST_USERNAME=admin
|
||||||
TEST_PASSWORD=admin123
|
TEST_PASSWORD=admin123
|
||||||
|
|
||||||
|
# Skip authentication for local testing (set to 'true' to disable auth)
|
||||||
|
SKIP_AUTH=false
|
||||||
|
|
||||||
# Alternative configurations:
|
# Alternative configurations:
|
||||||
# For local development:
|
# For local development:
|
||||||
# API_BASE_URL=http://localhost:3002/api
|
# API_BASE_URL=http://localhost:3002/api
|
||||||
|
|||||||
@@ -23,6 +23,11 @@ warnings.filterwarnings('ignore', message='Unverified HTTPS request')
|
|||||||
API_BASE_URL = os.getenv('API_BASE_URL', 'http://localhost:3002/api')
|
API_BASE_URL = os.getenv('API_BASE_URL', 'http://localhost:3002/api')
|
||||||
BASE_PATH = os.getenv('VITE_BASE_PATH', '').rstrip('/')
|
BASE_PATH = os.getenv('VITE_BASE_PATH', '').rstrip('/')
|
||||||
|
|
||||||
|
# Authentication configuration - Optional for local testing
|
||||||
|
USERNAME = os.getenv('TEST_USERNAME', 'admin')
|
||||||
|
PASSWORD = os.getenv('TEST_PASSWORD', 'admin123')
|
||||||
|
SKIP_AUTH = os.getenv('SKIP_AUTH', 'false').lower() == 'true' # Set to 'true' to skip authentication
|
||||||
|
|
||||||
# If BASE_PATH is set, construct the full URL
|
# If BASE_PATH is set, construct the full URL
|
||||||
if BASE_PATH and not API_BASE_URL.endswith('/api'):
|
if BASE_PATH and not API_BASE_URL.endswith('/api'):
|
||||||
# Extract domain from API_BASE_URL and add base path
|
# Extract domain from API_BASE_URL and add base path
|
||||||
@@ -34,6 +39,54 @@ print(f"🔗 Using API Base URL: {API_BASE_URL}")
|
|||||||
# Debug configuration
|
# Debug configuration
|
||||||
DEBUG_MODE = False # Set to True to enable payload debugging
|
DEBUG_MODE = False # Set to True to enable payload debugging
|
||||||
|
|
||||||
|
# Global variable to store authentication token
|
||||||
|
AUTH_TOKEN = None
|
||||||
|
|
||||||
|
def authenticate():
|
||||||
|
"""Authenticate with the API and get access token"""
|
||||||
|
global AUTH_TOKEN
|
||||||
|
|
||||||
|
if SKIP_AUTH:
|
||||||
|
return True
|
||||||
|
|
||||||
|
login_data = {
|
||||||
|
"username": USERNAME,
|
||||||
|
"password": PASSWORD
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
print(f"🔐 Authenticating as user: {USERNAME}")
|
||||||
|
response = requests.post(f"{API_BASE_URL}/auth/login", json=login_data, verify=False)
|
||||||
|
|
||||||
|
if response.status_code == 200:
|
||||||
|
data = response.json()
|
||||||
|
AUTH_TOKEN = data.get('token')
|
||||||
|
if AUTH_TOKEN:
|
||||||
|
print("✅ Authentication successful")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
print("❌ No token received in response")
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
print(f"❌ Authentication failed: {response.status_code}")
|
||||||
|
print(f"Response: {response.text}")
|
||||||
|
return False
|
||||||
|
except Exception as e:
|
||||||
|
print(f"❌ Authentication error: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_auth_headers():
|
||||||
|
"""Get headers with authentication token"""
|
||||||
|
if SKIP_AUTH:
|
||||||
|
return {"Content-Type": "application/json"}
|
||||||
|
|
||||||
|
if AUTH_TOKEN:
|
||||||
|
return {
|
||||||
|
"Authorization": f"Bearer {AUTH_TOKEN}",
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
return {"Content-Type": "application/json"}
|
||||||
|
|
||||||
# Global variable to store devices fetched from API
|
# Global variable to store devices fetched from API
|
||||||
DEVICES = []
|
DEVICES = []
|
||||||
|
|
||||||
@@ -50,7 +103,12 @@ def fetch_devices():
|
|||||||
"""Fetch active devices from the API"""
|
"""Fetch active devices from the API"""
|
||||||
global DEVICES
|
global DEVICES
|
||||||
try:
|
try:
|
||||||
response = requests.get(f"{API_BASE_URL}/devices/map", verify=False)
|
if SKIP_AUTH:
|
||||||
|
# Try without authentication first for local testing
|
||||||
|
response = requests.get(f"{API_BASE_URL}/devices/map", verify=False)
|
||||||
|
else:
|
||||||
|
response = requests.get(f"{API_BASE_URL}/devices", headers=get_auth_headers(), verify=False)
|
||||||
|
|
||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
data = response.json()
|
data = response.json()
|
||||||
api_devices = data.get('data', [])
|
api_devices = data.get('data', [])
|
||||||
@@ -274,7 +332,7 @@ class DroneSimulator:
|
|||||||
def send_heartbeat(device_id):
|
def send_heartbeat(device_id):
|
||||||
"""Send heartbeat to keep device online"""
|
"""Send heartbeat to keep device online"""
|
||||||
global DEBUG_MODE
|
global DEBUG_MODE
|
||||||
url = f"{API_BASE_URL}/heartbeat"
|
url = f"{API_BASE_URL}/detectors"
|
||||||
headers = {
|
headers = {
|
||||||
"Content-Type": "application/json"
|
"Content-Type": "application/json"
|
||||||
}
|
}
|
||||||
@@ -314,7 +372,7 @@ def send_heartbeat(device_id):
|
|||||||
def send_detection(detection_data):
|
def send_detection(detection_data):
|
||||||
"""Send detection data to the API"""
|
"""Send detection data to the API"""
|
||||||
global DEBUG_MODE
|
global DEBUG_MODE
|
||||||
url = f"{API_BASE_URL}/detections"
|
url = f"{API_BASE_URL}/detectors"
|
||||||
headers = {
|
headers = {
|
||||||
"Content-Type": "application/json"
|
"Content-Type": "application/json"
|
||||||
}
|
}
|
||||||
@@ -669,6 +727,19 @@ def main():
|
|||||||
|
|
||||||
# Show current debug status
|
# Show current debug status
|
||||||
print(f"🐛 Debug mode status: {'ENABLED' if DEBUG_MODE else 'DISABLED'}")
|
print(f"🐛 Debug mode status: {'ENABLED' if DEBUG_MODE else 'DISABLED'}")
|
||||||
|
if SKIP_AUTH:
|
||||||
|
print("⚠️ AUTHENTICATION DISABLED - Running in local test mode")
|
||||||
|
|
||||||
|
# Authenticate first (unless skipped)
|
||||||
|
if not SKIP_AUTH and not authenticate():
|
||||||
|
print("❌ Authentication failed. Cannot proceed with test.")
|
||||||
|
print("Please check:")
|
||||||
|
print("1. Is the server running?")
|
||||||
|
print("2. Are the credentials correct?")
|
||||||
|
print(f" Username: {USERNAME}")
|
||||||
|
print("3. Set TEST_USERNAME and TEST_PASSWORD environment variables if needed")
|
||||||
|
print("4. Or set SKIP_AUTH=true to skip authentication for local testing")
|
||||||
|
return
|
||||||
|
|
||||||
# Fetch devices from API first
|
# Fetch devices from API first
|
||||||
print("📡 Fetching active devices from API...")
|
print("📡 Fetching active devices from API...")
|
||||||
|
|||||||
@@ -27,9 +27,10 @@ warnings.filterwarnings('ignore', message='Unverified HTTPS request')
|
|||||||
API_BASE_URL = os.getenv('API_BASE_URL', 'http://localhost:3002/api')
|
API_BASE_URL = os.getenv('API_BASE_URL', 'http://localhost:3002/api')
|
||||||
BASE_PATH = os.getenv('VITE_BASE_PATH', '').rstrip('/')
|
BASE_PATH = os.getenv('VITE_BASE_PATH', '').rstrip('/')
|
||||||
|
|
||||||
# Authentication configuration
|
# Authentication configuration - Optional for local testing
|
||||||
USERNAME = os.getenv('TEST_USERNAME', 'admin')
|
USERNAME = os.getenv('TEST_USERNAME', 'admin')
|
||||||
PASSWORD = os.getenv('TEST_PASSWORD', 'admin123')
|
PASSWORD = os.getenv('TEST_PASSWORD', 'admin123')
|
||||||
|
SKIP_AUTH = os.getenv('SKIP_AUTH', 'false').lower() == 'true' # Set to 'true' to skip authentication
|
||||||
|
|
||||||
# If BASE_PATH is set, construct the full URL
|
# If BASE_PATH is set, construct the full URL
|
||||||
if BASE_PATH and not API_BASE_URL.endswith('/api'):
|
if BASE_PATH and not API_BASE_URL.endswith('/api'):
|
||||||
@@ -74,6 +75,9 @@ def authenticate():
|
|||||||
|
|
||||||
def get_auth_headers():
|
def get_auth_headers():
|
||||||
"""Get headers with authentication token"""
|
"""Get headers with authentication token"""
|
||||||
|
if SKIP_AUTH:
|
||||||
|
return {"Content-Type": "application/json"}
|
||||||
|
|
||||||
if AUTH_TOKEN:
|
if AUTH_TOKEN:
|
||||||
return {
|
return {
|
||||||
"Authorization": f"Bearer {AUTH_TOKEN}",
|
"Authorization": f"Bearer {AUTH_TOKEN}",
|
||||||
@@ -120,7 +124,12 @@ def is_detectable(distance_km):
|
|||||||
def fetch_devices():
|
def fetch_devices():
|
||||||
"""Fetch devices from API"""
|
"""Fetch devices from API"""
|
||||||
try:
|
try:
|
||||||
response = requests.get(f"{API_BASE_URL}/devices", headers=get_auth_headers(), verify=False)
|
if SKIP_AUTH:
|
||||||
|
# Try without authentication first for local testing
|
||||||
|
response = requests.get(f"{API_BASE_URL}/devices/map", verify=False)
|
||||||
|
else:
|
||||||
|
response = requests.get(f"{API_BASE_URL}/devices", headers=get_auth_headers(), verify=False)
|
||||||
|
|
||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
data = response.json()
|
data = response.json()
|
||||||
return data.get('data', [])
|
return data.get('data', [])
|
||||||
@@ -181,16 +190,19 @@ def run_orlan_detection_test():
|
|||||||
print("• End position: Directly overhead (0m)")
|
print("• End position: Directly overhead (0m)")
|
||||||
print("=" * 70)
|
print("=" * 70)
|
||||||
print(f"🔗 API Endpoint: {API_BASE_URL}")
|
print(f"🔗 API Endpoint: {API_BASE_URL}")
|
||||||
|
if SKIP_AUTH:
|
||||||
|
print("⚠️ AUTHENTICATION DISABLED - Running in local test mode")
|
||||||
print()
|
print()
|
||||||
|
|
||||||
# Authenticate first
|
# Authenticate first (unless skipped)
|
||||||
if not authenticate():
|
if not SKIP_AUTH and not authenticate():
|
||||||
print("❌ Authentication failed. Cannot proceed with test.")
|
print("❌ Authentication failed. Cannot proceed with test.")
|
||||||
print("Please check:")
|
print("Please check:")
|
||||||
print("1. Is the server running?")
|
print("1. Is the server running?")
|
||||||
print("2. Are the credentials correct?")
|
print("2. Are the credentials correct?")
|
||||||
print(f" Username: {USERNAME}")
|
print(f" Username: {USERNAME}")
|
||||||
print("3. Set TEST_USERNAME and TEST_PASSWORD environment variables if needed")
|
print("3. Set TEST_USERNAME and TEST_PASSWORD environment variables if needed")
|
||||||
|
print("4. Or set SKIP_AUTH=true to skip authentication for local testing")
|
||||||
return
|
return
|
||||||
|
|
||||||
# Test API connectivity first
|
# Test API connectivity first
|
||||||
|
|||||||
@@ -21,9 +21,10 @@ warnings.filterwarnings('ignore', message='Unverified HTTPS request')
|
|||||||
API_BASE_URL = os.getenv('API_BASE_URL', 'http://localhost:3002/api')
|
API_BASE_URL = os.getenv('API_BASE_URL', 'http://localhost:3002/api')
|
||||||
BASE_PATH = os.getenv('VITE_BASE_PATH', '').rstrip('/')
|
BASE_PATH = os.getenv('VITE_BASE_PATH', '').rstrip('/')
|
||||||
|
|
||||||
# Authentication configuration
|
# Authentication configuration - Optional for local testing
|
||||||
USERNAME = os.getenv('TEST_USERNAME', 'admin')
|
USERNAME = os.getenv('TEST_USERNAME', 'admin')
|
||||||
PASSWORD = os.getenv('TEST_PASSWORD', 'admin123')
|
PASSWORD = os.getenv('TEST_PASSWORD', 'admin123')
|
||||||
|
SKIP_AUTH = os.getenv('SKIP_AUTH', 'false').lower() == 'true' # Set to 'true' to skip authentication
|
||||||
|
|
||||||
# If BASE_PATH is set, construct the full URL
|
# If BASE_PATH is set, construct the full URL
|
||||||
if BASE_PATH and not API_BASE_URL.endswith('/api'):
|
if BASE_PATH and not API_BASE_URL.endswith('/api'):
|
||||||
@@ -68,6 +69,9 @@ def authenticate():
|
|||||||
|
|
||||||
def get_auth_headers():
|
def get_auth_headers():
|
||||||
"""Get headers with authentication token"""
|
"""Get headers with authentication token"""
|
||||||
|
if SKIP_AUTH:
|
||||||
|
return {"Content-Type": "application/json"}
|
||||||
|
|
||||||
if AUTH_TOKEN:
|
if AUTH_TOKEN:
|
||||||
return {
|
return {
|
||||||
"Authorization": f"Bearer {AUTH_TOKEN}",
|
"Authorization": f"Bearer {AUTH_TOKEN}",
|
||||||
|
|||||||
Reference in New Issue
Block a user