|
@@ -12,8 +12,6 @@ locale.setlocale(locale.LC_ALL, '')
|
|
|
DATABASE = '/tmp/cavote.db'
|
|
|
SECRET_KEY = '{J@uRKO,xO-PK7B,jF?>iHbxLasF9s#zjOoy=+:'
|
|
|
DEBUG = True
|
|
|
-USERNAME = 'admin'
|
|
|
-PASSWORD = 'admin'
|
|
|
|
|
|
app = Flask(__name__)
|
|
|
app.config.from_object(__name__)
|
|
@@ -49,36 +47,71 @@ def init_db():
|
|
|
# Login / Logout
|
|
|
|
|
|
def valid_login(username, password):
|
|
|
- return username == app.config['USERNAME'] and password == app.config['PASSWORD']
|
|
|
+ return query_db('select * from users where email = ? and password = ?', [username, password], one=True)
|
|
|
+
|
|
|
+def connect_user(user):
|
|
|
+ session['userid'] = user['id']
|
|
|
+ session['username'] = user['name']
|
|
|
+ session['email'] = user['email']
|
|
|
+ session['organization'] = user['organization']
|
|
|
+ if user['is_admin'] == 1:
|
|
|
+ session['is_admin'] = True
|
|
|
+
|
|
|
+def disconnect_user():
|
|
|
+ session.pop('username', None)
|
|
|
+ session.pop('is_admin', None)
|
|
|
|
|
|
@app.route('/login', methods=['GET', 'POST'])
|
|
|
def login():
|
|
|
- error = None
|
|
|
if request.method == 'POST':
|
|
|
- if valid_login(request.form['username'], request.form['password']):
|
|
|
- session['username'] = request.form['username']
|
|
|
- if session['username'] == 'admin':
|
|
|
- session['is_admin'] = True
|
|
|
- flash('You were logged in')
|
|
|
- return redirect(url_for('home'))
|
|
|
+ user = valid_login(request.form['username'], request.form['password'])
|
|
|
+ if user is None:
|
|
|
+ flash('Invalid username/password', 'error')
|
|
|
else:
|
|
|
- error = "Invalid username/password"
|
|
|
- return render_template('login.html', error=error)
|
|
|
+ connect_user(user)
|
|
|
+ flash('You were logged in', 'success')
|
|
|
+ return redirect(url_for('home'))
|
|
|
+ return render_template('login.html')
|
|
|
|
|
|
@app.route('/logout')
|
|
|
def logout():
|
|
|
- session.pop('username', None)
|
|
|
- session.pop('is_admin', None)
|
|
|
- flash('You were logged out')
|
|
|
+ disconnect_user()
|
|
|
+ flash('You were logged out', 'info')
|
|
|
return redirect(url_for('home'))
|
|
|
|
|
|
+#-----------------
|
|
|
+# Change password
|
|
|
+
|
|
|
+@app.route('/password/lost', methods=['GET', 'POST'])
|
|
|
+def password_lost():
|
|
|
+ info = None
|
|
|
+ if request.method == 'POST':
|
|
|
+ user = query_db('select * from users where email = ?', [request.form['email']], one=True)
|
|
|
+ if user is None:
|
|
|
+ flash('Cet utilisateur n\'existe pas !', 'error')
|
|
|
+ else:
|
|
|
+ # :TODO:maethor:120528: Générer la clé, la mettre dans la base de données et envoyer le mail
|
|
|
+ flash(u"Un mail a été envoyé à " + user['email'], 'info')
|
|
|
+ return render_template('password_lost.html')
|
|
|
+
|
|
|
+@app.route('/login/<username>/<key>')
|
|
|
+def login_key(username, key):
|
|
|
+ user = query_db('select * from users where email = ? and key = ?', [username, key], one=True)
|
|
|
+ if user is None:
|
|
|
+ abort(404)
|
|
|
+ else:
|
|
|
+ connect_user(user)
|
|
|
+ # :TODO:maethor:120528: Remplacer la clé pour qu'elle ne puisse plus être utilisée
|
|
|
+ return redirect(url_for('home'))
|
|
|
+
|
|
|
#---------------
|
|
|
# User settings
|
|
|
+
|
|
|
@app.route('/user/settings/<username>')
|
|
|
-def show_settings(username):
|
|
|
- if username != session['username']:
|
|
|
+def show_user(username):
|
|
|
+ if username != session.get('username'):
|
|
|
abort(401)
|
|
|
-
|
|
|
+ return render_template('user_settings.html')
|
|
|
|
|
|
#------------
|
|
|
# User admin
|
|
@@ -127,7 +160,7 @@ def add_vote():
|
|
|
g.db.execute('insert into votes (title, description, date_begin, date_end, is_transparent, is_public, is_multiplechoice) values (?, ?, ?, ?, ?, ?, ?)',
|
|
|
[request.form['title'], request.form['description'], date_begin, date_end, transparent, public, multiplechoice])
|
|
|
g.db.commit()
|
|
|
- flash('New entry was successfully posted')
|
|
|
+ flash('New entry was successfully posted', 'info')
|
|
|
return redirect(url_for('home'))
|
|
|
|
|
|
#------
|