# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# The names of expected mount-points, devices, magic files, etc on chrome os.

# Constants used by other constants.
USER_DATA_DIR = '/home/chronos'
DEVICESETTINGS_DIR = '/var/lib/devicesettings'
LOG_DIR = '/var/log'

# Rest of constants.
BROWSER = 'chrome'
BROWSER_EXE = '/opt/google/chrome/' + BROWSER

CHAPS_USER_DATABASE_PATH = '/home/chronos/user/.chaps/database'

CHROME_CORE_MAGIC_FILE = '/mnt/stateful_partition/etc/collect_chrome_crashes'
CHROME_LOG_DIR = '/var/log/chrome'
CHROME_VERSION_COMMAND = BROWSER_EXE + ' --version'

# Directory to save log files preserved during autoupdate.
AUTOUPDATE_PRESERVE_LOG = '/mnt/stateful_partition/unencrypted/preserve/log'

CLEANUP_LOGS_PAUSED_FILE = '/var/lib/cleanup_logs_paused'

CLIENT_LOGIN_URL = '/accounts/ClientLogin'
CLIENT_LOGIN_NEW_URL = '/ClientLogin'

CRASH_DIR = '/var/spool/crash'
CRASH_REPORTER_RESIDUE_DIR = '/tmp/crash_reporter'

# LOGS to collect from DUTs
LOG_PSTORE_DIRS = ('/sys/fs/pstore',)
LOG_I915_ERROR_STATE = '/sys/kernel/debug/dri/0/i915_error_state'

CREDENTIALS = {
    '$mockowner': ['mockowner.test.account@gmail.com', 'perfsmurf'],
    '$default': ['performance.test.account@gmail.com', 'perfsmurf'],
    '$apps': ['performance.test.account@googleapps.com', 'perfsmurf'],
    '$backdoor': ['chronos@gmail.com', 'chronos'],
}

SHADOW_ROOT = '/home/.shadow'

CRYPTOHOME_DEV_REGEX_ANY = r'.*'
CRYPTOHOME_DEV_REGEX_REGULAR_USER_SHADOW = r'^/home/\.shadow/.*/vault$'
CRYPTOHOME_DEV_REGEX_REGULAR_USER_DEVICE = r'^/dev/(?!loop[0-9]+$)[^/]*$'
CRYPTOHOME_DEV_REGEX_REGULAR_USER_EPHEMERAL = r'^ephemeralfs/.*$'
# Ecryptfs-based user home directory mounts the SHADOW encrypted directory,
# while ext4-crypto based user home is a bind-mount to an encrypted directory
# part of a ext4 filesystem that mounts the main disk device. Both can be
# a home directory of a regular user.
CRYPTOHOME_DEV_REGEX_REGULAR_USER = r'(%s|%s|%s)' % (
   CRYPTOHOME_DEV_REGEX_REGULAR_USER_SHADOW,
   CRYPTOHOME_DEV_REGEX_REGULAR_USER_DEVICE,
   CRYPTOHOME_DEV_REGEX_REGULAR_USER_EPHEMERAL)
CRYPTOHOME_DEV_REGEX_LOOP_DEVICE = r'^/dev/loop[0-9]+$'
CRYPTOHOME_DEV_REGEX_GUEST = r'^guestfs$'

CRYPTOHOME_FS_REGEX_ANY = r'.*'
CRYPTOHOME_FS_REGEX_TMPFS = r'^tmpfs$'
CRYPTOHOME_FS_REGEX_EXT4 = r'^ext4$'
CRYPTOHOME_FS_REGEX_ECRYPTFS = r'^ecryptfs$'

CRYPTOHOME_MOUNT_PT = USER_DATA_DIR + '/user'

CRYPTOHOMED_LOG = '/var/log/cryptohomed.log'

# Directories to copy out of cryptohome, relative to CRYPTOHOME_MOUNT_PT.
CRYPTOHOME_DIRS_TO_RECOVER = ['crash', 'log']

DISABLE_BROWSER_RESTART_MAGIC_FILE = '/run/disable_chrome_restart'
DEFAULT_OWNERSHIP_TIMEOUT = 300  # Ownership is an inherently random process.

ENABLE_BROWSER_HANG_DETECTION_FILE = \
    '/run/session_manager/enable_hang_detection'

FLIMFLAM_TEST_PATH = '/usr/lib/flimflam/test/'

GUEST_USER = '$guest'

LOGIN_PROFILE = USER_DATA_DIR + '/Default'

LOGIN_PROMPT_STATUS_COMMAND = 'bootstat_get_last login-prompt-visible'

LSB_RELEASE = '/etc/lsb-release'

MOCK_OWNER_CERT = 'mock_owner_cert.pem'
MOCK_OWNER_KEY = 'mock_owner_private.key'
MOCK_OWNER_POLICY = 'mock_owner.policy'

ISSUE_AUTH_TOKEN_URL = '/accounts/IssueAuthToken'
ISSUE_AUTH_TOKEN_NEW_URL = '/IssueAuthToken'

OAUTH1_GET_REQUEST_TOKEN_URL = '/accounts/o8/GetOAuthToken'
OAUTH1_GET_REQUEST_TOKEN_NEW_URL = '/o/oauth/GetOAuthToken/'
OAUTH1_GET_ACCESS_TOKEN_URL = '/accounts/OAuthGetAccessToken'
OAUTH1_GET_ACCESS_TOKEN_NEW_URL = '/OAuthGetAccessToken'
OAUTH_LOGIN_URL = '/accounts/OAuthLogin'
OAUTH_LOGIN_NEW_URL = '/OAuthLogin'
MERGE_SESSION_URL = '/MergeSession'

OAUTH2_CLIENT_ID = '77185425430.apps.googleusercontent.com'
OAUTH2_CLIENT_SECRET = 'OTJgUOQcT7lO7GsGZq2G4IlT'
OAUTH2_WRAP_BRIDGE_URL = '/accounts/OAuthWrapBridge'
OAUTH2_WRAP_BRIDGE_NEW_URL = '/OAuthWrapBridge'
OAUTH2_GET_AUTH_CODE_URL = '/o/oauth2/programmatic_auth'
OAUTH2_GET_TOKEN_URL = '/o/oauth2/token'

OWNER_KEY_FILE = DEVICESETTINGS_DIR + '/owner.key'

SERVICE_LOGIN_URL = '/accounts/ServiceLogin'
SERVICE_LOGIN_NEW_URL = '/ServiceLogin'
SERVICE_LOGIN_AUTH_URL = '/ServiceLoginAuth'
SERVICE_LOGIN_AUTH_ERROR = 'The username or password you entered is incorrect.'

SESSION_MANAGER = 'session_manager'
SIGNED_POLICY_FILE = DEVICESETTINGS_DIR + '/policy'
SPECIAL_CASE_DOMAIN = 'gmail.com'
USER_POLICY_DIR = '/run/user_policy'
USER_POLICY_KEY_FILENAME = 'policy.pub'

TOKEN_AUTH_URL = '/accounts/TokenAuth'
TOKEN_AUTH_NEW_URL = '/TokenAuth'

UI_LOG = '/var/log/ui/ui.LATEST'
UI_RESPAWN_TIMESTAMPS_FILE = '/tmp/ui-respawn-timestamps'
UI_TOO_CRASHY_TIMESTAMPS_FILE = '/tmp/ui-too-crashy-timestamps'

RESOLV_CONF_FILE = '/etc/resolv.conf'

PENDING_SHUTDOWN_PATH = '/var/lib/crash_reporter/pending_clean_shutdown'
UNCLEAN_SHUTDOWN_DETECTED_PATH = '/run/unclean-shutdown-detected'

INTERACTIVE_XMLRPC_SERVER_PORT = 9980
INTERACTIVE_XMLRPC_SERVER_COMMAND = (
        'cd /usr/local/autotest/common_lib/cros; '
        './interactive_xmlrpc_server.py')
INTERACTIVE_XMLRPC_SERVER_CLEANUP_PATTERN = 'interactive_xmlrpc_server'
INTERACTIVE_XMLRPC_SERVER_READY_METHOD = 'ready'

SHILL_XMLRPC_SERVER_PORT = 9989
SHILL_XMLRPC_SERVER_COMMAND = (
        'cd /usr/local/autotest/cros/networking; '
        './shill_xmlrpc_server.py')

SHILL_XMLRPC_SERVER_CLEANUP_PATTERN = 'shill_xmlrpc_server'
SHILL_XMLRPC_SERVER_READY_METHOD = 'ready'

BLUETOOTH_DEVICE_XMLRPC_SERVER_PORT = 9990
BLUETOOTH_DEVICE_XMLRPC_SERVER_COMMAND = (
        'cd /usr/local/autotest/cros/bluetooth; '
        './bluetooth_device_xmlrpc_server.py')
BLUETOOTH_DEVICE_XMLRPC_SERVER_CLEANUP_PATTERN = (
        'bluetooth_device_xmlrpc_server')
BLUETOOTH_DEVICE_XMLRPC_SERVER_READY_METHOD = 'ready'


MULTIMEDIA_XMLRPC_SERVER_PORT = 9991
MULTIMEDIA_XMLRPC_SERVER_COMMAND = (
        'cd /usr/local/autotest/cros/multimedia; '
        './multimedia_xmlrpc_server.py')
MULTIMEDIA_XMLRPC_SERVER_CLEANUP_PATTERN = 'multimedia_xmlrpc_server'
MULTIMEDIA_XMLRPC_SERVER_READY_METHOD = 'ready'
MULTIMEDIA_XMLRPC_SERVER_LOG_FILE= '/var/log/multimedia_xmlrpc_server.log'
MULTIMEDIA_XMLRPC_SERVER_REQUEST_TIMEOUT = 180

AUDIO_TEST_EXTENSION = (
        '/usr/local/autotest/cros/multimedia/audio_test_extension')
DISPLAY_TEST_EXTENSION = (
        '/usr/local/autotest/cros/multimedia/display_test_extension')

APMANAGER_XMLRPC_SERVER_PORT = 9992
APMANAGER_XMLRPC_SERVER_COMMAND = (
        'cd /usr/local/autotest/cros/networking; '
        './apmanager_xmlrpc_server.py')
APMANAGER_XMLRPC_SERVER_CLEANUP_PATTERN = 'apmanager_xmlrpc_server'
APMANAGER_XMLRPC_SERVER_READY_METHOD = 'ready'

DARK_RESUME_XMLRPC_SERVER_PORT = 9993
DARK_RESUME_XMLRPC_SERVER_COMMAND = (
        'cd /usr/local/autotest/cros; '
        './dark_resume_xmlrpc_server.py')
DARK_RESUME_XMLRPC_SERVER_CLEANUP_PATTERN = 'dark_resume_xmlrpc_server'
DARK_RESUME_XMLRPC_SERVER_READY_METHOD = 'ready'

# Bug filing
CHROME_VERSION = 'CHROME_VERSION'

# Moblab Environment Constants.
MOBLAB_USER = 'moblab'
