forked from moepman/bk-dss
Use ldap/redis. Use external configuration file (example provided). Prepare login.
This commit is contained in:
parent
67117ebf3c
commit
a26eb822c6
@ -8,6 +8,8 @@ TBA
|
|||||||
|
|
||||||
* py-flask >= 0.10
|
* py-flask >= 0.10
|
||||||
* py-flask-wtf >= 0.10
|
* py-flask-wtf >= 0.10
|
||||||
|
* py-ldap >= 2.4.15
|
||||||
|
* py-redis >= 2.10
|
||||||
|
|
||||||
## Misc
|
## Misc
|
||||||
|
|
||||||
|
5
config.cfg.example
Normal file
5
config.cfg.example
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
DEBUG = True
|
||||||
|
SECRET_KEY = "CHANGE!ME"
|
||||||
|
|
||||||
|
LDAP_URI = "ldaps://ldap.example.com"
|
||||||
|
LDAP_BASE = "ou=people,dc=example,dc=com"
|
21
index.py
21
index.py
@ -2,19 +2,36 @@
|
|||||||
|
|
||||||
from flask import Flask, render_template, redirect, url_for, session
|
from flask import Flask, render_template, redirect, url_for, session
|
||||||
from flask_wtf import Form
|
from flask_wtf import Form
|
||||||
|
import ldap
|
||||||
|
from redis import Redis
|
||||||
from wtforms.fields import PasswordField, SelectField, StringField, SubmitField
|
from wtforms.fields import PasswordField, SelectField, StringField, SubmitField
|
||||||
from wtforms.validators import Required
|
from wtforms.validators import Required
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config['SECRET_KEY'] = 'CHANGE!ME'
|
app.config.from_pyfile('index.cfg')
|
||||||
app.jinja_env.trim_blocks = True
|
app.jinja_env.trim_blocks = True
|
||||||
app.jinja_env.lstrip_blocks = True
|
app.jinja_env.lstrip_blocks = True
|
||||||
|
|
||||||
|
rdb = Redis(host='127.0.0.1', password='foobared')
|
||||||
|
|
||||||
|
|
||||||
|
class LoginForm(Form):
|
||||||
|
user = StringField('Username', validators=[Required()])
|
||||||
|
pswd = PasswordField('Password', validators=[Required()])
|
||||||
|
submit = SubmitField('Login')
|
||||||
|
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
def index():
|
def index():
|
||||||
return render_template('index.html')
|
return render_template('index.html')
|
||||||
|
|
||||||
|
@app.route('/login', methods=['GET', 'POST'])
|
||||||
|
def login():
|
||||||
|
form = LoginForm()
|
||||||
|
if form.validate_on_submit():
|
||||||
|
# TODO implement login with LDAP
|
||||||
|
return redirect(url_for('index'))
|
||||||
|
return render_template('login.html', form=form)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(host='0.0.0.0', port=5000, debug=True)
|
app.run(host='0.0.0.0', port=5000)
|
||||||
|
3
templates/_helpers.html
Normal file
3
templates/_helpers.html
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{% macro render_field(field) %}
|
||||||
|
<div class="form-group {% if field.errors %}has-error{% endif %}">{{ field.label(class_="control-label") }}{{ field(class_="form-control") }}{% for error in field.errors %}[ {{ error }} ]{% endfor %}</div>
|
||||||
|
{%- endmacro %}
|
@ -4,7 +4,6 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block navigation %}
|
{% block navigation %}
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#">Foo</a></li>
|
<li><a href="{{ url_for('login') }}">Login</a></li>
|
||||||
<li><a href="#">Bar</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
15
templates/login.html
Normal file
15
templates/login.html
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{% from "_helpers.html" import render_field %}
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
<form method="POST">
|
||||||
|
{{ form.hidden_tag() }}
|
||||||
|
{{ render_field(form.user) }}
|
||||||
|
{{ render_field(form.pswd) }}
|
||||||
|
<div class="form-group">{{ form.submit(class_="btn btn-default") }}</div>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
|
{% block navigation %}
|
||||||
|
<ul>
|
||||||
|
<li><a href="{{ url_for('login') }}">Login</a></li>
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user