Repository navigation
Conversation
c224839 to
e1ae327
Compare
|
Are you setting |
|
Yes — independently. That is the case this gates. In core So the failing path is a deployment that sets the service flag itself — project config committed to the repo and applied at deploy, with writes locked at runtime. If you would rather it keyed on |
|
@mvanhorn what is your use case for setting |
|
Sorry, you're right that I keyed this on the wrong property. To answer directly: I'm not setting Which means my guard is built on a property you're telling me isn't meant to stand alone, and I shouldn't have used it as the signal. The part I think holds independently of |
|
The fix doesn’t make any sense to me, because we only pass |
|
You're right about the mechanism, and I had the wrong model of it. But I don't think the throw needs a new key.
It can, without any key being issued, when the stored value is an env var reference:
That path is worth a look on its own merits, separately from this PR: with writes allowed it doesn't throw, it just silently rewrites the env var reference in project config to the literal key. The decisive question is one only you can answer: does the API echo back plugin license keys it did not issue? If it returns no For what it's worth #17750 is still open, from a plain Updates view on 5.8.15 in production, so something is reaching |
…-only-plugin-license-writes # Conflicts: # tests/unit/helpers/ApiHelperTest.php
|
Merged 5.x into the branch to clear the conflict (b249417). The only overlap was The question above about whether the API echoes back plugin license keys it didn't issue is still the deciding one for this PR. |
Description
Gate only the automatic plugin-license persistence block in
Api::processResponseHeaders()on the project config service’sreadOnlystate. Continue processing non-mutating response metadata, including license-domain and license-info cache updates, so read-only environments can still consume update responses. LeavePlugins::setPluginLicenseKey()and its explicit controller/install callers unchanged, preserving their current validation and read-only enforcement when a user directly requests a license change.Craftnet API responses can include
X-Craft-Plugin-Licenses, whichApi::processResponseHeaders()currently persists throughPlugins::setPluginLicenseKey(). When project config is read-only, a returned key that differs from the deployed config reachesProjectConfig::set()and throwsNotSupportedException, preventing the Updates utility from displaying otherwise valid update information. The thread’s stack trace identifies this automatic response-header path, and a missing plugin license key supplies a concrete reproduction. A later report about project-config writes during database migrations is a separate deployment flow and is outside this fix.Fixes #17750
Related issues
Not applicable to this change.