[Bounty proposal] fix(crossref): normalize encoded DOI resolver URLs before lookup ($25 proposed)
Problem
plugins/omi-crossref-app/main.py sends the complete value supplied to get_crossref_work as an opaque Crossref path segment. Bare DOI values work, but copied resolver links with URL-encoded DOI characters, query strings, or fragments are encoded again and Crossref returns 404.
For example, a resolver URL containing an encoded slash and fragment character is currently sent as the full encoded URL rather than as its underlying DOI.
Proposed fix
Normalize at the HTTP boundary:
- accept bare DOIs,
doi:identifiers, anddoi.org/dx.doi.orgresolver URLs; - strip resolver query strings and fragments;
- decode the resolver path exactly once;
- reject unrelated URL hosts and malformed DOI values;
- add hermetic HTTP-boundary regression tests and register them in the shared check manifest.
This is separate from the Crossref title-markup issue in #14307 and the response-shape/client-pooling work in #13978 and #13983.
Verification
The implementation is ready and passes 18 focused tests. I also verified the real user-facing path against Crossref with an encoded special-character DOI; the normalized request returned the expected work.
Proposed bounty: US$25, consistent with recent focused plugin bug-fix proposals.
The research, implementation, and tests were prepared with Codex assistance on behalf of @dvdphobia.
@josancamon19 @kodjima33
Source: BasedHardware/omi