Code Monkey home page Code Monkey logo

indico-plugins's Introduction

Indico Plugins CI Status License Available on PyPI Made at CERN!

This repository contains all the official plugins for Indico.

These plugins are licensed under the MIT license.

Note

In applying the MIT license, CERN does not waive the privileges and immunities granted to it by virtue of its status as an Intergovernmental Organization or submit itself to any jurisdiction.

indico-plugins's People

Contributors

andriish avatar aplummerunsw avatar davidandreev avatar dependabot[bot] avatar driehle avatar duartegalvao avatar florv avatar gasparuben avatar governmentplates avatar javfg avatar martinclaus avatar maxfischer2781 avatar mic4ael avatar mvidalgarcia avatar nop33 avatar olifre avatar omegak avatar pferreir avatar plourenco avatar thiefmaster avatar tomasr8 avatar tony avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

indico-plugins's Issues

Add plugin: owncloud

indico-plugin-owncloud

This issue will describe the task of moving the proof of concept for the file-picker integration into a separate plugin.

The steps are the following:

  • Create a plugin scaffold for indico-plugin-owncloud
  • Add configuration fields required to specify an ownCloud server
  • Move the bundled libraries into the plugin
  • Move the code for the new attachment source into the plugin
  • Configurable label/icon for the 'add attachment' button
  • Configurable token storage
  • Display config / connection / auth errors
  • Style the file-picker

Things to keep in mind:

  • Make sure Indico's upload size limit is honored

i18n strings not referenced from Admin interface

Issue

It seems the zoom plugin administration interface (admin/plugins/vc_zoom/) is not using localized strings.
They are defined in Transifex, but even when they are translated, US English version is displayed in the inteface.

How to reproduce

  1. Switch to non-English language
  2. In Indico administration, open Zoom plugin page
  3. See most of the strings staying in English

Indico importer plugin - missing documentation

Hi,
I need to implement a custom importer, which reads the data from a CSV file and imports them to the indico. After successfully importing the papers, I would like to group them into sessions using Indico. I'm using Indico 1.2. Where I can find a detailed documentation how to start with this stuff?
thanks for your help,
Michał

CERN Indico Event Statistics Broken

Describe the bug
The event summary statistics on CERN Indico clearly do not work.

To Reproduce
Following the following URL to get statistics on our workshop from last month:

https://indico.cern.ch/event/908146/manage/statistics/?start_date=2020-05-01&end_date=2020-06-08

Indico reports 0 visitors, which is clearly nonsense for an event with over 200 people registered (see screenshot).

It's also inconsistent with the default query window (2020-04-29 to 2020-05-13), which lists 593 visitors (second screenshot).

Expected behavior
Give reliable data.

In particular it's very desirable for us, as organisers, to see how often the videos of the event were viewed.

Screenshots
Screenshot 2020-06-08 at 13 05 27
Screenshot 2020-06-08 at 13 07 33

Use GET in search form

Doesn't make much sense to use POST for a search form. People might want to link to a search and with POST that's not really possible.

RFC: Deprecating some old plugins / moving them to an attic repo?

We have some plugins which we aren't using anymore and thus don't really spend time on maintaining; and chances are good the community isn't actively using them either.

Should we move those into a separate repo (e.g. indico-plugins-attic), and also remove them (if currently included) from the indico-plugins meta package?

Good candidates for that would be:

  • chat - Jabber isn't really a thing anymore, we also don't use it, and except for obvious things that need fixing after refactoring things in the code (which are usually only found by searching in the codebase, not by actually testing the plugin) it's unmaintained
  • search-invenio - known to be broken since 2.1 or earlier. Never released on PyPI either.
  • livesync-invenio - not really useful without search-invenio; not actively used, probably not working with latest invenio, uses very legacy (marcxml) serialization logic from the core
  • storage-xrootd - EOS/XrootD for storage is not really used anywhere except at CERN, and we stopped using it for Indico (besides a small instance that still needs to be moved to s3 object storage)

cc @pferreir

Event-specific fields are not shown when adding/editing chatroom

{% for field in form.visible_fields if field.short_name not in form.event_specific_fields %}

Simply removing the condition makes it a bit ugly. It would be nice to show some kind of header informing the user that those settings only affect the current event even if the chatroom is used in multiple events.

[NEW Plugin Request] Zoom Videoconferencing

Hi,

It would be great to have a Zoom plugin implementation together with Indico.
As Basic - having the ability to add information to the event about the join URL and additional phone numbers is enough;
As Extended - automatically create the room and populate this information from zoom to indico would be awesome.

Vidyo: add information about Vidyo meeting to iCal metadata

VidyoConnect now has this nice "Meetings" feature that looks into your Exchange/Google calendar and lets you connect directly to the corresponding VC room. In order for that to be possible, we have to add a field to the ICS export metadata:

URL_VIDYO: https://vidyoportal.cern.ch/join/xxxxxxx

Citadel Search: Remember sort order while on page?

We got this suggestion in a ticket:

I know I can select by date, but I am wondering if the sorting policy can be made default.
For example, if I search for a person A and change the results sorting to "newest first" I can get a chronological list of meetings in which A presented. If I now type a person B in the search bar, the sort policy goes back to "most relevant". Could this be avoided through the user preferences?

TBH I also usually switch to "most recent"... it could be interesting to either save your last order it in a user preference (but for "oldest first" that may be weird since that's likely NOT what one wants by default), or simply not reset it when you search for something else without reloading the page.

Configuration info.

I would like to change the setting for my institution but I was no able to find in which file I have to do that.

These are the most relevant configuration options:
Notification email addresses - Additional e-mails which will receive notifications
E-mail domains - List of e-mail domains which can be used for the Zoom API (e.g. cern.ch)
Webhook token (optional) - the token which Zoom requests will authenticate with (get it from Zoom Marketplace)

Allow configuration of piwik plugin using a configuration file

The default configuration options for piwik can not be overwritten by adding an entry in the configuration file indico.conf unlike the customizable settings for Indico.

I think it would be a nice to have, since it will allow having this configuration defined as code . The only working approach at this time is to set them manually through the UI.

Jupyter preview: Update nbconvert dependency

The current (very old) version is broken once we update updat Jinja since it's using a deprecated import that has been removed.

2022-04-25 11:49:44,074  ERROR    0000000000000000  -       indico.plugins            Could not load plugin previewer_jupyter
Traceback (most recent call last):
  ...
  File "/home/adrian/dev/indico/py3/plugins/public/previewer_jupyter/indico_previewer_jupyter/controllers.py", line 12, in <module>
    from nbconvert.exporters import HTMLExporter
  File "/home/adrian/dev/indico/py3/env/lib/python3.9/site-packages/nbconvert/__init__.py", line 4, in <module>
    from .exporters import *
  File "/home/adrian/dev/indico/py3/env/lib/python3.9/site-packages/nbconvert/exporters/__init__.py", line 3, in <module>
    from .html import HTMLExporter
  File "/home/adrian/dev/indico/py3/env/lib/python3.9/site-packages/nbconvert/exporters/html.py", line 12, in <module>
    from jinja2 import contextfilter
ImportError: cannot import name 'contextfilter' from 'jinja2' (/home/adrian/dev/indico/py3/env/lib/python3.9/site-packages/jinja2/__init__.py)

I remember the last time I tried to update (IIRC during early 3.0) the styling was very broken, so there's probably some customization needed to get a similarly "normal" look&feel when previewing a Jupyter notebook within Indico.

Zoom plugin: OAuth integration

It would be great if the indico zoom plugin provided an integration option under OAuth (which does not require developer privileges). Unfortunately I am unable to obtain developer credentials with our zoom instance, so I'm unable to build a JWT App.

Zoom: Option to create "Zoom participants" from registered event participans

This would be a one-off thing (possibly repeatable as long as we can easily know for who we already created a participant to just deal with new ones), probably via a button in the registrant list (for selected registrants) or on the videoconference page (for all registrants).

Clicking it would then create Zoom participants and email the individual join links to each person.

PayPal: show warning about encoding

PayPal's API will send stuff encoded in windows 1252 by default, but mixed with UTF characters (go figure). The only way to reliable fix this issue is to have users configure their PayPal account to use UTF-8 by default. We should add a warning somewhere, linking to the docs, which should contain something like this.

Add hCaptcha plugin

reCaptcha is popular (and convenient) but not privacy-friendly. For those who want better security than the built-in CAPTCHA but don't want to feed Google event more data, this would be a good alternative.

There's good chance that the recaptcha plugin can be just copied with just some minor changes. The APIs look similar enough and they claim the whole thing is a drop-in replacement for recaptcha.

https://docs.hcaptcha.com/
https://www.npmjs.com/package/@hcaptcha/react-hcaptcha

If they are similar enough, we could even consider renaming the plugin before releasing it and supporting both (but good luck finding a decent name for it... indico_rehcaptcha? indico_re_h_captcha?)

Allow customized invoice number

I need an invoice number (also for possible other payment plugins) that is compatible to our books (e.g. the correct cost center)

Currently it's hardcoded:

<input type="hidden" name="invoice" value="{{ registration.event_id }}_{{ registration.id }}">

It would be nice to allow some placeholders to be configured, just like we do in payment_manual. There would be an option in the plugin's settings for the default and another one in the plugin's event settings so it can be customized on the event level.

Zoom: Do not fail if existing co-host can no longer be found

Especially not with the misleading "Could not find Zoom user for alternative host" error message.

Maybe we can simply ignore those (depending on whether that works on the Zoom API or not), or otherwise skip them (ie remove them as co-hosts)

add vidyo room management link

Is your feature request related to a problem? Please describe.
sortof, but not an indico problem, over the last 7 years, across home institutes, browsers, clients, phones, laptops, with contacting the vidyo support, i haven't reliably got vidyo to work.

Describe the solution you'd like
sometimes one needs to connect to the vidyo room administration website as meeting convenor (e.g. mute a participant's microphone, stop someone's screen share). some vidyo clients provide the link to the administration website, but not all (the phone bridge or SIP portal certainly cannot, i haven't found the link in the android client). so a direct link to the administration interface could gap that.

Describe alternatives you've considered
filing a service now ticket to ask the cern vidyo support to do the task (mute, kick, stop share), unfortunately the response time there is on a scale from hours to weeks in my experience and i'm looking for something that does the job within minutes.

Additional context
idea came up when struggling with cern service no ticket INC1853419
2018-11-30-153314_1351x643_scrot

Bad Request After On payment processing INDICO bug

Hello Responsible,

I had build one plugin for payment.

Checkout -> payment -> inidco controller -> success

here via code payment will be deducted, but on page it shows "Bad Request" error message.

I don't even getting any error message on log or not identifying how it comes.

So idoco framework don't tell where exact issue for "Bad Request"

Also strange happen, when I had bad request message on page and in case I refered it works.

But I had to manually fresh every time, which seesm not good solution over indico platform.

Kinldy guide me what steps to carry to resolve it.

Allow chunked uploads to S3

Uploading files larger than 5GB fail otherwise (e.g. material packages).

We need to make sure that the MD5 checksum is correctly stored - AFAIK the ETag in case of chunked uploads is NOT the md5, so we should make sure to attach the x-amz-meta-md5chksum header (unless boto3 does this automatically).

Move CI to GitHub actions instead of Travis

We can probably copy a lot of the general setup steps from Indico.

Some ideas for better performance:

  • install the venv and indico in a setup step (so it gets cached)
  • plugin node modules are relatively small, no need to cache those (would likely be messy since they are plugin-specific)
  • like on travis, have separate parallel jobs for the plugins that need testing (no need to split lint/testing like we do in indico; both these things are much faster for plugins anyway)

Event deletion sometimes fails with error from LiveSync

> Traceback
> ---------
> Traceback (most recent call last):
>   File
> "/opt/indico/env/lib/python2.7/site-packages/indico-1.9.5-py2.7.egg/MaKaC/webinterface/rh/base.py", line 674, in process
>     profile_name, res = self._process_retry(params, i, profile, forced_conflicts)
>   File
> "/opt/indico/env/lib/python2.7/site-packages/indico-1.9.5-py2.7.egg/MaKaC/webinterface/rh/base.py", line 619, in _process_retry
>     return self._process_retry_do(profile)
>   File
> "/opt/indico/env/lib/python2.7/site-packages/indico-1.9.5-py2.7.egg/MaKaC/webinterface/rh/base.py", line 612, in _process_retry_do
>     res = self._process()
>   File
> "/opt/indico/env/lib/python2.7/site-packages/indico-1.9.5-py2.7.egg/MaKaC/webinterface/rh/conferenceModif.py", line 510, in _process
>     self._conf.delete(session.user)
>   File
> "/opt/indico/env/lib/python2.7/site-packages/indico-1.9.5-py2.7.egg/MaKaC/conference.py", line 2552, in delete
>     signals.event.deleted.send(self, user=user)
>   File
> "/opt/indico/env/lib/python2.7/site-packages/blinker/base.py", line 267, in send
>     for receiver in self.receivers_for(sender)]
>   File
> "/opt/indico/env/lib/python2.7/site-packages/flask_pluginengine/util.py", line 192, in wrapped
>     return func(*args, **kwargs)
>   File
> "/opt/indico/env/lib/python2.7/site-packages/indico_livesync/handler.py", line 99, in _deleted
>     _register_deletion(obj, parent)
>   File
> "/opt/indico/env/lib/python2.7/site-packages/indico_livesync/handler.py", line 176, in _register_deletion
>     g.livesync_changes[obj_ref(obj, parent)].add(ChangeType.deleted)
>   File
> "/opt/indico/env/lib/python2.7/site-packages/indico_livesync/util.py", line 33, in obj_ref
>     ref = {'type': 'event', 'category_id': obj.getOwner().id, 'event_id': obj.id}
> AttributeError: 'NoneType' object has no attribute 'id'

432541 is one of the events where it failed the first time, but worked fine when trying it again

storage_s3: Password saved in plain text in database

The password that is set in the plugin settings is stored as plain text in the database. This is actually true for any password that is set via a IndicoPasswordField in any plugin.

I do not think that this is desirable or am I paranoid?

Download tracking fails with strange chars in the URL

Task indico_piwik.queries.tracking.track_download_request with id 177f854b-c41e-402e-b3e7-f7504799b316 raised exception:
"KeyError(u'\\xb4',)"


Task was called with
args: (u"https://indico.cern.ch/event/242207/material/slides/0.pptx?\xb4'0x27",
       'Download - Lopienski-2013.07-students-2-secure-web-applications_print.pptx')
kwargs: {u'__current_plugin__': 'piwik'}.

The contents of the full traceback was:

Traceback (most recent call last):
  File "/opt/indico/env/lib/python2.7/site-packages/celery-3.1.18-py2.7.egg/celery/app/trace.py", line 240, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/opt/indico/env/lib/python2.7/site-packages/indico-1.9.3-py2.7.egg/indico/core/celery/core.py", line 144, in __call__
    return super(IndicoTask, s).__call__(*args, **kwargs)
  File "/opt/indico/env/lib/python2.7/site-packages/celery-3.1.18-py2.7.egg/celery/app/trace.py", line 438, in __protected_call__
    return self.run(*args, **kwargs)
  File "/opt/indico/env/lib/python2.7/site-packages/indico_piwik/queries/tracking.py", line 40, in track_download_request
    action_url = quote(download_url)
  File "/opt/rh/python27/root/usr/lib64/python2.7/urllib.py", line 1282, in quote
    return ''.join(map(quoter, s))
KeyError: u'\xb4'

Zoom plugin: Handle meeting expirations

Zoom meeting expirations are not handled by the webhook event meeting.deleted.
To prevent meetings from expiring unexpectedly, we could periodically pool these for events to happen in the future.

Zoom plugin: add ability to configure cohosts

It'd be great to configure cohosts in the Zoom room configuration dialog. It would be particularly useful when you create a room on behalf of somebody else and also want to cohosts other than yourself, as you cannot do it through the Zoom interface after transferring the ownership to somebody else. BTW it would be great to have the option "add yourself as a cohost" in the same dialog rather than hidden in the menu attached to join button.

Zoom: Do not break meetings with registration enabled

I discovered that in certain conditions, assigning an existing Zoom meeting to an Indico event changes that Zoom meeting from scheduled to recurring.
This by itself is usually not a problem - unless that Zoom meeting required registration. Registration can be required only for scheduled Zoom meetings, and so changing it to a recurring meeting effectively means that registration is not longer required to join that meeting.
This may be very problematic for Zoom meetings when having obligatory registration was crucial - I've been bitten by exactly this earlier this week 🙁

A solution would be to check whether the Zoom meeting uses registration and in that case:

  • prohibit linking it to another event
  • prohibit cloning that event with the VC-cloner enabled

Add an S3 storage plugin

(Brainstorming - comments welcome!)

This storage plugin (storage_s3) would use boto3 (or any other well-maintained AWS/S3 client) to implement a storage backend (s3:...) for attachments etc. backed by S3.

Some functionality the plugin should have:

  • Configurable bucket name (restricted charset, i.e. something like ^[a-z0-9-]{3,63}$)
  • Dynamic bucket names - so you can have one bucket per year/month/week (day might be overkill). either via placeholder in the bucket name or separate option (similar to datestamp in the eos/xrootd backend)
  • Maintenance task (celery): applies to all s3 STORAGE_BACKENDS that use dynamic buckets. create next bucket early enough (e.g. one period before it is needed, e.g. a february bucket would be created on 1st of january, a week 2 bucket would be created beginning of week 1, for yearly it might be enough to do it the month before as well (ie never more than one month before it's needed)). The maintenance task needs to know what ACL etc to set on the bucket.
    Specifying an ACL would probably be ugly, let's see if we can copy an existing "template-like" bucket for this?
  • S3 credentials should be loadable from a file (maybe using the default format uses for aws credentials) in addition to putting them directly in the config string. we could go one step further and add general support for loading settings from a config file, e.g. something like s3:config=/path/to/config.file,rotate=weekly to keep the indico config cleaner when using multiple s3 backends with almost identical configs
  • Backup is out of the scope of this plugin; that would be done separately if needed
  • Downloading files (for users) is done by redirecting to a pre-signed URL; by default we might want to use the 'virtual' addressing_style, but being able to override this probably makes sense. To discuss: always specify content-disposition/content-type with what we have in our database or just specify it during save and assume it remains correct? TTL of the signed links?

While we will most likely use Ceph's S3 API at CERN - also for testing/development - we should make sure the backend works fine with the "real' Amazon S3 as well. The free trial account might do the job, since it includes S3 storage as well.

Useful docs link: http://boto3.readthedocs.io/en/latest/guide/s3.html

Remove hardcoded "bank transfer" reference

Besides the (user-changable) title and the "To pay via bank transfer, please use the following data:" message there are no references to bank transfers in the manual payment plugin. It would be useful to remove that message (people can put it in the custom text) - that way you can use the module e.g. if you just want to put a link to an external payment system.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.