from functools import wraps from flask import Flask, render_template, redirect, request, url_for, session, flash from flask_mail import Mail from flask_sqlalchemy import SQLAlchemy from werkzeug.security import generate_password_hash, check_password_hash from sqlalchemy.exc import IntegrityError app = Flask(__name__) # email_option = str(0) # email = str(0) # password = str(0) # with app.app_context(): # print("--- Server Initialization ---") # response = input("Set the email and password type 'skip' to skip this: ") # if response.lower() != "skip": # email = input("Enter your email") # password = input("Enter your emails password") # print(f"Server started. Current role is: {email}\n") app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///accounts.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.secret_key = 'this key is so secret noone will ever get it 👌' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) password_hash = db.Column(db.String(128), nullable=False) with app.app_context(): db.create_all() def login_required(view_func): @wraps(view_func) def wrapped(*args, **kwargs): if 'user_id' not in session: flash('sign in to view that page.') return redirect(url_for('signin')) return view_func(*args, **kwargs) return wrapped from sqlalchemy.exc import IntegrityError @app.route('/submit-form', methods=['POST']) def handle_submission(): form_username = (request.form.get('username') or '').strip() form_email = (request.form.get('email') or '').strip().lower() form_password = request.form.get('password') or '' if not form_username or not form_email or not form_password: return render_template('signup.html', error="All fields must be entered to complete registration"), 400 if len(form_password) < 8: return render_template('signup.html', error="Password must be at least 8 characters"), 400 if User.query.filter_by(username=form_username).first(): return render_template('signup.html', user_taken="Username has already been taken"), 400 if User.query.filter_by(email=form_email).first(): return render_template('signup.html', email_taken="Email has already been used before"), 400 hashed_password = generate_password_hash(form_password) new_user = User(username=form_username, email=form_email, password_hash=hashed_password) try: db.session.add(new_user) db.session.commit() except IntegrityError: db.session.rollback() return render_template('signup.html', error="Username or email has already taken"), 400 return render_template('signup.html', success_message="Account successfully created") @app.route('/users') def view_users(): all_users = User.query.all() html_output = "

Registered Accounts

" html_output += "" for user in all_users: html_output += f"" html_output += "
IDUsernameEmail
{user.id}{user.username}{user.email}
" if not all_users: return "

emptyyyyy daaatabase

" return html_output #Mail system uncomment all of the stuff below this line to use but requires a google account to use will have to put email in username area and password in password area when starting the py file # app.config['MAIL_SERVER'] = 'smtp.google.com' # app.config['MAIL_PORT'] = 587 # app.config['MAIL_USE_TLS'] = True # app.config['MAIL_USERNAME'] = email # app.config['MAIL_PASSWORD'] = password @app.route('/') def home(): return render_template('index.html') @app.route('/bivariate') @login_required def bivariate(): return render_template('bivariate.html') @app.route('/simultaneousequations') @login_required def simultaneousequations(): return render_template('simultaneousequations.html') @app.route('/calculus') @login_required def calculus(): return render_template('calculus.html') @app.route('/triganometry') @login_required def triganometry(): return render_template('triganometry.html') @app.route('/about') def about(): return render_template('about.html') @app.route('/signin', methods=['GET', 'POST']) def signin(): if request.method == 'POST': form_username = request.form.get('username') form_password = request.form.get('password') user = User.query.filter_by(username=form_username).first() if user is None or not check_password_hash(user.password_hash, form_password): flash('Incorrect username or password.') return render_template('signin.html'), 401 session['user_id'] = user.id session['username'] = user.username return redirect(url_for('home')) return render_template('signin.html') @app.route('/logout') def logout(): session.clear() return redirect(url_for('home')) @app.route('/signup') def signup(): return render_template('signup.html') @app.route('/pagemaker') def pagemaker(): return render_template('pagemaker.html') @app.route('/all_users') @login_required def all_users(): return render_template('all_users.html') @app.errorhandler(404) def page_not_found(e): return render_template('404.html'), 404 @app.route('/resetpassword') def resetpassword(): return render_template('resetpassword.html') if __name__ == '__main__': app.run(debug=True)