Passed
Push — mvp ( 2cb3a7...9d6c83 )
by
unknown
01:17
created

app.edit_page()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nop 0
1
import re
2
import secrets
3
4
from flask import Flask, render_template, redirect, url_for, request, session
5
from flask_sqlalchemy import SQLAlchemy
6
7
from src.security import sha512
8
9
app = Flask(__name__)
10
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///bday.db'
11
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
12
db = SQLAlchemy(app)
13
14
app.config.from_object(__name__)
15
app.secret_key = secrets.token_urlsafe(32)
16
17
USERNAME_PATTERN = r'^([\w -]){4,32}$'
18
PASSWORD_PATTERN = r'^(.*(?=.{8,})(?=.*[a-zA-Z])(?=.*\d).*){8,32}$'
19
20
21
# DB Model
22
class User(db.Model):
23
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
24
    pseudo = db.Column(db.String(32))
25
    password = db.Column(db.String(128))
26
    birthday = db.Column(db.Date, default=None)
27
28
29
class Birthday(db.Model):
30
    id = db.Column(db.Integer, primary_key=True)
31
    user_id = db.Column(db.Integer, primary_key=True)
32
    person_name = db.Column(db.String(32))
33
    person_birthday = db.Column(db.Date)
34
35
36
@app.route('/', methods=('GET', 'POST'))
37
def index_page():
38
    return render_template('index.jinja2')
39
40
41
@app.route('/auth/login', methods=('GET', 'POST'))
42
def login_page():
43
    if request.method == 'POST':
44
        username = request.form['username']
45
        password = request.form['password']
46
47
        if username and password:
48
            login = User.query.filter_by(
49
                pseudo=username,
50
                password=sha512(password)
51
            ).first()
52
53
            if login is not None:
54
                session['user'] = {'name': username}
55
                return redirect(url_for('dashboard_page'))
56
57
    return render_template('auth/login.jinja2')
58
59
60
@app.route('/auth/register', methods=('GET', 'POST'))
61
def register_page():
62
    if request.method == 'POST':
63
        username = request.form['username']
64
        password = request.form['password']
65
        confirm_password = request.form['confirm_password']
66
67
        if (
68
                re.match(USERNAME_PATTERN, username)
69
                and re.match(PASSWORD_PATTERN, password)
70
                and confirm_password
71
                and confirm_password == password
72
        ):
73
            new_user = User(
74
                pseudo=username,
75
                password=sha512(password)
76
            )
77
78
            db.session.add(new_user)
79
            db.session.commit()
80
81
            session['user'] = {'name': username}
82
            return redirect(url_for('dashboard_page'))
83
84
    return render_template('auth/register.jinja2')
85
86
87
@app.route('/dashboard')
88
def dashboard_page():
89
    user = session.get('user')
90
91
    if not user:
92
        return redirect(url_for('login_page'))
93
94
    if not user.get('name'):
95
        return redirect(url_for('login_page'))
96
97
    return render_template('dashboard.jinja2')
98
99
100
@app.route('/auth/delete', methods=('GET', 'POST'))
101
def delete_account_page():
102
    return render_template('auth/delete.jinja2')
103
104
105
@app.route('/legal')
106
def legal_page():
107
    return render_template('legal.jinja2')
108
109
110
@app.route('/auth/edit', methods=('GET', 'POST'))
111
def edit_page():
112
    return render_template('auth/edit.jinja2')
113
114
115
@app.route('/logout/')
116
def logout():
117
    return redirect(url_for('index'))
118
119
120
if __name__ == '__main__':
121
    db.create_all()
122
    app.run(debug=True)
123