diff --git a/account/forms.py b/account/forms.py
index 1f840d2..b6a3650 100644
--- a/account/forms.py
+++ b/account/forms.py
@@ -1,6 +1,5 @@
from django import forms
-
class LoginForm(forms.Form):
username = forms.CharField(max_length=255)
password = forms.CharField(max_length=255, widget=forms.PasswordInput)
diff --git a/account/templates/dashboard.html b/account/templates/dashboard.html
index ff65e1c..87b9e79 100644
--- a/account/templates/dashboard.html
+++ b/account/templates/dashboard.html
@@ -1,7 +1,6 @@
{% extends "base.html" %}
-{% block body %}
-
+{% block container %}
{{ request.user.username }}
@@ -29,5 +28,4 @@
{% endfor %}
-
-{% endblock body %}
+{% endblock container %}
diff --git a/account/urls.py b/account/urls.py
index 6e24af4..8370e0f 100644
--- a/account/urls.py
+++ b/account/urls.py
@@ -3,6 +3,6 @@ from django.conf.urls import patterns, url
urlpatterns = patterns(
'',
- url(r'^login/$', 'account.views.auth_login'),
- url(r'^logout/$', 'account.views.auth_logout'),
+ url(r'^login/$', 'account.views.auth_login', name="auth_login"),
+ url(r'^logout/$', 'account.views.auth_logout', name="auth_logout"),
)
\ No newline at end of file
diff --git a/account/views.py b/account/views.py
index 9e36077..a13ebf8 100644
--- a/account/views.py
+++ b/account/views.py
@@ -1,3 +1,6 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template.context import RequestContext
@@ -6,9 +9,8 @@ from django.contrib.auth.models import User
from account.forms import LoginForm
-
def auth_login(request):
- redirect_to = request.REQUEST.get('next', '') or '/'
+ redirect_to = request.GET.get('next', '') or '/'
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
@@ -18,20 +20,26 @@ def auth_login(request):
if user is not None:
if user.is_active:
login(request, user)
- member, created = User.objects.get_or_create(
- username=username)
+ member, created = \
+ User.objects.get_or_create(username=username)
if created:
member.save()
- return HttpResponseRedirect(redirect_to)
+ # save password in the session for later use with LDAP
+ request.session['ldap_password'] = password
+ response = HttpResponseRedirect(redirect_to)
+ response.set_cookie('sessionkey', 'bla')
+ return response
else:
print 'user is none'
else:
form = LoginForm()
- return render_to_response('login.html',
- RequestContext(request, locals()))
+ return render_to_response('login.html',
+ RequestContext(request, locals()))
def auth_logout(request):
- redirect_to = request.REQUEST.get('next', '') or '/'
+ redirect_to = request.GET.get('next', '') or '/'
logout(request)
- return HttpResponseRedirect(redirect_to)
+ response = HttpResponseRedirect(redirect_to)
+ response.delete_cookie('sessionkey')
+ return response
diff --git a/cbmi/forms.py b/cbmi/forms.py
index 93e4003..d06bbe6 100644
--- a/cbmi/forms.py
+++ b/cbmi/forms.py
@@ -18,4 +18,9 @@ class GastroPinField(forms.CharField):
class GastroPinForm(forms.Form):
- gastropin = GastroPinField()
\ No newline at end of file
+ gastropin = GastroPinField()
+
+
+class WlanPresenceForm(forms.Form):
+ # Boolean fields must never be required.
+ presence = forms.BooleanField(required=False)
\ No newline at end of file
diff --git a/cbmi/settings.py b/cbmi/settings.py
index f322292..8db3812 100644
--- a/cbmi/settings.py
+++ b/cbmi/settings.py
@@ -88,6 +88,16 @@ TEMPLATE_LOADERS = (
'django.template.loaders.app_directories.Loader',
# 'django.template.loaders.eggs.Loader',
)
+TEMPLATE_CONTEXT_PROCESSORS = (
+ "django.contrib.auth.context_processors.auth",
+ "django.core.context_processors.debug",
+ "django.core.context_processors.i18n",
+ "django.core.context_processors.media",
+ "django.core.context_processors.static",
+ "django.core.context_processors.tz",
+ "django.contrib.messages.context_processors.messages",
+ "django.core.context_processors.request"
+)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
@@ -200,6 +210,8 @@ LOGGING = {
}
}
+# LOGIN_URL = '/account/login'
+
try:
from local_settings import *
except ImportError, e:
diff --git a/cbmi/templates/base.html b/cbmi/templates/base.html
index ce4d198..2d43373 100644
--- a/cbmi/templates/base.html
+++ b/cbmi/templates/base.html
@@ -1,3 +1,4 @@
+{% load i18n %}
@@ -63,6 +64,17 @@
{% block body %}
+
+ {% block container %}
-
+ {% endblock container %}
+
{% endblock body %}
diff --git a/cbmi/templates/group_list.html b/cbmi/templates/group_list.html
index 9356146..0548fb2 100644
--- a/cbmi/templates/group_list.html
+++ b/cbmi/templates/group_list.html
@@ -1,7 +1,7 @@
{% extends "base.html" %}
-{% block body %}
-
+{% block container %}
+ BLA
members of {{ group.name }}
@@ -13,5 +13,4 @@
{% endfor %}
-
-{% endblock %}
+{% endblock container %}
diff --git a/cbmi/templates/wlan_presence.html b/cbmi/templates/wlan_presence.html
new file mode 100644
index 0000000..ea201db
--- /dev/null
+++ b/cbmi/templates/wlan_presence.html
@@ -0,0 +1,43 @@
+{% extends "base.html" %}
+{% load i18n %}
+{% block container %}
+
+
+
{% trans "WiFi Presence"%}
+
{% blocktrans %}The WiFi Presence automatically logs you in
+ to the c-base presence system when you connect a device to the Crew-Wifi
+ (SSID: c-base-crew) with your username and password.{% endblocktrans %}
+
+ {% if message %}
+
{{ message }}
+ {% endif %}
+
+ {{ form.non_field_errors }}
+
+
+
+
+{% endblock container %}
diff --git a/cbmi/urls.py b/cbmi/urls.py
index 72d5a43..1b9e252 100644
--- a/cbmi/urls.py
+++ b/cbmi/urls.py
@@ -13,4 +13,7 @@ urlpatterns = patterns('',
url(r'^groups/(?P[^/]+)/', 'cbmi.views.groups_list'),
url(r'^$', 'cbmi.views.landingpage'),
url(r'^gastropin/$', 'cbmi.views.gastropin', name='gastropin'),
+
+ url(r'^wlan_presence/$', 'cbmi.views.wlan_presence', name='wlan_presence'),
+
)
diff --git a/cbmi/views.py b/cbmi/views.py
index e9d306b..f187c8a 100644
--- a/cbmi/views.py
+++ b/cbmi/views.py
@@ -1,11 +1,16 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import ldap
+import copy
+
from django.shortcuts import render_to_response, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import Group
from django.shortcuts import render
from django.utils.translation import ugettext as _
-
-from forms import GastroPinForm
+from forms import GastroPinForm, WlanPresenceForm
def landingpage(request):
is_ceymaster = is_admin = False
@@ -16,6 +21,7 @@ def landingpage(request):
groups = Group.objects.all()
admins = Group.objects.get(name="ldap_admins").user_set.all()
if request.user.is_authenticated():
+ # values = get_user_values(request.user.username, request.session['ldap_password'])
return render_to_response("dashboard.html", locals())
return render_to_response("base.html", locals())
@@ -49,3 +55,113 @@ def gastropin(request):
form = GastroPinForm()
return render(request, 'gastropin.html', {'form': form})
+
+@login_required
+def wlan_presence(request):
+ uv = UserValues(request.user.username, request.session['ldap_password'])
+ print "presence ist: ", uv.get_bool("wlanPresence")
+
+ if request.method == 'POST':
+ form = WlanPresenceForm(request.POST)
+ if form.is_valid():
+
+ p = 'FALSE'
+ if form.cleaned_data['presence'] == True:
+ p = 'TRUE'
+ uv.set('wlanPresence', p)
+ uv.save()
+ new_form = WlanPresenceForm(initial={'presence': uv.get_bool("wlanPresence")})
+ return render(request, 'wlan_presence.html',
+ {'message': _('Your Wifi Presenc has been set. Thank you!'),
+ 'form': new_form})
+ else:
+ return render(request, 'wlan_presence.html', {'form:': form})
+ else:
+ form = WlanPresenceForm(initial={'presence': uv.get_bool("wlanPresence")})
+
+ return render(request, 'wlan_presence.html', {'form': form})
+
+
+#def set_wlan_presence(request, value):
+# """
+#
+# """
+# set_boolean_value('wlanPresence', value,
+# request.user.username, request.session['ldap_password'])
+
+
+class UserValues(object):
+ """
+
+ """
+
+ def __init__(self, username, password):
+ self._username = username
+ self._password = password
+ self._old = self.get_user_values()
+ self._new = copy.deepcopy(self._old)
+
+ def get(self, key, default=None):
+ return self._new.get(key, default)[0]
+
+ def set(self, key, value):
+ self._new[key] = [value]
+
+ def get_bool(self, key):
+ return self.get(key) == 'TRUE'
+
+ def save(self):
+ """
+
+ """
+ dn = "uid=%s,ou=crew,dc=c-base,dc=org" % self._username
+ print 'setting dn=', dn
+
+ # TODO: Use settings for url
+ l = ldap.initialize("ldap://lea.cbrp3.c-base.org:389/")
+ l.simple_bind_s(dn, self._password)
+
+ mod_attrs = []
+ for new_key, new_value in self._new.items():
+ # Replace is the default.
+ action = ldap.MOD_REPLACE
+ if new_key not in self._old.keys():
+ action = ldap.MOD_ADD
+ mod_attrs.append((action, '%s' % new_key, new_value ))
+ continue
+ # Set the attribute and wait for the LDAP server to complete.
+ if self._old[new_key][0] != new_value[0]:
+ action = ldap.MOD_REPLACE
+ mod_attrs.append((action, '%s' % new_key, new_value ))
+ continue
+
+ print "modattrs: ",mod_attrs
+ result = l.modify_s(dn, mod_attrs)
+ print "result is: ", result
+
+
+ def get_user_values(self):
+ """
+
+ """
+
+ dn = "ou=crew,dc=c-base,dc=org"
+ bind_dn = "uid=%s,ou=crew,dc=c-base,dc=org" % self._username
+ print('setting dn=', dn)
+
+ # TODO: Use settings for url
+ l = ldap.initialize("ldap://lea.cbrp3.c-base.org:389/")
+ l.simple_bind_s(bind_dn, self._password)
+
+ # Set the attribute and wait for the LDAP server to complete.
+ searchScope = ldap.SCOPE_SUBTREE
+ ## retrieve all attributes - again adjust to your needs - see documentation for more options
+ retrieveAttributes = None
+ searchFilter = "uid=%s" % self._username
+
+ # get_attrs = [( ldap., 'wlanPresence', set_value )]
+ result = l.search_s(dn, searchScope, searchFilter, retrieveAttributes)
+ # TODO: latin1
+ print "result is: ", result
+ # TODO: if len(result)==0
+ return result[0][1]