Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

login_admin.py 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #!/usr/bin/env python3
  2. import sys
  3. from pathlib import Path
  4. sys.path.append(str(Path(__file__).parent.parent))
  5. import httpx
  6. import json
  7. from common import config_helper
  8. from common import Logger
  9. def login_admin() -> None:
  10. """Login with admin account and save access token."""
  11. log = Logger("Login")
  12. log.header("Admin Login")
  13. # Read admin credentials from config
  14. admin_config = config_helper.read_config("admin_config")
  15. if not admin_config:
  16. log.error("Admin config not found")
  17. log.info("Please run setup_admin.py first to create the admin account")
  18. return
  19. log.info(f"Logging in with email: {admin_config['email']}")
  20. # API login endpoint
  21. base_url = "http://localhost:5001"
  22. login_endpoint = f"{base_url}/console/api/login"
  23. # Prepare login payload
  24. login_payload = {
  25. "email": admin_config["email"],
  26. "password": admin_config["password"],
  27. "remember_me": True,
  28. }
  29. try:
  30. # Make the login request
  31. with httpx.Client() as client:
  32. response = client.post(
  33. login_endpoint,
  34. json=login_payload,
  35. headers={"Content-Type": "application/json"},
  36. )
  37. if response.status_code == 200:
  38. log.success("Login successful!")
  39. # Extract token from response
  40. response_data = response.json()
  41. # Check if login was successful
  42. if response_data.get("result") != "success":
  43. log.error(f"Login failed: {response_data}")
  44. return
  45. # Extract tokens from data field
  46. token_data = response_data.get("data", {})
  47. access_token = token_data.get("access_token", "")
  48. refresh_token = token_data.get("refresh_token", "")
  49. if not access_token:
  50. log.error("No access token found in response")
  51. log.debug(f"Full response: {json.dumps(response_data, indent=2)}")
  52. return
  53. # Save token to config file
  54. token_config = {
  55. "email": admin_config["email"],
  56. "access_token": access_token,
  57. "refresh_token": refresh_token,
  58. }
  59. # Save token config
  60. if config_helper.write_config("token_config", token_config):
  61. log.info(
  62. f"Token saved to: {config_helper.get_config_path('benchmark_state')}"
  63. )
  64. # Show truncated token for verification
  65. token_display = (
  66. f"{access_token[:20]}..."
  67. if len(access_token) > 20
  68. else "Token saved"
  69. )
  70. log.key_value("Access token", token_display)
  71. elif response.status_code == 401:
  72. log.error("Login failed: Invalid credentials")
  73. log.debug(f"Response: {response.text}")
  74. else:
  75. log.error(f"Login failed with status code: {response.status_code}")
  76. log.debug(f"Response: {response.text}")
  77. except httpx.ConnectError:
  78. log.error("Could not connect to Dify API at http://localhost:5001")
  79. log.info("Make sure the API server is running with: ./dev/start-api")
  80. except Exception as e:
  81. log.error(f"An error occurred: {e}")
  82. if __name__ == "__main__":
  83. login_admin()