diff --git a/server.py b/server.py index f0b895abf679170dcba5db2b214b10b339394f2c..0253bf98b78d135849f8bb9a5fe681b7b5268601 100755 --- a/server.py +++ b/server.py @@ -1,8 +1,10 @@ #!/bin/python -from flask import Flask, render_template, g, request, url_for, redirect +from flask import Flask, render_template, g, request, url_for, redirect, session import mysql.connector import sqlite3 import os +import ldap3 +import re app = Flask(__name__) config = app.config @@ -71,6 +73,23 @@ def searchquery(text, columns, match, tables, suffix, *suffixparams): expr = 'SELECT *,SUM(_prio) AS _score FROM (%s) AS _tmp %s'%(' UNION '.join(subexprs), suffix) return query(expr, *params, *suffixparams) +LDAP_USERRE = re.compile(r'[^a-z0-9]') +def ldapauth(user, password): + notldap = {'videoag':('videoag', ['users','videoag']), 'gustav':('passwort', ['users'])} + user = LDAP_USERRE.sub(r'', user.lower()) + if 'LDAP_HOST' in config: + try: + conn = ldap3.Connection(config['LDAP_HOST'], 'uid=%s,ou=users,dc=fsmpi,dc=rwth-aachen,dc=de'%user, password, auto_bind=True) + if conn.search("ou=groups,dc=fsmpi,dc=rwth-aachen,dc=de", "(&(cn=*)(memberUid=%s))"%user, attributes=['cn']): + groups = [e.cn.value for e in conn.entries] + conn.unbind() + return user, groups + except ldap3.core.exceptions.LDAPBindError: + pass + elif config.get('DEBUG') and user in notldap and password == notldap[user][0]: + return user, notldap[user][1] + return None, [] + @app.route('/') def index(): return render_template('index.html', latestvideos=query('''