diff --git a/docker-compose.yml b/docker-compose.yml index 2be9889..5e54dab 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -60,10 +60,4 @@ volumes: networks: public_network: - name: docupulse_public - internal_network: - name: docupulse_internal - internal: true # This network is not accessible from outside Docker - ipam: - config: - - subnet: 10.42.0.0/16 # Less commonly used subnet \ No newline at end of file + name: docupulse_public \ No newline at end of file diff --git a/routes/admin_api.py b/routes/admin_api.py index cbf9800..6688902 100644 --- a/routes/admin_api.py +++ b/routes/admin_api.py @@ -10,7 +10,6 @@ import os import jwt from werkzeug.security import generate_password_hash import secrets -import ipaddress admin_api = Blueprint('admin_api', __name__) @@ -39,30 +38,6 @@ def token_required(f): return f(current_user, *args, **kwargs) return decorated -def docker_network_required(f): - @wraps(f) - def decorated(*args, **kwargs): - # Get the client IP address - client_ip = request.remote_addr - - # Docker internal network range - docker_networks = [ - '10.42.0.0/16' # Our custom internal network - ] - - # Check if the client IP is in our internal network - is_docker_network = False - for network in docker_networks: - if ipaddress.ip_address(client_ip) in ipaddress.ip_network(network): - is_docker_network = True - break - - if not is_docker_network: - return jsonify({'message': 'Access denied. This API is only accessible from the internal Docker network.'}), 403 - - return f(*args, **kwargs) - return decorated - def generate_management_api_key(): """Generate a secure API key for the management tool""" return secrets.token_urlsafe(32) @@ -77,7 +52,6 @@ def validate_management_api_key(api_key): return False @admin_api.route('/login', methods=['POST']) -@docker_network_required def admin_login(): data = request.get_json() if not data or 'email' not in data or 'password' not in data: @@ -91,7 +65,6 @@ def admin_login(): return jsonify({'token': token}) @admin_api.route('/management-token', methods=['POST']) -@docker_network_required def get_management_token(): """Generate a JWT token for the management tool using API key authentication""" api_key = request.headers.get('X-API-Key') @@ -110,7 +83,6 @@ def get_management_token(): @admin_api.route('/management-api-key', methods=['POST']) @token_required -@docker_network_required def create_management_api_key(current_user): """Create a new API key for the management tool (only accessible by admin users)""" if not current_user.is_admin: @@ -138,7 +110,6 @@ def create_management_api_key(current_user): @admin_api.route('/management-api-keys', methods=['GET']) @token_required -@docker_network_required def list_management_api_keys(current_user): """List all management API keys (only accessible by admin users)""" if not current_user.is_admin: @@ -156,7 +127,6 @@ def list_management_api_keys(current_user): @admin_api.route('/management-api-key/', methods=['DELETE']) @token_required -@docker_network_required def revoke_management_api_key(current_user, key_id): """Revoke a management API key (only accessible by admin users)""" if not current_user.is_admin: @@ -173,14 +143,12 @@ def revoke_management_api_key(current_user, key_id): # Key-Value Settings CRUD @admin_api.route('/key-value', methods=['GET']) @token_required -@docker_network_required def get_key_values(current_user): settings = KeyValueSettings.query.all() return jsonify([{'key': s.key, 'value': s.value} for s in settings]) @admin_api.route('/key-value/', methods=['GET']) @token_required -@docker_network_required def get_key_value(current_user, key): setting = KeyValueSettings.query.filter_by(key=key).first() if not setting: @@ -189,7 +157,6 @@ def get_key_value(current_user, key): @admin_api.route('/key-value', methods=['POST']) @token_required -@docker_network_required def create_key_value(current_user): data = request.get_json() if not data or 'key' not in data or 'value' not in data: @@ -202,7 +169,6 @@ def create_key_value(current_user): @admin_api.route('/key-value/', methods=['PUT']) @token_required -@docker_network_required def update_key_value(current_user, key): setting = KeyValueSettings.query.filter_by(key=key).first() if not setting: @@ -218,7 +184,6 @@ def update_key_value(current_user, key): @admin_api.route('/key-value/', methods=['DELETE']) @token_required -@docker_network_required def delete_key_value(current_user, key): setting = KeyValueSettings.query.filter_by(key=key).first() if not setting: @@ -231,7 +196,6 @@ def delete_key_value(current_user, key): # Contacts (Users) CRUD @admin_api.route('/contacts', methods=['GET']) @token_required -@docker_network_required def get_contacts(current_user): users = User.query.all() return jsonify([{ @@ -248,7 +212,6 @@ def get_contacts(current_user): @admin_api.route('/contacts/', methods=['GET']) @token_required -@docker_network_required def get_contact(current_user, user_id): user = User.query.get(user_id) if not user: @@ -267,7 +230,6 @@ def get_contact(current_user, user_id): @admin_api.route('/contacts', methods=['POST']) @token_required -@docker_network_required def create_contact(current_user): data = request.get_json() required_fields = ['username', 'email', 'last_name'] @@ -293,7 +255,6 @@ def create_contact(current_user): @admin_api.route('/contacts/', methods=['PUT']) @token_required -@docker_network_required def update_contact(current_user, user_id): user = User.query.get(user_id) if not user: @@ -320,7 +281,6 @@ def update_contact(current_user, user_id): @admin_api.route('/contacts/', methods=['DELETE']) @token_required -@docker_network_required def delete_contact(current_user, user_id): user = User.query.get(user_id) if not user: @@ -333,7 +293,6 @@ def delete_contact(current_user, user_id): # Statistics @admin_api.route('/statistics', methods=['GET']) @token_required -@docker_network_required def get_statistics(current_user): room_count = Room.query.count() conversation_count = Conversation.query.count() @@ -353,7 +312,6 @@ def get_statistics(current_user): # Website Settings CRUD @admin_api.route('/settings', methods=['GET']) @token_required -@docker_network_required def get_settings(current_user): settings = SiteSettings.get_settings() return jsonify({ @@ -375,7 +333,6 @@ def get_settings(current_user): @admin_api.route('/settings', methods=['PUT']) @token_required -@docker_network_required def update_settings(current_user): settings = SiteSettings.get_settings() data = request.get_json() @@ -390,7 +347,6 @@ def update_settings(current_user): # Website Logs @admin_api.route('/logs', methods=['GET']) @token_required -@docker_network_required def get_logs(current_user): page = request.args.get('page', 1, type=int) per_page = request.args.get('per_page', 50, type=int) @@ -417,7 +373,6 @@ def get_logs(current_user): # Mail Logs @admin_api.route('/mail-logs', methods=['GET']) @token_required -@docker_network_required def get_mail_logs(current_user): page = request.args.get('page', 1, type=int) per_page = request.args.get('per_page', 50, type=int) @@ -444,7 +399,6 @@ def get_mail_logs(current_user): # Resend Setup Mail @admin_api.route('/resend-setup-mail/', methods=['POST']) @token_required -@docker_network_required def resend_setup_mail(current_user, user_id): user = User.query.get(user_id) if not user: