manage_users.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/usr/bin/env python3
  2. """管理用户 API Key。
  3. 用法:
  4. python manage_users.py add --email user@example.com --name "User Name"
  5. python manage_users.py list
  6. python manage_users.py delete --api-key <key>
  7. """
  8. import argparse
  9. import secrets
  10. import time
  11. import boto3
  12. TABLE_NAME = 'sp-transcribe-users'
  13. def add_user(email: str, name: str):
  14. ddb = boto3.resource('dynamodb')
  15. table = ddb.Table(TABLE_NAME)
  16. api_key = secrets.token_urlsafe(32)
  17. table.put_item(Item={
  18. 'api_key': api_key,
  19. 'email': email,
  20. 'name': name,
  21. 'created_at': int(time.time()),
  22. })
  23. print(f"用户已创建:")
  24. print(f" Name: {name}")
  25. print(f" Email: {email}")
  26. print(f" API Key: {api_key}")
  27. def list_users():
  28. ddb = boto3.resource('dynamodb')
  29. table = ddb.Table(TABLE_NAME)
  30. resp = table.scan()
  31. items = resp.get('Items', [])
  32. if not items:
  33. print("无用户")
  34. return
  35. for u in items:
  36. print(f" {u.get('name', '?'):20s} {u.get('email', '?'):30s} {u['api_key']}")
  37. def delete_user(api_key: str):
  38. ddb = boto3.resource('dynamodb')
  39. table = ddb.Table(TABLE_NAME)
  40. table.delete_item(Key={'api_key': api_key})
  41. print(f"已删除: {api_key}")
  42. def main():
  43. parser = argparse.ArgumentParser(description="管理 SP Transcribe 用户")
  44. sub = parser.add_subparsers(dest='cmd')
  45. p_add = sub.add_parser('add')
  46. p_add.add_argument('--email', required=True)
  47. p_add.add_argument('--name', required=True)
  48. sub.add_parser('list')
  49. p_del = sub.add_parser('delete')
  50. p_del.add_argument('--api-key', required=True)
  51. args = parser.parse_args()
  52. if args.cmd == 'add':
  53. add_user(args.email, args.name)
  54. elif args.cmd == 'list':
  55. list_users()
  56. elif args.cmd == 'delete':
  57. delete_user(args.api_key)
  58. else:
  59. parser.print_help()
  60. if __name__ == '__main__':
  61. main()