This commit is contained in:
thePR0M3TH3AN
2025-06-17 17:37:43 -04:00
parent b2c3d3395c
commit 38e440e412
76 changed files with 1233 additions and 0 deletions

12
host/aosp/config.json Normal file
View File

@@ -0,0 +1,12 @@
{
"name": "AOS Project",
"subdomain": "aosp",
"title": "ANDROID UNLEASHED",
"subtitle": "WITHOUT BOUNDARIES",
"headline": "OPEN-SOURCE FREEDOM",
"content": "The Android Open Source Project (AOSP) represents the essence of what Android was originally intended to be: an open, transparent, and adaptable platform. It strips away the layers of proprietary software and corporate oversight that have become synonymous with mainstream Android distributions. With AOSP, you gain access to a raw, unfiltered version of Android, allowing you to truly make your device your own.\n\nFor developers, AOSP offers a playground of possibilities, where the only limits are your skills and imagination. It serves as the foundation for countless custom ROMs, each tailored to specific needs, whether for enhanced performance, privacy, or unique features that mainstream versions lack. Privacy enthusiasts will appreciate the absence of pre-installed bloatware and tracking services that often come wit stock Android, providing a cleaner, more secure user experience.\n\nAOSP isn't just for developers or tech enthusiasts; it's for anyone who values digital freedom. It allows you to reclaim control over your device, tailoring it to your needs without the restrictions of carriers or manufacturers. Discover how AOSP can transform your mobile experience. Start your journey towards a more open, customizable future today.",
"url_message": "Visit the link below to learn more.",
"url": "https://source.android.com",
"tear_off_link": "http://aosp.6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion",
"binary_message": "0110010 0101011 0110010 0111101 0110100"
}

BIN
host/aosp/example.pdf Normal file

Binary file not shown.

112
host/aosp/extract_form_fields.sh Executable file
View File

@@ -0,0 +1,112 @@
#!/bin/bash
# Define the input PDF, output text file, and output JSON
pdf_file="./from_client/submission_form.pdf"
text_file="submission_form.txt"
json_file="config.json"
# Log the start of the script
echo "Starting script..."
echo "Looking for PDF at: $pdf_file"
echo "Config JSON: $json_file"
# Convert PDF to text
echo "Converting PDF to text..."
pdftotext -layout "$pdf_file" "$text_file"
# Extract individual fields using grep, logging each step
echo "Extracting fields from the text file..."
# Adjusting the extraction of the name field
name=$(grep -A 3 'name (max 25 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted name: '$name'"
subdomain=$(grep -A 1 'subdomain (max 30 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted subdomain: '$subdomain'"
title=$(grep -A 1 'title (max 30 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted title: '$title'"
subtitle=$(grep -A 1 'subtitle (max 45 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted subtitle: '$subtitle'"
headline=$(grep -A 1 'headline (max 50 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted headline: '$headline'"
# Process the content to remove soft wraps while keeping hard returns
content=$(grep -A 100 'content (max 1,400 characters):' "$text_file" | sed -n '2,/url_message/p' | sed '$d' | awk '
{
if (NR == 1) {
prev = $0;
next;
}
# Handle paragraph breaks explicitly
if ($0 ~ /^[[:space:]]*$/) {
if (prev) print prev "\n";
prev = "";
}
# Handle sentences that should stay together
else if (prev ~ /[.?!]$/ && $0 ~ /^[[:upper:]]/) {
prev = prev " " $0;
}
# Join lines that are part of the same sentence (soft wrap)
else if (prev !~ /[.?!]$/) {
prev = prev " " $0;
}
# Otherwise, treat as a new sentence/paragraph
else {
if (prev) print prev;
prev = $0;
}
}
END { if (prev) print prev }' | sed -E 's/\n\n[[:space:]]+/\n\n/g' | sed -E 's/^[[:space:]]+//g')
echo "Extracted content: '$content'"
url_message=$(grep -A 1 'url_message (max 60 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted url_message: '$url_message'"
url=$(grep -A 1 'url (max 90 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted url: '$url'"
# Construct the URLs with the subdomain
onion_base="6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion"
constructed_url="http://$subdomain.$onion_base"
tear_off_link="http://$subdomain.$onion_base"
echo "Constructed URL: '$constructed_url'"
echo "Constructed Tear-off Link: '$tear_off_link'"
# Check if the extracted fields are not empty
if [ -z "$name" ] || [ -z "$subdomain" ] || [ -z "$title" ] || [ -z "$subtitle" ] || [ -z "$headline" ] || [ -z "$content" ] || [ -z "$url_message" ] || [ -z "$url" ]; then
echo "Error: One or more extracted fields are empty. Please check the PDF form and try again."
exit 1
fi
# Update the JSON using jq and log the operation
echo "Updating config.json..."
jq --arg name "$name" \
--arg subdomain "$subdomain" \
--arg title "$title" \
--arg subtitle "$subtitle" \
--arg headline "$headline" \
--arg content "$content" \
--arg url_message "$url_message" \
--arg url "$constructed_url" \
--arg tear_off_link "$tear_off_link" \
'.name = $name |
.subdomain = $subdomain |
.title = $title |
.subtitle = $subtitle |
.headline = $headline |
.content = $content |
.url_message = $url_message |
.url = $url |
.tear_off_link = $tear_off_link' "$json_file" > tmp.json && mv tmp.json "$json_file"
if [ $? -eq 0 ]; then
echo "Config file updated successfully."
else
echo "Error: Failed to update config file."
exit 1
fi

Binary file not shown.

1
host/aosp/index.html Normal file

File diff suppressed because one or more lines are too long

1
host/aosp/nostr.html Normal file
View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Connect with Me on KeyChat</title><style>body{font-family:'Courier New',Courier,monospace;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;margin:0;background-color:#fff}.container{background-color:#fff;padding:20px;border:1px solid #000;text-align:center;max-width:400px;width:90%;box-shadow:0 0 10px rgba(0,0,0,.1)}h1{color:#333}p{font-size:16px;color:#666}.code-box{background-color:#fff;border:1px solid #000;padding:10px;margin:20px 0;font-size:18px;color:#333;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;cursor:pointer;user-select:none}.copy-btn{background-color:#000;color:#fff;padding:10px 20px;border:1px solid #000;cursor:pointer;font-size:16px;transition:background-color .3s ease}.copy-btn:hover{background-color:#3d3d3d}footer{margin-top:20px;font-size:14px;color:#999}a{color:#a30000;text-decoration:none}a:hover{text-decoration:underline}</style></head><body><div class="container"><h1>Nostr</h1><p>Use a secure file shareing tool like <a href="https://onionshare.org/" target="_blank">Onion Share</a> or <a href="https://wormhole.app/" target="_blank">WormHole</a> to send your completed <a href="submission_form.pdf" target="_blank">submission form PDF</a> to the following <a href="https://www.0xchat.com/#/" target="_blank">Nostr</a> npub account:</p><p></p><a href="index.html">Back to Home</a><p></p><div class="code-box" id="keyChatCode">npub1ln8efl52vsyh6lg59c9v3kut56wev489lzcma0sv2mf8nm6jhwjqeteygt</div><button class="copy-btn" onclick="copyCode()">Copy Code</button></div><footer><p>Not on Nostr yet? <a href="https://nostr.how/en/what-is-nostr" target="_blank">Learn more here</a>.</p></footer><script>(function(_0x3f0d39,_0x5cad8e){var _0x17b6f3=a0_0x3b8a,_0x3ba263=_0x3f0d39();while(!![]){try{var _0xfbc8a8=parseInt(_0x17b6f3(0x14c))/0x1*(-parseInt(_0x17b6f3(0x150))/0x2)+-parseInt(_0x17b6f3(0x148))/0x3*(parseInt(_0x17b6f3(0x145))/0x4)+parseInt(_0x17b6f3(0x149))/0x5*(-parseInt(_0x17b6f3(0x144))/0x6)+-parseInt(_0x17b6f3(0x14a))/0x7*(parseInt(_0x17b6f3(0x14f))/0x8)+-parseInt(_0x17b6f3(0x142))/0x9+parseInt(_0x17b6f3(0x13f))/0xa*(parseInt(_0x17b6f3(0x14e))/0xb)+-parseInt(_0x17b6f3(0x13e))/0xc*(-parseInt(_0x17b6f3(0x147))/0xd);if(_0xfbc8a8===_0x5cad8e)break;else _0x3ba263['push'](_0x3ba263['shift']());}catch(_0x37e771){_0x3ba263['push'](_0x3ba263['shift']());}}}(a0_0x5414,0xd4e21));function a0_0x3b8a(_0x1324a6,_0x3d024a){var _0x54140d=a0_0x5414();return a0_0x3b8a=function(_0x3b8a2d,_0x350160){_0x3b8a2d=_0x3b8a2d-0x13e;var _0x753cb1=_0x54140d[_0x3b8a2d];return _0x753cb1;},a0_0x3b8a(_0x1324a6,_0x3d024a);}function a0_0x5414(){var _0xf6a092=['Failed\x20to\x20copy\x20code:\x20','13FzsFUs','1976421lICgxk','880430taZArI','28FqvGbv','keyChatCode','1502997STiVAp','innerText','176SvMeKC','48536fRJZWT','2kIOEno','50323680nGsOaP','270350ybseKd','clipboard','getElementById','12528657YfIOtE','Code\x20copied\x20to\x20clipboard!','6NOIDPk','4qiIZtI'];a0_0x5414=function(){return _0xf6a092;};return a0_0x5414();}function copyCode(){var _0x3dca34=a0_0x3b8a,_0x385a15=document[_0x3dca34(0x141)](_0x3dca34(0x14b))[_0x3dca34(0x14d)];navigator[_0x3dca34(0x140)]['writeText'](_0x385a15)['then'](function(){var _0x28ac25=_0x3dca34;alert(_0x28ac25(0x143));},function(_0x249ea4){var _0x716083=_0x3dca34;alert(_0x716083(0x146),_0x249ea4);});}</script></body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

View File

@@ -0,0 +1,110 @@
VoxVera
voxvera.6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion
Flyer Submission Form
Introduction:
Please fill out the form accurately and entirely. There are multiple pages.
Each field below has a specified character limit. Check your spelling.
· Provide your title
· Fill in the subdomain name
· Add the single URL for your cause that will be displayed as a QR code
· Add your Cashu eCash token as payment
· Send this completed form to the Nostr Address below using WormHole or OnionShare:
npub1ln8efl52vsyh6lg59c9v3kut56wev489lzcma0sv2mf8nm6jhwjqeteygt
You can use any Cashu eCash wallet to receive Lightning Bitcoin and generate the
eCash payment token. But we recommend 0xchat.
You can use any Nostr client to send a private direct message containing
a link to download this completed form to our npub address but we
recommend 0xchat.
Payment
Cost = 24,000 SAT/year
24,000 SAT (Bitcoin) eCash Cashu Token (max 10,000 characters):
Please generate a 24,000 SAT eCash Cashu payment token and send it to this Nostr
npub address through a Direct Message.
If you are not sure how to create an eCash Cashu payment token for sending instant
and untraceable Bitcoin payments then you can learn more here.
TLDR: Buy Bitcoin from an app like Cash App, then send that Bitcoin to a Cashu
wallet you control. From there you will generate eCash tokens and can paste the
correct number of eCash SATs (SATs are small units of Bitcoin) into the field
above.
Form Continues on page 2 —->
Open this link in the Tor Browser to see all the fields below labeled on a mockup
flyer. This will help you understand where your content will be placed.
name (max 25 characters):
note: this will be seen in the browser tab and the print file name.
AOS Project
subdomain (max 30 characters):
aosp
title (max 30 characters):
ANDROID UNLEASHED
subtitle (max 45 characters):
WITHOUT BOUNDARIES
headline (max 50 characters):
OPEN-SOURCE FREEDOM
content (max 1,400 characters):
The Android Open Source Project (AOSP) represents the essence of what Android was
originally intended to be: an open, transparent, and adaptable platform. It strips
away the layers of proprietary software and corporate oversight that have become
synonymous with mainstream Android distributions. With AOSP, you gain access to a
raw, unfiltered version of Android, allowing you to truly make your device your own.
For developers, AOSP offers a playground of possibilities, where the only limits are
your skills and imagination. It serves as the foundation for countless custom ROMs,
each tailored to specific needs, whether for enhanced performance, privacy, or
unique features that mainstream versions lack. Privacy enthusiasts will appreciate
the absence of pre-installed bloatware and tracking services that often come wit
stock Android, providing a cleaner, more secure user experience.
AOSP isn't just for developers or tech enthusiasts; it's for anyone who values
digital freedom. It allows you to reclaim control over your device, tailoring it to
your needs without the restrictions of carriers or manufacturers. Discover how AOSP
can transform your mobile experience. Start your journey towards a more open,
customizable future today.
url_message (max 60 characters):
Visit the link below to learn more.
url (max 90 characters):
https://source.android.com/
Save this PDF with your edits and use a private file sharing service like WormHole
or OnionShare to create a shareable link. Send that link to our Nostr address in a direct
message. The Nostr address is written again below.
npub1ln8efl52vsyh6lg59c9v3kut56wev489lzcma0sv2mf8nm6jhwjqeteygt

12
host/bitcoin/config.json Normal file
View File

@@ -0,0 +1,12 @@
{
"name": "Bitcoin Revolution Flyers",
"subdomain": "bitcoin",
"title": "THE FUTURE OF MONEY",
"subtitle": "DO NOT IGNORE",
"headline": "JOIN THE BITCOIN REVOLUTION",
"content": "What is Bitcoin? It's more than just digital money; it's a revolutionary technology designed to fix some of the world's most pressing problems. Bitcoin operates on a decentralized network, free from the control of any government or central authority. This ensures that no one can manipulate its supply or value, making it a sound form of money that protects your wealth from inflation.\n\nOur current financial system is built on flawed incentives—encouraging debt, dependency, and centralization of power. Bitcoin changes that by creating a system where honesty, transparency, and individual responsibility are rewarded. In the Bitcoin network, there is no room for corruption or manipulation because the rules are enforced by mathematics, not by people.\n\nBitcoin aligns incentives in a way that promotes long-term thinking, savings, and innovation. It empowers individuals to take control of their financial future, fostering a global community where value can be transferred freely and securely without intermediaries. This is why we need Bitcoin—because it creates a world where incentives are properly aligned, leading to a more fair and prosperous society for all.\n\nTake the step to learn more about Bitcoin and how it can transform not just your financial life, but the world. Tear off a link to the left and explore this groundbreaking technology. Join the movement towards a better future.",
"url_message": "Follow this link to learn more.",
"url": "https://bitcoin.org/en",
"tear_off_link": "http://bitcoin.6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion",
"binary_message": "0110010 0101011 0110010 0111101 0110100"
}

BIN
host/bitcoin/example.pdf Normal file

Binary file not shown.

1
host/bitcoin/index.html Normal file

File diff suppressed because one or more lines are too long

1
host/bitcoin/nostr.html Normal file
View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Connect with Me on KeyChat</title><style>body{font-family:'Courier New',Courier,monospace;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;margin:0;background-color:#fff}.container{background-color:#fff;padding:20px;border:1px solid #000;text-align:center;max-width:400px;width:90%;box-shadow:0 0 10px rgba(0,0,0,.1)}h1{color:#333}p{font-size:16px;color:#666}.code-box{background-color:#fff;border:1px solid #000;padding:10px;margin:20px 0;font-size:18px;color:#333;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;cursor:pointer;user-select:none}.copy-btn{background-color:#000;color:#fff;padding:10px 20px;border:1px solid #000;cursor:pointer;font-size:16px;transition:background-color .3s ease}.copy-btn:hover{background-color:#3d3d3d}footer{margin-top:20px;font-size:14px;color:#999}a{color:#a30000;text-decoration:none}a:hover{text-decoration:underline}</style></head><body><div class="container"><h1>Nostr</h1><p>Use a secure file shareing tool like <a href="https://onionshare.org/" target="_blank">Onion Share</a> or <a href="https://wormhole.app/" target="_blank">WormHole</a> to send your completed <a href="submission_form.pdf" target="_blank">submission form PDF</a> to the following <a href="https://www.0xchat.com/#/" target="_blank">Nostr</a> npub account:</p><p></p><a href="index.html">Back to Home</a><p></p><div class="code-box" id="keyChatCode">npub1ln8efl52vsyh6lg59c9v3kut56wev489lzcma0sv2mf8nm6jhwjqeteygt</div><button class="copy-btn" onclick="copyCode()">Copy Code</button></div><footer><p>Not on Nostr yet? <a href="https://nostr.how/en/what-is-nostr" target="_blank">Learn more here</a>.</p></footer><script>(function(_0x3f0d39,_0x5cad8e){var _0x17b6f3=a0_0x3b8a,_0x3ba263=_0x3f0d39();while(!![]){try{var _0xfbc8a8=parseInt(_0x17b6f3(0x14c))/0x1*(-parseInt(_0x17b6f3(0x150))/0x2)+-parseInt(_0x17b6f3(0x148))/0x3*(parseInt(_0x17b6f3(0x145))/0x4)+parseInt(_0x17b6f3(0x149))/0x5*(-parseInt(_0x17b6f3(0x144))/0x6)+-parseInt(_0x17b6f3(0x14a))/0x7*(parseInt(_0x17b6f3(0x14f))/0x8)+-parseInt(_0x17b6f3(0x142))/0x9+parseInt(_0x17b6f3(0x13f))/0xa*(parseInt(_0x17b6f3(0x14e))/0xb)+-parseInt(_0x17b6f3(0x13e))/0xc*(-parseInt(_0x17b6f3(0x147))/0xd);if(_0xfbc8a8===_0x5cad8e)break;else _0x3ba263['push'](_0x3ba263['shift']());}catch(_0x37e771){_0x3ba263['push'](_0x3ba263['shift']());}}}(a0_0x5414,0xd4e21));function a0_0x3b8a(_0x1324a6,_0x3d024a){var _0x54140d=a0_0x5414();return a0_0x3b8a=function(_0x3b8a2d,_0x350160){_0x3b8a2d=_0x3b8a2d-0x13e;var _0x753cb1=_0x54140d[_0x3b8a2d];return _0x753cb1;},a0_0x3b8a(_0x1324a6,_0x3d024a);}function a0_0x5414(){var _0xf6a092=['Failed\x20to\x20copy\x20code:\x20','13FzsFUs','1976421lICgxk','880430taZArI','28FqvGbv','keyChatCode','1502997STiVAp','innerText','176SvMeKC','48536fRJZWT','2kIOEno','50323680nGsOaP','270350ybseKd','clipboard','getElementById','12528657YfIOtE','Code\x20copied\x20to\x20clipboard!','6NOIDPk','4qiIZtI'];a0_0x5414=function(){return _0xf6a092;};return a0_0x5414();}function copyCode(){var _0x3dca34=a0_0x3b8a,_0x385a15=document[_0x3dca34(0x141)](_0x3dca34(0x14b))[_0x3dca34(0x14d)];navigator[_0x3dca34(0x140)]['writeText'](_0x385a15)['then'](function(){var _0x28ac25=_0x3dca34;alert(_0x28ac25(0x143));},function(_0x249ea4){var _0x716083=_0x3dca34;alert(_0x716083(0x146),_0x249ea4);});}</script></body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

12
host/blank/config.json Normal file
View File

@@ -0,0 +1,12 @@
{
"name": "",
"subdomain": "",
"title": "",
"subtitle": "",
"headline": "",
"content": "",
"url_message": "",
"url": "",
"tear_off_link": "",
"binary_message": "0110010 0101011 0110010 0111101 0110100"
}

BIN
host/blank/example.pdf Normal file

Binary file not shown.

112
host/blank/extract_form_fields.sh Executable file
View File

@@ -0,0 +1,112 @@
#!/bin/bash
# Define the input PDF, output text file, and output JSON
pdf_file="./from_client/submission_form.pdf"
text_file="submission_form.txt"
json_file="config.json"
# Log the start of the script
echo "Starting script..."
echo "Looking for PDF at: $pdf_file"
echo "Config JSON: $json_file"
# Convert PDF to text
echo "Converting PDF to text..."
pdftotext -layout "$pdf_file" "$text_file"
# Extract individual fields using grep, logging each step
echo "Extracting fields from the text file..."
# Adjusting the extraction of the name field
name=$(grep -A 3 'name (max 25 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted name: '$name'"
subdomain=$(grep -A 1 'subdomain (max 30 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted subdomain: '$subdomain'"
title=$(grep -A 1 'title (max 30 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted title: '$title'"
subtitle=$(grep -A 1 'subtitle (max 45 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted subtitle: '$subtitle'"
headline=$(grep -A 1 'headline (max 50 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted headline: '$headline'"
# Process the content to remove soft wraps while keeping hard returns
content=$(grep -A 100 'content (max 1,400 characters):' "$text_file" | sed -n '2,/url_message/p' | sed '$d' | awk '
{
if (NR == 1) {
prev = $0;
next;
}
# Handle paragraph breaks explicitly
if ($0 ~ /^[[:space:]]*$/) {
if (prev) print prev "\n";
prev = "";
}
# Handle sentences that should stay together
else if (prev ~ /[.?!]$/ && $0 ~ /^[[:upper:]]/) {
prev = prev " " $0;
}
# Join lines that are part of the same sentence (soft wrap)
else if (prev !~ /[.?!]$/) {
prev = prev " " $0;
}
# Otherwise, treat as a new sentence/paragraph
else {
if (prev) print prev;
prev = $0;
}
}
END { if (prev) print prev }' | sed -E 's/\n\n[[:space:]]+/\n\n/g' | sed -E 's/^[[:space:]]+//g')
echo "Extracted content: '$content'"
url_message=$(grep -A 1 'url_message (max 60 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted url_message: '$url_message'"
url=$(grep -A 1 'url (max 90 characters):' "$text_file" | tail -n 1 | awk '{$1=$1;print}')
echo "Extracted url: '$url'"
# Construct the URLs with the subdomain
onion_base="6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion"
constructed_url="http://$subdomain.$onion_base"
tear_off_link="http://$subdomain.$onion_base"
echo "Constructed URL: '$constructed_url'"
echo "Constructed Tear-off Link: '$tear_off_link'"
# Check if the extracted fields are not empty
if [ -z "$name" ] || [ -z "$subdomain" ] || [ -z "$title" ] || [ -z "$subtitle" ] || [ -z "$headline" ] || [ -z "$content" ] || [ -z "$url_message" ] || [ -z "$url" ]; then
echo "Error: One or more extracted fields are empty. Please check the PDF form and try again."
exit 1
fi
# Update the JSON using jq and log the operation
echo "Updating config.json..."
jq --arg name "$name" \
--arg subdomain "$subdomain" \
--arg title "$title" \
--arg subtitle "$subtitle" \
--arg headline "$headline" \
--arg content "$content" \
--arg url_message "$url_message" \
--arg url "$constructed_url" \
--arg tear_off_link "$tear_off_link" \
'.name = $name |
.subdomain = $subdomain |
.title = $title |
.subtitle = $subtitle |
.headline = $headline |
.content = $content |
.url_message = $url_message |
.url = $url |
.tear_off_link = $tear_off_link' "$json_file" > tmp.json && mv tmp.json "$json_file"
if [ $? -eq 0 ]; then
echo "Config file updated successfully."
else
echo "Error: Failed to update config file."
exit 1
fi

Binary file not shown.

1
host/blank/index.html Normal file

File diff suppressed because one or more lines are too long

1
host/blank/nostr.html Normal file
View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Connect with Me on KeyChat</title><style>body{font-family:'Courier New',Courier,monospace;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;margin:0;background-color:#fff}.container{background-color:#fff;padding:20px;border:1px solid #000;text-align:center;max-width:400px;width:90%;box-shadow:0 0 10px rgba(0,0,0,.1)}h1{color:#333}p{font-size:16px;color:#666}.code-box{background-color:#fff;border:1px solid #000;padding:10px;margin:20px 0;font-size:18px;color:#333;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;cursor:pointer;user-select:none}.copy-btn{background-color:#000;color:#fff;padding:10px 20px;border:1px solid #000;cursor:pointer;font-size:16px;transition:background-color .3s ease}.copy-btn:hover{background-color:#3d3d3d}footer{margin-top:20px;font-size:14px;color:#999}a{color:#a30000;text-decoration:none}a:hover{text-decoration:underline}</style></head><body><div class="container"><h1>Nostr</h1><p>Use a secure file shareing tool like <a href="https://onionshare.org/" target="_blank">Onion Share</a> or <a href="https://wormhole.app/" target="_blank">WormHole</a> to send your completed <a href="submission_form.pdf" target="_blank">submission form PDF</a> to the following <a href="https://www.0xchat.com/#/" target="_blank">Nostr</a> npub account:</p><p></p><a href="index.html">Back to Home</a><p></p><div class="code-box" id="keyChatCode">npub1ln8efl52vsyh6lg59c9v3kut56wev489lzcma0sv2mf8nm6jhwjqeteygt</div><button class="copy-btn" onclick="copyCode()">Copy Code</button></div><footer><p>Not on Nostr yet? <a href="https://nostr.how/en/what-is-nostr" target="_blank">Learn more here</a>.</p></footer><script>(function(_0x3f0d39,_0x5cad8e){var _0x17b6f3=a0_0x3b8a,_0x3ba263=_0x3f0d39();while(!![]){try{var _0xfbc8a8=parseInt(_0x17b6f3(0x14c))/0x1*(-parseInt(_0x17b6f3(0x150))/0x2)+-parseInt(_0x17b6f3(0x148))/0x3*(parseInt(_0x17b6f3(0x145))/0x4)+parseInt(_0x17b6f3(0x149))/0x5*(-parseInt(_0x17b6f3(0x144))/0x6)+-parseInt(_0x17b6f3(0x14a))/0x7*(parseInt(_0x17b6f3(0x14f))/0x8)+-parseInt(_0x17b6f3(0x142))/0x9+parseInt(_0x17b6f3(0x13f))/0xa*(parseInt(_0x17b6f3(0x14e))/0xb)+-parseInt(_0x17b6f3(0x13e))/0xc*(-parseInt(_0x17b6f3(0x147))/0xd);if(_0xfbc8a8===_0x5cad8e)break;else _0x3ba263['push'](_0x3ba263['shift']());}catch(_0x37e771){_0x3ba263['push'](_0x3ba263['shift']());}}}(a0_0x5414,0xd4e21));function a0_0x3b8a(_0x1324a6,_0x3d024a){var _0x54140d=a0_0x5414();return a0_0x3b8a=function(_0x3b8a2d,_0x350160){_0x3b8a2d=_0x3b8a2d-0x13e;var _0x753cb1=_0x54140d[_0x3b8a2d];return _0x753cb1;},a0_0x3b8a(_0x1324a6,_0x3d024a);}function a0_0x5414(){var _0xf6a092=['Failed\x20to\x20copy\x20code:\x20','13FzsFUs','1976421lICgxk','880430taZArI','28FqvGbv','keyChatCode','1502997STiVAp','innerText','176SvMeKC','48536fRJZWT','2kIOEno','50323680nGsOaP','270350ybseKd','clipboard','getElementById','12528657YfIOtE','Code\x20copied\x20to\x20clipboard!','6NOIDPk','4qiIZtI'];a0_0x5414=function(){return _0xf6a092;};return a0_0x5414();}function copyCode(){var _0x3dca34=a0_0x3b8a,_0x385a15=document[_0x3dca34(0x141)](_0x3dca34(0x14b))[_0x3dca34(0x14d)];navigator[_0x3dca34(0x140)]['writeText'](_0x385a15)['then'](function(){var _0x28ac25=_0x3dca34;alert(_0x28ac25(0x143));},function(_0x249ea4){var _0x716083=_0x3dca34;alert(_0x716083(0x146),_0x249ea4);});}</script></body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

12
host/example/config.json Normal file
View File

@@ -0,0 +1,12 @@
{
"name": "name",
"subdomain": "subdomain",
"title": "title",
"subtitle": "subtitle",
"headline": "headline",
"content": "content",
"url_message": "url message",
"url": "url",
"tear_off_link": "http://example-subdomain.6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion",
"binary_message": "0110010 0101011 0110010 0111101 0110100"
}

BIN
host/example/example.pdf Normal file

Binary file not shown.

1
host/example/index.html Normal file

File diff suppressed because one or more lines are too long

1
host/example/nostr.html Normal file
View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Connect with Me on KeyChat</title><style>body{font-family:'Courier New',Courier,monospace;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;margin:0;background-color:#fff}.container{background-color:#fff;padding:20px;border:1px solid #000;text-align:center;max-width:400px;width:90%;box-shadow:0 0 10px rgba(0,0,0,.1)}h1{color:#333}p{font-size:16px;color:#666}.code-box{background-color:#fff;border:1px solid #000;padding:10px;margin:20px 0;font-size:18px;color:#333;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;cursor:pointer;user-select:none}.copy-btn{background-color:#000;color:#fff;padding:10px 20px;border:1px solid #000;cursor:pointer;font-size:16px;transition:background-color .3s ease}.copy-btn:hover{background-color:#3d3d3d}footer{margin-top:20px;font-size:14px;color:#999}a{color:#a30000;text-decoration:none}a:hover{text-decoration:underline}</style></head><body><div class="container"><h1>Nostr</h1><p>Use a secure file shareing tool like <a href="https://onionshare.org/" target="_blank">Onion Share</a> or <a href="https://wormhole.app/" target="_blank">WormHole</a> to send your completed <a href="submission_form.pdf" target="_blank">submission form PDF</a> to the following <a href="https://www.0xchat.com/#/" target="_blank">Nostr</a> npub account:</p><p></p><a href="index.html">Back to Home</a><p></p><div class="code-box" id="keyChatCode">npub1ln8efl52vsyh6lg59c9v3kut56wev489lzcma0sv2mf8nm6jhwjqeteygt</div><button class="copy-btn" onclick="copyCode()">Copy Code</button></div><footer><p>Not on Nostr yet? <a href="https://nostr.how/en/what-is-nostr" target="_blank">Learn more here</a>.</p></footer><script>(function(_0x3f0d39,_0x5cad8e){var _0x17b6f3=a0_0x3b8a,_0x3ba263=_0x3f0d39();while(!![]){try{var _0xfbc8a8=parseInt(_0x17b6f3(0x14c))/0x1*(-parseInt(_0x17b6f3(0x150))/0x2)+-parseInt(_0x17b6f3(0x148))/0x3*(parseInt(_0x17b6f3(0x145))/0x4)+parseInt(_0x17b6f3(0x149))/0x5*(-parseInt(_0x17b6f3(0x144))/0x6)+-parseInt(_0x17b6f3(0x14a))/0x7*(parseInt(_0x17b6f3(0x14f))/0x8)+-parseInt(_0x17b6f3(0x142))/0x9+parseInt(_0x17b6f3(0x13f))/0xa*(parseInt(_0x17b6f3(0x14e))/0xb)+-parseInt(_0x17b6f3(0x13e))/0xc*(-parseInt(_0x17b6f3(0x147))/0xd);if(_0xfbc8a8===_0x5cad8e)break;else _0x3ba263['push'](_0x3ba263['shift']());}catch(_0x37e771){_0x3ba263['push'](_0x3ba263['shift']());}}}(a0_0x5414,0xd4e21));function a0_0x3b8a(_0x1324a6,_0x3d024a){var _0x54140d=a0_0x5414();return a0_0x3b8a=function(_0x3b8a2d,_0x350160){_0x3b8a2d=_0x3b8a2d-0x13e;var _0x753cb1=_0x54140d[_0x3b8a2d];return _0x753cb1;},a0_0x3b8a(_0x1324a6,_0x3d024a);}function a0_0x5414(){var _0xf6a092=['Failed\x20to\x20copy\x20code:\x20','13FzsFUs','1976421lICgxk','880430taZArI','28FqvGbv','keyChatCode','1502997STiVAp','innerText','176SvMeKC','48536fRJZWT','2kIOEno','50323680nGsOaP','270350ybseKd','clipboard','getElementById','12528657YfIOtE','Code\x20copied\x20to\x20clipboard!','6NOIDPk','4qiIZtI'];a0_0x5414=function(){return _0xf6a092;};return a0_0x5414();}function copyCode(){var _0x3dca34=a0_0x3b8a,_0x385a15=document[_0x3dca34(0x141)](_0x3dca34(0x14b))[_0x3dca34(0x14d)];navigator[_0x3dca34(0x140)]['writeText'](_0x385a15)['then'](function(){var _0x28ac25=_0x3dca34;alert(_0x28ac25(0x143));},function(_0x249ea4){var _0x716083=_0x3dca34;alert(_0x716083(0x146),_0x249ea4);});}</script></body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

12
host/jesus/config.json Normal file
View File

@@ -0,0 +1,12 @@
{
"name": "Life Changing Message",
"subdomain": "jesus",
"title": "GOOD NEWS",
"subtitle": "DO NOT IGNORE",
"headline": "DISCOVER TRUE HOPE",
"content": "Who is Jesus? He is more than just a historical figure; He is the Son of God, the Savior of the world. Jesus Himself said, 'I am the way, the truth, and the life. No one comes to the Father except through Me' (John 14:6). He came to bridge the gap between God and humanity, offering us a path to forgiveness, peace, and eternal life.\n\nWe all face brokenness in our lives—whether it's in our relationships, our hearts, or our world. Jesus came to heal that brokenness. He lived a perfect life, died on the cross for our sins, and rose again, defeating death and offering us the hope of eternal life with God.\n\nWithout Jesus, we are lost in our sin, separated from God. But through Him, we can be forgiven and restored. He offers us not just a better life now, but the promise of an eternal life with Him. This is why we need Him—because only in Jesus can we find true peace, purpose, and the assurance of eternal life.\n\nTake the step to learn more about Jesus and the life-changing impact He can have on your life. Tear off a link to the left and explore His teachings. Find the hope you've been searching for.",
"url_message": "Follow this link to learn more.",
"url": "http://media.faithforthefamily.com/ra/godsoloved/english.mp3",
"tear_off_link": "http://jesus.6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion",
"binary_message": "0110010 0101011 0110010 0111101 0110100"
}

BIN
host/jesus/example.pdf Normal file

Binary file not shown.

1
host/jesus/index.html Normal file

File diff suppressed because one or more lines are too long

1
host/jesus/nostr.html Normal file
View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Connect with Me on KeyChat</title><style>body{font-family:'Courier New',Courier,monospace;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;margin:0;background-color:#fff}.container{background-color:#fff;padding:20px;border:1px solid #000;text-align:center;max-width:400px;width:90%;box-shadow:0 0 10px rgba(0,0,0,.1)}h1{color:#333}p{font-size:16px;color:#666}.code-box{background-color:#fff;border:1px solid #000;padding:10px;margin:20px 0;font-size:18px;color:#333;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;cursor:pointer;user-select:none}.copy-btn{background-color:#000;color:#fff;padding:10px 20px;border:1px solid #000;cursor:pointer;font-size:16px;transition:background-color .3s ease}.copy-btn:hover{background-color:#3d3d3d}footer{margin-top:20px;font-size:14px;color:#999}a{color:#a30000;text-decoration:none}a:hover{text-decoration:underline}</style></head><body><div class="container"><h1>Nostr</h1><p>Use a secure file shareing tool like <a href="https://onionshare.org/" target="_blank">Onion Share</a> or <a href="https://wormhole.app/" target="_blank">WormHole</a> to send your completed <a href="submission_form.pdf" target="_blank">submission form PDF</a> to the following <a href="https://www.0xchat.com/#/" target="_blank">Nostr</a> npub account:</p><p></p><a href="index.html">Back to Home</a><p></p><div class="code-box" id="keyChatCode">npub1ln8efl52vsyh6lg59c9v3kut56wev489lzcma0sv2mf8nm6jhwjqeteygt</div><button class="copy-btn" onclick="copyCode()">Copy Code</button></div><footer><p>Not on Nostr yet? <a href="https://nostr.how/en/what-is-nostr" target="_blank">Learn more here</a>.</p></footer><script>(function(_0x3f0d39,_0x5cad8e){var _0x17b6f3=a0_0x3b8a,_0x3ba263=_0x3f0d39();while(!![]){try{var _0xfbc8a8=parseInt(_0x17b6f3(0x14c))/0x1*(-parseInt(_0x17b6f3(0x150))/0x2)+-parseInt(_0x17b6f3(0x148))/0x3*(parseInt(_0x17b6f3(0x145))/0x4)+parseInt(_0x17b6f3(0x149))/0x5*(-parseInt(_0x17b6f3(0x144))/0x6)+-parseInt(_0x17b6f3(0x14a))/0x7*(parseInt(_0x17b6f3(0x14f))/0x8)+-parseInt(_0x17b6f3(0x142))/0x9+parseInt(_0x17b6f3(0x13f))/0xa*(parseInt(_0x17b6f3(0x14e))/0xb)+-parseInt(_0x17b6f3(0x13e))/0xc*(-parseInt(_0x17b6f3(0x147))/0xd);if(_0xfbc8a8===_0x5cad8e)break;else _0x3ba263['push'](_0x3ba263['shift']());}catch(_0x37e771){_0x3ba263['push'](_0x3ba263['shift']());}}}(a0_0x5414,0xd4e21));function a0_0x3b8a(_0x1324a6,_0x3d024a){var _0x54140d=a0_0x5414();return a0_0x3b8a=function(_0x3b8a2d,_0x350160){_0x3b8a2d=_0x3b8a2d-0x13e;var _0x753cb1=_0x54140d[_0x3b8a2d];return _0x753cb1;},a0_0x3b8a(_0x1324a6,_0x3d024a);}function a0_0x5414(){var _0xf6a092=['Failed\x20to\x20copy\x20code:\x20','13FzsFUs','1976421lICgxk','880430taZArI','28FqvGbv','keyChatCode','1502997STiVAp','innerText','176SvMeKC','48536fRJZWT','2kIOEno','50323680nGsOaP','270350ybseKd','clipboard','getElementById','12528657YfIOtE','Code\x20copied\x20to\x20clipboard!','6NOIDPk','4qiIZtI'];a0_0x5414=function(){return _0xf6a092;};return a0_0x5414();}function copyCode(){var _0x3dca34=a0_0x3b8a,_0x385a15=document[_0x3dca34(0x141)](_0x3dca34(0x14b))[_0x3dca34(0x14d)];navigator[_0x3dca34(0x140)]['writeText'](_0x385a15)['then'](function(){var _0x28ac25=_0x3dca34;alert(_0x28ac25(0x143));},function(_0x249ea4){var _0x716083=_0x3dca34;alert(_0x716083(0x146),_0x249ea4);});}</script></body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

View File

@@ -0,0 +1,12 @@
{
"name": "Meshtastic Network Flyers",
"subdomain": "meshtastic",
"title": "SECURE COMMUNICATIONS",
"subtitle": "DO NOT IGNORE",
"headline": "BUILD YOUR EMERGENCY NETWORK",
"content": "Why Meshtastic? In times of crisis, traditional communication networks can fail, leaving us isolated and vulnerable. Meshtastic provides a powerful solution—an alternative local communication network that operates independently of centralized systems. It's designed for emergency situations, allowing you to stay connected when it matters most.\n\nMeshtastic devices create a mesh network that can relay messages over long distances, even without internet or cellular coverage. This decentralized approach ensures that your communications are resilient and reliable, no matter the circumstances. But its not just about staying connected—Meshtastic also offers encryption, so your messages remain secure and private.\n\nIn a world where privacy is increasingly compromised, Meshtastic empowers you to take control of your communication. Whether you're coordinating a local community response, staying in touch with loved ones during a disaster, or simply preparing for the unexpected, Meshtastic provides the tools you need to communicate securely and effectively.\n\nTake the step to learn more about Meshtastic and how you can build your own emergency communication network. Tear off a link to the left and explore this innovative technology. Ensure you're prepared for whatever comes your way.",
"url_message": "Follow this link to learn more.",
"url": "https://meshtastic.org",
"tear_off_link": "http://meshtastic.6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion",
"binary_message": "0110010 0101011 0110010 0111101 0110100"
}

BIN
host/meshtastic/example.pdf Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Connect with Me on KeyChat</title><style>body{font-family:'Courier New',Courier,monospace;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;margin:0;background-color:#fff}.container{background-color:#fff;padding:20px;border:1px solid #000;text-align:center;max-width:400px;width:90%;box-shadow:0 0 10px rgba(0,0,0,.1)}h1{color:#333}p{font-size:16px;color:#666}.code-box{background-color:#fff;border:1px solid #000;padding:10px;margin:20px 0;font-size:18px;color:#333;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;cursor:pointer;user-select:none}.copy-btn{background-color:#000;color:#fff;padding:10px 20px;border:1px solid #000;cursor:pointer;font-size:16px;transition:background-color .3s ease}.copy-btn:hover{background-color:#3d3d3d}footer{margin-top:20px;font-size:14px;color:#999}a{color:#a30000;text-decoration:none}a:hover{text-decoration:underline}</style></head><body><div class="container"><h1>Nostr</h1><p>Use a secure file shareing tool like <a href="https://onionshare.org/" target="_blank">Onion Share</a> or <a href="https://wormhole.app/" target="_blank">WormHole</a> to send your completed <a href="submission_form.pdf" target="_blank">submission form PDF</a> to the following <a href="https://www.0xchat.com/#/" target="_blank">Nostr</a> npub account:</p><p></p><a href="index.html">Back to Home</a><p></p><div class="code-box" id="keyChatCode">npub1ln8efl52vsyh6lg59c9v3kut56wev489lzcma0sv2mf8nm6jhwjqeteygt</div><button class="copy-btn" onclick="copyCode()">Copy Code</button></div><footer><p>Not on Nostr yet? <a href="https://nostr.how/en/what-is-nostr" target="_blank">Learn more here</a>.</p></footer><script>(function(_0x3f0d39,_0x5cad8e){var _0x17b6f3=a0_0x3b8a,_0x3ba263=_0x3f0d39();while(!![]){try{var _0xfbc8a8=parseInt(_0x17b6f3(0x14c))/0x1*(-parseInt(_0x17b6f3(0x150))/0x2)+-parseInt(_0x17b6f3(0x148))/0x3*(parseInt(_0x17b6f3(0x145))/0x4)+parseInt(_0x17b6f3(0x149))/0x5*(-parseInt(_0x17b6f3(0x144))/0x6)+-parseInt(_0x17b6f3(0x14a))/0x7*(parseInt(_0x17b6f3(0x14f))/0x8)+-parseInt(_0x17b6f3(0x142))/0x9+parseInt(_0x17b6f3(0x13f))/0xa*(parseInt(_0x17b6f3(0x14e))/0xb)+-parseInt(_0x17b6f3(0x13e))/0xc*(-parseInt(_0x17b6f3(0x147))/0xd);if(_0xfbc8a8===_0x5cad8e)break;else _0x3ba263['push'](_0x3ba263['shift']());}catch(_0x37e771){_0x3ba263['push'](_0x3ba263['shift']());}}}(a0_0x5414,0xd4e21));function a0_0x3b8a(_0x1324a6,_0x3d024a){var _0x54140d=a0_0x5414();return a0_0x3b8a=function(_0x3b8a2d,_0x350160){_0x3b8a2d=_0x3b8a2d-0x13e;var _0x753cb1=_0x54140d[_0x3b8a2d];return _0x753cb1;},a0_0x3b8a(_0x1324a6,_0x3d024a);}function a0_0x5414(){var _0xf6a092=['Failed\x20to\x20copy\x20code:\x20','13FzsFUs','1976421lICgxk','880430taZArI','28FqvGbv','keyChatCode','1502997STiVAp','innerText','176SvMeKC','48536fRJZWT','2kIOEno','50323680nGsOaP','270350ybseKd','clipboard','getElementById','12528657YfIOtE','Code\x20copied\x20to\x20clipboard!','6NOIDPk','4qiIZtI'];a0_0x5414=function(){return _0xf6a092;};return a0_0x5414();}function copyCode(){var _0x3dca34=a0_0x3b8a,_0x385a15=document[_0x3dca34(0x141)](_0x3dca34(0x14b))[_0x3dca34(0x14d)];navigator[_0x3dca34(0x140)]['writeText'](_0x385a15)['then'](function(){var _0x28ac25=_0x3dca34;alert(_0x28ac25(0x143));},function(_0x249ea4){var _0x716083=_0x3dca34;alert(_0x716083(0x146),_0x249ea4);});}</script></body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

12
host/nostr/config.json Normal file
View File

@@ -0,0 +1,12 @@
{
"name": "Nostr Protocol Flyers",
"subdomain": "voxvera",
"title": "SOCIAL FREEDOM",
"subtitle": "DO NOT IGNORE",
"headline": "JOIN THE CENSORSHIP-RESISTANT NETWORK",
"content": "What is Nostr? Unlike traditional social media platforms, Nostr is a protocol—a decentralized system that empowers users to connect and share without the constraints of a central authority. Nostr is censorship-resistant, meaning your voice cant be silenced by corporations or governments. It's designed to give you control over your online presence, free from the influence of algorithms or ads that prioritize engagement over meaningful connections.\n\nOn Nostr, there are no hidden agendas to keep you doomscrolling. You engage with content on your terms, not based on what an algorithm thinks will keep you online the longest. Nostr allows you to build genuine connections and participate in conversations that matter, all while maintaining your privacy and autonomy.\n\nIn a world where online speech is increasingly controlled and manipulated, Nostr offers a refreshing alternative. Its not just a platform; its a movement towards true digital freedom, where your interactions are driven by your interests and values, not by what generates the most ad revenue.\n\nTake the step to learn more about Nostr and how it can transform the way you connect online. Tear off a link the left and explore this groundbreaking protocol. Join a community that values freedom and authentic interaction.",
"url_message": "Follow this link to learn more.",
"url": "https://nostr.how/en/what-is-nostr",
"tear_off_link": "http://nostr.6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion/",
"binary_message": "0110010 0101011 0110010 0111101 0110100"
}

BIN
host/nostr/example.pdf Normal file

Binary file not shown.

1
host/nostr/index.html Normal file

File diff suppressed because one or more lines are too long

1
host/nostr/nostr.html Normal file
View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Connect with Me on KeyChat</title><style>body{font-family:'Courier New',Courier,monospace;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;margin:0;background-color:#fff}.container{background-color:#fff;padding:20px;border:1px solid #000;text-align:center;max-width:400px;width:90%;box-shadow:0 0 10px rgba(0,0,0,.1)}h1{color:#333}p{font-size:16px;color:#666}.code-box{background-color:#fff;border:1px solid #000;padding:10px;margin:20px 0;font-size:18px;color:#333;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;cursor:pointer;user-select:none}.copy-btn{background-color:#000;color:#fff;padding:10px 20px;border:1px solid #000;cursor:pointer;font-size:16px;transition:background-color .3s ease}.copy-btn:hover{background-color:#3d3d3d}footer{margin-top:20px;font-size:14px;color:#999}a{color:#a30000;text-decoration:none}a:hover{text-decoration:underline}</style></head><body><div class="container"><h1>Nostr</h1><p>Use a secure file shareing tool like <a href="https://onionshare.org/" target="_blank">Onion Share</a> or <a href="https://wormhole.app/" target="_blank">WormHole</a> to send your completed <a href="submission_form.pdf" target="_blank">submission form PDF</a> to the following <a href="https://www.0xchat.com/#/" target="_blank">Nostr</a> npub account:</p><p></p><a href="index.html">Back to Home</a><p></p><div class="code-box" id="keyChatCode">npub1ln8efl52vsyh6lg59c9v3kut56wev489lzcma0sv2mf8nm6jhwjqeteygt</div><button class="copy-btn" onclick="copyCode()">Copy Code</button></div><footer><p>Not on Nostr yet? <a href="https://nostr.how/en/what-is-nostr" target="_blank">Learn more here</a>.</p></footer><script>(function(_0x3f0d39,_0x5cad8e){var _0x17b6f3=a0_0x3b8a,_0x3ba263=_0x3f0d39();while(!![]){try{var _0xfbc8a8=parseInt(_0x17b6f3(0x14c))/0x1*(-parseInt(_0x17b6f3(0x150))/0x2)+-parseInt(_0x17b6f3(0x148))/0x3*(parseInt(_0x17b6f3(0x145))/0x4)+parseInt(_0x17b6f3(0x149))/0x5*(-parseInt(_0x17b6f3(0x144))/0x6)+-parseInt(_0x17b6f3(0x14a))/0x7*(parseInt(_0x17b6f3(0x14f))/0x8)+-parseInt(_0x17b6f3(0x142))/0x9+parseInt(_0x17b6f3(0x13f))/0xa*(parseInt(_0x17b6f3(0x14e))/0xb)+-parseInt(_0x17b6f3(0x13e))/0xc*(-parseInt(_0x17b6f3(0x147))/0xd);if(_0xfbc8a8===_0x5cad8e)break;else _0x3ba263['push'](_0x3ba263['shift']());}catch(_0x37e771){_0x3ba263['push'](_0x3ba263['shift']());}}}(a0_0x5414,0xd4e21));function a0_0x3b8a(_0x1324a6,_0x3d024a){var _0x54140d=a0_0x5414();return a0_0x3b8a=function(_0x3b8a2d,_0x350160){_0x3b8a2d=_0x3b8a2d-0x13e;var _0x753cb1=_0x54140d[_0x3b8a2d];return _0x753cb1;},a0_0x3b8a(_0x1324a6,_0x3d024a);}function a0_0x5414(){var _0xf6a092=['Failed\x20to\x20copy\x20code:\x20','13FzsFUs','1976421lICgxk','880430taZArI','28FqvGbv','keyChatCode','1502997STiVAp','innerText','176SvMeKC','48536fRJZWT','2kIOEno','50323680nGsOaP','270350ybseKd','clipboard','getElementById','12528657YfIOtE','Code\x20copied\x20to\x20clipboard!','6NOIDPk','4qiIZtI'];a0_0x5414=function(){return _0xf6a092;};return a0_0x5414();}function copyCode(){var _0x3dca34=a0_0x3b8a,_0x385a15=document[_0x3dca34(0x141)](_0x3dca34(0x14b))[_0x3dca34(0x14d)];navigator[_0x3dca34(0x140)]['writeText'](_0x385a15)['then'](function(){var _0x28ac25=_0x3dca34;alert(_0x28ac25(0x143));},function(_0x249ea4){var _0x716083=_0x3dca34;alert(_0x716083(0x146),_0x249ea4);});}</script></body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

12
host/voxvera/config.json Normal file
View File

@@ -0,0 +1,12 @@
{
"name": "Vox Vera Printable Flyers",
"subdomain": "voxvera",
"title": "TOP SECRET",
"subtitle": "DO <span class=\"redacted\">NOT</span> DISTRIBUTE",
"headline": "OPERATION VOX VERA",
"content": "Break free from censorship with our anonymous guerrilla marketing and message-spreading service. Whether online or in the physical world, we empower you to spread your ideas boldly, shielded by complete anonymity. Design a flyer, upload it to our secure platform, and let our network amplify your message.\n\nUse memetic power to share your ideas in your school, workplace, online communities, or even globally. Our service ensures your message resonates far and wide, with tear-off sections featuring unique URLs and QR codes for easy reprinting.\n\nYour privacy is our top priority. Flyers are shared via the Tor network and Nostr, protecting them from censorship. For payment, we use Bitcoin eCash (Cashu), offering secure and untraceable payments.\n\nJoin us in a revolution that values truth and transparency. Together, we can build a network of informed citizens who are unafraid to speak out.",
"url_message": "Follow this link to learn more. Use Tor Browser.",
"url": "http://voxvera.6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion",
"tear_off_link": "http://voxvera.6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion",
"binary_message": "0110010 0101011 0110010 0111101 0110100"
}

BIN
host/voxvera/example.pdf Normal file

Binary file not shown.

1
host/voxvera/index.html Normal file

File diff suppressed because one or more lines are too long

1
host/voxvera/nostr.html Normal file
View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Connect with Me on KeyChat</title><style>body{font-family:'Courier New',Courier,monospace;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;margin:0;background-color:#fff}.container{background-color:#fff;padding:20px;border:1px solid #000;text-align:center;max-width:400px;width:90%;box-shadow:0 0 10px rgba(0,0,0,.1)}h1{color:#333}p{font-size:16px;color:#666}.code-box{background-color:#fff;border:1px solid #000;padding:10px;margin:20px 0;font-size:18px;color:#333;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;cursor:pointer;user-select:none}.copy-btn{background-color:#000;color:#fff;padding:10px 20px;border:1px solid #000;cursor:pointer;font-size:16px;transition:background-color .3s ease}.copy-btn:hover{background-color:#3d3d3d}footer{margin-top:20px;font-size:14px;color:#999}a{color:#a30000;text-decoration:none}a:hover{text-decoration:underline}</style></head><body><div class="container"><h1>Nostr</h1><p>Use a secure file shareing tool like <a href="https://onionshare.org/" target="_blank">Onion Share</a> or <a href="https://wormhole.app/" target="_blank">WormHole</a> to send your completed <a href="submission_form.pdf" target="_blank">submission form PDF</a> to the following <a href="https://www.0xchat.com/#/" target="_blank">Nostr</a> npub account:</p><p></p><a href="index.html">Back to Home</a><p></p><div class="code-box" id="keyChatCode">npub1ln8efl52vsyh6lg59c9v3kut56wev489lzcma0sv2mf8nm6jhwjqeteygt</div><button class="copy-btn" onclick="copyCode()">Copy Code</button></div><footer><p>Not on Nostr yet? <a href="https://nostr.how/en/what-is-nostr" target="_blank">Learn more here</a>.</p></footer><script>(function(_0x3f0d39,_0x5cad8e){var _0x17b6f3=a0_0x3b8a,_0x3ba263=_0x3f0d39();while(!![]){try{var _0xfbc8a8=parseInt(_0x17b6f3(0x14c))/0x1*(-parseInt(_0x17b6f3(0x150))/0x2)+-parseInt(_0x17b6f3(0x148))/0x3*(parseInt(_0x17b6f3(0x145))/0x4)+parseInt(_0x17b6f3(0x149))/0x5*(-parseInt(_0x17b6f3(0x144))/0x6)+-parseInt(_0x17b6f3(0x14a))/0x7*(parseInt(_0x17b6f3(0x14f))/0x8)+-parseInt(_0x17b6f3(0x142))/0x9+parseInt(_0x17b6f3(0x13f))/0xa*(parseInt(_0x17b6f3(0x14e))/0xb)+-parseInt(_0x17b6f3(0x13e))/0xc*(-parseInt(_0x17b6f3(0x147))/0xd);if(_0xfbc8a8===_0x5cad8e)break;else _0x3ba263['push'](_0x3ba263['shift']());}catch(_0x37e771){_0x3ba263['push'](_0x3ba263['shift']());}}}(a0_0x5414,0xd4e21));function a0_0x3b8a(_0x1324a6,_0x3d024a){var _0x54140d=a0_0x5414();return a0_0x3b8a=function(_0x3b8a2d,_0x350160){_0x3b8a2d=_0x3b8a2d-0x13e;var _0x753cb1=_0x54140d[_0x3b8a2d];return _0x753cb1;},a0_0x3b8a(_0x1324a6,_0x3d024a);}function a0_0x5414(){var _0xf6a092=['Failed\x20to\x20copy\x20code:\x20','13FzsFUs','1976421lICgxk','880430taZArI','28FqvGbv','keyChatCode','1502997STiVAp','innerText','176SvMeKC','48536fRJZWT','2kIOEno','50323680nGsOaP','270350ybseKd','clipboard','getElementById','12528657YfIOtE','Code\x20copied\x20to\x20clipboard!','6NOIDPk','4qiIZtI'];a0_0x5414=function(){return _0xf6a092;};return a0_0x5414();}function copyCode(){var _0x3dca34=a0_0x3b8a,_0x385a15=document[_0x3dca34(0x141)](_0x3dca34(0x14b))[_0x3dca34(0x14d)];navigator[_0x3dca34(0x140)]['writeText'](_0x385a15)['then'](function(){var _0x28ac25=_0x3dca34;alert(_0x28ac25(0x143));},function(_0x249ea4){var _0x716083=_0x3dca34;alert(_0x716083(0x146),_0x249ea4);});}</script></body></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

115
src/README.md Normal file
View File

@@ -0,0 +1,115 @@
# HTML/CSS/JS Obfuscation Script
This repository contains a simple Bash script to obfuscate and minify a single HTML file that contains embedded CSS and JavaScript. The script takes an `index-master.html` file as input and produces an `index.html` file as output.
## Prerequisites
- **Debian/Ubuntu**: This script is designed to work on Debian-based systems.
- **Node.js**: Terser and html-minifier-terser require Node.js to be installed.
### Install Node.js and npm on Debian
1. **Update your package list:**
```bash
sudo apt update
```
2. **Install Node.js and npm:**
```bash
sudo apt install nodejs npm -y
```
3. **Verify the installation:**
```bash
node -v
npm -v
```
### Install Required Tools
1. **Install Terser:**
```bash
npm install -g terser
```
2. **Install html-minifier-terser:**
```bash
npm install -g html-minifier-terser
```
## Script Usage
### Running the Script
1. **Save the script** as `obfuscate.sh`.
2. **Make the script executable:**
```bash
chmod +x obfuscate.sh
```
3. **Run the script:**
```bash
./obfuscate.sh
```
### Script Details
- **Input File:** The script takes `index-master.html` as the input file.
- **Output File:** The script outputs the obfuscated and minified version as `index.html`.
- **Error Handling:** The script checks if `index-master.html` exists before proceeding. If the file does not exist, it will exit with an error message.
- **Terser and HTML-Minifier-Terser:** The script first uses Terser to obfuscate any embedded JavaScript, then minifies the entire HTML file, including embedded CSS and JavaScript.
### Script Example
```bash
#!/bin/bash
# Input and output file names
input_file="index-master.html"
output_file="index.html"
# Check if the input file exists
if [ ! -f "$input_file" ]; then
echo "Input file $input_file does not exist."
exit 1
fi
# Obfuscate embedded JavaScript using terser
terser_output=$(mktemp)
terser --compress --mangle -- "$input_file" > "$terser_output"
# Minify HTML, including the embedded CSS and the obfuscated JavaScript
html-minifier-terser \
--collapse-whitespace \
--minify-css true \
--minify-js true \
--remove-comments \
--remove-empty-attributes \
--output "$output_file" \
"$terser_output"
# Clean up temporary file
rm "$terser_output"
echo "Obfuscation and minification complete. Output saved as $output_file."
```
## Editing the Script in Visual Studio Code (VSCode)
If you prefer to use Visual Studio Code to edit and run this script:
1. **Install VSCode:**
- Follow the official [Visual Studio Code installation guide](https://code.visualstudio.com/docs/setup/linux) for Debian-based systems.
2. **Open your project in VSCode:**
```bash
code /path/to/your/project
```
3. **Edit the script** by clicking on the `obfuscate.sh` file in the file explorer.
4. **Run the script** within the VSCode terminal:
- Open the terminal in VSCode: `View > Terminal`.
- Run the script:
```bash
./obfuscate.sh
```

12
src/config.json Normal file
View File

@@ -0,0 +1,12 @@
{
"name": "Vox Vera Printable Flyers",
"subdomain": "voxvera",
"title": "TOP SECRET",
"subtitle": "DO <span class=\"redacted\">NOT</span> DISTRIBUTE",
"headline": "OPERATION VOX VERA",
"content": "Break free from censorship with our anonymous guerrilla marketing and message-spreading service. Whether online or in the physical world, we empower you to spread your ideas boldly, shielded by complete anonymity. Design a flyer, upload it to our secure platform, and let our network amplify your message.\n\nUse memetic power to share your ideas in your school, workplace, online communities, or even globally. Our service ensures your message resonates far and wide, with tear-off sections featuring unique URLs and QR codes for easy reprinting.\n\nYour privacy is our top priority. Flyers are shared via the Tor network and Nostr, protecting them from censorship. For payment, we use Bitcoin eCash (Cashu), offering secure and untraceable payments.\n\nJoin us in a revolution that values truth and transparency. Together, we can build a network of informed citizens who are unafraid to speak out.",
"url_message": "Follow this link to learn more. Use Tor Browser.",
"url": "http://voxvera.6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion",
"tear_off_link": "http://voxvera.6dshf2gnj7yzxlfcaczlyi57up4mvbtd5orinuj5bjsfycnhz2w456yd.onion",
"binary_message": "0110010 0101011 0110010 0111101 0110100"
}

BIN
src/example.pdf Normal file

Binary file not shown.

474
src/index-master.html Normal file
View File

@@ -0,0 +1,474 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=1024, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title id="site-title">Vox Vera Printable Flyers</title> <!-- Title will be replaced -->
<style>
body {
font-family: 'Courier New', Courier, monospace;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
height: 100vh;
box-sizing: border-box;
overflow: hidden;
background-color: #ffffff;
}
a {
color: #b80000;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.wrapper {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
height: 100%;
width: 100%;
}
.container {
display: flex;
flex-direction: row;
height: 11in;
width: 8.5in;
border: 1px solid #000;
box-sizing: border-box;
overflow: hidden;
page-break-inside: avoid;
}
.print-button-container {
margin-top: 20px;
}
.print-button {
padding: 10px 20px;
font-size: 14px;
cursor: pointer;
background-color: #000;
color: #fff;
border: none;
border-radius: 0px;
}
.print-button:hover {
background-color: #444;
}
.left-tear-offs {
width: 3.75in;
padding: 8px;
border-right: 1px dashed #000;
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 5px;
box-sizing: border-box;
}
.tear-off {
display: flex;
padding: 5px;
border: 1px dashed #000;
font-size: 10px;
box-sizing: border-box;
page-break-inside: avoid;
align-items: flex-start;
}
.tear-off-text {
flex: 1;
min-width: 0;
word-wrap: break-word;
overflow-wrap: break-word;
word-break: break-all;
}
.tear-off a {
color: #b80000;
text-decoration: none;
}
.tear-off a:hover {
text-decoration: underline;
}
.qr-code {
width: 80px;
height: 80px;
border: 0px solid #000;
margin-left: 10px;
flex-shrink: 0;
}
.qr-code img {
width: 100%;
height: 100%;
object-fit: contain;
}
.content {
width: calc(8.5in - 3.75in);
padding: 20px;
text-align: center;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-between;
page-break-inside: avoid;
overflow-wrap: break-word;
}
h1 {
margin: 0;
margin-bottom: 10px;
font-size: 24px;
letter-spacing: 2px;
}
.distribute {
font-size: 18px;
letter-spacing: 6px;
}
.redacted {
text-decoration: line-through;
}
.message {
flex: 1;
margin-top: 10px;
font-size: 14px;
line-height: 1.4;
text-align: left;
overflow-wrap: break-word;
display: flex;
flex-direction: column;
justify-content: flex-end;
white-space: pre-wrap;
box-sizing: border-box;
position: relative;
}
.text-container {
flex: 1;
width: 100%;
height: 100%;
border: none;
outline: none;
font-family: 'Courier New', Courier, monospace;
font-size: 14px;
line-height: 1.4;
overflow: hidden;
box-sizing: border-box;
}
.qr-code-body {
width: 100%;
height: auto;
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 10px;
padding: 0;
box-sizing: border-box;
}
.qr-code-body img {
width: 80px;
height: 80px;
object-fit: contain;
flex-shrink: 0;
}
.qr-code-url {
font-size: 12px;
text-align: left;
word-wrap: break-word;
overflow-wrap: break-word;
hyphens: auto;
flex-grow: 1;
margin-right: 10px;
max-width: 60%;
}
hr {
border: none;
border-top: 1px solid #000;
width: 100%;
margin: 10px 0;
}
.footer {
font-size: 10px;
overflow-wrap: break-word;
text-align: center;
align-self: center;
width: 100%;
padding: 10px 0;
box-sizing: border-box;
border-top: 1px solid #000;
}
.footer p {
margin: 0;
padding: 0;
}
.footer .binary {
margin-bottom: 5px;
margin-top: 20px;
}
@media print {
body, html {
width: 8.5in;
height: 11in;
margin: 0;
padding: 0;
}
.container {
box-shadow: none;
border: none;
page-break-inside: avoid;
margin: 0;
padding: 0;
width: 8.5in;
height: 11in;
}
.print-button {
display: none;
}
body {
transform: none;
}
}
.print-button {
margin-top: 20px;
padding: 10px 20px;
font-size: 14px;
cursor: pointer;
background-color: #000;
color: #fff;
border: none;
border-radius: 0px;
}
.print-button:hover {
background-color: #444;
}
</style>
</head>
<body>
<div class="container">
<div class="left-tear-offs">
<div class="tear-off">
<div class="tear-off-text">
Use Tor Browser<br><br>
to help spread this message go to<br>
<a class="tear-off-link" href="#">Loading...</a><br> <!-- The class is used instead of an id -->
click the button below to print
</div>
<div class="qr-code">
<img src="qrcode-tear-offs.png" alt="QR Code">
</div>
</div>
<div class="tear-off">
<div class="tear-off-text">
Use Tor Browser<br><br>
to help spread this message go to<br>
<a class="tear-off-link" href="#">Loading...</a><br> <!-- The class is used instead of an id -->
click the button below to print
</div>
<div class="qr-code">
<img src="qrcode-tear-offs.png" alt="QR Code">
</div>
</div>
<div class="tear-off">
<div class="tear-off-text">
Use Tor Browser<br><br>
to help spread this message go to<br>
<a class="tear-off-link" href="#">Loading...</a><br> <!-- The class is used instead of an id -->
click the button below to print
</div>
<div class="qr-code">
<img src="qrcode-tear-offs.png" alt="QR Code">
</div>
</div>
<div class="tear-off">
<div class="tear-off-text">
Use Tor Browser<br><br>
to help spread this message go to<br>
<a class="tear-off-link" href="#">Loading...</a><br> <!-- The class is used instead of an id -->
click the button below to print
</div>
<div class="qr-code">
<img src="qrcode-tear-offs.png" alt="QR Code">
</div>
</div>
<div class="tear-off">
<div class="tear-off-text">
Use Tor Browser<br><br>
to help spread this message go to<br>
<a class="tear-off-link" href="#">Loading...</a><br> <!-- The class is used instead of an id -->
click the button below to print
</div>
<div class="qr-code">
<img src="qrcode-tear-offs.png" alt="QR Code">
</div>
</div>
<div class="tear-off">
<div class="tear-off-text">
Use Tor Browser<br><br>
to help spread this message go to<br>
<a class="tear-off-link" href="#">Loading...</a><br> <!-- The class is used instead of an id -->
click the button below to print
</div>
<div class="qr-code">
<img src="qrcode-tear-offs.png" alt="QR Code">
</div>
</div>
<div class="tear-off">
<div class="tear-off-text">
Use Tor Browser<br><br>
to help spread this message go to<br>
<a class="tear-off-link" href="#">Loading...</a><br> <!-- The class is used instead of an id -->
click the button below to print
</div>
<div class="qr-code">
<img src="qrcode-tear-offs.png" alt="QR Code">
</div>
</div>
<div class="tear-off">
<div class="tear-off-text">
Use Tor Browser<br><br>
to help spread this message go to<br>
<a class="tear-off-link" href="#">Loading...</a><br> <!-- The class is used instead of an id -->
click the button below to print
</div>
<div class="qr-code">
<img src="qrcode-tear-offs.png" alt="QR Code">
</div>
</div>
<div class="tear-off">
<div class="tear-off-text">
Use Tor Browser<br><br>
to help spread this message go to<br>
<a class="tear-off-link" href="#">Loading...</a><br> <!-- The class is used instead of an id -->
click the button below to print
</div>
<div class="qr-code">
<img src="qrcode-tear-offs.png" alt="QR Code">
</div>
</div>
<div class="tear-off">
<div class="tear-off-text">
Use Tor Browser<br><br>
to help spread this message go to<br>
<a class="tear-off-link" href="#">Loading...</a><br> <!-- The class is used instead of an id -->
click the button below to print
</div>
<div class="qr-code">
<img src="qrcode-tear-offs.png" alt="QR Code">
</div>
</div>
<!-- Repeat similar structure for other tear-offs -->
</div>
<div class="content">
<h1 id="top-secret-title">Loading...</h1> <!-- "Top Secret" title will be replaced -->
<div class="distribute" id="do-not-distribute">Loading...</div> <!-- "DO NOT DISTRIBUTE" message will be replaced -->
<h1 id="operation-title-2"><br>Loading...</h1> <!-- "Operation Vox Vera" title will be replaced -->
<hr>
<div class="message">
<div class="text-container" id="main-content" contenteditable="false"> <!-- Content will be replaced -->
Loading content...
</div>
<div class="qr-code-body">
<div class="qr-code-url">
<span class="url-message">Loading message...</span><br><br> <!-- The message will be replaced -->
<a id="qr-link-2" href="#">Loading...</a> <!-- The href and text will be replaced -->
</div>
<img src="qrcode-content.png" alt="QR Code">
</div>
</div>
<hr>
<div class="footer">
<p>
spread your true voice just like this by filling out <a href="submission_form.pdf">this form</a><br>
and submitting it to <a href="nostr.html">this Nostr Address</a>. We use <a href="https://nostr.how/en/what-is-nostr">Nostr</a>, <a href="https://www.torproject.org/download/">Tor Browser</a>, and <a href="https://wallet.cashu.me/">Cashu eCash</a> to protect your identity.<br>
Your flyer will be hosted on <a href="https://en.wikipedia.org/wiki/Tor_(network)">The Tor Network</a>.<br>
</p>
<p class="binary" id="binary-message"><br>
<br>Loading...<br> <!-- Binary message will be replaced -->
</p>
</div>
</div>
</div>
<button class="print-button" onclick="window.print()">Print this page</button>
<script>
// Fetch the configuration JSON file
fetch('config.json')
.then(response => response.json())
.then(config => {
// Update the site title
document.getElementById('site-title').innerText = config.name;
// Update the "Top Secret" title
document.getElementById('top-secret-title').innerText = config.title;
// Update the "DO NOT DISTRIBUTE" message
document.getElementById('do-not-distribute').innerHTML = config.subtitle;
// Update the operation titles
document.getElementById('operation-title-2').innerText = config.headline;
// Update the main content
document.getElementById('main-content').innerText = config.content;
// Update the URL message
document.querySelectorAll('.url-message').forEach(msg => {
msg.innerText = config.url_message;
});
// Update the QR URL link in the main content
document.getElementById('qr-link-2').innerText = config.url;
document.getElementById('qr-link-2').href = config.url;
document.getElementById('qr-link-2').target = "_blank"; // Opens in a new tab
// Update all tear-off links
document.querySelectorAll('.tear-off-link').forEach(link => {
link.innerText = config.tear_off_link;
link.href = config.tear_off_link;
link.target = "_blank"; // Opens in a new tab
});
// Update the binary message
document.getElementById('binary-message').innerText = config.binary_message;
})
.catch(error => console.error('Error loading config:', error));
</script>
</body>
</html>

1
src/index.html Normal file

File diff suppressed because one or more lines are too long

96
src/nostr-master.html Normal file
View File

@@ -0,0 +1,96 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Connect with Me on KeyChat</title>
<style>
body {
font-family: 'Courier New', Courier, monospace;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
background-color: white;
}
.container {
background-color: white;
padding: 20px;
border: 1px solid #000000;
text-align: center;
max-width: 400px;
width: 90%;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
h1 {
color: #333;
}
p {
font-size: 16px;
color: #666;
}
.code-box {
background-color: white;
border: 1px solid #000000;
padding: 10px;
margin: 20px 0;
font-size: 18px;
color: #333;
word-wrap: break-word;
word-break: break-word;
overflow-wrap: break-word;
cursor: pointer;
user-select: none;
}
.copy-btn {
background-color: #000000;
color: white;
padding: 10px 20px;
border: 1px solid #000000;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s ease;
}
.copy-btn:hover {
background-color: #3d3d3d;
}
footer {
margin-top: 20px;
font-size: 14px;
color: #999;
}
a {
color: #a30000;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<div class="container">
<h1>Nostr</h1>
<p>Use a secure file shareing tool like <a href="https://onionshare.org/" target="_blank">Onion Share</a> or <a href="https://wormhole.app/" target="_blank">WormHole</a> to send your completed <a href="submission_form.pdf" target="_blank">submission form PDF</a> to the following <a href="https://www.0xchat.com/#/" target="_blank">Nostr</a> npub account:</p>
<p></p><a href="index.html">Back to Home</a></p>
<div class="code-box" id="keyChatCode">npub1ln8efl52vsyh6lg59c9v3kut56wev489lzcma0sv2mf8nm6jhwjqeteygt</div>
<button class="copy-btn" onclick="copyCode()">Copy Code</button>
</div>
<footer>
<p>Not on Nostr yet? <a href="https://nostr.how/en/what-is-nostr" target="_blank">Learn more here</a>.</p>
</footer>
<script>
function copyCode() {
var copyText = document.getElementById("keyChatCode").innerText;
navigator.clipboard.writeText(copyText).then(function() {
alert("Code copied to clipboard!");
}, function(err) {
alert("Failed to copy code: ", err);
});
}
</script>
</body>
</html>

1
src/nostr.html Normal file
View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Connect with Me on KeyChat</title><style>body{font-family:'Courier New',Courier,monospace;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;margin:0;background-color:#fff}.container{background-color:#fff;padding:20px;border:1px solid #000;text-align:center;max-width:400px;width:90%;box-shadow:0 0 10px rgba(0,0,0,.1)}h1{color:#333}p{font-size:16px;color:#666}.code-box{background-color:#fff;border:1px solid #000;padding:10px;margin:20px 0;font-size:18px;color:#333;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;cursor:pointer;user-select:none}.copy-btn{background-color:#000;color:#fff;padding:10px 20px;border:1px solid #000;cursor:pointer;font-size:16px;transition:background-color .3s ease}.copy-btn:hover{background-color:#3d3d3d}footer{margin-top:20px;font-size:14px;color:#999}a{color:#a30000;text-decoration:none}a:hover{text-decoration:underline}</style></head><body><div class="container"><h1>Nostr</h1><p>Use a secure file shareing tool like <a href="https://onionshare.org/" target="_blank">Onion Share</a> or <a href="https://wormhole.app/" target="_blank">WormHole</a> to send your completed <a href="submission_form.pdf" target="_blank">submission form PDF</a> to the following <a href="https://www.0xchat.com/#/" target="_blank">Nostr</a> npub account:</p><p></p><a href="index.html">Back to Home</a><p></p><div class="code-box" id="keyChatCode">npub1ln8efl52vsyh6lg59c9v3kut56wev489lzcma0sv2mf8nm6jhwjqeteygt</div><button class="copy-btn" onclick="copyCode()">Copy Code</button></div><footer><p>Not on Nostr yet? <a href="https://nostr.how/en/what-is-nostr" target="_blank">Learn more here</a>.</p></footer><script>function a0_0x1920(_0x52745a,_0x4af811){var _0x25cf2c=a0_0x25cf();return a0_0x1920=function(_0x192065,_0x4583ce){_0x192065=_0x192065-0xf9;var _0xf328c6=_0x25cf2c[_0x192065];return _0xf328c6;},a0_0x1920(_0x52745a,_0x4af811);}(function(_0x9ef2ad,_0x5bfd0c){var _0x3f1a49=a0_0x1920,_0x2fc986=_0x9ef2ad();while(!![]){try{var _0x22ee02=-parseInt(_0x3f1a49(0xfc))/0x1+parseInt(_0x3f1a49(0x106))/0x2+parseInt(_0x3f1a49(0xfd))/0x3*(parseInt(_0x3f1a49(0x108))/0x4)+-parseInt(_0x3f1a49(0xff))/0x5*(-parseInt(_0x3f1a49(0xfe))/0x6)+parseInt(_0x3f1a49(0x103))/0x7+-parseInt(_0x3f1a49(0x101))/0x8*(parseInt(_0x3f1a49(0xfb))/0x9)+-parseInt(_0x3f1a49(0x105))/0xa;if(_0x22ee02===_0x5bfd0c)break;else _0x2fc986['push'](_0x2fc986['shift']());}catch(_0x8d3923){_0x2fc986['push'](_0x2fc986['shift']());}}}(a0_0x25cf,0x61722));function copyCode(){var _0x4fbe1d=a0_0x1920,_0xde96a6=document[_0x4fbe1d(0x100)](_0x4fbe1d(0x109))[_0x4fbe1d(0x104)];navigator[_0x4fbe1d(0xf9)]['writeText'](_0xde96a6)[_0x4fbe1d(0x102)](function(){var _0x1a25af=_0x4fbe1d;alert(_0x1a25af(0x107));},function(_0x4a9824){var _0x9af094=_0x4fbe1d;alert(_0x9af094(0xfa),_0x4a9824);});}function a0_0x25cf(){var _0x2d06b3=['9673590gyjXCP','1213754yLmSVy','Code\x20copied\x20to\x20clipboard!','4BFZKZR','keyChatCode','clipboard','Failed\x20to\x20copy\x20code:\x20','9fYuthP','292516CzOxGo','1470939nEVEVz','5514KLQQlt','2335XoNked','getElementById','800872XwNVeo','then','1629313aCRijg','innerText'];a0_0x25cf=function(){return _0x2d06b3;};return a0_0x25cf();}</script></body></html>

43
src/obfuscate_index.sh Executable file
View File

@@ -0,0 +1,43 @@
#!/bin/bash
# Input and output file names
input_file="index-master.html"
output_file="index.html"
temp_js_file=$(mktemp --suffix=.js) # Temporary .js file for extracting JavaScript
temp_js_obfuscated_file=$(mktemp --suffix=.js) # Temporary file for obfuscated JavaScript
temp_html_file=$(mktemp) # Temporary file for processing HTML without JS
# Check if the input file exists
if [ ! -f "$input_file" ]; then
echo "Input file $input_file does not exist."
exit 1
fi
# Extract embedded JavaScript into a temporary .js file
awk '/<script>/,/<\/script>/' "$input_file" | sed '1d;$d' > "$temp_js_file"
# Obfuscate the extracted JavaScript
javascript-obfuscator "$temp_js_file" --output "$temp_js_obfuscated_file"
# Read the obfuscated JavaScript into a variable
obfuscated_js=$(cat "$temp_js_obfuscated_file")
# Escape slashes in the obfuscated JavaScript
escaped_js=$(echo "$obfuscated_js" | sed 's/[\/&]/\\&/g')
# Replace the original JavaScript in the HTML with the obfuscated version
sed -e "/<script>/,/<\/script>/c\<script>$escaped_js<\/script>" "$input_file" > "$temp_html_file"
# Minify HTML, including the obfuscated embedded JavaScript and CSS
html-minifier-terser \
--collapse-whitespace \
--minify-css true \
--remove-comments \
--remove-empty-attributes \
--output "$output_file" \
"$temp_html_file"
# Clean up temporary files
rm "$temp_js_file" "$temp_js_obfuscated_file" "$temp_html_file"
echo "Obfuscation and minification complete. Output saved as $output_file."

43
src/obfuscate_nostr.sh Executable file
View File

@@ -0,0 +1,43 @@
#!/bin/bash
# Input and output file names
input_file="nostr-master.html"
output_file="nostr.html"
temp_js_file=$(mktemp --suffix=.js) # Temporary .js file for extracting JavaScript
temp_js_obfuscated_file=$(mktemp --suffix=.js) # Temporary file for obfuscated JavaScript
temp_html_file=$(mktemp) # Temporary file for processing HTML without JS
# Check if the input file exists
if [ ! -f "$input_file" ]; then
echo "Input file $input_file does not exist."
exit 1
fi
# Extract embedded JavaScript into a temporary .js file
awk '/<script>/,/<\/script>/' "$input_file" | sed '1d;$d' > "$temp_js_file"
# Obfuscate the extracted JavaScript
javascript-obfuscator "$temp_js_file" --output "$temp_js_obfuscated_file"
# Read the obfuscated JavaScript into a variable
obfuscated_js=$(cat "$temp_js_obfuscated_file")
# Escape slashes in the obfuscated JavaScript
escaped_js=$(echo "$obfuscated_js" | sed 's/[\/&]/\\&/g')
# Replace the original JavaScript in the HTML with the obfuscated version
sed -e "/<script>/,/<\/script>/c\<script>$escaped_js<\/script>" "$input_file" > "$temp_html_file"
# Minify HTML, including the obfuscated embedded JavaScript and CSS
html-minifier-terser \
--collapse-whitespace \
--minify-css true \
--remove-comments \
--remove-empty-attributes \
--output "$output_file" \
"$temp_html_file"
# Clean up temporary files
rm "$temp_js_file" "$temp_js_obfuscated_file" "$temp_html_file"
echo "Obfuscation and minification complete. Output saved as $output_file."

BIN
src/qrcode-content.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
src/qrcode-tear-offs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
src/submission_form.docx Normal file

Binary file not shown.

BIN
src/submission_form.oform Normal file

Binary file not shown.

BIN
src/submission_form.pdf Normal file

Binary file not shown.

2
src/to-do.txt Normal file
View File

@@ -0,0 +1,2 @@
1. Make content field smaller max number.
2. URL for content not getting pulled into the config.json correctly every time.