github jez500/pricebuddy v1.0.57

one hour ago

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}/urls does the same. It needs the product:update ability.

Companion extension follow-ups

  • Security: POST /api/products accepted any user's product_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::createFromUrl also refuses another user's product.
  • filter[search] on GET /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 reports products_filter_search: true.
  • Shared stores in the stores API: GET /api/stores (with filter[domain] and filter[domains]) and GET /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=urls and include=products return only the caller's rows. include=user returns 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_id now 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

Don't miss a new pricebuddy release

NewReleases is sending notifications on new releases.