app.py
    
    Python script, ASCII text executable
        
            1
            import flask 
        
            2
            from flask_sqlalchemy import SQLAlchemy 
        
            3
            from flask_bcrypt import Bcrypt 
        
            4
            from flask_migrate import Migrate 
        
            5
             
        
            6
            app = flask.Flask(__name__) 
        
            7
            app.config["SQLALCHEMY_DATABASE_URI"] = \ 
        
            8
                "postgresql://echo:1234@localhost:5432/echo" 
        
            9
            db = SQLAlchemy(app) 
        
            10
            bcrypt = Bcrypt(app) 
        
            11
            migrate = Migrate(app, db) 
        
            12
            app.config["SESSION_TYPE"] = "filesystem" 
        
            13
            app.config["SECRET_KEY"] = "super secret" 
        
            14
             
        
            15
            with app.app_context(): 
        
            16
                class User(db.Model): 
        
            17
                    username = db.Column(db.String(64), unique=True, nullable=False, primary_key=True) 
        
            18
                    password = db.Column(db.String(72), nullable=False) 
        
            19
                    admin = db.Column(db.Boolean, nullable=False, default=False) 
        
            20
             
        
            21
                    def __init__(self, username, password, admin=False): 
        
            22
                        self.username = username 
        
            23
                        self.password = bcrypt.generate_password_hash(password).decode("utf-8") 
        
            24
                        self.admin = admin 
        
            25
             
        
            26
             
        
            27
            @app.context_processor 
        
            28
            def default(): 
        
            29
                return { 
        
            30
                    "session": flask.session, 
        
            31
                } 
        
            32
             
        
            33
             
        
            34
            @app.route("/") 
        
            35
            def dashboard(): 
        
            36
                return flask.render_template("dashboard.html") 
        
            37
             
        
            38
             
        
            39
            @app.route("/login", methods=["GET"]) 
        
            40
            def login(): 
        
            41
                return flask.render_template("login.html") 
        
            42
             
        
            43
             
        
            44
            @app.route("/signup", methods=["GET"]) 
        
            45
            def signup(): 
        
            46
                return flask.render_template("signup.html") 
        
            47
             
        
            48
             
        
            49
            @app.route("/signup", methods=["POST"]) 
        
            50
            def signup_post(): 
        
            51
                if flask.request.form["password"] != flask.request.form["password2"]: 
        
            52
                    flask.flash("Passwords do not match") 
        
            53
                    return flask.redirect("/signup", code=303) 
        
            54
                if db.session.get(User, flask.request.form["username"]): 
        
            55
                    flask.flash("Username already exists") 
        
            56
                    return flask.redirect("/signup", code=303) 
        
            57
             
        
            58
                new_user = User( 
        
            59
                    flask.request.form["username"], 
        
            60
                    flask.request.form["password"], 
        
            61
                ) 
        
            62
                db.session.add(new_user) 
        
            63
                db.session.commit() 
        
            64
                flask.session["username"] = new_user.username 
        
            65
                return flask.redirect("/", code=303) 
        
            66
             
        
            67
             
        
            68
            @app.route("/timeline/<endpoint_id>") 
        
            69
            def info(endpoint_id): 
        
            70
                return flask.render_template("timeline.html", endpoint=endpoint_id) 
        
            71