From fbfed06053b7bb83699b5c3cb3e331d6876de51e Mon Sep 17 00:00:00 2001
From: Christian Dresen <c.dresen@fh-muenster.de>
Date: Thu, 17 Dec 2015 00:18:35 +0100
Subject: [PATCH] Refactored in different Apps

---
 web/manage.py                                 |   2 +-
 web/{warpauthWeb => }/templates/base.html     |   0
 .../templates/licenses/bootstrap.txt          |   0
 .../templates/licenses/chart_js.txt           |   0
 .../templates/licenses/django.txt             |   0
 .../templates/licenses/gplv2.txt              |   0
 web/{ => templates}/media/chart_js/.gitignore |   0
 .../media/chart_js/.travis.yml                |   0
 web/{ => templates}/media/chart_js/LICENSE    |   0
 web/{ => templates}/media/chart_js/README.md  |   0
 .../media/chart_js/css/demo.css               |   0
 web/{ => templates}/media/chart_js/index.html |   0
 .../media/chart_js/src/demo.js                |   0
 .../media/chart_js/src/legend.js              |   0
 .../media/chart_js/src/legend.legacy.js       |   0
 .../media/chart_js/vendor/Chart.js            |   0
 .../media/css/bootstrap-theme.css             |   0
 .../media/css/bootstrap-theme.css.map         |   0
 .../media/css/bootstrap-theme.min.css         |   0
 web/{ => templates}/media/css/bootstrap.css   |   0
 .../media/css/bootstrap.css.map               |   0
 .../media/css/bootstrap.min.css               |   0
 web/{ => templates}/media/django_logo.gif     | Bin
 .../fonts/glyphicons-halflings-regular.eot    | Bin
 .../fonts/glyphicons-halflings-regular.svg    |   0
 .../fonts/glyphicons-halflings-regular.ttf    | Bin
 .../fonts/glyphicons-halflings-regular.woff   | Bin
 .../fonts/glyphicons-halflings-regular.woff2  | Bin
 web/{ => templates}/media/js/bootstrap.js     |   0
 web/{ => templates}/media/js/bootstrap.min.js |   0
 web/{ => templates}/media/js/jquery.js        |   0
 web/{ => templates}/media/js/npm.js           |   0
 web/{ => templates}/media/mongodb_logo.png    | Bin
 web/{ => templates}/media/warpzone_logo.png   | Bin
 web/warpauth/admin.py                         |   4 ++
 .../migrations}/__init__.py                   |   0
 web/warpauth/models.py                        |  46 +++++++++++++++
 .../templates/warpauth}/about.html            |   0
 .../templates/warpauth}/login.html            |   0
 .../reset_password/change_password.html       |   0
 .../warpauth}/reset_password/token_gen.html   |   0
 .../templatetags}/__init__.py                 |   0
 web/{warpauthWeb => warpauth}/tests.py        |   0
 web/warpauth/urls.py                          |  28 +++++++--
 web/{warpauthWeb => warpauth}/util.py         |   0
 .../views/__init__.py                         |   0
 web/{warpauthWeb => warpauth}/views/login.py  |   4 +-
 web/{warpauthWeb => warpauth}/views/main.py   |   4 +-
 .../views/reset_password.py                   |  10 ++--
 web/warpauthWeb/templates/warp_food/main.html |  31 ----------
 web/warpauthWeb/urls.py                       |  24 --------
 .../templatetags => warpfood}/__init__.py     |   0
 web/{warpauthWeb => warpfood}/admin.py        |   5 +-
 web/warpfood/migrations/__init__.py           |   0
 web/{warpauthWeb => warpfood}/models.py       |  54 ++++--------------
 web/warpfood/templates/warpfood/main.html     |  33 +++++++++++
 .../templates/warpfood}/view.html             |  45 ++++++++++-----
 web/warpfood/tests.py                         |   3 +
 web/warpfood/urls.py                          |  14 +++++
 web/warpfood/util.py                          |   6 ++
 .../views/warp_food.py => warpfood/views.py}  |  17 +++---
 web/{warpauth.db => warpzone.db}              | Bin 36864 -> 53248 bytes
 web/warpzone/__init__.py                      |   0
 web/{warpauth => warpzone}/settings.py        |  25 ++++----
 web/warpzone/urls.py                          |  11 ++++
 web/{warpauth => warpzone}/wsgi.py            |   2 +-
 66 files changed, 215 insertions(+), 153 deletions(-)
 rename web/{warpauthWeb => }/templates/base.html (100%)
 rename web/{warpauthWeb => }/templates/licenses/bootstrap.txt (100%)
 rename web/{warpauthWeb => }/templates/licenses/chart_js.txt (100%)
 rename web/{warpauthWeb => }/templates/licenses/django.txt (100%)
 rename web/{warpauthWeb => }/templates/licenses/gplv2.txt (100%)
 rename web/{ => templates}/media/chart_js/.gitignore (100%)
 rename web/{ => templates}/media/chart_js/.travis.yml (100%)
 rename web/{ => templates}/media/chart_js/LICENSE (100%)
 rename web/{ => templates}/media/chart_js/README.md (100%)
 rename web/{ => templates}/media/chart_js/css/demo.css (100%)
 rename web/{ => templates}/media/chart_js/index.html (100%)
 rename web/{ => templates}/media/chart_js/src/demo.js (100%)
 rename web/{ => templates}/media/chart_js/src/legend.js (100%)
 rename web/{ => templates}/media/chart_js/src/legend.legacy.js (100%)
 rename web/{ => templates}/media/chart_js/vendor/Chart.js (100%)
 rename web/{ => templates}/media/css/bootstrap-theme.css (100%)
 rename web/{ => templates}/media/css/bootstrap-theme.css.map (100%)
 rename web/{ => templates}/media/css/bootstrap-theme.min.css (100%)
 rename web/{ => templates}/media/css/bootstrap.css (100%)
 rename web/{ => templates}/media/css/bootstrap.css.map (100%)
 rename web/{ => templates}/media/css/bootstrap.min.css (100%)
 rename web/{ => templates}/media/django_logo.gif (100%)
 rename web/{ => templates}/media/fonts/glyphicons-halflings-regular.eot (100%)
 rename web/{ => templates}/media/fonts/glyphicons-halflings-regular.svg (100%)
 rename web/{ => templates}/media/fonts/glyphicons-halflings-regular.ttf (100%)
 rename web/{ => templates}/media/fonts/glyphicons-halflings-regular.woff (100%)
 rename web/{ => templates}/media/fonts/glyphicons-halflings-regular.woff2 (100%)
 rename web/{ => templates}/media/js/bootstrap.js (100%)
 rename web/{ => templates}/media/js/bootstrap.min.js (100%)
 rename web/{ => templates}/media/js/jquery.js (100%)
 rename web/{ => templates}/media/js/npm.js (100%)
 rename web/{ => templates}/media/mongodb_logo.png (100%)
 rename web/{ => templates}/media/warpzone_logo.png (100%)
 create mode 100644 web/warpauth/admin.py
 rename web/{warpauthWeb => warpauth/migrations}/__init__.py (100%)
 create mode 100644 web/warpauth/models.py
 rename web/{warpauthWeb/templates => warpauth/templates/warpauth}/about.html (100%)
 rename web/{warpauthWeb/templates => warpauth/templates/warpauth}/login.html (100%)
 rename web/{warpauthWeb/templates => warpauth/templates/warpauth}/reset_password/change_password.html (100%)
 rename web/{warpauthWeb/templates => warpauth/templates/warpauth}/reset_password/token_gen.html (100%)
 rename web/{warpauthWeb/migrations => warpauth/templatetags}/__init__.py (100%)
 rename web/{warpauthWeb => warpauth}/tests.py (100%)
 rename web/{warpauthWeb => warpauth}/util.py (100%)
 rename web/{warpauthWeb => warpauth}/views/__init__.py (100%)
 rename web/{warpauthWeb => warpauth}/views/login.py (90%)
 rename web/{warpauthWeb => warpauth}/views/main.py (78%)
 rename web/{warpauthWeb => warpauth}/views/reset_password.py (84%)
 delete mode 100644 web/warpauthWeb/templates/warp_food/main.html
 delete mode 100644 web/warpauthWeb/urls.py
 rename web/{warpauthWeb/templatetags => warpfood}/__init__.py (100%)
 rename web/{warpauthWeb => warpfood}/admin.py (54%)
 create mode 100644 web/warpfood/migrations/__init__.py
 rename web/{warpauthWeb => warpfood}/models.py (54%)
 create mode 100644 web/warpfood/templates/warpfood/main.html
 rename web/{warpauthWeb/templates/warp_food => warpfood/templates/warpfood}/view.html (55%)
 create mode 100644 web/warpfood/tests.py
 create mode 100644 web/warpfood/urls.py
 create mode 100644 web/warpfood/util.py
 rename web/{warpauthWeb/views/warp_food.py => warpfood/views.py} (84%)
 rename web/{warpauth.db => warpzone.db} (52%)
 create mode 100644 web/warpzone/__init__.py
 rename web/{warpauth => warpzone}/settings.py (89%)
 create mode 100644 web/warpzone/urls.py
 rename web/{warpauth => warpzone}/wsgi.py (83%)

diff --git a/web/manage.py b/web/manage.py
index 19941e1..8529002 100644
--- a/web/manage.py
+++ b/web/manage.py
@@ -3,7 +3,7 @@ import os
 import sys
 
 if __name__ == "__main__":
-    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "warpauth.settings")
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "warpzone.settings")
 
     from django.core.management import execute_from_command_line
 
diff --git a/web/warpauthWeb/templates/base.html b/web/templates/base.html
similarity index 100%
rename from web/warpauthWeb/templates/base.html
rename to web/templates/base.html
diff --git a/web/warpauthWeb/templates/licenses/bootstrap.txt b/web/templates/licenses/bootstrap.txt
similarity index 100%
rename from web/warpauthWeb/templates/licenses/bootstrap.txt
rename to web/templates/licenses/bootstrap.txt
diff --git a/web/warpauthWeb/templates/licenses/chart_js.txt b/web/templates/licenses/chart_js.txt
similarity index 100%
rename from web/warpauthWeb/templates/licenses/chart_js.txt
rename to web/templates/licenses/chart_js.txt
diff --git a/web/warpauthWeb/templates/licenses/django.txt b/web/templates/licenses/django.txt
similarity index 100%
rename from web/warpauthWeb/templates/licenses/django.txt
rename to web/templates/licenses/django.txt
diff --git a/web/warpauthWeb/templates/licenses/gplv2.txt b/web/templates/licenses/gplv2.txt
similarity index 100%
rename from web/warpauthWeb/templates/licenses/gplv2.txt
rename to web/templates/licenses/gplv2.txt
diff --git a/web/media/chart_js/.gitignore b/web/templates/media/chart_js/.gitignore
similarity index 100%
rename from web/media/chart_js/.gitignore
rename to web/templates/media/chart_js/.gitignore
diff --git a/web/media/chart_js/.travis.yml b/web/templates/media/chart_js/.travis.yml
similarity index 100%
rename from web/media/chart_js/.travis.yml
rename to web/templates/media/chart_js/.travis.yml
diff --git a/web/media/chart_js/LICENSE b/web/templates/media/chart_js/LICENSE
similarity index 100%
rename from web/media/chart_js/LICENSE
rename to web/templates/media/chart_js/LICENSE
diff --git a/web/media/chart_js/README.md b/web/templates/media/chart_js/README.md
similarity index 100%
rename from web/media/chart_js/README.md
rename to web/templates/media/chart_js/README.md
diff --git a/web/media/chart_js/css/demo.css b/web/templates/media/chart_js/css/demo.css
similarity index 100%
rename from web/media/chart_js/css/demo.css
rename to web/templates/media/chart_js/css/demo.css
diff --git a/web/media/chart_js/index.html b/web/templates/media/chart_js/index.html
similarity index 100%
rename from web/media/chart_js/index.html
rename to web/templates/media/chart_js/index.html
diff --git a/web/media/chart_js/src/demo.js b/web/templates/media/chart_js/src/demo.js
similarity index 100%
rename from web/media/chart_js/src/demo.js
rename to web/templates/media/chart_js/src/demo.js
diff --git a/web/media/chart_js/src/legend.js b/web/templates/media/chart_js/src/legend.js
similarity index 100%
rename from web/media/chart_js/src/legend.js
rename to web/templates/media/chart_js/src/legend.js
diff --git a/web/media/chart_js/src/legend.legacy.js b/web/templates/media/chart_js/src/legend.legacy.js
similarity index 100%
rename from web/media/chart_js/src/legend.legacy.js
rename to web/templates/media/chart_js/src/legend.legacy.js
diff --git a/web/media/chart_js/vendor/Chart.js b/web/templates/media/chart_js/vendor/Chart.js
similarity index 100%
rename from web/media/chart_js/vendor/Chart.js
rename to web/templates/media/chart_js/vendor/Chart.js
diff --git a/web/media/css/bootstrap-theme.css b/web/templates/media/css/bootstrap-theme.css
similarity index 100%
rename from web/media/css/bootstrap-theme.css
rename to web/templates/media/css/bootstrap-theme.css
diff --git a/web/media/css/bootstrap-theme.css.map b/web/templates/media/css/bootstrap-theme.css.map
similarity index 100%
rename from web/media/css/bootstrap-theme.css.map
rename to web/templates/media/css/bootstrap-theme.css.map
diff --git a/web/media/css/bootstrap-theme.min.css b/web/templates/media/css/bootstrap-theme.min.css
similarity index 100%
rename from web/media/css/bootstrap-theme.min.css
rename to web/templates/media/css/bootstrap-theme.min.css
diff --git a/web/media/css/bootstrap.css b/web/templates/media/css/bootstrap.css
similarity index 100%
rename from web/media/css/bootstrap.css
rename to web/templates/media/css/bootstrap.css
diff --git a/web/media/css/bootstrap.css.map b/web/templates/media/css/bootstrap.css.map
similarity index 100%
rename from web/media/css/bootstrap.css.map
rename to web/templates/media/css/bootstrap.css.map
diff --git a/web/media/css/bootstrap.min.css b/web/templates/media/css/bootstrap.min.css
similarity index 100%
rename from web/media/css/bootstrap.min.css
rename to web/templates/media/css/bootstrap.min.css
diff --git a/web/media/django_logo.gif b/web/templates/media/django_logo.gif
similarity index 100%
rename from web/media/django_logo.gif
rename to web/templates/media/django_logo.gif
diff --git a/web/media/fonts/glyphicons-halflings-regular.eot b/web/templates/media/fonts/glyphicons-halflings-regular.eot
similarity index 100%
rename from web/media/fonts/glyphicons-halflings-regular.eot
rename to web/templates/media/fonts/glyphicons-halflings-regular.eot
diff --git a/web/media/fonts/glyphicons-halflings-regular.svg b/web/templates/media/fonts/glyphicons-halflings-regular.svg
similarity index 100%
rename from web/media/fonts/glyphicons-halflings-regular.svg
rename to web/templates/media/fonts/glyphicons-halflings-regular.svg
diff --git a/web/media/fonts/glyphicons-halflings-regular.ttf b/web/templates/media/fonts/glyphicons-halflings-regular.ttf
similarity index 100%
rename from web/media/fonts/glyphicons-halflings-regular.ttf
rename to web/templates/media/fonts/glyphicons-halflings-regular.ttf
diff --git a/web/media/fonts/glyphicons-halflings-regular.woff b/web/templates/media/fonts/glyphicons-halflings-regular.woff
similarity index 100%
rename from web/media/fonts/glyphicons-halflings-regular.woff
rename to web/templates/media/fonts/glyphicons-halflings-regular.woff
diff --git a/web/media/fonts/glyphicons-halflings-regular.woff2 b/web/templates/media/fonts/glyphicons-halflings-regular.woff2
similarity index 100%
rename from web/media/fonts/glyphicons-halflings-regular.woff2
rename to web/templates/media/fonts/glyphicons-halflings-regular.woff2
diff --git a/web/media/js/bootstrap.js b/web/templates/media/js/bootstrap.js
similarity index 100%
rename from web/media/js/bootstrap.js
rename to web/templates/media/js/bootstrap.js
diff --git a/web/media/js/bootstrap.min.js b/web/templates/media/js/bootstrap.min.js
similarity index 100%
rename from web/media/js/bootstrap.min.js
rename to web/templates/media/js/bootstrap.min.js
diff --git a/web/media/js/jquery.js b/web/templates/media/js/jquery.js
similarity index 100%
rename from web/media/js/jquery.js
rename to web/templates/media/js/jquery.js
diff --git a/web/media/js/npm.js b/web/templates/media/js/npm.js
similarity index 100%
rename from web/media/js/npm.js
rename to web/templates/media/js/npm.js
diff --git a/web/media/mongodb_logo.png b/web/templates/media/mongodb_logo.png
similarity index 100%
rename from web/media/mongodb_logo.png
rename to web/templates/media/mongodb_logo.png
diff --git a/web/media/warpzone_logo.png b/web/templates/media/warpzone_logo.png
similarity index 100%
rename from web/media/warpzone_logo.png
rename to web/templates/media/warpzone_logo.png
diff --git a/web/warpauth/admin.py b/web/warpauth/admin.py
new file mode 100644
index 0000000..ec50db8
--- /dev/null
+++ b/web/warpauth/admin.py
@@ -0,0 +1,4 @@
+from django.contrib import admin
+
+# Register your models here.
+
diff --git a/web/warpauthWeb/__init__.py b/web/warpauth/migrations/__init__.py
similarity index 100%
rename from web/warpauthWeb/__init__.py
rename to web/warpauth/migrations/__init__.py
diff --git a/web/warpauth/models.py b/web/warpauth/models.py
new file mode 100644
index 0000000..ae0b9bf
--- /dev/null
+++ b/web/warpauth/models.py
@@ -0,0 +1,46 @@
+from django.db import models
+from ldapdb.models.fields import CharField, IntegerField, ListField
+import ldapdb.models
+from django.forms import ModelForm, HiddenInput
+from django import forms
+from django.utils import timezone
+
+class PasswordResetToken(models.Model):
+    user = models.CharField(max_length=100)
+    email = models.CharField(max_length=100)
+    hash = models.CharField(max_length=100)
+    created = models.DateTimeField(auto_now_add=True)
+
+# LDAP
+
+
+class LdapUser(ldapdb.models.Model):
+    base_dn = "ou=user,dc=warpzone,dc=ms"
+    object_classes = ['posixAccount', 'shadowAccount', 'uidObject', 'account']
+
+    uid = CharField(db_column='uid', unique=True, primary_key=True)
+    email = CharField(db_column='description', max_length=200)
+    password = CharField(db_column='Password')
+
+    def __str__(self):
+        return self.uid
+
+    def __unicode__(self):
+        return self.uid
+
+
+class LdapGroup(ldapdb.models.Model):
+    base_dn = "ou=groups,dc=nodomain,dc=org"
+    object_classes = ['posixGroup']
+
+    gid = IntegerField(db_column='gidNumber', unique=True)
+    name = CharField(db_column='cn', max_length=200, primary_key=True)
+    members = ListField(db_column='memberUid')
+
+    def __str__(self):
+        return self.name
+
+    def __unicode__(self):
+        return self.name
+
+
diff --git a/web/warpauthWeb/templates/about.html b/web/warpauth/templates/warpauth/about.html
similarity index 100%
rename from web/warpauthWeb/templates/about.html
rename to web/warpauth/templates/warpauth/about.html
diff --git a/web/warpauthWeb/templates/login.html b/web/warpauth/templates/warpauth/login.html
similarity index 100%
rename from web/warpauthWeb/templates/login.html
rename to web/warpauth/templates/warpauth/login.html
diff --git a/web/warpauthWeb/templates/reset_password/change_password.html b/web/warpauth/templates/warpauth/reset_password/change_password.html
similarity index 100%
rename from web/warpauthWeb/templates/reset_password/change_password.html
rename to web/warpauth/templates/warpauth/reset_password/change_password.html
diff --git a/web/warpauthWeb/templates/reset_password/token_gen.html b/web/warpauth/templates/warpauth/reset_password/token_gen.html
similarity index 100%
rename from web/warpauthWeb/templates/reset_password/token_gen.html
rename to web/warpauth/templates/warpauth/reset_password/token_gen.html
diff --git a/web/warpauthWeb/migrations/__init__.py b/web/warpauth/templatetags/__init__.py
similarity index 100%
rename from web/warpauthWeb/migrations/__init__.py
rename to web/warpauth/templatetags/__init__.py
diff --git a/web/warpauthWeb/tests.py b/web/warpauth/tests.py
similarity index 100%
rename from web/warpauthWeb/tests.py
rename to web/warpauth/tests.py
diff --git a/web/warpauth/urls.py b/web/warpauth/urls.py
index 94c81ee..425ac20 100644
--- a/web/warpauth/urls.py
+++ b/web/warpauth/urls.py
@@ -1,9 +1,25 @@
-from django.conf.urls import include, url
-from django.contrib import admin
-from django.conf import settings
+from django.conf.urls import url
+from warpauth.views import main, login, reset_password, warp_food
 
 urlpatterns = [
-    url(r'^admin/', include(admin.site.urls)),
-    url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT,}),
-    url(r'^', include('warpauthWeb.urls')),
+    # Authentication Pages
+    url(r'^login/$', login.login_view, name='index'),
+    url(r'^logout/$', login.logout_view, name='index'),
+    url(r'^reset_password/$', reset_password.gen_token, name='index'),
+
+    url(r'^reset_password/(?P<reset_hash>\w+)/$', reset_password.change_password, name='index'),
+    # Main Page
+
+
+    url(r'^$', main.index, name='index'),
+
+
 ]
+
+"""
+url(r'^pizza/$', warp_food.index, name='warp_foot'),
+url(r'^pizza/view/(?P<sheet_id>\w+)/$', warp_food.view, name='warp_foot_view'),
+url(r'^pizza/toggle_sheet/(?P<sheet_id>\w+)/$', warp_food.toggle_closed, name='warp_foot_toggle_closed'),
+url(r'^pizza/toggle_paid/(?P<order_id>\w+)/$', warp_food.toggle_paid, name='warp_foot_toggle_paid'),
+url(r'^pizza/export_sheet/(?P<sheet_id>\w+)/$', warp_food.export_sheet, name='warp_foot_export_sheet'),
+"""
\ No newline at end of file
diff --git a/web/warpauthWeb/util.py b/web/warpauth/util.py
similarity index 100%
rename from web/warpauthWeb/util.py
rename to web/warpauth/util.py
diff --git a/web/warpauthWeb/views/__init__.py b/web/warpauth/views/__init__.py
similarity index 100%
rename from web/warpauthWeb/views/__init__.py
rename to web/warpauth/views/__init__.py
diff --git a/web/warpauthWeb/views/login.py b/web/warpauth/views/login.py
similarity index 90%
rename from web/warpauthWeb/views/login.py
rename to web/warpauth/views/login.py
index 72dc48f..215c3ff 100644
--- a/web/warpauthWeb/views/login.py
+++ b/web/warpauth/views/login.py
@@ -4,7 +4,7 @@ from django.contrib.auth import authenticate, login, logout
 from django.shortcuts import redirect
 from django.contrib.auth.decorators import login_required
 
-from warpauthWeb.util import *
+from warpauth.util import *
 
 def login_view(request):
     pages['body'] = "login"
@@ -23,7 +23,7 @@ def login_view(request):
             if username != "" and password != "":
                 pages['fail'] = True
 
-    return HttpResponse(render(request, 'login.html', pages))
+    return HttpResponse(render(request, 'warpauth/login.html', pages))
 
 @login_required(login_url='/login/', redirect_field_name=None)
 def logout_view(request):
diff --git a/web/warpauthWeb/views/main.py b/web/warpauth/views/main.py
similarity index 78%
rename from web/warpauthWeb/views/main.py
rename to web/warpauth/views/main.py
index d3c8ee6..94860af 100644
--- a/web/warpauthWeb/views/main.py
+++ b/web/warpauth/views/main.py
@@ -2,11 +2,11 @@ from django.shortcuts import render
 from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed, HttpResponseNotFound
 from django.shortcuts import redirect
 from django.contrib.auth.decorators import login_required
-from warpauthWeb.util import *
+from warpauth.util import *
 
 @login_required(login_url='/login/', redirect_field_name=None)
 def index(request):
     print(request.user.ldap_user.group_names)
 
-    return HttpResponse(render(request, 'about.html', pages))
+    return HttpResponse(render(request, 'warpauth/about.html', pages))
 
diff --git a/web/warpauthWeb/views/reset_password.py b/web/warpauth/views/reset_password.py
similarity index 84%
rename from web/warpauthWeb/views/reset_password.py
rename to web/warpauth/views/reset_password.py
index 7bdcdfa..67fc27c 100644
--- a/web/warpauthWeb/views/reset_password.py
+++ b/web/warpauth/views/reset_password.py
@@ -5,13 +5,13 @@ from django.shortcuts import redirect
 from django.contrib.auth.decorators import login_required
 from django.views.decorators.cache import cache_page
 
-from warpauthWeb.util import *
-from warpauthWeb.models import PasswordResetToken, LdapUser
+from warpauth.util import *
+from warpauth.models import PasswordResetToken, LdapUser
 import hashlib
 import logging
 import os
 import datetime
-from django.core.exceptions import ObjectDoesNotExist,ValidationError
+from django.core.exceptions import ObjectDoesNotExist, ValidationError
 
 def gen_token(request):
     logger = logging.getLogger("reset_password")
@@ -30,7 +30,7 @@ def gen_token(request):
             logger.error("Failed for %s with %s", request.POST["username"],e)
     else:
         pass
-    return HttpResponse(render(request, 'reset_password/token_gen.html', pages))
+    return HttpResponse(render(request, 'warpauth/reset_password/token_gen.html', pages))
 
 
 def change_password(request, reset_hash=None):
@@ -60,4 +60,4 @@ def change_password(request, reset_hash=None):
 
 
 
-    return HttpResponse(render(request, 'reset_password/change_password.html', pages))
+    return HttpResponse(render(request, 'warpauth/reset_password/change_password.html', pages))
diff --git a/web/warpauthWeb/templates/warp_food/main.html b/web/warpauthWeb/templates/warp_food/main.html
deleted file mode 100644
index 2e1dabb..0000000
--- a/web/warpauthWeb/templates/warp_food/main.html
+++ /dev/null
@@ -1,31 +0,0 @@
-{% extends "base.html" %}
-
-{% load i18n %}
-
- {% load bootstrap %}
-
-{% block content %}
-    <div class="panel panel-default">
-    <div class="panel-body">
-        <form class="form-horizontal" method="POST" role="form">
-             {{ create_food_sheet|bootstrap_horizontal }}
-            <div class="form-group">
-                <div class="col-sm-offset-2 col-sm-10">
-                    {% csrf_token %}
-                    <button style="float: left" type="submit" formmethod="post" class="btn btn-primary">{% trans "Create Food Sheet" %}</button>
-                </div>
-            </div>
-        </form>
-        </div>
-    </div>
-    <table class="table table-striped table-hover">
-        <thead>
-            <tr><th>{% trans "Estimated Order Time" %}</th><th>{% trans "Pizza Service" %}</th></tr>
-        </thead>
-        <tbody>
-            {% for sheet in food_sheets %}
-                <tr data-link="/pizza/view/{{ sheet.id }}/"><td>{{ sheet.estimated_order_time }}</td><td>{{ sheet.pizza_service }}</td></tr>
-            {% endfor %}
-        </tbody>
-    </table>
-{% endblock %}
\ No newline at end of file
diff --git a/web/warpauthWeb/urls.py b/web/warpauthWeb/urls.py
deleted file mode 100644
index f4b8a95..0000000
--- a/web/warpauthWeb/urls.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from django.conf.urls import url
-from warpauthWeb.views import main,login,reset_password, warp_food
-
-urlpatterns = [
-    # Authentication Pages
-    url(r'^login/$', login.login_view, name='index'),
-    url(r'^logout/$', login.logout_view, name='index'),
-    url(r'^reset_password/$', reset_password.gen_token, name='index'),
-
-    url(r'^reset_password/(?P<reset_hash>\w+)/$', reset_password.change_password, name='index'),
-    # Main Page
-
-    url(r'^pizza/$', warp_food.index, name='warp_foot'),
-    url(r'^pizza/view/(?P<sheet_id>\w+)/$', warp_food.view, name='warp_foot_view'),
-    url(r'^pizza/toggle_sheet/(?P<sheet_id>\w+)/$', warp_food.toggle_closed, name='warp_foot_toggle_closed'),
-    url(r'^pizza/toggle_paid/(?P<order_id>\w+)/$', warp_food.toggle_paid, name='warp_foot_toggle_paid'),
-    url(r'^pizza/export_sheet/(?P<sheet_id>\w+)/$', warp_food.export_sheet, name='warp_foot_export_sheet'),
-
-
-    url(r'^$', main.index, name='index'),
-
-
-]
-
diff --git a/web/warpauthWeb/templatetags/__init__.py b/web/warpfood/__init__.py
similarity index 100%
rename from web/warpauthWeb/templatetags/__init__.py
rename to web/warpfood/__init__.py
diff --git a/web/warpauthWeb/admin.py b/web/warpfood/admin.py
similarity index 54%
rename from web/warpauthWeb/admin.py
rename to web/warpfood/admin.py
index 9b159d4..36c0fc6 100644
--- a/web/warpauthWeb/admin.py
+++ b/web/warpfood/admin.py
@@ -1,8 +1,9 @@
 from django.contrib import admin
-from warpauthWeb.models import PizzaService
+from warpfood.models import PizzaService
+
 # Register your models here.
 
 
 @admin.register(PizzaService)
-class PizzaService_admin(admin.ModelAdmin):
+class PizzaServiceAdmin(admin.ModelAdmin):
         pass
diff --git a/web/warpfood/migrations/__init__.py b/web/warpfood/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/web/warpauthWeb/models.py b/web/warpfood/models.py
similarity index 54%
rename from web/warpauthWeb/models.py
rename to web/warpfood/models.py
index 1cf42db..957fdad 100644
--- a/web/warpauthWeb/models.py
+++ b/web/warpfood/models.py
@@ -1,16 +1,8 @@
 from django.db import models
-from ldapdb.models.fields import CharField, IntegerField, ListField
-import ldapdb.models
 from django.forms import ModelForm, HiddenInput
 from django import forms
 from django.utils import timezone
 
-class PasswordResetToken(models.Model):
-    user = models.CharField(max_length=100)
-    email = models.CharField(max_length=100)
-    hash = models.CharField(max_length=100)
-    created = models.DateTimeField(auto_now_add=True)
-
 
 class PizzaService(models.Model):
     name = models.CharField(max_length=250)
@@ -19,6 +11,7 @@ class PizzaService(models.Model):
     def __str__(self):
         return self.name
 
+
 class FoodSheet(models.Model):
     date = models.DateTimeField(default=timezone.now)
     pizza_service = models.ForeignKey(PizzaService, on_delete=models.CASCADE)
@@ -46,48 +39,21 @@ class FoodSheetForm(ModelForm):
 
 class FoodOrderForm(ModelForm):
     comment = forms.CharField(required=False)
-    paid = forms.CharField(required=False)
 
     class Meta:
         model = FoodOrder
         fields = ['sheet', 'user', 'article', 'size', 'comment', 'price', 'paid']
-        widgets = {'sheet': HiddenInput(), 'user': HiddenInput()}
+        widgets = {'paid': HiddenInput(), 'sheet': HiddenInput(), 'user': HiddenInput()}
+
+class FoodOrderFormExt(ModelForm):
+    comment = forms.CharField(required=False)
+
+    class Meta:
+        model = FoodOrder
+        fields = ['sheet', 'user', 'article', 'size', 'comment', 'price', 'paid']
+        widgets = {'sheet': HiddenInput(), 'paid': HiddenInput()}
 
 class PizzaServiceForm(ModelForm):
     class Meta:
         model = PizzaService
         fields = ['name', 'phone']
-
-
-# LDAP
-
-
-class LdapUser(ldapdb.models.Model):
-    base_dn = "ou=user,dc=warpzone,dc=ms"
-    object_classes = ['posixAccount', 'shadowAccount', 'uidObject', 'account']
-
-    uid = CharField(db_column='uid', unique=True, primary_key=True)
-    email = CharField(db_column='description', max_length=200)
-    password = CharField(db_column='Password')
-
-    def __str__(self):
-        return self.uid
-
-    def __unicode__(self):
-        return self.uid
-
-class LdapGroup(ldapdb.models.Model):
-    base_dn = "ou=groups,dc=nodomain,dc=org"
-    object_classes = ['posixGroup']
-
-    gid = IntegerField(db_column='gidNumber', unique=True)
-    name = CharField(db_column='cn', max_length=200, primary_key=True)
-    members = ListField(db_column='memberUid')
-
-    def __str__(self):
-        return self.name
-
-    def __unicode__(self):
-        return self.name
-
-
diff --git a/web/warpfood/templates/warpfood/main.html b/web/warpfood/templates/warpfood/main.html
new file mode 100644
index 0000000..b878adc
--- /dev/null
+++ b/web/warpfood/templates/warpfood/main.html
@@ -0,0 +1,33 @@
+{% extends "base.html" %}
+
+{% load i18n %}
+
+ {% load bootstrap %}
+
+{% block content %}
+    {% if user.is_authenticated %}
+        <div class="panel panel-default">
+            <div class="panel-body">
+                <form class="form-horizontal" method="POST" role="form">
+                     {{ create_food_sheet|bootstrap_horizontal }}
+                    <div class="form-group">
+                        <div class="col-sm-offset-2 col-sm-10">
+                            {% csrf_token %}
+                            <button style="float: left" type="submit" formmethod="post" class="btn btn-primary">{% trans "Create Food Sheet" %}</button>
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
+    {% endif %}
+    <table class="table table-striped table-hover">
+        <thead>
+            <tr><th>{% trans "Estimated Order Time" %}</th><th>{% trans "Pizza Service" %}</th></tr>
+        </thead>
+        <tbody>
+            {% for sheet in food_sheets %}
+                <tr data-link="/pizza/view/{{ sheet.id }}/"><td>{{ sheet.estimated_order_time }}</td><td>{{ sheet.pizza_service }}</td></tr>
+            {% endfor %}
+        </tbody>
+    </table>
+{% endblock %}
\ No newline at end of file
diff --git a/web/warpauthWeb/templates/warp_food/view.html b/web/warpfood/templates/warpfood/view.html
similarity index 55%
rename from web/warpauthWeb/templates/warp_food/view.html
rename to web/warpfood/templates/warpfood/view.html
index a706d2b..2d60d09 100644
--- a/web/warpauthWeb/templates/warp_food/view.html
+++ b/web/warpfood/templates/warpfood/view.html
@@ -1,8 +1,7 @@
 {% extends "base.html" %}
 
 {% load i18n %}
-
- {% load bootstrap %}
+{% load bootstrap %}
 
 {% block content %}
 
@@ -13,14 +12,16 @@
                     <h4>{{ sheet.pizza_service.name }}</h4>
                     <small>{{ sheet.pizza_service.phone }}</small><br/><br/>
                     <small>{{ sheet.estimated_order_time }}</small><br/><br/>
-                    <a href="" class="btn btn-primary">Edit Sheet</a>
-                    {% if not sheet.closed %}
-                        <a href="/pizza/toggle_sheet/{{ sheet.id }}" class="btn btn-danger">Close Sheet</a>
-                    {% else %}
-                        <a href="/pizza/toggle_sheet/{{ sheet.id }}" class="btn btn-success">Open Sheet</a>
-                    {% endif %}
-                    {% if sheet.closed %}
-                        <a href="/pizza/export_sheet/{{ sheet.id }}" class="btn btn-info">Print order</a>
+                    {% if user.is_authenticated %}
+                        <a href="" class="btn btn-primary">Edit Sheet</a>
+                        {% if not sheet.closed %}
+                            <a href="/pizza/toggle_sheet/{{ sheet.id }}" class="btn btn-danger">Close Sheet</a>
+                        {% else %}
+                            <a href="/pizza/toggle_sheet/{{ sheet.id }}" class="btn btn-success">Open Sheet</a>
+                        {% endif %}
+                        {% if sheet.closed %}
+                            <a href="/pizza/export_sheet/{{ sheet.id }}" class="btn btn-info">Print order</a>
+                        {% endif %}
                     {% endif %}
                 </div>
                 <div class="col-md-4">
@@ -33,8 +34,11 @@
     {% if not sheet.closed %}
         <div class="panel panel-default">
             <div class="panel-body">
+                {% if error %}
+                    <div class="alert alert-danger"> {{ error }}</div>
+                {% endif %}
                 <form class="form-horizontal" method="POST" role="form">
-                     {{ create_food_order|bootstrap_horizontal }}
+                    {{ create_food_order|bootstrap_horizontal }}
                     <div class="form-group">
                         <div class="col-sm-offset-2 col-sm-10">
                             {% csrf_token %}
@@ -59,17 +63,28 @@
         <tbody>
             {% for order in orders %}
                 <tr>
-                    <td>{{ order.user_name }}</td>
+                    <td>{{ order.user }}</td>
                     <td>{{ order.article }}</td>
                     <td>{{ order.size }}</td>
                     <td>{{ order.price }} &euro;</td>
                     <td>{{ order.comment }}</td>
                     <td>
-                        {% if order.paid %}
-                            <a class="btn btn-xs btn-success" href="/pizza/toggle_paid/{{ order.id }}">{{ order.paid }}</a></td></tr>
+                        {% if user.is_authenticated %}
+                            {% if order.paid %}
+                                <a class="btn btn-xs btn-success" href="/pizza/toggle_paid/{{ order.id }}">{{ order.paid }}</a>
+                            {% else %}
+                                <a class="btn btn-xs btn-danger" href="/pizza/toggle_paid/{{ order.id }}">{{ order.paid }}</a>
+                            {% endif %}
+
                         {% else %}
-                            <a class="btn btn-xs btn-danger" href="/pizza/toggle_paid/{{ order.id }}">{{ order.paid }}</a></td></tr>
+                            {% if order.paid %}
+                                <span class="btn btn-xs btn-success">{{ order.paid }}</span>
+                            {% else %}
+                               <span class="btn btn-xs btn-danger">{{ order.paid }}</span>
+                            {% endif %}
                         {% endif %}
+                    </td>
+                </tr>
             {% endfor %}
         </tbody>
     </table>
diff --git a/web/warpfood/tests.py b/web/warpfood/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/web/warpfood/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/web/warpfood/urls.py b/web/warpfood/urls.py
new file mode 100644
index 0000000..5eba10f
--- /dev/null
+++ b/web/warpfood/urls.py
@@ -0,0 +1,14 @@
+from django.conf.urls import url
+from warpfood.views import *
+
+urlpatterns = [
+
+    url(r'^pizza/$', index, name='warp_foot'),
+    url(r'^pizza/view/(?P<sheet_id>\w+)/$', view, name='warp_foot_view'),
+    url(r'^pizza/toggle_sheet/(?P<sheet_id>\w+)/$', toggle_closed, name='warp_foot_toggle_closed'),
+    url(r'^pizza/toggle_paid/(?P<order_id>\w+)/$', toggle_paid, name='warp_foot_toggle_paid'),
+    url(r'^pizza/export_sheet/(?P<sheet_id>\w+)/$', export_sheet, name='warp_foot_export_sheet'),
+
+
+]
+
diff --git a/web/warpfood/util.py b/web/warpfood/util.py
new file mode 100644
index 0000000..e2e0407
--- /dev/null
+++ b/web/warpfood/util.py
@@ -0,0 +1,6 @@
+pages = {'pages': [
+    {"link":"pizza", "name": "PizzaSheet"},
+    {"link":"about", "name": "About"},
+    {"link":"logout", "name": "Logout"},
+    {"link":"admin", "name": "Admin"}
+]}
diff --git a/web/warpauthWeb/views/warp_food.py b/web/warpfood/views.py
similarity index 84%
rename from web/warpauthWeb/views/warp_food.py
rename to web/warpfood/views.py
index a91dc44..c99b325 100644
--- a/web/warpauthWeb/views/warp_food.py
+++ b/web/warpfood/views.py
@@ -2,12 +2,12 @@ from django.shortcuts import render
 from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed, HttpResponseNotFound
 from django.shortcuts import redirect
 from django.contrib.auth.decorators import login_required
-from warpauthWeb.util import *
-from warpauthWeb.models import *
+from warpfood.util import *
+from warpfood.models import *
 from reportlab.pdfgen import canvas
 from django.http import HttpResponse
 from reportlab.platypus import SimpleDocTemplate
-from reportlab.platypus.tables import Table, TableStyle,colors
+from reportlab.platypus.tables import Table, TableStyle, colors
 
 def index(request):
     if request.method == 'POST':
@@ -19,15 +19,13 @@ def index(request):
     pages['food_sheets'] = FoodSheet.objects.all()
     pages['pizza_services'] = PizzaService.objects.all()
     pages['create_food_sheet'] = FoodSheetForm()
-    return HttpResponse(render(request, 'warp_food/main.html', pages))
+    return HttpResponse(render(request, 'warpfood/main.html', pages))
 
 def view(request, sheet_id=0):
     if request.method == 'POST':
         form = FoodOrderForm(request.POST)
         if form.is_valid():
-            print(form.data)
             form.save()
-
         else:
             pages['error'] = form.errors
             print(pages['error'])
@@ -40,9 +38,12 @@ def view(request, sheet_id=0):
         for order in pages['orders']:
             sum += order.price
         pages['order_sum'] = sum
-        pages['create_food_order'] = FoodOrderForm(initial={'sheet': sheet_id, 'user': request.user.id})
+        if request.user.is_authenticated():
+            pages['create_food_order'] = FoodOrderForm(initial={'sheet': sheet_id, 'user': request.user, 'paid': True})
+        else:
+            pages['create_food_order'] = FoodOrderFormExt(initial={'sheet': sheet_id, 'paid': True})
 
-    return HttpResponse(render(request, 'warp_food/view.html', pages))
+    return HttpResponse(render(request, 'warpfood/view.html', pages))
 
 @login_required(login_url='/login/', redirect_field_name=None)
 def toggle_closed(request, sheet_id=0):
diff --git a/web/warpauth.db b/web/warpzone.db
similarity index 52%
rename from web/warpauth.db
rename to web/warpzone.db
index cd9f20d298ec57f329d3ae1edfe9afe31c7cde7f..b209dcbfbccb71f5b07682a2fc1f5b0a6e2b64cc 100644
GIT binary patch
literal 53248
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

delta 2261
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
F;h!<)V^RPB

diff --git a/web/warpzone/__init__.py b/web/warpzone/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/web/warpauth/settings.py b/web/warpzone/settings.py
similarity index 89%
rename from web/warpauth/settings.py
rename to web/warpzone/settings.py
index ad3732b..dbd23b8 100644
--- a/web/warpauth/settings.py
+++ b/web/warpzone/settings.py
@@ -28,7 +28,7 @@ SECRET_KEY = '4m4c(_$ubwued9p-insp!950g&r0yu851bp287$2a3ydj^y=0='
 # SECURITY WARNING: don't run with debug turned on in production!
 DEBUG = True
 
-MEDIA_ROOT = 'media/'
+MEDIA_ROOT = 'templates/media/'
 MEDIA_URL = '/media/'
 
 ALLOWED_HOSTS = []
@@ -44,7 +44,8 @@ INSTALLED_APPS = (
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'bootstrapform',
-    'warpauthWeb',
+    'warpauth',
+    'warpfood',
 )
 
 MIDDLEWARE_CLASSES = (
@@ -58,12 +59,12 @@ MIDDLEWARE_CLASSES = (
     'django.middleware.security.SecurityMiddleware',
 )
 
-ROOT_URLCONF = 'warpauth.urls'
+ROOT_URLCONF = 'warpzone.urls'
 
 TEMPLATES = [
     {
         'BACKEND': 'django.template.backends.django.DjangoTemplates',
-        'DIRS': [],
+        'DIRS': ['templates'],
         'APP_DIRS': True,
         'OPTIONS': {
             'context_processors': [
@@ -76,7 +77,7 @@ TEMPLATES = [
     },
 ]
 
-WSGI_APPLICATION = 'warpauth.wsgi.application'
+WSGI_APPLICATION = 'warpzone.wsgi.application'
 
 
 # Database
@@ -85,14 +86,14 @@ WSGI_APPLICATION = 'warpauth.wsgi.application'
 DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.sqlite3',
-        'NAME': 'warpauth.db'
+        'NAME': 'warpzone.db'
     },
-     'ldap': {
+    'ldap': {
         'ENGINE': 'ldapdb.backends.ldap',
         'NAME': 'ldap://s1.dyhost.de/',
         'USER': 'cn=admin,dc=warpzone,dc=ms',
         'PASSWORD': '12345',
-     }
+    }
 }
 DATABASE_ROUTERS = ['ldapdb.router.Router']
 # Internationalization
@@ -125,15 +126,15 @@ AUTH_LDAP_BIND_PASSWORD = "12345"
 AUTH_LDAP_SERVER_URI = "ldap://s1.dyhost.de"
 
 AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=User,dc=warpzone,dc=ms",
-    ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
+                                   ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
 
-AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName", "last_name": "sn","email":"description"}
+AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName", "last_name": "sn", "email": "description"}
 AUTH_LDAP_PROFILE_ATTR_MAP = {"home_directory": "homeDirectory"}
 
 
 AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=Groups,dc=warpzone,dc=ms",
-    ldap.SCOPE_SUBTREE, "(objectClass=posixGroup)"
-)
+                                    ldap.SCOPE_SUBTREE, "(objectClass=posixGroup)"
+                                    )
 
 AUTH_LDAP_GROUP_TYPE = PosixGroupType()
 
diff --git a/web/warpzone/urls.py b/web/warpzone/urls.py
new file mode 100644
index 0000000..9bbe71e
--- /dev/null
+++ b/web/warpzone/urls.py
@@ -0,0 +1,11 @@
+from django.conf.urls import include, url
+from django.contrib import admin
+from django.conf import settings
+
+
+urlpatterns = [
+    url(r'^admin/', include(admin.site.urls)),
+    url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, }),
+    url(r'^', include('warpauth.urls')),
+    url(r'^', include('warpfood.urls')),
+]
diff --git a/web/warpauth/wsgi.py b/web/warpzone/wsgi.py
similarity index 83%
rename from web/warpauth/wsgi.py
rename to web/warpzone/wsgi.py
index a0d14d6..4d32f44 100644
--- a/web/warpauth/wsgi.py
+++ b/web/warpzone/wsgi.py
@@ -11,6 +11,6 @@ import os
 
 from django.core.wsgi import get_wsgi_application
 
-os.environ.setdefault("DJANGO_SETTINGS_MODULE", "warpauth.settings")
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "warpzone.settings")
 
 application = get_wsgi_application()
-- 
GitLab