Spaces:
Sleeping
Sleeping
| from flask import Flask, render_template, request, redirect, url_for, flash, session, make_response | |
| from datetime import datetime, timedelta | |
| from pymongo import MongoClient | |
| from bson.objectid import ObjectId | |
| import pytz | |
| import os | |
| from werkzeug.security import generate_password_hash, check_password_hash | |
| from dotenv import load_dotenv # For hiding Secrets | |
| # Load environment variables from .env | |
| load_dotenv() | |
| app = Flask(__name__) | |
| app.secret_key = os.getenv("SECRET_KEY") # Secret key from .env # Required for flash and sessions | |
| # MongoDB connection | |
| # MongoDB connection from .env | |
| MONGO_URI = os.getenv("MONGO_URI") | |
| client = MongoClient(MONGO_URI) | |
| # Database and Collection setup | |
| db = client.login_app | |
| users = db.login # Collection name | |
| # Home Page - index page | |
| def index(): | |
| if 'user' in session: | |
| return render_template("index.html", username=session['user']) | |
| return redirect(url_for('login')) | |
| # Signup Page | |
| def signup(): | |
| if request.method == 'POST': | |
| username = request.form['username'].strip() | |
| password = request.form['password'].strip() | |
| if users.find_one({'username': username}): | |
| flash("Username already exists!", "danger") | |
| return redirect(url_for('signup')) | |
| hashed_pw = generate_password_hash(password) | |
| users.insert_one({'username': username, 'password': hashed_pw}) | |
| flash("Signup successful! Please login.", "success") | |
| return redirect(url_for('login')) | |
| return render_template('signup.html') | |
| # Login Page | |
| def login(): | |
| if request.method == 'POST': | |
| username = request.form['username'].strip() | |
| password = request.form['password'].strip() | |
| remember = request.form.get('remember') | |
| user = users.find_one({'username': username}) | |
| if user and check_password_hash(user['password'], password): | |
| session['user'] = username | |
| # If "Remember Me" is checked, set cookie | |
| resp = make_response(redirect(url_for('index'))) | |
| if remember: | |
| resp.set_cookie('remember_token', username, max_age=60*60*24*7) # 7 days | |
| return resp | |
| else: | |
| flash("Invalid username or password!", "danger") | |
| return redirect(url_for('login')) | |
| # Auto login using remember me cookie | |
| remember_token = request.cookies.get('remember_token') | |
| if remember_token and users.find_one({'username': remember_token}): | |
| session['user'] = remember_token | |
| return redirect(url_for('index')) | |
| return render_template('login.html') | |
| # Logout | |
| def logout(): | |
| session.pop('user', None) | |
| resp = make_response(redirect(url_for('login'))) | |
| resp.set_cookie('remember_token', '', expires=0) # Clear cookie | |
| flash("You have been logged out.", "info") | |
| return resp | |
| if __name__ == "__main__": | |
| app.run(debug=True) | |