diff --git a/apps/super-admin/public/og-invoice.png b/apps/super-admin/public/og-invoice.png new file mode 100644 index 0000000..9b7eaf1 Binary files /dev/null and b/apps/super-admin/public/og-invoice.png differ diff --git a/deploy/nginx-dashboards-ssl.conf b/deploy/nginx-dashboards-ssl.conf index ea82ddd..dde8bc3 100644 --- a/deploy/nginx-dashboards-ssl.conf +++ b/deploy/nginx-dashboards-ssl.conf @@ -1,4 +1,12 @@ # HTTPS dashboards (Certbot SANs on meshkee-dashboards) +# +# Link-preview bots (WhatsApp, etc.) hitting /invoices/:id get Open Graph HTML +# from the API; browsers still receive the SPA. + +map $http_user_agent $meshkee_link_preview_bot { + default 0; + ~*(whatsapp|facebookexternalhit|facebot|twitterbot|linkedinbot|slackbot|telegrambot|discordbot) 1; +} server { listen 443 ssl; @@ -7,6 +15,24 @@ server { ssl_certificate_key /etc/letsencrypt/live/meshkee-dashboards/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; + location ~ ^/invoices/(?[0-9]{6,32})$ { + if ($meshkee_link_preview_bot = 1) { + rewrite ^ /__internal/invoice-og/$invoice_public_id last; + } + root /var/www/meshkee/super-admin; + try_files /index.html =404; + } + + location ~ ^/__internal/invoice-og/([0-9]{6,32})$ { + internal; + proxy_pass https://api.meshkee.com/api/v1/public/invoices/$1/og; + proxy_ssl_server_name on; + proxy_set_header Host api.meshkee.com; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + location / { root /var/www/meshkee/super-admin; try_files $uri $uri/ /index.html;