From b9410f29868d0a066d655d2b8b62ff4dc23af2bb Mon Sep 17 00:00:00 2001 From: Dobromir Popov Date: Sun, 13 Oct 2024 00:27:02 +0300 Subject: [PATCH] init flask and PWA - file structure --- crypto/sol/app.py | 4 ++ crypto/sol/modules/__init__.py | 0 crypto/sol/modules/webui.py | 58 +++++++++++++++++++++++++++++ crypto/sol/static/css/styles.css | 0 crypto/sol/static/images/logo.png | 0 crypto/sol/static/{ => js}/app.js | 0 crypto/sol/static/manifest.json | 0 crypto/sol/static/service-worker.js | 0 8 files changed, 62 insertions(+) create mode 100644 crypto/sol/modules/__init__.py create mode 100644 crypto/sol/modules/webui.py create mode 100644 crypto/sol/static/css/styles.css create mode 100644 crypto/sol/static/images/logo.png rename crypto/sol/static/{ => js}/app.js (100%) create mode 100644 crypto/sol/static/manifest.json create mode 100644 crypto/sol/static/service-worker.js diff --git a/crypto/sol/app.py b/crypto/sol/app.py index 2c87c19..131d3b2 100644 --- a/crypto/sol/app.py +++ b/crypto/sol/app.py @@ -139,6 +139,10 @@ async def send_telegram_message(message): +# # # # # # # # # # DATABASE # # # # # # # # # # + + + # # # # # # # # # # CRYPTO PUBLIC # # # # # # # # # # async def get_token_prices(token_addresses: List[str]) -> Dict[str, float]: diff --git a/crypto/sol/modules/__init__.py b/crypto/sol/modules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/crypto/sol/modules/webui.py b/crypto/sol/modules/webui.py new file mode 100644 index 0000000..09c4e28 --- /dev/null +++ b/crypto/sol/modules/webui.py @@ -0,0 +1,58 @@ +from flask import Flask, jsonify, request +from flask_login import LoginManager, UserMixin, login_user, login_required, current_user +import secrets +from modules import storage # Import your storage module + +app = Flask(__name__) +app.config['SECRET_KEY'] = 'your-secret-key' +login_manager = LoginManager(app) + +class User(UserMixin): + def __init__(self, id, username, email): + self.id = id + self.username = username + self.email = email + +@login_manager.user_loader +def load_user(user_id): + user_data = storage.get_user_by_id(user_id) + if user_data: + return User(id=user_data['id'], username=user_data['username'], email=user_data['email']) + return None + +@app.route('/login', methods=['POST']) +def login(): + data = request.json + username = data.get('username') + password = data.get('password') + + user = storage.authenticate_user(username, password) + if user: + login_user(User(id=user['id'], username=user['username'], email=user['email'])) + return jsonify({'message': 'Login successful'}), 200 + else: + return jsonify({'message': 'Invalid credentials'}), 401 + +@app.route('/generate_api_key', methods=['POST']) +@login_required +def generate_api_key(): + api_key = secrets.token_urlsafe(32) + storage.store_api_key(current_user.id, api_key) + return jsonify({'api_key': api_key}) + +@app.route('/wallet//transactions', methods=['GET']) +@login_required +def get_transactions(wallet_id): + transactions = storage.get_transactions(wallet_id) + return jsonify(transactions) + +@app.route('/wallet//holdings', methods=['GET']) +@login_required +def get_holdings(wallet_id): + holdings = storage.get_holdings(wallet_id) + return jsonify(holdings) + +# Implement other routes for reports, price alerts, following accounts, etc. + +def init_app(): + return app \ No newline at end of file diff --git a/crypto/sol/static/css/styles.css b/crypto/sol/static/css/styles.css new file mode 100644 index 0000000..e69de29 diff --git a/crypto/sol/static/images/logo.png b/crypto/sol/static/images/logo.png new file mode 100644 index 0000000..e69de29 diff --git a/crypto/sol/static/app.js b/crypto/sol/static/js/app.js similarity index 100% rename from crypto/sol/static/app.js rename to crypto/sol/static/js/app.js diff --git a/crypto/sol/static/manifest.json b/crypto/sol/static/manifest.json new file mode 100644 index 0000000..e69de29 diff --git a/crypto/sol/static/service-worker.js b/crypto/sol/static/service-worker.js new file mode 100644 index 0000000..e69de29