def delete(id): """Delete a post. Ensures that the post exists and that the logged in user is the author of the post. """ get_post(id) db = get_db() db.cursor().execute('DELETE FROM post WHERE id = ?', (id, )) db.commit() return redirect(url_for('home.index'))
def register(): """Register a new user. Validates that the username is not already taken. Hashes the password for security. """ if request.method == 'POST': username = request.form['username'] password = request.form['password'] error = None if not username or not password: error = 'Username or Password is required.' elif len(username) > 512: error = 'Username is longer than 255.' elif len(password) > 512: error = 'Password is longer than 255.' else: with get_db().cursor() as cursor: cursor.execute( 'SELECT id FROM thedoor WHERE door_name = %s', (username,) ) repeat = cursor.fetchone() if repeat is not None: error = 'User {0} is already registered.'.format(username) if error is None: # the name is available, store it in the database and go to # the login page with get_db().cursor() as cursor: cursor.execute( 'INSERT INTO thedoor (door_name, door_pwd) VALUES (%s, %s)', (username, generate_password_hash(password)) ) get_db().commit() return redirect(url_for('auth.login')) flash(error) return render_template('auth/register.html')
def load_logged_in_user(): """If a user id is stored in the session, load the user object from the database into ``g.user``.""" user_id = session.get('user_id') if user_id is None: g.user = None else: with get_db().cursor() as cursor: cursor.execute( 'SELECT * FROM thedoor WHERE id = %s', (user_id,) ) g.user = cursor.fetchone()
def index(): """Show the article, most recent first.""" with get_db().cursor() as cursor: cursor.execute( 'SELECT au.id, auth_inf_uid, auth_name, wcount, artcount, enjoy' ' FROM auth_inf au JOIN thedoor ON au.auth_inf_uid = thedoor.id') auth_inf = cursor.fetchall() cursor.execute( 'SELECT ar.id, art_inf_uid, created, arttitle, bcontexts, tag, rcount, awesome, oppose' ' FROM art_inf ar') art_inf = cursor.fetchall() return render_template("home.html")
def create(): """Create a new post for the current user.""" if request.method == 'POST': title = request.form['title'] body = request.form['body'] error = None if not title: error = 'Title is required.' if error is not None: flash(error) else: db = get_db() db.cursor().execute( 'INSERT INTO post (title, body, author_id)' ' VALUES (?, ?, ?)', (title, body, g.user['id'])) db.commit() return redirect(url_for('blog.index')) return render_template('blog/create.html')
def update(id): """Update a post if the current user is the author.""" post = get_post(id) if request.method == 'POST': title = request.form['title'] body = request.form['body'] error = None if not title: error = 'Title is required.' if error is not None: flash(error) else: db = get_db() db.cursor().execute( 'UPDATE post SET title = ?, body = ? WHERE id = ?', (title, body, id)) db.commit() return redirect(url_for('blog.index')) return render_template('blog/update.html', post=post)
def get_post(id, check_author=True): """Get a post and its author by id. Checks that the id exists and optionally that the current user is the author. :param id: id of post to get :param check_author: require the current user to be the author :return: the post with author information :raise 404: if a post with the given id doesn't exist :raise 403: if the current user isn't the author """ post = get_db().cursor().execute( 'SELECT p.id, title, body, created, author_id, username' ' FROM post p JOIN user u ON p.author_id = u.id' ' WHERE p.id = ?', (id, )).fetchone() if post is None: abort(404, "Post id {0} doesn't exist.".format(id)) if check_author and post['author_id'] != g.user['id']: abort(403) return post
def login(): """Log in a registered user by adding the user id to the session.""" if request.method == 'POST': username = request.form['username'] password = request.form['password'] error = None with get_db().cursor() as cursor: cursor.execute( 'SELECT * FROM thedoor WHERE door_name = %s', (username,) ) user = cursor.fetchone() if user is None or not check_password_hash(user['door_pwd'], password): error = 'Incorrect username or password.' if error is None: # store the user id in a new session and return to the index session.clear() session['user_id'] = user['id'] return redirect(url_for('auth.login')) flash(error) return render_template('auth/login.html')