Development of SecureDropUpdater in the journalist_gui Directory#

The SecureDropUpdater is a tool used by the journalists and admins, this tool helps them to update their SecureDrop git repository to the latest released tag. It is a GUI tool and it is written using PyQt5 bindings of the Qt framework. This tool is written using Python3.

Installing the Dependencies in a Virtual Environment#

You can use Python’s built-in venv module to install the dependencies in a virtual environment. From the journalist_gui directory:

python3 -m venv .venv && source .venv/bin/activate
pip install --require-hashes -r dev-requirements.txt

The first command will create a virtual environment and activate it. The second command will install the dependencies, using the exact hashes specified in dev-requirements.txt. Make sure you are using at least Python 3.8.

Note

The Updater GUI does not use a virtual environment on the Tails Workstations. As such, you can only use dependencies present in Tails.

You can run the GUI via:

python3 SecureDropUpdater

Note that since the application expects to run in Tails, you should test its functionality in a Tails VM. You can follow the instructions in the Virtualizing Tails guide to set up your Tails VM.

To Update the UI Design#

The design of the GUI is saved in the journalist_gui/mainwindow.ui file. To update the UI, one has to first install qtcreator tool in the system. We are currently using 5.10.1 version of Qt for this project.

sudo apt install qtcreator python3-pyqt5

If we make any changes to the UI, we will have to use pyuic5 command to update the corresponding Python code.

pyuic5 journalist_gui/mainwindow.ui -o journalist_gui/updaterUI.py

Using Resources in the UI#

All icons and images for the UI is stored in the journalist_gui/static directory. These are known as resources for the project. The journalist_gui/resources.qrc file contains the list of current resources for the project. Each resource needs to be defined inside of a <file></file>.

Example qrc file:

<RCC>
    <qresource prefix="/images">
        <file>static/securedrop.png</file>
        <file>static/securedrop_icon.png</file>
    </qresource>
</RCC>

We will have to update the corresponding Python file for any change in this resource file. We can do that using the following command:

pyrcc5 journalist_gui/resources.qrc -o journalist_gui/resources_rc.py

Note

The updaterUI.py and resources_rc.py files are generated by the tools. So, do not make any changes to these files. Any changes made to these files will be overridden.

Warning

As a reviewer of a PR involving changes to this resource file, you should verify the changes to the file by running pyrcc5 locally.

Adding and Running Test Cases#

We have Python unit tests in the test_gui.py file. Any change in the actual application code will also require adding new test cases or updating the old ones. You can run the tests using the following command:

python3 test_gui.py