update
12
host/aosp/config.json
Normal 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
112
host/aosp/extract_form_fields.sh
Executable 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
|
BIN
host/aosp/from_client/submission_form.pdf
Normal file
1
host/aosp/index.html
Normal file
1
host/aosp/nostr.html
Normal 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>
|
BIN
host/aosp/qrcode-content.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
host/aosp/qrcode-tear-offs.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
host/aosp/submission_form.pdf
Normal file
110
host/aosp/submission_form.txt
Normal 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
@@ -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
1
host/bitcoin/index.html
Normal file
1
host/bitcoin/nostr.html
Normal 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>
|
BIN
host/bitcoin/qrcode-content.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
host/bitcoin/qrcode-tear-offs.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
host/bitcoin/submission_form.pdf
Normal file
12
host/blank/config.json
Normal 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
112
host/blank/extract_form_fields.sh
Executable 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
|
BIN
host/blank/from_client/submission_form.pdf
Normal file
1
host/blank/index.html
Normal file
1
host/blank/nostr.html
Normal 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>
|
BIN
host/blank/qrcode-content.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
host/blank/qrcode-tear-offs.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
host/blank/submission_form.pdf
Normal file
12
host/example/config.json
Normal 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
1
host/example/index.html
Normal file
1
host/example/nostr.html
Normal 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>
|
BIN
host/example/qrcode-content.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
host/example/qrcode-tear-offs.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
host/example/submission_form.pdf
Normal file
12
host/jesus/config.json
Normal 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
1
host/jesus/index.html
Normal file
1
host/jesus/nostr.html
Normal 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>
|
BIN
host/jesus/qrcode-content.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
host/jesus/qrcode-tear-offs.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
host/jesus/submission_form.pdf
Normal file
12
host/meshtastic/config.json
Normal 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 it’s 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
1
host/meshtastic/index.html
Normal file
1
host/meshtastic/nostr.html
Normal 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>
|
BIN
host/meshtastic/qrcode-content.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
host/meshtastic/qrcode-tear-offs.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
host/meshtastic/submission_form.pdf
Normal file
12
host/nostr/config.json
Normal 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 can’t 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. It’s not just a platform; it’s 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
1
host/nostr/index.html
Normal file
1
host/nostr/nostr.html
Normal 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>
|
BIN
host/nostr/qrcode-content.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
host/nostr/qrcode-tear-offs.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
host/nostr/submission_form.pdf
Normal file
12
host/voxvera/config.json
Normal 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
1
host/voxvera/index.html
Normal file
1
host/voxvera/nostr.html
Normal 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>
|
BIN
host/voxvera/qrcode-content.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
host/voxvera/qrcode-tear-offs.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
host/voxvera/submission_form.pdf
Normal file
115
src/README.md
Normal 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
@@ -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
474
src/index-master.html
Normal 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
96
src/nostr-master.html
Normal 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
@@ -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
@@ -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
@@ -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
After Width: | Height: | Size: 4.0 KiB |
BIN
src/qrcode-tear-offs.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
src/submission_form.docx
Normal file
BIN
src/submission_form.oform
Normal file
BIN
src/submission_form.pdf
Normal file
2
src/to-do.txt
Normal 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.
|