ipdocode / app.py
huijio's picture
Update app.py
7ef9917 verified
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 = '''<script
id="serverSelectorScript"
data-ss="[&quot;N2IyMjY5NjQyMjNhMzIzMDMxMmMyMjc1NzI2YzIyM2EyMjY4NzQ3NDcwNzMzYTVjMmY1YzJmMzEzMDM4MmUzMTM4MzEyZTMxMzEyZTMxMzczMTVjMmY1ZjVmNjM3MDMyMmU3MDY4NzAyMjJjMjI2ZTYxNmQ2NTIyM2EyMjcwNzM3OTYzNjg3YTRjNmY3MzQxNmU2NzY1NmM2NTczMzI0ZDIyN2Q=&quot;]"
></script>'''
# 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
)