Autarch Will Control The Internet
This commit is contained in:
96
web/routes/steganography.py
Normal file
96
web/routes/steganography.py
Normal file
@@ -0,0 +1,96 @@
|
||||
"""Steganography routes."""
|
||||
import os
|
||||
import base64
|
||||
from flask import Blueprint, request, jsonify, render_template, current_app
|
||||
from web.auth import login_required
|
||||
|
||||
steganography_bp = Blueprint('steganography', __name__, url_prefix='/stego')
|
||||
|
||||
def _get_mgr():
|
||||
from modules.steganography import get_stego_manager
|
||||
return get_stego_manager()
|
||||
|
||||
@steganography_bp.route('/')
|
||||
@login_required
|
||||
def index():
|
||||
return render_template('steganography.html')
|
||||
|
||||
@steganography_bp.route('/capabilities')
|
||||
@login_required
|
||||
def capabilities():
|
||||
return jsonify(_get_mgr().get_capabilities())
|
||||
|
||||
@steganography_bp.route('/capacity', methods=['POST'])
|
||||
@login_required
|
||||
def capacity():
|
||||
data = request.get_json(silent=True) or {}
|
||||
return jsonify(_get_mgr().capacity(data.get('file', '')))
|
||||
|
||||
@steganography_bp.route('/hide', methods=['POST'])
|
||||
@login_required
|
||||
def hide():
|
||||
mgr = _get_mgr()
|
||||
# Support file upload or path-based
|
||||
if request.content_type and 'multipart' in request.content_type:
|
||||
carrier = request.files.get('carrier')
|
||||
if not carrier:
|
||||
return jsonify({'ok': False, 'error': 'No carrier file'})
|
||||
upload_dir = current_app.config.get('UPLOAD_FOLDER', '/tmp')
|
||||
carrier_path = os.path.join(upload_dir, carrier.filename)
|
||||
carrier.save(carrier_path)
|
||||
message = request.form.get('message', '')
|
||||
password = request.form.get('password') or None
|
||||
output_path = os.path.join(upload_dir, f'stego_{carrier.filename}')
|
||||
result = mgr.hide(carrier_path, message.encode(), output_path, password)
|
||||
else:
|
||||
data = request.get_json(silent=True) or {}
|
||||
carrier_path = data.get('carrier', '')
|
||||
message = data.get('message', '')
|
||||
password = data.get('password') or None
|
||||
output = data.get('output')
|
||||
result = mgr.hide(carrier_path, message.encode(), output, password)
|
||||
return jsonify(result)
|
||||
|
||||
@steganography_bp.route('/extract', methods=['POST'])
|
||||
@login_required
|
||||
def extract():
|
||||
data = request.get_json(silent=True) or {}
|
||||
result = _get_mgr().extract(data.get('file', ''), data.get('password'))
|
||||
if result.get('ok') and 'data' in result:
|
||||
try:
|
||||
result['text'] = result['data'].decode('utf-8')
|
||||
except (UnicodeDecodeError, AttributeError):
|
||||
result['base64'] = base64.b64encode(result['data']).decode()
|
||||
del result['data'] # Don't send raw bytes in JSON
|
||||
return jsonify(result)
|
||||
|
||||
@steganography_bp.route('/detect', methods=['POST'])
|
||||
@login_required
|
||||
def detect():
|
||||
data = request.get_json(silent=True) or {}
|
||||
return jsonify(_get_mgr().detect(data.get('file', '')))
|
||||
|
||||
@steganography_bp.route('/whitespace/hide', methods=['POST'])
|
||||
@login_required
|
||||
def whitespace_hide():
|
||||
data = request.get_json(silent=True) or {}
|
||||
from modules.steganography import DocumentStego
|
||||
result = DocumentStego.hide_whitespace(
|
||||
data.get('text', ''), data.get('message', '').encode(),
|
||||
data.get('password')
|
||||
)
|
||||
return jsonify(result)
|
||||
|
||||
@steganography_bp.route('/whitespace/extract', methods=['POST'])
|
||||
@login_required
|
||||
def whitespace_extract():
|
||||
data = request.get_json(silent=True) or {}
|
||||
from modules.steganography import DocumentStego
|
||||
result = DocumentStego.extract_whitespace(data.get('text', ''), data.get('password'))
|
||||
if result.get('ok') and 'data' in result:
|
||||
try:
|
||||
result['text'] = result['data'].decode('utf-8')
|
||||
except (UnicodeDecodeError, AttributeError):
|
||||
result['base64'] = base64.b64encode(result['data']).decode()
|
||||
del result['data']
|
||||
return jsonify(result)
|
||||
Reference in New Issue
Block a user