Merge pull request #19912 from edx/coryleeio/revert_yaml_config_pr
Reverting because workers are not functioning because they do not source the application environment. Will fix this separately and then try again.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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: ''
|
||||
|
||||
@@ -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: ''
|
||||
|
||||
@@ -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 #######################
|
||||
|
||||
|
||||
144
lms/envs/bok_choy.auth.json
Normal file
144
lms/envs/bok_choy.auth.json
Normal file
@@ -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": ""
|
||||
}
|
||||
148
lms/envs/bok_choy.env.json
Normal file
148
lms/envs/bok_choy.env.json
Normal file
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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: ''
|
||||
|
||||
152
lms/envs/bok_choy_docker.auth.json
Normal file
152
lms/envs/bok_choy_docker.auth.json
Normal file
@@ -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": ""
|
||||
}
|
||||
148
lms/envs/bok_choy_docker.env.json
Normal file
148
lms/envs/bok_choy_docker.env.json
Normal file
@@ -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
|
||||
}
|
||||
@@ -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: ''
|
||||
|
||||
@@ -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 #######################
|
||||
|
||||
|
||||
@@ -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'.
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
""" AWS settings for zendesk proxy."""
|
||||
""" Production settings for zendesk proxy."""
|
||||
|
||||
|
||||
def plugin_settings(settings):
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user