create_test_app.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #!/usr/bin/env python3
  2. """
  3. 创建测试应用
  4. """
  5. import sys
  6. import os
  7. import pymysql
  8. from urllib.parse import urlparse
  9. import uuid
  10. import json
  11. from dotenv import load_dotenv
  12. load_dotenv()
  13. def get_db_connection():
  14. """获取数据库连接"""
  15. try:
  16. database_url = os.getenv('DATABASE_URL', '')
  17. if not database_url:
  18. return None
  19. parsed = urlparse(database_url)
  20. config = {
  21. 'host': parsed.hostname or 'localhost',
  22. 'port': parsed.port or 3306,
  23. 'user': parsed.username or 'root',
  24. 'password': parsed.password or '',
  25. 'database': parsed.path[1:] if parsed.path else 'sso_db',
  26. 'charset': 'utf8mb4'
  27. }
  28. return pymysql.connect(**config)
  29. except Exception as e:
  30. print(f"数据库连接失败: {e}")
  31. return None
  32. def create_test_app():
  33. """创建测试应用"""
  34. conn = get_db_connection()
  35. if not conn:
  36. print("❌ 数据库连接失败")
  37. return
  38. cursor = conn.cursor()
  39. # 检查是否已存在测试应用
  40. cursor.execute("SELECT id FROM apps WHERE app_key = %s", ("eqhoIdAyAWbA8MsYHsNqQqNLJbCayTjY",))
  41. if cursor.fetchone():
  42. print("✅ 测试应用已存在")
  43. cursor.close()
  44. conn.close()
  45. return
  46. # 获取admin用户ID
  47. cursor.execute("SELECT id FROM users WHERE username = 'admin'")
  48. admin_result = cursor.fetchone()
  49. if not admin_result:
  50. print("❌ 未找到admin用户")
  51. cursor.close()
  52. conn.close()
  53. return
  54. admin_id = admin_result[0]
  55. # 创建测试应用
  56. app_id = str(uuid.uuid4())
  57. app_key = "eqhoIdAyAWbA8MsYHsNqQqNLJbCayTjY"
  58. app_secret = "LKJm5XHJFhhgxSv9nQhoQNNI3wrKyWGZCaPQ4qc43Lf5qfXdLAHoGAHhCYqApEpr"
  59. cursor.execute("""
  60. INSERT INTO apps (
  61. id, name, app_key, app_secret, description, icon_url,
  62. redirect_uris, scope, is_active, is_trusted,
  63. access_token_expires, refresh_token_expires, created_by,
  64. created_at, updated_at, is_deleted
  65. ) VALUES (
  66. %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW(), NOW(), %s
  67. )
  68. """, (
  69. app_id,
  70. "子系统演示应用",
  71. app_key,
  72. app_secret,
  73. "用于演示SSO集成的子系统应用",
  74. "",
  75. json.dumps([
  76. "http://localhost:8001/auth/callback",
  77. "http://localhost:3001/auth/callback"
  78. ]),
  79. json.dumps(["profile", "email", "phone"]),
  80. True, # is_active
  81. True, # is_trusted
  82. 7200, # access_token_expires (2小时)
  83. 2592000, # refresh_token_expires (30天)
  84. admin_id,
  85. False # is_deleted
  86. ))
  87. conn.commit()
  88. cursor.close()
  89. conn.close()
  90. print("✅ 测试应用创建成功")
  91. print(f"应用名称: 子系统演示应用")
  92. print(f"App Key: {app_key}")
  93. print(f"App Secret: {app_secret}")
  94. print(f"回调URL: http://localhost:8001/auth/callback")
  95. print(f"权限范围: profile, email, phone")
  96. print(f"受信任应用: 是")
  97. if __name__ == "__main__":
  98. create_test_app()