diff --git a/db.py b/db.py index db07d3397e35ddbcd677e3ea35d225d62f84bafa..4213d1709d4d0704e44ccdbf2ecc85356e0e906c 100644 --- a/db.py +++ b/db.py @@ -99,6 +99,8 @@ def ldapget(user): conn = ldap3.Connection('ldaps://rumo.fsmpi.rwth-aachen.de', auto_bind=True) conn.search("ou=users,dc=fsmpi,dc=rwth-aachen,dc=de", "(uid=%s)"%user, attributes=ldap3.ALL_ATTRIBUTES) + if not conn.entries: + return {} e = conn.entries[0] return {'uid': user, 'givenName': e.givenName.value, 'sn':e.sn.value} else: diff --git a/server.py b/server.py index e7572d7da8843da52bb052e50753d7e62e32b059..c7bca4b85a82d14ffb964ec8e45c2267657a25e5 100755 --- a/server.py +++ b/server.py @@ -132,10 +132,15 @@ def login(): if request.method == 'GET': return render_template('login.html') user, groups = ldapauth(request.form.get('user'), request.form.get('password')) - if user and 'users' in groups: - session['user'] = ldapget(user) - else: + if not user or not 'users' in groups: flash('Login fehlgeschlagen!') + return render_template('login.html') + session['user'] = ldapget(user) + dbuser = query('SELECT * FROM users WHERE name = ?', user) + if not dbuser: + query('INSERT INTO users (name, realname, fsacc, level, calendar_key, rfc6238) VALUES (?, ?, ?, 1, "", "")', user, session['user']['givenName'], user) + dbuser = query('SELECT * FROM users WHERE name = ?', user) + session['user']['dbid'] = dbuser[0]['id'] return redirect(request.values.get('ref', url_for('index'))) @app.route('/logout', methods=['GET', 'POST']) @@ -164,6 +169,10 @@ def edit(): table, id, column = key.split('.', 2) assert table in tabs assert column in tabs[table][2] + old = query('SELECT %s AS value FROM %s WHERE %s = ?'%(column, table, tabs[table][1]), id) + query('''INSERT INTO changelog ("when", who, "table", id_key, id_value, field, value_old, value_new, executed) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1)''', datetime.now(), session['user']['dbid'], table, + tabs[table][1], id, column, old[0]['value'], val) query('UPDATE %s SET %s = ? WHERE %s = ?'%(tabs[table][0], column, tabs[table][1]), val, id) query('COMMIT') @@ -254,4 +263,5 @@ def stats(): @register_navbar('Changelog', 'book') @mod_required def log(): - return render_template('log.html', changelog=query('SELECT * FROM changelog ORDER BY "when" LIMIT 10')) + changelog = query('SELECT * FROM changelog LEFT JOIN users ON (changelog.who = users.id) ORDER BY "when" DESC LIMIT 10') + return render_template('log.html', changelog=changelog) diff --git a/templates/log.html b/templates/log.html index 188c0c0d0c1c7083d76e2c21dc183126bff6d138..8d4db3260770eab4c4f5449ee7c8ab4f6073f1f6 100644 --- a/templates/log.html +++ b/templates/log.html @@ -18,7 +18,11 @@ {% for i in changelog %} <tr> <td>{{i.when}}</td> + {% if i.realname %} + <td>{{i.realname}} ({{i.who}})</td> + {% else %} <td>{{i.who}}</td> + {% endif %} <td>{{i.path}}</td> <td>"{{i.value_old}}"</td> <td>"{{i.value_new}}"</td>