import gradio as gr import subprocess import os def generate_secrets(domain): # Set Mastodon directory mastodon_dir = "/app/mastodon" os.chdir(mastodon_dir) # Generate secrets using Mastodon’s rake tasks secret_key_base = subprocess.check_output( ["/root/.rbenv/shims/bundle", "exec", "rake", "secret"], env={"RAILS_ENV": "development"} ).decode().strip() otp_secret = subprocess.check_output( ["/root/.rbenv/shims/bundle", "exec", "rake", "secret"], env={"RAILS_ENV": "development"} ).decode().strip() vapid_keys = subprocess.check_output( ["/root/.rbenv/shims/bundle", "exec", "rake", "mastodon:webpush:generate_vapid_key"], env={"RAILS_ENV": "development"} ).decode().strip().split("\n") vapid_private_key = next(line.split("=", 1)[1].strip() for line in vapid_keys if "VAPID_PRIVATE_KEY" in line) vapid_public_key = next(line.split("=", 1)[1].strip() for line in vapid_keys if "VAPID_PUBLIC_KEY" in line) # Return formatted output output = { "LOCAL_DOMAIN": domain or "your-space-name.hf.space", "SECRET_KEY_BASE": secret_key_base, "OTP_SECRET": otp_secret, "VAPID_PRIVATE_KEY": vapid_private_key, "VAPID_PUBLIC_KEY": vapid_public_key, "RAILS_SERVE_STATIC_FILES": "true" } return "\n".join(f"{k}: {v}" for k, v in output.items()) # Gradio interface with gr.Blocks(title="Mastodon Secrets Generator") as demo: gr.Markdown("# Mastodon Secrets Generator") gr.Markdown("Enter your domain (or leave blank for default) and generate secrets for your Mastodon Space.") domain_input = gr.Textbox(label="Domain (optional)", placeholder="e.g., your-space-name.hf.space") generate_btn = gr.Button("Generate Secrets") output_text = gr.Textbox(label="Secrets (Copy/Paste these into Hugging Face Spaces Secrets)", lines=10) generate_btn.click( fn=generate_secrets, inputs=domain_input, outputs=output_text ) demo.launch(server_name="0.0.0.0", server_port=7860)