ip user info

This commit is contained in:
Mateusz Gruszczyński
2026-04-15 08:47:45 +02:00
parent b3db12ba41
commit c0ac69fce7
15 changed files with 624 additions and 759 deletions

View File

@@ -0,0 +1,120 @@
from datetime import datetime
from flask import Blueprint, Response, jsonify, request
from ..services.analysis import analyze_ips, apply_filters
from ..services.exports import (
generate_apache,
generate_cidr,
generate_csv,
generate_firewalld,
generate_ipset,
generate_iptables,
generate_mikrotik,
generate_nginx,
)
from ..services.parsing import parse_ip_list
api_bp = Blueprint('api', __name__)
@api_bp.route('/api/analyze', methods=['POST'])
def api_analyze():
data = request.get_json()
if not data:
return jsonify({'error': 'Invalid JSON'}), 400
ips = parse_ip_list(data.get('ips', ''))
if not ips:
return jsonify({'error': 'No valid IPs found'}), 400
results, stats = analyze_ips(ips)
return jsonify({'results': results, 'stats': stats})
@api_bp.route('/api/filter', methods=['POST'])
def api_filter():
data = request.get_json()
if not data:
return jsonify({'error': 'Invalid JSON'}), 400
results = data.get('results', [])
filters = data.get('filters', {})
filtered = apply_filters(results, filters)
return jsonify({'filtered': filtered, 'count': len(filtered)})
@api_bp.route('/api/export/ipset', methods=['POST'])
def api_export_ipset():
data = request.get_json()
if not data:
return Response('Invalid JSON', status=400)
return Response(generate_ipset(data.get('ips', []), data.get('timeout', 86400)), mimetype='text/plain')
@api_bp.route('/api/export/iptables', methods=['POST'])
def api_export_iptables():
data = request.get_json()
if not data:
return Response('Invalid JSON', status=400)
return Response(generate_iptables(data.get('ips', [])), mimetype='text/plain')
@api_bp.route('/api/export/nginx', methods=['POST'])
def api_export_nginx():
data = request.get_json()
if not data:
return Response('Invalid JSON', status=400)
return Response(generate_nginx(data.get('ips', [])), mimetype='text/plain')
@api_bp.route('/api/export/apache', methods=['POST'])
def api_export_apache():
data = request.get_json()
if not data:
return Response('Invalid JSON', status=400)
return Response(generate_apache(data.get('ips', [])), mimetype='text/plain')
@api_bp.route('/api/export/firewalld', methods=['POST'])
def api_export_firewalld():
data = request.get_json()
if not data:
return Response('Invalid JSON', status=400)
return Response(generate_firewalld(data.get('ips', [])), mimetype='text/plain')
@api_bp.route('/api/export/mikrotik', methods=['POST'])
def api_export_mikrotik():
data = request.get_json()
if not data:
return Response('Invalid JSON', status=400)
return Response(generate_mikrotik(data.get('ips', [])), mimetype='text/plain')
@api_bp.route('/api/export/cidr', methods=['POST'])
def api_export_cidr():
data = request.get_json()
if not data:
return Response('Invalid JSON', status=400)
return Response(generate_cidr(data.get('results', [])), mimetype='text/plain')
@api_bp.route('/api/export/csv', methods=['POST'])
def api_export_csv():
data = request.get_json()
if not data:
return Response('Invalid JSON', status=400)
csv_content = generate_csv(data.get('results', []))
timestamp = datetime.now().strftime('%Y-%m-%d')
return Response(
csv_content,
mimetype='text/csv',
headers={'Content-Disposition': f'attachment; filename=ip-analysis-{timestamp}.csv'},
)
@api_bp.route('/analyze', methods=['POST'])
def analyze_legacy():
return api_analyze()

View File

@@ -0,0 +1,18 @@
from flask import Blueprint, render_template
web_bp = Blueprint('web', __name__)
@web_bp.route('/')
def index():
return render_template('index.html')
@web_bp.route('/favicon.ico')
def favicon():
return '', 204
@web_bp.route('/api')
def api_docs():
return render_template('api.html')