Fix move fuck up

This commit is contained in:
Götz 2019-04-13 00:23:46 +02:00
parent 0bd3020aee
commit be35b48292
20 changed files with 87 additions and 149 deletions

View File

@ -5,7 +5,7 @@ RUN apk upgrade --update && \
pip3 install -r /requirements.txt && rm /requirements.txt pip3 install -r /requirements.txt && rm /requirements.txt
WORKDIR /lama WORKDIR /lama
EXPOSE 80 EXPOSE 80
ADD ["src", "/lama"]
ENTRYPOINT ["python3", "manage.py"] ENTRYPOINT ["python3", "manage.py"]
ADD ["src", "/lama"]
CMD ["runserver", "0.0.0.0:80"] CMD ["runserver", "0.0.0.0:80"]

View File

@ -11,6 +11,7 @@ services:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
networks: networks:
- default
- pg_db - pg_db
env_file: env_file:
- production.env - production.env

View File

@ -6,7 +6,7 @@ SITE_NAME="LAMa"
SECRET_KEY=supersecret SECRET_KEY=supersecret
ALLOWED_HOSTS= ALLOWED_HOSTS=
DATABASE_HOST=dbzitate DATABASE_HOST=dblama
DATABASE_PORT=5432 DATABASE_PORT=5432
POSTGRES_USER=quote_man POSTGRES_USER=quote_man

View File

@ -2,4 +2,4 @@ from django.apps import AppConfig
class RdnHelperConfig(AppConfig): class RdnHelperConfig(AppConfig):
name = 'src.account_helper' name = 'account_helper'

View File

@ -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')

View File

@ -2,4 +2,4 @@ from django.apps import AppConfig
class AccountManagerConfig(AppConfig): class AccountManagerConfig(AppConfig):
name = 'src.account_manager' name = 'account_manager'

View File

@ -9,8 +9,8 @@ from django.core.exceptions import ObjectDoesNotExist
from django.db import IntegrityError from django.db import IntegrityError
from django.shortcuts import render, redirect, HttpResponse from django.shortcuts import render, redirect, HttpResponse
from src.account_helper import Realm from account_helper.models import Realm
from src.account_manager import realm_send_mail from account_manager.utils.mail_utils import realm_send_mail
from .forms import RealmAddForm, RealmUpdateForm from .forms import RealmAddForm, RealmUpdateForm
from .models import LdapGroup, LdapUser from .models import LdapGroup, LdapUser
from ldap import LDAPError from ldap import LDAPError

View File

@ -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)))

View File

@ -10,8 +10,8 @@ from django.db.models import Q
from ldapdb.models import fields as ldap_fields from ldapdb.models import fields as ldap_fields
from ldapdb.models.base import Model from ldapdb.models.base import Model
from src.core.settings import PASSWORD_RESET_TIMEOUT_DAYS from core.settings import PASSWORD_RESET_TIMEOUT_DAYS
from src.account_manager.utils.mail_utils import realm_send_mail from account_manager.utils.mail_utils import realm_send_mail
from multiprocessing import Process from multiprocessing import Process
from ldap import NO_SUCH_OBJECT, ALREADY_EXISTS from ldap import NO_SUCH_OBJECT, ALREADY_EXISTS
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist

View File

@ -1,6 +1,8 @@
from django.urls import path from django.urls import path
from . import main_views from . import main_views
from account_manager.views import user_views
from account_manager.views import group_views
urlpatterns = [ urlpatterns = [
# Realm # Realm
@ -13,59 +15,59 @@ urlpatterns = [
path('realm/<int:realm_id>/mail/test/', main_views.realm_email_test, name='realm-mail-test'), path('realm/<int:realm_id>/mail/test/', main_views.realm_email_test, name='realm-mail-test'),
# Realm User # Realm User
path('realm/<int:realm_id>/users/', src.account_manager.views.user_views.realm_user, name='realm-user-list'), path('realm/<int:realm_id>/users/', user_views.realm_user, name='realm-user-list'),
path('realm/<int:realm_id>/users/add/', src.account_manager.views.user_views.user_add, name='realm-user-add'), path('realm/<int:realm_id>/users/add/', user_views.user_add, name='realm-user-add'),
path('realm/<int:realm_id>/user/<str:user_dn>/', src.account_manager.views.user_views.realm_user_detail, path('realm/<int:realm_id>/user/<str:user_dn>/', user_views.realm_user_detail,
name='realm-user-detail'), name='realm-user-detail'),
path('realm/<int:realm_id>/user/<str:user_dn>/update/', src.account_manager.views.user_views.realm_user_update, path('realm/<int:realm_id>/user/<str:user_dn>/update/', user_views.realm_user_update,
name='realm-user-update'), name='realm-user-update'),
path('realm/<int:realm_id>/user/<str:user_dn>/group/update/', path('realm/<int:realm_id>/user/<str:user_dn>/group/update/',
src.account_manager.views.user_views.realm_user_group_update, user_views.realm_user_group_update,
name='realm-user-group-update'), name='realm-user-group-update'),
path('realm/<int:realm_id>/user/<str:user_dn>/group/update/add/', path('realm/<int:realm_id>/user/<str:user_dn>/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'), name='realm-user-group-update-add'),
path('realm/<int:realm_id>/user/<str:user_dn>/group/update/delete/', path('realm/<int:realm_id>/user/<str:user_dn>/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'), name='realm-user-group-update-delete'),
path('realm/<int:realm_id>/user/delete/single/<str:user_dn>/confirm/', path('realm/<int:realm_id>/user/delete/single/<str:user_dn>/confirm/',
src.account_manager.views.user_views.realm_user_delete_confirm, user_views.realm_user_delete_confirm,
name='realm-user-delete-confirm'), name='realm-user-delete-confirm'),
path('realm/<int:realm_id>/user/delete/single/<str:user_dn>/', path('realm/<int:realm_id>/user/delete/single/<str:user_dn>/',
src.account_manager.views.user_views.realm_user_delete, user_views.realm_user_delete,
name='realm-user-delete'), name='realm-user-delete'),
path('realm/<int:realm_id>/user/delete/multiple/confirm/', path('realm/<int:realm_id>/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'), name='realm-multiple-user-delete-confirm'),
path('realm/<int:realm_id>/user/delete/multiple/', src.account_manager.views.user_views.realm_multiple_user_delete, path('realm/<int:realm_id>/user/delete/multiple/', user_views.realm_multiple_user_delete,
name='realm-multiple-user-delete'), name='realm-multiple-user-delete'),
# Realm Group # Realm Group
path('realm/<int:realm_id>/groups/', src.account_manager.views.group_views.realm_groups, name='realm-group-list'), path('realm/<int:realm_id>/groups/', group_views.realm_groups, name='realm-group-list'),
path('realm/<int:realm_id>/groups/add/', src.account_manager.views.group_views.group_add, name='realm-group-add'), path('realm/<int:realm_id>/groups/add/', group_views.group_add, name='realm-group-add'),
path('realm/<int:realm_id>/group/<str:group_dn>/', src.account_manager.views.group_views.group_detail, path('realm/<int:realm_id>/group/<str:group_dn>/', group_views.group_detail,
name='realm-group-detail'), name='realm-group-detail'),
path('realm/<int:realm_id>/group/<str:group_dn>/update/', src.account_manager.views.group_views.group_update, path('realm/<int:realm_id>/group/<str:group_dn>/update/', group_views.group_update,
name='realm-group-update'), name='realm-group-update'),
path('realm/<int:realm_id>/group/<str:group_dn>/delete/confirm/', src.account_manager.views.group_views.group_delete_confirm, path('realm/<int:realm_id>/group/<str:group_dn>/delete/confirm/', group_views.group_delete_confirm,
name='realm-group-delete-confirm'), name='realm-group-delete-confirm'),
path('realm/<int:realm_id>/group/<str:group_dn>/delete/', src.account_manager.views.group_views.group_delete, path('realm/<int:realm_id>/group/<str:group_dn>/delete/', group_views.group_delete,
name='realm-group-delete'), name='realm-group-delete'),
# User # User
path('user/<str:user_dn>/update/realm/<int:realm_id>/', src.account_manager.views.user_views.user_update, path('user/<str:user_dn>/update/realm/<int:realm_id>/', user_views.user_update,
name='user-update'), name='user-update'),
path('user/<str:user_dn>/delete/realm/<int:realm_id>/confirm/', path('user/<str:user_dn>/delete/realm/<int:realm_id>/confirm/',
src.account_manager.views.user_views.user_delete_confirm, user_views.user_delete_confirm,
name='user-delete-confirm'), name='user-delete-confirm'),
path('user/<str:user_dn>/delete/realm/<int:realm_id>/', src.account_manager.views.user_views.user_delete, path('user/<str:user_dn>/delete/realm/<int:realm_id>/', user_views.user_delete,
name='user-delete'), name='user-delete'),
path('accounts/reset/<uidb64>/<token>/', src.account_manager.views.user_views.LdapPasswordResetConfirmView.as_view(), path('accounts/reset/<uidb64>/<token>/', user_views.LdapPasswordResetConfirmView.as_view(),
name='ldap_password_reset_confirm'), 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'), name='password_change'),
# Extra # Extra
path('permission-denied/', main_views.permission_denied, name='permission-denied'), path('permission-denied/', main_views.permission_denied, name='permission-denied'),
path('accounts/deleted/<int:realm_id>/', src.account_manager.views.user_views.user_deleted, name='account-deleted'), path('accounts/deleted/<int:realm_id>/', user_views.user_deleted, name='account-deleted'),
] ]

View File

@ -3,7 +3,7 @@ import logging
from django.core.mail import get_connection, send_mail from django.core.mail import get_connection, send_mail
from django.utils.html import strip_tags 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__) logger = logging.getLogger(__name__)

View File

@ -4,10 +4,10 @@ from django.contrib.auth.decorators import login_required
from django.db.models import Q from django.db.models import Q
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.http import HttpResponse from django.http import HttpResponse
from src.account_helper import Realm from account_helper.models import Realm
from src.account_manager import AddLDAPGroupForm from account_manager.forms import AddLDAPGroupForm
from src.account_manager.main_views import is_realm_admin from account_manager.main_views import is_realm_admin
from src.account_manager import LdapGroup, LdapUser from account_manager.models import LdapGroup, LdapUser
def protect_cross_realm_group_access(view_func): def protect_cross_realm_group_access(view_func):

View File

@ -5,11 +5,11 @@ from django.contrib.sites.shortcuts import get_current_site
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from ldap import ALREADY_EXISTS, OBJECT_CLASS_VIOLATION from ldap import ALREADY_EXISTS, OBJECT_CLASS_VIOLATION
from src.account_helper import Realm from account_helper.models import Realm
from src.account_manager import AddLDAPUserForm, UserDeleteListForm, UpdateLDAPUserForm, AdminUpdateLDAPUserForm, \ from account_manager.forms import AddLDAPUserForm, UserDeleteListForm, UpdateLDAPUserForm, AdminUpdateLDAPUserForm, \
UserGroupListForm UserGroupListForm
from src.account_manager.main_views import is_realm_admin from account_manager.main_views import is_realm_admin
from src.account_manager import LdapUser, LdapGroup from account_manager.models import LdapUser, LdapGroup
@login_required @login_required

View File

@ -43,7 +43,7 @@ MIDDLEWARE = [
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
] ]
ROOT_URLCONF = 'src.core.urls' ROOT_URLCONF = 'core.urls'
TEMPLATES = [ TEMPLATES = [
{ {

View File

@ -54,7 +54,7 @@ MIDDLEWARE = [
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
] ]
ROOT_URLCONF = 'src.core.urls' ROOT_URLCONF = 'core.urls'
TEMPLATES = [ TEMPLATES = [
{ {
@ -96,7 +96,7 @@ DATABASES = {
}, },
'default': { 'default': {
'ENGINE': 'django.db.backends.sqlite3', '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'] DATABASE_ROUTERS = ['ldapdb.router.Router']
@ -137,7 +137,7 @@ USE_TZ = True
STATIC_URL = '/static/' STATIC_URL = '/static/'
# STATIC_ROOT = 'static' # STATIC_ROOT = 'static'
STATICFILES_DIRS = ( 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 Config #
######################################################################################################################## ########################################################################################################################
LOGGING = { # LOGGING = {
'version': 1, # 'version': 1,
'disable_existing_loggers': False, # 'disable_existing_loggers': False,
'formatters': { # 'formatters': {
'default': { # 'default': {
'format': '%(asctime)s %(module)s [%(levelname)s]: %(message)s', # 'format': '%(asctime)s %(module)s [%(levelname)s]: %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S', # 'datefmt': '%Y-%m-%d %H:%M:%S',
} # }
}, # },
'handlers': { # 'handlers': {
'console': { # 'console': {
'class': 'logging.StreamHandler', # 'class': 'logging.StreamHandler',
'formatter': 'default', # 'formatter': 'default',
}, # },
'file': { # 'file': {
'class': 'logging.FileHandler', # 'class': 'logging.FileHandler',
'filename': '../logs/import_food.log', # 'filename': '../logs/import_food.log',
'formatter': 'default', # 'formatter': 'default',
}, # },
'mail_admins': { # 'mail_admins': {
'level': 'ERROR', # 'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler', # 'class': 'django.utils.log.AdminEmailHandler',
}, # },
'mail_admins_image_upload': { # 'mail_admins_image_upload': {
'level': 'INFO', # 'level': 'INFO',
'class': 'django.utils.log.AdminEmailHandler', # 'class': 'django.utils.log.AdminEmailHandler',
}, # },
}, # },
'loggers': { # 'loggers': {
'account_manager': { # 'account_manager': {
'handlers': ['console', 'file'], # 'handlers': ['console', 'file'],
'level': 'INFO', # 'level': 'INFO',
}, # },
'account_helper': { # 'account_helper': {
'handlers': ['console', 'file'], # 'handlers': ['console', 'file'],
'level': 'INFO', # 'level': 'INFO',
}, # },
}, # },
} # }

View File

@ -22,7 +22,7 @@ from .views import about
login_forbidden = user_passes_test(lambda u: u.is_anonymous(), '/') login_forbidden = user_passes_test(lambda u: u.is_anonymous(), '/')
urlpatterns = [ urlpatterns = [
path('', include('src.account_manager.urls')), path('', include('account_manager.urls')),
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('accounts/login/', auth_views.LoginView.as_view(redirect_authenticated_user=True), name='login'), path('accounts/login/', auth_views.LoginView.as_view(redirect_authenticated_user=True), name='login'),
path('about/', about, name='about'), path('about/', about, name='about'),