diff --git a/modules/openstack_project/manifests/ask.pp b/modules/openstack_project/manifests/ask.pp index 91fb6476e5..3bb6caa870 100644 --- a/modules/openstack_project/manifests/ask.pp +++ b/modules/openstack_project/manifests/ask.pp @@ -14,7 +14,7 @@ class openstack_project::ask ( $redis_max_memory = '512m', $redis_bind = '127.0.0.1', $solr_version = '4.10.4', - $askbot_revision = '06be25e5d1aa013a9a201a92db4b35b1ee1f3d32' + $askbot_revision = '87086ebcefc5be29e80d3228e465e6bec4523fcf' ) { file { '/srv/dist': @@ -114,6 +114,7 @@ class openstack_project::ask ( site_ssl_cert_file_contents => $site_ssl_cert_file_contents, site_ssl_key_file_contents => $site_ssl_key_file_contents, site_ssl_chain_file_contents => $site_ssl_chain_file_contents, + template_settings => 'openstack_project/askbot/settings.py.erb', } # askbot-theme openstack theme diff --git a/modules/openstack_project/templates/askbot/settings.py.erb b/modules/openstack_project/templates/askbot/settings.py.erb new file mode 100644 index 0000000000..54161a9262 --- /dev/null +++ b/modules/openstack_project/templates/askbot/settings.py.erb @@ -0,0 +1,432 @@ +## Django settings for ASKBOT enabled project. +import os.path +import logging +import sys +import askbot +import site + +#this line is added so that we can import pre-packaged askbot dependencies +ASKBOT_ROOT = os.path.abspath(os.path.dirname(askbot.__file__)) +site.addsitedir(os.path.join(ASKBOT_ROOT, 'deps')) + +DEBUG = <%if @askbot_debug %>True<%else%>False<%end%> # set to True to enable debugging +TEMPLATE_DEBUG = False # keep false when debugging jinja2 templates +INTERNAL_IPS = ('127.0.0.1',) +ALLOWED_HOSTS = ['*',]#change this for better security on your site + +ADMINS = ( + ('Your Name', 'your_email@domain.com'), +) + +MANAGERS = ADMINS + +DATABASES = { + 'default': { + 'ENGINE': '<%= @db_engine %>', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. + 'NAME': '<%= @db_name %>', # Or path to database file if using sqlite3. + 'USER': '<%= @db_user %>', # Not used with sqlite3. + 'PASSWORD': '<%= @db_password %>', # Not used with sqlite3. + 'HOST': '<%= @db_host %>', # Set to empty string for localhost. Not used with sqlite3. + 'PORT': '', # Set to empty string for default. Not used with sqlite3. + 'TEST_CHARSET': 'utf8', # Setting the character set and collation to utf-8 + 'TEST_COLLATION': 'utf8_general_ci', # is necessary for MySQL tests to work properly. + } +} + +#outgoing mail server settings +SERVER_EMAIL = 'noreply@openstack.org' +DEFAULT_FROM_EMAIL = 'noreply@openstack.org' +EMAIL_HOST_USER = '' +EMAIL_HOST_PASSWORD = '' +EMAIL_SUBJECT_PREFIX = '' +EMAIL_HOST='<%= @smtp_host %>' +EMAIL_PORT='<%= @smtp_port %>' +EMAIL_USE_TLS=False +#EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend' +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' + +#incoming mail settings +#after filling out these settings - please +#go to the site's live settings and enable the feature +#"Email settings" -> "allow asking by email" +# +# WARNING: command post_emailed_questions DELETES all +# emails from the mailbox each time +# do not use your personal mail box here!!! +# +IMAP_HOST = '' +IMAP_HOST_USER = '' +IMAP_HOST_PASSWORD = '' +IMAP_PORT = '' +IMAP_USE_TLS = False + +# Local time zone for this installation. Choices can be found here: +# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name +# although not all choices may be available on all operating systems. +# On Unix systems, a value of None will cause Django to use the same +# timezone as the operating system. +# If running in a Windows environment this must be set to the same as your +# system time zone. +TIME_ZONE = 'America/Chicago' + +SITE_ID = 1 + +# If you set this to False, Django will make some optimizations so as not +# to load the internationalization machinery. +USE_I18N = True +LANGUAGE_CODE = 'en' + +# Absolute path to the directory that holds uploaded media +# Example: "/home/media/media.lawrence.com/" +#MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'askbot', 'upfiles') +MEDIA_ROOT = '/srv/askbot-site/upfiles' +MEDIA_URL = '/upfiles/' +STATIC_URL = '/m/'#this must be different from MEDIA_URL + +PROJECT_ROOT = os.path.dirname(__file__) +STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') + +# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a +# trailing slash. +# Examples: "http://foo.com/media/", "/media/". +ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/' + +# Make up some unique string, and don't share it with anybody. +SECRET_KEY = '44fb9b7219e3743bffabb6861cbc9a28' + +# List of callables that know how to import templates from various sources. +TEMPLATE_LOADERS = ( + 'askbot.skins.loaders.Loader', + 'askbot.skins.loaders.JinjaAppDirectoryLoader', + 'django.template.loaders.app_directories.Loader', + 'django.template.loaders.filesystem.Loader', + #'django.template.loaders.eggs.load_template_source', +) + + +MIDDLEWARE_CLASSES = ( + #'django.middleware.gzip.GZipMiddleware', + #'askbot.middleware.locale.LocaleMiddleware', + 'django.middleware.locale.LocaleMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + #'django.middleware.cache.UpdateCacheMiddleware', + 'django.middleware.common.CommonMiddleware', + #'django.middleware.cache.FetchFromCacheMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'stopforumspam.middleware.StopForumSpamMiddleware', + #'django.middleware.sqlprint.SqlPrintingMiddleware', + + #below is askbot stuff for this tuple + 'askbot.middleware.anon_user.ConnectToSessionMessagesMiddleware', + 'askbot.middleware.forum_mode.ForumModeMiddleware', + 'askbot.middleware.cancel.CancelActionMiddleware', + 'django.middleware.transaction.TransactionMiddleware', + #'debug_toolbar.middleware.DebugToolbarMiddleware', + 'askbot.middleware.view_log.ViewLogMiddleware', + 'askbot.middleware.spaceless.SpacelessMiddleware', + 'askbot.middleware.csrf.CsrfViewMiddleware', +) + + + +ROOT_URLCONF = os.path.basename(os.path.dirname(__file__)) + '.urls' + + +#UPLOAD SETTINGS +FILE_UPLOAD_TEMP_DIR = os.path.join( + os.path.dirname(__file__), + 'tmp' + ).replace('\\','/') + +FILE_UPLOAD_HANDLERS = ( + 'django.core.files.uploadhandler.MemoryFileUploadHandler', + 'django.core.files.uploadhandler.TemporaryFileUploadHandler', +) +ASKBOT_ALLOWED_UPLOAD_FILE_TYPES = ('.jpg', '.jpeg', '.gif', '.bmp', '.png', '.tiff') +ASKBOT_MAX_UPLOAD_FILE_SIZE = 1024 * 1024 #result in bytes +DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage' + + +#TEMPLATE_DIRS = (,) #template have no effect in askbot, use the variable below +#ASKBOT_EXTRA_SKINS_DIR = #path to your private skin collection +#take a look here http://askbot.org/en/question/207/ + +<% if @custom_theme_enabled %> +ASKBOT_EXTRA_SKINS_DIR = '<%= @site_root %>/themes' +<% end %> + +TEMPLATE_CONTEXT_PROCESSORS = ( + 'django.core.context_processors.request', + 'askbot.context.application_settings', + #'django.core.context_processors.i18n', + 'askbot.user_messages.context_processors.user_messages',#must be before auth + 'django.contrib.auth.context_processors.auth', #this is required for the admin app + 'django.core.context_processors.csrf', #necessary for csrf protection + 'askbot.deps.group_messaging.context.group_messaging_context', +) + + +INSTALLED_APPS = ( + 'longerusername', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.staticfiles', + + #all of these are needed for the askbot + 'django.contrib.admin', + 'django.contrib.humanize', + 'django.contrib.sitemaps', + 'django.contrib.messages', + #'debug_toolbar', +<% if @solr_enabled %> + #Optional, to enable haystack search + 'haystack', +<% end %> + 'compressor', + 'askbot', + 'askbot.deps.django_authopenid', + #'askbot.importers.stackexchange', #se loader + 'south', + 'askbot.deps.livesettings', + 'keyedcache', + 'robots', + 'django_countries', + 'djcelery', + 'djkombu', + 'followit', + 'tinymce', + 'group_messaging', + 'captcha', + #'avatar',#experimental use git clone git://github.com/ericflo/django-avatar.git$ +) + + +NOCAPTCHA = True + +#setup memcached for production use! +#see http://docs.djangoproject.com/en/1.1/topics/cache/ for details +CACHE_BACKEND = 'locmem://' + +#needed for django-keyedcache +CACHE_TIMEOUT = 6000 +#sets a special timeout for livesettings if you want to make them different +LIVESETTINGS_CACHE_TIMEOUT = CACHE_TIMEOUT +#CACHE_PREFIX = 'askbot' #make this unique +CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True +#If you use memcache you may want to uncomment the following line to enable memcached based sessions +#SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' + +<% if @redis_enabled %> +CACHES = { + 'default': { + 'BACKEND': 'redis_cache.RedisCache', + 'LOCATION': '<%= @redis_bind %>:<%= @redis_port %>', + 'KEY_PREFIX': '<%= @redis_prefix %>', #make unique same as db + 'OPTIONS': { + 'DB': 1, + 'PASSWORD': '<%= @redis_password %>', + # 'PARSER_CLASS': 'redis.connection.HiredisParser' + } + } +} +<%end%> + +AUTHENTICATION_BACKENDS = ( + 'django.contrib.auth.backends.ModelBackend', + 'askbot.deps.django_authopenid.backends.AuthBackend', +) + +#logging settings +LOG_FILENAME = 'askbot.log' +logging.basicConfig( + filename=os.path.join('<%= @site_root %>/log', LOG_FILENAME), + level=logging.CRITICAL, + format='%(pathname)s TIME: %(asctime)s MSG: %(filename)s:%(funcName)s:%(lineno)d %(message)s', +) + +########################### +# +# this will allow running your forum with url like http://site.com/forum +# +# ASKBOT_URL = 'forum/' +# +ASKBOT_URL = '' #no leading slash, default = '' empty string +ASKBOT_TRANSLATE_URL = False #translate specific URLs +_ = lambda v:v #fake translation function for the login url +LOGIN_URL = '/%s%s%s' % (ASKBOT_URL,_('account/'),_('signin/')) +LOGIN_REDIRECT_URL = ASKBOT_URL #adjust, if needed +#note - it is important that upload dir url is NOT translated!!! +#also, this url must not have the leading slash +ALLOW_UNICODE_SLUGS = False +ASKBOT_USE_STACKEXCHANGE_URLS = False #mimic url scheme of stackexchange + +#Celery Settings +BROKER_TRANSPORT = "djkombu.transport.DatabaseTransport" +CELERY_ALWAYS_EAGER = False + +import djcelery +djcelery.setup_loader() +DOMAIN_NAME = '' + +CSRF_COOKIE_NAME = '_csrf' +#https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/ +#CSRF_COOKIE_DOMAIN = DOMAIN_NAME + +STATIC_ROOT = os.path.join(PROJECT_ROOT, "static") +STATIC_ROOT = '<%= @site_root %>/static' +STATICFILES_DIRS = ( + ('default/media', os.path.join(ASKBOT_ROOT, 'media')), + <% if @custom_theme_enabled %>'<%= @site_root %>/themes',<% end %> +) +STATICFILES_FINDERS = ( + 'django.contrib.staticfiles.finders.FileSystemFinder', + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', + 'compressor.finders.CompressorFinder', +) + +RECAPTCHA_USE_SSL = True + +#HAYSTACK_SETTINGS +ENABLE_HAYSTACK_SEARCH = False +#Uncomment for multilingual setup: +#HAYSTACK_ROUTERS = ['askbot.search.haystack.routers.LanguageRouter',] + +#Uncomment if you use haystack +#More info in http://django-haystack.readthedocs.org/en/latest/settings.html +#HAYSTACK_CONNECTIONS = { +# 'default': { +# 'ENGINE': 'haystack.backends.simple_backend.SimpleEngine', +# } +#} + +<% if @solr_enabled %> +#HAYSTACK_SETTINGS +# +# Notice: +# the default and default_en url must match to avoid a bug +# in r0.7.53 that broke the working model of UI search and +# cli indexing. +ENABLE_HAYSTACK_SEARCH = True + +HAYSTACK_ROUTERS = ['askbot.search.haystack.routers.LanguageRouter',] + +HAYSTACK_CONNECTIONS = { + 'default': { + 'ENGINE': 'haystack.backends.solr_backend.SolrEngine', + 'URL': 'http://127.0.0.1:8983/solr/core-en' + }, + 'default_en': { + 'ENGINE': 'haystack.backends.solr_backend.SolrEngine', + 'URL': 'http://127.0.0.1:8983/solr/core-en' + }, + 'default_zh': { + 'ENGINE': 'haystack.backends.solr_backend.SolrEngine', + 'URL': 'http://127.0.0.1:8983/solr/core-zh' + }, +} + +HAYSTACK_SIGNAL_PROCESSOR = 'askbot.search.haystack.signals.AskbotRealtimeSignalProcessor' +<% end %> + + +TINYMCE_COMPRESSOR = True +TINYMCE_SPELLCHECKER = False +TINYMCE_JS_ROOT = os.path.join(STATIC_ROOT, 'default/media/tinymce/') +#TINYMCE_JS_URL = STATIC_URL + 'default/media/js/tinymce/tiny_mce.js' +TINYMCE_DEFAULT_CONFIG = { + 'plugins': 'askbot_imageuploader,askbot_attachment', + 'convert_urls': False, + 'theme': 'advanced', + 'content_css': STATIC_URL + 'default/media/style/tinymce/content.css', + 'force_br_newlines': True, + 'force_p_newlines': False, + 'forced_root_block': '', + 'mode' : 'textareas', + 'oninit': "TinyMCE.onInitHook", + 'plugins': 'askbot_imageuploader,askbot_attachment', + 'theme_advanced_toolbar_location' : 'top', + 'theme_advanced_toolbar_align': 'left', + 'theme_advanced_buttons1': 'bold,italic,underline,|,bullist,numlist,|,undo,redo,|,link,unlink,askbot_imageuploader,askbot_attachment', + 'theme_advanced_buttons2': '', + 'theme_advanced_buttons3' : '', + 'theme_advanced_path': False, + 'theme_advanced_resizing': True, + 'theme_advanced_resize_horizontal': False, + 'theme_advanced_statusbar_location': 'bottom', + 'editor_deselector': 'mceNoEditor', + 'width': '100%', + 'height': '250' +} + +LIVESETTINGS_OPTIONS = { + 1: { + 'DB': True, + 'SETTINGS': { + 'GENERAL_SKIN_SETTINGS': { + <% if @custom_theme_enabled %> + 'ASKBOT_DEFAULT_SKIN': '<%= @custom_theme_name %>', + <%end%> + 'SHOW_LOGO': True + }, + 'LOGIN_PROVIDERS': { + 'SIGNIN_MOZILLA_PERSONA_ENABLED': False, + 'SIGNIN_ALWAYS_SHOW_LOCAL_LOGIN': False, + 'SIGNIN_LOCAL_ENABLED': False, + 'SIGNIN_AOL_ENABLED': False, + 'SIGNIN_LIVEJOURNAL_ENABLED': False, + 'SIGNIN_VERISIGN_ENABLED': False, + 'SIGNIN_IDENTI.CA_ENABLED': False, + 'SIGNIN_WORDPRESS_ENABLED': False, + 'SIGNIN_CLAIMID_ENABLED': False, + 'SIGNIN_TECHNORATI_ENABLED': False, + 'SIGNIN_TWITTER_ENABLED': False, + 'SIGNIN_VIDOOP_ENABLED': False, + 'SIGNIN_BLOGGER_ENABLED': False, + 'SIGNIN_LINKEDIN_ENABLED': False, + 'SIGNIN_FLICKR_ENABLED': False, + 'SIGNIN_FACEBOOK_ENABLED': False, + 'SIGNIN_LAUNCHPAD_ENABLED': True, + 'SIGNIN_OPENID_ENABLED': True + } + }, + } +} + +#delayed notifications, time in seconds, 15 mins by default +NOTIFICATION_DELAY_TIME = 60 * 15 + +GROUP_MESSAGING = { + 'BASE_URL_GETTER_FUNCTION': 'askbot.models.user_get_profile_url', + 'BASE_URL_PARAMS': {'section': 'messages', 'sort': 'inbox'} +} + +ASKBOT_LANGUAGE_MODE = 'url-lang' + +LANGUAGES = ( + ('en', 'English'), + ('zh', 'Chinese'), +) +COUNTRY_CODES = { + 'en': 'us', + 'zh': 'cn', +} + +ASKBOT_CSS_DEVEL = False +if 'ASKBOT_CSS_DEVEL' in locals() and ASKBOT_CSS_DEVEL == True: + COMPRESS_PRECOMPILERS = ( + ('text/less', 'lessc {infile} {outfile}'), + ) + +COMPRESS_JS_FILTERS = [] +COMPRESS_PARSER = 'compressor.parser.HtmlParser' +JINJA2_EXTENSIONS = ('compressor.contrib.jinja2ext.CompressorExtension',) +JINJA2_TEMPLATES = ('captcha',) + +# Use syncdb for tests instead of South migrations. Without this, some tests +# fail spuriously in MySQL. +SOUTH_TESTS_MIGRATE = False + +VERIFIER_EXPIRE_DAYS = 3