diff --git a/Dockerfile b/Dockerfile index bf3d80d..8384b1b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ RUN apk upgrade --update && \ pip3 install -r /requirements.txt && rm /requirements.txt WORKDIR /lama EXPOSE 80 -ADD ["src", "/lama"] ENTRYPOINT ["python3", "manage.py"] +ADD ["src", "/lama"] CMD ["runserver", "0.0.0.0:80"] \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index f575817..8c7b289 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -11,6 +11,7 @@ services: context: . dockerfile: Dockerfile networks: + - default - pg_db env_file: - production.env diff --git a/production.env b/production.env index f54a449..1c53838 100644 --- a/production.env +++ b/production.env @@ -6,7 +6,7 @@ SITE_NAME="LAMa" SECRET_KEY=supersecret ALLOWED_HOSTS= -DATABASE_HOST=dbzitate +DATABASE_HOST=dblama DATABASE_PORT=5432 POSTGRES_USER=quote_man diff --git a/src/account_helper/apps.py b/src/account_helper/apps.py index bf612f7..64c8df2 100644 --- a/src/account_helper/apps.py +++ b/src/account_helper/apps.py @@ -2,4 +2,4 @@ from django.apps import AppConfig class RdnHelperConfig(AppConfig): - name = 'src.account_helper' + name = 'account_helper' diff --git a/src/account_helper/management/__init__.py b/src/account_helper/management/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/account_helper/management/commands/__init__.py b/src/account_helper/management/commands/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/account_helper/management/commands/import_dns.py b/src/account_helper/management/commands/import_dns.py deleted file mode 100644 index 81aad7f..0000000 --- a/src/account_helper/management/commands/import_dns.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.core.management.base import BaseCommand -from src.account_helper import LdapGroupRDN, LdapUserRDN - -LDAP_OUS = ['ou=fs_wiai,ou=fachschaften', 'ou=fs_sowi,ou=fachschaften'] - - -class Command(BaseCommand): - help = 'Load Possible User Dns in LDAP' - - def handle(self, *args, **options): - added_groups_rdn = 0 - added_user_rdn = 0 - for ou in LDAP_OUS: - _, group_created = LdapGroupRDN.objects.get_or_create(rdn=f'ou=groups,{ou}') - _, user_created = LdapUserRDN.objects.get_or_create(rdn=f'ou=people,{ou}') - if group_created: - added_groups_rdn += 1 - if user_created: - added_user_rdn += 1 - - print(f'Added {added_user_rdn} user rdns\nAdded {added_groups_rdn} group rdns') diff --git a/src/account_manager/apps.py b/src/account_manager/apps.py index 5c4a881..8ecf6ac 100644 --- a/src/account_manager/apps.py +++ b/src/account_manager/apps.py @@ -2,4 +2,4 @@ from django.apps import AppConfig class AccountManagerConfig(AppConfig): - name = 'src.account_manager' + name = 'account_manager' diff --git a/src/account_manager/main_views.py b/src/account_manager/main_views.py index e06b1e1..09abcc7 100644 --- a/src/account_manager/main_views.py +++ b/src/account_manager/main_views.py @@ -9,8 +9,8 @@ from django.core.exceptions import ObjectDoesNotExist from django.db import IntegrityError from django.shortcuts import render, redirect, HttpResponse -from src.account_helper import Realm -from src.account_manager import realm_send_mail +from account_helper.models import Realm +from account_manager.utils.mail_utils import realm_send_mail from .forms import RealmAddForm, RealmUpdateForm from .models import LdapGroup, LdapUser from ldap import LDAPError diff --git a/src/account_manager/management/__init__.py b/src/account_manager/management/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/account_manager/management/commands/__init__.py b/src/account_manager/management/commands/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/account_manager/management/commands/import_ldap_user.py b/src/account_manager/management/commands/import_ldap_user.py deleted file mode 100644 index f53b1e4..0000000 --- a/src/account_manager/management/commands/import_ldap_user.py +++ /dev/null @@ -1,44 +0,0 @@ -from django.core.management.base import BaseCommand -from django.contrib.auth.models import User -import ldap -from src import core as settings - -LDAP_CONFIGS = [(settings.AUTH_LDAP_1_SERVER_URI, settings.AUTH_LDAP_1_USER_DN_TEMPLATE), - (settings.AUTH_LDAP_2_SERVER_URI, settings.AUTH_LDAP_2_USER_DN_TEMPLATE)] - - -class Command(BaseCommand): - help = 'Syncs LDAP users with Django DB' - - def handle(self, *args, **options): - for ldap_config in LDAP_CONFIGS: - ldap_server = ldap.initialize(ldap_config[0]) - ldap_dn = ldap_config[1].split(',') - ldap_dn.pop(0) - ldap_dn = ",".join(ldap_dn) - results = ldap_server.search_s(ldap_dn, ldap.SCOPE_SUBTREE, - "(objectClass=inetOrgPerson)") - - total_created = 0 - total = 0 - - for a, r in results: - username = r['uid'][0].decode('utf-8') # returns bytes by default so we need to decode to string. - first_name = r['cn'][0].decode('utf-8') - last_name = r['sn'][0].decode('utf-8') - # email = r['mail'][0].decode('utf-8') - - # Update the user -- this allows for name changes etc, using username as the key. - user, created = User.objects.update_or_create(username=username, - defaults={'first_name': first_name, - 'last_name': last_name}) - - total += 1 - - if created: - # Set an unusable password -- django-auth-ldap handles this, anyway. - user.set_unusable_password() - user.save() - total_created += 1 - - self.stdout.write(self.style.SUCCESS('Found {} user(s), {} new.'.format(total, total_created))) diff --git a/src/account_manager/models.py b/src/account_manager/models.py index 508c0f2..1e608ad 100644 --- a/src/account_manager/models.py +++ b/src/account_manager/models.py @@ -10,8 +10,8 @@ from django.db.models import Q from ldapdb.models import fields as ldap_fields from ldapdb.models.base import Model -from src.core.settings import PASSWORD_RESET_TIMEOUT_DAYS -from src.account_manager.utils.mail_utils import realm_send_mail +from core.settings import PASSWORD_RESET_TIMEOUT_DAYS +from account_manager.utils.mail_utils import realm_send_mail from multiprocessing import Process from ldap import NO_SUCH_OBJECT, ALREADY_EXISTS from django.core.exceptions import ObjectDoesNotExist diff --git a/src/account_manager/urls.py b/src/account_manager/urls.py index 2aa988f..5375fcb 100644 --- a/src/account_manager/urls.py +++ b/src/account_manager/urls.py @@ -1,6 +1,8 @@ from django.urls import path from . import main_views +from account_manager.views import user_views +from account_manager.views import group_views urlpatterns = [ # Realm @@ -13,59 +15,59 @@ urlpatterns = [ path('realm//mail/test/', main_views.realm_email_test, name='realm-mail-test'), # Realm User - path('realm//users/', src.account_manager.views.user_views.realm_user, name='realm-user-list'), - path('realm//users/add/', src.account_manager.views.user_views.user_add, name='realm-user-add'), - path('realm//user//', src.account_manager.views.user_views.realm_user_detail, + path('realm//users/', user_views.realm_user, name='realm-user-list'), + path('realm//users/add/', user_views.user_add, name='realm-user-add'), + path('realm//user//', user_views.realm_user_detail, name='realm-user-detail'), - path('realm//user//update/', src.account_manager.views.user_views.realm_user_update, + path('realm//user//update/', user_views.realm_user_update, name='realm-user-update'), path('realm//user//group/update/', - src.account_manager.views.user_views.realm_user_group_update, + user_views.realm_user_group_update, name='realm-user-group-update'), path('realm//user//group/update/add/', - src.account_manager.views.user_views.realm_user_group_update_add, + user_views.realm_user_group_update_add, name='realm-user-group-update-add'), path('realm//user//group/update/delete/', - src.account_manager.views.user_views.realm_user_group_update_delete, + user_views.realm_user_group_update_delete, name='realm-user-group-update-delete'), path('realm//user/delete/single//confirm/', - src.account_manager.views.user_views.realm_user_delete_confirm, + user_views.realm_user_delete_confirm, name='realm-user-delete-confirm'), path('realm//user/delete/single//', - src.account_manager.views.user_views.realm_user_delete, + user_views.realm_user_delete, name='realm-user-delete'), path('realm//user/delete/multiple/confirm/', - src.account_manager.views.user_views.realm_multiple_user_delete_confirm, + user_views.realm_multiple_user_delete_confirm, name='realm-multiple-user-delete-confirm'), - path('realm//user/delete/multiple/', src.account_manager.views.user_views.realm_multiple_user_delete, + path('realm//user/delete/multiple/', user_views.realm_multiple_user_delete, name='realm-multiple-user-delete'), # Realm Group - path('realm//groups/', src.account_manager.views.group_views.realm_groups, name='realm-group-list'), - path('realm//groups/add/', src.account_manager.views.group_views.group_add, name='realm-group-add'), - path('realm//group//', src.account_manager.views.group_views.group_detail, + path('realm//groups/', group_views.realm_groups, name='realm-group-list'), + path('realm//groups/add/', group_views.group_add, name='realm-group-add'), + path('realm//group//', group_views.group_detail, name='realm-group-detail'), - path('realm//group//update/', src.account_manager.views.group_views.group_update, + path('realm//group//update/', group_views.group_update, name='realm-group-update'), - path('realm//group//delete/confirm/', src.account_manager.views.group_views.group_delete_confirm, + path('realm//group//delete/confirm/', group_views.group_delete_confirm, name='realm-group-delete-confirm'), - path('realm//group//delete/', src.account_manager.views.group_views.group_delete, + path('realm//group//delete/', group_views.group_delete, name='realm-group-delete'), # User - path('user//update/realm//', src.account_manager.views.user_views.user_update, + path('user//update/realm//', user_views.user_update, name='user-update'), path('user//delete/realm//confirm/', - src.account_manager.views.user_views.user_delete_confirm, + user_views.user_delete_confirm, name='user-delete-confirm'), - path('user//delete/realm//', src.account_manager.views.user_views.user_delete, + path('user//delete/realm//', user_views.user_delete, name='user-delete'), - path('accounts/reset///', src.account_manager.views.user_views.LdapPasswordResetConfirmView.as_view(), + path('accounts/reset///', user_views.LdapPasswordResetConfirmView.as_view(), name='ldap_password_reset_confirm'), - path('accounts/password_change/', src.account_manager.views.user_views.LdapPasswordChangeView.as_view(), + path('accounts/password_change/', user_views.LdapPasswordChangeView.as_view(), name='password_change'), # Extra path('permission-denied/', main_views.permission_denied, name='permission-denied'), - path('accounts/deleted//', src.account_manager.views.user_views.user_deleted, name='account-deleted'), + path('accounts/deleted//', user_views.user_deleted, name='account-deleted'), ] diff --git a/src/account_manager/utils/mail_utils.py b/src/account_manager/utils/mail_utils.py index 09a5435..f165f40 100644 --- a/src/account_manager/utils/mail_utils.py +++ b/src/account_manager/utils/mail_utils.py @@ -3,7 +3,7 @@ import logging from django.core.mail import get_connection, send_mail from django.utils.html import strip_tags -from src.core import EMAIL_HOST, EMAIL_PORT, EMAIL_USE_SSL, EMAIL_USE_TLS +from core.settings import EMAIL_HOST, EMAIL_PORT, EMAIL_USE_SSL, EMAIL_USE_TLS logger = logging.getLogger(__name__) diff --git a/src/account_manager/views/group_views.py b/src/account_manager/views/group_views.py index 87daee2..18a10cf 100644 --- a/src/account_manager/views/group_views.py +++ b/src/account_manager/views/group_views.py @@ -4,10 +4,10 @@ from django.contrib.auth.decorators import login_required from django.db.models import Q from django.shortcuts import render, redirect from django.http import HttpResponse -from src.account_helper import Realm -from src.account_manager import AddLDAPGroupForm -from src.account_manager.main_views import is_realm_admin -from src.account_manager import LdapGroup, LdapUser +from account_helper.models import Realm +from account_manager.forms import AddLDAPGroupForm +from account_manager.main_views import is_realm_admin +from account_manager.models import LdapGroup, LdapUser def protect_cross_realm_group_access(view_func): diff --git a/src/account_manager/views/user_views.py b/src/account_manager/views/user_views.py index 22ed3f8..8e53d8a 100644 --- a/src/account_manager/views/user_views.py +++ b/src/account_manager/views/user_views.py @@ -5,11 +5,11 @@ from django.contrib.sites.shortcuts import get_current_site from django.core.exceptions import ObjectDoesNotExist from django.shortcuts import render, redirect from ldap import ALREADY_EXISTS, OBJECT_CLASS_VIOLATION -from src.account_helper import Realm -from src.account_manager import AddLDAPUserForm, UserDeleteListForm, UpdateLDAPUserForm, AdminUpdateLDAPUserForm, \ +from account_helper.models import Realm +from account_manager.forms import AddLDAPUserForm, UserDeleteListForm, UpdateLDAPUserForm, AdminUpdateLDAPUserForm, \ UserGroupListForm -from src.account_manager.main_views import is_realm_admin -from src.account_manager import LdapUser, LdapGroup +from account_manager.main_views import is_realm_admin +from account_manager.models import LdapUser, LdapGroup @login_required diff --git a/src/core/docker_settings.py b/src/core/docker_settings.py index 729d4b0..18676a4 100644 --- a/src/core/docker_settings.py +++ b/src/core/docker_settings.py @@ -43,7 +43,7 @@ MIDDLEWARE = [ 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] -ROOT_URLCONF = 'src.core.urls' +ROOT_URLCONF = 'core.urls' TEMPLATES = [ { diff --git a/src/core/settings.py b/src/core/settings.py index 7615ce4..6735421 100644 --- a/src/core/settings.py +++ b/src/core/settings.py @@ -54,7 +54,7 @@ MIDDLEWARE = [ 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] -ROOT_URLCONF = 'src.core.urls' +ROOT_URLCONF = 'core.urls' TEMPLATES = [ { @@ -96,7 +96,7 @@ DATABASES = { }, 'default': { 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, '../../db.sqlite3'), + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } DATABASE_ROUTERS = ['ldapdb.router.Router'] @@ -137,7 +137,7 @@ USE_TZ = True STATIC_URL = '/static/' # STATIC_ROOT = 'static' STATICFILES_DIRS = ( - os.path.join(BASE_DIR, '../../static/'), + os.path.join(BASE_DIR, 'static/'), ) ######################################################################################################################## @@ -190,42 +190,42 @@ SERVER_EMAIL = 'fachschaft-wiai.stuve@uni-bamberg.de' ######################################################################################################################## # Logging Config # ######################################################################################################################## -LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'formatters': { - 'default': { - 'format': '%(asctime)s %(module)s [%(levelname)s]: %(message)s', - 'datefmt': '%Y-%m-%d %H:%M:%S', - } - }, - 'handlers': { - 'console': { - 'class': 'logging.StreamHandler', - 'formatter': 'default', - }, - 'file': { - 'class': 'logging.FileHandler', - 'filename': '../logs/import_food.log', - 'formatter': 'default', - }, - 'mail_admins': { - 'level': 'ERROR', - 'class': 'django.utils.log.AdminEmailHandler', - }, - 'mail_admins_image_upload': { - 'level': 'INFO', - 'class': 'django.utils.log.AdminEmailHandler', - }, - }, - 'loggers': { - 'account_manager': { - 'handlers': ['console', 'file'], - 'level': 'INFO', - }, - 'account_helper': { - 'handlers': ['console', 'file'], - 'level': 'INFO', - }, - }, -} +# LOGGING = { +# 'version': 1, +# 'disable_existing_loggers': False, +# 'formatters': { +# 'default': { +# 'format': '%(asctime)s %(module)s [%(levelname)s]: %(message)s', +# 'datefmt': '%Y-%m-%d %H:%M:%S', +# } +# }, +# 'handlers': { +# 'console': { +# 'class': 'logging.StreamHandler', +# 'formatter': 'default', +# }, +# 'file': { +# 'class': 'logging.FileHandler', +# 'filename': '../logs/import_food.log', +# 'formatter': 'default', +# }, +# 'mail_admins': { +# 'level': 'ERROR', +# 'class': 'django.utils.log.AdminEmailHandler', +# }, +# 'mail_admins_image_upload': { +# 'level': 'INFO', +# 'class': 'django.utils.log.AdminEmailHandler', +# }, +# }, +# 'loggers': { +# 'account_manager': { +# 'handlers': ['console', 'file'], +# 'level': 'INFO', +# }, +# 'account_helper': { +# 'handlers': ['console', 'file'], +# 'level': 'INFO', +# }, +# }, +# } diff --git a/src/core/urls.py b/src/core/urls.py index aff8cd4..e10bcaf 100644 --- a/src/core/urls.py +++ b/src/core/urls.py @@ -22,7 +22,7 @@ from .views import about login_forbidden = user_passes_test(lambda u: u.is_anonymous(), '/') urlpatterns = [ - path('', include('src.account_manager.urls')), + path('', include('account_manager.urls')), path('admin/', admin.site.urls), path('accounts/login/', auth_views.LoginView.as_view(redirect_authenticated_user=True), name='login'), path('about/', about, name='about'),