from flask import Flask, render_template, request, redirect, url_for, jsonify, session from supabase import create_client, Client from dotenv import load_dotenv import os load_dotenv() # Initialize Flask app app = Flask(__name__) app.secret_key = os.urandom(24) SUPABASE_URL = os.getenv('SUPABASE_URL') SUPABASE_KEY = os.getenv('SUPABASE_KEY') supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY) # Admin credentials (for simplicity, hardcoded; use env vars in production) ADMIN_USERNAME = os.getenv('ADMIN_USERNAME', 'default_admin') ADMIN_PASSWORD = os.getenv('ADMIN_PASSWORD', 'default_password') # Home Page Route @app.route('/') def home(): return render_template('home.html') # Product List Page Route @app.route('/products') def products(): response = supabase.table('products').select('*').execute() products = response.data return render_template('product_list.html', products=products) # Product Detail Page Route @app.route('/products/') def product_detail(product_id): response = supabase.table('products').select('*').eq('id', product_id).execute() if response.data: product = response.data[0] return render_template('product_detail.html', product=product) else: return "Product not found", 404 # Admin Login Page Route @app.route('/admin/login', methods=['GET', 'POST']) def admin_login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] if username == ADMIN_USERNAME and password == ADMIN_PASSWORD: session['admin_logged_in'] = True return redirect(url_for('admin_dashboard')) else: return "Invalid credentials", 401 return render_template('admin_login.html') # Admin Dashboard Route @app.route('/admin') def admin_dashboard(): if not session.get('admin_logged_in'): return redirect(url_for('admin_login')) response = supabase.table('products').select('*').execute() products = response.data return render_template('admin_dashboard.html', products=products) # Add Product Route @app.route('/admin/add', methods=['GET', 'POST']) def add_product(): if not session.get('admin_logged_in'): return redirect(url_for('admin_login')) if request.method == 'POST': name = request.form['name'] price = request.form['price'] details = request.form['details'] image_link = request.form['image_link'] whatsapp_link = request.form['whatsapp_link'] supabase.table('products').insert({ 'name': name, 'price': price, 'details': details, 'image_link': image_link, 'whatsapp_link': whatsapp_link }).execute() return redirect(url_for('admin_dashboard')) return render_template('add_product.html') # Edit Product Route @app.route('/admin/edit/', methods=['GET', 'POST']) def edit_product(product_id): if not session.get('admin_logged_in'): return redirect(url_for('admin_login')) if request.method == 'POST': name = request.form['name'] price = request.form['price'] details = request.form['details'] image_link = request.form['image_link'] whatsapp_link = request.form['whatsapp_link'] supabase.table('products').update({ 'name': name, 'price': price, 'details': details, 'image_link': image_link, 'whatsapp_link': whatsapp_link }).eq('id', product_id).execute() return redirect(url_for('admin_dashboard')) response = supabase.table('products').select('*').eq('id', product_id).execute() if response.data: product = response.data[0] return render_template('edit_product.html', product=product) else: return "Product not found", 404 # Delete Product Route @app.route('/admin/delete/', methods=['POST']) def delete_product(product_id): if not session.get('admin_logged_in'): return redirect(url_for('admin_login')) supabase.table('products').delete().eq('id', product_id).execute() return redirect(url_for('admin_dashboard')) # Admin Logout Route @app.route('/admin/logout') def admin_logout(): session.pop('admin_logged_in', None) return redirect(url_for('admin_login')) # Main function if __name__ == '__main__': app.run(debug=True)