HTML/CSS/JS Obfuscation Script
This repository contains two Bash scripts that obfuscate and minify the flyer's HTML files. obfuscate_index.sh
processes index-master.html
into index.html
, and obfuscate_nostr.sh
does the same for nostr-master.html
to produce nostr.html
.
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.
- qrencode: Generates the QR codes used in the flyers.
Install Node.js and npm on Debian
-
Update your package list:
sudo apt update
-
Install Node.js and npm:
sudo apt install nodejs npm -y
-
Verify the installation:
node -v npm -v
Install Additional Packages
The helper scripts rely on a few system utilities:
sudo apt install -y jq qrencode imagemagick poppler-utils
Install Required Tools
Install the Node-based tools used by the obfuscation scripts:
npm install -g javascript-obfuscator html-minifier-terser
You can also run ../setup.sh
from the repository root to install all
prerequisites automatically.
Script Usage
Running the Scripts
- Ensure both
obfuscate_index.sh
andobfuscate_nostr.sh
are available. - Make the script executable:
chmod +x obfuscate_index.sh obfuscate_nostr.sh
- Run the desired script:
./obfuscate_index.sh or ./obfuscate_nostr.sh
Script Details
- Input Files:
obfuscate_index.sh
expectsindex-master.html
andobfuscate_nostr.sh
usesnostr-master.html
. - Output Files:
obfuscate_index.sh
writesindex.html
andobfuscate_nostr.sh
writesnostr.html
. - Error Handling: Each script verifies that its input file exists before proceeding. Missing files result in an error.
- 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
#!/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."
A similar script obfuscate_nostr.sh
follows the same pattern but operates on nostr-master.html
and outputs nostr.html
.
Editing the Script in Visual Studio Code (VSCode)
If you prefer to use Visual Studio Code to edit and run these scripts:
-
Install VSCode:
- Follow the official Visual Studio Code installation guide for Debian-based systems.
-
Open your project in VSCode:
code /path/to/your/project
-
Edit
obfuscate_index.sh
orobfuscate_nostr.sh
in the file explorer. -
Run the desired script within the VSCode terminal:
- Open the terminal in VSCode:
View > Terminal
. - Run the script:
./obfuscate_index.sh or ./obfuscate_nostr.sh
- Open the terminal in VSCode:
Creating and Hosting a Flyer
The voxvera
CLI automates filling config.json
, building the HTML files, and copying everything into a new directory under host/
.
Usage
# interactive mode
voxvera init && voxvera build
# use an alternate config file
voxvera init --config path/to/custom.json && voxvera build --config path/to/custom.json
# use an existing filled PDF form
voxvera init --from-pdf path/to/form.pdf && voxvera build
By default the script updates src/config.json
. Use the -c
option to specify a different file. After answering the prompts (or extracting from the PDF), index.html
and nostr.html
are generated and copied along with the QR code images and PDFs. The files end up in host/<subdomain>
which can be served statically.
QR codes are built automatically during this process. After the configuration is updated, the CLI regenerates the QR codes by invoking generate_qr.sh
to read the URLs from config.json
and produce qrcode-content.png
and qrcode-tear-offs.png
.