summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app.py42
-rw-r--r--default_settings.py1
-rw-r--r--forms.py9
-rw-r--r--requirements.txt1
-rw-r--r--templates/index.html10
-rw-r--r--templates/login.html0
-rw-r--r--utils.py12
7 files changed, 66 insertions, 9 deletions
diff --git a/app.py b/app.py
index 8166834..1bf035f 100644
--- a/app.py
+++ b/app.py
@@ -1,14 +1,28 @@
# -*- coding: utf-8 -*-
+import os
from flask import Flask, request
-from utils import templated
-from forms import RegisterForm
+from flask_login import login_required, login_user, logout_user
+from utils import templated, login_manager
+from forms import RegisterForm, LoginForm
+
app = Flask(__name__)
+app.config.from_object('default_settings')
+if 'SPLINE_ACCOUNT_WEB_SETTINGS' in os.environ:
+ app.config.from_envvar('SPLINE_ACCOUNT_WEB_SETTINGS')
+login_manager.setup_app(app)
+
-@app.route('/')
+@app.route('/', methods=['GET', 'POST'])
@templated('index.html')
def index():
- return {}
+ form = LoginForm(request.form)
+ if request.method == 'POST' and form.validate():
+ login_user(form.username.data)
+ return redirect(url_for('index'))
+
+ return {'form': form}
+
@app.route('/register', methods=['GET', 'POST'])
@templated('register.html')
@@ -19,15 +33,31 @@ def register():
mail = form.mail.data
password = form.password.data
return '<h1>501 Not Implemented</h1>'
+
return {'form': form}
-if __name__ == '__main__':
- app.run(debug=True)
+@app.route('/settings')
+@templated('settings.html')
+@login_required
+def settings():
+ return {}
+
+
+@app.route('/logout')
+@login_required
+def logout():
+ logout_user()
+ return redirect(url_for('index'))
+
+if __name__ == '__main__':
+ app.run(debug=True)
+
+
# wir brauchen:
# registrieren
# login
diff --git a/default_settings.py b/default_settings.py
new file mode 100644
index 0000000..bcd641a
--- /dev/null
+++ b/default_settings.py
@@ -0,0 +1 @@
+SECRET_KEY = 'remember to change this to something more random and private'
diff --git a/forms.py b/forms.py
index 273d02f..c560776 100644
--- a/forms.py
+++ b/forms.py
@@ -1,9 +1,16 @@
# -*- coding: utf-8 -*-
from wtforms import Form, validators, TextField, PasswordField
+username = TextField('Benutzername', [validators.Length(min=4, max=20)])
+
class RegisterForm(Form):
- username = TextField('Benutzername', [validators.Length(min=4, max=20)])
+ username = username
mail = TextField('E-Mail-Adresse', [validators.Length(min=6, max=50)])
password = PasswordField('Passwort', [validators.Required(),
validators.EqualTo('password_confirm', message=u'Passwörter stimmen nicht überein')])
password_confirm = PasswordField(u'Passwort bestätigen')
+
+
+class LoginForm(Form):
+ username = username
+ password = PasswordField('Passwort', [validators.Required()])
diff --git a/requirements.txt b/requirements.txt
index 327efd6..1e537a1 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,2 +1,3 @@
Flask==0.6
python-ldap
+Flask-Login
diff --git a/templates/index.html b/templates/index.html
index 9ee3b0f..74ffb6b 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,5 +1,11 @@
{%- extends 'base.html' %}
+{%- from '_macros.html' import render_field %}
{%- block content %}
- <p>Willkommen bei <strong>spline accounts</strong>!</p>
- <p><a href="/register">Account erstellen</a></p>
+<p>Willkommen bei <strong>spline accounts</strong>!</p>
+<p><a href="/register">Account erstellen</a></p>
+<form action="" method="post">
+ {{ render_field(form.username) }}
+ {{ render_field(form.password) }}
+ <input type="submit" value="Login" />
+</form>
{%- endblock %}
diff --git a/templates/login.html b/templates/login.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/templates/login.html
diff --git a/utils.py b/utils.py
index 2f3b433..56d1f89 100644
--- a/utils.py
+++ b/utils.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from functools import wraps
from flask import request, render_template
+from flask_login import LoginManager, UserMixin
# from http://flask.pocoo.org/docs/patterns/viewdecorators/#templating-decorator
def templated(template=None):
@@ -19,3 +20,14 @@ def templated(template=None):
return render_template(template_name, **ctx)
return decorated_function
return decorator
+
+login_manager = LoginManager()
+@login_manager.user_loader
+def load_user(username):
+ raise NotImplemented()
+
+
+class User(UserMixin):
+ def __init__(self, username):
+ self.username = username
+