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