11 Commits
Author SHA1 Message Date
Malek TellissiandClaude Sonnet 4.6 4b99ffea15 Fix account-takeover: bind users to nextcloud_id, not email
Deploy / deploy (push) Successful in 16s
Matching users by email alone allows an attacker with a self-registered
Nextcloud account to hijack any Filament user. Now we look up by
nextcloud_id first; email is only used when creating a brand-new account,
and nextcloud_id is immediately written to the row so future logins
use the stable Nextcloud user ID.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-13 02:54:19 +02:00
Malek TellissiandClaude Sonnet 4.6 2937004118 Roles via Nextcloud groups: sms-admin/manager/viewer + fix OAuth instance_uri
Deploy / deploy (push) Successful in 29s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-13 01:48:24 +02:00
Malek TellissiandClaude Sonnet 4.6 fc4579c47d Add Nextcloud OAuth 2.0 login via laravel/socialite
Deploy / deploy (push) Successful in 28s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-13 01:40:46 +02:00
Malek TellissiandClaude Sonnet 4.6 7c0fde4fd5 Update LOT API to use nested batch_origin_entries structure
Deploy / deploy (push) Successful in 14s
Each spice now returns an `origins` array (was single `origin` object) with
supplier and farmer resolved from the new entries relation, not flat columns.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-12 20:07:53 +02:00
Malek TellissiandClaude Sonnet 4.6 e14baca7e0 Add LOT API v1 endpoint with full batch details
Deploy / deploy (push) Successful in 15s
Route changed to /api/v1/{lot_number}. LotResource now includes
packing details, units_produced, quantity_g and recipe version.
CORS config added for public API access. README documents the
endpoint, example response and subdomain setup instructions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-12 16:43:48 +02:00
Malek TellissiandClaude Sonnet 4.6 80b7831a1e Remove temporary Shopify OAuth install routes
Deploy / deploy (push) Successful in 14s
Token captured, routes no longer needed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-11 03:21:48 +02:00
Malek TellissiandClaude Sonnet 4.6 527f99bb6e Set explicit redirect_uri in Shopify OAuth install URL
Deploy / deploy (push) Successful in 14s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-11 03:15:02 +02:00
Malek TellissiandClaude Sonnet 4.6 99d3ea748c Fix nullable clientSecret in ShopifyInstallController
Deploy / deploy (push) Successful in 13s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-11 03:13:40 +02:00
Malek TellissiandClaude Sonnet 4.6 2b7913311a Add temporary Shopify OAuth install routes
Deploy / deploy (push) Successful in 14s
/shopify/install  → redirects to Shopify OAuth
/shopify/callback → exchanges code for access token and displays it

To be removed after token is captured.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-11 03:12:20 +02:00
Malek TellissiandClaude Sonnet 4.6 467d85dfec Add Shopify inventory sync and order webhook
Deploy / deploy (push) Successful in 14s
- Migration: shopify_variant_id on products_sizes, shopify_order_id on products_sales
- ShopifyService: paginated REST client (2024-10 API)
- shopify:map — one-time command to link variants by SKU
- shopify:sync — reconciliation command (Shopify is master)
- VerifyShopifyWebhook middleware: HMAC-SHA256 verification
- ShopifyWebhookController: idempotent orders/paid handler, FIFO inventory deduction
- Webhook route: POST /api/webhooks/shopify/orders-paid

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-11 02:53:49 +02:00
Malek Tellissi 400172cdde Erster Upload 2026-09-11 01:17:47 +02:00