Remove logged_in variable
[cavote.git] / main.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 from flask import Flask, request, session, g, redirect, url_for, abort, \
5 render_template, flash
6 import sqlite3
7 from datetime import date, timedelta
8 import locale
9 locale.setlocale(locale.LC_ALL, '')
10
11 DATABASE = '/tmp/cavote.db'
12 SECRET_KEY = '{J@uRKO,xO-PK7B,jF?>iHbxLasF9s#zjOoy=+:'
13 DEBUG = True
14 USERNAME = 'admin'
15 PASSWORD = 'admin'
16
17 app = Flask(__name__)
18 app.config.from_object(__name__)
19
20 def connect_db():
21 return sqlite3.connect(app.config['DATABASE'])
22
23 @app.before_request
24 def before_request():
25 g.db = connect_db()
26
27 @app.teardown_request
28 def teardown_request(exception):
29 g.db.close()
30
31 @app.route('/')
32 def home():
33 return render_template('index.html')
34
35
36 #----------------
37 # Login / Logout
38
39 def valid_login(username, password):
40 return username == app.config['USERNAME'] and password == app.config['PASSWORD']
41
42 @app.route('/login', methods=['GET', 'POST'])
43 def login():
44 error = None
45 if request.method == 'POST':
46 if valid_login(request.form['username'], request.form['password']):
47 session['username'] = request.form['username']
48 if session['username'] == 'admin':
49 session['is_admin'] = True
50 flash('You were logged in')
51 return redirect(url_for('home'))
52 else:
53 error = "Invalid username/password"
54 return render_template('login.html', error=error)
55
56 @app.route('/logout')
57 def logout():
58 session.pop('username', None)
59 session.pop('is_admin', None)
60 flash('You were logged out')
61 return redirect(url_for('home'))
62
63 #---------------
64 # User settings
65 @app.route('/user/settings/<username>')
66 def show_settings(username):
67 if username != session['username']:
68 abort(401)
69
70
71 #------------
72 # User admin
73
74
75 #------------
76 # Votes list
77
78 @app.route('/votes/<votes>')
79 def show_votes(votes):
80 today = date.today()
81 if votes == 'all':
82 cur = g.db.execute('select title, description, date_begin, date_end from votes order by id desc')
83 elif votes == 'archives':
84 cur = g.db.execute('select title, description, date_begin, date_end from votes where date_end < (?) order by id desc', [today])
85 elif votes == 'currently':
86 cur = g.db.execute('select title, description, date_begin, date_end from votes where date_end >= (?) order by id desc', [today])
87 else:
88 abort(404)
89 votes = [dict(title=row[0], description=row[1], date_begin=row[2], date_end=row[3],
90 pourcent=60) for row in cur.fetchall()]
91 return render_template('show_votes.html', votes=votes)
92
93 #-------------
94 # Votes admin
95
96 @app.route('/votes/admin/new')
97 def new_vote():
98 if not session.get('is_admin'):
99 abort(401)
100 return render_template('new_vote.html')
101
102 @app.route('/votes/admin/add', methods=['POST'])
103 def add_vote():
104 if not session.get('is_admin'):
105 abort(401)
106 date_begin = date.today()
107 date_end = date.today() + timedelta(days=int(request.form['days']))
108 transparent = 0
109 public = 0
110 multiplechoice = 0
111 if 'transparent' in request.form.keys():
112 transparent = 1
113 if 'public' in request.form.keys():
114 public = 1
115 if 'multiplechoice' in request.form.keys():
116 multiplechoice = 1
117 g.db.execute('insert into votes (title, description, date_begin, date_end, is_transparent, is_public, is_multiplechoice) values (?, ?, ?, ?, ?, ?, ?)',
118 [request.form['title'], request.form['description'], date_begin, date_end, transparent, public, multiplechoice])
119 g.db.commit()
120 flash('New entry was successfully posted')
121 return redirect(url_for('home'))
122
123 #------
124 # Main
125
126 if __name__ == '__main__':
127 app.run()
128