Dandelion is a fair source project. View the code on Github

Commits on Sep 13, 2026
63469c0

Clamp /code pagination so a negative page no longer 500s.

Fixes DANDELION-3Q

40e59b2

Revert "move skills from project to user"

This reverts commit b19fca70c1b5ff261dcbbca7e0919895f18a0375.

79b1ac0

Sign out in test helpers so account switches still work after magic-link session locking.

fa25ecd

Reject GET password callbacks and stop magic links from swapping sessions.

43e1867

Use amount + currency code again in admin contribution emails.

Symbol formatting like £3 is harder to scan in admin subjects than 3 GBP.

1294c64

Prevent Mailgun recipient tokens from leaking through user-controlled email HTML.

dcfb96b

Stop an abandoned OmniAuth session from attaching to a later signup.

8bdf5ff

Discover injected wallets via EIP-6963 and accept CRLF SIWE form posts.

Modern wallets may never set window.ethereum, and browsers submit the signed message with Windows newlines that siwe-rb rejects.

8fd02f6

Merge pull request #234 from symbiota-coop/cursor/siwe-sign-in-c7b0

Replace omniauth-ethereum with Sign-In with Ethereum (EIP-4361) via siwe-rb

9ba897c

Refresh carousel IDs in place so a failed rebuild cannot wipe live membership.

ed4484e

Store carousel membership on events instead of a per-carousel cache.

Listings and carousel queries can filter on event.carousel_ids, rebuilt hourly, without looking up another organisation's carousel.

c9826a0

Treat carousel-filtered listings like search when blocking scrapers.

Drop the leftover carousel_id alias so the public events listing only accepts carousel_ids, matching the filter Rack::Attack now challenges.

Commits on Sep 12, 2026
bd0ab51

Add rack tests for the Sign-In with Ethereum flow

Covers the request-phase message, sign-in for a linked wallet (case-insensitive uid match), signup for an unknown wallet, and rejection of replayed signatures, GET callbacks, forged nonce/domain, and signatures from another wallet. Keys are generated and signed with OpenSSL so no eth gem is needed.

Co-authored-by: stephen

0bb83cc

Replace omniauth-ethereum with an EIP-4361 Sign-In with Ethereum strategy built on siwe-rb

The q9f/omniauth-ethereum strategy verified only that a wallet had signed 'Sign in with Ethereum

79e4bec

Move payment provider name from the event view onto Order.

f6f9543

Move event access tests into their own file.

Keep events_test focused on create/edit, slugs, and reminders, and put manager, cohost, and revenue permission cases in event_permissions_test.

1443551

Drop tests that only restate coverage already in a broader case.

Fold waitlist subscription checks into the join test, and remove MCP/order/ticket/webhook cases that duplicate a parent assertion.

6f06d7a

Purge soft-deleted rows between tests

5876f39

Don't let nested ticket type/group attributes move records to another event

cc4bd26

Don't let optionships, teamships or shifts adopt their parent from a child.

Gathering and rota must be set by the caller, matching spends and inventory items, so a missing parent cannot skip the same-parent check.