from flask import Flask, url_for from flask_ldap3_login import LDAP3LoginManager from flask_login import LoginManager, login_user, UserMixin, current_user from flask import render_template_string, redirect, render_template from flask_ldap3_login.forms import LDAPLoginForm from mfa import generateOTP, generateSecret # from ad import updateMfaSecret from db import setupMfaSecret, updateMfaSecret, getMfaSecret, removeMfa import yamlcon app = Flask(__name__) app.config['SECRET_KEY'] = 'secret' app.config['DEBUG'] = True # Setup LDAP Configuration Variables. Change these to your own settings. # All configuration directives can be found in the documentation. # Hostname of your LDAP Server app.config['LDAP_HOST'] = 'corp.bbrunson.com' app.config['LDAP_PORT'] = 389 # Base DN of your directory app.config['LDAP_BASE_DN'] = 'dc=corp,dc=bbrunson,dc=com' # Users DN to be prepended to the Base DN app.config['LDAP_USER_DN'] = 'cn=users' # Groups DN to be prepended to the Base DN # app.config['LDAP_GROUP_DN'] = 'cn=groups' # The RDN attribute for your user schema on LDAP app.config['LDAP_USER_RDN_ATTR'] = 'cn' # The Attribute you want users to authenticate to LDAP with. app.config['LDAP_USER_LOGIN_ATTR'] = 'sAMAccountName' adinfo = yamlcon.load("adinfo.yaml") # The Username to bind to LDAP with app.config['LDAP_BIND_USER_DN'] = adinfo.get('adbind_user', '') # The Password to bind to LDAP with app.config['LDAP_BIND_USER_PASSWORD'] = adinfo.get('adbind_pass', '') login_manager = LoginManager(app) # Setup a Flask-Login Manager ldap_manager = LDAP3LoginManager(app) # Setup a LDAP3 Login Manager. # Create a dictionary to store the users in when they authenticate # This example stores users in memory. users = {} # Declare an Object Model for the user, and make it comply with the # flask-login UserMixin mixin. class User(UserMixin): def __init__(self, dn, username, data): self.dn = dn self.username = username self.data = data def __repr__(self): return self.dn def get_id(self): return self.dn # Declare a User Loader for Flask-Login. # Simply returns the User if it exists in our 'database', otherwise # returns None. @login_manager.user_loader def load_user(id): if id in users: return users[id] return None # Declare The User Saver for Flask-Ldap3-Login # This method is called whenever a LDAPLoginForm() successfully validates. # Here you have to save the user, and return it so it can be used in the # login controller. @ldap_manager.save_user def save_user(dn, username, data, memberships): user = User(dn, username, data) users[dn] = user return user # Declare some routes for usage to show the authentication process. @app.route('/') def home(): # Redirect users who are not logged in. if not current_user or current_user.is_anonymous: return redirect(url_for('login')) # User is logged in, so show them a page with their cn and dn. # template = """ #