diff --git a/castellum_core/.gitignore b/.gitignore similarity index 92% rename from castellum_core/.gitignore rename to .gitignore index 68470ff17c2173a0aa65a4805cd08f13007bd498..bdf7043d6d1525f917560e53f2e59f258ec2ef9b 100644 --- a/castellum_core/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ .tox/ .pytest_cache/ +.idea/ + +env castellum_core.egg-info/ dist/ diff --git a/castellum_core/Dockerfile b/castellum_core/Dockerfile index 8a6ad5e2bd2c0807a1e526967564702712fe2a7d..2c1d1e00e75102da8ff35fed4a0e920873884916 100644 --- a/castellum_core/Dockerfile +++ b/castellum_core/Dockerfile @@ -16,7 +16,9 @@ WORKDIR code/ RUN echo 'python3 /code/castellum_core/manage.py clear_sessions' > /etc/periodic/daily/castellum_clear_sessions RUN chmod 755 /etc/periodic/daily/castellum_clear_sessions +RUN pip3 install --upgrade pip RUN pip3 install -e . + RUN npm install RUN apk del $BUILDPKGS diff --git a/castellum_core/castellum_core/castellum_core/settings/default.py b/castellum_core/castellum_core/castellum_core/settings.py similarity index 76% rename from castellum_core/castellum_core/castellum_core/settings/default.py rename to castellum_core/castellum_core/castellum_core/settings.py index 65eaa4ba5a2d52ca2007090514272622b541e2ae..d084f5b53db136120b9e464636efa36855a60e79 100644 --- a/castellum_core/castellum_core/castellum_core/settings/default.py +++ b/castellum_core/castellum_core/castellum_core/settings.py @@ -1,14 +1,17 @@ import os +import ldap +from django_auth_ldap.config import LDAPSearch from django.utils import timezone from django.utils.translation import ugettext_lazy as _ +# adapt message classes for bootstrap +from django.contrib.messages import constants as messages -BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) ALLOWED_HOSTS = [] - # Application definition INSTALLED_APPS = [ @@ -133,10 +136,6 @@ NPM_FILE_PATTERNS = { 'bootstrap': ['dist/css/bootstrap.min.css'], } -# adapt message classes for bootstrap - -from django.contrib.messages import constants as messages - MESSAGE_TAGS = { messages.DEBUG: 'light', messages.INFO: 'info', @@ -223,7 +222,6 @@ LOGGING = { }, } - CASTELLUM_LOCK_USER_CONTACT = 'admin@example.com' CASTELLUM_LOCK_USER_NOTIFICATION_SUBJECT = _('[Castellum] Suspicious activity') CASTELLUM_LOCK_USER_NOTIFICATION_TEXT = _("""Dear {username}, @@ -232,3 +230,47 @@ your castellum account has been locked due to suspicious activity. Please contact {contact}. """) +DEBUG = os.environ.get('DEBUG', 'True') == 'True' + +SECRET_KEY = os.environ.get('SECRET_KEY', os.urandom(32)) + +if DEBUG: + # Database + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'castellum_core/db_default.sqlite3'), + }, + 'subject_management': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'castellum_core/db_subject_management.sqlite3'), + } + } + +else: + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': os.environ.get('DB_NAME_DEFAULT', ''), + 'USER': os.environ.get('DB_USER_DEFAULT', ''), + 'HOST': os.environ.get('DB_HOST_DEFAULT', ''), + }, + 'subject_management': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': os.environ.get('DB_NAME_SUBJECT_MANAGEMENT', ''), + 'USER': os.environ.get('DB_USER_SUBJECT_MANAGEMENT', ''), + 'HOST': os.environ.get('DB_HOST_SUBJECT_MANAGEMENT', ''), + } + } + +ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '127.0.0.1').split(",") + +# LDAP +# See https://django-auth-ldap.readthedocs.io/ +AUTHENTICATION_BACKENDS.append("django_auth_ldap.backend.LDAPBackend") + +AUTH_LDAP_SERVER_URI = os.environ.get('AUTH_LDAP_SERVER_URI', '') +AUTH_LDAP_BIND_DN = os.environ.get('AUTH_LDAP_BIND_ON', '') +AUTH_LDAP_BIND_PASSWORD = os.environ.get('AUTH_LDAP_BIND_PASSWORD', '') +AUTH_LDAP_USER_SEARCH = LDAPSearch(os.environ.get('AUTH_LDAP_SCOPE', ''), + ldap.SCOPE_SUBTREE, os.environ.get('AUTH_LDAP_PARAM', '')) diff --git a/castellum_core/castellum_core/castellum_core/settings/__init__.py b/castellum_core/castellum_core/castellum_core/settings/__init__.py deleted file mode 100644 index 79be19769ae97150245e7a86e93d6cf04eb2f7b0..0000000000000000000000000000000000000000 --- a/castellum_core/castellum_core/castellum_core/settings/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .development import * diff --git a/castellum_core/castellum_core/castellum_core/settings/development.py b/castellum_core/castellum_core/castellum_core/settings/development.py deleted file mode 100644 index c4579e987fa77a7014e176c5464964bb4a2954d5..0000000000000000000000000000000000000000 --- a/castellum_core/castellum_core/castellum_core/settings/development.py +++ /dev/null @@ -1,22 +0,0 @@ -from .default import * - - -SECRET_KEY = 'i#$kwk(s24ysn+l%+c!*z9u4+45)oex!-s#!bux#wf2pv2cc0d' - -DEBUG = True - - -# Database - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), - }, - 'subject_management': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'subject_management.sqlite3'), - }, -} - -EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000000000000000000000000000000000000..dd70ee3e7b483aa73a6dfcae911c7c2c8be7cc8c --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,30 @@ +version: '2' + +services: + db_default: + image: postgres + db_subject_management: + image: postgres + ldap: + container_name: ldap + image: osixia/openldap + ports: + - "389:389" + env_file: + - env + command: [--copy-service] + volumes: + - ./example_deployment/dummy_data.ldif:/container/service/slapd/assets/config/bootstrap/ldif/data.ldif + web: + build: castellum_core + environment: + - DJANGO_SETTINGS_MODULE=castellum_core.settings + - DEBUG=True + command: "uwsgi uwsgi.ini" + ports: + - "8080:8080" + env_file: + - env + depends_on: + - db + - ldap diff --git a/docker-compose.manage.yml b/docker-compose.manage.yml index d857fed9bcfbf90e751fcb671c21e81d21de5b9b..f3ab1d3f511bfe6c07fdd5d2c2fd43a0634f288b 100644 --- a/docker-compose.manage.yml +++ b/docker-compose.manage.yml @@ -6,10 +6,8 @@ services: migrate_default: build: castellum_core environment: - DJANGO_SETTINGS_MODULE: castellum_core.settings.example + DJANGO_SETTINGS_MODULE: castellum_core.settings command: "python3 castellum_core/manage.py migrate" - volumes: - - ./example_deployment/settings.py:/code/castellum_core/castellum_core/settings/example.py depends_on: - db_default @@ -26,9 +24,7 @@ services: createsuperuser: build: castellum_core environment: - DJANGO_SETTINGS_MODULE: castellum_core.settings.example - volumes: - - ./example_deployment/settings.py:/code/castellum_core/castellum_core/settings/example.py + DJANGO_SETTINGS_MODULE: castellum_core.settings command: "python3 castellum_core/manage.py create_castellum_admin" depends_on: - db_default diff --git a/docker-compose.yml b/docker-compose.yml index 202a7daaaa8ee5290709efc3e14e76e442a4972b..1a622d5828dcf05276d12b6418ec226ad5326cf5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,19 +10,20 @@ services: image: osixia/openldap ports: - "389:389" + env_file: + - env command: [--copy-service] volumes: - ./example_deployment/dummy_data.ldif:/container/service/slapd/assets/config/bootstrap/ldif/data.ldif web: build: castellum_core environment: - DJANGO_SETTINGS_MODULE: castellum_core.settings.example + DJANGO_SETTINGS_MODULE: castellum_core.settings command: "uwsgi uwsgi.ini" ports: - "8000:8000" - volumes: - - ./castellum_core:/code - - ./example_deployment/settings.py:/code/castellum_core/castellum_core/settings/example.py + env_file: + - env depends_on: - db_default - db_subject_management diff --git a/example_deployment/docker-compose.yml b/example_deployment/docker-compose.yml index 2138e166f81959939510deb5152fa4dc9bc2ea7e..f32e3cc0ae909d0f5a2e4dd7aa38ca146c346b09 100644 --- a/example_deployment/docker-compose.yml +++ b/example_deployment/docker-compose.yml @@ -20,8 +20,6 @@ services: command: "uwsgi uwsgi.ini" ports: - "8000:8000" - volumes: - - ./settings.py:/code/castellum_core/castellum_core/settings/example.py depends_on: - db_default - db_subject_management diff --git a/example_deployment/settings.py b/example_deployment/settings.py deleted file mode 100644 index c82359bc67015b37e8fb1434da30f9a0a0036dc5..0000000000000000000000000000000000000000 --- a/example_deployment/settings.py +++ /dev/null @@ -1,36 +0,0 @@ -import os - -import ldap -from django_auth_ldap.config import LDAPSearch - -from .default import * - - -# FIXME: These values need to be changed -SECRET_KEY = 'i#$kwk(s24ysn+l%+c!*z9u4+45)oex!-s#!bux#wf2pv2cc0d' - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql', - 'NAME': 'postgres', - 'USER': 'postgres', - 'HOST': 'db_default', - }, - 'subject_management': { - 'ENGINE': 'django.db.backends.postgresql', - 'NAME': 'postgres', - 'USER': 'postgres', - 'HOST': 'db_subject_management', - } -} - -ALLOWED_HOSTS = ['*'] - -# LDAP -# See https://django-auth-ldap.readthedocs.io/ -AUTHENTICATION_BACKENDS.append("django_auth_ldap.backend.LDAPBackend") - -AUTH_LDAP_SERVER_URI = 'ldap://ldap' -AUTH_LDAP_BIND_DN = 'cn=admin,dc=example,dc=org' -AUTH_LDAP_BIND_PASSWORD = 'admin' -AUTH_LDAP_USER_SEARCH = LDAPSearch('dc=example,dc=org', ldap.SCOPE_SUBTREE, '(uid=%(user)s)')