# PrestaProxy Go reverse proxy in front of PrestaShop `1.7.3` with: - `Echo` as the HTTP server - native Go PrestaShop cookie decode/encode - `templ` for HTML rendering - Bun for JS and Tailwind builds - `GORM` with SQLite for app-local state ## Current scope - Go owns `GET /product/:slug` - all other routes proxy to the upstream PrestaShop instance - product data, customer data, and cart summary are read from the PrestaShop database - session state is derived from the live PrestaShop cookie ## Requirements - Go - Bun - `templ` - access to the PrestaShop database - PrestaShop cookie key, or access to the PrestaShop install root ## Configuration The service now loads `.env` automatically from the project root at startup. Important variables: - `PRESTASHOP_PROXY_TARGET`: upstream PrestaShop origin, required - `DOMAIN_COOKIE`: optional domain override used when deriving the hashed `PrestaShop-...` cookie name - `PRESTASHOP_COOKIE_NAME`: optional explicit cookie-name override. If omitted, the app derives the standard `PrestaShop-...` name from PrestaShop version and normalized host, and still falls back to prefix matching on reads. - `PRESTASHOP_COOKIE_KEY`: Defuse/PrestaShop cookie key, required unless bootstrap from install root is used - `DB_USER`, `DB_PASS`, `DB_NAME`, `DB_HOST`, `DB_PORT`: preferred split MariaDB settings - `DB_PREFIX`: PrestaShop table prefix - `PRESTASHOP_DB_DSN`: optional full DSN override - `PRESTASHOP_PROJECT_ROOT`: optional path to an existing PrestaShop install for bootstrap - `ROUTE_OWNERSHIP_CONFIG`: route prefix currently handled by Go Example MariaDB setup: ```env PRESTASHOP_PROXY_TARGET=http://localhost PRESTASHOP_COOKIE_KEY=def00000... PRESTASHOP_DB_DIALECT=mariadb DB_USER=presta DB_PASS=presta DB_NAME=presta DB_PREFIX=ps_ DB_HOST=mariadb DB_PORT=3306 ``` If `PRESTASHOP_DB_DSN` is set, it takes precedence over the split DB settings. ## Install ```bash bun install templ generate go mod tidy ``` ## Build assets ```bash bun run build ``` Available Bun scripts: - `bun run build:js` - `bun run build:css` - `bun run build:manifest` - `bun run build` - `bun run dev` ## Run ```bash go run ./cmd/proxy ``` Default listen address is `:8080`. ## Health endpoints - `GET /healthz` - `GET /readyz` ## Debug endpoint - `GET|POST /debug/cookie/decode` Pass a cookie explicitly with `value` or `cookie`, for example: ```bash curl "http://localhost:8080/debug/cookie/decode?value=def50200..." ``` If no parameter is provided, the endpoint returns the cookie already decoded from the incoming request session. ## Cookie support Native cookie logic lives in [internal/prestashop/cookie/codec.go](/home/marek/coding/test/pp/internal/prestashop/cookie/codec.go:1). What it does now: - decrypts live PrestaShop cookies in Go - parses plaintext key/value fields - re-encodes cookies in Go using the same key format Current limitation: - it can round-trip and re-encode cookie content, but it does not yet recompute higher-level PrestaShop semantic fields like `checksum` for arbitrary mutations ## Tests ```bash go test ./... ```