Repository navigation
Comparing changes
Open a pull request
base repository: NdoleStudio/httpsms
base: main
head repository: j0904/httpsms
compare: main
- 19 commits
- 115 files changed
- 3 contributors
Commits on Aug 1, 2026
-
fix: enable SMS send/deliver and search on self-hosted deployment
- fix(web): refresh Firebase ID token via onIdTokenChanged (API calls 401'd after ~1h) - fix(web): nginx try_files to avoid trailing-slash 301 leaking the private port - fix(deploy): correct Caddy /v1 pass-through and /api rewrite; init system user - fix(api): make Cloudflare Turnstile optional when secret key is unconfigured - feat(android): Docker build for the release APK with release signing config - test(e2e): Playwright suite against the deployed site (real Chrome for Google sign-in) - test(api): api-test.sh to send + poll + list received SMS - docs: add 1&1 SMS-Flat usage restrictions
j0904 committedAug 1, 2026 Configuration menu - View commit details
-
Copy full SHA for f14112b - Browse repository at this point
Copy the full SHA f14112bView commit details
Commits on Sep 20, 2026
-
feat(self-hosted): did auth via ml-dsa-87, drop firebase/gcp
DID auth: - verify ML-DSA-87 (FIPS 204) did:key signatures (multicodec 0x300001, KeyBundle/SignatureBundle, domain-separated SHA-256); dual ML+SLH keys - signature-only verify: raw privkey is no longer sent or accepted, /resolve removed, and the challenge is verified (previously not) - shared Redis nonce store (multi-replica safe): single-use, non-burning - web: client-side PQ signing and key parsing; DID routes registered Self-hosted cleanup: remove Firebase/GCP (FCM push, storage, auth), the Google Cloud attachment/push services, and the Android Firebase service; Android sends SMS via a worker.
e2e committedSep 20, 2026 Configuration menu - View commit details
-
Copy full SHA for 896b432 - Browse repository at this point
Copy the full SHA 896b432View commit details -
feat(messages): long-poll push for outbound delivery
Without FCM the phone had to poll on a timer (WorkManager min 15 min), so sends waited for the next tick. Add an in-process MessageNotifier and a `?wait=` long-poll on /v1/messages/outstanding/list: the server holds the request until a message is queued for the user (or the wait elapses), so delivery is push-like with no push service. PostSend/BulkSend notify; the Android foreground service long-polls (25s) and enqueues a SendSmsWorker per message, with the 15-min heartbeat kept as a backup.
e2e committedSep 20, 2026 Configuration menu - View commit details
-
Copy full SHA for aad7282 - Browse repository at this point
Copy the full SHA aad7282View commit details
Commits on Sep 22, 2026
-
android: point the login page at the bigt.ai gateway
- default server URL https://httpsms.bigt.ai (strings + Settings fallback), so users only enter API key + SIM number - bigt.ai logo on the login header
e2e committedSep 22, 2026 Configuration menu - View commit details
-
Copy full SHA for 3db9deb - Browse repository at this point
Copy the full SHA 3db9debView commit details -
deploy: build and publish the HttpSms APK to MinIO
- deploy.apk.sh: docker build (APK_TASK arg) -> extract -> upload versioned HttpSms-<type>-<sha>.apk + stable HttpSms.apk alias under the httpsms/ prefix (debug default, auto-signed) - android/Dockerfile: APK_TASK build arg (was hardcoded release) - ignore local out/
e2e committedSep 22, 2026 Configuration menu - View commit details
-
Copy full SHA for e4d8331 - Browse repository at this point
Copy the full SHA e4d8331View commit details -
android: permission button deep-links to system Settings
The Enable-SMS-Permission button only opened a help article, so users who permanently denied the permission had no in-app path back — the system dialog never reappears after two denials. Point it at the app-details Settings page where the SMS toggle lives.
e2e committedSep 22, 2026 Configuration menu - View commit details
-
Copy full SHA for c729e54 - Browse repository at this point
Copy the full SHA c729e54View commit details -
deploy.apk.sh: publish to the httpsms bucket root
The public object lives at bucket httpsms/HttpSms.apk — not under aifeeds-content/. Default S3_BUCKET to httpsms (empty prefix) and clean up a misplaced upload path.
e2e committedSep 22, 2026 Configuration menu - View commit details
-
Copy full SHA for ffe8b82 - Browse repository at this point
Copy the full SHA ffe8b82View commit details -
android: point the API-key hint at the dai SMS page
The login header now sends bigt.ai users to https://bigt.ai/#sms (Data -> SMS, wallet-minted key) instead of httpsms.com/settings.
e2e committedSep 22, 2026 Configuration menu - View commit details
-
Copy full SHA for 87c17a0 - Browse repository at this point
Copy the full SHA 87c17a0View commit details
Commits on Sep 24, 2026
-
fix(deploy): re-sync caddy backends from live docker ips after reboot
e2e committedSep 24, 2026 Configuration menu - View commit details
-
Copy full SHA for 4241169 - Browse repository at this point
Copy the full SHA 4241169View commit details
Commits on Oct 4, 2026
-
sms: repair bodies decoded as UCS-2 from ASCII payloads
Some senders put GSM/ASCII bytes on the wire while declaring UCS-2 (DCS 0x08), so the platform pairs those bytes into UTF-16 code units and the body arrives as CJK noise — "026-10-04 16:59:44 has/have been" surfaces as "〲㘭ⴰ㐠ㄶ㨵㤺㐴慳⽨慶攠扥敮". Repair in ReceivedReceiver before the body is encrypted for upload, and in MessageReceive.Sanitize for unencrypted content from older app builds. The heuristic only rewrites bodies whose code units all map onto printable ASCII and which recover into text, so Chinese/Japanese/emoji bodies pass through untouched.
e2e committedOct 4, 2026 Configuration menu - View commit details
-
Copy full SHA for c8693d0 - Browse repository at this point
Copy the full SHA c8693d0View commit details -
android: add the wallet's OTA updater (release manifest + PackageInst…
…aller) deploy.apk.sh now publishes httpsms-<type>-latest.json beside the APK it uploads — {versionName, versionCode, url, sha256, mandatory} — and the app fetches it ~4s after MainActivity starts and from Settings → Check for updates. A newer build downloads to cache, is sha256-checked against the manifest, then handed to PackageInstaller; UpdateReceiver lifts the system consent sheet (STATUS_PENDING_USER_ACTION). Two things make an install land: - versionCode was pinned at 1, so no build could ever look newer; it is now the git commit count, the same input gradle already reads for versionName. - every variant signs with the certificate pinned in android/signing.sha256 (the wallet keystore). Debug builds used to auto-generate a fresh key per build, so no APK could install over the one on the device; deploy.apk.sh refuses to publish anything carrying a different signer. Builds published before this change still need one last uninstall/reinstall.
e2e committedOct 4, 2026 Configuration menu - View commit details
-
Copy full SHA for ccc8215 - Browse repository at this point
Copy the full SHA ccc8215View commit details
Commits on Oct 17, 2026
-
chore(deploy): publish HttpSms APK to the shared apps bucket
Bucket apps, prefix httpsms/apk; S3_ENDPOINT/EU host minio-s1002 (the apps shard). OTA base + tests point at https://s3.bigt.ai/apps/httpsms/apk.
e2e committedOct 17, 2026 Configuration menu - View commit details
-
Copy full SHA for 1f9aa3e - Browse repository at this point
Copy the full SHA 1f9aa3eView commit details
Commits on Oct 18, 2026
-
docs: the app needs no Firebase/GMS — rewrite the self-host setup
The Android app delivers messages by long-polling the API (foreground service + WorkManager), so a fresh self-hosted install must not create a Firebase project or drop a `google-services.json` into `android/app` — that instruction was the one remaining way to reintroduce GMS into the build. Removes the "Setup Firebase" step (FCM push, Firebase Auth, service-account creds), renumbers the remaining steps and fixes the send-flow diagram and back-pressure wording.
e2e committedOct 18, 2026 Configuration menu - View commit details
-
Copy full SHA for 9b03e92 - Browse repository at this point
Copy the full SHA 9b03e92View commit details -
chore: remove the dead Firebase/GCP plumbing
Everything here is unused since the self-hosted/DID move: - web: firebase runtime-config keys + FIREBASE_* entries in .env.docker / .env.production (consumed nowhere — nuxt.config was the only reader); - web/firebase.json + .firebaserc and the Firebase Hosting CI step (upstream's project; the web deploys to Cloudflare Pages); - api CI step + tests/generate-firebase-credentials.sh (no Go code reads FIREBASE_CREDENTIALS or GCP creds), and the stale test docs referencing them; - .github/copilot-instructions.md described Firebase auth and FCM push, which the app no longer has; - stale comments in api/.env.docker and the now-unused .gitignore entry. GCP_PROJECT_ID stays: api/main.go reads it for the logger label.
e2e committedOct 18, 2026 Configuration menu - View commit details
-
Copy full SHA for a796d8d - Browse repository at this point
Copy the full SHA a796d8dView commit details -
docs: drop the Firebase / Play Services claims from the legal pages
The privacy policy and terms list the third-party services the app uses, including Google Play Services and Google Analytics for Firebase. Neither is used: the app links no GMS/Firebase code (verified on a debug build: 0 gms/firebase refs in every dex) and the web bundle has no Firebase SDK. Also drops the now-unneeded jq/OpenSSL test prerequisites (they existed only for the deleted fake-service-account generator).
e2e committedOct 18, 2026 Configuration menu - View commit details
-
Copy full SHA for fcc25c2 - Browse repository at this point
Copy the full SHA fcc25c2View commit details -
fix(android): pin httpsms's own signing certificate
The pin carried the wallet's certificate (2a9479a3…, CN=wallet.bigt.ai) — it was copied along with the OTA-updater port. A local release build signs with httpsms's own key (454a85f7…, CN=httpSMS), so deploy.apk.sh refused every publish with "signer pin mismatch". Point the keystore at the shared key store (keys live outside the repo now — ~/keys/app/httpsms-release.keystore, passwords in ~/keys/app/passwords.env) and pin its certificate. Note: the APK currently served from the bucket (com.httpsms ccc8215) is signed with the wallet key, so those installs cannot be upgraded in place — the next release needs a one-time uninstall/reinstall on them.
e2e committedOct 18, 2026 Configuration menu - View commit details
-
Copy full SHA for e4133dc - Browse repository at this point
Copy the full SHA e4133dcView commit details -
feat(deploy): optional --fdroid publish to a self-hosted F-Droid repo
Adds `--fdroid`: after the normal upload it rebuilds an F-Droid repo (fdroidserver in a venv, created on first use) from fdroid/metadata/ and mirrors it to $FDROID_S3_PREFIX/repo (default httpsms/fdroid in the shared apps bucket). The repo index is signed with the release key from android/app/keystore.properties — the same certificate as the APK — so users verify one fingerprint; the URL and fingerprint are printed at the end. Release APKs only (refused for debug). First listing: fdroid/metadata/com.httpsms.yml (AGPL-3.0-or-later, Phone & SMS). Verified against scratch prefixes: index HTTP 200, lists com.httpsms (AGPL-3.0-or-later, Phone & SMS) with com.httpsms_2715.apk, and the deploy's signer pin still passes (454a85f7…).
e2e committedOct 18, 2026 Configuration menu - View commit details
-
Copy full SHA for f3bf012 - Browse repository at this point
Copy the full SHA f3bf012View commit details
Commits on Oct 19, 2026
-
fix(deploy): publish APKs via minio-s1001 (s1002 alias is retired)
e2e committedOct 19, 2026 Configuration menu - View commit details
-
Copy full SHA for dcbf067 - Browse repository at this point
Copy the full SHA dcbf067View commit details -
fix(apk): publish via s3.bigt.ai
e2e committedOct 19, 2026 Configuration menu - View commit details
-
Copy full SHA for 43f01fd - Browse repository at this point
Copy the full SHA 43f01fdView commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff main...main