Files
stegasoo/PLAN-4.1.5.md
Aaron D. Lee c65d9e6682
Some checks failed
Release / test (push) Failing after 34s
Release / publish (push) Has been skipped
Release / github-release (push) Has been skipped
Finalize 4.1.4 release prep
- BUILD_IMAGE.md: Clarify docs are for devs, not end users
- Add 4.1.5 plan with decode progress bar feature
- Update .gitignore for release assets (.zip, .img)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 17:51:00 -05:00

3.1 KiB

Stegasoo 4.1.5 Plan

Decode Progress Bar (Real Progress)

Mirror the encode async pattern for decode operations.

Backend Changes

1. Add async mode to /decode route (app.py)

  • Check for async=true form param
  • Generate job_id, store job, submit to executor
  • Return {"job_id": ..., "status": "pending"} immediately

2. Add decode status/progress endpoints (app.py)

@app.route("/decode/status/<job_id>")
def decode_status(job_id):
    # Return {"status": "pending|running|complete|error", "result": {...}}

@app.route("/decode/progress/<job_id>")
def decode_progress(job_id):
    # Read from /tmp/stegasoo_progress_{job_id}.json
    # Return {"percent": 0-100, "phase": "..."}

3. Add _run_decode_job() background worker (app.py)

  • Similar to _run_encode_job()
  • Pass progress_file param to decode function
  • Store result/error in job dict

4. Update decode functions to write progress (lsb_steganography.py, dct_steganography.py)

Phases for decode:

  • "starting" (0%)
  • "reading" (10%) - reading stego image
  • "extracting" (30%) - extracting hidden data
  • "decrypting" (60%) - Argon2 + AES decryption
  • "verifying" (80%) - HMAC verification
  • "finalizing" (95%) - preparing output
  • "complete" (100%)

Frontend Changes

5. Update decode form submission (decode.html)

  • Add async form handler like encode
  • Call Stegasoo.submitDecodeAsync(form, btn)

6. Add decode async methods (stegasoo.js)

submitDecodeAsync(form, btn)     // POST with async=true, show modal
pollDecodeProgress(jobId)        // Poll /decode/status, /decode/progress

Reuse existing:

  • showProgressModal('Decoding')
  • updateProgress(percent, phase)

7. Handle decode result redirect

  • On complete: redirect to /decode/result/{file_id} or display inline

Files to Modify

frontends/web/app.py
  - Add async handling to /decode route (~line 1300+)
  - Add /decode/status/<job_id> endpoint
  - Add /decode/progress/<job_id> endpoint
  - Add _run_decode_job() function

frontends/web/static/js/stegasoo.js
  - Add submitDecodeAsync()
  - Add pollDecodeProgress()

frontends/web/templates/decode.html
  - Update form submit to use async mode

src/stegasoo/lsb_steganography.py
  - Add progress_file param to decode()
  - Write progress at each phase

src/stegasoo/dct_steganography.py
  - Add progress_file param to decode()
  - Write progress at each phase

Testing Checklist

  • Decode shows progress modal on submit
  • Progress bar animates through phases
  • Successful decode redirects to result
  • Failed decode shows error in modal
  • Works for both LSB and DCT modes
  • Works for message and file payloads
  • Progress file cleaned up after completion

Other 4.1.5 Ideas (if time)

  • Role-based permissions: admin / mod / user
  • Better capacity estimates / pre-flight check
  • Stego detection tool

Bugs / Nice to Have

  • flash-stock-img.sh 16GB resize not working - partition still full SD size after flash, makes dd pull slow. Investigate resize2fs/parted logic and test fix.