LILiK login and user managment web interface
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

53 lines
1.5 KiB

#!/bin/usr/env python3
import lilikusers
import json
from flask import Flask, jsonify
from flask import request, Response
from functools import wraps
app = Flask(__name__)
lilik_ldap = lilikusers.LILiK_LDAP()
def check_auth(user_name, password):
"""This function is called to check if a username /
password combination is valid.
"""
return lilik_ldap.login(user_name, password)
def authenticate():
"""Sends a 401 response that enables basic auth"""
return Response(
'Could not verify your access level for that URL.\n'
'You have to login with proper credentials', 401,
{'WWW-Authenticate': 'Basic realm="Login Required"'})
def requires_auth(f):
@wraps(f)
def decorated(*args, **kwargs):
auth = request.authorization
if not auth or not check_auth(auth.username, auth.password):
return authenticate()
return f(*args, **kwargs)
return decorated
@app.route('/api/users', methods=['GET'])
@requires_auth
def get_users():
''' return the list of users'''
return jsonify(lilik_ldap.get_users())
@app.route('/api/user/<user_name>', methods=['GET'])
@requires_auth
def get_user(user_name):
''' return the list of users'''
return jsonify(lilik_ldap.get_user(user_name).to_dict())
@app.route('/api/user/<user_name>', methods=['POST'])
@requires_auth
def post_user(self, user_name):
new_lilik_user = request.get_json()
return lilik_ldap.get_user(user_name).update(new_lilik_user)
if __name__ == '__main__':
app.run(debug=True)