changeset 6:27d63cac76ac

Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
author Michał Rudowicz <michal.rudowicz@fl9.eu>
date Mon, 28 Feb 2011 11:14:35 +0100
parents 3ba60dfc1d64
children d86794939fe4
files frontend/mfrontend/db.py frontend/mfrontend/exceptions.py frontend/mfrontend/views/frontend.py
diffstat 3 files changed, 39 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/frontend/mfrontend/db.py	Sun Feb 27 09:33:03 2011 +0100
+++ b/frontend/mfrontend/db.py	Mon Feb 28 11:14:35 2011 +0100
@@ -4,7 +4,7 @@
 import sqlite3
 from flask import g
 import ConfigParser
-from mfrontend import utils
+from mfrontend import utils, exceptions
 from contextlib import closing
 import os.path
 
@@ -61,7 +61,9 @@
     if user is None:    # Brak użytkownika o takiej nazwie
         return False
     if user['password'] == utils.hashPassword(password):
-        return True     # Jeśli mamy takiego użytkownika, i hasło się zgadza
+        if not user['activated']:
+            raise exceptions.UserNotActivated()
+        return True     # Jeśli aktywny i hasło dobre, to wpuszczamy
     # Najwyraźniej jest taki użytkownik, ale hasło się nie zgadza
     return False
 
@@ -71,4 +73,8 @@
        @param password Hasło w czystym tekście, funkcja sama
                        zajmie się hashowaniem
     """
-    return
+    user = query_db('select * from users where username = ?',
+                    [username], one=True)
+    if user is not None:
+        raise Exception(u'Użytkownik o takiej nazwie już istnieje')
+    hashedPasswd = utils.hashPassword(password)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frontend/mfrontend/exceptions.py	Mon Feb 28 11:14:35 2011 +0100
@@ -0,0 +1,14 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+class UserNotActivated(Exception):
+    def __init__(self):
+        pass
+    def __str__(self):
+        return u"Konto nie zostało uaktywnione."
+
+class BadPasswordOrUsername(Exception):
+    def __init__(self):
+        pass
+    def __str__(self):
+        return u"Błędna nazwa użytkownika lub hasło."
--- a/frontend/mfrontend/views/frontend.py	Sun Feb 27 09:33:03 2011 +0100
+++ b/frontend/mfrontend/views/frontend.py	Mon Feb 28 11:14:35 2011 +0100
@@ -3,14 +3,14 @@
 
 from flask import Module, render_template, request, url_for
 from flask import escape, session, redirect, flash, abort
-from mfrontend import db, utils
+from mfrontend import db, utils, exceptions
 frontend = Module(__name__)
 
 @frontend.route('/')
 def index():
     return render_template('hello.html')
 
-@frontend.route('/install')
+@frontend.route('/install/')
 def install():
     """Instaluje aplikację, tworząc pustą bazę danych
        według schematu.
@@ -20,22 +20,25 @@
     else:
         abort(404)
 
-@frontend.route('/login', methods=['GET', 'POST'])
+@frontend.route('/login/', methods=['GET', 'POST'])
 def login():
     if request.method == 'POST':
-        if db.user_can_login(request.form['username'],
-                             request.form['password']) :
-            session['logged_in'] = True
-            session['logged_user'] = request.form['username']
-            flash('Zalogowano')
+        try:
+            if db.user_can_login(request.form['username'],
+                                 request.form['password']) :
+                session['logged_in'] = True
+                session['logged_user'] = request.form['username']
+                flash('Zalogowano')
+                return redirect(url_for('index'))
+            else:
+                raise exceptions.BadPasswordOrUsername()
+        except (exceptions.UserNotActivated,
+                exceptions.BadPasswordOrUsername) as e:
+            flash(e)
             return redirect(url_for('index'))
-        return "Uname: {0}<br />Passwd: {1}<br />Hashpwd: {2}".format(
-            request.form['username'],
-            request.form['password'],
-            utils.hashPassword(request.form['password']))
     return render_template('login.html')
 
-@frontend.route('/logout')
+@frontend.route('/logout/')
 def logout():
     """Funkcja powoduje wyczyszczenie sesji użytkownika,
        a w efekcie wylogowanie z systemu.