You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: Goodreads cover scraper fetches via system curl (Cloudflare bypass)
The v0.7.45-rc.1 Goodreads cover lookup used PHP's HTTP client (Guzzle), which
Cloudflare answers with a 202 anti-bot page on real servers — so it returned
NULL in production and only "worked" from a residential dev IP. Verified on a
live server: PHP's curl-extension and Guzzle both get 202, the system `curl`
binary gets 200.
Open Library plugin 1.0.3: getGoodreadsCover now shells out to the system curl
binary (found via a guarded lookup, skipped when shell_exec is disabled), which
passes Cloudflare's TLS fingerprint check. The ISBN is validated to [0-9Xx]{10,13}
and passed through escapeshellarg, so no shell injection is possible. Where exec
is unavailable it degrades to no cover, exactly as before. Verified end-to-end
from a real cPanel server AND a php:8.4-apache container (both return the og:image).
Bumps version to 0.7.45-rc.2.
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -45,7 +45,7 @@ A catalogue-consistency and scraper-maintenance release.
45
45
-**Catalogue availability facets now reflect real circulation state** — reserved, on-loan, available and non-circulating records are shown and counted separately; records without physical copies remain visible under the complete catalogue without being mislabelled as loans ([#303](https://github.com/fabiodalez-dev/Pinakes/issues/303)).
46
46
-**Catalogue card rows stay aligned** — a card with a subtitle no longer pushes its author, publisher and "Details" out of line with neighbouring cards; the subtitle space is reserved per row only where a row actually needs it, and the layout re-aligns after AJAX filtering, on resize, and once web fonts settle ([#298](https://github.com/fabiodalez-dev/Pinakes/issues/298)).
47
47
-**Language completion statistics are derived from the Italian source catalogue** — every locale (list and edit views alike) now uses the same live denominator, so translation percentages cannot drift from the shipped keys.
48
-
-**Open Library plugin 1.0.2** — replaces the retired third-party Goodreads-cover service with a direct, timeout-bounded lookup of the public Goodreads ISBN page. Only HTTPS cover URLs from exact Goodreads/Amazon CDN domains or their subdomains are accepted; its manifest now correctly requires Pinakes 0.7.16+ and PHP 8.2+.
48
+
-**Open Library plugin 1.0.3** — replaces the retired third-party Goodreads-cover service with a direct, timeout-bounded lookup of the public Goodreads ISBN page. Because Goodreads sits behind Cloudflare (which serves an anti-bot page to PHP's HTTP client but not to the system `curl`), the cover lookup shells out to the `curl` binary when the host allows process execution, and degrades gracefully to no cover where it doesn't. Only HTTPS cover URLs from exact Goodreads/Amazon CDN domains or their subdomains are accepted; its manifest requires Pinakes 0.7.16+ and PHP 8.2+.
49
49
-**Email templates: `{{pickup_deadline}}` now resolves**, and every placeholder token carries a localised description tooltip in the template editor ([#304](https://github.com/fabiodalez-dev/Pinakes/issues/304)).
Copy file name to clipboardExpand all lines: storage/plugins/open-library/plugin.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
"name": "open-library",
3
3
"display_name": "Open Library Scraper",
4
4
"description": "Integrazione con le API di Open Library (openlibrary.org) per lo scraping di metadati dei libri. Fornisce dati completi su edizioni, opere, autori e copertine ad alta risoluzione, con copertine di fallback recuperate dalla pagina pubblica di Goodreads.",
0 commit comments