Source code for androlyze.settings


# encoding: utf-8

__author__ = "Nils Tobias Schmidt"
__email__ = "schmidt89 at informatik.uni-marburg.de"

'''
Settings module
'''

import os
from os.path import expanduser, join

from androlyze.log.Log import log
from androlyze.settings.Settings import Settings


############################################################
#---Sections and keys for normal config
############################################################
SECTION_FILE_SYSTEM = "File System"
KEY_FILE_SYSTEM_WRITE_RESULTS_TO_FILE_SYSTEM = "enabled"
KEY_FILE_SYSTEM_RESULT_DIR = "result_dir"

SECTION_DATABASE = "Database"
KEY_DATABASE_IMPORT = "import_database"

SECTION_ANDROGUARD = "Androguard"
KEY_ANDROGUARD_PATH = "androguard_path"

SECTION_APK_DISTRIBUTED_STORAGE = "ApkDistributedStorage"
# use one of the sectio keys as value, e.g. S3Storage
KEY_APK_STORAGE_ENGINE = "storage_engine"

SECTION_S3_STORAGE = "S3Storage"
KEY_S3_STORAGE_AWS_ACCESS_KEY_ID = "aws_access_key_id"
KEY_S3_STORAGE_AWS_SECRET_ACCESS_KEY = "aws_secret_access_key"
KEY_S3_STORAGE_AWS_HOST_URL = "aws_s3_host"
KEY_S3_STORAGE_AWS_APK_BUCKET = "aws_apk_bucket"

SECTION_RESULT_DB = "ResultDatabase"
KEY_RESULT_DB_IP = "mongodb_ip"
KEY_RESULT_DB_PORT = "mongodb_port"
KEY_RESULT_DB_NAME = "mongodb_name"
KEY_RESULT_DB_AUTH_USERNAME = "mongodb_username"
KEY_RESULT_DB_AUTH_PASSWD = "mongodb_passwd"
KEY_RESULT_DB_USE_SSL = "use_ssl"
KEY_RESULT_DB_CA_CERT = "ca_cert"

SECTION_PARALLELIZATION = "Parallelization"
KEY_PARALLELIZATION_CONCURRENCY = "concurrency"
KEY_PARALLELIZATION_THREADED = "threaded"
KEY_PARALLELIZATION_QUEUE_SIZE = "queue_size"

KEY_PARALLELIZATION_MODE = "mode"

# possible values for parallelization mode
PARALLELIZATION_MODE_PARALLEL = "parallel"
PARALLELIZATION_MODE_NON_PARALLEL = "non-parallel"
PARALLELIZATION_MODE_DISTRIBUTED = "distributed"

############################################################
#---Sections and keys for distributed config
############################################################

SECTION_BROKER = "Broker"

# connection url's
KEY_BROKER_URL = "broker_url"
KEY_BROKER_BACKEND_URL = "backend_url"

# broker
KEY_BROKER_USE_SSL = 'use_ssl'
KEY_BROKER_SSL_CA_CERT = 'ca_cert'

# client
KEY_BROKER_SSL_CLIENT_AUTH = 'auth_client'
KEY_BROKER_SSL_CLIENT_KEYFILE = 'client_keyfile'
KEY_BROKER_SSL_CLIENT_CERT = 'client_certfile'

# analysis
SECTION_ANALYSIS = "Analysis"
KEY_ANALYSIS_SCRIPT_HASH_VALIDATION = "script_hash_validation"
KEY_ANALYSIS_SCRIPT_LOAD_RETRY_CNT = "scripts_load_retry_cnt"
KEY_ANALYSIS_RES_DB_OPEN_RETRY_CNT = "result_db_open_retry_cnt"
KEY_ANALYSIS_STORE_RES_RETRY_CNT = "analysis_store_results_retry_cnt"
KEY_ANALYSIS_SOFT_TIME_LIMIT = "soft_time_limit"
KEY_ANALYSIS_HARD_TIME_LIMIT = "hard_time_limit"
KEY_ANALYSIS_TASK_RECOVATION_ENABLED = "task_revocation"

# project deployment etc.
SECTION_DEPLOYMENT = "Deployment"
KEY_DEPLOYMENT_WORKER_NAME = "worker_name"
KEY_DEPLOYMENT_WORKERS = "workers"
KEY_DEPLOYMENT_CODE_DIR = "code_dir"
KEY_DEPLOYMENT_USERSCRIPTS_PATH = "userscripts_path"
KEY_DEPLOYMENT_REPO_PATH_GIT_URL = "repo_path_git_url"
KEY_DEPLOYMENT_REPO_SUFFIX_HTTP_URL = "repo_suffix_http_url"

############################################################
#---Config stuff
############################################################


# home dir for configs
CONFIG_BASEDIR = "conf/"

# default config path
# this is the client specific configuration that lived once in the users home
# to keep it uniform, there is only one config left! 
# CONFIG_PATH = os.path.expanduser("~/.androlyze/config.conf")
CONFIG_PATH = join(CONFIG_BASEDIR, "config.conf")
DISTRIBUTED_CONFIG_PATH = CONFIG_PATH

# the default settings that will be used if no value in config supplied
#DEFAULTS_PATH = "androlyze/settings/defaults/sample.conf"
DEFAULTS_PATH = "androlyze/settings/defaults/config.conf"

# default config file for distributed mode
DISTRIBUTED_DEFAULT_CONFIG_PATH = DEFAULTS_PATH


# has to be package name!
CELERY_CONF = "conf.distributed.celery"

# path for file that holds script paths to scripts that shall be loaded
#SCRIPT_SETTINGS_PATH = '~/.androlyze/script_settings.json'
SCRIPT_SETTINGS_PATH = join(CONFIG_BASEDIR, 'script_settings.json')

SCRIPT_SETTINGS_KEY_SCRIPTS = "scripts"

# key for builtin scripts (paths)
SCRIPT_SETTINGS_SCRIPTS_BUILTIN = "builtin"

# key that selects scripts config to load
SCRIPT_SETTINGS_SCRIPTS_LOAD = "load"

[docs]def get_default_scripts(): ''' Get the default scripts that shall be loaded according to `SCRIPT_SETTINGS_PATH`. Returns list<str> (list of paths to script). Returns empty list if error occurred. ''' import json paths = [] try: config_path = expanduser(SCRIPT_SETTINGS_PATH) with open(config_path, "r") as f: script_templates = json.load(f) # get key that selects the key for script loading script_key = script_templates[SCRIPT_SETTINGS_KEY_SCRIPTS][SCRIPT_SETTINGS_SCRIPTS_LOAD] paths = script_templates[SCRIPT_SETTINGS_KEY_SCRIPTS][script_key] except IOError: pass except ValueError as e: log.warn("Error loading %s due to: %s", config_path, e) return paths
singleton = None try: singleton = Settings( CONFIG_PATH, default_path = DEFAULTS_PATH) except Exception as e: log.error(e)