WP Manifestindependent plugin directory
manifest / content / mandatory

Tsjippy Mandatory Pages WP Registry grade D+. High-severity findings · 4 findingsWP RegistryHigh-severity findings · 4 findingsOpen the reportD+

A module for the sim-plugin

★ 0stars
74release downloads
10.7.7latest · 19d ago

Install

Download tsjippy-mandatory.zip From the 10.7.7 release on GitHub, Oct 4, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/tsjippy/mandatory/releases/download/10.7.7/tsjippy-mandatory.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

This module adds the possibility to make certain posts and pages mandatory.
That means people have to mark the content as read.
If they do not do so they will be reminded to read it until they do.
A "I have read this" button will be automatically added to the e-mail if it is send by mailchimp.

Adds one shortcode 'must_read_documents', which displays the pages to be read as links.
Use like this [must_read_documents].

Hooks

FILTERS

  • apply_filters('sim_mandatory_audience_param', $keys);
  • apply_filters('sim_should_read_mandatory_page', $mustRead, $audience, $userId);
  • sim-must-read

Releases

Newest 25 of 60 recorded releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
10.7.7 latest
Oct 4, 2026 19d ago
tsjippy-mandatory.zip +1 asset
11
tsjippy-mandatory.zip7
WP-tsjippy-mandatory.zip4
Oct 3, 2026 20d ago
tsjippy-mandatory.zip +1 asset cohort
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Oct 1, 2026 22d ago
tsjippy-mandatory.zip +1 asset
0
tsjippy-mandatory.zip0
WP-tsjippy-mandatory.zip0
Oct 1, 2026 22d ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 27, 2026 26d ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 25, 2026 27d ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 25, 2026 28d ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 24, 2026 29d ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 24, 2026 29d ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 23, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 22, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 22, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 20, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 16, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 16, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
7
tsjippy-mandatory.zip4
WP-tsjippy-mandatory.zip3
Sep 13, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 11, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
7
tsjippy-mandatory.zip4
WP-tsjippy-mandatory.zip3
Sep 10, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 10, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 9, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
0
tsjippy-mandatory.zip0
WP-tsjippy-mandatory.zip0
Sep 3, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 2, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 1, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
Sep 1, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
0
tsjippy-mandatory.zip0
WP-tsjippy-mandatory.zip0
Aug 31, 2026 1mo ago
tsjippy-mandatory.zip +1 asset
1
tsjippy-mandatory.zip1
WP-tsjippy-mandatory.zip0
All releases on GitHub →
D+ grade

Security

Tsjippy Mandatory Pages 10.7.7 · audited by WP Registry

High-severity findings.

4 high
Audited release
10.7.7
Findings
4
Worst severity
high
Content hash
10b47cbf072643b322168d0c…

Findings

  • high Unauthenticated mark_as_read / mark_all_as_read forges user compliance state

    missing_auth

    REST routes /mandatory_content/mark_as_read and /mark_all_as_read use permission_callback __return_true. Callers supply user-id (and post-id); handlers call add_user_meta($userId,'tsjippy_read_pages',...) with no proof the caller is that user. An unauthenticated attacker can mark any user's mandatory pages (or all audience pages) as read, defeating compliance gates.

    php/rest-api.php:44-96,182-212

    Recommendation

    Require the authenticated user to match user-id (or manage_options). For email links, use a signed, single-use token bound to user+post instead of bare email.

  • high Public mark_as_read_public accepts bare email without signed token

    missing_auth

    GET /mandatory_content/mark_as_read_public takes post-id and email, looks up the user by email (or tsjippy_email meta), and adds tsjippy_read_pages without a HMAC/token. Anyone who knows a victim email can forge their read acknowledgement.

    php/rest-api.php:21-41,143-176

    Recommendation

    Include a keyed hash (user_id|post_id|exp) in the Mailchimp link and verify it server-side before writing meta.

  • high Unauthenticated mark_as_read / mark_all_as_read forges user compliance state

    missing_auth

    REST routes mark_as_read and mark_all_as_read use permission_callback __return_true and accept an arbitrary numeric user-id. Callbacks call markAsRead()/markAllAsRead() which add_user_meta($userId, 'tsjippy_read_pages', ...). An unauthenticated attacker can mark every mandatory page as read for any user, defeating the plugin's purpose.

    php/rest-api.php:44-96,182-210

    Recommendation

    Require the requester to be the target user (or manage_options) and a valid nonce; never accept raw user-id from untrusted input.

  • high Public mark_as_read_public accepts bare email without signed token

    auth_bypass

    GET mark_as_read_public takes email and post-id with __return_true. markAsReadFromEmail resolves the user by email (or tsjippy_email meta) and adds the read meta, then redirects. Anyone who knows a user's email can forge acknowledgements without opening the Mailchimp-signed intent. Mailchimp templates embed *|EMAIL|* but the endpoint does not verify a HMAC/expiry.

    php/rest-api.php:22-40,143-176

    Recommendation

    Use a signed, time-limited token (HMAC of user_id+post_id+expiry) in the email link instead of a bare email query parameter.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.