Indico 3.0 released [v3.0.3]

It’s been a while, but we’re happy to announce that we just released Indico 3.0.

Please read the “Python 3” section below for some important advice, especially if you consider installing/upgrading more than just a test instance!

Also, there is no extensive documentation on how to best set up the external search service (via the Citadel plugin) yet, so we do not recommend you to use this at the moment, unless you are willing to do some tinkering.

:bulb: Blog Post

We published a blog post summarizing the most relevant changes for end users.

:warning: Python 3 :snake:

This major release starts the new Python-3-only era of Indico. :snake:

Due to the massive changes that come with this, make sure to read the 2.x to 3.0 upgrade guide if you plan to upgrade an existing instance.

As usual, but especially for a major upgrade like this, please make sure to read and understand the setup guide first and have a backup. :floppy_disk:

:trophy: Major Features

  • There is a new built-in search module which provides basic search functionality out of the box, and for more advanced needs (such as full text search in uploaded files) plugins can provide their own search functionality (e.g. using ElasticSearch). (#4841)
  • Categories may now contain both events and subcategories at the same time. During the upgrade to 3.0 event creation is automatically set to restricted in all categories containing subcategories in order to avoid any negative surprises which would suddenly allow random Indico users to create events in places where they couldn’t do so previously. (#4679, #4725, #4757)
  • The OAuth provider module has been re-implemented based on a more modern library (authlib). Support for the somewhat insecure implicit flow has been removed in favor of the code-with-PKCE flow. Tokens are now stored more securely as a hash instead of plaintext. For a given user/app/scope combination, only a certain amount of tokens are stored; once the limit has been reached older tokens will be discarded. The OAuth provider now exposes its metadata via a well-known URI (RFC 8414) and also has endpoints to introspect or revoke a token. (#4685, #4798)
  • User profile pictures (avatars) are now shown in many more places throughout Indico, such as user search results, meeting participant lists and reviewing timelines. (#4625, #4747, #4939)
  • Add support for personal tokens. These tokens act like OAuth tokens, but are associated with a specific user and generated manually without the need of doing the OAuth flow. They can be used like API keys but with better granularity using the same scopes OAuth applications have, and a single user can have multiple tokens using various scopes. By default any user can create such tokens, but admins can restrict their creation. (#1934, #4976)
  • Add system notices which inform administrators about important things such as security problems or outdated Python/Postgres versions. These notices are retrieved once a day without sending any data related to the Indico instance, but if necessary, this feature can be disabled by setting SYSTEM_NOTICES_URL = None in indico.conf (#5004)
  • It is now possible to use SAML SSO for authentication without the need for Shibboleth and Apache (#5014)

:flags: Internationalization

  • New locale: English (United States) :us:
  • New translation: Turkish :tr:

:tada: Improvements

  • Use a more modern search dialog when searching for users (#4674, #4743)
  • Add an option to refresh event person data from the underlying user when cloning an event (#4750, #4760)
  • Add options for attaching iCal files to complete registration and event reminder emails (#1158, #4780)
  • Use the new token-based URLs instead of API keys for persistent ical links and replace the calendar link widgets in category, event, session and contribution views with the more modern ones used in dashboard (#4776, #4801)
  • Add an option to export editables to JSON (#4767, #4810)
  • Add an option to export paper peer reviewing data to JSON (#4767, #4818)
  • Passwords are now checked against a list of breached passwords (“Have I Been Pwned”) in a secure and anonymous way that does not disclose any data. If a user logs in with an insecure password, they are forced to change it before they can continue using Indico (#4817)
  • Failed login attempts now trigger rate limiting to prevent brute-force attacks (#1550, #4817)
  • Allow filtering the “Participant Roles” page by users who have not registered for the event (#4763, #4822)
  • iCalendar exports now include contact data, event logo URL and, when exporting sessions/contributions, the UID of the related event. Also, only non-empty fields are exported. (#4785, #4586, #4587, #4791, #4820)
  • Allow adding groups/roles as “authorized abstract submitters” (#4834)
  • Direct links to (sub-)contributions in meetings using the URLs usually meant for conferences now redirect to the meeting view page (#4847)
  • Use a more compact setup QR code for the mobile Indico check-in app; the latest version of the app is now required. (#4844)
  • Contribution duration fields now use a widget similar to the time picker that makes selecting durations easier. (#2462, #4873)
  • Add new meeting themes that show sequential numbers instead of start times for contributions (#4899)
  • Remove the very outdated “Compact style” theme (it’s still available via the themes_legacy plugin) (#4900, #4899)
  • Support cloning surveys when cloning events (#2045, #4910)
  • Show external contribution references in conferences (#4928, #4933)
  • Allow changing the rating scale in abstract/paper reviewing even after reviewing started (#4942)
  • Allow blacklisting email addresses for user registrations (#4644, #4946)
  • Add abstract content to the abstract list customization options (#4968)
  • Add CLI option to create a series (#4969)
  • Users cannot submit multiple anonymous surveys anymore by logging out and in again (#4693, #4970)
  • Improve reviewing state display for paper reviewers (#4979, #4984)
  • Make it clearer if the contributions/timetable of a conference are still in draft mode (#4977, #4986)
  • Add “send to speakers” option in event reminders (#4958, #4966, thanks @Naveenaidu)
  • Allow displaying all events descending from a category (#4982, #4983, thanks @OmeGak and @openprojects).
  • Add an option to allow non-judge conveners to update an abstract track (#4989)

:bug: Bugfixes

  • Take registrations of users who are only members of a custom event role into account on the “Participant Roles” page (#4822)
  • Fail gracefully during registration import when two rows have different emails that belong to the same user (#4823)
  • Restore the ability to see who’s inheriting access from a parent object (#4833)
  • Fix misleading message when cancelling a booking that already started and has past occurrences that won’t be cancelled (#4719, #4861)
  • Correctly count line breaks in length-limited abstracts (#4918)
  • Fix error when trying to access subcontributions while event is in draft mode
  • Update the user link in registrations when merging two users (#4936)
  • Fix error when exporting a conference timetable PDF with the option “Print abstract content of all contributions” and one of the abstracts is too big to fit in a page (#4881, #4955)
  • Emails sent via the Editing module are now logged to the event log (#4960)
  • Fix error when importing event notes from another event while the target event already has a deleted note (#4959)
  • Fix errors when importing events containing abstracts or event roles from a YAML dump (#4995)
  • Fix sorting abstract notification rules (#4998)
  • No longer silently fall back to the first event contact email address when sending registration emails where no explicit sender address has been configured (#4992, #4996, thanks @vasantvohra)
  • Do not check for event access when using a registration link with a registration token (#4991, #4997, thanks @vasantvohra)
  • Fix formatting and datetime localization in various PDF exports and timetable tab headers (#5009)
  • Show lecture speakers as speakers instead of chairpersons on the participant roles page (#5008)

:wrench: Internal Changes

  • Require Python 3.9 :snake: - older Python versions (especially Python 2.7) are no longer supported
  • confId has been changed to event_id and the corresponding URL path segments now enforce numeric data (and thus pass the id as a number instead of string)
  • CACHE_BACKEND has been removed; Indico now always uses Redis for caching
  • The integration with flower (celery monitoring tool) has been removed as it was not widely used, did not provide much benefit, and it is no longer compatible with the latest Celery version
  • session.user now returns the user related to the current request, regardless of whether it’s coming from OAuth, a signed url or the actual session (#4803)
  • Add a new check_password_secure signal that can be used to implement additional password security checks (#4817)
  • Add an endpoint to let external applications stage the creation of an event with some data to be pre-filled when the user then opens the link returned by that endpoint (#4628, thanks @adl1995)
  • Signals previously exposed directly via now need to be accessed using their explicit name, i.e. (#5007)
  • Add category.extra_events signal (#5005, thanks @OmeGak)

We have released v3.0.1 which contains some bugfixes and improvements.

:tada: Improvements

  • Allow filtering abstracts by custom fields having no value (#5033, #5034)
  • Add support for syncing email addresses when logging in using external accounts (#5035)
  • Use more space-efficient QR code version in registration tickets (#5052)
  • Improve user experience when accessing an event restricted to registered participants while not logged in (#5053)
  • When searching external users, prefer results with a name in case of multiple matches with the same email address (#5066)
  • Show program codes in additional places (#5075)
  • Display localized country names (#5070, #5076)

:bug: Bugfixes

  • Show correct placeholders in date picker fields (#5022)
  • Correctly preselect the default currency when creating a registration form
  • Do not notify registrants when a payment transaction is created in “pending” state
  • Keep the order of multi-choice options in registration summary (#5020, #5032)
  • Correctly handle relative URLs in PDF generation (#5042, #5044)
  • Render markdown in track descriptions in PDF generation (#5043, #5044)
  • Fix error when importing chairpersons from an existing event (#5047)
  • Fix broken timetable entry permalinks when query string args are present (#5049)
  • Do not show “Payments” event management menu entry for registration managers (#5072)
  • Replace some hardcoded date formats with locale-aware ones (#5059, #5071)
  • Clone the scientific program description together with tracks (#5077)
  • Fix database error when importing registrations to an event that already contains a deleted registration form with registrations (#5078)

:wrench: Internal Changes

  • Add event.before_check_registration_email signal (#5021, thanks @OmeGak)
  • Do not strip image maps in places where HTML is allowed (#5026, thanks @bpedersen2)
  • Add event.registration.after_registration_form_clone signal (#5037, thanks @vasantvohra)
  • Add registration-invite-options template hook (#5045, thanks @vasantvohra)
  • Fix Typeahead widget not working with extra validators (#5048, #5050, thanks @jbtwist)


it seems like there is problem when using ldap authentication:
Using the switch button on the login page results in:

(index):179 Uncaught ReferenceError: $ is not defined
    at (index):179
    at (index):204

The loaded js bundles seem to be the same as for 3.0.0 (except for the hash of course), but jquery is not initialised.

It seems the common-runtime bundle is not included in the login page. I am working on a patch for this

oops. good catch. The fix is quite simple:

diff --git a/indico/web/templates/base.html b/indico/web/templates/base.html
index 48690d6a67..32b7a008bb 100644
--- a/indico/web/templates/base.html
+++ b/indico/web/templates/base.html
@@ -15,6 +15,8 @@
         window.CKEDITOR_BASEPATH = {{ url_for('assets.dist', filename='js/ckeditor/')|tojson() }};

+    {{ webpack['exports.js'] }}
+    {{ webpack['common-runtime.js'] }}
     {{ webpack['common.css'] }}
     {{ webpack['common.js'] }}
     {{ webpack['react.js'] }}

(the exports bundle isn’t really needed, but may be useful if someone ever decides to inject plugin code on that page that needs it…)

I’ll release 3.0.2 with this fix included.

Thanks, that solves it.

We have released v3.0.2 which fixes a bug causing problems on the login page in some cases.

:bug: Bugfixes

  • Fix JavaScript errors on the login page which caused problems when using multiple form-based login methods (e.g. LDAP and local Indico accounts)

We have released v3.0.3 which contains a low-severity security fix, some bugfixes and improvements.

:warning: Security fixes

  • Protect authentication endpoints against CSRF login attacks (#5099, thanks @OmeGak)

:tada: Improvements

  • Support TLS certificates for SMTP authentication (#5100, thanks @dweinholz)
  • Add CSV/Excel contribution list exports containing affiliations (#5114, #5118)
  • Include program codes in contribution PDFs and spreadsheets (#5126)
  • Add an API for bulk-assigning contribution program codes programmatically (#5115, #5120)
  • Add layout setting to show videoconferences on the main conference page (#5124)

:bug: Bugfixes

  • Fix certain registration list filters (checkin status & state) being combined with OR instead of AND (#5101)
  • Fix translations not being taken into account in some places (#5073, #5105)
  • Use correct/consistent field order for personal data fields in newly created registration forms
  • Remove deleted registration forms from ACLs (#5130, #5131, thanks @jbtwist)

:wrench: Internal Changes

  • Truncate file names to 150 characters to avoid hitting file system path limits (#5116, thanks @vasantvohra)