WP Manifestindependent plugin directory
manifest / events / rotaract-appointments

Rotaract Appointments WP Registry grade D+. High-severity findings · 2 findingsWP RegistryHigh-severity findings · 2 findingsOpen the reportD+

WordPress plugin for displaying appointments from mein Rotaract.

★ 4stars
235release downloads
v5.0.1latest · 9mo ago

Install

Download rotaract-appointments.zip From the v5.0.1 release on GitHub, Jan 23, 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/rotaract/rotaract-appointments/releases/download/v5.0.1/rotaract-appointments.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

= Rotaract Appointments

ifdef::env-github[] :tip-caption: 💡 :note-caption: ℹ :important-caption: ❗ :caution-caption: 🔥 :warning-caption: ⚠ endif::[]

:badge_url: https://img.shields.io :repo_path: rotaract/rotaract-appointments :slug: rotaract-appointments

// General Badges image:{badge_url}/badge/Open_Source-❤-orange[Open Source, link="https://opensource.org"] image:{badge_url}/github/package-json/keywords/{repo_path}[GitHub package.json keywords, link="https://github.com/{repo_path}/blob/HEAD/package.json"] image:{badge_url}/badge/code_style-WordPress-brightgreen[Code Style, link="https://make.wordpress.org/core/handbook/best-practices/coding-standards/"] + // Status Badges image:https://github.com/{repo_path}/actions/workflows/build.yml/badge.svg[Build Plugin ZIP, link="https://github.com/{repo_path}/actions/workflows/build.yml"]

https://wordpress.org/[WordPress] plugin to display appointments of Rotaract Germany https://github.com/fullcalendar/fullcalendar[FullCalendar].

== ⭐ Features

  • Display events of German Rotaract organisations in a calender (events must be marked as public in aurora)
  • Multiple event owners / event sources
  • Multiple views: list view, month view
  • Customizable colors per event owner / event source
  • Support of ICS subscription links
  • Open-Source
  • Internationalization

== 🔧 Installation

.Prerequisites [NOTE]

IMPORTANT: The plugin's latest version is already installed on https://hosting.rotaract.de[Rotaract Hosting].

. Download https://github.com/rotaract/rotaract-appointments/releases/latest/download/rotaract-appointments.zip[latest version packaged as ZIP file] . https://wordpress.com/support/plugins/install-a-plugin/#install-a-plugin-with-a-zip-file[Install and activate plugin in WordPress]

== 🪛 Configuration

. Set URL of event API

== 🪄 Usage

. Add the shortcode [rotaract-appointments] to a new or existing site that will insert the calendar.

== ⚖️ Legal Notices

Copyright (c) 2021-2026, Rotaract Deutschland

Licensed under European Union Public License 1.2 (EUPL-1.2).

Rotary, Rotaract and Interact are trademarks or registered trademarks of Rotary International and are used with the permission of Rotary International. Other trademarks not owned by Rotary International are the property of their respective owners. The license above does not grant any rights under trademark law and all such rights are reserved. Modified versions must be renamed to avoid use of any Rotary International trademarks, including but not limited to Rotary, Rotaract and Interact.

All Rotary, Rotaract and Interact logos and graphics are under copyright.

Releases

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

Tag
Published
Assets
Downloads
v5.0.1 latest
Jan 23, 2026 9mo ago
rotaract-appointments.zip
30
Jan 23, 2026 9mo ago
tag only
—
Nov 5, 2025 11mo ago
rotaract-appointments.zip
1
Oct 29, 2025 11mo ago
rotaract-appointments.zip
1
Oct 29, 2025 11mo ago
rotaract-appointments.zip
1
Aug 10, 2024 2 years ago
rotaract-appointments.zip
9
Aug 10, 2024 2 years ago
rotaract-appointments.zip
3
Jan 22, 2024 2 years ago
rotaract-appointments.zip
3
Jan 21, 2024 2 years ago
rotaract-appointments.zip
8
Jan 21, 2024 2 years ago
rotaract-appointments.zip
10
Dec 5, 2023 2 years ago
rotaract-appointments.zip
6
Nov 12, 2023 2 years ago
rotaract-appointments.zip
5
Sep 20, 2023 3 years ago
rotaract-appointments.zip
5
Oct 11, 2022 4 years ago
rotaract-appointments.zip
14
Oct 8, 2022 4 years ago
rotaract-appointments.zip
5
Oct 6, 2022 4 years ago
rotaract-appointments.zip
5
Aug 21, 2022 4 years ago
rotaract-appointments.zip
7
Aug 21, 2022 4 years ago
rotaract-appointments.zip
5
Mar 8, 2022 4 years ago
rotaract-appointments.zip
14
Oct 14, 2021 5 years ago
rotaract-appointments.zip
12
Aug 20, 2021 5 years ago
rotaract-appointments.zip
7
Aug 14, 2021 5 years ago
rotaract-appointments.zip
6
Aug 2, 2021 5 years ago
rotaract-appointments.zip
5
Aug 2, 2021 5 years ago
rotaract-appointments.zip
5
Aug 2, 2021 5 years ago
rotaract-appointments.zip
7
All releases on GitHub →
D+ grade

Security

Rotaract Appointments 5.0.1 · audited by WP Registry

High-severity findings.

1 high 1 medium
Audited release
5.0.1
Findings
2
Worst severity
high
Content hash
bda54d4d6aa1f85d6e8ceff7…

Findings

  • high Stored XSS via [rotaract-appointments] days and style attributes

    xss_stored

    appointments_shortcode() copies user-supplied shortcode attributes through shortcode_atts() with no allowlist. Two sinks then emit them into the public page without a safe JS/HTML context. (1) public/partials/shortcode.php prints esc_js($shortcode_atts['days']) as a bare calendarInit() argument — esc_js only addslashes quotes/backslashes and HTML-encodes <>; it does not wrap the value as a JavaScript string or coerce it to int/null. Default 'null' is deliberately emitted unquoted so it becomes the JS null keyword; therefore [rotaract-appointments days=alert(document.domain)] or days="1);alert(1);//" is valid JS, runs on DOMContentLoaded, and contains no HTML tags so wp_kses_post does not strip it from Author/Contributor content. (2) the shortcode return concatenates style into a class attribute with no esc_attr, so style='foo" onclick="alert(1)' breaks out of class. Author can publish this without review; Contributor needs an editor to approve the post. Subscriber cannot. Views/init are quoted and esc_js'd and are not this bug.

    public/partials/shortcode.php:33-38

    Recommendation

    Pass days through wp_json_encode() (or absint, with JSON null when unset) so it is a JS literal, not an expression. Escape style with esc_attr() and restrict it to an allowlist (e.g. normal, short). Keep views/init inside quotes only after wp_json_encode, not esc_js.

  • medium Calendar event title, location, and markdown description inserted via innerHTML without sanitization

    xss_stored

    List-view eventDidMount does elem.innerHTML = createEventContent(info.event); dayGrid mounts a tippy popup with allowHTML:true and the same HTML string. createEventContent concatenates eventInfo.title and eventInfo.source.id into HTML, interpolates eventInfo.title into an unescaped title="..." attribute on auto-linked locations, and runs marked.parse() on extendedProps.description with no DOMPurify / sanitizer option (marked 17 passes raw HTML through by default). innerHTML and tippy allowHTML execute event-handler payloads such as <img src=x onerror=...>. Write path is not a WP user: FullCalendar loads aurora {type}/{slug}/events.json (owners saved by manage_options) or the public ICS proxy. Anyone who can create a public aurora event for an owner this site displays, or who can add an event on a subscribed ICS calendar, XSSes every visitor of the shortcode page when the event is rendered (list view runs eventDidMount immediately). Admin-only configuration of the feed is a precondition, not a gate on the event fields. Subscriber cannot write those fields through WordPress.

    public/js/public.js:39-68,137-156

    Recommendation

    Treat remote calendar fields as untrusted. Escape title, owner, location, and source id with a text-node or HTML escaper before concatenation. Parse markdown with a sanitizer (e.g. DOMPurify after marked) and do not assign the result to innerHTML / allowHTML unless the sanitizer output is guaranteed safe. Prefer textContent for titles.

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.