From 993a21181a309ae04e305949c78f9d001716927f Mon Sep 17 00:00:00 2001 From: nadeemshahzad <nshahzad@edx.org> Date: Tue, 25 Jun 2019 13:01:29 +0000 Subject: [PATCH] defaults to common.py --- cms/envs/test.py | 3 + lms/envs/bok_choy.py | 1 + lms/envs/common.py | 421 +++++++++++++++++++++++++++++++++++-------- lms/envs/test.py | 28 +++ 4 files changed, 376 insertions(+), 77 deletions(-) diff --git a/cms/envs/test.py b/cms/envs/test.py index 6b64990c9f7..3b3fb27207d 100644 --- a/cms/envs/test.py +++ b/cms/envs/test.py @@ -33,6 +33,7 @@ from lms.envs.test import ( MEDIA_ROOT, MEDIA_URL, COMPREHENSIVE_THEME_DIRS, + ENABLE_COMPREHENSIVE_THEMING, JWT_AUTH, REGISTRATION_EXTRA_FIELDS, ECOMMERCE_API_URL, @@ -357,3 +358,5 @@ derive_settings(__name__) ############### Settings for edx-rbac ############### SYSTEM_WIDE_ROLE_CLASSES = os.environ.get("SYSTEM_WIDE_ROLE_CLASSES", []) + +DEFAULT_MOBILE_AVAILABLE = True diff --git a/lms/envs/bok_choy.py b/lms/envs/bok_choy.py index 55b2dc7776e..2cf34aea64c 100644 --- a/lms/envs/bok_choy.py +++ b/lms/envs/bok_choy.py @@ -144,6 +144,7 @@ FEATURES['MILESTONES_APP'] = True # Enable oauth authentication, which we test. FEATURES['ENABLE_OAUTH2_PROVIDER'] = True +OAUTH_ENFORCE_SECURE = False # Enable pre-requisite course FEATURES['ENABLE_PREREQUISITE_COURSES'] = True diff --git a/lms/envs/common.py b/lms/envs/common.py index f4815f3c50c..75f83d21c5b 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -26,7 +26,7 @@ Longer TODO: # Pylint gets confused by path.py instances, which report themselves as class # objects. As a result, pylint applies the wrong regex in validating names, # and throws spurious errors. Therefore, we disable invalid-name checking. -# pylint: disable=invalid-name +# pylint: disable=invalid-name, wrong-import-position import imp import sys @@ -63,9 +63,10 @@ CC_MERCHANT_NAME = PLATFORM_NAME PLATFORM_FACEBOOK_ACCOUNT = "http://www.facebook.com/YourPlatformFacebookAccount" PLATFORM_TWITTER_ACCOUNT = "@YourPlatformTwitterAccount" + ENABLE_JASMINE = False -LMS_ROOT_URL = "http://localhost:8000" +LMS_ROOT_URL = 'https://localhost:18000' LMS_INTERNAL_ROOT_URL = LMS_ROOT_URL LMS_ENROLLMENT_API_PATH = "/api/enrollment/v1/" @@ -441,6 +442,14 @@ GENERATE_PROFILE_SCORES = False # Used with XQueue XQUEUE_WAITTIME_BETWEEN_REQUESTS = 5 # seconds +XQUEUE_INTERFACE = { + 'url': 'http://localhost:18040', + 'basic_auth': ['edx', 'edx'], + 'django_auth': { + 'username': 'lms', + 'password': 'password' + } +} # Used with Email sending RETRY_ACTIVATION_EMAIL_MAX_ATTEMPTS = 5 @@ -453,7 +462,7 @@ PASSWORD_RESET_EMAIL_RATE_LIMIT = { COURSE_MESSAGE_ALERT_DURATION_IN_DAYS = 14 ############################# SET PATH INFORMATION ############################# -PROJECT_ROOT = path(__file__).abspath().dirname().dirname() # /edx-platform/lms +PROJECT_ROOT = path(__file__).abspath().dirname().dirname() # /edx-platform/lms pylint: disable=no-value-for-parameter REPO_ROOT = PROJECT_ROOT.dirname() COMMON_ROOT = REPO_ROOT / "common" OPENEDX_ROOT = REPO_ROOT / "openedx" @@ -489,6 +498,57 @@ DATABASE_ROUTERS = [ 'openedx.core.lib.django_courseware_routers.StudentModuleHistoryExtendedRouter', ] +############################ Cache Configuration ############################### + +CACHES = { + 'course_structure_cache': { + 'KEY_PREFIX': 'course_structure', + 'KEY_FUNCTION': 'util.memcache.safe_key', + 'LOCATION': ['localhost:11211'], + 'TIMEOUT': '7200', + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + }, + 'celery': { + 'KEY_PREFIX': 'celery', + 'KEY_FUNCTION': 'util.memcache.safe_key', + 'LOCATION': ['localhost:11211'], + 'TIMEOUT': '7200', + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + }, + 'mongo_metadata_inheritance': { + 'KEY_PREFIX': 'mongo_metadata_inheritance', + 'KEY_FUNCTION': 'util.memcache.safe_key', + 'LOCATION': ['localhost:11211'], + 'TIMEOUT': 300, + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + }, + 'staticfiles': { + 'KEY_FUNCTION': 'util.memcache.safe_key', + 'LOCATION': ['localhost:11211'], + 'KEY_PREFIX': 'staticfiles_general', + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + }, + 'default': { + 'VERSION': '1', + 'KEY_FUNCTION': 'util.memcache.safe_key', + 'LOCATION': ['localhost:11211'], + 'KEY_PREFIX': 'default', + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + }, + 'configuration': { + 'KEY_FUNCTION': 'util.memcache.safe_key', + 'LOCATION': ['localhost:11211'], + 'KEY_PREFIX': 'configuration', + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + }, + 'general': { + 'KEY_FUNCTION': 'util.memcache.safe_key', + 'LOCATION': ['localhost:11211'], + 'KEY_PREFIX': 'general', + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + }, +} + ############################ OpenID Provider ################################## OPENID_PROVIDER_TRUSTED_ROOTS = ['cs50.net', '*.cs50.net'] @@ -496,7 +556,7 @@ OPENID_PROVIDER_TRUSTED_ROOTS = ['cs50.net', '*.cs50.net'] # OpenID Connect issuer ID. Normally the URL of the authentication endpoint. -OAUTH_OIDC_ISSUER = 'https:/example.com/oauth2' +OAUTH_OIDC_ISSUER = 'http://127.0.0.1:8000/oauth2' # OpenID Connect claim handlers @@ -551,6 +611,9 @@ OAUTH2_PROVIDER_APPLICATION_MODEL = 'oauth2_provider.Application' # Automatically clean up edx-django-oauth2-provider tokens on use OAUTH_DELETE_EXPIRED = True OAUTH_ID_TOKEN_EXPIRATION = 60 * 60 +OAUTH_ENFORCE_SECURE = True +OAUTH_EXPIRE_CONFIDENTIAL_CLIENT_DAYS = 365 +OAUTH_EXPIRE_PUBLIC_CLIENT_DAYS = 30 ################################## THIRD_PARTY_AUTH CONFIGURATION ############################# TPA_PROVIDER_BURST_THROTTLE = '10/min' @@ -558,7 +621,7 @@ TPA_PROVIDER_SUSTAINED_THROTTLE = '50/hr' ################################## TEMPLATE CONFIGURATION ##################################### # Mako templating -import tempfile +import tempfile # pylint: disable=wrong-import-order MAKO_MODULE_DIR = os.path.join(tempfile.gettempdir(), 'mako_lms') MAKO_TEMPLATE_DIRS_BASE = [ PROJECT_ROOT / 'templates', @@ -699,16 +762,58 @@ DATA_UPLOAD_MAX_NUMBER_FIELDS = None STATIC_GRAB = False DEV_CONTENT = True +# License for serving content in China +ICP_LICENSE = None +ICP_LICENSE_INFO = {} + +ELASTIC_SEARCH_CONFIG = [ + { + 'use_ssl': False, + 'host': 'localhost', + 'port': 9200 + } +] + +VIDEO_CDN_URL = { + 'EXAMPLE_COUNTRY_CODE': "http://example.com/edx/video?s3_url=" +} + +STATIC_ROOT_BASE = '/edx/var/edxapp/staticfiles' + +LOGGING_ENV = 'sandbox' + EDX_ROOT_URL = '' LOGIN_REDIRECT_URL = EDX_ROOT_URL + '/login' LOGIN_URL = EDX_ROOT_URL + '/login' +PARTNER_SUPPORT_EMAIL = '' + +CERT_QUEUE = 'certificates' + +ALTERNATE_WORKER_QUEUES = 'cms' + +LOCAL_LOGLEVEL = "INFO" + +LOG_DIR = '/edx/var/log/edx' + +DATA_DIR = '/edx/app/edxapp' + +MAINTENANCE_BANNER_TEXT = 'Sample banner message' + +GIT_REPO_DIR = '/edx/var/edxapp/course_repos' + +DJFS = { + 'type': 'osfs', + 'directory_root': '/edx/app/edxapp/django-pyfs/static/django-pyfs', + 'url_root': '/static/django-pyfs', +} + ### Dark code. Should be enabled in local settings for devel. ENABLE_MULTICOURSE = False # set to False to disable multicourse display (see lib.util.views.edXhome) -WIKI_ENABLED = False +WIKI_ENABLED = True ### @@ -817,6 +922,7 @@ EVENT_TRACKING_BACKENDS = { } } EVENT_TRACKING_PROCESSORS = [] +EVENT_TRACKING_SEGMENTIO_EMIT_WHITELIST = [] # Backwards compatibility with ENABLE_SQL_TRACKING_LOGS feature flag. # In the future, adding the backend to TRACKING_BACKENDS should be enough. @@ -842,11 +948,11 @@ TRACKING_SEGMENTIO_SOURCE_MAP = { ######################## GOOGLE ANALYTICS ########################### GOOGLE_ANALYTICS_ACCOUNT = None -GOOGLE_SITE_VERIFICATION_ID = None +GOOGLE_SITE_VERIFICATION_ID = '' GOOGLE_ANALYTICS_LINKEDIN = 'GOOGLE_ANALYTICS_LINKEDIN_DUMMY' ######################## BRANCH.IO ########################### -BRANCH_IO_KEY = None +BRANCH_IO_KEY = '' ######################## OPTIMIZELY ########################### OPTIMIZELY_PROJECT_ID = None @@ -872,10 +978,14 @@ XBLOCK_SELECT_FUNCTION = prefer_xmodules # Paths to wrapper methods which should be applied to every XBlock's FieldData. XBLOCK_FIELD_DATA_WRAPPERS = () +XBLOCK_FS_STORAGE_BUCKET = None +XBLOCK_FS_STORAGE_PREFIX = None +XBLOCK_SETTINGS = {} + ############# ModuleStore Configuration ########## MODULESTORE_BRANCH = 'published-only' -CONTENTSTORE = None + DOC_STORE_CONFIG = { 'host': 'localhost', 'db': 'xmodule', @@ -884,6 +994,23 @@ DOC_STORE_CONFIG = { # as the collection name for asset metadata. # Otherwise, a default collection name will be used. } + +CONTENTSTORE = { + 'ENGINE': 'xmodule.contentstore.mongo.MongoContentStore', + # connection strings are duplicated temporarily for + # backward compatibility + 'OPTIONS': { + 'db': 'edxapp', + 'host': 'localhost', + 'password': 'edxapp', + 'port': 27017, + 'user': 'edxapp', + 'ssl': False + }, + 'ADDITIONAL_OPTIONS': {}, + 'DOC_STORE_CONFIG': DOC_STORE_CONFIG +} + MODULESTORE = { 'default': { 'ENGINE': 'xmodule.modulestore.mixed.MixedModuleStore', @@ -915,11 +1042,48 @@ MODULESTORE = { } } +DATABASES = { + # edxapp's edxapp-migrate scripts and the edxapp_migrate play + # will ensure that any DB not named read_replica will be migrated + # for both the lms and cms. + 'default': { + 'ATOMIC_REQUESTS': True, + 'CONN_MAX_AGE': 0, + 'ENGINE': 'django.db.backends.mysql', + 'HOST': 'localhost', + 'NAME': 'edxapp', + 'OPTIONS': {}, + 'PASSWORD': 'password', + 'PORT': '3306', + 'USER': 'edxapp001' + }, + 'read_replica': { + 'CONN_MAX_AGE': 0, + 'ENGINE': 'django.db.backends.mysql', + 'HOST': 'localhost', + 'NAME': 'dxapp', + 'OPTIONS': {}, + 'PASSWORD': 'password', + 'PORT': '3306', + 'USER': 'edxapp001' + }, + 'student_module_history': { + 'CONN_MAX_AGE': 0, + 'ENGINE': 'django.db.backends.mysql', + 'HOST': 'localhost', + 'NAME': 'edxapp_csmh', + 'OPTIONS': {}, + 'PASSWORD': 'password', + 'PORT': '3306', + 'USER': 'edxapp' + } +} + #################### Python sandbox ############################################ CODE_JAIL = { - # Path to a sandboxed Python executable. None means don't bother. - 'python_bin': None, + # from https://github.com/edx/codejail/blob/master/codejail/django_integration.py#L24, '' should be same as None + 'python_bin': '/edx/app/edxapp/venvs/edxapp-sandbox/bin/python', # User to run as in the sandbox. 'user': 'sandbox', @@ -927,6 +1091,12 @@ CODE_JAIL = { 'limits': { # How many CPU seconds can jailed code use? 'CPU': 1, + # Limit the memory of the jailed process to something high but not + # infinite (512MiB in bytes) + 'VMEM': 536870912, + # Time in seconds that the jailed process has to run. + 'REALTIME': 3, + 'PROXY': 0, }, } @@ -947,18 +1117,32 @@ USE_TZ = True SESSION_COOKIE_SECURE = False SESSION_SAVE_EVERY_REQUEST = False SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer' +SESSION_COOKIE_DOMAIN = "" +SESSION_COOKIE_NAME = 'sessionid' # CMS base -CMS_BASE = 'localhost:8001' +CMS_BASE = 'localhost:18010' + +# LMS base +LMS_BASE = 'localhost:18000' + +# Studio name +STUDIO_NAME = 'Studio' +STUDIO_SHORT_NAME = 'Studio' # Site info -SITE_NAME = "example.com" +SITE_NAME = "localhost" HTTPS = 'on' ROOT_URLCONF = 'lms.urls' # NOTE: Please set ALLOWED_HOSTS to some sane value, as we do not allow the default '*' # Platform Email -EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +EMAIL_HOST = 'localhost' +EMAIL_PORT = 25 +EMAIL_USE_TLS = False +EMAIL_HOST_USER = '' +EMAIL_HOST_PASSWORD = '' DEFAULT_FROM_EMAIL = 'registration@example.com' DEFAULT_FEEDBACK_EMAIL = 'feedback@example.com' SERVER_EMAIL = 'devops@example.com' @@ -970,7 +1154,7 @@ PRESS_EMAIL = 'press@example.com' FINANCE_EMAIL = '' # Platform mailing address -CONTACT_MAILING_ADDRESS = '' +CONTACT_MAILING_ADDRESS = 'SET-ME-PLEASE' # Account activation email sender address ACTIVATION_EMAIL_FROM_ADDRESS = '' @@ -981,6 +1165,7 @@ MANAGERS = ADMINS # Static content STATIC_URL = '/static/' STATIC_ROOT = ENV_ROOT / "staticfiles" +STATIC_URL_BASE = '/static/' STATICFILES_DIRS = [ COMMON_ROOT / "static", @@ -991,6 +1176,10 @@ STATICFILES_DIRS = [ FAVICON_PATH = 'images/favicon.ico' DEFAULT_COURSE_ABOUT_IMAGE_URL = 'images/pencils.jpg' +CAS_SERVER_URL = "" +CAS_EXTRA_LOGIN_PARAMS = "" +CAS_ATTRIBUTE_CALLBACK = "" + # User-uploaded content MEDIA_ROOT = '/edx/var/edxapp/media/' MEDIA_URL = '/media/' @@ -1102,7 +1291,7 @@ STATICI18N_OUTPUT_DIR = "js/i18n" # Localization strings (e.g. django.po) are under these directories -def _make_locale_paths(settings): +def _make_locale_paths(settings): # pylint: disable=missing-docstring locale_paths = [settings.REPO_ROOT + '/conf/locale'] # edx-platform/conf/locale/ if settings.ENABLE_COMPREHENSIVE_THEMING: # Add locale paths to settings for comprehensive theming. @@ -1125,6 +1314,8 @@ TRANSLATORS_GUIDE = 'https://edx.readthedocs.org/projects/edx-developer-guide/en # years). This is only used if DEFAULT_FILE_STORAGE is overriden to use S3 # in the global settings.py AWS_QUERYSTRING_EXPIRE = 10 * 365 * 24 * 60 * 60 # 10 years +AWS_SES_REGION_NAME = 'us-east-1' +AWS_SES_REGION_ENDPOINT = 'email.us-east-1.amazonaws.com' ################################# SIMPLEWIKI ################################### SIMPLE_WIKI_REQUIRE_LOGIN_EDIT = True @@ -1151,16 +1342,17 @@ WIKI_LINK_DEFAULT_LEVEL = 2 FEEDBACK_SUBMISSION_EMAIL = None ##### Zendesk ##### -ZENDESK_URL = None -ZENDESK_USER = None -ZENDESK_API_KEY = None +ZENDESK_URL = '' +ZENDESK_USER = '' +ZENDESK_API_KEY = '' ZENDESK_CUSTOM_FIELDS = {} +ZENDESK_OAUTH_ACCESS_TOKEN = '' ##### EMBARGO ##### EMBARGO_SITE_REDIRECT_URL = None ##### shoppingcart Payment ##### -PAYMENT_SUPPORT_EMAIL = 'payment@example.com' +PAYMENT_SUPPORT_EMAIL = 'billing@example.com' ##### Using cybersource by default ##### @@ -1844,7 +2036,7 @@ REQUIRE_JS_PATH_OVERRIDES = { 'js/student_account/logistration_factory': 'js/student_account/logistration_factory.js', 'js/courseware/courseware_factory': 'js/courseware/courseware_factory.js', 'js/groups/views/cohorts_dashboard_factory': 'js/groups/views/cohorts_dashboard_factory.js', - 'js/groups/discussions_management/discussions_dashboard_factory': 'js/discussions_management/views/discussions_dashboard_factory.js', + 'js/groups/discussions_management/discussions_dashboard_factory': 'js/discussions_management/views/discussions_dashboard_factory.js', # pylint: disable=line-too-long 'draggabilly': 'js/vendor/draggabilly.js', 'hls': 'common/js/vendor/hls.js' } @@ -1916,15 +2108,25 @@ CELERY_CREATE_MISSING_QUEUES = True CELERY_DEFAULT_QUEUE = DEFAULT_PRIORITY_QUEUE CELERY_DEFAULT_ROUTING_KEY = DEFAULT_PRIORITY_QUEUE -CELERY_QUEUES = { - HIGH_PRIORITY_QUEUE: {}, - DEFAULT_PRIORITY_QUEUE: {}, - HIGH_MEM_QUEUE: {}, -} +CELERY_QUEUES = [ + 'edx.lms.core.default', + 'edx.lms.core.high', + 'edx.lms.core.high_mem' +] # let logging work as configured: CELERYD_HIJACK_ROOT_LOGGER = False +CELERY_BROKER_VHOST = '' +CELERY_BROKER_USE_SSL = False +CELERY_EVENT_QUEUE_TTL = None + +CELERY_BROKER_TRANSPORT = 'amqp' +CELERY_BROKER_HOSTNAME = 'localhost' +CELERY_BROKER_USER = 'celery' +CELERY_BROKER_PASSWORD = 'celery' +CELERY_TIMEZONE = 'UTC' + ################################ Block Structures ################################### BLOCK_STRUCTURES_SETTINGS = dict( @@ -1952,7 +2154,7 @@ BLOCK_STRUCTURES_SETTINGS = dict( BULK_EMAIL_DEFAULT_FROM_EMAIL = 'no-reply@example.com' # Parameters for breaking down course enrollment into subtasks. -BULK_EMAIL_EMAILS_PER_TASK = 100 +BULK_EMAIL_EMAILS_PER_TASK = 500 # Initial delay used for retrying tasks. Additional retries use # longer delays. Value is in seconds. @@ -2017,7 +2219,7 @@ YOUTUBE = { 'IMAGE_API': 'http://img.youtube.com/vi/{youtube_id}/0.jpg', # /maxresdefault.jpg for 1920*1080 } -YOUTUBE_API_KEY = None +YOUTUBE_API_KEY = 'PUT_YOUR_API_KEY_HERE' ################################### APPS ###################################### @@ -2315,6 +2517,8 @@ CSRF_COOKIE_AGE = 60 * 60 * 24 * 7 * 52 # end users CSRF_COOKIE_SECURE = False CSRF_TRUSTED_ORIGINS = [] +CROSS_DOMAIN_CSRF_COOKIE_DOMAIN = '' +CROSS_DOMAIN_CSRF_COOKIE_NAME = '' ######################### Django Rest Framework ######################## @@ -2339,23 +2543,7 @@ EDXMKTG_USER_INFO_COOKIE_NAME = 'edx-user-info' EDXMKTG_USER_INFO_COOKIE_VERSION = 1 MKTG_URLS = {} -MKTG_URL_LINK_MAP = { - 'ABOUT': 'about', - 'CONTACT': 'contact', - 'FAQ': 'help', - 'COURSES': 'courses', - 'ROOT': 'root', - 'TOS': 'tos', - 'HONOR': 'honor', # If your site does not have an honor code, simply delete this line. - 'PRIVACY': 'privacy', - 'PRESS': 'press', - 'BLOG': 'blog', - 'DONATE': 'donate', - 'SITEMAP.XML': 'sitemap_xml', - - # Verified Certificates - 'WHAT_IS_VERIFIED_CERT': 'verified-certificate', -} +MKTG_URL_LINK_MAP = {} STATIC_TEMPLATE_VIEW_DEFAULT_FILE_EXTENSION = 'html' @@ -2473,10 +2661,7 @@ SOCIAL_MEDIA_FOOTER_DISPLAY = { ################# Mobile URLS ########################## # These are URLs to the app store for mobile. -MOBILE_STORE_URLS = { - 'apple': '#', - 'google': '#' -} +MOBILE_STORE_URLS = {} ################# Student Verification ################# VERIFY_STUDENT = { @@ -2513,12 +2698,14 @@ if FEATURES.get('ENABLE_CORS_HEADERS'): 'use-jwt-cookie', ) +CORS_ORIGIN_WHITELIST = [] +CORS_ORIGIN_ALLOW_ALL = False # Default cache expiration for the cross-domain proxy HTML page. # This is a static page that can be iframed into an external page # to simulate cross-domain requests. XDOMAIN_PROXY_CACHE_TIMEOUT = 60 * 15 -LOGIN_REDIRECT_WHITELIST = [CMS_BASE] +LOGIN_REDIRECT_WHITELIST = [] ###################### Registration ################################## @@ -2587,17 +2774,24 @@ BADGR_TIMEOUT = 10 # the ones that contain information other than grades. GRADES_DOWNLOAD_ROUTING_KEY = HIGH_MEM_QUEUE +POLICY_CHANGE_GRADES_ROUTING_KEY = 'edx.lms.core.default' + +RECALCULATE_GRADES_ROUTING_KEY = 'edx.lms.core.default' + GRADES_DOWNLOAD = { - 'STORAGE_TYPE': 'localfs', - 'BUCKET': 'edx-grades', - 'ROOT_PATH': '/tmp/edx-s3/grades', + 'STORAGE_CLASS': 'django.core.files.storage.FileSystemStorage', + 'STORAGE_KWARGS': { + 'location': '/tmp/edx-s3/grades', + }, + 'STORAGE_TYPE': None, + 'BUCKET': None, + 'ROOT_PATH': None, } FINANCIAL_REPORTS = { 'STORAGE_TYPE': 'localfs', - 'BUCKET': 'edx-financial-reports', - 'CUSTOM_DOMAIN': 'edx-financial-reports.s3.amazonaws.com', - 'ROOT_PATH': '/tmp/edx-s3/financial_reports', + 'BUCKET': None, + 'ROOT_PATH': 'sandbox', } #### Grading policy change-related settings ##### @@ -2623,13 +2817,17 @@ AUTH_PASSWORD_VALIDATORS = [ }, ] +PASSWORD_POLICY_COMPLIANCE_ROLLOUT_CONFIG = { + 'ENFORCE_COMPLIANCE_ON_LOGIN': False +} + ############################ ORA 2 ############################################ # By default, don't use a file prefix ORA2_FILE_PREFIX = None # Default File Upload Storage bucket and prefix. Used by the FileUpload Service. -FILE_UPLOAD_STORAGE_BUCKET_NAME = 'edxuploads' +FILE_UPLOAD_STORAGE_BUCKET_NAME = 'SET-ME-PLEASE (ex. bucket-name)' FILE_UPLOAD_STORAGE_PREFIX = 'submissions_attachments' ##### ACCOUNT LOCKOUT DEFAULT PARAMETERS ##### @@ -2656,6 +2854,8 @@ VIDEO_IMAGE_SETTINGS = dict( DIRECTORY_PREFIX='video-images/', ) +VIDEO_IMAGE_MAX_AGE = 31536000 + ########################## VIDEO TRANSCRIPTS STORAGE ############################ VIDEO_TRANSCRIPTS_SETTINGS = dict( @@ -2670,6 +2870,7 @@ VIDEO_TRANSCRIPTS_SETTINGS = dict( DIRECTORY_PREFIX='video-transcripts/', ) +VIDEO_TRANSCRIPTS_MAX_AGE = 31536000 # Source: # http://loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt according to http://en.wikipedia.org/wiki/ISO_639-1 @@ -2923,6 +3124,8 @@ OPENID_DOMAIN_PREFIX = 'openid:' ### Analytics API ANALYTICS_API_KEY = "" ANALYTICS_API_URL = "http://localhost:18100" +ANALYTICS_DASHBOARD_URL = 'http://localhost:18110/courses' +ANALYTICS_DASHBOARD_NAME = 'Your Platform Name Here Insights' # REGISTRATION CODES DISPLAY INFORMATION SUBTITUTIONS IN THE INVOICE ATTACHMENT INVOICE_CORP_ADDRESS = "Please place your corporate address\nin this configuration" @@ -2945,7 +3148,7 @@ COURSE_CATALOG_VISIBILITY_PERMISSION = 'see_exists' COURSE_ABOUT_VISIBILITY_PERMISSION = 'see_exists' DEFAULT_COURSE_VISIBILITY_IN_CATALOG = "both" -DEFAULT_MOBILE_AVAILABLE = True +DEFAULT_MOBILE_AVAILABLE = False # Enrollment API Cache Timeout ENROLLMENT_COURSE_DETAILS_CACHE_TIMEOUT = 60 @@ -2954,12 +3157,12 @@ ENROLLMENT_COURSE_DETAILS_CACHE_TIMEOUT = 60 NOTES_DISABLED_TABS = ['course_structure', 'tags'] # Configuration used for generating PDF Receipts/Invoices -PDF_RECEIPT_TAX_ID = 'add here' -PDF_RECEIPT_FOOTER_TEXT = 'add your own specific footer text here' -PDF_RECEIPT_DISCLAIMER_TEXT = 'add your own specific disclaimer text here' -PDF_RECEIPT_BILLING_ADDRESS = 'add your own billing address here with appropriate line feed characters' -PDF_RECEIPT_TERMS_AND_CONDITIONS = 'add your own terms and conditions' -PDF_RECEIPT_TAX_ID_LABEL = 'Tax ID' +PDF_RECEIPT_TAX_ID = '00-0000000' +PDF_RECEIPT_FOOTER_TEXT = 'Enter your receipt footer text here.' +PDF_RECEIPT_DISCLAIMER_TEXT = 'ENTER YOUR RECEIPT DISCLAIMER TEXT HERE.' +PDF_RECEIPT_BILLING_ADDRESS = 'Enter your receipt terms and conditions here.' +PDF_RECEIPT_TERMS_AND_CONDITIONS = 'Enter your receipt terms and conditions here.' +PDF_RECEIPT_TAX_ID_LABEL = 'fake Tax ID' PDF_RECEIPT_LOGO_PATH = PROJECT_ROOT + '/static/images/openedx-logo-tag.png' # Height of the Logo in mm PDF_RECEIPT_LOGO_HEIGHT_MM = 12 @@ -3058,16 +3261,23 @@ SOCIAL_PLATFORMS = { } # E-Commerce API Configuration -ECOMMERCE_PUBLIC_URL_ROOT = None -ECOMMERCE_API_URL = None +ECOMMERCE_PUBLIC_URL_ROOT = 'http://localhost:8002' +ECOMMERCE_API_URL = 'http://localhost:8002/api/v2' ECOMMERCE_API_TIMEOUT = 5 ECOMMERCE_SERVICE_WORKER_USERNAME = 'ecommerce_worker' +ECOMMERCE_API_SIGNING_KEY = 'SET-ME-PLEASE' -COURSE_CATALOG_API_URL = None +COURSE_CATALOG_API_URL = 'http://localhost:8008/api/v1' -CREDENTIALS_INTERNAL_SERVICE_URL = None +CREDENTIALS_INTERNAL_SERVICE_URL = 'http://localhost:8005' CREDENTIALS_PUBLIC_SERVICE_URL = None +JOURNALS_URL_ROOT = 'https://journals-localhost:18000' +JOURNALS_API_URL = 'https://journals-localhost:18000/api/v1/' + +COMMENTS_SERVICE_URL = 'http://localhost:18080' +COMMENTS_SERVICE_KEY = 'password' + # Reverification checkpoint name pattern CHECKPOINT_PATTERN = r'(?P<checkpoint_name>[^/]+)' @@ -3141,7 +3351,7 @@ CREDIT_PROVIDER_SECRET_KEYS = {} CREDIT_PROVIDER_TIMESTAMP_EXPIRATION = 15 * 60 # The Help link to the FAQ page about the credit -CREDIT_HELP_LINK_URL = "#" +CREDIT_HELP_LINK_URL = "/" # Default domain for the e-mail address associated with users who are created # via the LTI Provider feature. Note that the generated e-mail addresses are @@ -3217,6 +3427,9 @@ MICROSITE_TEMPLATE_BACKEND = 'microsite_configuration.backends.filebased.Filebas # TTL for microsite database template cache MICROSITE_DATABASE_TEMPLATE_CACHE_TTL = 5 * 60 +MICROSITE_ROOT_DIR = '/edx/app/edxapp/edx-microsite' +MICROSITE_CONFIGURATION = {} + ################################ Settings for rss_proxy ################################ RSS_PROXY_CACHE_TIMEOUT = 3600 # The length of time we cache RSS retrieved from remote URLs in seconds @@ -3280,7 +3493,7 @@ PROGRAM_CERTIFICATES_ROUTING_KEY = DEFAULT_PRIORITY_QUEUE SITE_ID = 1 # dir containing all themes -COMPREHENSIVE_THEME_DIRS = [REPO_ROOT / "themes"] +COMPREHENSIVE_THEME_DIRS = [] # Theme directory locale paths COMPREHENSIVE_THEME_LOCALE_PATHS = [] @@ -3289,7 +3502,7 @@ COMPREHENSIVE_THEME_LOCALE_PATHS = [] # set to None if you want to use openedx theme DEFAULT_SITE_THEME = None -ENABLE_COMPREHENSIVE_THEMING = True +ENABLE_COMPREHENSIVE_THEMING = False # API access management API_ACCESS_MANAGER_EMAIL = 'api-access@example.com' @@ -3298,7 +3511,7 @@ API_DOCUMENTATION_URL = 'https://course-catalog-api-guide.readthedocs.io/en/late AUTH_DOCUMENTATION_URL = 'https://course-catalog-api-guide.readthedocs.io/en/latest/authentication/index.html' # Affiliate cookie tracking -AFFILIATE_COOKIE_NAME = 'affiliate_id' +AFFILIATE_COOKIE_NAME = 'dev_affiliate_id' ############## Settings for RedirectMiddleware ############### @@ -3333,13 +3546,14 @@ ENTERPRISE_SUPPORT_URL = '' # The default value of this needs to be a 16 character string ENTERPRISE_REPORTING_SECRET = '0000000000000000' ENTERPRISE_CUSTOMER_CATALOG_DEFAULT_CONTENT_FILTER = {} +ENTERPRISE_CUSTOMER_SUCCESS_EMAIL = "customersuccess@edx.org" ############## ENTERPRISE SERVICE API CLIENT CONFIGURATION ###################### # The LMS communicates with the Enterprise service via the EdxRestApiClient class # These default settings are utilized by the LMS when interacting with the service, # and are overridden by the configuration parameter accessors defined in production.py -ENTERPRISE_API_URL = LMS_INTERNAL_ROOT_URL + '/enterprise/api/v1/' +ENTERPRISE_API_URL = 'https://localhost:18000/enterprise/api/v1' ENTERPRISE_CONSENT_API_URL = LMS_INTERNAL_ROOT_URL + '/consent/api/v1/' ENTERPRISE_SERVICE_WORKER_USERNAME = 'enterprise_worker' ENTERPRISE_API_CACHE_TIMEOUT = 3600 # Value is in seconds @@ -3387,6 +3601,7 @@ SYSTEM_TO_FEATURE_ROLE_MAPPING = { DATA_CONSENT_SHARE_CACHE_TIMEOUT = 8 * 60 * 60 # 8 hours ENTERPRISE_MARKETING_FOOTER_QUERY_PARAMS = {} +ENTERPRISE_TAGLINE = '' ############## Settings for Course Enrollment Modes ###################### # The min_price key refers to the minimum price allowed for an instance @@ -3452,7 +3667,7 @@ COURSEGRAPH_JOB_QUEUE = DEFAULT_PRIORITY_QUEUE # Initialize to 'unknown', but read from JSON in production.py -EDX_PLATFORM_REVISION = 'unknown' +EDX_PLATFORM_REVISION = 'release' ############## Settings for Completion API ######################### @@ -3512,9 +3727,36 @@ USERNAME_REPLACEMENT_WORKER = "REPLACE WITH VALID USERNAME" # modify lms/envs/private.py to give it a non-null value WRITABLE_GRADEBOOK_URL = None -PROFILE_MICROFRONTEND_URL = "http://profile-mfe/abc/" -ORDER_HISTORY_MICROFRONTEND_URL = "http://order-history-mfe/" -ACCOUNT_MICROFRONTEND_URL = "http://account-mfe/" +PROFILE_MICROFRONTEND_URL = None +ORDER_HISTORY_MICROFRONTEND_URL = None +ACCOUNT_MICROFRONTEND_URL = None +PROGRAM_MANAGER_MICROFRONTEND_URL = None + +############### Settings for the ace_common plugin ################# +ACE_ENABLED_CHANNELS = ['django_email'] +ACE_ENABLED_POLICIES = ['bulk_email_optout'] +ACE_CHANNEL_SAILTHRU_DEBUG = True +ACE_CHANNEL_SAILTHRU_TEMPLATE_NAME = None +ACE_ROUTING_KEY = 'edx.lms.core.default' +ACE_CHANNEL_DEFAULT_EMAIL = 'django_email' +ACE_CHANNEL_TRANSACTIONAL_EMAIL = 'django_email' + +############### Settings swift ##################################### +SWIFT_USERNAME = None +SWIFT_KEY = None +SWIFT_TENANT_ID = None +SWIFT_TENANT_NAME = None +SWIFT_AUTH_URL = None +SWIFT_AUTH_VERSION = None +SWIFT_REGION_NAME = None +SWIFT_USE_TEMP_URLS = None +SWIFT_TEMP_URL_KEY = None +SWIFT_TEMP_URL_DURATION = 1800 # seconds + +############### Settings for facebook ############################## +FACEBOOK_APP_ID = 'FACEBOOK_APP_ID' +FACEBOOK_APP_SECRET = 'FACEBOOK_APP_SECRET' +FACEBOOK_API_VERSION = 'v2.1' ############### Settings for django-fernet-fields ################## FERNET_KEYS = [ @@ -3533,3 +3775,28 @@ SYSTEM_WIDE_ROLE_CLASSES = [] from openedx.core.djangoapps.plugins import plugin_apps, plugin_settings, constants as plugin_constants INSTALLED_APPS.extend(plugin_apps.get_apps(plugin_constants.ProjectType.LMS)) plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.LMS, plugin_constants.SettingsType.COMMON) + +DEPRECATED_ADVANCED_COMPONENT_TYPES = [] + +############### Settings for video pipeline ################## +VIDEO_UPLOAD_PIPELINE = { + 'BUCKET': '', + 'ROOT_PATH': '', +} + +############### Settings for django file storage ################## +DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage' + +### Proctoring configuration (redirct URLs and keys shared between systems) #### +PROCTORING_BACKENDS = { + 'DEFAULT': 'null', + # The null key needs to be quoted because + # null is a language independent type in YAML + 'null': {} +} + +############### The SAML private/public key values ################ +SOCIAL_AUTH_SAML_SP_PRIVATE_KEY = "" +SOCIAL_AUTH_SAML_SP_PUBLIC_CERT = "" +SOCIAL_AUTH_SAML_SP_PRIVATE_KEY_DICT = {} +SOCIAL_AUTH_SAML_SP_PUBLIC_CERT_DICT = {} diff --git a/lms/envs/test.py b/lms/envs/test.py index 4f279f0bab3..81b81398c6e 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -125,6 +125,8 @@ XQUEUE_WAITTIME_BETWEEN_REQUESTS = 5 # seconds MOCK_STAFF_GRADING = True MOCK_PEER_GRADING = True +COMMENTS_SERVICE_URL = 'http://localhost:4567' + ############################ STATIC FILES ############################# # TODO (cpennington): We need to figure out how envs/test.py can inject things @@ -261,6 +263,7 @@ OPENID_PROVIDER_TRUSTED_ROOTS = ['*'] FEATURES['ENABLE_OAUTH2_PROVIDER'] = True # don't cache courses for testing OIDC_COURSE_HANDLER_CACHE_TIMEOUT = 0 +OAUTH_ENFORCE_SECURE = False ########################### External REST APIs ################################# FEATURES['ENABLE_MOBILE_REST_API'] = True @@ -553,12 +556,14 @@ COURSE_CATALOG_API_URL = 'https://catalog.example.com/api/v1' COMPREHENSIVE_THEME_DIRS = [REPO_ROOT / "themes", REPO_ROOT / "common/test"] COMPREHENSIVE_THEME_LOCALE_PATHS = [REPO_ROOT / "themes/conf/locale", ] +ENABLE_COMPREHENSIVE_THEMING = True LMS_ROOT_URL = "http://localhost:8000" FRONTEND_LOGOUT_URL = LMS_ROOT_URL + '/logout' ECOMMERCE_API_URL = 'https://ecommerce.example.com/api/v2/' +ECOMMERCE_PUBLIC_URL_ROOT = None ENTERPRISE_API_URL = 'http://enterprise.example.com/enterprise/api/v1/' ENTERPRISE_CONSENT_API_URL = 'http://enterprise.example.com/consent/api/v1/' @@ -616,3 +621,26 @@ derive_settings(__name__) ############### Settings for edx-rbac ############### SYSTEM_WIDE_ROLE_CLASSES = os.environ.get("SYSTEM_WIDE_ROLE_CLASSES", []) + +###################### Grade Downloads ###################### +# These keys are used for all of our asynchronous downloadable files, including +# the ones that contain information other than grades. + +GRADES_DOWNLOAD = { + 'STORAGE_TYPE': 'localfs', + 'BUCKET': 'edx-grades', + 'ROOT_PATH': '/tmp/edx-s3/grades', +} + +# Configuration used for generating PDF Receipts/Invoices + +PDF_RECEIPT_TAX_ID = 'add here' +PDF_RECEIPT_FOOTER_TEXT = 'add your own specific footer text here' +PDF_RECEIPT_DISCLAIMER_TEXT = 'add your own specific disclaimer text here' +PDF_RECEIPT_BILLING_ADDRESS = 'add your own billing address here with appropriate line feed characters' +PDF_RECEIPT_TERMS_AND_CONDITIONS = 'add your own terms and conditions' +PDF_RECEIPT_TAX_ID_LABEL = 'Tax ID' + +PROFILE_MICROFRONTEND_URL = "http://profile-mfe/abc/" +ORDER_HISTORY_MICROFRONTEND_URL = "http://order-history-mfe/" +ACCOUNT_MICROFRONTEND_URL = "http://account-mfe/" -- GitLab