ip user info
This commit is contained in:
120
ip_analyzer_app/routes/api.py
Normal file
120
ip_analyzer_app/routes/api.py
Normal 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()
|
||||
18
ip_analyzer_app/routes/web.py
Normal file
18
ip_analyzer_app/routes/web.py
Normal 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')
|
||||
Reference in New Issue
Block a user