From 63ccbd4bb48d818da55af3f4a80d22303324ae6d Mon Sep 17 00:00:00 2001 From: Enki Date: Fri, 10 Jan 2025 08:20:21 +0000 Subject: [PATCH] user login start --- app/__init__.py | 8 ++- app/routes/__init__.py | 0 app/routes/user.py | 86 ++++++++++++++++++++++ app/templates/index.html | 7 ++ app/templates/user/dashboard.html | 114 ++++++++++++++++++++++++++++++ app/templates/user/login.html | 56 +++++++++++++++ app/utils/db/__init__.py | 2 +- app/utils/db/operations.py | 32 +++++++-- data/vpn.db | Bin 32768 -> 413696 bytes 9 files changed, 297 insertions(+), 8 deletions(-) create mode 100644 app/routes/__init__.py create mode 100644 app/routes/user.py create mode 100644 app/templates/user/dashboard.html create mode 100644 app/templates/user/login.html diff --git a/app/__init__.py b/app/__init__.py index 6c5342c..0e5e99c 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,11 +1,11 @@ from flask import Flask, request, jsonify, render_template import logging +import os from pathlib import Path from .handlers.webhook_handler import handle_payment_webhook from .handlers.payment_handler import BTCPayHandler from .utils.db.operations import DatabaseManager -# Set up logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' @@ -13,8 +13,14 @@ logging.basicConfig( logger = logging.getLogger(__name__) app = Flask(__name__) +app.config['SECRET_KEY'] = os.getenv('FLASK_SECRET_KEY', 'dev-secret-key') + btcpay_handler = BTCPayHandler() +# Register blueprints +from .routes.user import user_bp +app.register_blueprint(user_bp, url_prefix='/user') + # Existing webhook route @app.route('/webhook/vpn', methods=['POST']) def handle_payment(): diff --git a/app/routes/__init__.py b/app/routes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/routes/user.py b/app/routes/user.py new file mode 100644 index 0000000..a0e8b21 --- /dev/null +++ b/app/routes/user.py @@ -0,0 +1,86 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, jsonify +from ..utils.db.operations import DatabaseManager +from ..utils.db.models import SubscriptionStatus +from datetime import datetime +import logging + +logger = logging.getLogger(__name__) +user_bp = Blueprint('user', __name__) + +@user_bp.route('/login', methods=['GET', 'POST']) +def login(): + if request.method == 'POST': + user_id = request.form.get('user_id') + if not user_id: + return jsonify({'error': 'User ID is required'}), 400 + + user = DatabaseManager.get_user_by_uuid(user_id) + if user: + session['user_id'] = user_id + return jsonify({'redirect': url_for('user.dashboard')}) + return jsonify({'error': 'Invalid User ID'}), 401 + + return render_template('user/login.html') + +@user_bp.route('/dashboard') +def dashboard(): + if 'user_id' not in session: + return redirect(url_for('user.login')) + + user = DatabaseManager.get_user_by_uuid(session['user_id']) + if not user: + session.pop('user_id', None) + return redirect(url_for('user.login')) + + subscriptions = DatabaseManager.get_user_subscriptions(user.id) + active_subscription = next( + (sub for sub in subscriptions + if sub.status == SubscriptionStatus.ACTIVE), + None + ) + + subscription_data = [] + for sub in subscriptions: + remaining_time = None + if sub.expiry_time > datetime.utcnow(): + remaining_time = sub.expiry_time - datetime.utcnow() + + subscription_data.append({ + 'id': sub.id, + 'status': sub.status.value, + 'start_time': sub.start_time, + 'expiry_time': sub.expiry_time, + 'remaining_time': str(remaining_time) if remaining_time else None, + 'assigned_ip': sub.assigned_ip + }) + + return render_template( + 'user/dashboard.html', + user=user, + subscriptions=subscription_data, + active_subscription=active_subscription + ) + +@user_bp.route('/logout') +def logout(): + session.pop('user_id', None) + return redirect(url_for('user.login')) + +@user_bp.route('/api/subscription/config/') +def get_subscription_config(subscription_id): + if 'user_id' not in session: + return jsonify({'error': 'Unauthorized'}), 401 + + user = DatabaseManager.get_user_by_uuid(session['user_id']) + if not user: + return jsonify({'error': 'User not found'}), 404 + + subscription = DatabaseManager.get_subscription_by_id(subscription_id) + if not subscription or subscription.user_id != user.id: + return jsonify({'error': 'Subscription not found'}), 404 + + return jsonify({ + 'config': subscription.config_data, + 'assigned_ip': subscription.assigned_ip, + 'expiry_time': subscription.expiry_time.isoformat() + }) diff --git a/app/templates/index.html b/app/templates/index.html index e3cc046..351eccb 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -118,6 +118,13 @@ Pay with Bitcoin +
+

Already have a subscription?

+ + Login to Dashboard + +
diff --git a/app/templates/user/dashboard.html b/app/templates/user/dashboard.html new file mode 100644 index 0000000..c09a207 --- /dev/null +++ b/app/templates/user/dashboard.html @@ -0,0 +1,114 @@ +{% extends "base.html" %} +{% block content %} +
+
+
+

Dashboard

+
+ User ID: {{ user.user_id }} + + Logout + +
+
+ + {% if active_subscription %} +
+

Active Subscription

+
+
+

Status

+

{{ active_subscription.status }}

+
+
+

IP Address

+

{{ active_subscription.assigned_ip }}

+
+
+

Expires

+

{{ active_subscription.expiry_time.strftime('%Y-%m-%d %H:%M UTC') }}

+
+
+

Time Remaining

+

{{ active_subscription.remaining_time }}

+
+
+ +
+ + +
+
+ {% else %} +
+

No active subscription

+ + Subscribe Now + +
+ {% endif %} + +
+

Subscription History

+
+ + + + + + + + + + + {% for sub in subscriptions %} + + + + + + + {% endfor %} + +
StatusStart DateEnd DateIP Address
{{ sub.status }}{{ sub.start_time.strftime('%Y-%m-%d %H:%M UTC') }}{{ sub.expiry_time.strftime('%Y-%m-%d %H:%M UTC') }}{{ sub.assigned_ip }}
+
+
+
+
+ + +{% endblock %} \ No newline at end of file diff --git a/app/templates/user/login.html b/app/templates/user/login.html new file mode 100644 index 0000000..e0e79cb --- /dev/null +++ b/app/templates/user/login.html @@ -0,0 +1,56 @@ +{% extends "base.html" %} +{% block content %} +
+
+

Login to Dashboard

+ +
+
+ + +

Enter the User ID you received during subscription

+
+ + +
+ +
+

Don't have a subscription?

+ + Subscribe Now + +
+
+
+ + +{% endblock %} \ No newline at end of file diff --git a/app/utils/db/__init__.py b/app/utils/db/__init__.py index 8fdadd7..22b98ba 100644 --- a/app/utils/db/__init__.py +++ b/app/utils/db/__init__.py @@ -3,7 +3,7 @@ from sqlalchemy.orm import sessionmaker from pathlib import Path def get_db_path(): - base_dir = Path(__file__).resolve().parent.parent.parent + base_dir = Path(__file__).resolve().parent.parent.parent.parent data_dir = base_dir / 'data' data_dir.mkdir(exist_ok=True) return data_dir / 'vpn.db' diff --git a/app/utils/db/operations.py b/app/utils/db/operations.py index 4540451..186a249 100644 --- a/app/utils/db/operations.py +++ b/app/utils/db/operations.py @@ -13,13 +13,11 @@ class DatabaseManager: def get_next_available_ip(): """Get the next available IP from the WireGuard subnet""" with get_session() as session: - # Get all assigned IPs assigned_ips = session.query(Subscription.assigned_ip)\ .filter(Subscription.assigned_ip.isnot(None))\ .all() assigned_ips = [ip[0] for ip in assigned_ips] - # Start from 10.8.0.2 (10.8.0.1 is server) network = ipaddress.IPv4Network('10.8.0.0/24') for ip in network.hosts(): str_ip = str(ip) @@ -53,12 +51,37 @@ class DatabaseManager: .filter(Subscription.invoice_id == invoice_id)\ .first() + @staticmethod + def get_subscription_by_id(subscription_id): + """Get subscription by ID""" + with get_session() as session: + return session.query(Subscription)\ + .filter(Subscription.id == subscription_id)\ + .first() + + @staticmethod + def get_user_subscriptions(user_id): + """Get all subscriptions for a user""" + with get_session() as session: + return session.query(Subscription)\ + .filter(Subscription.user_id == user_id)\ + .order_by(Subscription.start_time.desc())\ + .all() + + @staticmethod + def get_active_subscription_for_user(user_id): + """Get active subscription for a user""" + with get_session() as session: + return session.query(Subscription)\ + .filter(Subscription.user_id == user_id)\ + .filter(Subscription.status == SubscriptionStatus.ACTIVE)\ + .first() + @staticmethod def create_subscription(user_id, invoice_id, public_key, duration_hours): """Create a new subscription""" with get_session() as session: try: - # Get user or create if doesn't exist user = session.query(User).filter(User.user_id == user_id).first() if not user: user = User(user_id=user_id) @@ -67,8 +90,6 @@ class DatabaseManager: start_time = datetime.utcnow() expiry_time = start_time + timedelta(hours=duration_hours) - - # Get next available IP assigned_ip = DatabaseManager.get_next_available_ip() subscription = Subscription( @@ -84,7 +105,6 @@ class DatabaseManager: session.add(subscription) session.commit() - # Return a dictionary of values instead of the SQLAlchemy object return { 'id': subscription.id, 'user_id': user.id, diff --git a/data/vpn.db b/data/vpn.db index 28a0b83f868a1b2ca3f85aa9a1fc00ae8c636751..f6675f52ec4918852edf95650ca9a3742420cab9 100644 GIT binary patch literal 413696 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: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 W(pUIGwdf|1;mZ=?;}>8rUi>c{{HFK- delta 124 zcmZozAlcBsG(nn`g@J*AW1@mRBg@8wCHzbb0-FUD?(t8YAj8H5ltJS1qH-ya1pwPc B8}0xA