Dandelion is a fair source project. View the code on Github
Commits on Jul 11, 2026
| 08a0b8f |
Add expiry and purpose to Stripe Connect OAuth state tokens Extend TokenVerifier with optional expires_in and purpose, then use a 15-minute stripe_connect purpose for OAuth state to limit replay while keeping reload tolerance. |
| 22ec75e |
Fix Stripe Connect OAuth state surviving page reloads Replace session-stored random state with signed TokenVerifier tokens so each authorize URL remains valid even if the org page is re-rendered before callback. |
Commits on Jul 10, 2026
| afd7b5a |
🔒️ Sanitize HTML and add CSP header to public pmail endpoint Harden public pmail rendering against XSS and unsafe content:
|
| ecb9fe0 |
🔧 Upgrade Cursor model variant to xhigh in bug review workflow The grok-4.5-xhigh variant provides deeper reasoning capabilities, which should yield more thorough and accurate bug detection in the daily automated review. |
| bad283c |
👽️ Switch Cursor model from composer-2.5 to grok-4.5 in daily bug review workflow |
| 5dc17da |
🔥 Remove obsolete |
| 8856448 |
🔒️ Prevent XSS via uploaded files Add RejectsActiveContent concern to Attachment, Comment, and Upload models to block active content (html, htm, xhtml, svg, svgz, xml, js) from being uploaded. Return proper error messages on upload and comment failures. |
| 36ea21f |
✨ Parenthesize assert block to fix RuboCop AmbiguousBlockAssociation |
| b6ff6f4 |
✨ Add support for api.luma.com iCal feed host Add api.luma.com as a supported Luma iCal feed host alongside api2.luma.com. Refactor Luma feed hosts into a dedicated constant to make it easier to maintain and extend the list of supported hosts in the future. Update documentation and add tests to verify both host formats are accepted. |
| ccbf5e7 |
🔒️ Add iCal feed host allowlist to prevent SSRF attacks Add ALLOWED_FEED_HOSTS constant and validate iCal URLs against the allowlist before fetching. This restricts calendar imports to trusted hosts: Luma, Google Calendar, Outlook, and iCloud. Add redirect callback to reject unexpected hosts during Luma page fetches. Only use Luma's own CDN for og:image URLs to prevent SSRF via arbitrary image meta tags. Update validation to use the same normalize_feed_url method for consistency. Add test for rejecting disallowed hosts. |
| 431a7b5 |
🐛 (stripe_connect_helper.rb): coerce client_id to string before CGI escaping to avoid type errors |
| 2569f84 |
🛂 Add commentable viewer authorization checks to comment routes |
| d146aad |
🔒️ Secure Stripe Connect OAuth flow with state validation The previous implementation used the organisation ID as the OAuth state parameter, which is a security vulnerability. An attacker could craft a callback URL with any organisation ID to gain unauthorized access to that organisation's Stripe Connect flow. Changes: - Generate a cryptographically random state and store the organisation ID in the session instead of the URL - Validate the state on callback using secure_compare to prevent timing attacks - Update views to use the new helper instead of embedding the organisation ID in the Stripe OAuth URL This implements proper CSRF protection for the OAuth callback as required by the OAuth 2.0 specification. |
| 1a0cf81 |
🔒️ Scope nested attribute id checks to parent association Nested attribute validation checked if a record existed globally rather than belonging to the parent, allowing cross-record modification or destruction. Scope the check to the parent's association for provider_links, ticket_types, and ticket_groups. Extract reject_if lambdas to named predicate methods for readability and testability, and add test coverage for ticket type nested attributes. |
| 787b05b |
✨ feat(layout): resolve theme color from event with fallbacks |
| 03cd4e4 |
✨ (event_payment_handlers.js): handle embedded stripe payment by opening a new window for the session url
|
| 964b8b8 |
🐛 (purchase.js): gate in-page alert behind embedded config Use |
| 6079f5f |
Fix embedded ticket checkout blocked by sandboxed confirm dialogs Replace native alerts with in-page validation messages and skip confirm() on ticket_form_only embeds so checkout works in Google Sites iframes. |
| 7233dd9 |
⬆️ (Gemfile.lock): upgrade css_parser from 2.1.0 to 3.0.0
|
Commits on Jul 09, 2026
| 59289a0 |
🔒 (evm/opencollective): scope payment reconciliation to the scanned org/event Prevent cross-tenant ticket completion by matching unpaid orders only within the organisation wallet or event collective being reconciled. |