Skip to content

v3.1.5

Latest

Choose a tag to compare

@robguthrie robguthrie released this 31 Jul 21:11

Loomio 3.1.5

This release includes:

  • New: Subscribe a Loomio group to an external email mailing list.
  • Fix: Prevent duplicate threads and staff forwards when a mail server
    retries delivery.
  • Fix: Preserve the SMTP envelope recipient when an email is delivered
    through a mailing list or forwarding address.
  • New: Convert a group thread to a direct thread while retaining access for
    its participants.
  • Fix: Require Bearer authentication for the trusted server API so API keys
    are not accepted in URLs or request bodies.
  • New: Discover Loomio's user and server API documentation through
    /llms.txt.

Operators using Loomio's bundled Haraka inbound-mail service must update both
the Loomio application and Haraka images. This release contains one database
migration and requires no new environment variable.

Mailing lists and forwarded email

A group's Loomio email address can now be subscribed to an external mailing
list. Loomio routes the message using the SMTP envelope recipient, so a message
can reach the group even when its visible To field contains the mailing-list
address or another address that forwarded the message.

Existing email-to-group permissions remain in effect. Loomio matches the
thread author from the visible From address. Group members are recognised
automatically, while an unrecognised sender produces an in-app notification for
group administrators to associate the address with a member or block it. A
mailing list that preserves each contributor's address may require an alias for
each sender; a list that rewrites messages to one stable From address needs
one alias.

The same envelope handling supports Loomio addresses that forward to staff
mailboxes. Forwarded messages use a Loomio sender address for delivery and keep
the original sender in Reply-To, allowing staff to reply normally.

Haraka now replaces sender-supplied routing metadata with the trusted SMTP
envelope and remains compatible with Haraka 3.3's address representation.
SPF, DKIM, DMARC, ARC, and BIMI evaluation continues to run before the message
is submitted to Loomio. Haraka returns a successful SMTP response only after
the application accepts the message, preventing an accepted message from also
being reported as a temporary failure.

Duplicate inbound email prevention

Loomio now records the email Message-ID and processes each identifier only
once. If an upstream mail server retries the same message, Loomio does not
create another thread or send another copy through a staff forwarding rule.

The database migration adds a nullable message_id column and unique index to
received_emails. Existing rows remain valid and require no backfill. Received
emails used for staff forwarding are retained until the normal 60-day cleanup
so retries can be recognised during that period.

This resolves issue #12704.

Convert a group thread to a direct thread

Thread administrators can choose Direct thread in the Move thread form.
The thread creator, the administrator making the change, commenters,
identified poll voters, and people who reacted retain access. Group members who
only viewed the thread do not retain access. The thread creator and the
administrator making the change become thread administrators.

Threads containing anonymous polls cannot be converted because deriving a
participant list could reveal who voted. Mention search also prioritises names
and handles that begin with the entered text.

Server API authentication

The trusted server API under /api/b3 now accepts B3_API_KEY only through:

Authorization: Bearer <server_api_key>

Keys supplied in query strings or request bodies are rejected. Operators must
update existing server API integrations before upgrading. The user API under
/api/b2 is unchanged.

Loomio now serves /llms.txt, which links automated tools and developers to
the user and server API documentation and states their authentication and
permission boundaries.

Upgrade notes

  1. Before upgrading, update every /api/b3 integration to use the
    Authorization: Bearer header.

  2. Edit .env and set the application image tag:

    LOOMIO_CONTAINER_TAG=3.1.5

    Use 3.1.5 to pin this release, or 3.1 to track the 3.1 patch series.

  3. If the Haraka image is pinned separately, set it to:

    loomio/haraka-rails-docker:3.1.5
    
  4. Run the update script from the deployment directory:

    ./update.sh

    The update must pull and recreate both the application and Haraka services.
    It also runs the migration that adds the unique inbound-email Message-ID
    index.

  5. Confirm that the application, worker, and Haraka services are running. Send
    an inbound test message and confirm the SMTP transaction ends with a 250
    response and creates or forwards only one copy.

No data backfill is required.

Full changelog: v3.1.4...v3.1.5