mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			76 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 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', type=str, 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 ' + 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).decode('UTF-8')
 | 
						|
        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}')
 |