diff --git a/frontends/web/stegasoo_users.db b/frontends/web/stegasoo_users.db new file mode 100644 index 0000000..e69de29 diff --git a/instance/.secret_key b/instance/.secret_key new file mode 100644 index 0000000..49670ca --- /dev/null +++ b/instance/.secret_key @@ -0,0 +1 @@ +6a7378172fc0ec37143720f09a4ca34e83ec2409893aa8cd79ace5b78a64276c \ No newline at end of file diff --git a/instance/stegasoo.db b/instance/stegasoo.db new file mode 100644 index 0000000..9acae0d Binary files /dev/null and b/instance/stegasoo.db differ diff --git a/rpi/first-boot-wizard.sh b/rpi/first-boot-wizard.sh index c5de7f3..1a34155 100755 --- a/rpi/first-boot-wizard.sh +++ b/rpi/first-boot-wizard.sh @@ -17,13 +17,13 @@ PROFILE_HOOK="/etc/profile.d/stegasoo-wizard.sh" # Check if this is first boot if [ ! -f "$FLAG_FILE" ]; then - exit 0 + exit 0 fi # Check for gum, fall back to basic prompts if not available if ! command -v gum &>/dev/null; then - echo "Error: gum not found. Install with: sudo apt install gum" - exit 1 + echo "Error: gum not found. Install with: sudo apt install gum" + exit 1 fi # Gum styling - terminal green buttons with bold dark text @@ -40,20 +40,20 @@ clear # ============================================================================= gum style \ - --border double \ - --border-foreground 212 \ - --padding "1 2" \ - --margin "1" \ - --align center \ - " . * . . * . * . * . * ." \ - " ___ _____ ___ ___ _ ___ ___ ___" \ - " / __||_ _|| __| / __| /_\\ / __| / _ \\ / _ \\" \ - " \\__ \\ | | | _| | (_ | / _ \\ \\__ \\ | (_) || (_) |" \ - " |___/ |_| |___| \\___//_/ \\_\\|___/ \\___/ \\___/" \ - "" \ - " * . * . * . * . * . *" \ - "" \ - "First Boot Wizard" + --border double \ + --border-foreground 212 \ + --padding "1 2" \ + --margin "1" \ + --align center \ + " . * . . * . * . * . * ." \ + " ___ _____ ___ ___ _ ___ ___ ___ " \ + " / __||_ _|| __| / __| /_\\ / __| / _ \\ / _ \\" \ + " \\__ \\ | | | _| | (_ | / _ \\ \\__ \\ | (_) || (_) |" \ + " |___/ |_| |___| \\___//_/ \\_\\|___/ \\___/ \\___/" \ + "" \ + " * . * . * . * . * . *" \ + "" \ + "First Boot Wizard" echo "" gum style --foreground 245 "This wizard will help you configure your Stegasoo server." @@ -76,8 +76,8 @@ CHANNEL_KEY="" clear gum style \ - --foreground 212 --bold \ - "Step 1 of 3: HTTPS Configuration" + --foreground 212 --bold \ + "Step 1 of 3: HTTPS Configuration" echo "" gum style --foreground 245 "\ @@ -89,10 +89,10 @@ certificate is self-signed. This is normal for home networks." echo "" if gum confirm "Enable HTTPS?" --default=true; then - ENABLE_HTTPS="true" - gum style --foreground 82 "✓ HTTPS will be enabled" + ENABLE_HTTPS="true" + gum style --foreground 82 "✓ HTTPS will be enabled" else - gum style --foreground 214 "→ Using HTTP (unencrypted)" + gum style --foreground 214 "→ Using HTTP (unencrypted)" fi sleep 0.5 @@ -101,13 +101,13 @@ sleep 0.5 # ============================================================================= if [ "$ENABLE_HTTPS" = "true" ]; then - clear - gum style \ - --foreground 212 --bold \ - "Step 2 of 3: Port Configuration" - echo "" + clear + gum style \ + --foreground 212 --bold \ + "Step 2 of 3: Port Configuration" + echo "" - gum style --foreground 245 "\ + gum style --foreground 245 "\ The standard HTTPS port is 443, which means you can access Stegasoo without specifying a port in the URL. @@ -115,15 +115,15 @@ Stegasoo without specifying a port in the URL. Port 5000: https://stegasoo.local:5000 NOTE: Port 443 requires an iptables redirect rule." - echo "" + echo "" - if gum confirm "Use standard port 443?" --default=true; then - USE_PORT_443="true" - gum style --foreground 82 "✓ Port 443 will be configured" - else - gum style --foreground 214 "→ Using port 5000" - fi - sleep 0.5 + if gum confirm "Use standard port 443?" --default=true; then + USE_PORT_443="true" + gum style --foreground 82 "✓ Port 443 will be configured" + else + gum style --foreground 214 "→ Using port 5000" + fi + sleep 0.5 fi # ============================================================================= @@ -132,8 +132,8 @@ fi clear gum style \ - --foreground 212 --bold \ - "Step 3 of 3: Channel Key Configuration" + --foreground 212 --bold \ + "Step 3 of 3: Channel Key Configuration" echo "" gum style --foreground 245 "\ @@ -147,50 +147,50 @@ specific people (family, team, etc)." echo "" if gum confirm "Generate a private channel key?" --default=false; then + echo "" + # Generate key to temp file (gum spin doesn't capture stdout well) + KEY_FILE=$(mktemp) + ERR_FILE=$(mktemp) + VENV_PYTHON="$INSTALL_DIR/venv/bin/python" + gum spin --spinner dot --title "Generating channel key..." -- \ + bash -c "'$VENV_PYTHON' -c 'from stegasoo.channel import generate_channel_key; print(generate_channel_key())' > '$KEY_FILE' 2>'$ERR_FILE'" + + CHANNEL_KEY=$(cat "$KEY_FILE" 2>/dev/null | head -1) + KEY_ERROR=$(cat "$ERR_FILE" 2>/dev/null) + rm -f "$KEY_FILE" "$ERR_FILE" + + if [ -n "$CHANNEL_KEY" ] && [[ "$CHANNEL_KEY" =~ ^[A-Za-z0-9] ]]; then echo "" - # Generate key to temp file (gum spin doesn't capture stdout well) - KEY_FILE=$(mktemp) - ERR_FILE=$(mktemp) - VENV_PYTHON="$INSTALL_DIR/venv/bin/python" - gum spin --spinner dot --title "Generating channel key..." -- \ - bash -c "'$VENV_PYTHON' -c 'from stegasoo.channel import generate_channel_key; print(generate_channel_key())' > '$KEY_FILE' 2>'$ERR_FILE'" - - CHANNEL_KEY=$(cat "$KEY_FILE" 2>/dev/null | head -1) - KEY_ERROR=$(cat "$ERR_FILE" 2>/dev/null) - rm -f "$KEY_FILE" "$ERR_FILE" - - if [ -n "$CHANNEL_KEY" ] && [[ "$CHANNEL_KEY" =~ ^[A-Za-z0-9] ]]; then - echo "" - gum style --foreground 82 "✓ Channel key generated!" - echo "" - gum style \ - --border rounded \ - --border-foreground 226 \ - --padding "1 2" \ - --foreground 226 --bold \ - "$CHANNEL_KEY" - echo "" - gum style --foreground 196 --bold \ - "*** IMPORTANT: Write down or copy this key NOW! ***" - gum style --foreground 196 \ - "You'll need to share it with anyone who should decode" \ - "your images. This key won't be shown again." - echo "" - gum confirm "I've saved the key" --default=true --affirmative="Continue" --negative="" - else - gum style --foreground 196 "Failed to generate key. Using public mode." - if [ -n "$KEY_ERROR" ]; then - echo "" - gum style --foreground 245 "Error details:" - echo "$KEY_ERROR" - fi - CHANNEL_KEY="" - echo "" - gum confirm "Continue" --default=true --affirmative="OK" --negative="" + gum style --foreground 82 "✓ Channel key generated!" + echo "" + gum style \ + --border rounded \ + --border-foreground 226 \ + --padding "1 2" \ + --foreground 226 --bold \ + "$CHANNEL_KEY" + echo "" + gum style --foreground 196 --bold \ + "*** IMPORTANT: Write down or copy this key NOW! ***" + gum style --foreground 196 \ + "You'll need to share it with anyone who should decode" \ + "your images. This key won't be shown again." + echo "" + gum confirm "I've saved the key" --default=true --affirmative="Continue" --negative="" + else + gum style --foreground 196 "Failed to generate key. Using public mode." + if [ -n "$KEY_ERROR" ]; then + echo "" + gum style --foreground 245 "Error details:" + echo "$KEY_ERROR" fi + CHANNEL_KEY="" + echo "" + gum confirm "Continue" --default=true --affirmative="OK" --negative="" + fi else - gum style --foreground 214 "→ Using public mode" - sleep 0.5 + gum style --foreground 214 "→ Using public mode" + sleep 0.5 fi # ============================================================================= @@ -199,8 +199,8 @@ fi clear gum style \ - --foreground 212 --bold \ - "Applying Configuration..." + --foreground 212 --bold \ + "Applying Configuration..." echo "" # Find the stegasoo user (whoever owns the install dir) @@ -233,7 +233,7 @@ gum style --foreground 82 "✓ Service configured" # Setup port 443 if requested if [ "$USE_PORT_443" = "true" ]; then - gum spin --spinner dot --title "Setting up port 443 redirect..." -- bash -c " + gum spin --spinner dot --title "Setting up port 443 redirect..." -- bash -c " if ! command -v iptables &>/dev/null; then sudo apt-get install -y iptables >/dev/null 2>&1 fi @@ -255,7 +255,7 @@ WantedBy=multi-user.target EOF sudo systemctl enable iptables-restore.service >/dev/null 2>&1 " - gum style --foreground 82 "✓ Port 443 redirect configured" + gum style --foreground 82 "✓ Port 443 redirect configured" fi gum spin --spinner dot --title "Reloading systemd..." -- sudo systemctl daemon-reload @@ -264,9 +264,9 @@ gum style --foreground 82 "✓ Systemd reloaded" gum spin --spinner dot --title "Starting Stegasoo..." -- bash -c "sudo systemctl restart stegasoo && sleep 2" if systemctl is-active --quiet stegasoo; then - gum style --foreground 82 "✓ Stegasoo started successfully" + gum style --foreground 82 "✓ Stegasoo started successfully" else - gum style --foreground 196 "✗ Failed to start (check: journalctl -u stegasoo)" + gum style --foreground 196 "✗ Failed to start (check: journalctl -u stegasoo)" fi gum spin --spinner dot --title "Cleaning up wizard..." -- bash -c " @@ -288,33 +288,33 @@ HOSTNAME=$(hostname) # Build the access URL if [ "$ENABLE_HTTPS" = "true" ]; then - if [ "$USE_PORT_443" = "true" ]; then - ACCESS_URL="https://$PI_IP" - ACCESS_URL_LOCAL="https://$HOSTNAME.local" - else - ACCESS_URL="https://$PI_IP:5000" - ACCESS_URL_LOCAL="https://$HOSTNAME.local:5000" - fi + if [ "$USE_PORT_443" = "true" ]; then + ACCESS_URL="https://$PI_IP" + ACCESS_URL_LOCAL="https://$HOSTNAME.local" + else + ACCESS_URL="https://$PI_IP:5000" + ACCESS_URL_LOCAL="https://$HOSTNAME.local:5000" + fi else - ACCESS_URL="http://$PI_IP:5000" - ACCESS_URL_LOCAL="http://$HOSTNAME.local:5000" + ACCESS_URL="http://$PI_IP:5000" + ACCESS_URL_LOCAL="http://$HOSTNAME.local:5000" fi gum style \ - --border double \ - --border-foreground 82 \ - --padding "1 2" \ - --margin "1" \ - --align center \ - " . * . . * . * . * . * ." \ - " ___ _____ ___ ___ _ ___ ___ ___" \ - " / __||_ _|| __| / __| /_\\ / __| / _ \\ / _ \\" \ - " \\__ \\ | | | _| | (_ | / _ \\ \\__ \\ | (_) || (_) |" \ - " |___/ |_| |___| \\___//_/ \\_\\|___/ \\___/ \\___/" \ - "" \ - " * . * . * . * . * . *" \ - "" \ - "Setup Complete!" + --border double \ + --border-foreground 82 \ + --padding "1 2" \ + --margin "1" \ + --align center \ + " . * . . * . * . * . * ." \ + " ___ _____ ___ ___ _ ___ ___ ___" \ + " / __||_ _|| __| / __| /_\\ / __| / _ \\ / _ \\" \ + " \\__ \\ | | | _| | (_ | / _ \\ \\__ \\ | (_) || (_) |" \ + " |___/ |_| |___| \\___//_/ \\_\\|___/ \\___/ \\___/" \ + "" \ + " * . * . * . * . * . *" \ + "" \ + "Setup Complete!" echo "" gum style --foreground 82 --bold "Access URL:" @@ -323,24 +323,24 @@ gum style --foreground 245 " $ACCESS_URL_LOCAL (if mDNS works)" echo "" if [ -n "$CHANNEL_KEY" ]; then - gum style --foreground 82 --bold "Channel Key:" - gum style --foreground 226 " $CHANNEL_KEY" - echo "" + gum style --foreground 82 --bold "Channel Key:" + gum style --foreground 226 " $CHANNEL_KEY" + echo "" fi gum style --foreground 82 --bold "First Steps:" gum style --foreground 255 \ - " 1. Open the URL above in your browser" \ - " 2. Accept the security warning (self-signed cert)" \ - " 3. Create your admin account" \ - " 4. Start encoding secret messages!" + " 1. Open the URL above in your browser" \ + " 2. Accept the security warning (self-signed cert)" \ + " 3. Create your admin account" \ + " 4. Start encoding secret messages!" echo "" gum style --foreground 82 --bold "Useful Commands:" gum style --foreground 245 \ - " sudo systemctl status stegasoo # Check status" \ - " sudo systemctl restart stegasoo # Restart" \ - " journalctl -u stegasoo -f # View logs" + " sudo systemctl status stegasoo # Check status" \ + " sudo systemctl restart stegasoo # Restart" \ + " journalctl -u stegasoo -f # View logs" echo "" gum style --foreground 212 --bold "Enjoy Stegasoo!"