import gradio as gr import base64 import json import re import html def decode_proxy_entry(encoded_str): try: # Step 1: Base64 decode decoded_bytes = base64.b64decode(encoded_str) # Step 2: Convert hex to ASCII hex_string = decoded_bytes.decode('ascii') json_string = bytes.fromhex(hex_string).decode('ascii') # Step 3: Parse JSON return json.loads(json_string) except Exception as e: return {"error": f"Decoding failed: {str(e)}"} def process_html_input(html_content): try: # First, unescape HTML entities unescaped_html = html.unescape(html_content) # Extract data-ss array using regex pattern = r'data-ss="\[(.*?)\]"' match = re.search(pattern, unescaped_html, re.DOTALL) if not match: return {"error": "No data-ss attribute found in the HTML"} data_ss_content = match.group(1) # Extract individual base64 strings entries = re.findall(r'"([A-Za-z0-9+/=]+)"', data_ss_content) # If no matches with ", try regular quotes if not entries: entries = re.findall(r'"([A-Za-z0-9+/=]+)"', data_ss_content) if not entries: return {"error": "No base64 encoded entries found in data-ss attribute"} results = [] for i, entry in enumerate(entries): try: result = decode_proxy_entry(entry) results.append({ "entry": i + 1, "decoded_data": result }) except Exception as e: results.append({ "entry": i + 1, "error": f"Failed to decode: {str(e)}" }) return {"results": results, "total_entries": len(results)} except Exception as e: return {"error": f"Error processing HTML: {str(e)}"} def decode_single_entry(encoded_string): try: result = decode_proxy_entry(encoded_string) return result except Exception as e: return {"error": str(e)} # Test HTML data (shortened for performance) test_html = '''''' # Create a much simpler interface def create_simple_interface(): with gr.Blocks(title="Proxy Decoder", css=".gradio-container {max-width: 1200px !important}") as demo: gr.Markdown("# Proxy Server Decoder") with gr.Tab("Single Entry"): with gr.Row(): with gr.Column(): single_input = gr.Textbox( label="Base64 String", placeholder="Paste base64 string here...", lines=3 ) single_btn = gr.Button("Decode", variant="primary") with gr.Column(): single_output = gr.JSON(label="Result") with gr.Tab("HTML Parser"): with gr.Row(): with gr.Column(): html_input = gr.Textbox( label="HTML Content", value=test_html, lines=10 ) html_btn = gr.Button("Parse HTML", variant="primary") with gr.Column(): html_output = gr.JSON(label="Results") # Connect functions single_btn.click( decode_single_entry, inputs=single_input, outputs=single_output ) html_btn.click( process_html_input, inputs=html_input, outputs=html_output ) return demo # Launch directly without complex setup if __name__ == "__main__": demo = create_simple_interface() demo.launch( server_name="0.0.0.0", server_port=7860, share=False, inbrowser=True, show_error=True )