Download the PHP package pattonwebz/signed-releases-client-for-edd without Composer

On this page you can find all versions of the php package pattonwebz/signed-releases-client-for-edd. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package signed-releases-client-for-edd

Signed Releases Client for EDD

Verifies minisign (Ed25519) signatures on plugin release zips before WordPress installs them, guarding the update path against a compromised store. Companion to the Signed Releases for EDD store extension, which serves the signatures.

Requirements

Install

Published on Packagist — no custom repository configuration needed.

Usage

Register on init (like the EDD SL updater itself) so wp-cron auto-updates are covered. Multiple keys are only for rotation windows.

current_version is optional in name only — omit it and a fresh install has no downgrade floor until the first verified update sets one (see Compatibility contract below). If you don't already have the running version handy, derive it instead of skipping it:

register() never throws, even with a malformed $args (a bad key string, a missing required key). A misconfiguration must not be able to white-screen the site it's protecting — instead it returns null, blocks this plugin's updates (fail closed) when the plugin file was at least identifiable, and surfaces the problem via an always-visible admin_notices warning plus an error_log() line.

The mode can be adjusted at runtime without a release — per plugin or for all of them:

A runtime override is a supported escape hatch, but it is never silent: the guard tracks the effective mode per slug (option srcl_mode_seen, checked on every update poll via set_site_transient_update_plugins and again on every download), and any switchover — an override appearing, changing, or going away — is logged (warning while an override is active, info on return to the configured mode) and announced via the srcl/mode_switched action ($slug, $previous, $effective, $configured). An invalid filter return is refused outright and falls back to the configured mode with a warning.

Key revocation

Pin the revocation root key alongside your package keys to enable it:

The root key is deliberately not a public_keys entry: it signs only revocation manifests, never packages, so a stolen root cannot sign malware — it can only subtract trust (and a suspected-compromised root is replaced by a normal release updating this pinned value). On each update pass the guard fetches the store's manifest (?edd_action=get_revocation_manifest), verifies it against the root, and merges it into a durable cache (srcl_revocations). A package signed by a revoked key then fails with revoked_key; your other pinned keys — pin a standing successor from day one — keep verifying, which is what turns a stolen-key incident into an ordinary update instead of a locked-out fleet.

Client semantics worth knowing:

Uninstalling a consumer

Whatever else your uninstall.php cleans up, it must leave these two options alone:

Both are ratchets, not caches. Deleting them resets the site's floor to whatever version happens to be installed — reopening the window for a store to walk the site backwards to an older signed release — and re-arms keys that were revoked. The update path keeps looking healthy the whole time, so nothing surfaces until it matters.

They are also shared rather than per-plugin: _seen (and the failures and mode options) is a single option holding one key per slug, and _revocations is not slug-keyed at all. An uninstall routine that deletes the option outright therefore disarms every consumer on the site, not just the plugin being removed, and the others have no way to notice. Removing only your own slug key from _seen is at least self-inflicted, but there is no good reason to do even that. The failures and mode bookkeeping (srcl_failures, srcl_mode_seen) is harmless either way.

How verification works

On a plugin update the guard downloads the package itself, then requires, in order: a structurally valid signature (from the update response, or fetched from the store's public endpoint), Ed25519 verification over the zip's BLAKE2b-512 hash against a pinned public key, the signed trusted comment matching the configured slug, and a signed version that is the offered version (or newer) and never below the installed/previously-seen floor. Any failure logs (log mode) or aborts the install with the old version intact (enforce mode).

The signature itself comes from whichever of three sources answers first: the update transient's own signature property (present only if your EDD updater class copies the full API response onto the transient — confirmed true for the classic EDD_SL_Plugin_Updater, not independently verified for every edd-sl-sdk-based updater), the store's public endpoint for the offered version, or — as a release-race healer — the store's endpoint for whatever version is live right now. The endpoint fallbacks don't depend on your updater class at all, so verification works regardless of which one your plugin uses.

Compatibility contract

This package ships un-prefixed. When several active plugins each bundle a copy, PHP loads each class once — from whichever plugin's autoloader runs first — so the first-loaded copy serves every consumer on the site. That model is deliberate and rests on one hard promise: within a major version, nothing breaks.

A breaking change means a new major version, and mixing majors across plugins on one site is unsupported — ship a major bump across all your plugins together. A site running one outdated plugin may execute that stale copy's verification code; keeping plugins updated is the site's responsibility, as it already is for updates generally.

The identifiers were renamed from the pattonwebz_signed_releases_* prefix to srcl_* — options, hooks and the manifest format tags alike — in 0.3.0. No released consumer ever used the earlier names, so there is nothing to migrate: if you are coming from 0.2.0 or earlier and wrote filters or set options by hand, use the new names.

Which copy is loaded

"The first-loaded copy serves every consumer" is easy to state and impossible to observe. When behaviour looks like it is coming from a version you did not expect, or you are diagnosing a plugin that pins an older copy, ask PHP which file actually defines the class. The right host is a must-use plugin, because it is not tied to any one consumer's lifecycle: it loads before regular plugins, survives deactivating the plugin under investigation, and cannot itself be switched off by the code you are debugging.

init is late enough that every consumer has registered its autoloader, so the path printed is the winner: that file's code is what every plugin on the site is running. If it is not the vendor/ directory of the plugin you are debugging, another plugin is serving it — expected when several of them bundle the package, and only a problem when the two copies are from different major versions.

(Without a file to hand, the same question one-liner from the CLI: wp eval 'echo ( new ReflectionClass( "PattonWebz\\SignedReleases\\UpdaterGuard" ) )->getFileName(), "\n";')

Development

The keypairs in tests/fixtures/ are test keys, committed on purpose. Never sign a release with them.

License

MIT. See LICENSE.

This library ships no WordPress code and is MIT-licensed for reuse; when it is bundled into a GPL plugin, that distributed plugin remains GPL as a whole.


All versions of signed-releases-client-for-edd with dependencies

PHP Build Version
Package Version
Requires php Version >=7.4
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package pattonwebz/signed-releases-client-for-edd contains the following files

Loading the files please wait ...