From c648281a1b1c237c76870fe83a9472c4129452b7 Mon Sep 17 00:00:00 2001
From: Christian Dresen <c.dresen@fh-muenster.de>
Date: Thu, 18 Aug 2016 19:20:20 +0200
Subject: [PATCH] Added config.ini

---
 www/Dockerfile                 |   2 +
 www/conf/config.example.ini    |  22 +++++++
 www/nginx/nginx_warpinfra.conf |   2 +-
 www/nginx/uwsgi.ini            |   2 +-
 www/run_dev.sh                 |   3 +-
 www/run_prod.sh                |   1 +
 www/web/warpzone/settings.py   | 107 ++++++++++++---------------------
 7 files changed, 67 insertions(+), 72 deletions(-)
 create mode 100644 www/conf/config.example.ini

diff --git a/www/Dockerfile b/www/Dockerfile
index a35c6c9..b912afc 100644
--- a/www/Dockerfile
+++ b/www/Dockerfile
@@ -32,6 +32,8 @@ RUN pip3 install \
 RUN ln -s /opt/nginx/nginx_warpinfra.conf /etc/nginx/sites-enabled/
 RUN rm /etc/nginx/sites-enabled/default
 
+RUN mkdir /opt/socket/
+
 COPY misc/ldapdb_base.py /usr/local/lib/python2.7/dist-packages/ldapdb/backends/ldap/base.py
 COPY misc/entrypoint.sh /opt/entrypoint.sh
 
diff --git a/www/conf/config.example.ini b/www/conf/config.example.ini
new file mode 100644
index 0000000..8748096
--- /dev/null
+++ b/www/conf/config.example.ini
@@ -0,0 +1,22 @@
+[debug]
+DEBUG = true
+
+[security]
+SECRET_KEY = '4m4c(_$ubwued9p-insp!950g&r0yu851bp287$2a3ydj^y=0='
+PW_RESET_TOKEN_LIFETIME = 5
+
+[ldap]
+LDAP_HOST = ldap
+LDAP_BIND_DN = cn=admin,dc=warpzone,dc=ms
+LDAP_PASSWORD = k7dAw8j2
+
+LDAP_USER_SEARCH_PATH = ou=users,dc=warpzone,dc=ms
+LDAP_GROUP_SEARCH_PATH = dc=warpzone,dc=ms
+LDAP_USER_SEARCH_FILTER = (uid=%(user)s)
+
+LDAP_GROUP_IS_ACTIVE = cn=active,ou=groups,dc=warpzone,dc=ms
+LDAP_GROUP_IS_STAFF = cn=superuser,ou=groups,ou=warpauth,ou=infrastructure,dc=warpzone,dc=ms
+LDAP_GROUP_SUPERUSER = cn=superuser,ou=groups,ou=warpauth,ou=infrastructure,dc=warpzone,dc=ms
+
+[misc]
+LOG_PATH = /var/log/
\ No newline at end of file
diff --git a/www/nginx/nginx_warpinfra.conf b/www/nginx/nginx_warpinfra.conf
index d5bb926..2c993ba 100644
--- a/www/nginx/nginx_warpinfra.conf
+++ b/www/nginx/nginx_warpinfra.conf
@@ -1,5 +1,5 @@
 upstream django {
-    server unix:///tmp/warpinfra.sock;
+    server unix:///opt/socket/warpinfra.sock;
 }
 
 server {
diff --git a/www/nginx/uwsgi.ini b/www/nginx/uwsgi.ini
index cac057f..756e891 100644
--- a/www/nginx/uwsgi.ini
+++ b/www/nginx/uwsgi.ini
@@ -4,7 +4,7 @@ module=warpzone.wsgi:application
 master=True
 pidfile=/tmp/warpinfra.pid
 vacuum=True
-socket=/tmp/warpinfra.sock
+socket=/opt/socket/warpinfra.sock
 max-requests=5000
 daemonize=/var/log/uwsgi.log
 processes       = 10
diff --git a/www/run_dev.sh b/www/run_dev.sh
index 48e1990..b32520a 100644
--- a/www/run_dev.sh
+++ b/www/run_dev.sh
@@ -6,7 +6,8 @@ docker rm warpinfra
 
 docker run \
 	-v $SCRIPTPATH/web:/opt/warpinfra \
-    -v $SCRIPTPATH/nginx:/opt/nginx \
+        -v $SCRIPTPATH/nginx:/opt/nginx \
+	-v $SCRIPTPATH/conf/config.example.ini:/etc/warpinfra/config.ini \
 	--link ldap-service:ldap \
 	--name warpinfra \
 	-p 8000:443 \
diff --git a/www/run_prod.sh b/www/run_prod.sh
index 1a0869b..d9cb938 100644
--- a/www/run_prod.sh
+++ b/www/run_prod.sh
@@ -8,6 +8,7 @@ docker rm warpinfra
 docker run \
 	--link ldap-service:ldap \
 	--name warpinfra \
+    --volume /tmp/warpinfra:/opt/socket \
 	-p 8000:443 \
 	-itd \
 	warpinfra
diff --git a/www/web/warpzone/settings.py b/www/web/warpzone/settings.py
index 9b68203..8e41ed5 100644
--- a/www/web/warpzone/settings.py
+++ b/www/web/warpzone/settings.py
@@ -1,49 +1,43 @@
-"""
-Django settings for FlagHunter project.
+import os
+import ldap
+import logging
+import configparser
+from django_auth_ldap.config import LDAPSearch, GroupOfNamesType, PosixGroupType
 
-Generated by 'django-admin startproject' using Django 1.8.3.
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 
-For more information on this file, see
-https://docs.djangoproject.com/en/1.8/topics/settings/
 
-For the full list of settings and their values, see
-https://docs.djangoproject.com/en/1.8/ref/settings/
-"""
+# READ FROM CONFIG FILE
+config = configparser.RawConfigParser()
+config.read('/etc/warpinfra/config.ini')
 
-#
-# MAIN TO DO LIST
-#
-# ToDo: Add Content Security Policy
-# ToDo: Fix UTF-8 for all Strings
 
+# LDAP
+LDAP_HOST = "ldap://"+config.get('ldap','LDAP_HOST')
+LDAP_BIND_DN = config.get('ldap','LDAP_BIND_DN')
+LDAP_PASSWORD = config.get('ldap','LDAP_PASSWORD')
 
+LDAP_USER_SEARCH_PATH = config.get('ldap','LDAP_USER_SEARCH_PATH')
+LDAP_GROUP_SEARCH_PATH = config.get('ldap','LDAP_GROUP_SEARCH_PATH')
+LDAP_USER_SEARCH_FILTER = config.get('ldap','LDAP_USER_SEARCH_FILTER')
 
-# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
-import os
-import ldap
-from django_auth_ldap.config import LDAPSearch, GroupOfNamesType, PosixGroupType
-import logging
-
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+LDAP_GROUP_IS_ACTIVE = config.get('ldap','LDAP_GROUP_IS_ACTIVE')
+LDAP_GROUP_IS_STAFF = config.get('ldap','LDAP_GROUP_IS_STAFF')
+LDAP_GROUP_SUPERUSER = config.get('ldap','LDAP_GROUP_SUPERUSER')
 
+# SECURITY
+PW_RESET_TOKEN_LIFETIME = config.get('security','PW_RESET_TOKEN_LIFETIME')
+SECRET_KEY = config.get('security','SECRET_KEY')
 
-# Quick-start development settings - unsuitable for production
-# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
+# DEBUG
+DEBUG = config.getboolean('debug','DEBUG')
 
-# SECURITY WARNING: keep the secret key used in production secret!
-SECRET_KEY = '4m4c(_$ubwued9p-insp!950g&r0yu851bp287$2a3ydj^y=0='
-
-# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = True
 
 MEDIA_ROOT = 'templates/media/'
 MEDIA_URL = '/media/'
 
 ALLOWED_HOSTS = []
 
-
-# Application definition
-
 INSTALLED_APPS = (
     'django.contrib.admin',
     'django.contrib.auth',
@@ -107,9 +101,9 @@ DATABASES = {
     },
     'ldap': {
         'ENGINE': 'ldapdb.backends.ldap',
-        'NAME': 'ldap://ldap/',
-        'USER': 'cn=admin,dc=warpzone,dc=ms',
-        'PASSWORD': 'k7dAw8j2',
+        'NAME': LDAP_HOST,
+        'USER': LDAP_BIND_DN,
+        'PASSWORD': LDAP_PASSWORD
     }
 }
 DATABASE_ROUTERS = ['ldapdb.router.Router']
@@ -117,13 +111,9 @@ DATABASE_ROUTERS = ['ldapdb.router.Router']
 # https://docs.djangoproject.com/en/1.8/topics/i18n/
 
 LANGUAGE_CODE = 'en-us'
-
 TIME_ZONE = 'Europe/Berlin'
-
 USE_I18N = True
-
 USE_L10N = True
-
 USE_TZ = False
 
 
@@ -142,38 +132,31 @@ AUTHENTICATION_BACKENDS = (
 # AUTH LDAP SETTINGS
 #
 
-#AUTH_LDAP_SERVER_URI = "ldap://s1.dyhost.de"
-AUTH_LDAP_SERVER_URI = "ldap://ldap"
-
-AUTH_LDAP_BIND_DN = "cn=admin,dc=warpzone,dc=ms"
-AUTH_LDAP_BIND_PASSWORD = "k7dAw8j2"
+AUTH_LDAP_SERVER_URI = LDAP_HOST
+AUTH_LDAP_BIND_DN = LDAP_BIND_DN
+AUTH_LDAP_BIND_PASSWORD = LDAP_PASSWORD
 
-
-AUTH_LDAP_USER_SEARCH_PATH = "ou=users,dc=warpzone,dc=ms"
-AUTH_LDAP_USER_SEARCH_FILTER = "(uid=%(user)s)"
-
-AUTH_LDAP_USER_SEARCH = LDAPSearch(AUTH_LDAP_USER_SEARCH_PATH,
-                                   ldap.SCOPE_SUBTREE, AUTH_LDAP_USER_SEARCH_FILTER)
+AUTH_LDAP_USER_SEARCH = LDAPSearch(LDAP_USER_SEARCH_PATH,
+                                   ldap.SCOPE_SUBTREE, LDAP_USER_SEARCH_FILTER)
 
 AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName", "last_name": "sn", "email": "mail"}
 AUTH_LDAP_PROFILE_ATTR_MAP = {"home_directory": "homeDirectory"}
 
-AUTH_LDAP_GROUP_SEARCH_PATH = "dc=warpzone,dc=ms"
-AUTH_LDAP_GROUP_SEARCH = LDAPSearch(AUTH_LDAP_GROUP_SEARCH_PATH,
+
+AUTH_LDAP_GROUP_SEARCH = LDAPSearch(LDAP_GROUP_SEARCH_PATH,
                                     ldap.SCOPE_SUBTREE, "(objectClass=posixGroup)"
                                     )
 
 AUTH_LDAP_GROUP_TYPE = PosixGroupType()
 
+
 AUTH_LDAP_USER_FLAGS_BY_GROUP = {
-    "is_active": "cn=active,ou=groups,dc=warpzone,dc=ms",
-    "is_staff": ["cn=superuser,ou=groups,ou=warpauth,ou=infrastructure,dc=warpzone,dc=ms",
-                 "cn=superuser,ou=groups,ou=warpauth,ou=infrastructure,dc=warpzone,dc=ms"],
-    "is_superuser": "cn=superuser,ou=groups,ou=warpauth,ou=infrastructure,dc=warpzone,dc=ms"
+    "is_active": LDAP_GROUP_IS_ACTIVE,
+    "is_staff": [LDAP_GROUP_IS_STAFF, LDAP_GROUP_SUPERUSER],
+    "is_superuser": LDAP_GROUP_SUPERUSER
 }
 
 AUTH_LDAP_FIND_GROUP_PERMS = True
-
 AUTH_LDAP_CACHE_GROUPS = True
 AUTH_LDAP_GROUP_CACHE_TIMEOUT = 10
 
@@ -185,20 +168,6 @@ hdlr.setFormatter(formatter)
 logger.addHandler(hdlr) 
 logger.setLevel(logging.DEBUG)
 
-logger1 = logging.getLogger('main')
-hdlr = logging.FileHandler('/tmp/main.log')
-formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
-hdlr.setFormatter(formatter)
-logger1.addHandler(hdlr) 
-logger1.setLevel(logging.DEBUG)
-
-#
-# MISC
-#
-
-# Lifetime of Password Reset Token in Minutes
-PW_RESET_TOKEN_LIFETIME = 5
-
 STATIC_URL = '/static/'
 STATIC_ROOT = os.path.join(BASE_DIR, "static")
 
-- 
GitLab