File size: 2,080 Bytes
ade6cd4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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)