Fix jwt-token

This commit is contained in:
2025-09-07 12:29:07 +02:00
parent cf2500a648
commit 33306a5967

View File

@@ -12,28 +12,93 @@ import json
from datetime import datetime from datetime import datetime
from typing import List, Dict from typing import List, Dict
# Disable SSL warnings for self-signed certificates
import warnings
warnings.filterwarnings('ignore', message='Unverified HTTPS request')
class DeviceProbeSimulator: class DeviceProbeSimulator:
def __init__(self): def __init__(self):
self.api_base_url = os.getenv('API_BASE_URL', 'https://selfservice.cqers.com/drones/api') # Configuration from environment variables
# Tests default to localhost:3002 for local development
self.api_base_url = os.getenv('API_BASE_URL', 'http://localhost:3002/api')
base_path = os.getenv('VITE_BASE_PATH', '').rstrip('/')
# If BASE_PATH is set, construct the full URL
if base_path and not self.api_base_url.endswith('/api'):
# Extract domain from API_BASE_URL and add base path
domain = self.api_base_url.replace('/api', '').replace('/drones/api', '').replace('/uggla/api', '')
self.api_base_url = f"{domain}{base_path}/api"
self.probe_interval = int(os.getenv('PROBE_INTERVAL_SECONDS', '60')) # 1 minute default self.probe_interval = int(os.getenv('PROBE_INTERVAL_SECONDS', '60')) # 1 minute default
self.probe_failrate = int(os.getenv('PROBE_FAILRATE', '30')) # 30% failure rate self.probe_failrate = int(os.getenv('PROBE_FAILRATE', '30')) # 30% failure rate
# Authentication configuration - Optional for local testing
self.username = os.getenv('TEST_USERNAME', 'admin')
self.password = os.getenv('TEST_PASSWORD', 'admin123')
self.skip_auth = os.getenv('SKIP_AUTH', 'false').lower() == 'true'
self.devices = [] self.devices = []
self.session = requests.Session() self.session = requests.Session()
self.session.headers.update({ self.session.headers.update({
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'User-Agent': 'HealthProbeSimulator/1.0' 'User-Agent': 'HealthProbeSimulator/1.0'
}) })
self.auth_token = None
print(f"🔧 Health Probe Simulator Configuration:") print(f"🔧 Health Probe Simulator Configuration:")
print(f" API URL: {self.api_base_url}") print(f" API URL: {self.api_base_url}")
print(f" Probe Interval: {self.probe_interval} seconds") print(f" Probe Interval: {self.probe_interval} seconds")
print(f" Failure Rate: {self.probe_failrate}%") print(f" Failure Rate: {self.probe_failrate}%")
print(f" Authentication: {'Disabled' if self.skip_auth else 'Enabled'}")
print() print()
def authenticate(self) -> bool:
"""Authenticate with the API and get a token"""
if self.skip_auth:
print("🔓 Authentication skipped (SKIP_AUTH=true)")
return True
try:
login_data = {
"username": self.username,
"password": self.password
}
response = self.session.post(
f"{self.api_base_url}/users/login",
json=login_data,
verify=False,
timeout=10
)
if response.status_code == 200:
data = response.json()
if data.get('success') and 'data' in data and 'token' in data['data']:
self.auth_token = data['data']['token']
self.session.headers.update({
'Authorization': f'Bearer {self.auth_token}'
})
print(f"✅ Authentication successful")
return True
else:
print(f"❌ Invalid login response format: {data}")
return False
else:
print(f"❌ Authentication failed: HTTP {response.status_code}")
print(f" Response: {response.text}")
return False
except Exception as e:
print(f"❌ Authentication error: {e}")
return False
def fetch_devices(self) -> bool: def fetch_devices(self) -> bool:
"""Fetch all devices from the API""" """Fetch all devices from the API"""
try: try:
response = self.session.get(f"{self.api_base_url}/devices") response = self.session.get(
f"{self.api_base_url}/devices",
verify=False,
timeout=10
)
if response.status_code == 200: if response.status_code == 200:
data = response.json() data = response.json()
if data.get('success') and 'data' in data: if data.get('success') and 'data' in data:
@@ -72,8 +137,9 @@ class DeviceProbeSimulator:
print(f"📡 Sending heartbeat: {payload}") print(f"📡 Sending heartbeat: {payload}")
response = self.session.post( response = self.session.post(
f"{self.api_base_url}/heartbeat", # Changed to correct endpoint f"{self.api_base_url}/detectors", # Updated to use detectors endpoint
json=payload, json=payload,
verify=False,
timeout=10 timeout=10
) )
@@ -131,6 +197,11 @@ class DeviceProbeSimulator:
print(" Press Ctrl+C to stop") print(" Press Ctrl+C to stop")
print() print()
# Authenticate first
if not self.authenticate():
print("❌ Failed to authenticate, exiting")
return
# Initial device fetch # Initial device fetch
if not self.fetch_devices(): if not self.fetch_devices():
print("❌ Failed to fetch initial device list, exiting") print("❌ Failed to fetch initial device list, exiting")
@@ -164,15 +235,19 @@ def main():
print("=" * 60) print("=" * 60)
print() print()
# Load environment variables # Load environment variables with localhost defaults
probe_failrate = os.getenv('PROBE_FAILRATE', '30') probe_failrate = os.getenv('PROBE_FAILRATE', '30')
probe_interval = os.getenv('PROBE_INTERVAL_SECONDS', '60') probe_interval = os.getenv('PROBE_INTERVAL_SECONDS', '60')
api_url = os.getenv('API_BASE_URL', 'https://selfservice.cqers.com/drones/api') api_url = os.getenv('API_BASE_URL', 'http://localhost:3002/api')
base_path = os.getenv('VITE_BASE_PATH', '')
skip_auth = os.getenv('SKIP_AUTH', 'false').lower() == 'true'
print(f"📋 Configuration:") print(f"📋 Configuration:")
print(f" PROBE_FAILRATE: {probe_failrate}%") print(f" PROBE_FAILRATE: {probe_failrate}%")
print(f" PROBE_INTERVAL_SECONDS: {probe_interval}s") print(f" PROBE_INTERVAL_SECONDS: {probe_interval}s")
print(f" API_BASE_URL: {api_url}") print(f" API_BASE_URL: {api_url}")
print(f" VITE_BASE_PATH: {base_path}")
print(f" SKIP_AUTH: {skip_auth}")
print() print()
simulator = DeviceProbeSimulator() simulator = DeviceProbeSimulator()