# HG changeset patch # User Michał Rudowicz # Date 1298888075 -3600 # Node ID 27d63cac76ac2301d0f759fe5b84be03febfb495 # Parent 3ba60dfc1d6457419a1141fdcd841ada8bdd7a59 Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu diff -r 3ba60dfc1d64 -r 27d63cac76ac frontend/mfrontend/db.py --- 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) diff -r 3ba60dfc1d64 -r 27d63cac76ac frontend/mfrontend/exceptions.py --- /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." diff -r 3ba60dfc1d64 -r 27d63cac76ac frontend/mfrontend/views/frontend.py --- 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}
Passwd: {1}
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.