File size: 2,999 Bytes
d6f1e5b
 
60a3b87
 
 
 
d6f1e5b
f50ce8c
 
 
 
 
60a3b87
 
f50ce8c
60a3b87
 
f50ce8c
 
60a3b87
 
 
d6f1e5b
 
60a3b87
d6f1e5b
3cb819c
d6f1e5b
60a3b87
d6f1e5b
3cb819c
d6f1e5b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60a3b87
 
d6f1e5b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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
@app.route('/')
def index():
    if 'user' in session:
        return render_template("index.html", username=session['user'])
    return redirect(url_for('login'))


# Signup Page
@app.route('/signup', methods=['GET', 'POST'])
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
@app.route('/login', methods=['GET', 'POST'])
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
@app.route('/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)