From 0bd3020aee8015b63baccd1213a220431cd16dee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20G=C3=B6tz?= Date: Fri, 12 Apr 2019 23:30:27 +0200 Subject: [PATCH] Moved project to src --- Dockerfile | 11 ++ account_manager/urls.py | 73 ------- docker-compose.prod.yml | 27 +++ production.env | 33 ++++ requirements.txt | 1 + {account_helper => src}/__init__.py | 0 .../account_helper}/__init__.py | 0 .../account_helper}/admin.py | 0 .../account_helper}/apps.py | 2 +- .../account_helper/management}/__init__.py | 0 .../management/commands}/__init__.py | 0 .../management/commands/import_dns.py | 4 +- .../account_helper}/models.py | 0 .../account_helper}/tests.py | 0 .../account_helper}/views.py | 0 .../account_manager}/__init__.py | 0 .../account_manager}/admin.py | 0 .../account_manager}/apps.py | 2 +- .../account_manager}/forms.py | 0 .../account_manager}/main_views.py | 4 +- .../account_manager/management}/__init__.py | 0 .../management/commands}/__init__.py | 0 .../management/commands/import_ldap_user.py | 5 +- .../account_manager}/models.py | 5 +- .../account_manager}/tests.py | 0 src/account_manager/urls.py | 71 +++++++ .../account_manager/utils}/__init__.py | 0 .../account_manager}/utils/dbldap.py | 0 .../account_manager}/utils/mail_utils.py | 2 +- .../account_manager/views}/__init__.py | 0 .../account_manager}/views/group_views.py | 8 +- .../account_manager}/views/user_views.py | 8 +- src/core/__init__.py | 0 src/core/docker_settings.py | 185 ++++++++++++++++++ {core => src/core}/jinja2.py | 0 {core => src/core}/settings.py | 8 +- {core => src/core}/tokens.py | 0 {core => src/core}/urls.py | 2 +- {core => src/core}/views.py | 0 {core => src/core}/wsgi.py | 0 manage.py => src/manage.py | 0 .../static}/admin/css/autocomplete.css | 0 {static => src/static}/admin/css/base.css | 0 .../static}/admin/css/changelists.css | 0 .../static}/admin/css/dashboard.css | 0 {static => src/static}/admin/css/fonts.css | 0 {static => src/static}/admin/css/forms.css | 0 {static => src/static}/admin/css/login.css | 0 .../static}/admin/css/responsive.css | 0 .../static}/admin/css/responsive_rtl.css | 0 {static => src/static}/admin/css/rtl.css | 0 .../css/vendor/select2/LICENSE-SELECT2.md | 0 .../admin/css/vendor/select2/select2.css | 0 .../admin/css/vendor/select2/select2.min.css | 0 {static => src/static}/admin/css/widgets.css | 0 .../static}/admin/fonts/LICENSE.txt | 0 {static => src/static}/admin/fonts/README.txt | 0 .../admin/fonts/Roboto-Bold-webfont.woff | Bin .../admin/fonts/Roboto-Light-webfont.woff | Bin .../admin/fonts/Roboto-Regular-webfont.woff | Bin {static => src/static}/admin/img/LICENSE | 0 {static => src/static}/admin/img/README.txt | 0 .../static}/admin/img/calendar-icons.svg | 0 .../static}/admin/img/gis/move_vertex_off.svg | 0 .../static}/admin/img/gis/move_vertex_on.svg | 0 .../static}/admin/img/icon-addlink.svg | 0 .../static}/admin/img/icon-alert.svg | 0 .../static}/admin/img/icon-calendar.svg | 0 .../static}/admin/img/icon-changelink.svg | 0 .../static}/admin/img/icon-clock.svg | 0 .../static}/admin/img/icon-deletelink.svg | 0 {static => src/static}/admin/img/icon-no.svg | 0 .../static}/admin/img/icon-unknown-alt.svg | 0 .../static}/admin/img/icon-unknown.svg | 0 .../static}/admin/img/icon-viewlink.svg | 0 {static => src/static}/admin/img/icon-yes.svg | 0 .../static}/admin/img/inline-delete.svg | 0 {static => src/static}/admin/img/search.svg | 0 .../static}/admin/img/selector-icons.svg | 0 .../static}/admin/img/sorting-icons.svg | 0 .../static}/admin/img/tooltag-add.svg | 0 .../static}/admin/img/tooltag-arrowright.svg | 0 {static => src/static}/admin/js/SelectBox.js | 0 .../static}/admin/js/SelectFilter2.js | 0 {static => src/static}/admin/js/actions.js | 0 .../static}/admin/js/actions.min.js | 0 .../admin/js/admin/DateTimeShortcuts.js | 0 .../admin/js/admin/RelatedObjectLookups.js | 0 .../static}/admin/js/autocomplete.js | 0 {static => src/static}/admin/js/calendar.js | 0 {static => src/static}/admin/js/cancel.js | 0 .../static}/admin/js/change_form.js | 0 {static => src/static}/admin/js/collapse.js | 0 .../static}/admin/js/collapse.min.js | 0 {static => src/static}/admin/js/core.js | 0 {static => src/static}/admin/js/inlines.js | 0 .../static}/admin/js/inlines.min.js | 0 .../static}/admin/js/jquery.init.js | 0 .../static}/admin/js/popup_response.js | 0 .../static}/admin/js/prepopulate.js | 0 .../static}/admin/js/prepopulate.min.js | 0 .../static}/admin/js/prepopulate_init.js | 0 {static => src/static}/admin/js/timeparse.js | 0 {static => src/static}/admin/js/urlify.js | 0 .../admin/js/vendor/jquery/LICENSE.txt | 0 .../static}/admin/js/vendor/jquery/jquery.js | 0 .../admin/js/vendor/jquery/jquery.min.js | 0 .../admin/js/vendor/select2/LICENSE.md | 0 .../admin/js/vendor/select2/i18n/ar.js | 0 .../admin/js/vendor/select2/i18n/az.js | 0 .../admin/js/vendor/select2/i18n/bg.js | 0 .../admin/js/vendor/select2/i18n/ca.js | 0 .../admin/js/vendor/select2/i18n/cs.js | 0 .../admin/js/vendor/select2/i18n/da.js | 0 .../admin/js/vendor/select2/i18n/de.js | 0 .../admin/js/vendor/select2/i18n/el.js | 0 .../admin/js/vendor/select2/i18n/en.js | 0 .../admin/js/vendor/select2/i18n/es.js | 0 .../admin/js/vendor/select2/i18n/et.js | 0 .../admin/js/vendor/select2/i18n/eu.js | 0 .../admin/js/vendor/select2/i18n/fa.js | 0 .../admin/js/vendor/select2/i18n/fi.js | 0 .../admin/js/vendor/select2/i18n/fr.js | 0 .../admin/js/vendor/select2/i18n/gl.js | 0 .../admin/js/vendor/select2/i18n/he.js | 0 .../admin/js/vendor/select2/i18n/hi.js | 0 .../admin/js/vendor/select2/i18n/hr.js | 0 .../admin/js/vendor/select2/i18n/hu.js | 0 .../admin/js/vendor/select2/i18n/id.js | 0 .../admin/js/vendor/select2/i18n/is.js | 0 .../admin/js/vendor/select2/i18n/it.js | 0 .../admin/js/vendor/select2/i18n/ja.js | 0 .../admin/js/vendor/select2/i18n/km.js | 0 .../admin/js/vendor/select2/i18n/ko.js | 0 .../admin/js/vendor/select2/i18n/lt.js | 0 .../admin/js/vendor/select2/i18n/lv.js | 0 .../admin/js/vendor/select2/i18n/mk.js | 0 .../admin/js/vendor/select2/i18n/ms.js | 0 .../admin/js/vendor/select2/i18n/nb.js | 0 .../admin/js/vendor/select2/i18n/nl.js | 0 .../admin/js/vendor/select2/i18n/pl.js | 0 .../admin/js/vendor/select2/i18n/pt-BR.js | 0 .../admin/js/vendor/select2/i18n/pt.js | 0 .../admin/js/vendor/select2/i18n/ro.js | 0 .../admin/js/vendor/select2/i18n/ru.js | 0 .../admin/js/vendor/select2/i18n/sk.js | 0 .../admin/js/vendor/select2/i18n/sr-Cyrl.js | 0 .../admin/js/vendor/select2/i18n/sr.js | 0 .../admin/js/vendor/select2/i18n/sv.js | 0 .../admin/js/vendor/select2/i18n/th.js | 0 .../admin/js/vendor/select2/i18n/tr.js | 0 .../admin/js/vendor/select2/i18n/uk.js | 0 .../admin/js/vendor/select2/i18n/vi.js | 0 .../admin/js/vendor/select2/i18n/zh-CN.js | 0 .../admin/js/vendor/select2/i18n/zh-TW.js | 0 .../admin/js/vendor/select2/select2.full.js | 0 .../js/vendor/select2/select2.full.min.js | 0 .../admin/js/vendor/xregexp/LICENSE.txt | 0 .../admin/js/vendor/xregexp/xregexp.js | 0 .../admin/js/vendor/xregexp/xregexp.min.js | 0 .../static}/css/floating_labels.css | 0 {static => src/static}/images/lama.svg | 0 {static => src/static}/js/main.js | 0 .../css/bootstrap-grid.css | 0 .../css/bootstrap-grid.css.map | 0 .../css/bootstrap-grid.min.css | 0 .../css/bootstrap-grid.min.css.map | 0 .../css/bootstrap-reboot.css | 0 .../css/bootstrap-reboot.css.map | 0 .../css/bootstrap-reboot.min.css | 0 .../css/bootstrap-reboot.min.css.map | 0 .../bootstrap-4.3.1-dist/css/bootstrap.css | 0 .../css/bootstrap.css.map | 0 .../css/bootstrap.min.css | 0 .../css/bootstrap.min.css.map | 0 .../js/bootstrap.bundle.js | 0 .../js/bootstrap.bundle.js.map | 0 .../js/bootstrap.bundle.min.js | 0 .../js/bootstrap.bundle.min.js.map | 0 .../libs/bootstrap-4.3.1-dist/js/bootstrap.js | 0 .../bootstrap-4.3.1-dist/js/bootstrap.js.map | 0 .../bootstrap-4.3.1-dist/js/bootstrap.min.js | 0 .../js/bootstrap.min.js.map | 0 {templates => src/templates}/about.jinja2 | 0 {templates => src/templates}/base.jinja2 | 0 .../templates}/base_admin.jinja2 | 0 .../templates}/group/group_add.jinja2 | 0 .../group/group_confirm_delete.jinja2 | 0 .../templates}/group/group_detail.jinja2 | 0 .../templates}/macros/form_macros.jinja2 | 0 .../templates}/macros/item_form_macros.jinja2 | 0 .../templates}/macros/utils_macros.jinja2 | 0 .../templates}/permission_denied.jinja2 | 0 .../templates}/realm/realm_add.jinja2 | 0 .../templates}/realm/realm_add_failed.jinja2 | 0 .../realm/realm_confirm_delete.jinja2 | 0 .../realm/realm_create_update_mail.jinja2 | 0 .../templates}/realm/realm_detailed.jinja2 | 0 .../templates}/realm/realm_groups.jinja2 | 0 .../templates}/realm/realm_home.jinja2 | 0 .../templates}/realm/realm_update.jinja2 | 0 .../templates}/realm/realm_user.jinja2 | 0 .../realm/realm_user_multiple_delete.jinja2 | 0 .../realm_user_multiple_delete_confirm.jinja2 | 0 .../templates}/registration/login.html | 0 .../registration/password_change_done.html | 0 .../registration/password_change_form.html | 0 .../registration/password_reset_complete.html | 0 .../registration/password_reset_confirm.html | 0 .../registration/password_reset_done.html | 0 .../registration/password_reset_email.html | 0 .../registration/password_reset_form.html | 0 .../registration/welcome_email.jinja2 | 0 .../templates}/user/account_deleted.jinja2 | 0 .../templates}/user/realm_user_add.jinja2 | 0 .../templates}/user/realm_user_detail.jinja2 | 0 .../user/realm_user_update_groups.jinja2 | 0 .../user/user_confirm_delete.jinja2 | 0 .../templates}/user/user_detail.jinja2 | 0 219 files changed, 352 insertions(+), 99 deletions(-) create mode 100644 Dockerfile delete mode 100644 account_manager/urls.py create mode 100644 docker-compose.prod.yml create mode 100644 production.env rename {account_helper => src}/__init__.py (100%) rename {account_helper/management => src/account_helper}/__init__.py (100%) rename {account_helper => src/account_helper}/admin.py (100%) rename {account_helper => src/account_helper}/apps.py (68%) rename {account_helper/management/commands => src/account_helper/management}/__init__.py (100%) rename {account_manager => src/account_helper/management/commands}/__init__.py (100%) rename {account_helper => src/account_helper}/management/commands/import_dns.py (84%) rename {account_helper => src/account_helper}/models.py (100%) rename {account_helper => src/account_helper}/tests.py (100%) rename {account_helper => src/account_helper}/views.py (100%) rename {account_manager/management => src/account_manager}/__init__.py (100%) rename {account_manager => src/account_manager}/admin.py (100%) rename {account_manager => src/account_manager}/apps.py (69%) rename {account_manager => src/account_manager}/forms.py (100%) rename {account_manager => src/account_manager}/main_views.py (99%) rename {account_manager/management/commands => src/account_manager/management}/__init__.py (100%) rename {account_manager/utils => src/account_manager/management/commands}/__init__.py (100%) rename {account_manager => src/account_manager}/management/commands/import_ldap_user.py (92%) rename {account_manager => src/account_manager}/models.py (96%) rename {account_manager => src/account_manager}/tests.py (100%) create mode 100644 src/account_manager/urls.py rename {account_manager/views => src/account_manager/utils}/__init__.py (100%) rename {account_manager => src/account_manager}/utils/dbldap.py (100%) rename {account_manager => src/account_manager}/utils/mail_utils.py (90%) rename {core => src/account_manager/views}/__init__.py (100%) rename {account_manager => src/account_manager}/views/group_views.py (96%) rename {account_manager => src/account_manager}/views/user_views.py (98%) create mode 100644 src/core/__init__.py create mode 100644 src/core/docker_settings.py rename {core => src/core}/jinja2.py (100%) rename {core => src/core}/settings.py (97%) rename {core => src/core}/tokens.py (100%) rename {core => src/core}/urls.py (96%) rename {core => src/core}/views.py (100%) rename {core => src/core}/wsgi.py (100%) rename manage.py => src/manage.py (100%) rename {static => src/static}/admin/css/autocomplete.css (100%) rename {static => src/static}/admin/css/base.css (100%) rename {static => src/static}/admin/css/changelists.css (100%) rename {static => src/static}/admin/css/dashboard.css (100%) rename {static => src/static}/admin/css/fonts.css (100%) rename {static => src/static}/admin/css/forms.css (100%) rename {static => src/static}/admin/css/login.css (100%) rename {static => src/static}/admin/css/responsive.css (100%) rename {static => src/static}/admin/css/responsive_rtl.css (100%) rename {static => src/static}/admin/css/rtl.css (100%) rename {static => src/static}/admin/css/vendor/select2/LICENSE-SELECT2.md (100%) rename {static => src/static}/admin/css/vendor/select2/select2.css (100%) rename {static => src/static}/admin/css/vendor/select2/select2.min.css (100%) rename {static => src/static}/admin/css/widgets.css (100%) rename {static => src/static}/admin/fonts/LICENSE.txt (100%) rename {static => src/static}/admin/fonts/README.txt (100%) rename {static => src/static}/admin/fonts/Roboto-Bold-webfont.woff (100%) rename {static => src/static}/admin/fonts/Roboto-Light-webfont.woff (100%) rename {static => src/static}/admin/fonts/Roboto-Regular-webfont.woff (100%) rename {static => src/static}/admin/img/LICENSE (100%) rename {static => src/static}/admin/img/README.txt (100%) rename {static => src/static}/admin/img/calendar-icons.svg (100%) rename {static => src/static}/admin/img/gis/move_vertex_off.svg (100%) rename {static => src/static}/admin/img/gis/move_vertex_on.svg (100%) rename {static => src/static}/admin/img/icon-addlink.svg (100%) rename {static => src/static}/admin/img/icon-alert.svg (100%) rename {static => src/static}/admin/img/icon-calendar.svg (100%) rename {static => src/static}/admin/img/icon-changelink.svg (100%) rename {static => src/static}/admin/img/icon-clock.svg (100%) rename {static => src/static}/admin/img/icon-deletelink.svg (100%) rename {static => src/static}/admin/img/icon-no.svg (100%) rename {static => src/static}/admin/img/icon-unknown-alt.svg (100%) rename {static => src/static}/admin/img/icon-unknown.svg (100%) rename {static => src/static}/admin/img/icon-viewlink.svg (100%) rename {static => src/static}/admin/img/icon-yes.svg (100%) rename {static => src/static}/admin/img/inline-delete.svg (100%) rename {static => src/static}/admin/img/search.svg (100%) rename {static => src/static}/admin/img/selector-icons.svg (100%) rename {static => src/static}/admin/img/sorting-icons.svg (100%) rename {static => src/static}/admin/img/tooltag-add.svg (100%) rename {static => src/static}/admin/img/tooltag-arrowright.svg (100%) rename {static => src/static}/admin/js/SelectBox.js (100%) rename {static => src/static}/admin/js/SelectFilter2.js (100%) rename {static => src/static}/admin/js/actions.js (100%) rename {static => src/static}/admin/js/actions.min.js (100%) rename {static => src/static}/admin/js/admin/DateTimeShortcuts.js (100%) rename {static => src/static}/admin/js/admin/RelatedObjectLookups.js (100%) rename {static => src/static}/admin/js/autocomplete.js (100%) rename {static => src/static}/admin/js/calendar.js (100%) rename {static => src/static}/admin/js/cancel.js (100%) rename {static => src/static}/admin/js/change_form.js (100%) rename {static => src/static}/admin/js/collapse.js (100%) rename {static => src/static}/admin/js/collapse.min.js (100%) rename {static => src/static}/admin/js/core.js (100%) rename {static => src/static}/admin/js/inlines.js (100%) rename {static => src/static}/admin/js/inlines.min.js (100%) rename {static => src/static}/admin/js/jquery.init.js (100%) rename {static => src/static}/admin/js/popup_response.js (100%) rename {static => src/static}/admin/js/prepopulate.js (100%) rename {static => src/static}/admin/js/prepopulate.min.js (100%) rename {static => src/static}/admin/js/prepopulate_init.js (100%) rename {static => src/static}/admin/js/timeparse.js (100%) rename {static => src/static}/admin/js/urlify.js (100%) rename {static => src/static}/admin/js/vendor/jquery/LICENSE.txt (100%) rename {static => src/static}/admin/js/vendor/jquery/jquery.js (100%) rename {static => src/static}/admin/js/vendor/jquery/jquery.min.js (100%) rename {static => src/static}/admin/js/vendor/select2/LICENSE.md (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/ar.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/az.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/bg.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/ca.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/cs.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/da.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/de.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/el.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/en.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/es.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/et.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/eu.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/fa.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/fi.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/fr.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/gl.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/he.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/hi.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/hr.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/hu.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/id.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/is.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/it.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/ja.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/km.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/ko.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/lt.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/lv.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/mk.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/ms.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/nb.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/nl.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/pl.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/pt-BR.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/pt.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/ro.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/ru.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/sk.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/sr-Cyrl.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/sr.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/sv.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/th.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/tr.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/uk.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/vi.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/zh-CN.js (100%) rename {static => src/static}/admin/js/vendor/select2/i18n/zh-TW.js (100%) rename {static => src/static}/admin/js/vendor/select2/select2.full.js (100%) rename {static => src/static}/admin/js/vendor/select2/select2.full.min.js (100%) rename {static => src/static}/admin/js/vendor/xregexp/LICENSE.txt (100%) rename {static => src/static}/admin/js/vendor/xregexp/xregexp.js (100%) rename {static => src/static}/admin/js/vendor/xregexp/xregexp.min.js (100%) rename {static => src/static}/css/floating_labels.css (100%) rename {static => src/static}/images/lama.svg (100%) rename {static => src/static}/js/main.js (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.css (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.css.map (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.min.css (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.min.css.map (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.css (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.css.map (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.min.css (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.min.css.map (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/css/bootstrap.css (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/css/bootstrap.css.map (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/css/bootstrap.min.css (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/css/bootstrap.min.css.map (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.js (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.js.map (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js.map (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/js/bootstrap.js (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/js/bootstrap.js.map (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/js/bootstrap.min.js (100%) rename {static => src/static}/libs/bootstrap-4.3.1-dist/js/bootstrap.min.js.map (100%) rename {templates => src/templates}/about.jinja2 (100%) rename {templates => src/templates}/base.jinja2 (100%) rename {templates => src/templates}/base_admin.jinja2 (100%) rename {templates => src/templates}/group/group_add.jinja2 (100%) rename {templates => src/templates}/group/group_confirm_delete.jinja2 (100%) rename {templates => src/templates}/group/group_detail.jinja2 (100%) rename {templates => src/templates}/macros/form_macros.jinja2 (100%) rename {templates => src/templates}/macros/item_form_macros.jinja2 (100%) rename {templates => src/templates}/macros/utils_macros.jinja2 (100%) rename {templates => src/templates}/permission_denied.jinja2 (100%) rename {templates => src/templates}/realm/realm_add.jinja2 (100%) rename {templates => src/templates}/realm/realm_add_failed.jinja2 (100%) rename {templates => src/templates}/realm/realm_confirm_delete.jinja2 (100%) rename {templates => src/templates}/realm/realm_create_update_mail.jinja2 (100%) rename {templates => src/templates}/realm/realm_detailed.jinja2 (100%) rename {templates => src/templates}/realm/realm_groups.jinja2 (100%) rename {templates => src/templates}/realm/realm_home.jinja2 (100%) rename {templates => src/templates}/realm/realm_update.jinja2 (100%) rename {templates => src/templates}/realm/realm_user.jinja2 (100%) rename {templates => src/templates}/realm/realm_user_multiple_delete.jinja2 (100%) rename {templates => src/templates}/realm/realm_user_multiple_delete_confirm.jinja2 (100%) rename {templates => src/templates}/registration/login.html (100%) rename {templates => src/templates}/registration/password_change_done.html (100%) rename {templates => src/templates}/registration/password_change_form.html (100%) rename {templates => src/templates}/registration/password_reset_complete.html (100%) rename {templates => src/templates}/registration/password_reset_confirm.html (100%) rename {templates => src/templates}/registration/password_reset_done.html (100%) rename {templates => src/templates}/registration/password_reset_email.html (100%) rename {templates => src/templates}/registration/password_reset_form.html (100%) rename {templates => src/templates}/registration/welcome_email.jinja2 (100%) rename {templates => src/templates}/user/account_deleted.jinja2 (100%) rename {templates => src/templates}/user/realm_user_add.jinja2 (100%) rename {templates => src/templates}/user/realm_user_detail.jinja2 (100%) rename {templates => src/templates}/user/realm_user_update_groups.jinja2 (100%) rename {templates => src/templates}/user/user_confirm_delete.jinja2 (100%) rename {templates => src/templates}/user/user_detail.jinja2 (100%) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..bf3d80d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM alpine:3.9 +ADD ["requirements.txt", "/requirements.txt"] +RUN apk upgrade --update && \ + apk add --update python3 build-base openldap-dev python3-dev py3-psycopg2 && \ + pip3 install -r /requirements.txt && rm /requirements.txt +WORKDIR /lama +EXPOSE 80 +ADD ["src", "/lama"] + +ENTRYPOINT ["python3", "manage.py"] +CMD ["runserver", "0.0.0.0:80"] \ No newline at end of file diff --git a/account_manager/urls.py b/account_manager/urls.py deleted file mode 100644 index b058943..0000000 --- a/account_manager/urls.py +++ /dev/null @@ -1,73 +0,0 @@ -from django.urls import path - -import account_manager.views.group_views -import account_manager.views.user_views -from . import main_views - -urlpatterns = [ - # Realm - path('', main_views.realm_list, name='realm-home'), - path('realm/add/', main_views.realm_add, name='realm-add'), - path('realm//', main_views.realm_detail, name='realm-detail'), - path('realm//update/', main_views.realm_update, name='realm-update'), - path('realm//delete/confirm/', main_views.realm_delete_confirm, name='realm-delete-confirm'), - path('realm//delete/', main_views.realm_delete, name='realm-delete'), - path('realm//mail/test/', main_views.realm_email_test, name='realm-mail-test'), - - # Realm User - path('realm//users/', account_manager.views.user_views.realm_user, name='realm-user-list'), - path('realm//users/add/', account_manager.views.user_views.user_add, name='realm-user-add'), - path('realm//user//', account_manager.views.user_views.realm_user_detail, - name='realm-user-detail'), - path('realm//user//update/', account_manager.views.user_views.realm_user_update, - name='realm-user-update'), - path('realm//user//group/update/', - account_manager.views.user_views.realm_user_group_update, - name='realm-user-group-update'), - path('realm//user//group/update/add/', - account_manager.views.user_views.realm_user_group_update_add, - name='realm-user-group-update-add'), - path('realm//user//group/update/delete/', - account_manager.views.user_views.realm_user_group_update_delete, - name='realm-user-group-update-delete'), - path('realm//user/delete/single//confirm/', - account_manager.views.user_views.realm_user_delete_confirm, - name='realm-user-delete-confirm'), - path('realm//user/delete/single//', - account_manager.views.user_views.realm_user_delete, - name='realm-user-delete'), - path('realm//user/delete/multiple/confirm/', - account_manager.views.user_views.realm_multiple_user_delete_confirm, - name='realm-multiple-user-delete-confirm'), - path('realm//user/delete/multiple/', account_manager.views.user_views.realm_multiple_user_delete, - name='realm-multiple-user-delete'), - - # Realm Group - path('realm//groups/', account_manager.views.group_views.realm_groups, name='realm-group-list'), - path('realm//groups/add/', account_manager.views.group_views.group_add, name='realm-group-add'), - path('realm//group//', account_manager.views.group_views.group_detail, - name='realm-group-detail'), - path('realm//group//update/', account_manager.views.group_views.group_update, - name='realm-group-update'), - path('realm//group//delete/confirm/', account_manager.views.group_views.group_delete_confirm, - name='realm-group-delete-confirm'), - path('realm//group//delete/', account_manager.views.group_views.group_delete, - name='realm-group-delete'), - - # User - path('user//update/realm//', account_manager.views.user_views.user_update, - name='user-update'), - path('user//delete/realm//confirm/', - account_manager.views.user_views.user_delete_confirm, - name='user-delete-confirm'), - path('user//delete/realm//', account_manager.views.user_views.user_delete, - name='user-delete'), - path('accounts/reset///', account_manager.views.user_views.LdapPasswordResetConfirmView.as_view(), - name='ldap_password_reset_confirm'), - path('accounts/password_change/', account_manager.views.user_views.LdapPasswordChangeView.as_view(), - name='password_change'), - - # Extra - path('permission-denied/', main_views.permission_denied, name='permission-denied'), - path('accounts/deleted//', account_manager.views.user_views.user_deleted, name='account-deleted'), -] diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..f575817 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,27 @@ +version: "3" + +networks: + pg_db: + internal: true + +services: + lama: + image: lama:0.1 + build: + context: . + dockerfile: Dockerfile + networks: + - pg_db + env_file: + - production.env + ports: + - 8888:80 + + dblama: + image: postgres:11.2-alpine + networks: + - pg_db + volumes: + - ./data/pgdata/:/var/lib/postgresql/data/ + env_file: + - production.env \ No newline at end of file diff --git a/production.env b/production.env new file mode 100644 index 0000000..f54a449 --- /dev/null +++ b/production.env @@ -0,0 +1,33 @@ +DJANGO_SETTINGS_MODULE=core.docker_settings +DOMAIN=example.de + +SITE_NAME="LAMa" + +SECRET_KEY=supersecret +ALLOWED_HOSTS= + +DATABASE_HOST=dbzitate +DATABASE_PORT=5432 + +POSTGRES_USER=quote_man +POSTGRES_PASSWORD=secret + +DEBUG=False + +LDAP_SERVER_URI="ldap://localhost:1389" +LDAP_BIND_DN="cn=admin,dc=example,dc=de" +LDAP_BIND_PASSWORD="secret" + +LDAP_USER_ENTRY="ou=persons,dc=example,dc=de" +LDAP_USER_SELECTOR="(cn=%(user)s)" + +LDAP_GROUP_ENTRY='ou=groups,dc=example,dc=de' +LDAP_GROUP_SELECTOR='(objectClass=groupOfNames)' +LDAP_GROUP_NAME_ATTR="cn" + +EMAIL_HOST=smtp.uni-bamberg.de +EMAIL_PORT=587 +EMAIL_USE_TLS=False +EMAIL_USE_SSL=False +DEFAULT_FROM_EMAIL= +SERVER_EMAIL= \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index e21cfea..e5c675f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ Django==2.1.7 python-ldap==3.2.0 +django-auth-ldap==1.7.0 django-ldapdb==1.3.0 Jinja2==2.10 \ No newline at end of file diff --git a/account_helper/__init__.py b/src/__init__.py similarity index 100% rename from account_helper/__init__.py rename to src/__init__.py diff --git a/account_helper/management/__init__.py b/src/account_helper/__init__.py similarity index 100% rename from account_helper/management/__init__.py rename to src/account_helper/__init__.py diff --git a/account_helper/admin.py b/src/account_helper/admin.py similarity index 100% rename from account_helper/admin.py rename to src/account_helper/admin.py diff --git a/account_helper/apps.py b/src/account_helper/apps.py similarity index 68% rename from account_helper/apps.py rename to src/account_helper/apps.py index 64c8df2..bf612f7 100644 --- a/account_helper/apps.py +++ b/src/account_helper/apps.py @@ -2,4 +2,4 @@ from django.apps import AppConfig class RdnHelperConfig(AppConfig): - name = 'account_helper' + name = 'src.account_helper' diff --git a/account_helper/management/commands/__init__.py b/src/account_helper/management/__init__.py similarity index 100% rename from account_helper/management/commands/__init__.py rename to src/account_helper/management/__init__.py diff --git a/account_manager/__init__.py b/src/account_helper/management/commands/__init__.py similarity index 100% rename from account_manager/__init__.py rename to src/account_helper/management/commands/__init__.py diff --git a/account_helper/management/commands/import_dns.py b/src/account_helper/management/commands/import_dns.py similarity index 84% rename from account_helper/management/commands/import_dns.py rename to src/account_helper/management/commands/import_dns.py index a844396..81aad7f 100644 --- a/account_helper/management/commands/import_dns.py +++ b/src/account_helper/management/commands/import_dns.py @@ -1,5 +1,5 @@ -from django.core.management.base import BaseCommand, CommandError -from account_helper.models import LdapGroupRDN, LdapUserRDN +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'] diff --git a/account_helper/models.py b/src/account_helper/models.py similarity index 100% rename from account_helper/models.py rename to src/account_helper/models.py diff --git a/account_helper/tests.py b/src/account_helper/tests.py similarity index 100% rename from account_helper/tests.py rename to src/account_helper/tests.py diff --git a/account_helper/views.py b/src/account_helper/views.py similarity index 100% rename from account_helper/views.py rename to src/account_helper/views.py diff --git a/account_manager/management/__init__.py b/src/account_manager/__init__.py similarity index 100% rename from account_manager/management/__init__.py rename to src/account_manager/__init__.py diff --git a/account_manager/admin.py b/src/account_manager/admin.py similarity index 100% rename from account_manager/admin.py rename to src/account_manager/admin.py diff --git a/account_manager/apps.py b/src/account_manager/apps.py similarity index 69% rename from account_manager/apps.py rename to src/account_manager/apps.py index 8ecf6ac..5c4a881 100644 --- a/account_manager/apps.py +++ b/src/account_manager/apps.py @@ -2,4 +2,4 @@ from django.apps import AppConfig class AccountManagerConfig(AppConfig): - name = 'account_manager' + name = 'src.account_manager' diff --git a/account_manager/forms.py b/src/account_manager/forms.py similarity index 100% rename from account_manager/forms.py rename to src/account_manager/forms.py diff --git a/account_manager/main_views.py b/src/account_manager/main_views.py similarity index 99% rename from account_manager/main_views.py rename to src/account_manager/main_views.py index 09abcc7..e06b1e1 100644 --- a/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 account_helper.models import Realm -from account_manager.utils.mail_utils import realm_send_mail +from src.account_helper import Realm +from src.account_manager import realm_send_mail from .forms import RealmAddForm, RealmUpdateForm from .models import LdapGroup, LdapUser from ldap import LDAPError diff --git a/account_manager/management/commands/__init__.py b/src/account_manager/management/__init__.py similarity index 100% rename from account_manager/management/commands/__init__.py rename to src/account_manager/management/__init__.py diff --git a/account_manager/utils/__init__.py b/src/account_manager/management/commands/__init__.py similarity index 100% rename from account_manager/utils/__init__.py rename to src/account_manager/management/commands/__init__.py diff --git a/account_manager/management/commands/import_ldap_user.py b/src/account_manager/management/commands/import_ldap_user.py similarity index 92% rename from account_manager/management/commands/import_ldap_user.py rename to src/account_manager/management/commands/import_ldap_user.py index 351852b..f53b1e4 100644 --- a/account_manager/management/commands/import_ldap_user.py +++ b/src/account_manager/management/commands/import_ldap_user.py @@ -1,8 +1,7 @@ -from django.core.management.base import BaseCommand, CommandError +from django.core.management.base import BaseCommand from django.contrib.auth.models import User -from account_manager.models import UserProfile import ldap -import core.settings as settings +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)] diff --git a/account_manager/models.py b/src/account_manager/models.py similarity index 96% rename from account_manager/models.py rename to src/account_manager/models.py index 125d066..508c0f2 100644 --- a/account_manager/models.py +++ b/src/account_manager/models.py @@ -10,12 +10,11 @@ from django.db.models import Q from ldapdb.models import fields as ldap_fields from ldapdb.models.base import Model -from core.settings import PASSWORD_RESET_TIMEOUT_DAYS -from account_manager.utils.mail_utils import realm_send_mail +from src.core.settings import PASSWORD_RESET_TIMEOUT_DAYS +from src.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 -from account_manager.utils.dbldap import get_filterstr class LdapUser(Model): diff --git a/account_manager/tests.py b/src/account_manager/tests.py similarity index 100% rename from account_manager/tests.py rename to src/account_manager/tests.py diff --git a/src/account_manager/urls.py b/src/account_manager/urls.py new file mode 100644 index 0000000..2aa988f --- /dev/null +++ b/src/account_manager/urls.py @@ -0,0 +1,71 @@ +from django.urls import path + +from . import main_views + +urlpatterns = [ + # Realm + path('', main_views.realm_list, name='realm-home'), + path('realm/add/', main_views.realm_add, name='realm-add'), + path('realm//', main_views.realm_detail, name='realm-detail'), + path('realm//update/', main_views.realm_update, name='realm-update'), + path('realm//delete/confirm/', main_views.realm_delete_confirm, name='realm-delete-confirm'), + path('realm//delete/', main_views.realm_delete, name='realm-delete'), + 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, + name='realm-user-detail'), + path('realm//user//update/', src.account_manager.views.user_views.realm_user_update, + name='realm-user-update'), + path('realm//user//group/update/', + src.account_manager.views.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, + name='realm-user-group-update-add'), + path('realm//user//group/update/delete/', + src.account_manager.views.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, + name='realm-user-delete-confirm'), + path('realm//user/delete/single//', + src.account_manager.views.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, + name='realm-multiple-user-delete-confirm'), + path('realm//user/delete/multiple/', src.account_manager.views.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, + name='realm-group-detail'), + path('realm//group//update/', src.account_manager.views.group_views.group_update, + name='realm-group-update'), + path('realm//group//delete/confirm/', src.account_manager.views.group_views.group_delete_confirm, + name='realm-group-delete-confirm'), + path('realm//group//delete/', src.account_manager.views.group_views.group_delete, + name='realm-group-delete'), + + # User + path('user//update/realm//', src.account_manager.views.user_views.user_update, + name='user-update'), + path('user//delete/realm//confirm/', + src.account_manager.views.user_views.user_delete_confirm, + name='user-delete-confirm'), + path('user//delete/realm//', src.account_manager.views.user_views.user_delete, + name='user-delete'), + path('accounts/reset///', src.account_manager.views.user_views.LdapPasswordResetConfirmView.as_view(), + name='ldap_password_reset_confirm'), + path('accounts/password_change/', src.account_manager.views.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'), +] diff --git a/account_manager/views/__init__.py b/src/account_manager/utils/__init__.py similarity index 100% rename from account_manager/views/__init__.py rename to src/account_manager/utils/__init__.py diff --git a/account_manager/utils/dbldap.py b/src/account_manager/utils/dbldap.py similarity index 100% rename from account_manager/utils/dbldap.py rename to src/account_manager/utils/dbldap.py diff --git a/account_manager/utils/mail_utils.py b/src/account_manager/utils/mail_utils.py similarity index 90% rename from account_manager/utils/mail_utils.py rename to src/account_manager/utils/mail_utils.py index f165f40..09a5435 100644 --- a/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 core.settings import EMAIL_HOST, EMAIL_PORT, EMAIL_USE_SSL, EMAIL_USE_TLS +from src.core import EMAIL_HOST, EMAIL_PORT, EMAIL_USE_SSL, EMAIL_USE_TLS logger = logging.getLogger(__name__) diff --git a/core/__init__.py b/src/account_manager/views/__init__.py similarity index 100% rename from core/__init__.py rename to src/account_manager/views/__init__.py diff --git a/account_manager/views/group_views.py b/src/account_manager/views/group_views.py similarity index 96% rename from account_manager/views/group_views.py rename to src/account_manager/views/group_views.py index 18a10cf..87daee2 100644 --- a/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 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 +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 def protect_cross_realm_group_access(view_func): diff --git a/account_manager/views/user_views.py b/src/account_manager/views/user_views.py similarity index 98% rename from account_manager/views/user_views.py rename to src/account_manager/views/user_views.py index 8e53d8a..22ed3f8 100644 --- a/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 account_helper.models import Realm -from account_manager.forms import AddLDAPUserForm, UserDeleteListForm, UpdateLDAPUserForm, AdminUpdateLDAPUserForm, \ +from src.account_helper import Realm +from src.account_manager import AddLDAPUserForm, UserDeleteListForm, UpdateLDAPUserForm, AdminUpdateLDAPUserForm, \ UserGroupListForm -from account_manager.main_views import is_realm_admin -from account_manager.models import LdapUser, LdapGroup +from src.account_manager.main_views import is_realm_admin +from src.account_manager import LdapUser, LdapGroup @login_required diff --git a/src/core/__init__.py b/src/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/core/docker_settings.py b/src/core/docker_settings.py new file mode 100644 index 0000000..729d4b0 --- /dev/null +++ b/src/core/docker_settings.py @@ -0,0 +1,185 @@ +""" +Django settings for core project. + +Generated by 'django-admin startproject' using Django 2.1.7. + +For more information on this file, see +https://docs.djangoproject.com/en/2.1/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/2.1/ref/settings/ +""" + +import os +import ldap +from django_auth_ldap.config import LDAPSearch, GroupOfNamesType + +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DOMAIN = os.environ['DOMAIN'] +SITE_NAME = os.environ['SITE_NAME'] +SECRET_KEY = os.environ['SECRET_KEY'] +DEBUG = bool(os.environ.get('DEBUG', False)) +ALLOWED_HOSTS = os.environ['ALLOWED_HOSTS'].split() + +# Application definition +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'account_manager', + 'account_helper', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'src.core.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.jinja2.Jinja2', + 'DIRS': [ + 'templates', + ], + 'APP_DIRS': True, + 'OPTIONS': { + 'environment': 'core.jinja2.environment' + }, + }, + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': ['templates/admin', ], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'core.wsgi.application' + +# Database +# https://docs.djangoproject.com/en/2.1/ref/settings/#databases + +DATABASES = { + 'ldap': { + 'ENGINE': 'ldapdb.backends.ldap', + 'NAME': os.environ['LDAP_SERVER_URI'], + 'USER': os.environ.get('LDAP_ADMIN_USER_NAME', ''), + 'PASSWORD': os.environ.get('LDAP_ADMIN_USER_PASSWORD', ''), + }, + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': os.environ.get('POSTGRES_USER', ''), + 'USER': os.environ.get('POSTGRES_USER', ''), + 'PASSWORD': os.environ.get('POSTGRES_PASSWORD', ''), + 'HOST': os.environ.get('DATABASE_HOST', ''), + 'PORT': os.environ.get('DATABASE_PORT', ''), + } +} + +DATABASE_ROUTERS = ['ldapdb.router.Router'] +# Password validation +# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + +# Internationalization +# https://docs.djangoproject.com/en/2.1/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/2.1/howto/static-files/ + +STATIC_URL = '/static/' +# STATIC_ROOT = 'static' +STATICFILES_DIRS = ( + os.path.join(BASE_DIR, '../../static/'), +) + +######################################################################################################################## +# LDAP Config # +######################################################################################################################## + +AUTHENTICATION_BACKENDS = [ + 'multiple_ldap_backends.ldap.LDAPBackend1', + 'multiple_ldap_backends.ldap.LDAPBackend2', + 'django.contrib.auth.backends.ModelBackend', +] + +AUTH_LDAP_SERVER_URI = os.environ['LDAP_SERVER_URI'] +# AUTH_LDAP_USER_DN_TEMPLATE = "uid=%(user)s,ou=people,ou=fs_wiai,ou=fachschaften,dc=stuve,dc=de" +AUTH_LDAP_USER_SEARCH = LDAPSearch(os.environ['LDAP_USER_ENTRY'], ldap.SCOPE_SUBTREE, + os.environ['LDAP_USER_SELECTOR']) +AUTH_LDAP_GROUP_SEARCH = LDAPSearch( + os.environ['LDAP_GROUP_ENTRY'], + ldap.SCOPE_SUBTREE, + os.environ['LDAP_GROUP_SELECTOR'], +) +AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr=os.environ['LDAP_GROUP_NAME_ATTR']) +AUTH_LDAP_MIRROR_GROUPS = True + +AUTH_LDAP_USER_ATTR_MAP = { + 'first_name': 'cn', + 'last_name': 'sn', + 'email': 'mail', +} +AUTH_PROFILE_MODULE = 'account_manager.UserProfile' + +######################################################################################################################## +# EMAIL Config # +######################################################################################################################## +# EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend' +# EMAIL_FILE_PATH = os.path.join(BASE_DIR, "sent_emails") +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +EMAIL_TIMEOUT = 15 +EMAIL_HOST = os.environ['EMAIL_HOST'] +EMAIL_PORT = os.environ['EMAIL_PORT'] +EMAIL_USE_TLS = bool(os.environ.get('EMAIL_USE_TLS', False)) +EMAIL_USE_SSL = bool(os.environ.get('EMAIL_USE_SSL', False)) +DEFAULT_FROM_EMAIL = os.environ['DEFAULT_FROM_EMAIL'] +SERVER_EMAIL = os.environ['SERVER_EMAIL'] + +######################################################################################################################## +# Logging Config # +######################################################################################################################## +LOGIN_URL = 'login' +LOGIN_REDIRECT_URL = 'realm-home' +PASSWORD_RESET_TIMEOUT_DAYS = 3 diff --git a/core/jinja2.py b/src/core/jinja2.py similarity index 100% rename from core/jinja2.py rename to src/core/jinja2.py diff --git a/core/settings.py b/src/core/settings.py similarity index 97% rename from core/settings.py rename to src/core/settings.py index 3eac23e..7615ce4 100644 --- a/core/settings.py +++ b/src/core/settings.py @@ -54,7 +54,7 @@ MIDDLEWARE = [ 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] -ROOT_URLCONF = 'core.urls' +ROOT_URLCONF = 'src.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/'), ) ######################################################################################################################## @@ -206,7 +206,7 @@ LOGGING = { }, 'file': { 'class': 'logging.FileHandler', - 'filename': './logs/import_food.log', + 'filename': '../logs/import_food.log', 'formatter': 'default', }, 'mail_admins': { diff --git a/core/tokens.py b/src/core/tokens.py similarity index 100% rename from core/tokens.py rename to src/core/tokens.py diff --git a/core/urls.py b/src/core/urls.py similarity index 96% rename from core/urls.py rename to src/core/urls.py index e10bcaf..aff8cd4 100644 --- a/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('account_manager.urls')), + path('', include('src.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'), diff --git a/core/views.py b/src/core/views.py similarity index 100% rename from core/views.py rename to src/core/views.py diff --git a/core/wsgi.py b/src/core/wsgi.py similarity index 100% rename from core/wsgi.py rename to src/core/wsgi.py diff --git a/manage.py b/src/manage.py similarity index 100% rename from manage.py rename to src/manage.py diff --git a/static/admin/css/autocomplete.css b/src/static/admin/css/autocomplete.css similarity index 100% rename from static/admin/css/autocomplete.css rename to src/static/admin/css/autocomplete.css diff --git a/static/admin/css/base.css b/src/static/admin/css/base.css similarity index 100% rename from static/admin/css/base.css rename to src/static/admin/css/base.css diff --git a/static/admin/css/changelists.css b/src/static/admin/css/changelists.css similarity index 100% rename from static/admin/css/changelists.css rename to src/static/admin/css/changelists.css diff --git a/static/admin/css/dashboard.css b/src/static/admin/css/dashboard.css similarity index 100% rename from static/admin/css/dashboard.css rename to src/static/admin/css/dashboard.css diff --git a/static/admin/css/fonts.css b/src/static/admin/css/fonts.css similarity index 100% rename from static/admin/css/fonts.css rename to src/static/admin/css/fonts.css diff --git a/static/admin/css/forms.css b/src/static/admin/css/forms.css similarity index 100% rename from static/admin/css/forms.css rename to src/static/admin/css/forms.css diff --git a/static/admin/css/login.css b/src/static/admin/css/login.css similarity index 100% rename from static/admin/css/login.css rename to src/static/admin/css/login.css diff --git a/static/admin/css/responsive.css b/src/static/admin/css/responsive.css similarity index 100% rename from static/admin/css/responsive.css rename to src/static/admin/css/responsive.css diff --git a/static/admin/css/responsive_rtl.css b/src/static/admin/css/responsive_rtl.css similarity index 100% rename from static/admin/css/responsive_rtl.css rename to src/static/admin/css/responsive_rtl.css diff --git a/static/admin/css/rtl.css b/src/static/admin/css/rtl.css similarity index 100% rename from static/admin/css/rtl.css rename to src/static/admin/css/rtl.css diff --git a/static/admin/css/vendor/select2/LICENSE-SELECT2.md b/src/static/admin/css/vendor/select2/LICENSE-SELECT2.md similarity index 100% rename from static/admin/css/vendor/select2/LICENSE-SELECT2.md rename to src/static/admin/css/vendor/select2/LICENSE-SELECT2.md diff --git a/static/admin/css/vendor/select2/select2.css b/src/static/admin/css/vendor/select2/select2.css similarity index 100% rename from static/admin/css/vendor/select2/select2.css rename to src/static/admin/css/vendor/select2/select2.css diff --git a/static/admin/css/vendor/select2/select2.min.css b/src/static/admin/css/vendor/select2/select2.min.css similarity index 100% rename from static/admin/css/vendor/select2/select2.min.css rename to src/static/admin/css/vendor/select2/select2.min.css diff --git a/static/admin/css/widgets.css b/src/static/admin/css/widgets.css similarity index 100% rename from static/admin/css/widgets.css rename to src/static/admin/css/widgets.css diff --git a/static/admin/fonts/LICENSE.txt b/src/static/admin/fonts/LICENSE.txt similarity index 100% rename from static/admin/fonts/LICENSE.txt rename to src/static/admin/fonts/LICENSE.txt diff --git a/static/admin/fonts/README.txt b/src/static/admin/fonts/README.txt similarity index 100% rename from static/admin/fonts/README.txt rename to src/static/admin/fonts/README.txt diff --git a/static/admin/fonts/Roboto-Bold-webfont.woff b/src/static/admin/fonts/Roboto-Bold-webfont.woff similarity index 100% rename from static/admin/fonts/Roboto-Bold-webfont.woff rename to src/static/admin/fonts/Roboto-Bold-webfont.woff diff --git a/static/admin/fonts/Roboto-Light-webfont.woff b/src/static/admin/fonts/Roboto-Light-webfont.woff similarity index 100% rename from static/admin/fonts/Roboto-Light-webfont.woff rename to src/static/admin/fonts/Roboto-Light-webfont.woff diff --git a/static/admin/fonts/Roboto-Regular-webfont.woff b/src/static/admin/fonts/Roboto-Regular-webfont.woff similarity index 100% rename from static/admin/fonts/Roboto-Regular-webfont.woff rename to src/static/admin/fonts/Roboto-Regular-webfont.woff diff --git a/static/admin/img/LICENSE b/src/static/admin/img/LICENSE similarity index 100% rename from static/admin/img/LICENSE rename to src/static/admin/img/LICENSE diff --git a/static/admin/img/README.txt b/src/static/admin/img/README.txt similarity index 100% rename from static/admin/img/README.txt rename to src/static/admin/img/README.txt diff --git a/static/admin/img/calendar-icons.svg b/src/static/admin/img/calendar-icons.svg similarity index 100% rename from static/admin/img/calendar-icons.svg rename to src/static/admin/img/calendar-icons.svg diff --git a/static/admin/img/gis/move_vertex_off.svg b/src/static/admin/img/gis/move_vertex_off.svg similarity index 100% rename from static/admin/img/gis/move_vertex_off.svg rename to src/static/admin/img/gis/move_vertex_off.svg diff --git a/static/admin/img/gis/move_vertex_on.svg b/src/static/admin/img/gis/move_vertex_on.svg similarity index 100% rename from static/admin/img/gis/move_vertex_on.svg rename to src/static/admin/img/gis/move_vertex_on.svg diff --git a/static/admin/img/icon-addlink.svg b/src/static/admin/img/icon-addlink.svg similarity index 100% rename from static/admin/img/icon-addlink.svg rename to src/static/admin/img/icon-addlink.svg diff --git a/static/admin/img/icon-alert.svg b/src/static/admin/img/icon-alert.svg similarity index 100% rename from static/admin/img/icon-alert.svg rename to src/static/admin/img/icon-alert.svg diff --git a/static/admin/img/icon-calendar.svg b/src/static/admin/img/icon-calendar.svg similarity index 100% rename from static/admin/img/icon-calendar.svg rename to src/static/admin/img/icon-calendar.svg diff --git a/static/admin/img/icon-changelink.svg b/src/static/admin/img/icon-changelink.svg similarity index 100% rename from static/admin/img/icon-changelink.svg rename to src/static/admin/img/icon-changelink.svg diff --git a/static/admin/img/icon-clock.svg b/src/static/admin/img/icon-clock.svg similarity index 100% rename from static/admin/img/icon-clock.svg rename to src/static/admin/img/icon-clock.svg diff --git a/static/admin/img/icon-deletelink.svg b/src/static/admin/img/icon-deletelink.svg similarity index 100% rename from static/admin/img/icon-deletelink.svg rename to src/static/admin/img/icon-deletelink.svg diff --git a/static/admin/img/icon-no.svg b/src/static/admin/img/icon-no.svg similarity index 100% rename from static/admin/img/icon-no.svg rename to src/static/admin/img/icon-no.svg diff --git a/static/admin/img/icon-unknown-alt.svg b/src/static/admin/img/icon-unknown-alt.svg similarity index 100% rename from static/admin/img/icon-unknown-alt.svg rename to src/static/admin/img/icon-unknown-alt.svg diff --git a/static/admin/img/icon-unknown.svg b/src/static/admin/img/icon-unknown.svg similarity index 100% rename from static/admin/img/icon-unknown.svg rename to src/static/admin/img/icon-unknown.svg diff --git a/static/admin/img/icon-viewlink.svg b/src/static/admin/img/icon-viewlink.svg similarity index 100% rename from static/admin/img/icon-viewlink.svg rename to src/static/admin/img/icon-viewlink.svg diff --git a/static/admin/img/icon-yes.svg b/src/static/admin/img/icon-yes.svg similarity index 100% rename from static/admin/img/icon-yes.svg rename to src/static/admin/img/icon-yes.svg diff --git a/static/admin/img/inline-delete.svg b/src/static/admin/img/inline-delete.svg similarity index 100% rename from static/admin/img/inline-delete.svg rename to src/static/admin/img/inline-delete.svg diff --git a/static/admin/img/search.svg b/src/static/admin/img/search.svg similarity index 100% rename from static/admin/img/search.svg rename to src/static/admin/img/search.svg diff --git a/static/admin/img/selector-icons.svg b/src/static/admin/img/selector-icons.svg similarity index 100% rename from static/admin/img/selector-icons.svg rename to src/static/admin/img/selector-icons.svg diff --git a/static/admin/img/sorting-icons.svg b/src/static/admin/img/sorting-icons.svg similarity index 100% rename from static/admin/img/sorting-icons.svg rename to src/static/admin/img/sorting-icons.svg diff --git a/static/admin/img/tooltag-add.svg b/src/static/admin/img/tooltag-add.svg similarity index 100% rename from static/admin/img/tooltag-add.svg rename to src/static/admin/img/tooltag-add.svg diff --git a/static/admin/img/tooltag-arrowright.svg b/src/static/admin/img/tooltag-arrowright.svg similarity index 100% rename from static/admin/img/tooltag-arrowright.svg rename to src/static/admin/img/tooltag-arrowright.svg diff --git a/static/admin/js/SelectBox.js b/src/static/admin/js/SelectBox.js similarity index 100% rename from static/admin/js/SelectBox.js rename to src/static/admin/js/SelectBox.js diff --git a/static/admin/js/SelectFilter2.js b/src/static/admin/js/SelectFilter2.js similarity index 100% rename from static/admin/js/SelectFilter2.js rename to src/static/admin/js/SelectFilter2.js diff --git a/static/admin/js/actions.js b/src/static/admin/js/actions.js similarity index 100% rename from static/admin/js/actions.js rename to src/static/admin/js/actions.js diff --git a/static/admin/js/actions.min.js b/src/static/admin/js/actions.min.js similarity index 100% rename from static/admin/js/actions.min.js rename to src/static/admin/js/actions.min.js diff --git a/static/admin/js/admin/DateTimeShortcuts.js b/src/static/admin/js/admin/DateTimeShortcuts.js similarity index 100% rename from static/admin/js/admin/DateTimeShortcuts.js rename to src/static/admin/js/admin/DateTimeShortcuts.js diff --git a/static/admin/js/admin/RelatedObjectLookups.js b/src/static/admin/js/admin/RelatedObjectLookups.js similarity index 100% rename from static/admin/js/admin/RelatedObjectLookups.js rename to src/static/admin/js/admin/RelatedObjectLookups.js diff --git a/static/admin/js/autocomplete.js b/src/static/admin/js/autocomplete.js similarity index 100% rename from static/admin/js/autocomplete.js rename to src/static/admin/js/autocomplete.js diff --git a/static/admin/js/calendar.js b/src/static/admin/js/calendar.js similarity index 100% rename from static/admin/js/calendar.js rename to src/static/admin/js/calendar.js diff --git a/static/admin/js/cancel.js b/src/static/admin/js/cancel.js similarity index 100% rename from static/admin/js/cancel.js rename to src/static/admin/js/cancel.js diff --git a/static/admin/js/change_form.js b/src/static/admin/js/change_form.js similarity index 100% rename from static/admin/js/change_form.js rename to src/static/admin/js/change_form.js diff --git a/static/admin/js/collapse.js b/src/static/admin/js/collapse.js similarity index 100% rename from static/admin/js/collapse.js rename to src/static/admin/js/collapse.js diff --git a/static/admin/js/collapse.min.js b/src/static/admin/js/collapse.min.js similarity index 100% rename from static/admin/js/collapse.min.js rename to src/static/admin/js/collapse.min.js diff --git a/static/admin/js/core.js b/src/static/admin/js/core.js similarity index 100% rename from static/admin/js/core.js rename to src/static/admin/js/core.js diff --git a/static/admin/js/inlines.js b/src/static/admin/js/inlines.js similarity index 100% rename from static/admin/js/inlines.js rename to src/static/admin/js/inlines.js diff --git a/static/admin/js/inlines.min.js b/src/static/admin/js/inlines.min.js similarity index 100% rename from static/admin/js/inlines.min.js rename to src/static/admin/js/inlines.min.js diff --git a/static/admin/js/jquery.init.js b/src/static/admin/js/jquery.init.js similarity index 100% rename from static/admin/js/jquery.init.js rename to src/static/admin/js/jquery.init.js diff --git a/static/admin/js/popup_response.js b/src/static/admin/js/popup_response.js similarity index 100% rename from static/admin/js/popup_response.js rename to src/static/admin/js/popup_response.js diff --git a/static/admin/js/prepopulate.js b/src/static/admin/js/prepopulate.js similarity index 100% rename from static/admin/js/prepopulate.js rename to src/static/admin/js/prepopulate.js diff --git a/static/admin/js/prepopulate.min.js b/src/static/admin/js/prepopulate.min.js similarity index 100% rename from static/admin/js/prepopulate.min.js rename to src/static/admin/js/prepopulate.min.js diff --git a/static/admin/js/prepopulate_init.js b/src/static/admin/js/prepopulate_init.js similarity index 100% rename from static/admin/js/prepopulate_init.js rename to src/static/admin/js/prepopulate_init.js diff --git a/static/admin/js/timeparse.js b/src/static/admin/js/timeparse.js similarity index 100% rename from static/admin/js/timeparse.js rename to src/static/admin/js/timeparse.js diff --git a/static/admin/js/urlify.js b/src/static/admin/js/urlify.js similarity index 100% rename from static/admin/js/urlify.js rename to src/static/admin/js/urlify.js diff --git a/static/admin/js/vendor/jquery/LICENSE.txt b/src/static/admin/js/vendor/jquery/LICENSE.txt similarity index 100% rename from static/admin/js/vendor/jquery/LICENSE.txt rename to src/static/admin/js/vendor/jquery/LICENSE.txt diff --git a/static/admin/js/vendor/jquery/jquery.js b/src/static/admin/js/vendor/jquery/jquery.js similarity index 100% rename from static/admin/js/vendor/jquery/jquery.js rename to src/static/admin/js/vendor/jquery/jquery.js diff --git a/static/admin/js/vendor/jquery/jquery.min.js b/src/static/admin/js/vendor/jquery/jquery.min.js similarity index 100% rename from static/admin/js/vendor/jquery/jquery.min.js rename to src/static/admin/js/vendor/jquery/jquery.min.js diff --git a/static/admin/js/vendor/select2/LICENSE.md b/src/static/admin/js/vendor/select2/LICENSE.md similarity index 100% rename from static/admin/js/vendor/select2/LICENSE.md rename to src/static/admin/js/vendor/select2/LICENSE.md diff --git a/static/admin/js/vendor/select2/i18n/ar.js b/src/static/admin/js/vendor/select2/i18n/ar.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ar.js rename to src/static/admin/js/vendor/select2/i18n/ar.js diff --git a/static/admin/js/vendor/select2/i18n/az.js b/src/static/admin/js/vendor/select2/i18n/az.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/az.js rename to src/static/admin/js/vendor/select2/i18n/az.js diff --git a/static/admin/js/vendor/select2/i18n/bg.js b/src/static/admin/js/vendor/select2/i18n/bg.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/bg.js rename to src/static/admin/js/vendor/select2/i18n/bg.js diff --git a/static/admin/js/vendor/select2/i18n/ca.js b/src/static/admin/js/vendor/select2/i18n/ca.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ca.js rename to src/static/admin/js/vendor/select2/i18n/ca.js diff --git a/static/admin/js/vendor/select2/i18n/cs.js b/src/static/admin/js/vendor/select2/i18n/cs.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/cs.js rename to src/static/admin/js/vendor/select2/i18n/cs.js diff --git a/static/admin/js/vendor/select2/i18n/da.js b/src/static/admin/js/vendor/select2/i18n/da.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/da.js rename to src/static/admin/js/vendor/select2/i18n/da.js diff --git a/static/admin/js/vendor/select2/i18n/de.js b/src/static/admin/js/vendor/select2/i18n/de.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/de.js rename to src/static/admin/js/vendor/select2/i18n/de.js diff --git a/static/admin/js/vendor/select2/i18n/el.js b/src/static/admin/js/vendor/select2/i18n/el.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/el.js rename to src/static/admin/js/vendor/select2/i18n/el.js diff --git a/static/admin/js/vendor/select2/i18n/en.js b/src/static/admin/js/vendor/select2/i18n/en.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/en.js rename to src/static/admin/js/vendor/select2/i18n/en.js diff --git a/static/admin/js/vendor/select2/i18n/es.js b/src/static/admin/js/vendor/select2/i18n/es.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/es.js rename to src/static/admin/js/vendor/select2/i18n/es.js diff --git a/static/admin/js/vendor/select2/i18n/et.js b/src/static/admin/js/vendor/select2/i18n/et.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/et.js rename to src/static/admin/js/vendor/select2/i18n/et.js diff --git a/static/admin/js/vendor/select2/i18n/eu.js b/src/static/admin/js/vendor/select2/i18n/eu.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/eu.js rename to src/static/admin/js/vendor/select2/i18n/eu.js diff --git a/static/admin/js/vendor/select2/i18n/fa.js b/src/static/admin/js/vendor/select2/i18n/fa.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/fa.js rename to src/static/admin/js/vendor/select2/i18n/fa.js diff --git a/static/admin/js/vendor/select2/i18n/fi.js b/src/static/admin/js/vendor/select2/i18n/fi.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/fi.js rename to src/static/admin/js/vendor/select2/i18n/fi.js diff --git a/static/admin/js/vendor/select2/i18n/fr.js b/src/static/admin/js/vendor/select2/i18n/fr.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/fr.js rename to src/static/admin/js/vendor/select2/i18n/fr.js diff --git a/static/admin/js/vendor/select2/i18n/gl.js b/src/static/admin/js/vendor/select2/i18n/gl.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/gl.js rename to src/static/admin/js/vendor/select2/i18n/gl.js diff --git a/static/admin/js/vendor/select2/i18n/he.js b/src/static/admin/js/vendor/select2/i18n/he.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/he.js rename to src/static/admin/js/vendor/select2/i18n/he.js diff --git a/static/admin/js/vendor/select2/i18n/hi.js b/src/static/admin/js/vendor/select2/i18n/hi.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/hi.js rename to src/static/admin/js/vendor/select2/i18n/hi.js diff --git a/static/admin/js/vendor/select2/i18n/hr.js b/src/static/admin/js/vendor/select2/i18n/hr.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/hr.js rename to src/static/admin/js/vendor/select2/i18n/hr.js diff --git a/static/admin/js/vendor/select2/i18n/hu.js b/src/static/admin/js/vendor/select2/i18n/hu.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/hu.js rename to src/static/admin/js/vendor/select2/i18n/hu.js diff --git a/static/admin/js/vendor/select2/i18n/id.js b/src/static/admin/js/vendor/select2/i18n/id.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/id.js rename to src/static/admin/js/vendor/select2/i18n/id.js diff --git a/static/admin/js/vendor/select2/i18n/is.js b/src/static/admin/js/vendor/select2/i18n/is.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/is.js rename to src/static/admin/js/vendor/select2/i18n/is.js diff --git a/static/admin/js/vendor/select2/i18n/it.js b/src/static/admin/js/vendor/select2/i18n/it.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/it.js rename to src/static/admin/js/vendor/select2/i18n/it.js diff --git a/static/admin/js/vendor/select2/i18n/ja.js b/src/static/admin/js/vendor/select2/i18n/ja.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ja.js rename to src/static/admin/js/vendor/select2/i18n/ja.js diff --git a/static/admin/js/vendor/select2/i18n/km.js b/src/static/admin/js/vendor/select2/i18n/km.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/km.js rename to src/static/admin/js/vendor/select2/i18n/km.js diff --git a/static/admin/js/vendor/select2/i18n/ko.js b/src/static/admin/js/vendor/select2/i18n/ko.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ko.js rename to src/static/admin/js/vendor/select2/i18n/ko.js diff --git a/static/admin/js/vendor/select2/i18n/lt.js b/src/static/admin/js/vendor/select2/i18n/lt.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/lt.js rename to src/static/admin/js/vendor/select2/i18n/lt.js diff --git a/static/admin/js/vendor/select2/i18n/lv.js b/src/static/admin/js/vendor/select2/i18n/lv.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/lv.js rename to src/static/admin/js/vendor/select2/i18n/lv.js diff --git a/static/admin/js/vendor/select2/i18n/mk.js b/src/static/admin/js/vendor/select2/i18n/mk.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/mk.js rename to src/static/admin/js/vendor/select2/i18n/mk.js diff --git a/static/admin/js/vendor/select2/i18n/ms.js b/src/static/admin/js/vendor/select2/i18n/ms.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ms.js rename to src/static/admin/js/vendor/select2/i18n/ms.js diff --git a/static/admin/js/vendor/select2/i18n/nb.js b/src/static/admin/js/vendor/select2/i18n/nb.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/nb.js rename to src/static/admin/js/vendor/select2/i18n/nb.js diff --git a/static/admin/js/vendor/select2/i18n/nl.js b/src/static/admin/js/vendor/select2/i18n/nl.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/nl.js rename to src/static/admin/js/vendor/select2/i18n/nl.js diff --git a/static/admin/js/vendor/select2/i18n/pl.js b/src/static/admin/js/vendor/select2/i18n/pl.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/pl.js rename to src/static/admin/js/vendor/select2/i18n/pl.js diff --git a/static/admin/js/vendor/select2/i18n/pt-BR.js b/src/static/admin/js/vendor/select2/i18n/pt-BR.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/pt-BR.js rename to src/static/admin/js/vendor/select2/i18n/pt-BR.js diff --git a/static/admin/js/vendor/select2/i18n/pt.js b/src/static/admin/js/vendor/select2/i18n/pt.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/pt.js rename to src/static/admin/js/vendor/select2/i18n/pt.js diff --git a/static/admin/js/vendor/select2/i18n/ro.js b/src/static/admin/js/vendor/select2/i18n/ro.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ro.js rename to src/static/admin/js/vendor/select2/i18n/ro.js diff --git a/static/admin/js/vendor/select2/i18n/ru.js b/src/static/admin/js/vendor/select2/i18n/ru.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ru.js rename to src/static/admin/js/vendor/select2/i18n/ru.js diff --git a/static/admin/js/vendor/select2/i18n/sk.js b/src/static/admin/js/vendor/select2/i18n/sk.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/sk.js rename to src/static/admin/js/vendor/select2/i18n/sk.js diff --git a/static/admin/js/vendor/select2/i18n/sr-Cyrl.js b/src/static/admin/js/vendor/select2/i18n/sr-Cyrl.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/sr-Cyrl.js rename to src/static/admin/js/vendor/select2/i18n/sr-Cyrl.js diff --git a/static/admin/js/vendor/select2/i18n/sr.js b/src/static/admin/js/vendor/select2/i18n/sr.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/sr.js rename to src/static/admin/js/vendor/select2/i18n/sr.js diff --git a/static/admin/js/vendor/select2/i18n/sv.js b/src/static/admin/js/vendor/select2/i18n/sv.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/sv.js rename to src/static/admin/js/vendor/select2/i18n/sv.js diff --git a/static/admin/js/vendor/select2/i18n/th.js b/src/static/admin/js/vendor/select2/i18n/th.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/th.js rename to src/static/admin/js/vendor/select2/i18n/th.js diff --git a/static/admin/js/vendor/select2/i18n/tr.js b/src/static/admin/js/vendor/select2/i18n/tr.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/tr.js rename to src/static/admin/js/vendor/select2/i18n/tr.js diff --git a/static/admin/js/vendor/select2/i18n/uk.js b/src/static/admin/js/vendor/select2/i18n/uk.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/uk.js rename to src/static/admin/js/vendor/select2/i18n/uk.js diff --git a/static/admin/js/vendor/select2/i18n/vi.js b/src/static/admin/js/vendor/select2/i18n/vi.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/vi.js rename to src/static/admin/js/vendor/select2/i18n/vi.js diff --git a/static/admin/js/vendor/select2/i18n/zh-CN.js b/src/static/admin/js/vendor/select2/i18n/zh-CN.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/zh-CN.js rename to src/static/admin/js/vendor/select2/i18n/zh-CN.js diff --git a/static/admin/js/vendor/select2/i18n/zh-TW.js b/src/static/admin/js/vendor/select2/i18n/zh-TW.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/zh-TW.js rename to src/static/admin/js/vendor/select2/i18n/zh-TW.js diff --git a/static/admin/js/vendor/select2/select2.full.js b/src/static/admin/js/vendor/select2/select2.full.js similarity index 100% rename from static/admin/js/vendor/select2/select2.full.js rename to src/static/admin/js/vendor/select2/select2.full.js diff --git a/static/admin/js/vendor/select2/select2.full.min.js b/src/static/admin/js/vendor/select2/select2.full.min.js similarity index 100% rename from static/admin/js/vendor/select2/select2.full.min.js rename to src/static/admin/js/vendor/select2/select2.full.min.js diff --git a/static/admin/js/vendor/xregexp/LICENSE.txt b/src/static/admin/js/vendor/xregexp/LICENSE.txt similarity index 100% rename from static/admin/js/vendor/xregexp/LICENSE.txt rename to src/static/admin/js/vendor/xregexp/LICENSE.txt diff --git a/static/admin/js/vendor/xregexp/xregexp.js b/src/static/admin/js/vendor/xregexp/xregexp.js similarity index 100% rename from static/admin/js/vendor/xregexp/xregexp.js rename to src/static/admin/js/vendor/xregexp/xregexp.js diff --git a/static/admin/js/vendor/xregexp/xregexp.min.js b/src/static/admin/js/vendor/xregexp/xregexp.min.js similarity index 100% rename from static/admin/js/vendor/xregexp/xregexp.min.js rename to src/static/admin/js/vendor/xregexp/xregexp.min.js diff --git a/static/css/floating_labels.css b/src/static/css/floating_labels.css similarity index 100% rename from static/css/floating_labels.css rename to src/static/css/floating_labels.css diff --git a/static/images/lama.svg b/src/static/images/lama.svg similarity index 100% rename from static/images/lama.svg rename to src/static/images/lama.svg diff --git a/static/js/main.js b/src/static/js/main.js similarity index 100% rename from static/js/main.js rename to src/static/js/main.js diff --git a/static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.css b/src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.css similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.css rename to src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.css diff --git a/static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.css.map b/src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.css.map similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.css.map rename to src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.css.map diff --git a/static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.min.css b/src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.min.css similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.min.css rename to src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.min.css diff --git a/static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.min.css.map b/src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.min.css.map similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.min.css.map rename to src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-grid.min.css.map diff --git a/static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.css b/src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.css similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.css rename to src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.css diff --git a/static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.css.map b/src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.css.map similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.css.map rename to src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.css.map diff --git a/static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.min.css b/src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.min.css similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.min.css rename to src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.min.css diff --git a/static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.min.css.map b/src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.min.css.map similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.min.css.map rename to src/static/libs/bootstrap-4.3.1-dist/css/bootstrap-reboot.min.css.map diff --git a/static/libs/bootstrap-4.3.1-dist/css/bootstrap.css b/src/static/libs/bootstrap-4.3.1-dist/css/bootstrap.css similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/css/bootstrap.css rename to src/static/libs/bootstrap-4.3.1-dist/css/bootstrap.css diff --git a/static/libs/bootstrap-4.3.1-dist/css/bootstrap.css.map b/src/static/libs/bootstrap-4.3.1-dist/css/bootstrap.css.map similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/css/bootstrap.css.map rename to src/static/libs/bootstrap-4.3.1-dist/css/bootstrap.css.map diff --git a/static/libs/bootstrap-4.3.1-dist/css/bootstrap.min.css b/src/static/libs/bootstrap-4.3.1-dist/css/bootstrap.min.css similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/css/bootstrap.min.css rename to src/static/libs/bootstrap-4.3.1-dist/css/bootstrap.min.css diff --git a/static/libs/bootstrap-4.3.1-dist/css/bootstrap.min.css.map b/src/static/libs/bootstrap-4.3.1-dist/css/bootstrap.min.css.map similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/css/bootstrap.min.css.map rename to src/static/libs/bootstrap-4.3.1-dist/css/bootstrap.min.css.map diff --git a/static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.js b/src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.js similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.js rename to src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.js diff --git a/static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.js.map b/src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.js.map similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.js.map rename to src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.js.map diff --git a/static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js b/src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js rename to src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js diff --git a/static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js.map b/src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js.map similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js.map rename to src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.bundle.min.js.map diff --git a/static/libs/bootstrap-4.3.1-dist/js/bootstrap.js b/src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.js similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/js/bootstrap.js rename to src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.js diff --git a/static/libs/bootstrap-4.3.1-dist/js/bootstrap.js.map b/src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.js.map similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/js/bootstrap.js.map rename to src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.js.map diff --git a/static/libs/bootstrap-4.3.1-dist/js/bootstrap.min.js b/src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.min.js similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/js/bootstrap.min.js rename to src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.min.js diff --git a/static/libs/bootstrap-4.3.1-dist/js/bootstrap.min.js.map b/src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.min.js.map similarity index 100% rename from static/libs/bootstrap-4.3.1-dist/js/bootstrap.min.js.map rename to src/static/libs/bootstrap-4.3.1-dist/js/bootstrap.min.js.map diff --git a/templates/about.jinja2 b/src/templates/about.jinja2 similarity index 100% rename from templates/about.jinja2 rename to src/templates/about.jinja2 diff --git a/templates/base.jinja2 b/src/templates/base.jinja2 similarity index 100% rename from templates/base.jinja2 rename to src/templates/base.jinja2 diff --git a/templates/base_admin.jinja2 b/src/templates/base_admin.jinja2 similarity index 100% rename from templates/base_admin.jinja2 rename to src/templates/base_admin.jinja2 diff --git a/templates/group/group_add.jinja2 b/src/templates/group/group_add.jinja2 similarity index 100% rename from templates/group/group_add.jinja2 rename to src/templates/group/group_add.jinja2 diff --git a/templates/group/group_confirm_delete.jinja2 b/src/templates/group/group_confirm_delete.jinja2 similarity index 100% rename from templates/group/group_confirm_delete.jinja2 rename to src/templates/group/group_confirm_delete.jinja2 diff --git a/templates/group/group_detail.jinja2 b/src/templates/group/group_detail.jinja2 similarity index 100% rename from templates/group/group_detail.jinja2 rename to src/templates/group/group_detail.jinja2 diff --git a/templates/macros/form_macros.jinja2 b/src/templates/macros/form_macros.jinja2 similarity index 100% rename from templates/macros/form_macros.jinja2 rename to src/templates/macros/form_macros.jinja2 diff --git a/templates/macros/item_form_macros.jinja2 b/src/templates/macros/item_form_macros.jinja2 similarity index 100% rename from templates/macros/item_form_macros.jinja2 rename to src/templates/macros/item_form_macros.jinja2 diff --git a/templates/macros/utils_macros.jinja2 b/src/templates/macros/utils_macros.jinja2 similarity index 100% rename from templates/macros/utils_macros.jinja2 rename to src/templates/macros/utils_macros.jinja2 diff --git a/templates/permission_denied.jinja2 b/src/templates/permission_denied.jinja2 similarity index 100% rename from templates/permission_denied.jinja2 rename to src/templates/permission_denied.jinja2 diff --git a/templates/realm/realm_add.jinja2 b/src/templates/realm/realm_add.jinja2 similarity index 100% rename from templates/realm/realm_add.jinja2 rename to src/templates/realm/realm_add.jinja2 diff --git a/templates/realm/realm_add_failed.jinja2 b/src/templates/realm/realm_add_failed.jinja2 similarity index 100% rename from templates/realm/realm_add_failed.jinja2 rename to src/templates/realm/realm_add_failed.jinja2 diff --git a/templates/realm/realm_confirm_delete.jinja2 b/src/templates/realm/realm_confirm_delete.jinja2 similarity index 100% rename from templates/realm/realm_confirm_delete.jinja2 rename to src/templates/realm/realm_confirm_delete.jinja2 diff --git a/templates/realm/realm_create_update_mail.jinja2 b/src/templates/realm/realm_create_update_mail.jinja2 similarity index 100% rename from templates/realm/realm_create_update_mail.jinja2 rename to src/templates/realm/realm_create_update_mail.jinja2 diff --git a/templates/realm/realm_detailed.jinja2 b/src/templates/realm/realm_detailed.jinja2 similarity index 100% rename from templates/realm/realm_detailed.jinja2 rename to src/templates/realm/realm_detailed.jinja2 diff --git a/templates/realm/realm_groups.jinja2 b/src/templates/realm/realm_groups.jinja2 similarity index 100% rename from templates/realm/realm_groups.jinja2 rename to src/templates/realm/realm_groups.jinja2 diff --git a/templates/realm/realm_home.jinja2 b/src/templates/realm/realm_home.jinja2 similarity index 100% rename from templates/realm/realm_home.jinja2 rename to src/templates/realm/realm_home.jinja2 diff --git a/templates/realm/realm_update.jinja2 b/src/templates/realm/realm_update.jinja2 similarity index 100% rename from templates/realm/realm_update.jinja2 rename to src/templates/realm/realm_update.jinja2 diff --git a/templates/realm/realm_user.jinja2 b/src/templates/realm/realm_user.jinja2 similarity index 100% rename from templates/realm/realm_user.jinja2 rename to src/templates/realm/realm_user.jinja2 diff --git a/templates/realm/realm_user_multiple_delete.jinja2 b/src/templates/realm/realm_user_multiple_delete.jinja2 similarity index 100% rename from templates/realm/realm_user_multiple_delete.jinja2 rename to src/templates/realm/realm_user_multiple_delete.jinja2 diff --git a/templates/realm/realm_user_multiple_delete_confirm.jinja2 b/src/templates/realm/realm_user_multiple_delete_confirm.jinja2 similarity index 100% rename from templates/realm/realm_user_multiple_delete_confirm.jinja2 rename to src/templates/realm/realm_user_multiple_delete_confirm.jinja2 diff --git a/templates/registration/login.html b/src/templates/registration/login.html similarity index 100% rename from templates/registration/login.html rename to src/templates/registration/login.html diff --git a/templates/registration/password_change_done.html b/src/templates/registration/password_change_done.html similarity index 100% rename from templates/registration/password_change_done.html rename to src/templates/registration/password_change_done.html diff --git a/templates/registration/password_change_form.html b/src/templates/registration/password_change_form.html similarity index 100% rename from templates/registration/password_change_form.html rename to src/templates/registration/password_change_form.html diff --git a/templates/registration/password_reset_complete.html b/src/templates/registration/password_reset_complete.html similarity index 100% rename from templates/registration/password_reset_complete.html rename to src/templates/registration/password_reset_complete.html diff --git a/templates/registration/password_reset_confirm.html b/src/templates/registration/password_reset_confirm.html similarity index 100% rename from templates/registration/password_reset_confirm.html rename to src/templates/registration/password_reset_confirm.html diff --git a/templates/registration/password_reset_done.html b/src/templates/registration/password_reset_done.html similarity index 100% rename from templates/registration/password_reset_done.html rename to src/templates/registration/password_reset_done.html diff --git a/templates/registration/password_reset_email.html b/src/templates/registration/password_reset_email.html similarity index 100% rename from templates/registration/password_reset_email.html rename to src/templates/registration/password_reset_email.html diff --git a/templates/registration/password_reset_form.html b/src/templates/registration/password_reset_form.html similarity index 100% rename from templates/registration/password_reset_form.html rename to src/templates/registration/password_reset_form.html diff --git a/templates/registration/welcome_email.jinja2 b/src/templates/registration/welcome_email.jinja2 similarity index 100% rename from templates/registration/welcome_email.jinja2 rename to src/templates/registration/welcome_email.jinja2 diff --git a/templates/user/account_deleted.jinja2 b/src/templates/user/account_deleted.jinja2 similarity index 100% rename from templates/user/account_deleted.jinja2 rename to src/templates/user/account_deleted.jinja2 diff --git a/templates/user/realm_user_add.jinja2 b/src/templates/user/realm_user_add.jinja2 similarity index 100% rename from templates/user/realm_user_add.jinja2 rename to src/templates/user/realm_user_add.jinja2 diff --git a/templates/user/realm_user_detail.jinja2 b/src/templates/user/realm_user_detail.jinja2 similarity index 100% rename from templates/user/realm_user_detail.jinja2 rename to src/templates/user/realm_user_detail.jinja2 diff --git a/templates/user/realm_user_update_groups.jinja2 b/src/templates/user/realm_user_update_groups.jinja2 similarity index 100% rename from templates/user/realm_user_update_groups.jinja2 rename to src/templates/user/realm_user_update_groups.jinja2 diff --git a/templates/user/user_confirm_delete.jinja2 b/src/templates/user/user_confirm_delete.jinja2 similarity index 100% rename from templates/user/user_confirm_delete.jinja2 rename to src/templates/user/user_confirm_delete.jinja2 diff --git a/templates/user/user_detail.jinja2 b/src/templates/user/user_detail.jinja2 similarity index 100% rename from templates/user/user_detail.jinja2 rename to src/templates/user/user_detail.jinja2