Fixes
- #236: after a password change, the next request returned a 500 error ("Route [login] not defined"). Guests now go to the Filament login page.
- #217: Apache did not start when a stale PID file was left after a restart. Supervisor now runs
apache2-foreground, which deletes the stale PID file. Apache also restarts when it stops. - #224: the search debug panel timed out on large pages, because syntax highlighting is slow. HTML over 10 KB, or with a line over 500 characters, now shows as plain text.
- #203: pages in a charset other than UTF-8 (for example ISO-8859-1) caused a database error when the scraper cached them. The HTTP scraper now converts pages to UTF-8 before it caches them.
Features
- #212: a new product option, "Notify on any price change", is off by default. When it is on, PriceBuddy sends an alert for every price increase or drop, and the alert shows the previous price. The API accepts
notify_on_change. - #206: the "Add URL" modal now takes one or many URLs, one per line, up to 50.
- PriceBuddy adds one URL straight away, as before.
- Two or more URLs go to the queue, and PriceBuddy skips URLs that are invalid, repeated, or already on the product.
- When a queued URL cannot be added, the user gets a "URL not added" notification.
- The new endpoint
POST /api/products/{id}/urlsdoes the same. It needs theproduct:updateability.
Companion extension follow-ups
- Security:
POST /api/productsaccepted any user'sproduct_id, so a token could add a URL to another user's product and read that product back. The request now only accepts the caller's own products, and returns 422 otherwise.Url::createFromUrlalso refuses another user's product. filter[search]onGET /api/products: every whitespace-separated term must appear in the title, in any order. Matching is case-insensitive and partial.%and_are literal. More than 10 terms returns 422. The client config reportsproducts_filter_search: true.- Shared stores in the stores API:
GET /api/stores(withfilter[domain]andfilter[domains]) andGET /api/stores/{id}return every store, not only the caller's. Stores with no creator, such as Amazon AU from the seed data, were missing before.include=urlsandinclude=productsreturn only the caller's rows.include=userreturns the creator only to the creator.- Any user can create and edit a store. Only an admin can delete one, in the API (403) and in the Filament UI.
user_idnow records who created the store. The server sets it. A migration sets existing NULLs to the oldest admin.
Other
- #238 (by @tiagompbernardo): copy buttons on each context field of the log message page.
- #231: PriceBuddy is now licensed under the official GPL-3.0 text.
Full Changelog: v1.0.56...v1.0.57