Source code for webapp.routes

""" A collection of Flask routes """

import os
from flask import Blueprint, render_template, request, flash, redirect
from flask_login import login_required, login_user, logout_user, current_user
from werkzeug.security import generate_password_hash, check_password_hash
from .sockets import socketio
from .users import User, DB

blueprint = Blueprint('blueprint', __name__)

[docs]@blueprint.route('/') @blueprint.route('/register', methods=['GET', 'POST']) def register(): """ Renders the register page """ if request.method == 'GET': return render_template('login.html') username = request.form['username'] password = request.form['password'] user = User(username, generate_password_hash(password)) if User.query.filter_by(username=username).count() > 0: flash("Account already exists", 'error') else: DB.session.add(user) DB.session.commit() flash('User successfully registered', 'success') return redirect('/login')
[docs]@blueprint.route('/login', methods=['GET', 'POST']) def login(): """ If it's a POST request, it will attempt to log the user in. Otherwise, it renders the login page. """ if request.method == 'GET': return render_template('login.html') username = request.form['username'] password = request.form['password'] registered_user = User.query.filter_by(username=username).first() if registered_user and check_password_hash(registered_user.password, password): login_user(registered_user) flash('Logged in successfully', 'success') else: flash('Username or Password is invalid', 'error') return redirect('/login') return redirect('home')
[docs]@blueprint.route('/logout') @login_required def logout(): """ Redirects to login page after logging out """ logout_user() return redirect('login')
[docs]@blueprint.route('/') @blueprint.route('/home') @login_required def home(): """ Renders the home page """ return render_template('home.html', title='Home')
[docs]@blueprint.route('/remote') @login_required def remote(): """ Renders the remote page """ return render_template('remote.html', title='Remote Control')
[docs]@blueprint.route('/sensors') @login_required def sensors(): """ Renders the sensor dashboard page """ return render_template('sensors.html', title='Sensor Dashboard')
[docs]@blueprint.route('/automode') @login_required def automode(): """ Renders the autonomous page """ return render_template('automode.html', title='Autonomous Navigation')
[docs]@blueprint.route('/terminal') @login_required def terminal(): """ Renders the virtual terminal page """ return render_template('terminal.html', title='Terminal I/O')
[docs]@blueprint.route('/settings') @login_required def settings_page(): """ Renders the settings page """ return render_template('settings.html', title='Settings')
[docs]@blueprint.route('/about') def about(): """ Renders the about page """ return render_template('about.html', title='About this project')
[docs]@blueprint.route("/shutdown_server") @login_required def shutdown_server(): """ Shutdowns the webapp. """ socketio.stop()
[docs]@blueprint.route("/restart") @login_required def restart(): """ Restarts the robot (Only applicable if webserver runs off rasp pi) """ os.system('sudo reboot')
[docs]@blueprint.route("/shutdown_robot") @login_required def shutdown_robot(): """ Shutsdown the robot (Only applicable if webserver runs off rasp pi) """ os.system('sudo shutdown -h now')
[docs]@blueprint.route("/delete_user") @login_required def delete_user(): """ Deletes the current user's account. """ DB.session.delete(current_user) DB.session.commit() flash("Account deleted", 'success') return redirect('/login')
[docs]@blueprint.route("/reset_password", methods=['GET', 'POST']) @login_required def reset_password(): """ Resets the current user's password. """ if request.method == 'GET': return render_template('home.html') old_password = request.form['old-password'] new_password = request.form['new-password'] user = current_user if check_password_hash(user.password, old_password): user.password = generate_password_hash(new_password) DB.session.add(user) DB.session.commit() flash("Password has been updated", 'success') else: flash("Incorrect old password", 'error') return redirect('home.html')