From 389949e4a52873a3e2d1236e3ab166f181a48be3 Mon Sep 17 00:00:00 2001 From: Christian Berg Date: Wed, 14 Sep 2016 00:57:57 +0200 Subject: [PATCH] =?UTF-8?q?=C3=84nderungen=20am=20layout=20wie=20die=20con?= =?UTF-8?q?fig=20Dateien=20abgelegt=20werden,=20um=20passw=C3=B6rter=20lei?= =?UTF-8?q?chter=20aus=20dem=20=C3=B6ffentlichen=20GIT=20repository=20vers?= =?UTF-8?q?chwinden=20zu=20lassen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- src/kasu/settings.py | 256 +++++++++++++++++++++++++++++++++++++++++++ src/kasu/urls.py | 41 +++---- sync.sh | 4 +- testserver.sh | 4 +- 5 files changed, 275 insertions(+), 32 deletions(-) create mode 100644 src/kasu/settings.py diff --git a/.gitignore b/.gitignore index f29c400..6756f52 100644 --- a/.gitignore +++ b/.gitignore @@ -67,4 +67,4 @@ target/ /static/ /templates/ .[a-zA-Z]* -/src/kasu/settings/production.py +local_settings.py diff --git a/src/kasu/settings.py b/src/kasu/settings.py new file mode 100644 index 0000000..c093933 --- /dev/null +++ b/src/kasu/settings.py @@ -0,0 +1,256 @@ +# -*- coding: utf-8 -*- +from os import path + +gettext = lambda s: s + +ADMINS = (('Max Mustermann', 'email@example.com'),) +ALLOWED_HOSTS = ['.kasu.at'] +FORCE_SCRIPT_NAME = "" +INTERNAL_IPS = ('127.0.0.1',) +MANAGERS = ADMINS +ROOT_URLCONF = 'kasu.urls' +SECRET_KEY = 'set in local_settings' +SESSION_COOKIE_DOMAIN = 'kasu.at' # Die ganze Domain Kasu +SESSION_COOKIE_AGE = 15768000 # Session dauer: 4 Wochen +SESSION_COOKIE_SECURE = True +SITE_ID = 1 + +# Path Info +PROJECT_PATH = path.abspath(path.join(path.dirname(__file__), '..', '..')) +LOCALE_PATHS = (path.join(PROJECT_PATH, 'kasu', 'locale/'),) +MEDIA_ROOT = path.join(PROJECT_PATH, 'media') +MEDIA_URL = '/media/' +STATIC_ROOT = path.join(PROJECT_PATH, 'static') +STATIC_URL = '/static/' +STATICFILES_DIRS = () +STATICFILES_FINDERS = ( + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', + 'django.contrib.staticfiles.finders.FileSystemFinder', + 'compressor.finders.CompressorFinder', +) + +# Apps +PREREQ_APPS = [ + 'grappelli', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.humanize', + 'django.contrib.messages', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.staticfiles', + 'django_comments', + 'ckeditor', + 'ckeditor_uploader', + 'easy_thumbnails', + 'social.apps.django_app.default', +] +PROJECT_APPS = [ + 'kasu', + 'content', + 'events', + 'membership', + 'maistar_ranking', + 'mahjong_ranking', +] +INSTALLED_APPS = PREREQ_APPS + PROJECT_APPS + +# Caches +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', + } +} + +#Request Middleware +MIDDLEWARE_CLASSES = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', + 'django.middleware.locale.LocaleMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'mahjong_ranking.middleware.DenormalizationUpdateMiddleware', +] + +#Template Settings +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [path.join(PROJECT_PATH, 'templates/')], + 'OPTIONS': { + 'context_processors': [ + 'django.contrib.auth.context_processors.auth', + 'django.template.context_processors.debug', + 'django.template.context_processors.i18n', + 'django.template.context_processors.media', + 'django.template.context_processors.static', + 'django.template.context_processors.tz', + 'django.contrib.messages.context_processors.messages', + 'django.core.context_processors.csrf', + 'django.core.context_processors.request', + 'django.contrib.messages.context_processors.messages', + 'content.context_processors.content_menus', + 'events.context_processors.upcoming_events', + 'social.apps.django_app.context_processors.backends', + 'social.apps.django_app.context_processors.login_redirect', + ], + 'loaders': [ + ('django.template.loaders.cached.Loader', [ + 'django.template.loaders.filesystem.Loader', + 'django.template.loaders.app_directories.Loader', + ]), + ], + }, + }, +] + +#E-Mail Settings (set in local_settings) +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +EMAIL_HOST = "" +EMAIL_PORT = "" +EMAIL_HOST_USER = "" +EMAIL_HOST_PASSWORD = "" +EMAIL_USE_TLS = True +DEFAULT_FROM_EMAIL = "" + +# Login Settings +ACCOUNT_ACTIVATION_DAYS = 5 +AUTH_USER_MODEL = 'membership.Membership' +AUTHENTICATION_BACKENDS = ('social.backends.facebook.FacebookOAuth2', + 'social.backends.google.GoogleOAuth2', + 'social.backends.twitter.TwitterOAuth', + 'django.contrib.auth.backends.ModelBackend',) +LOGIN_URL = '/membership/login/' +LOGIN_ERROR_URL = '/membership/login/error/' +LOGIN_REDIRECT_URL = '/users/' +SOCIAL_AUTH_CHANGE_SIGNAL_ONLY = False +SOCIAL_AUTH_ENABLED_BACKENDS = ('facebook-oauth2', 'google-oauth2', 'twitter') +SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/users/' +SOCIAL_AUTH_SLUGIFY_USERNAMES = True +SOCIAL_AUTH_FACEBOOK_KEY = '' +SOCIAL_AUTH_FACEBOOK_SECRET = '' +SOCIAL_AUTH_FACEBOOK_SCOPE = ['user_about_me', 'email'] +SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '' +SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '' +SOCIAL_AUTH_TWITTER_KEY = '' +SOCIAL_AUTH_TWITTER_SECRET = '' + +# Localization +USE_I18N = True +USE_L10N = True +LANGUAGE_CODE = 'de-at' +LANGUAGES = (('de', gettext('German')), ('en', gettext("English"))) +TIME_ZONE = 'Europe/Vienna' +USE_TZ = True + +# CK Editor +CKEDITOR_UPLOAD_PATH = "uploads/" +CKEDITOR_IMAGE_BACKEND = 'pillow' +CKEDITOR_JQUERY_URL = '/static/js/jquery.min.js' +CKEDITOR_CONFIGS = {'default': { + 'width': '100%', + 'extraPlugins': 'divarea', + 'toolbarGroups': """[ + { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, + { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, + { name: 'links' }, + { name: 'insert' }, + { name: 'forms' }, + { name: 'tools' }, + { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, + { name: 'others' }, + '/', + { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, + { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] }, + { name: 'styles' }, + { name: 'colors' }, + { name: 'about' } + ];""" +} +} + +# credentials for facebook feed synchronisation (set in local_settings) +FACEBOOK_APP_ID = '' +FACEBOOK_ACCESS_TOKEN = '' + +# Settings for the redactor WYSIWYG Editor +REDACTOR_OPTIONS = {'lang': 'de', 'linebreaks': True} +REDACTOR_UPLOAD = 'uploads/' + +#crendetials for reCaptcha (set in local_settings) +RECAPTCHA_PUBLIC_KEY = '' +RECAPTCHA_PRIVATE_KEY = '' +RECAPTCHA_THEME = 'red' + +# Settings for the Thumbnailer +THUMBNAIL_ALIASES = {'': { + 'avatar': {'size': (70, 70), 'crop': 'smart', 'replace_alpha': '#ffffff'}, + 'article': {'size': (200, 120), 'crop': 'smart', + 'replace_alpha': '#ffffff'}, + 'callout': {'size': (940, 300), 'crop': 'smart', 'upscale': True, + 'replace_alpha': '#ffffff'}, + 'display': {'size': (940, 940), 'replace_alpha': '#ffffff'}, + 'thumbnail': {'size': (140, 140), 'crop': 'smart', + 'replace_alpha': '#ffffff'}, +}} +THUMBNAIL_BASEDIR = 'thumbs' + +LOGGING = { + 'version': 1, + 'disable_existing_loggers': True, + 'filters': { + 'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'} + }, + 'formatters': { + 'verbose': { + 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s' + }, + 'simple': { + 'format': '%(levelname)s %(message)s' + }, + }, + 'handlers': { + 'null': { + 'level': 'DEBUG', + 'class': 'logging.NullHandler', + }, + 'console': { + 'level': 'DEBUG', + 'class': 'logging.StreamHandler', + 'formatter': 'simple' + }, + 'mail_admins': { + 'level': 'ERROR', + 'filters': ['require_debug_false'], + 'class': 'django.utils.log.AdminEmailHandler', + } + }, + 'loggers': { + 'django': { + 'handlers': ['console'], + 'level': 'INFO', + 'propagate': True, + }, + 'django.request': { + 'handlers': ['console', 'mail_admins'], + 'level': 'ERROR', + 'propagate': False, + }, + 'kasu': { + 'handlers': ['console', 'mail_admins'], + 'level': 'DEBUG', + 'propagate': False, + }, + + } +} + +try: + from .local_settings import * +except ImportError: + pass \ No newline at end of file diff --git a/src/kasu/urls.py b/src/kasu/urls.py index 46039c5..f3210e9 100644 --- a/src/kasu/urls.py +++ b/src/kasu/urls.py @@ -1,32 +1,35 @@ # -*- encoding: utf-8 -*- +from django.conf import settings from django.conf.urls import patterns, include, url - -# Uncomment the next two lines to enable the admin: from django.contrib import admin +from django.views.generic.base import TemplateView + +from content.feeds import LatestNews, LatestComments from content.views import * # @UnusedWildImport from events.views import EventListIcal -from content.feeds import LatestNews, LatestComments from membership.views import MembershipDetail -from django.views.generic.base import TemplateView, RedirectView admin.autodiscover() urlpatterns = patterns( '', url(r'^$', StartPage.as_view()), + url(r'^(?P[\-\d\w\/]+)\.html$', PageHtml.as_view(), name='view-page'), + url(r'^(?P[\-\d\w\/]+)\.pdf$', PagePdf.as_view()), url(r'^404/$', TemplateView.as_view(template_name='404.html')), + url(r'^add_page/(?P[\+\.\-\d\w\/]+)/$', PageAddForm.as_view(), name='add-page'), url(r'^admin/doc/', include('django.contrib.admindocs.urls')), url(r'^admin/', include(admin.site.urls)), url(r'^ckeditor/', include('ckeditor_uploader.urls')), url(r'^comments/', include('django_comments.urls')), url(r'^content/', include('content.urls')), + url(r'^edit_page/(?P[\+\.\-\d\w\/]+)/$', PageEditForm.as_view(), name='edit-page'), url(r'^events/', include('events.urls')), url(r'^events.ics$', EventListIcal.as_view(), name='events-ical'), url(r'^feeds/latest/$', LatestNews(), name='feed-latest-news'), url(r'^feeds/comments/$', LatestComments(), name='feed-latest-comments'), url(r'^gallery/', include('events.gallery_urls')), - url(r'^google25dabc1a49a9ef03.html$', TemplateView.as_view( - template_name='google25dabc1a49a9ef03.html')), + url(r'^google25dabc1a49a9ef03.html$', TemplateView.as_view(template_name='google25dabc1a49a9ef03.html')), url(r'^grappelli/', include('grappelli.urls')), url(r'^i18n/', include('django.conf.urls.i18n'), name='start-page'), url(r'^index.html$', StartPage.as_view()), @@ -37,32 +40,18 @@ urlpatterns = patterns( url(r'^ranking/', include('maistar_ranking.urls')), url(r'^robots.txt$', TemplateView.as_view(template_name='robots.txt')), url(r'^users/$', MembershipDetail.as_view(), name='membership-details'), - url(r'^users/(?P[\-\.\d\w]+)/$', - MembershipDetail.as_view(), name='membership-details'), + url(r'^users/(?P[\-\.\d\w]+)/$', MembershipDetail.as_view(), name='membership-details'), ) if settings.DEBUG: - urlpatterns += patterns('', - url(r'^media/(?P.*)$', 'django.views.static.serve', - {'document_root': settings.MEDIA_ROOT}), - ) + from django.conf.urls.static import static + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) if 'rosetta' in settings.INSTALLED_APPS: - urlpatterns += patterns('', url(r'^rosetta/', - include('rosetta.urls')),) + urlpatterns += patterns('', url(r'^rosetta/', include('rosetta.urls')),) if 'debug_toolbar' in settings.INSTALLED_APPS: import debug_toolbar - urlpatterns += patterns('', url(r'^__debug__/', - include(debug_toolbar.urls)),) + urlpatterns += patterns('', url(r'^__debug__/', include(debug_toolbar.urls)),) -urlpatterns += patterns('', - url(r'^add_page/(?P[\+\.\-\d\w\/]+)/$', - PageAddForm.as_view(), name='add-page'), - url(r'^edit_page/(?P[\+\.\-\d\w\/]+)/$', - PageEditForm.as_view(), name='edit-page'), - url(r'^(?P[\-\d\w\/]+)\.html$', - PageHtml.as_view(), name='view-page'), - url(r'^(?P[\-\d\w\/]+)\.pdf$', - PagePdf.as_view()), - ) diff --git a/sync.sh b/sync.sh index 37407a8..97bba86 100755 --- a/sync.sh +++ b/sync.sh @@ -5,7 +5,6 @@ SYNC_ASSESTS="requirements templates" SYNC_SOURCECODE="src" EXCLUDE_FILES="*.pyc" -# ./cleanup.sh grunt echo "Syncing project assets ..." @@ -16,8 +15,7 @@ ssh $SSH_LOGIN "virtualenv/bin/pip install --upgrade -r requirements/base.txt" echo "Syncing Sourcecode ..." find . -name "*.pyc" -exec rm -rf {} \; -rsync -r --copy-links --delete $SYNC_SOURCECODE $SSH_LOGIN:~/ - +rsync -r --copy-links --delete $SYNC_SOURCECODE $SSH_LOGIN:~/ --exclude 'src/kasu/local_settings.py' echo "Rebuild and reload django..." ssh $SSH_LOGIN "rm src/kasu/settings/development.*" diff --git a/testserver.sh b/testserver.sh index b64c317..497c94e 100755 --- a/testserver.sh +++ b/testserver.sh @@ -1,4 +1,4 @@ -export DJANGO_SETTINGS_MODULE=kasu.settings.dev -source virtenv/bin/activate +export DJANGO_SETTINGS_MODULE=kasu.settings +source .virtualenv/bin/activate ./manage.py runserver 0.0.0.0:8080