| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | 
                        - #!/usr/bin/env python3
 - 
 - import sys
 - from pathlib import Path
 - 
 - sys.path.append(str(Path(__file__).parent.parent))
 - 
 - import httpx
 - import json
 - from common import config_helper
 - from common import Logger
 - 
 - 
 - def login_admin() -> None:
 -     """Login with admin account and save access token."""
 - 
 -     log = Logger("Login")
 -     log.header("Admin Login")
 - 
 -     # Read admin credentials from config
 -     admin_config = config_helper.read_config("admin_config")
 - 
 -     if not admin_config:
 -         log.error("Admin config not found")
 -         log.info("Please run setup_admin.py first to create the admin account")
 -         return
 - 
 -     log.info(f"Logging in with email: {admin_config['email']}")
 - 
 -     # API login endpoint
 -     base_url = "http://localhost:5001"
 -     login_endpoint = f"{base_url}/console/api/login"
 - 
 -     # Prepare login payload
 -     login_payload = {
 -         "email": admin_config["email"],
 -         "password": admin_config["password"],
 -         "remember_me": True,
 -     }
 - 
 -     try:
 -         # Make the login request
 -         with httpx.Client() as client:
 -             response = client.post(
 -                 login_endpoint,
 -                 json=login_payload,
 -                 headers={"Content-Type": "application/json"},
 -             )
 - 
 -             if response.status_code == 200:
 -                 log.success("Login successful!")
 - 
 -                 # Extract token from response
 -                 response_data = response.json()
 - 
 -                 # Check if login was successful
 -                 if response_data.get("result") != "success":
 -                     log.error(f"Login failed: {response_data}")
 -                     return
 - 
 -                 # Extract tokens from data field
 -                 token_data = response_data.get("data", {})
 -                 access_token = token_data.get("access_token", "")
 -                 refresh_token = token_data.get("refresh_token", "")
 - 
 -                 if not access_token:
 -                     log.error("No access token found in response")
 -                     log.debug(f"Full response: {json.dumps(response_data, indent=2)}")
 -                     return
 - 
 -                 # Save token to config file
 -                 token_config = {
 -                     "email": admin_config["email"],
 -                     "access_token": access_token,
 -                     "refresh_token": refresh_token,
 -                 }
 - 
 -                 # Save token config
 -                 if config_helper.write_config("token_config", token_config):
 -                     log.info(
 -                         f"Token saved to: {config_helper.get_config_path('benchmark_state')}"
 -                     )
 - 
 -                 # Show truncated token for verification
 -                 token_display = (
 -                     f"{access_token[:20]}..."
 -                     if len(access_token) > 20
 -                     else "Token saved"
 -                 )
 -                 log.key_value("Access token", token_display)
 - 
 -             elif response.status_code == 401:
 -                 log.error("Login failed: Invalid credentials")
 -                 log.debug(f"Response: {response.text}")
 -             else:
 -                 log.error(f"Login failed with status code: {response.status_code}")
 -                 log.debug(f"Response: {response.text}")
 - 
 -     except httpx.ConnectError:
 -         log.error("Could not connect to Dify API at http://localhost:5001")
 -         log.info("Make sure the API server is running with: ./dev/start-api")
 -     except Exception as e:
 -         log.error(f"An error occurred: {e}")
 - 
 - 
 - if __name__ == "__main__":
 -     login_admin()
 
 
  |