From 8c805999e650c77e5b1b90d853cb14be6c308287 Mon Sep 17 00:00:00 2001 From: Cory Lee Date: Fri, 1 Mar 2019 17:31:10 -0500 Subject: [PATCH] Revert "Use single yaml config instead of two json configs" This reverts commit b0b8a76dd91935809805a0828c3dc8c984d7d339. --- cms/envs/bok_choy.py | 3 - cms/envs/bok_choy.yml | 133 -------------- cms/envs/bok_choy_docker.yml | 133 -------------- cms/envs/production.py | 46 ++--- lms/envs/bok_choy.auth.json | 144 +++++++++++++++ lms/envs/bok_choy.env.json | 148 +++++++++++++++ lms/envs/bok_choy.py | 3 - lms/envs/bok_choy.yml | 161 ----------------- lms/envs/bok_choy_docker.auth.json | 152 ++++++++++++++++ lms/envs/bok_choy_docker.env.json | 148 +++++++++++++++ lms/envs/bok_choy_docker.yml | 169 ------------------ lms/envs/production.py | 47 ++--- openedx/core/djangoapps/plugins/README.rst | 2 +- openedx/core/djangoapps/plugins/constants.py | 3 +- .../djangoapps/zendesk_proxy/settings/aws.py | 2 +- openedx/features/journals/settings/aws.py | 2 +- 16 files changed, 624 insertions(+), 672 deletions(-) delete mode 100644 cms/envs/bok_choy.yml delete mode 100644 cms/envs/bok_choy_docker.yml create mode 100644 lms/envs/bok_choy.auth.json create mode 100644 lms/envs/bok_choy.env.json delete mode 100644 lms/envs/bok_choy.yml create mode 100644 lms/envs/bok_choy_docker.auth.json create mode 100644 lms/envs/bok_choy_docker.env.json delete mode 100644 lms/envs/bok_choy_docker.yml diff --git a/cms/envs/bok_choy.py b/cms/envs/bok_choy.py index 82975055f6..14e4a21636 100644 --- a/cms/envs/bok_choy.py +++ b/cms/envs/bok_choy.py @@ -25,9 +25,6 @@ from openedx.core.release import RELEASE_LINE # and (b) that the files are the same in Jenkins as in local dev. os.environ['SERVICE_VARIANT'] = 'bok_choy_docker' if 'BOK_CHOY_HOSTNAME' in os.environ else 'bok_choy' os.environ['CONFIG_ROOT'] = path(__file__).abspath().dirname() -os.environ['STUDIO_CFG'] = str.format("{config_root}/{service_variant}.yml", - config_root=os.environ['CONFIG_ROOT'], - service_variant=os.environ['SERVICE_VARIANT']) from .production import * # pylint: disable=wildcard-import, unused-wildcard-import, wrong-import-position diff --git a/cms/envs/bok_choy.yml b/cms/envs/bok_choy.yml deleted file mode 100644 index 4388bfa1c0..0000000000 --- a/cms/envs/bok_choy.yml +++ /dev/null @@ -1,133 +0,0 @@ -# ingested bok_choy.env.json -# ingested bok_choy.auth.json -AWS_ACCESS_KEY_ID: '' -AWS_SECRET_ACCESS_KEY: '' -BUGS_EMAIL: bugs@example.com -BULK_EMAIL_DEFAULT_FROM_EMAIL: no-reply@example.com -CACHES: - celery: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: integration_celery - LOCATION: ['localhost:11211'] - default: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: sandbox_default - LOCATION: ['localhost:11211'] - general: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: sandbox_general - LOCATION: ['localhost:11211'] - mongo_metadata_inheritance: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: integration_mongo_metadata_inheritance - LOCATION: ['localhost:11211'] - staticfiles: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: integration_static_files - LOCATION: ['localhost:11211'] -CELERY_ALWAYS_EAGER: true -CELERY_BROKER_HOSTNAME: localhost -CELERY_BROKER_PASSWORD: celery -CELERY_BROKER_TRANSPORT: amqp -CELERY_BROKER_USER: celery -CERT_QUEUE: certificates -CMS_BASE: localhost:8031 -CODE_JAIL: - limits: {REALTIME: 3, VMEM: 0} -COMMENTS_SERVICE_KEY: password -COMMENTS_SERVICE_URL: http://localhost:4567 -CONTACT_EMAIL: info@example.com -CONTENTSTORE: - DOC_STORE_CONFIG: - collection: modulestore - db: test - host: [localhost] - port: 27017 - ENGINE: xmodule.contentstore.mongo.MongoContentStore - OPTIONS: - db: test - host: [localhost] - port: 27017 -DATABASES: - default: {ENGINE: django.db.backends.mysql, HOST: localhost, NAME: edxtest, PASSWORD: '', - PORT: '3306', USER: root} - student_module_history: {ENGINE: django.db.backends.mysql, HOST: localhost, NAME: student_module_history_test, - PASSWORD: '', PORT: '3306', USER: root} -DEFAULT_FEEDBACK_EMAIL: feedback@example.com -DEFAULT_FROM_EMAIL: registration@example.com -DJFS: {aws_access_key_id: test, aws_secret_access_key: test, bucket: test, prefix: test, - type: s3fs} -DOC_STORE_CONFIG: - collection: modulestore - db: test - host: [localhost] - port: 27017 -EMAIL_BACKEND: django.core.mail.backends.smtp.EmailBackend -FEATURES: {AUTH_USE_OPENID_PROVIDER: true, CERTIFICATES_HTML_VIEW: true, CUSTOM_COURSES_EDX: true, - ENABLE_CONTENT_LIBRARIES: true, ENABLE_DISCUSSION_SERVICE: true, ENABLE_EXTENDED_COURSE_DETAILS: true, - ENABLE_GRADE_DOWNLOADS: true, ENABLE_SPECIAL_EXAMS: true, ENTRANCE_EXAMS: true, - MILESTONES_APP: true, PREVIEW_LMS_BASE: 'preview.localhost:8003', SHOW_HEADER_LANGUAGE_SELECTOR: true} -FEEDBACK_SUBMISSION_EMAIL: '' -GITHUB_REPO_ROOT: '** OVERRIDDEN **' -GRADES_DOWNLOAD: {BUCKET: edx-grades, ROOT_PATH: /tmp/edx-s3/grades, STORAGE_TYPE: localfs} -JWT_AUTH: {JWT_PRIVATE_SIGNING_JWK: '{"e": "AQAB", "d": "HIiV7KNjcdhVbpn3KT-I9n3JPf5YbGXsCIedmPqDH1d4QhBofuAqZ9zebQuxkRUpmqtYMv0Zi6ECSUqH387GYQF_XvFUFcjQRPycISd8TH0DAKaDpGr-AYNshnKiEtQpINhcP44I1AYNPCwyoxXA1fGTtmkKChsuWea7o8kytwU5xSejvh5-jiqu2SF4GEl0BEXIAPZsgbzoPIWNxgO4_RzNnWs6nJZeszcaDD0CyezVSuH9QcI6g5QFzAC_YuykSsaaFJhZ05DocBsLczShJ9Omf6PnK9xlm26I84xrEh_7x4fVmNBg3xWTLh8qOnHqGko93A1diLRCrKHOvnpvgQ", - "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ", - "q": "3T3DEtBUka7hLGdIsDlC96Uadx_q_E4Vb1cxx_4Ss_wGp1Loz3N3ZngGyInsKlmbBgLo1Ykd6T9TRvRNEWEtFSOcm2INIBoVoXk7W5RuPa8Cgq2tjQj9ziGQ08JMejrPlj3Q1wmALJr5VTfvSYBu0WkljhKNCy1KB6fCby0C9WE", - "p": "vUqzWPZnDG4IXyo-k5F0bHV0BNL_pVhQoLW7eyFHnw74IOEfSbdsMspNcPSFIrtgPsn7981qv3lN_staZ6JflKfHayjB_lvltHyZxfl0dvruShZOx1N6ykEo7YrAskC_qxUyrIvqmJ64zPW3jkuOYrFs7Ykj3zFx3Zq1H5568G0", - "kid": "BTZ9HA6K", "kty": "RSA"}', JWT_PUBLIC_SIGNING_JWK_SET: '{"keys": [{"kid": - "BTZ9HA6K", "e": "AQAB", "kty": "RSA", "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ"}]}', - JWT_SECRET_KEY: super-secret-key} -LMS_BASE: localhost:8003 -LMS_ROOT_URL: http://localhost:8003 -LOCAL_LOGLEVEL: INFO -LOGGING_ENV: sandbox -LOG_DIR: '** OVERRIDDEN **' -MEDIA_URL: /media/ -MKTG_URL_LINK_MAP: {} -MODULESTORE: - default: - ENGINE: xmodule.modulestore.mixed.MixedModuleStore - OPTIONS: - mappings: {} - stores: - - DOC_STORE_CONFIG: - collection: modulestore - db: test - host: [localhost] - port: 27017 - ENGINE: xmodule.modulestore.mongo.DraftMongoModuleStore - NAME: draft - OPTIONS: - collection: modulestore - db: test - default_class: xmodule.hidden_module.HiddenDescriptor - fs_root: '** OVERRIDDEN **' - host: [localhost] - port: 27017 - render_template: edxmako.shortcuts.render_to_string - - ENGINE: xmodule.modulestore.xml.XMLModuleStore - NAME: xml - OPTIONS: {data_dir: '** OVERRIDDEN **', default_class: xmodule.hidden_module.HiddenDescriptor} -OAUTH_OIDC_ISSUER: https://www.example.com/oauth2 -SECRET_KEY: '' -SERVER_EMAIL: devops@example.com -SESSION_COOKIE_DOMAIN: null -SITE_NAME: localhost -SOCIAL_SHARING_SETTINGS: {CUSTOM_COURSE_URLS: true} -STATIC_URL_BASE: /static/ -SYSLOG_SERVER: '' -TECH_SUPPORT_EMAIL: technical@example.com -TIME_ZONE: America/New_York -WIKI_ENABLED: true -XQUEUE_INTERFACE: - basic_auth: [edx, edx] - django_auth: {password: password, username: lms} - url: http://localhost:18040 -ZENDESK_API_KEY: '' -ZENDESK_USER: '' - diff --git a/cms/envs/bok_choy_docker.yml b/cms/envs/bok_choy_docker.yml deleted file mode 100644 index 3a6b0ae27d..0000000000 --- a/cms/envs/bok_choy_docker.yml +++ /dev/null @@ -1,133 +0,0 @@ -# ingested bok_choy_docker.env.json -# ingested bok_choy_docker.auth.json -AWS_ACCESS_KEY_ID: '' -AWS_SECRET_ACCESS_KEY: '' -BUGS_EMAIL: bugs@example.com -BULK_EMAIL_DEFAULT_FROM_EMAIL: no-reply@example.com -CACHES: - celery: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: integration_celery - LOCATION: ['edx.devstack.memcached:11211'] - default: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: sandbox_default - LOCATION: ['edx.devstack.memcached:11211'] - general: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: sandbox_general - LOCATION: ['edx.devstack.memcached:11211'] - mongo_metadata_inheritance: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: integration_mongo_metadata_inheritance - LOCATION: ['edx.devstack.memcached:11211'] - staticfiles: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: integration_static_files - LOCATION: ['edx.devstack.memcached:11211'] -CELERY_ALWAYS_EAGER: true -CELERY_BROKER_HOSTNAME: localhost -CELERY_BROKER_PASSWORD: celery -CELERY_BROKER_TRANSPORT: amqp -CELERY_BROKER_USER: celery -CERT_QUEUE: certificates -CMS_BASE: '** OVERRIDDEN **' -CODE_JAIL: - limits: {REALTIME: 3, VMEM: 0} -COMMENTS_SERVICE_KEY: password -COMMENTS_SERVICE_URL: http://edx.devstack.studio:4567 -CONTACT_EMAIL: info@example.com -CONTENTSTORE: - DOC_STORE_CONFIG: - collection: modulestore - db: test - host: [edx.devstack.mongo] - port: 27017 - ENGINE: xmodule.contentstore.mongo.MongoContentStore - OPTIONS: - db: test - host: [edx.devstack.mongo] - port: 27017 -DATABASES: - default: {ENGINE: django.db.backends.mysql, HOST: edx.devstack.mysql, NAME: edxtest, - PASSWORD: '', PORT: '3306', USER: root} - student_module_history: {ENGINE: django.db.backends.mysql, HOST: edx.devstack.mysql, - NAME: student_module_history_test, PASSWORD: '', PORT: '3306', USER: root} -DEFAULT_FEEDBACK_EMAIL: feedback@example.com -DEFAULT_FROM_EMAIL: registration@example.com -DJFS: {aws_access_key_id: test, aws_secret_access_key: test, bucket: test, prefix: test, - type: s3fs} -DOC_STORE_CONFIG: - collection: modulestore - db: test - host: [edx.devstack.mongo] - port: 27017 -EMAIL_BACKEND: django.core.mail.backends.smtp.EmailBackend -FEATURES: {AUTH_USE_OPENID_PROVIDER: true, CERTIFICATES_HTML_VIEW: true, CUSTOM_COURSES_EDX: true, - ENABLE_CONTENT_LIBRARIES: true, ENABLE_DISCUSSION_SERVICE: true, ENABLE_EXTENDED_COURSE_DETAILS: true, - ENABLE_GRADE_DOWNLOADS: true, ENABLE_SPECIAL_EXAMS: true, ENTRANCE_EXAMS: true, - MILESTONES_APP: true, PREVIEW_LMS_BASE: 'preview.localhost:8003', SHOW_HEADER_LANGUAGE_SELECTOR: true} -FEEDBACK_SUBMISSION_EMAIL: '' -GITHUB_REPO_ROOT: '** OVERRIDDEN **' -GRADES_DOWNLOAD: {BUCKET: edx-grades, ROOT_PATH: /tmp/edx-s3/grades, STORAGE_TYPE: localfs} -JWT_AUTH: {JWT_PRIVATE_SIGNING_JWK: '{"e": "AQAB", "d": "HIiV7KNjcdhVbpn3KT-I9n3JPf5YbGXsCIedmPqDH1d4QhBofuAqZ9zebQuxkRUpmqtYMv0Zi6ECSUqH387GYQF_XvFUFcjQRPycISd8TH0DAKaDpGr-AYNshnKiEtQpINhcP44I1AYNPCwyoxXA1fGTtmkKChsuWea7o8kytwU5xSejvh5-jiqu2SF4GEl0BEXIAPZsgbzoPIWNxgO4_RzNnWs6nJZeszcaDD0CyezVSuH9QcI6g5QFzAC_YuykSsaaFJhZ05DocBsLczShJ9Omf6PnK9xlm26I84xrEh_7x4fVmNBg3xWTLh8qOnHqGko93A1diLRCrKHOvnpvgQ", - "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ", - "q": "3T3DEtBUka7hLGdIsDlC96Uadx_q_E4Vb1cxx_4Ss_wGp1Loz3N3ZngGyInsKlmbBgLo1Ykd6T9TRvRNEWEtFSOcm2INIBoVoXk7W5RuPa8Cgq2tjQj9ziGQ08JMejrPlj3Q1wmALJr5VTfvSYBu0WkljhKNCy1KB6fCby0C9WE", - "p": "vUqzWPZnDG4IXyo-k5F0bHV0BNL_pVhQoLW7eyFHnw74IOEfSbdsMspNcPSFIrtgPsn7981qv3lN_staZ6JflKfHayjB_lvltHyZxfl0dvruShZOx1N6ykEo7YrAskC_qxUyrIvqmJ64zPW3jkuOYrFs7Ykj3zFx3Zq1H5568G0", - "kid": "BTZ9HA6K", "kty": "RSA"}', JWT_PUBLIC_SIGNING_JWK_SET: '{"keys": [{"kid": - "BTZ9HA6K", "e": "AQAB", "kty": "RSA", "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ"}]}', - JWT_SECRET_KEY: super-secret-key} -LMS_BASE: '** OVERRIDDEN **' -LMS_ROOT_URL: '** OVERRIDDEN **' -LOCAL_LOGLEVEL: INFO -LOGGING_ENV: sandbox -LOG_DIR: '** OVERRIDDEN **' -MEDIA_URL: /media/ -MKTG_URL_LINK_MAP: {} -MODULESTORE: - default: - ENGINE: xmodule.modulestore.mixed.MixedModuleStore - OPTIONS: - mappings: {} - stores: - - DOC_STORE_CONFIG: - collection: modulestore - db: test - host: [edx.devstack.mongo] - port: 27017 - ENGINE: xmodule.modulestore.mongo.DraftMongoModuleStore - NAME: draft - OPTIONS: - collection: modulestore - db: test - default_class: xmodule.hidden_module.HiddenDescriptor - fs_root: '** OVERRIDDEN **' - host: [edx.devstack.mongo] - port: 27017 - render_template: edxmako.shortcuts.render_to_string - - ENGINE: xmodule.modulestore.xml.XMLModuleStore - NAME: xml - OPTIONS: {data_dir: '** OVERRIDDEN **', default_class: xmodule.hidden_module.HiddenDescriptor} -OAUTH_OIDC_ISSUER: https://www.example.com/oauth2 -SECRET_KEY: '' -SERVER_EMAIL: devops@example.com -SESSION_COOKIE_DOMAIN: null -SITE_NAME: localhost -SOCIAL_SHARING_SETTINGS: {CUSTOM_COURSE_URLS: true} -STATIC_URL_BASE: /static/ -SYSLOG_SERVER: '' -TECH_SUPPORT_EMAIL: technical@example.com -TIME_ZONE: America/New_York -WIKI_ENABLED: true -XQUEUE_INTERFACE: - basic_auth: [edx, edx] - django_auth: {password: password, username: lms} - url: http://localhost:18040 -ZENDESK_API_KEY: '' -ZENDESK_USER: '' - diff --git a/cms/envs/production.py b/cms/envs/production.py index b6c07cd9ff..9d1b70362d 100644 --- a/cms/envs/production.py +++ b/cms/envs/production.py @@ -6,41 +6,17 @@ This is the default template for our main set of AWS servers. # want to import all variables from base settings files # pylint: disable=wildcard-import, unused-wildcard-import -import codecs +import json import os -import yaml from path import Path as path from xmodule.modulestore.modulestore_settings import convert_module_store_setting_if_needed -from openedx.core.djangoapps.plugins import plugin_settings, constants as plugin_constants -from django.core.exceptions import ImproperlyConfigured from .common import * from openedx.core.lib.derived import derive_settings # pylint: disable=wrong-import-order from openedx.core.lib.logsettings import get_logger_config # pylint: disable=wrong-import-order - -def get_env_setting(setting): - """ Get the environment setting or return exception """ - try: - return os.environ[setting] - except KeyError: - error_msg = u"Set the %s env variable" % setting - raise ImproperlyConfigured(error_msg) - -# A file path to a YAML file from which to load all the configuration for the edx platform -CONFIG_FILE = get_env_setting('STUDIO_CFG') - -with codecs.open(CONFIG_FILE, encoding='utf-8') as f: - __config__ = yaml.safe_load(f) - - # ENV_TOKENS and AUTH_TOKENS are included for reverse compatability. - # Removing them may break plugins that rely on them. - ENV_TOKENS = __config__ - AUTH_TOKENS = __config__ - - # SERVICE_VARIANT specifies name of the variant used, which decides what JSON # configuration files are read during startup. SERVICE_VARIANT = os.environ.get('SERVICE_VARIANT', None) @@ -106,6 +82,11 @@ CELERY_QUEUES = { CELERY_ROUTES = "{}celery.Router".format(QUEUE_VARIANT) +############# NON-SECURE ENV CONFIG ############################## +# Things like server locations, ports, etc. +with open(CONFIG_ROOT / CONFIG_PREFIX + "env.json") as env_file: + ENV_TOKENS = json.load(env_file) + # Do NOT calculate this dynamically at startup with git because it's *slow*. EDX_PLATFORM_REVISION = ENV_TOKENS.get('EDX_PLATFORM_REVISION', EDX_PLATFORM_REVISION) @@ -326,6 +307,11 @@ FILE_UPLOAD_STORAGE_PREFIX = ENV_TOKENS.get('FILE_UPLOAD_STORAGE_PREFIX', FILE_U ZENDESK_URL = ENV_TOKENS.get('ZENDESK_URL', ZENDESK_URL) ZENDESK_CUSTOM_FIELDS = ENV_TOKENS.get('ZENDESK_CUSTOM_FIELDS', ZENDESK_CUSTOM_FIELDS) +################ SECURE AUTH ITEMS ############################### +# Secret things: passwords, access keys, etc. +with open(CONFIG_ROOT / CONFIG_PREFIX + "auth.json") as auth_file: + AUTH_TOKENS = json.load(auth_file) + ############### XBlock filesystem field config ########## if 'DJFS' in AUTH_TOKENS and AUTH_TOKENS['DJFS'] is not None: DJFS = AUTH_TOKENS['DJFS'] @@ -613,14 +599,8 @@ COURSE_ENROLLMENT_MODES = ENV_TOKENS.get('COURSE_ENROLLMENT_MODES', COURSE_ENROL ####################### Plugin Settings ########################## # This is at the bottom because it is going to load more settings after base settings are loaded - -# Load aws.py in plugins for reverse compatibility. This can be removed after aws.py -# is officially removed. -plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.CMS, - plugin_constants.SettingsType.AWS) - -# We continue to load production.py over aws.py -plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.CMS, plugin_constants.SettingsType.PRODUCTION) +from openedx.core.djangoapps.plugins import plugin_settings, constants as plugin_constants # pylint: disable=wrong-import-order, wrong-import-position +plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.CMS, plugin_constants.SettingsType.AWS) ########################## Derive Any Derived Settings ####################### diff --git a/lms/envs/bok_choy.auth.json b/lms/envs/bok_choy.auth.json new file mode 100644 index 0000000000..53c7d7501b --- /dev/null +++ b/lms/envs/bok_choy.auth.json @@ -0,0 +1,144 @@ +{ + "AWS_ACCESS_KEY_ID": "", + "AWS_SECRET_ACCESS_KEY": "", + "CC_PROCESSOR_NAME": "CyberSource2", + "CC_PROCESSOR": { + "CyberSource2": { + "SECRET_KEY": "abcd123", + "ACCESS_KEY": "abcd123", + "PROFILE_ID": "edx", + "PURCHASE_ENDPOINT": "/shoppingcart/payment_fake" + } + }, + "CELERY_BROKER_PASSWORD": "celery", + "CELERY_BROKER_USER": "celery", + "CONTENTSTORE": { + "DOC_STORE_CONFIG": { + "collection": "modulestore", + "db": "test", + "host": [ + "localhost" + ], + "port": 27017 + }, + "ENGINE": "xmodule.contentstore.mongo.MongoContentStore", + "OPTIONS": { + "db": "test", + "host": [ + "localhost" + ], + "port": 27017 + } + }, + "DATABASES": { + "default": { + "ENGINE": "django.db.backends.mysql", + "HOST": "localhost", + "NAME": "edxtest", + "PASSWORD": "", + "PORT": "3306", + "USER": "root" + }, + "student_module_history": { + "ENGINE": "django.db.backends.mysql", + "HOST": "localhost", + "NAME": "student_module_history_test", + "PASSWORD": "", + "PORT": "3306", + "USER": "root" + } + }, + "DOC_STORE_CONFIG": { + "collection": "modulestore", + "db": "test", + "host": [ + "localhost" + ], + "port": 27017 + }, + "TRACKING_BACKENDS": { + "mongo": { + "ENGINE": "track.backends.mongodb.MongoBackend", + "OPTIONS": { + "database": "test", + "collection": "events" + } + } + }, + "EVENT_TRACKING_BACKENDS": { + "mongo": { + "ENGINE": "eventtracking.backends.mongodb.MongoBackend", + "OPTIONS": { + "database": "test", + "collection": "events" + } + } + }, + "JWT_AUTH": { + "JWT_SECRET_KEY": "super-secret-key", + "JWT_PUBLIC_SIGNING_JWK_SET": "{\"keys\": [{\"kid\": \"BTZ9HA6K\", \"e\": \"AQAB\", \"kty\": \"RSA\", \"n\": \"o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ\"}]}", + "JWT_PRIVATE_SIGNING_JWK": "{\"e\": \"AQAB\", \"d\": \"HIiV7KNjcdhVbpn3KT-I9n3JPf5YbGXsCIedmPqDH1d4QhBofuAqZ9zebQuxkRUpmqtYMv0Zi6ECSUqH387GYQF_XvFUFcjQRPycISd8TH0DAKaDpGr-AYNshnKiEtQpINhcP44I1AYNPCwyoxXA1fGTtmkKChsuWea7o8kytwU5xSejvh5-jiqu2SF4GEl0BEXIAPZsgbzoPIWNxgO4_RzNnWs6nJZeszcaDD0CyezVSuH9QcI6g5QFzAC_YuykSsaaFJhZ05DocBsLczShJ9Omf6PnK9xlm26I84xrEh_7x4fVmNBg3xWTLh8qOnHqGko93A1diLRCrKHOvnpvgQ\", \"n\": \"o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ\", \"q\": \"3T3DEtBUka7hLGdIsDlC96Uadx_q_E4Vb1cxx_4Ss_wGp1Loz3N3ZngGyInsKlmbBgLo1Ykd6T9TRvRNEWEtFSOcm2INIBoVoXk7W5RuPa8Cgq2tjQj9ziGQ08JMejrPlj3Q1wmALJr5VTfvSYBu0WkljhKNCy1KB6fCby0C9WE\", \"p\": \"vUqzWPZnDG4IXyo-k5F0bHV0BNL_pVhQoLW7eyFHnw74IOEfSbdsMspNcPSFIrtgPsn7981qv3lN_staZ6JflKfHayjB_lvltHyZxfl0dvruShZOx1N6ykEo7YrAskC_qxUyrIvqmJ64zPW3jkuOYrFs7Ykj3zFx3Zq1H5568G0\", \"kid\": \"BTZ9HA6K\", \"kty\": \"RSA\"}" + }, + "MODULESTORE": { + "default": { + "ENGINE": "xmodule.modulestore.mixed.MixedModuleStore", + "OPTIONS": { + "mappings": {}, + "stores": [ + { + "NAME": "draft", + "DOC_STORE_CONFIG": { + "collection": "modulestore", + "db": "test", + "host": [ + "localhost" + ], + "port": 27017 + }, + "ENGINE": "xmodule.modulestore.mongo.DraftMongoModuleStore", + "OPTIONS": { + "collection": "modulestore", + "db": "test", + "default_class": "xmodule.hidden_module.HiddenDescriptor", + "fs_root": "** OVERRIDDEN **", + "host": [ + "localhost" + ], + "port": 27017, + "render_template": "edxmako.shortcuts.render_to_string" + } + }, + { + "NAME": "xml", + "ENGINE": "xmodule.modulestore.xml.XMLModuleStore", + "OPTIONS": { + "data_dir": "** OVERRIDDEN **", + "default_class": "xmodule.hidden_module.HiddenDescriptor" + } + } + ] + } + } + }, + "SECRET_KEY": "", + "DJFS": { + "type": "s3fs", + "bucket": "test", + "prefix": "test", + "aws_access_key_id": "test", + "aws_secret_access_key": "test" + }, + "XQUEUE_INTERFACE": { + "basic_auth": [ + "edx", + "edx" + ], + "django_auth": { + "password": "password", + "username": "lms" + }, + "url": "** OVERRIDDEN **" + }, + "ZENDESK_API_KEY": "", + "ZENDESK_USER": "" +} diff --git a/lms/envs/bok_choy.env.json b/lms/envs/bok_choy.env.json new file mode 100644 index 0000000000..a2aed20071 --- /dev/null +++ b/lms/envs/bok_choy.env.json @@ -0,0 +1,148 @@ +{ + "ANALYTICS_DASHBOARD_URL": "", + "BUGS_EMAIL": "bugs@example.com", + "BULK_EMAIL_DEFAULT_FROM_EMAIL": "no-reply@example.com", + "CACHES": { + "celery": { + "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", + "KEY_FUNCTION": "util.memcache.safe_key", + "KEY_PREFIX": "integration_celery", + "LOCATION": [ + "localhost:11211" + ] + }, + "default": { + "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", + "KEY_FUNCTION": "util.memcache.safe_key", + "KEY_PREFIX": "sandbox_default", + "LOCATION": [ + "localhost:11211" + ] + }, + "general": { + "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", + "KEY_FUNCTION": "util.memcache.safe_key", + "KEY_PREFIX": "sandbox_general", + "LOCATION": [ + "localhost:11211" + ] + }, + "mongo_metadata_inheritance": { + "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", + "KEY_FUNCTION": "util.memcache.safe_key", + "KEY_PREFIX": "integration_mongo_metadata_inheritance", + "LOCATION": [ + "localhost:11211" + ] + }, + "staticfiles": { + "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", + "KEY_FUNCTION": "util.memcache.safe_key", + "KEY_PREFIX": "integration_static_files", + "LOCATION": [ + "localhost:11211" + ] + } + }, + "CELERY_BROKER_HOSTNAME": "localhost", + "CELERY_BROKER_TRANSPORT": "amqp", + "CERT_QUEUE": "certificates", + "CMS_BASE": "localhost:8031", + "CODE_JAIL": { + "limits": { + "REALTIME": 3, + "VMEM": 0 + } + }, + "COMMENTS_SERVICE_KEY": "password", + "COMMENTS_SERVICE_URL": "http://localhost:4567", + "CONTACT_EMAIL": "info@example.com", + "DEFAULT_FEEDBACK_EMAIL": "feedback@example.com", + "DEFAULT_FROM_EMAIL": "registration@example.com", + "EMAIL_BACKEND": "django.core.mail.backends.dummy.EmailBackend", + "SOCIAL_SHARING_SETTINGS": { + "CUSTOM_COURSE_URLS": true, + "DASHBOARD_FACEBOOK": true, + "CERTIFICATE_FACEBOOK": true, + "CERTIFICATE_FACEBOOK_TEXT": "Testing facebook feature:", + "DASHBOARD_TWITTER": true, + "DASHBOARD_TWITTER_TEXT": "Testing feature:" + }, + "FEATURES": { + "AUTH_USE_OPENID_PROVIDER": true, + "CERTIFICATES_HTML_VIEW": true, + "CERTIFICATES_INSTRUCTOR_GENERATION": true, + "ENABLE_PAYMENT_FAKE": true, + "ENABLE_VERIFIED_CERTIFICATES": true, + "ENABLE_DISCUSSION_SERVICE": true, + "ENABLE_GRADE_DOWNLOADS": true, + "ENABLE_THIRD_PARTY_AUTH": true, + "ENABLE_COMBINED_LOGIN_REGISTRATION": true, + "PREVIEW_LMS_BASE": "preview.localhost:8003", + "ALLOW_AUTOMATED_SIGNUPS": true, + "AUTOMATIC_AUTH_FOR_TESTING": true, + "RESTRICT_AUTOMATIC_AUTH": false, + "MODE_CREATION_FOR_TESTING": true, + "EXPOSE_CACHE_PROGRAMS_ENDPOINT": true, + "AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING": true, + "ENABLE_COURSE_DISCOVERY": true, + "ENABLE_SPECIAL_EXAMS": true, + "SHOW_HEADER_LANGUAGE_SELECTOR": true, + "CUSTOM_COURSES_EDX": true + }, + "FEEDBACK_SUBMISSION_EMAIL": "", + "GITHUB_REPO_ROOT": "** OVERRIDDEN **", + "LMS_BASE": "localhost:8003", + "LMS_ROOT_URL": "http://localhost:8003", + "LOCAL_LOGLEVEL": "INFO", + "LOGGING_ENV": "sandbox", + "LOG_DIR": "** OVERRIDDEN **", + "MEDIA_URL": "/media/", + "MKTG_URL_LINK_MAP": { + "ABOUT": "about", + "PRIVACY": "privacy", + "TOS": "tos", + "WHAT_IS_VERIFIED_CERT": "verified-certificate", + "COURSES": "courses", + "CONTACT": "contact", + "NEWS": "news", + "HONOR": "honor", + "CAREERS": "careers", + "HELP_CENTER": "help-center", + "BLOG": "blog", + "PRESS": "press", + "DONATE": "donate", + "ROOT": "root", + "SITEMAP.XML": "sitemap_xml" + }, + "REGISTRATION_EXTENSION_FORM": "openedx.core.djangoapps.user_api.tests.test_helpers.TestCaseForm", + "REGISTRATION_EXTRA_FIELDS": { + "level_of_education": "optional", + "gender": "optional", + "year_of_birth": "optional", + "mailing_address": "optional", + "goals": "optional", + "honor_code": "required", + "terms_of_service": "hidden", + "city": "hidden", + "country": "required" + }, + "SERVER_EMAIL": "devops@example.com", + "SESSION_COOKIE_DOMAIN": null, + "SITE_NAME": "localhost:8003", + "STATIC_URL_BASE": "/static/", + "SUPPORT_SITE_LINK": "https://support.example.com", + "PASSWORD_RESET_SUPPORT_LINK": "https://support.example.com/password-reset-help.html", + "ACTIVATION_EMAIL_SUPPORT_LINK": "https://support.example.com/activation-email-help.html", + "SYSLOG_SERVER": "", + "TECH_SUPPORT_EMAIL": "technical@example.com", + "THIRD_PARTY_AUTH_BACKENDS": [ + "social_core.backends.google.GoogleOAuth2", + "social_core.backends.linkedin.LinkedinOAuth2", + "social_core.backends.facebook.FacebookOAuth2", + "third_party_auth.dummy.DummyBackend", + "third_party_auth.saml.SAMLAuthBackend" + ], + "TIME_ZONE": "America/New_York", + "WIKI_ENABLED": true +} diff --git a/lms/envs/bok_choy.py b/lms/envs/bok_choy.py index d2593cc708..e49a9721ef 100644 --- a/lms/envs/bok_choy.py +++ b/lms/envs/bok_choy.py @@ -29,9 +29,6 @@ TEST_ROOT = CONFIG_ROOT.dirname().dirname() / "test_root" # and (b) that the files are the same in Jenkins as in local dev. os.environ['SERVICE_VARIANT'] = 'bok_choy_docker' if 'BOK_CHOY_HOSTNAME' in os.environ else 'bok_choy' os.environ['CONFIG_ROOT'] = CONFIG_ROOT -os.environ['LMS_CFG'] = str.format("{config_root}/{service_variant}.yml", - config_root=os.environ['CONFIG_ROOT'], service_variant=os.environ['SERVICE_VARIANT']) - from .production import * # pylint: disable=wildcard-import, unused-wildcard-import, wrong-import-position diff --git a/lms/envs/bok_choy.yml b/lms/envs/bok_choy.yml deleted file mode 100644 index 05ae4adb4a..0000000000 --- a/lms/envs/bok_choy.yml +++ /dev/null @@ -1,161 +0,0 @@ -# ingested edx-platform/lms/envs/bok_choy.auth.json -# ingested edx-platform/lms/envs/bok_choy.env.json -ACTIVATION_EMAIL_SUPPORT_LINK: https://support.example.com/activation-email-help.html -ANALYTICS_DASHBOARD_URL: '' -AWS_ACCESS_KEY_ID: '' -AWS_SECRET_ACCESS_KEY: '' -BUGS_EMAIL: bugs@example.com -BULK_EMAIL_DEFAULT_FROM_EMAIL: no-reply@example.com -CACHES: - celery: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: integration_celery - LOCATION: ['localhost:11211'] - default: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: sandbox_default - LOCATION: ['localhost:11211'] - general: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: sandbox_general - LOCATION: ['localhost:11211'] - mongo_metadata_inheritance: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: integration_mongo_metadata_inheritance - LOCATION: ['localhost:11211'] - staticfiles: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: integration_static_files - LOCATION: ['localhost:11211'] -CC_PROCESSOR: - CyberSource2: {ACCESS_KEY: abcd123, PROFILE_ID: edx, PURCHASE_ENDPOINT: /shoppingcart/payment_fake, - SECRET_KEY: abcd123} -CC_PROCESSOR_NAME: CyberSource2 -CELERY_BROKER_HOSTNAME: localhost -CELERY_BROKER_PASSWORD: celery -CELERY_BROKER_TRANSPORT: amqp -CELERY_BROKER_USER: celery -CERT_QUEUE: certificates -CMS_BASE: localhost:8031 -CODE_JAIL: - limits: {REALTIME: 3, VMEM: 0} -COMMENTS_SERVICE_KEY: password -COMMENTS_SERVICE_URL: http://localhost:4567 -CONTACT_EMAIL: info@example.com -CONTENTSTORE: - DOC_STORE_CONFIG: - collection: modulestore - db: test - host: [localhost] - port: 27017 - ENGINE: xmodule.contentstore.mongo.MongoContentStore - OPTIONS: - db: test - host: [localhost] - port: 27017 -DATABASES: - default: {ENGINE: django.db.backends.mysql, HOST: localhost, NAME: edxtest, PASSWORD: '', - PORT: '3306', USER: root} - student_module_history: {ENGINE: django.db.backends.mysql, HOST: localhost, NAME: student_module_history_test, - PASSWORD: '', PORT: '3306', USER: root} -DEFAULT_FEEDBACK_EMAIL: feedback@example.com -DEFAULT_FROM_EMAIL: registration@example.com -DJFS: {aws_access_key_id: test, aws_secret_access_key: test, bucket: test, prefix: test, - type: s3fs} -DOC_STORE_CONFIG: - collection: modulestore - db: test - host: [localhost] - port: 27017 -EMAIL_BACKEND: django.core.mail.backends.dummy.EmailBackend -EVENT_TRACKING_BACKENDS: - mongo: - ENGINE: eventtracking.backends.mongodb.MongoBackend - OPTIONS: {collection: events, database: test} -FEATURES: {ALLOW_AUTOMATED_SIGNUPS: true, AUTH_USE_OPENID_PROVIDER: true, AUTOMATIC_AUTH_FOR_TESTING: true, - AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING: true, CERTIFICATES_HTML_VIEW: true, - CERTIFICATES_INSTRUCTOR_GENERATION: true, CUSTOM_COURSES_EDX: true, ENABLE_COMBINED_LOGIN_REGISTRATION: true, - ENABLE_COURSE_DISCOVERY: true, ENABLE_DISCUSSION_SERVICE: true, ENABLE_GRADE_DOWNLOADS: true, - ENABLE_PAYMENT_FAKE: true, ENABLE_SPECIAL_EXAMS: true, ENABLE_THIRD_PARTY_AUTH: true, - ENABLE_VERIFIED_CERTIFICATES: true, EXPOSE_CACHE_PROGRAMS_ENDPOINT: true, MODE_CREATION_FOR_TESTING: true, - PREVIEW_LMS_BASE: 'preview.localhost:8003', RESTRICT_AUTOMATIC_AUTH: false, SHOW_HEADER_LANGUAGE_SELECTOR: true} -FEEDBACK_SUBMISSION_EMAIL: '' -GITHUB_REPO_ROOT: '** OVERRIDDEN **' -JWT_AUTH: {JWT_PRIVATE_SIGNING_JWK: '{"e": "AQAB", "d": "HIiV7KNjcdhVbpn3KT-I9n3JPf5YbGXsCIedmPqDH1d4QhBofuAqZ9zebQuxkRUpmqtYMv0Zi6ECSUqH387GYQF_XvFUFcjQRPycISd8TH0DAKaDpGr-AYNshnKiEtQpINhcP44I1AYNPCwyoxXA1fGTtmkKChsuWea7o8kytwU5xSejvh5-jiqu2SF4GEl0BEXIAPZsgbzoPIWNxgO4_RzNnWs6nJZeszcaDD0CyezVSuH9QcI6g5QFzAC_YuykSsaaFJhZ05DocBsLczShJ9Omf6PnK9xlm26I84xrEh_7x4fVmNBg3xWTLh8qOnHqGko93A1diLRCrKHOvnpvgQ", - "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ", - "q": "3T3DEtBUka7hLGdIsDlC96Uadx_q_E4Vb1cxx_4Ss_wGp1Loz3N3ZngGyInsKlmbBgLo1Ykd6T9TRvRNEWEtFSOcm2INIBoVoXk7W5RuPa8Cgq2tjQj9ziGQ08JMejrPlj3Q1wmALJr5VTfvSYBu0WkljhKNCy1KB6fCby0C9WE", - "p": "vUqzWPZnDG4IXyo-k5F0bHV0BNL_pVhQoLW7eyFHnw74IOEfSbdsMspNcPSFIrtgPsn7981qv3lN_staZ6JflKfHayjB_lvltHyZxfl0dvruShZOx1N6ykEo7YrAskC_qxUyrIvqmJ64zPW3jkuOYrFs7Ykj3zFx3Zq1H5568G0", - "kid": "BTZ9HA6K", "kty": "RSA"}', JWT_PUBLIC_SIGNING_JWK_SET: '{"keys": [{"kid": - "BTZ9HA6K", "e": "AQAB", "kty": "RSA", "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ"}]}', - JWT_SECRET_KEY: super-secret-key} -LMS_BASE: localhost:8003 -LMS_ROOT_URL: http://localhost:8003 -LOCAL_LOGLEVEL: INFO -LOGGING_ENV: sandbox -LOG_DIR: '** OVERRIDDEN **' -MEDIA_URL: /media/ -MKTG_URL_LINK_MAP: {ABOUT: about, BLOG: blog, CAREERS: careers, CONTACT: contact, - COURSES: courses, DONATE: donate, HELP_CENTER: help-center, HONOR: honor, NEWS: news, - PRESS: press, PRIVACY: privacy, ROOT: root, SITEMAP.XML: sitemap_xml, TOS: tos, - WHAT_IS_VERIFIED_CERT: verified-certificate} -MODULESTORE: - default: - ENGINE: xmodule.modulestore.mixed.MixedModuleStore - OPTIONS: - mappings: {} - stores: - - DOC_STORE_CONFIG: - collection: modulestore - db: test - host: [localhost] - port: 27017 - ENGINE: xmodule.modulestore.mongo.DraftMongoModuleStore - NAME: draft - OPTIONS: - collection: modulestore - db: test - default_class: xmodule.hidden_module.HiddenDescriptor - fs_root: '** OVERRIDDEN **' - host: [localhost] - port: 27017 - render_template: edxmako.shortcuts.render_to_string - - ENGINE: xmodule.modulestore.xml.XMLModuleStore - NAME: xml - OPTIONS: {data_dir: '** OVERRIDDEN **', default_class: xmodule.hidden_module.HiddenDescriptor} -PASSWORD_RESET_SUPPORT_LINK: https://support.example.com/password-reset-help.html -REGISTRATION_EXTENSION_FORM: openedx.core.djangoapps.user_api.tests.test_helpers.TestCaseForm -REGISTRATION_EXTRA_FIELDS: {city: hidden, country: required, gender: optional, goals: optional, - honor_code: required, level_of_education: optional, mailing_address: optional, terms_of_service: hidden, - year_of_birth: optional} -SECRET_KEY: '' -SERVER_EMAIL: devops@example.com -SESSION_COOKIE_DOMAIN: null -SITE_NAME: localhost:8003 -SOCIAL_SHARING_SETTINGS: {CERTIFICATE_FACEBOOK: true, CERTIFICATE_FACEBOOK_TEXT: 'Testing - facebook feature:', CUSTOM_COURSE_URLS: true, DASHBOARD_FACEBOOK: true, DASHBOARD_TWITTER: true, - DASHBOARD_TWITTER_TEXT: 'Testing feature:'} -STATIC_URL_BASE: /static/ -SUPPORT_SITE_LINK: https://support.example.com -SYSLOG_SERVER: '' -TECH_SUPPORT_EMAIL: technical@example.com -THIRD_PARTY_AUTH_BACKENDS: [social_core.backends.google.GoogleOAuth2, social_core.backends.linkedin.LinkedinOAuth2, - social_core.backends.facebook.FacebookOAuth2, third_party_auth.dummy.DummyBackend, - third_party_auth.saml.SAMLAuthBackend] -TIME_ZONE: America/New_York -TRACKING_BACKENDS: - mongo: - ENGINE: track.backends.mongodb.MongoBackend - OPTIONS: {collection: events, database: test} -WIKI_ENABLED: true -XQUEUE_INTERFACE: - basic_auth: [edx, edx] - django_auth: {password: password, username: lms} - url: '** OVERRIDDEN **' -ZENDESK_API_KEY: '' -ZENDESK_USER: '' - diff --git a/lms/envs/bok_choy_docker.auth.json b/lms/envs/bok_choy_docker.auth.json new file mode 100644 index 0000000000..767c404496 --- /dev/null +++ b/lms/envs/bok_choy_docker.auth.json @@ -0,0 +1,152 @@ +{ + "AWS_ACCESS_KEY_ID": "", + "AWS_SECRET_ACCESS_KEY": "", + "CC_PROCESSOR_NAME": "CyberSource2", + "CC_PROCESSOR": { + "CyberSource2": { + "SECRET_KEY": "abcd123", + "ACCESS_KEY": "abcd123", + "PROFILE_ID": "edx", + "PURCHASE_ENDPOINT": "/shoppingcart/payment_fake" + } + }, + "CELERY_BROKER_PASSWORD": "celery", + "CELERY_BROKER_USER": "celery", + "CONTENTSTORE": { + "DOC_STORE_CONFIG": { + "collection": "modulestore", + "db": "test", + "host": [ + "edx.devstack.mongo" + ], + "port": 27017 + }, + "ENGINE": "xmodule.contentstore.mongo.MongoContentStore", + "OPTIONS": { + "db": "test", + "host": [ + "edx.devstack.mongo" + ], + "port": 27017 + } + }, + "DATABASES": { + "default": { + "ENGINE": "django.db.backends.mysql", + "HOST": "edx.devstack.mysql", + "NAME": "edxtest", + "PASSWORD": "", + "PORT": "3306", + "USER": "root" + }, + "student_module_history": { + "ENGINE": "django.db.backends.mysql", + "HOST": "edx.devstack.mysql", + "NAME": "student_module_history_test", + "PASSWORD": "", + "PORT": "3306", + "USER": "root" + } + }, + "DOC_STORE_CONFIG": { + "collection": "modulestore", + "db": "test", + "host": [ + "edx.devstack.mongo" + ], + "port": 27017 + }, + "TRACKING_BACKENDS": { + "mongo": { + "ENGINE": "track.backends.mongodb.MongoBackend", + "OPTIONS": { + "database": "test", + "collection": "events", + "host": [ + "edx.devstack.mongo" + ], + "port": 27017 + } + } + }, + "EVENT_TRACKING_BACKENDS": { + "mongo": { + "ENGINE": "eventtracking.backends.mongodb.MongoBackend", + "OPTIONS": { + "database": "test", + "collection": "events", + "host": [ + "edx.devstack.mongo" + ], + "port": 27017 + } + } + }, + "JWT_AUTH": { + "JWT_SECRET_KEY": "super-secret-key", + "JWT_PUBLIC_SIGNING_JWK_SET": "{\"keys\": [{\"kid\": \"BTZ9HA6K\", \"e\": \"AQAB\", \"kty\": \"RSA\", \"n\": \"o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ\"}]}", + "JWT_PRIVATE_SIGNING_JWK": "{\"e\": \"AQAB\", \"d\": \"HIiV7KNjcdhVbpn3KT-I9n3JPf5YbGXsCIedmPqDH1d4QhBofuAqZ9zebQuxkRUpmqtYMv0Zi6ECSUqH387GYQF_XvFUFcjQRPycISd8TH0DAKaDpGr-AYNshnKiEtQpINhcP44I1AYNPCwyoxXA1fGTtmkKChsuWea7o8kytwU5xSejvh5-jiqu2SF4GEl0BEXIAPZsgbzoPIWNxgO4_RzNnWs6nJZeszcaDD0CyezVSuH9QcI6g5QFzAC_YuykSsaaFJhZ05DocBsLczShJ9Omf6PnK9xlm26I84xrEh_7x4fVmNBg3xWTLh8qOnHqGko93A1diLRCrKHOvnpvgQ\", \"n\": \"o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ\", \"q\": \"3T3DEtBUka7hLGdIsDlC96Uadx_q_E4Vb1cxx_4Ss_wGp1Loz3N3ZngGyInsKlmbBgLo1Ykd6T9TRvRNEWEtFSOcm2INIBoVoXk7W5RuPa8Cgq2tjQj9ziGQ08JMejrPlj3Q1wmALJr5VTfvSYBu0WkljhKNCy1KB6fCby0C9WE\", \"p\": \"vUqzWPZnDG4IXyo-k5F0bHV0BNL_pVhQoLW7eyFHnw74IOEfSbdsMspNcPSFIrtgPsn7981qv3lN_staZ6JflKfHayjB_lvltHyZxfl0dvruShZOx1N6ykEo7YrAskC_qxUyrIvqmJ64zPW3jkuOYrFs7Ykj3zFx3Zq1H5568G0\", \"kid\": \"BTZ9HA6K\", \"kty\": \"RSA\"}" + }, + "MODULESTORE": { + "default": { + "ENGINE": "xmodule.modulestore.mixed.MixedModuleStore", + "OPTIONS": { + "mappings": {}, + "stores": [ + { + "NAME": "draft", + "DOC_STORE_CONFIG": { + "collection": "modulestore", + "db": "test", + "host": [ + "edx.devstack.mongo" + ], + "port": 27017 + }, + "ENGINE": "xmodule.modulestore.mongo.DraftMongoModuleStore", + "OPTIONS": { + "collection": "modulestore", + "db": "test", + "default_class": "xmodule.hidden_module.HiddenDescriptor", + "fs_root": "** OVERRIDDEN **", + "host": [ + "edx.devstack.mongo" + ], + "port": 27017, + "render_template": "edxmako.shortcuts.render_to_string" + } + }, + { + "NAME": "xml", + "ENGINE": "xmodule.modulestore.xml.XMLModuleStore", + "OPTIONS": { + "data_dir": "** OVERRIDDEN **", + "default_class": "xmodule.hidden_module.HiddenDescriptor" + } + } + ] + } + } + }, + "SECRET_KEY": "", + "DJFS": { + "type": "s3fs", + "bucket": "test", + "prefix": "test", + "aws_access_key_id": "test", + "aws_secret_access_key": "test" + }, + "XQUEUE_INTERFACE": { + "basic_auth": [ + "edx", + "edx" + ], + "django_auth": { + "password": "password", + "username": "lms" + }, + "url": "** OVERRIDDEN **" + }, + "ZENDESK_API_KEY": "", + "ZENDESK_USER": "" +} diff --git a/lms/envs/bok_choy_docker.env.json b/lms/envs/bok_choy_docker.env.json new file mode 100644 index 0000000000..8f68509bf0 --- /dev/null +++ b/lms/envs/bok_choy_docker.env.json @@ -0,0 +1,148 @@ +{ + "ANALYTICS_DASHBOARD_URL": "", + "BUGS_EMAIL": "bugs@example.com", + "BULK_EMAIL_DEFAULT_FROM_EMAIL": "no-reply@example.com", + "CACHES": { + "celery": { + "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", + "KEY_FUNCTION": "util.memcache.safe_key", + "KEY_PREFIX": "integration_celery", + "LOCATION": [ + "edx.devstack.memcached:11211" + ] + }, + "default": { + "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", + "KEY_FUNCTION": "util.memcache.safe_key", + "KEY_PREFIX": "sandbox_default", + "LOCATION": [ + "edx.devstack.memcached:11211" + ] + }, + "general": { + "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", + "KEY_FUNCTION": "util.memcache.safe_key", + "KEY_PREFIX": "sandbox_general", + "LOCATION": [ + "edx.devstack.memcached:11211" + ] + }, + "mongo_metadata_inheritance": { + "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", + "KEY_FUNCTION": "util.memcache.safe_key", + "KEY_PREFIX": "integration_mongo_metadata_inheritance", + "LOCATION": [ + "edx.devstack.memcached:11211" + ] + }, + "staticfiles": { + "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", + "KEY_FUNCTION": "util.memcache.safe_key", + "KEY_PREFIX": "integration_static_files", + "LOCATION": [ + "edx.devstack.memcached:11211" + ] + } + }, + "CELERY_BROKER_HOSTNAME": "localhost", + "CELERY_BROKER_TRANSPORT": "amqp", + "CERT_QUEUE": "certificates", + "CMS_BASE": "** OVERRIDDEN **", + "CODE_JAIL": { + "limits": { + "REALTIME": 3, + "VMEM": 0 + } + }, + "COMMENTS_SERVICE_KEY": "password", + "COMMENTS_SERVICE_URL": "http://edx.devstack.lms:4567", + "CONTACT_EMAIL": "info@example.com", + "DEFAULT_FEEDBACK_EMAIL": "feedback@example.com", + "DEFAULT_FROM_EMAIL": "registration@example.com", + "EMAIL_BACKEND": "django.core.mail.backends.dummy.EmailBackend", + "SOCIAL_SHARING_SETTINGS": { + "CUSTOM_COURSE_URLS": true, + "DASHBOARD_FACEBOOK": true, + "CERTIFICATE_FACEBOOK": true, + "CERTIFICATE_FACEBOOK_TEXT": "Testing facebook feature:", + "DASHBOARD_TWITTER": true, + "DASHBOARD_TWITTER_TEXT": "Testing feature:" + }, + "FEATURES": { + "AUTH_USE_OPENID_PROVIDER": true, + "CERTIFICATES_HTML_VIEW": true, + "CERTIFICATES_INSTRUCTOR_GENERATION": true, + "ENABLE_PAYMENT_FAKE": true, + "ENABLE_VERIFIED_CERTIFICATES": true, + "ENABLE_DISCUSSION_SERVICE": true, + "ENABLE_GRADE_DOWNLOADS": true, + "ENABLE_THIRD_PARTY_AUTH": true, + "ENABLE_COMBINED_LOGIN_REGISTRATION": true, + "PREVIEW_LMS_BASE": "preview.localhost:8003", + "ALLOW_AUTOMATED_SIGNUPS": true, + "AUTOMATIC_AUTH_FOR_TESTING": true, + "RESTRICT_AUTOMATIC_AUTH": false, + "MODE_CREATION_FOR_TESTING": true, + "EXPOSE_CACHE_PROGRAMS_ENDPOINT": true, + "AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING": true, + "ENABLE_COURSE_DISCOVERY": true, + "ENABLE_SPECIAL_EXAMS": true, + "SHOW_HEADER_LANGUAGE_SELECTOR": true, + "CUSTOM_COURSES_EDX": true + }, + "FEEDBACK_SUBMISSION_EMAIL": "", + "GITHUB_REPO_ROOT": "** OVERRIDDEN **", + "LMS_BASE": "http://edx.devstack.lms:18003", + "LMS_ROOT_URL": "http://edx.devstack.lms:18003", + "LOCAL_LOGLEVEL": "INFO", + "LOGGING_ENV": "sandbox", + "LOG_DIR": "** OVERRIDDEN **", + "MEDIA_URL": "/media/", + "MKTG_URL_LINK_MAP": { + "ABOUT": "about", + "PRIVACY": "privacy", + "TOS": "tos", + "WHAT_IS_VERIFIED_CERT": "verified-certificate", + "COURSES": "courses", + "CONTACT": "contact", + "NEWS": "news", + "HONOR": "honor", + "CAREERS": "careers", + "HELP_CENTER": "help-center", + "BLOG": "blog", + "PRESS": "press", + "DONATE": "donate", + "ROOT": "root", + "SITEMAP.XML": "sitemap_xml" + }, + "REGISTRATION_EXTENSION_FORM": "openedx.core.djangoapps.user_api.tests.test_helpers.TestCaseForm", + "REGISTRATION_EXTRA_FIELDS": { + "level_of_education": "optional", + "gender": "optional", + "year_of_birth": "optional", + "mailing_address": "optional", + "goals": "optional", + "honor_code": "required", + "terms_of_service": "hidden", + "city": "hidden", + "country": "required" + }, + "SERVER_EMAIL": "devops@example.com", + "SESSION_COOKIE_DOMAIN": null, + "SITE_NAME": "localhost:8003", + "STATIC_URL_BASE": "/static/", + "SUPPORT_SITE_LINK": "https://support.example.com", + "PASSWORD_RESET_SUPPORT_LINK": "https://support.example.com/password-reset-help.html", + "ACTIVATION_EMAIL_SUPPORT_LINK": "https://support.example.com/activation-email-help.html", + "SYSLOG_SERVER": "", + "TECH_SUPPORT_EMAIL": "technical@example.com", + "THIRD_PARTY_AUTH_BACKENDS": [ + "social_core.backends.google.GoogleOAuth2", + "social_core.backends.linkedin.LinkedinOAuth2", + "social_core.backends.facebook.FacebookOAuth2", + "third_party_auth.dummy.DummyBackend", + "third_party_auth.saml.SAMLAuthBackend" + ], + "TIME_ZONE": "America/New_York", + "WIKI_ENABLED": true +} diff --git a/lms/envs/bok_choy_docker.yml b/lms/envs/bok_choy_docker.yml deleted file mode 100644 index be8b4eb3ec..0000000000 --- a/lms/envs/bok_choy_docker.yml +++ /dev/null @@ -1,169 +0,0 @@ -# ingested edx-platform/lms/envs/bok_choy_docker.auth.json -# ingested edx-platform/lms/envs/bok_choy_docker.env.json -ACTIVATION_EMAIL_SUPPORT_LINK: https://support.example.com/activation-email-help.html -ANALYTICS_DASHBOARD_URL: '' -AWS_ACCESS_KEY_ID: '' -AWS_SECRET_ACCESS_KEY: '' -BUGS_EMAIL: bugs@example.com -BULK_EMAIL_DEFAULT_FROM_EMAIL: no-reply@example.com -CACHES: - celery: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: integration_celery - LOCATION: ['edx.devstack.memcached:11211'] - default: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: sandbox_default - LOCATION: ['edx.devstack.memcached:11211'] - general: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: sandbox_general - LOCATION: ['edx.devstack.memcached:11211'] - mongo_metadata_inheritance: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: integration_mongo_metadata_inheritance - LOCATION: ['edx.devstack.memcached:11211'] - staticfiles: - BACKEND: django.core.cache.backends.memcached.MemcachedCache - KEY_FUNCTION: util.memcache.safe_key - KEY_PREFIX: integration_static_files - LOCATION: ['edx.devstack.memcached:11211'] -CC_PROCESSOR: - CyberSource2: {ACCESS_KEY: abcd123, PROFILE_ID: edx, PURCHASE_ENDPOINT: /shoppingcart/payment_fake, - SECRET_KEY: abcd123} -CC_PROCESSOR_NAME: CyberSource2 -CELERY_BROKER_HOSTNAME: localhost -CELERY_BROKER_PASSWORD: celery -CELERY_BROKER_TRANSPORT: amqp -CELERY_BROKER_USER: celery -CERT_QUEUE: certificates -CMS_BASE: '** OVERRIDDEN **' -CODE_JAIL: - limits: {REALTIME: 3, VMEM: 0} -COMMENTS_SERVICE_KEY: password -COMMENTS_SERVICE_URL: http://edx.devstack.lms:4567 -CONTACT_EMAIL: info@example.com -CONTENTSTORE: - DOC_STORE_CONFIG: - collection: modulestore - db: test - host: [edx.devstack.mongo] - port: 27017 - ENGINE: xmodule.contentstore.mongo.MongoContentStore - OPTIONS: - db: test - host: [edx.devstack.mongo] - port: 27017 -DATABASES: - default: {ENGINE: django.db.backends.mysql, HOST: edx.devstack.mysql, NAME: edxtest, - PASSWORD: '', PORT: '3306', USER: root} - student_module_history: {ENGINE: django.db.backends.mysql, HOST: edx.devstack.mysql, - NAME: student_module_history_test, PASSWORD: '', PORT: '3306', USER: root} -DEFAULT_FEEDBACK_EMAIL: feedback@example.com -DEFAULT_FROM_EMAIL: registration@example.com -DJFS: {aws_access_key_id: test, aws_secret_access_key: test, bucket: test, prefix: test, - type: s3fs} -DOC_STORE_CONFIG: - collection: modulestore - db: test - host: [edx.devstack.mongo] - port: 27017 -EMAIL_BACKEND: django.core.mail.backends.dummy.EmailBackend -EVENT_TRACKING_BACKENDS: - mongo: - ENGINE: eventtracking.backends.mongodb.MongoBackend - OPTIONS: - collection: events - database: test - host: [edx.devstack.mongo] - port: 27017 -FEATURES: {ALLOW_AUTOMATED_SIGNUPS: true, AUTH_USE_OPENID_PROVIDER: true, AUTOMATIC_AUTH_FOR_TESTING: true, - AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING: true, CERTIFICATES_HTML_VIEW: true, - CERTIFICATES_INSTRUCTOR_GENERATION: true, CUSTOM_COURSES_EDX: true, ENABLE_COMBINED_LOGIN_REGISTRATION: true, - ENABLE_COURSE_DISCOVERY: true, ENABLE_DISCUSSION_SERVICE: true, ENABLE_GRADE_DOWNLOADS: true, - ENABLE_PAYMENT_FAKE: true, ENABLE_SPECIAL_EXAMS: true, ENABLE_THIRD_PARTY_AUTH: true, - ENABLE_VERIFIED_CERTIFICATES: true, EXPOSE_CACHE_PROGRAMS_ENDPOINT: true, MODE_CREATION_FOR_TESTING: true, - PREVIEW_LMS_BASE: 'preview.localhost:8003', RESTRICT_AUTOMATIC_AUTH: false, SHOW_HEADER_LANGUAGE_SELECTOR: true} -FEEDBACK_SUBMISSION_EMAIL: '' -GITHUB_REPO_ROOT: '** OVERRIDDEN **' -JWT_AUTH: {JWT_PRIVATE_SIGNING_JWK: '{"e": "AQAB", "d": "HIiV7KNjcdhVbpn3KT-I9n3JPf5YbGXsCIedmPqDH1d4QhBofuAqZ9zebQuxkRUpmqtYMv0Zi6ECSUqH387GYQF_XvFUFcjQRPycISd8TH0DAKaDpGr-AYNshnKiEtQpINhcP44I1AYNPCwyoxXA1fGTtmkKChsuWea7o8kytwU5xSejvh5-jiqu2SF4GEl0BEXIAPZsgbzoPIWNxgO4_RzNnWs6nJZeszcaDD0CyezVSuH9QcI6g5QFzAC_YuykSsaaFJhZ05DocBsLczShJ9Omf6PnK9xlm26I84xrEh_7x4fVmNBg3xWTLh8qOnHqGko93A1diLRCrKHOvnpvgQ", - "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ", - "q": "3T3DEtBUka7hLGdIsDlC96Uadx_q_E4Vb1cxx_4Ss_wGp1Loz3N3ZngGyInsKlmbBgLo1Ykd6T9TRvRNEWEtFSOcm2INIBoVoXk7W5RuPa8Cgq2tjQj9ziGQ08JMejrPlj3Q1wmALJr5VTfvSYBu0WkljhKNCy1KB6fCby0C9WE", - "p": "vUqzWPZnDG4IXyo-k5F0bHV0BNL_pVhQoLW7eyFHnw74IOEfSbdsMspNcPSFIrtgPsn7981qv3lN_staZ6JflKfHayjB_lvltHyZxfl0dvruShZOx1N6ykEo7YrAskC_qxUyrIvqmJ64zPW3jkuOYrFs7Ykj3zFx3Zq1H5568G0", - "kid": "BTZ9HA6K", "kty": "RSA"}', JWT_PUBLIC_SIGNING_JWK_SET: '{"keys": [{"kid": - "BTZ9HA6K", "e": "AQAB", "kty": "RSA", "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ"}]}', - JWT_SECRET_KEY: super-secret-key} -LMS_BASE: http://edx.devstack.lms:18003 -LMS_ROOT_URL: http://edx.devstack.lms:18003 -LOCAL_LOGLEVEL: INFO -LOGGING_ENV: sandbox -LOG_DIR: '** OVERRIDDEN **' -MEDIA_URL: /media/ -MKTG_URL_LINK_MAP: {ABOUT: about, BLOG: blog, CAREERS: careers, CONTACT: contact, - COURSES: courses, DONATE: donate, HELP_CENTER: help-center, HONOR: honor, NEWS: news, - PRESS: press, PRIVACY: privacy, ROOT: root, SITEMAP.XML: sitemap_xml, TOS: tos, - WHAT_IS_VERIFIED_CERT: verified-certificate} -MODULESTORE: - default: - ENGINE: xmodule.modulestore.mixed.MixedModuleStore - OPTIONS: - mappings: {} - stores: - - DOC_STORE_CONFIG: - collection: modulestore - db: test - host: [edx.devstack.mongo] - port: 27017 - ENGINE: xmodule.modulestore.mongo.DraftMongoModuleStore - NAME: draft - OPTIONS: - collection: modulestore - db: test - default_class: xmodule.hidden_module.HiddenDescriptor - fs_root: '** OVERRIDDEN **' - host: [edx.devstack.mongo] - port: 27017 - render_template: edxmako.shortcuts.render_to_string - - ENGINE: xmodule.modulestore.xml.XMLModuleStore - NAME: xml - OPTIONS: {data_dir: '** OVERRIDDEN **', default_class: xmodule.hidden_module.HiddenDescriptor} -PASSWORD_RESET_SUPPORT_LINK: https://support.example.com/password-reset-help.html -REGISTRATION_EXTENSION_FORM: openedx.core.djangoapps.user_api.tests.test_helpers.TestCaseForm -REGISTRATION_EXTRA_FIELDS: {city: hidden, country: required, gender: optional, goals: optional, - honor_code: required, level_of_education: optional, mailing_address: optional, terms_of_service: hidden, - year_of_birth: optional} -SECRET_KEY: '' -SERVER_EMAIL: devops@example.com -SESSION_COOKIE_DOMAIN: null -SITE_NAME: localhost:8003 -SOCIAL_SHARING_SETTINGS: {CERTIFICATE_FACEBOOK: true, CERTIFICATE_FACEBOOK_TEXT: 'Testing - facebook feature:', CUSTOM_COURSE_URLS: true, DASHBOARD_FACEBOOK: true, DASHBOARD_TWITTER: true, - DASHBOARD_TWITTER_TEXT: 'Testing feature:'} -STATIC_URL_BASE: /static/ -SUPPORT_SITE_LINK: https://support.example.com -SYSLOG_SERVER: '' -TECH_SUPPORT_EMAIL: technical@example.com -THIRD_PARTY_AUTH_BACKENDS: [social_core.backends.google.GoogleOAuth2, social_core.backends.linkedin.LinkedinOAuth2, - social_core.backends.facebook.FacebookOAuth2, third_party_auth.dummy.DummyBackend, - third_party_auth.saml.SAMLAuthBackend] -TIME_ZONE: America/New_York -TRACKING_BACKENDS: - mongo: - ENGINE: track.backends.mongodb.MongoBackend - OPTIONS: - collection: events - database: test - host: [edx.devstack.mongo] - port: 27017 -WIKI_ENABLED: true -XQUEUE_INTERFACE: - basic_auth: [edx, edx] - django_auth: {password: password, username: lms} - url: '** OVERRIDDEN **' -ZENDESK_API_KEY: '' -ZENDESK_USER: '' - diff --git a/lms/envs/production.py b/lms/envs/production.py index 7d76784029..cc128c0f14 100644 --- a/lms/envs/production.py +++ b/lms/envs/production.py @@ -17,9 +17,8 @@ Common traits: # and throws spurious errors. Therefore, we disable invalid-name checking. # pylint: disable=invalid-name -import codecs import datetime -import yaml +import json import os import dateutil @@ -27,33 +26,11 @@ import dateutil from corsheaders.defaults import default_headers as corsheaders_default_headers from path import Path as path from xmodule.modulestore.modulestore_settings import convert_module_store_setting_if_needed -from openedx.core.djangoapps.plugins import plugin_settings, constants as plugin_constants -from django.core.exceptions import ImproperlyConfigured from .common import * from openedx.core.lib.derived import derive_settings # pylint: disable=wrong-import-order from openedx.core.lib.logsettings import get_logger_config # pylint: disable=wrong-import-order - -def get_env_setting(setting): - """ Get the environment setting or return exception """ - try: - return os.environ[setting] - except KeyError: - error_msg = u"Set the %s env variable" % setting - raise ImproperlyConfigured(error_msg) - -# A file path to a YAML file from which to load all the configuration for the edx platform -CONFIG_FILE = get_env_setting('LMS_CFG') - -with codecs.open(CONFIG_FILE, encoding='utf-8') as f: - __config__ = yaml.safe_load(f) - - # ENV_TOKENS and AUTH_TOKENS are included for reverse compatability. - # Removing them may break plugins that rely on them. - ENV_TOKENS = __config__ - AUTH_TOKENS = __config__ - # SERVICE_VARIANT specifies name of the variant used, which decides what JSON # configuration files are read during startup. SERVICE_VARIANT = os.environ.get('SERVICE_VARIANT', None) @@ -123,6 +100,12 @@ CELERY_QUEUES = { CELERY_ROUTES = "{}celery.Router".format(QUEUE_VARIANT) CELERYBEAT_SCHEDULE = {} # For scheduling tasks, entries can be added to this dict +########################## NON-SECURE ENV CONFIG ############################## +# Things like server locations, ports, etc. + +with open(CONFIG_ROOT / CONFIG_PREFIX + "env.json") as env_file: + ENV_TOKENS = json.load(env_file) + # STATIC_ROOT specifies the directory where static files are # collected STATIC_ROOT_BASE = ENV_TOKENS.get('STATIC_ROOT_BASE', None) @@ -495,6 +478,12 @@ if FEATURES.get('ENABLE_CORS_HEADERS') or FEATURES.get('ENABLE_CROSS_DOMAIN_CSRF # 'courseware.student_field_overrides.IndividualStudentOverrideProvider'. FIELD_OVERRIDE_PROVIDERS = tuple(ENV_TOKENS.get('FIELD_OVERRIDE_PROVIDERS', [])) +############################## SECURE AUTH ITEMS ############### +# Secret things: passwords, access keys, etc. + +with open(CONFIG_ROOT / CONFIG_PREFIX + "auth.json") as auth_file: + AUTH_TOKENS = json.load(auth_file) + ############### XBlock filesystem field config ########## if 'DJFS' in AUTH_TOKENS and AUTH_TOKENS['DJFS'] is not None: DJFS = AUTH_TOKENS['DJFS'] @@ -1120,14 +1109,8 @@ PROFILE_MICROFRONTEND_URL = ENV_TOKENS.get('PROFILE_MICROFRONTEND_URL', PROFILE_ ############################### Plugin Settings ############################### # This is at the bottom because it is going to load more settings after base settings are loaded - -# Load aws.py in plugins for reverse compatibility. This can be removed after aws.py -# is officially removed. -plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.LMS, - plugin_constants.SettingsType.AWS) - -# Load production.py in plugins -plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.LMS, plugin_constants.SettingsType.PRODUCTION) +from openedx.core.djangoapps.plugins import plugin_settings, constants as plugin_constants # pylint: disable=wrong-import-order, wrong-import-position +plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.LMS, plugin_constants.SettingsType.AWS) ########################## Derive Any Derived Settings ####################### diff --git a/openedx/core/djangoapps/plugins/README.rst b/openedx/core/djangoapps/plugins/README.rst index 2f2bad94c3..1b68ef7bc7 100644 --- a/openedx/core/djangoapps/plugins/README.rst +++ b/openedx/core/djangoapps/plugins/README.rst @@ -144,7 +144,7 @@ class:: ProjectType.LMS: { # Configure each Settings Type, as needed. - SettingsType.PRODUCTION: { + SettingsType.AWS: { # The python path (relative to this app) to the settings module for the relevant Project Type and Settings Type. # Optional; Defaults to u'settings'. diff --git a/openedx/core/djangoapps/plugins/constants.py b/openedx/core/djangoapps/plugins/constants.py index ea4671acac..e9acdb370c 100644 --- a/openedx/core/djangoapps/plugins/constants.py +++ b/openedx/core/djangoapps/plugins/constants.py @@ -29,8 +29,7 @@ class SettingsType(object): See https://github.com/edx/edx-platform/master/lms/envs/docs/README.rst for further information on each Settings Type. """ - AWS = u'aws' # aws.py has been deprecated. See https://openedx.atlassian.net/browse/DEPR-14 - PRODUCTION = u'production' + AWS = u'aws' COMMON = u'common' DEVSTACK = u'devstack' TEST = u'test' diff --git a/openedx/core/djangoapps/zendesk_proxy/settings/aws.py b/openedx/core/djangoapps/zendesk_proxy/settings/aws.py index 08701a4620..93635bfbe3 100644 --- a/openedx/core/djangoapps/zendesk_proxy/settings/aws.py +++ b/openedx/core/djangoapps/zendesk_proxy/settings/aws.py @@ -1,4 +1,4 @@ -""" AWS settings for zendesk proxy.""" +""" Production settings for zendesk proxy.""" def plugin_settings(settings): diff --git a/openedx/features/journals/settings/aws.py b/openedx/features/journals/settings/aws.py index dcb0a38f8e..db5debfe37 100644 --- a/openedx/features/journals/settings/aws.py +++ b/openedx/features/journals/settings/aws.py @@ -3,7 +3,7 @@ def plugin_settings(settings): """ - Settings for AWS + Settings for AWS/Production """ settings.JOURNALS_URL_ROOT = settings.ENV_TOKENS.get('JOURNALS_URL_ROOT', settings.JOURNALS_URL_ROOT) settings.JOURNALS_FRONTEND_URL = settings.ENV_TOKENS.get('JOURNALS_FRONTEND_URL', settings.JOURNALS_FRONTEND_URL)