mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 03:53:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| 
 | |
| """
 | |
| This tool is for updating API key field `zuliprc` files of dummy users
 | |
| in development environment, with the correct keys from the database.
 | |
| Ensure running this outside of vagrant environment.
 | |
| Usage:
 | |
| ./tools/update-zuliprc-api-field /path/to/zuliprc_dev
 | |
| """
 | |
| 
 | |
| import argparse
 | |
| import configparser
 | |
| import os
 | |
| import shlex
 | |
| import subprocess
 | |
| import sys
 | |
| 
 | |
| ZULIP_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 | |
| sys.path.insert(0, ZULIP_PATH)
 | |
| from scripts.lib.zulip_tools import is_vagrant_env_host
 | |
| 
 | |
| parser = argparse.ArgumentParser(description=__doc__)
 | |
| parser.add_argument(
 | |
|     "path", metavar="FILE", nargs="+", help="config file of dummy users in development server"
 | |
| )
 | |
| args = parser.parse_args()
 | |
| 
 | |
| zuliprc_paths_list = args.path
 | |
| for zuliprc_path in zuliprc_paths_list:
 | |
|     zuliprc = configparser.ConfigParser()
 | |
|     result = ""
 | |
|     try:
 | |
|         with open(zuliprc_path) as f:
 | |
|             zuliprc.read_file(f, zuliprc_path)
 | |
|         api_details = zuliprc["api"]
 | |
|         email = api_details["email"]
 | |
|         key = api_details["key"]
 | |
|         site = api_details["site"]
 | |
|         if "localhost" not in site:
 | |
|             result = "ABORTED"
 | |
|             reason = "Script to be used for development server config files only"
 | |
|     except (KeyError, configparser.MissingSectionHeaderError):
 | |
|         result = "FAILURE"
 | |
|         reason = "Could not parse file due to missing required fields/sections"
 | |
|     except FileNotFoundError:
 | |
|         result = "ABORTED"
 | |
|         reason = "No zuliprc file found at specified path"
 | |
| 
 | |
|     if result not in ("ABORTED", "FAILURE"):
 | |
|         # Make sure the cwd is the root of Zulip checkout.
 | |
|         os.chdir(ZULIP_PATH)
 | |
| 
 | |
|         if is_vagrant_env_host(ZULIP_PATH):
 | |
|             arguments = [
 | |
|                 "vagrant",
 | |
|                 "ssh",
 | |
|                 "--command",
 | |
|                 "./manage.py print_initial_password " + shlex.quote(email),
 | |
|             ]
 | |
|         else:
 | |
|             # Support users who don't have vagrant based setup
 | |
|             arguments = ["./manage.py", "print_initial_password", email]
 | |
|         # We redirect 'stderr' to 'stdout' to avoid 'Connection to 127.0.0.1 closed'
 | |
|         # appearing after this script finishes.
 | |
|         output = subprocess.check_output(arguments, stderr=subprocess.STDOUT, text=True)
 | |
|         new_key = output.split()[6]
 | |
| 
 | |
|         if new_key != key:
 | |
|             try:
 | |
|                 zuliprc.set("api", "key", new_key)
 | |
|                 with open(zuliprc_path, "w+") as w:
 | |
|                     zuliprc.write(w)
 | |
|                 result = "SUCCESS"
 | |
|                 reason = f"API field updated for user {email}"
 | |
|             except OSError:
 | |
|                 result = "FAILURE"
 | |
|                 reason = "Writing to file unsuccessful"
 | |
|         else:
 | |
|             result = "SUCCESS"
 | |
|             reason = f"API key for user {email} is already consistent"
 | |
|     print(f"{zuliprc_path}: {result}: {reason}")
 |