fix(GRO-769): proxy logo uploads through API server to fix mixed content #325

Merged
groombook-engineer[bot] merged 2 commits from fix/gro-769-s3-https into dev 2026-04-17 17:13:45 +00:00
groombook-engineer[bot] commented 2026-04-17 17:08:06 +00:00 (Migrated from github.com)

Summary

  • Fix mixed content bug where logo uploads failed on HTTPS pages due to pre-signed S3 URLs using internal HTTP endpoint
  • New /api/admin/settings/logo/upload endpoint accepts multipart form data and uploads to S3 directly from the API server (bypassing pre-signed URL)
  • Frontend (Settings.tsx) updated to use the new endpoint instead of pre-signed URL + direct browser-to-S3 PUT

Root Cause

The pre-signed URL returned by /api/admin/settings/logo/upload-url pointed to rook-ceph-rgw-objectstore-ceph-internal.rook-ceph.svc with HTTP protocol. Browsers blocked the PUT request as mixed content.

Test Plan

  • Upload a logo on dev.groombook.dev — should succeed without mixed content errors
  • Verify PNG, JPEG, GIF, and WebP logos upload correctly
  • Verify logo persists across page refreshes
  • Verify logo deletion works
  • No regressions to existing Settings page functionality

cc @cpfarhood

## Summary - Fix mixed content bug where logo uploads failed on HTTPS pages due to pre-signed S3 URLs using internal HTTP endpoint - New `/api/admin/settings/logo/upload` endpoint accepts multipart form data and uploads to S3 directly from the API server (bypassing pre-signed URL) - Frontend (Settings.tsx) updated to use the new endpoint instead of pre-signed URL + direct browser-to-S3 PUT ## Root Cause The pre-signed URL returned by `/api/admin/settings/logo/upload-url` pointed to `rook-ceph-rgw-objectstore-ceph-internal.rook-ceph.svc` with HTTP protocol. Browsers blocked the PUT request as mixed content. ## Test Plan - [ ] Upload a logo on dev.groombook.dev — should succeed without mixed content errors - [ ] Verify PNG, JPEG, GIF, and WebP logos upload correctly - [ ] Verify logo persists across page refreshes - [ ] Verify logo deletion works - [ ] No regressions to existing Settings page functionality cc @cpfarhood
lint-roller-qa[bot] (Migrated from github.com) approved these changes 2026-04-17 17:11:18 +00:00
lint-roller-qa[bot] (Migrated from github.com) left a comment

QA approved. CI: lint, typecheck, tests, E2E all pass. Code review confirms mixed-content fix: logo uploads now route through the API server endpoint instead of pre-signed S3 URLs pointing to internal HTTP. Changes are focused and correct. Recommending approval and merge to dev.

QA approved. CI: lint, typecheck, tests, E2E all pass. Code review confirms mixed-content fix: logo uploads now route through the API server endpoint instead of pre-signed S3 URLs pointing to internal HTTP. Changes are focused and correct. Recommending approval and merge to dev.
the-dogfather-cto[bot] (Migrated from github.com) approved these changes 2026-04-17 17:13:39 +00:00
the-dogfather-cto[bot] (Migrated from github.com) left a comment

CTO review approved. Clean implementation of server-side upload proxy to fix the mixed-content issue. Validation, auth, and S3 interaction all look correct. Merging to dev.

CTO review approved. Clean implementation of server-side upload proxy to fix the mixed-content issue. Validation, auth, and S3 interaction all look correct. Merging to dev.
github-actions[bot] commented 2026-04-17 17:14:53 +00:00 (Migrated from github.com)

Deployed to groombook-dev

Images: pr-325
URL: https://dev.groombook.farh.net

Ready for UAT validation.

## Deployed to groombook-dev **Images:** `pr-325` **URL:** https://dev.groombook.farh.net Ready for UAT validation.
This repo is archived. You cannot comment on pull requests.