A web service for scanning media hosted on a Matrix media repository.
This project requires libolm development headers, as well as libmagic to be installed on the system. On Debian/Ubuntu:
sudo apt install libolm-dev libmagic1
Then, preferably in a virtual environment, install the Matrix Content Scanner:
pip install matrix-content-scanner
Copy and edit the sample configuration file. Each key is documented in this file.
Then run the content scanner (from within your virtual environment if one was created):
python -m matrix_content_scanner.mcs -c CONFIG_FILE
Where CONFIG_FILE
is the path to your configuration file.
See the API documentation for information about how clients are expected to interact with the Matrix Content Scanner.
Migrating from the legacy Matrix Content Scanner
Because it uses the same APIs and Olm pickle format as the legacy Matrix Content Scanner, this project can be used as a drop-in replacement. The only change (apart from the deployment instructions) is the configuration format:
- the
server
section is renamedweb
scan.tempDirectory
is renamedscan.temp_directory
scan.baseUrl
is renameddownload.base_homeserver_url
(and becomes optional)scan.doNotCacheExitCodes
is renamedscan.do_not_cache_exit_codes
scan.directDownload
is removed. Direct download always happens whendownload.base_homeserver_url
is absent from the configuration file, and setting a value for it will always cause files to be downloaded from the server configured.proxy
is renameddownload.proxy
middleware.encryptedBody.pickleKey
is renamedcrypto.pickle_key
middleware.encryptedBody.picklePath
is renamedcrypto.pickle_path
acceptedMimeType
is renamedallowed_mimetypes
requestHeader
is renameddownload.additional_headers
and turned into a dictionary.
Note that the format of the cryptographic pickle file and key are compatible between this project and the legacy Matrix Content Scanner. If no file exist at that path one will be created automatically.
In a virtual environment with pip ≥ 21.1, run
pip install -e .[dev]
To run the unit tests, you can either use:
tox -e py
or
trial tests
To run the linters and mypy
type checker, use ./scripts-dev/lint.sh
.
The exact steps for releasing will vary; but this is an approach taken by the Synapse developers (assuming a Unix-like shell):
-
Set a shell variable to the version you are releasing (this just makes subsequent steps easier):
version=X.Y.Z
-
Update
setup.cfg
so that theversion
is correct. -
Stage the changed files and commit.
git add -u git commit -m v$version -n
-
Push your changes.
git push
-
When ready, create a signed tag for the release:
git tag -s v$version
Base the tag message on the changelog.
-
Push the tag.
git push origin tag v$version
-
Create a release, based on the tag you just pushed, on GitHub or GitLab.
-
Create a source distribution and upload it to PyPI:
python -m build twine upload dist/matrix_content_scanner-$version*