Fix jwt-token
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user