Skip to content

Commit 103487a

Browse files
author
Raziel206
committed
welp
1 parent de5ef31 commit 103487a

22 files changed

Lines changed: 1017 additions & 110 deletions

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
node_modules
22
build
33
.vercel
4+
backend/env
5+
.env
6+
__pycache__

backend/extensions.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from flask_pymongo import PyMongo
2+
3+
mongo = PyMongo()

backend/main.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from flask import Flask
2+
from routes.index import index_bp
3+
from routes.login import login_bp
4+
from routes.register import register_bp
5+
from routes.dashboard import dashboard_bp
6+
from routes.githublogin import githublogin_bp
7+
from routes.handle_requests import handler_bp
8+
from routes.auth import auth_bp
9+
from flask_cors import CORS
10+
from extensions import mongo
11+
from dotenv import load_dotenv
12+
import os
13+
14+
load_dotenv()
15+
16+
app = Flask(__name__)
17+
app.config["MONGO_URI"] = os.getenv("MONGODB_URL")
18+
app.config["MONGO_URI"] = "mongodb://localhost:27017/mydatabase"
19+
mongo.init_app(app)
20+
CORS(app)
21+
22+
app.secret_key = os.getenv("SECRET_KEY")
23+
24+
app.register_blueprint(index_bp)
25+
app.register_blueprint(login_bp)
26+
app.register_blueprint(githublogin_bp)
27+
app.register_blueprint(register_bp)
28+
app.register_blueprint(auth_bp)
29+
app.register_blueprint(dashboard_bp)
30+
app.register_blueprint(handler_bp)
31+
32+
33+
34+
35+
if __name__ == '__main__':
36+
app.run(port=5000, debug=True)
37+

backend/requirements.txt

652 Bytes
Binary file not shown.

backend/routes/auth.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from flask import Blueprint, flash, render_template, request, redirect, url_for, session
2+
from werkzeug.security import check_password_hash
3+
from extensions import mongo
4+
5+
auth_bp = Blueprint('auth', __name__)
6+
7+
8+
9+
@auth_bp.route("/auth", methods=["GET", "POST"])
10+
def auth():
11+
if request.method == "GET":
12+
return render_template("login.html")
13+
14+
email = request.form.get("email", "")
15+
password = request.form.get("password", "")
16+
17+
user=mongo.db.admins.find_one({"email": email})
18+
19+
if user and check_password_hash(user["password"], password):
20+
session["user"] = user["name"]
21+
session["email"] = user["email"]
22+
session.parmanent = False
23+
return redirect(url_for("dashboard.dashboard"))
24+
25+
flash("Invalid credentials" if not user else "Password Incorrect", "error")
26+
return redirect(url_for("login.login"))
27+

backend/routes/dashboard.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from flask import Blueprint, render_template, request, session, redirect, url_for
2+
from extensions import mongo
3+
4+
dashboard_bp = Blueprint('dashboard', __name__)
5+
6+
@dashboard_bp.route("/dashboard")
7+
def dashboard():
8+
if "user" not in session:
9+
return redirect(url_for("auth.auth"))
10+
user_count=mongo.db.user.count_documents({})
11+
admin_count=mongo.db.admins.count_documents({})
12+
return render_template("dashboard.html",user=session.get("user"), user_count=user_count, admin_count=admin_count)
13+
14+
@dashboard_bp.route("/logout")
15+
def logout():
16+
session.clear()
17+
return redirect(url_for("login.login"))
18+
19+
@dashboard_bp.route("/dashboard/profile", methods=["GET","POST"])
20+
def profile():
21+
if "user" not in session:
22+
return redirect(url_for("auth.auth"))
23+
email=session.get("email")
24+
user=mongo.db.admins.find_one({"email": email})
25+
admin_id=user["admin_id"]
26+
username=user["name"]
27+
return render_template("profile.html", user=session.get("user"), admin_id=admin_id, username=username,email=email)
28+
29+
@dashboard_bp.route("/dashboard/search", methods=["GET", "POST"])
30+
def search():
31+
if "user" not in session:
32+
return redirect(url_for("auth.auth"))
33+
34+
query = request.args.get("query", "")
35+
# Implement search logic here, e.g., querying the database
36+
results = [] # Placeholder for search results
37+
38+
return render_template("search_results.html", user=session.get("user"), query=query, results=results)

backend/routes/githublogin.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from flask import Flask, request, jsonify,Blueprint
2+
from flask_cors import CORS # Run: pip install flask-cors
3+
from dotenv import load_dotenv
4+
import os
5+
import requests
6+
7+
githublogin_bp=Blueprint('githublogin',__name__)
8+
9+
GITHUB_CLIENT_ID = os.getenv('GITHUB_CLIENT_ID') # Replace with your actual Client ID
10+
GITHUB_CLIENT_SECRET = os.getenv('GITHUB_CLIENT_SECRET') # Replace with your actual Client Secret
11+
12+
@githublogin_bp.route('/github/callback', methods=['GET','POST'])
13+
def github_callback():
14+
data = request.json
15+
code = data.get('code')
16+
17+
if not code:
18+
return jsonify({'error': 'Missing code parameter'}), 400
19+
20+
# Exchange the code for an access token
21+
token_url = 'https://github.com/login/oauth/access_token'
22+
payload = {
23+
'client_id': GITHUB_CLIENT_ID,
24+
'client_secret': GITHUB_CLIENT_SECRET,
25+
'code': code
26+
}
27+
28+
token_response = requests.post(token_url, headers={'Accept': 'application/json'}, json=payload)
29+
token_data = token_response.json()
30+
31+
access_token = token_data.get('access_token')
32+
if not access_token:
33+
return jsonify({'error': 'Failed to fetch access token', 'details': token_data}), 400
34+
35+
# Fetch the user's GitHub profile
36+
user_url = 'https://api.github.com/user'
37+
user_response = requests.get(user_url, headers={
38+
'Authorization': f'token {access_token}'
39+
})
40+
user_data = user_response.json()
41+
42+
# --- PRINT TO TERMINAL ---
43+
username = user_data.get('login', 'Unknown')
44+
print("\n" + "="*40)
45+
print(f"🚀 LOGIN SUCCESSFUL: {username}")
46+
print("="*40 + "\n")
47+
48+
return jsonify({
49+
'message': 'GitHub login successful',
50+
'user': user_data
51+
})

backend/routes/handle_requests.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from flask import Blueprint, abort, render_template, request, redirect, url_for, session, flash
2+
from werkzeug.security import generate_password_hash,check_password_hash
3+
from extensions import mongo
4+
5+
handler_bp = Blueprint('handler', __name__)
6+
7+
@handler_bp.route("/user/registration", methods=["GET", "POST"])
8+
def handle_registration():
9+
token= request.headers.get('X-Internal-Request')
10+
if token != 'True':
11+
return redirect(url_for("index.index"))
12+
data= request.get_json()
13+
name= data.get("name", "")
14+
email= data.get("email", "")
15+
password= data.get("password", "")
16+
17+
if mongo.db.user.find_one({"email": email}):
18+
return {"message": ["Email already registered"]}, 400
19+
mongo.db.user.insert_one({
20+
"name": name,
21+
"email": email,
22+
"password": generate_password_hash(password)
23+
})
24+
return {"message": ["User registered successfully"]}, 200
25+
26+
@handler_bp.route("/user/login", methods=["GET", "POST"])
27+
def handle_login():
28+
token= request.headers.get('X-Internal-Request')
29+
if token != 'True':
30+
return redirect(url_for("index.index"))
31+
data= request.get_json()
32+
email= data.get("email", "")
33+
password= data.get("password", "")
34+
35+
user= mongo.db.user.find_one({"email": email})
36+
37+
if user and check_password_hash(user["password"], password):
38+
return {"message": [True]}, 200
39+
40+
return {"message": ["Invalid credentials"]}, 401
41+
42+

backend/routes/index.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from flask import Blueprint, render_template, request, redirect, url_for,session
2+
3+
index_bp = Blueprint('index', __name__)
4+
5+
@index_bp.route("/")
6+
def index():
7+
return render_template("index.html")

backend/routes/login.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from flask import Blueprint, render_template, request, redirect, url_for,session
2+
3+
login_bp = Blueprint('login', __name__)
4+
5+
@login_bp.route("/login", methods=["GET","POST"])
6+
def login():
7+
return render_template("login.html")

0 commit comments

Comments
 (0)