import json import logging import os import sqlite3 from typing import Dict logger = logging.getLogger("desktopenv.getters.chrome") """ WARNING: 1. Functions from this script assume that no account is registered on Chrome, otherwise the default file path needs to be changed. 2. The functions are not tested on Windows and Mac, but they should work. """ def get_default_search_engine(env, config: Dict[str, str]): os_type = env.vm_platform if os_type == 'Windows': preference_file_path = env.controller.execute_python_command("""import os; print(os.path.join(os.getenv('LOCALAPPDATA'), 'Google\\Chrome\\User Data\\Default\\Preferences'))""")['output'].strip() elif os_type == 'Darwin': preference_file_path = env.controller.execute_python_command("import os; print(os.path.join(os.getenv('HOME'), 'Library/Application Support/Google/Chrome/Default/Preferences'))")['output'].strip() elif os_type == 'Linux': preference_file_path = env.controller.execute_python_command("import os; print(os.path.join(os.getenv('HOME'), '.config/google-chrome/Default/Preferences'))")['output'].strip() else: raise Exception('Unsupported operating system') try: content = env.controller.get_file(preference_file_path) data = json.loads(content) # The path within the JSON data to the default search engine might vary search_engine = data.get('default_search_provider_data', {}).get('template_url_data', {}).get('short_name', 'Google') return search_engine except Exception as e: logger.error(f"Error: {e}") return "Google" def get_cookie_data(env, config: Dict[str, str]): os_type = env.vm_platform if os_type == 'Windows': chrome_cookie_file_path = os.path.join(os.getenv('LOCALAPPDATA'), 'Google\\Chrome\\User Data\\Default\\Cookies') elif os_type == 'Darwin': chrome_cookie_file_path = os.path.join(os.getenv('HOME'), 'Library/Application Support/Google/Chrome/Default/Cookies') elif os_type == 'Linux': chrome_cookie_file_path = os.path.join(os.getenv('HOME'), '.config/google-chrome/Default/Cookies') else: raise Exception('Unsupported operating system') # todo: add a new controller function to connect the cookie database ############# try: conn = sqlite3.connect(chrome_cookie_file_path) cursor = conn.cursor() # Query to check for OpenAI cookies cursor.execute("SELECT * FROM cookies") cookies = cursor.fetchall() return cookies except Exception as e: logger.error(f"Error: {e}") return None ############# def get_bookmarks(env, config: Dict[str, str]): os_type = env.vm_platform if os_type == 'Windows': preference_file_path = os.path.join(os.getenv('LOCALAPPDATA'), 'Google\\Chrome\\User Data\\Default\\Bookmarks') elif os_type == 'Darwin': preference_file_path = os.path.join(os.getenv('HOME'), 'Library/Application Support/Google/Chrome/Default/Bookmarks') elif os_type == 'Linux': preference_file_path = os.path.join(os.getenv('HOME'), '.config/google-chrome/Default/Bookmarks') else: raise Exception('Unsupported operating system') try: content = env.controller.get_file(preference_file_path) # make content json variable data = json.load(content) bookmarks = data.get('roots', {}) return bookmarks except Exception as e: logger.error(f"Error: {e}") return None # todo: move this to the main.py def get_extensions_installed_from_shop(env, config: Dict[str, str]): """Find the Chrome extensions directory based on the operating system.""" os_type = env.vm_platform if os_type == 'Windows': chrome_extension_dir = os.path.expanduser( '~') + '\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Extensions\\' elif os_type == 'Darwin': # macOS chrome_extension_dir = os.path.expanduser( '~') + '/Library/Application Support/Google/Chrome/Default/Extensions/' elif os_type == 'Linux': chrome_extension_dir = os.path.expanduser('~') + '/.config/google-chrome/Default/Extensions/' else: raise Exception('Unsupported operating system') manifests = [] for extension_id in os.listdir(chrome_extension_dir): extension_path = os.path.join(chrome_extension_dir, extension_id) if os.path.isdir(extension_path): # Iterate through version-named subdirectories for version_dir in os.listdir(extension_path): version_path = os.path.join(extension_path, version_dir) manifest_path = os.path.join(version_path, 'manifest.json') if os.path.isfile(manifest_path): with open(manifest_path, 'r') as file: try: manifest = json.load(file) manifests.append(manifest) except json.JSONDecodeError: logger.error(f"Error reading {manifest_path}") return manifests