setting wifi presence
This commit is contained in:
parent
032bc5acaa
commit
0aade5be94
11 changed files with 220 additions and 24 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block body %}
|
||||
<div class="container">
|
||||
{% block container %}
|
||||
<div class="row">
|
||||
<div class="span12">
|
||||
<h2>{{ request.user.username }}</h2>
|
||||
|
|
@ -29,5 +28,4 @@
|
|||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock body %}
|
||||
{% endblock container %}
|
||||
|
|
|
|||
|
|
@ -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"),
|
||||
)
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -18,4 +18,9 @@ class GastroPinField(forms.CharField):
|
|||
|
||||
|
||||
class GastroPinForm(forms.Form):
|
||||
gastropin = GastroPinField()
|
||||
gastropin = GastroPinField()
|
||||
|
||||
|
||||
class WlanPresenceForm(forms.Form):
|
||||
# Boolean fields must never be required.
|
||||
presence = forms.BooleanField(required=False)
|
||||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
{% load i18n %}
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
|
|
@ -63,6 +64,17 @@
|
|||
<br/>
|
||||
{% block body %}
|
||||
<div class="container">
|
||||
<ul class="nav nav-tabs">
|
||||
{% url cbmi.views.landingpage as landing_page_url %}
|
||||
<li class="{% if request.path == landing_page_url %}active{% endif %}">
|
||||
<a href="{{ landing_page_url }}">{% trans "Home" %}</a>
|
||||
</li>
|
||||
{% url cbmi.views.wlan_presence as wlan_presence_url %}
|
||||
<li class="{% if request.path == wlan_presence_url %}active{% endif %}">
|
||||
<a href="{{ wlan_presence_url }}">{% trans "WLAN Presence" %}</a>
|
||||
</li>
|
||||
</ul>
|
||||
{% block container %}
|
||||
<div class="row">
|
||||
<div class="span12">
|
||||
<div class="well">
|
||||
|
|
@ -79,7 +91,8 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock container %}
|
||||
</div><!-- /.container -->
|
||||
{% endblock body %}
|
||||
<script src="/static/js/bootstrap.js"></script>
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block body %}
|
||||
<div class="container">
|
||||
{% block container %}
|
||||
BLA
|
||||
<div class="row">
|
||||
<div class="span12">
|
||||
<h2>members of {{ group.name }}</h2>
|
||||
|
|
@ -13,5 +13,4 @@
|
|||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock container %}
|
||||
|
|
|
|||
43
cbmi/templates/wlan_presence.html
Normal file
43
cbmi/templates/wlan_presence.html
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{% extends "base.html" %}
|
||||
{% load i18n %}
|
||||
{% block container %}
|
||||
<div class="row">
|
||||
<div class="span12">
|
||||
<h2>{% trans "WiFi Presence"%}</h2>
|
||||
<p>{% 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 %}</p>
|
||||
|
||||
{% if message %}
|
||||
<div class="alert alert-success">{{ message }}</div>
|
||||
{% endif %}
|
||||
|
||||
{{ form.non_field_errors }}
|
||||
|
||||
<form action="{% url cbmi.views.wlan_presence %}" method="post" class="form-horizontal well">
|
||||
|
||||
{% csrf_token %}
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="if_presence">{% trans "WLAN-Presence" %}</label>
|
||||
<div>
|
||||
{{ form.presence.errors }}
|
||||
</div>
|
||||
<div class="controls">
|
||||
|
||||
<label class="checkbox">
|
||||
{{ form.presence }}
|
||||
{# <input name="presence" value="1" id="id_presence" type="checkbox"#}
|
||||
{# {% if form.presence.value %}checked="checked"{% endif %} /> {% trans "aktivieren?" %}#}
|
||||
</label>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<button type="submit" class="btn btn-primary">Speichern</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock container %}
|
||||
|
|
@ -13,4 +13,7 @@ urlpatterns = patterns('',
|
|||
url(r'^groups/(?P<group_name>[^/]+)/', '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'),
|
||||
|
||||
)
|
||||
|
|
|
|||
120
cbmi/views.py
120
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]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue