diff options
-rw-r--r-- | gnu/packages/tor.scm | 168 |
1 files changed, 128 insertions, 40 deletions
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm index 2284483ca3..86ae5d0ea4 100644 --- a/gnu/packages/tor.scm +++ b/gnu/packages/tor.scm @@ -4,7 +4,7 @@ ;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is> ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr> -;;; Copyright © 2017, 2018, 2019 Eric Bavier <bavier@member.fsf.org> +;;; Copyright © 2017, 2018, 2019, 2021 Eric Bavier <bavier@posteo.net> ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com> @@ -221,10 +221,10 @@ tastes. It has application for both stand-alone systems and multi-user networks.") (license license:gpl2+))) -(define-public onionshare +(define-public onionshare-cli (package - (name "onionshare") - (version "2.2") + (name "onionshare-cli") + (version "2.3.1") (source (origin (method git-fetch) @@ -233,53 +233,141 @@ networks.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "0m8ygxcyp3nfzzhxs2dfnpqwh1vx0aws44lszpnnczz4fks3a5j4")))) + (base32 "1llvnvb676s2cs6a4y7isxdj75ddfvskw1p93v5m35vsw7f72kqz")))) (build-system python-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'unpack 'fix-install-path - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (onionshare (string-append out "/share/onionshare"))) - (substitute* '("setup.py" "onionshare/common.py") - (("sys.prefix,") (string-append "'" out "',"))) - (substitute* "setup.py" - ;; For the nautilus plugin. - (("/usr/share/nautilus") "share/nautilus")) - (substitute* "install/org.onionshare.OnionShare.desktop" - (("/usr") out)) - #t))) - (delete 'check) - (add-before 'strip 'check - ;; After all the patching we run the tests after installing. - (lambda _ - (setenv "HOME" "/tmp") ; Some tests need a writable homedir - (invoke "pytest" "tests/") - #t))))) (native-inputs `(("python-pytest" ,python-pytest))) (inputs - `(("python-pycryptodome" ,python-pycryptodome) + ;; TODO: obfs4proxy + `(("python-click" ,python-click) + ("python-eventlet" ,python-eventlet) ("python-flask" ,python-flask) ("python-flask-httpauth" ,python-flask-httpauth) - ("python-nautilus" ,python-nautilus) - ("python-sip" ,python-sip) - ("python-stem" ,python-stem) + ("python-flask-socketio" ,python-flask-socketio) + ("python-psutil" ,python-psutil) + ("python-pycryptodome" ,python-pycryptodome) ("python-pysocks" ,python-pysocks) - ("python-pyqt" ,python-pyqt))) + ("python-requests" ,python-requests) + ("python-stem" ,python-stem) + ("python-unidecode" ,python-unidecode) + ("python-urllib3" ,python-urllib3) + ("tor" ,tor))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'bake-tor + (lambda* (#:key inputs #:allow-other-keys) + (substitute* (list "cli/onionshare_cli/common.py" + "desktop/src/onionshare/gui_common.py") + (("shutil\\.which\\(\\\"tor\\\"\\)") + (string-append "\"" (which "tor") "\""))) + #t)) + (add-before 'build 'change-directory + (lambda _ (chdir "cli") #t)) + (replace 'check + (lambda _ + (setenv "HOME" "/tmp") + ;; Greendns is not needed for testing, and if eventlet tries to + ;; load it, an OSError is thrown when getprotobyname is called. + ;; Thankfully there is an environment variable to disable the + ;; greendns import, so use it: + (setenv "EVENTLET_NO_GREENDNS" "yes") + (invoke "pytest" "-v" "./tests")))))) (home-page "https://onionshare.org/") (synopsis "Securely and anonymously share files") - (description "OnionShare is a tool for securely and anonymously sending -and receiving files using Tor onion services. It works by starting a web -server directly on your computer and making it accessible as an unguessable -Tor web address that others can load in a Tor-enabled web browser to download -files from you, or upload files to you. It doesn't require setting up a -separate server, using a third party file-sharing service, or even logging -into an account.") - ;; Bundled, minified jquery is expat licensed. + (description "OnionShare lets you securely and anonymously share files, +host websites, and chat with friends using the Tor network. + +This package contains @code{onionshare-cli}, a command-line interface to +OnionShare.") + ;; Bundled, minified jquery and socket.io are expat licensed. (license (list license:gpl3+ license:expat)))) +(define-public onionshare + (package (inherit onionshare-cli) + (name "onionshare") + (arguments + (substitute-keyword-arguments (package-arguments onionshare-cli) + ((#:phases phases) + `(modify-phases ,phases + (replace 'change-directory + (lambda _ (chdir "desktop/src") #t)) + (add-after 'unpack 'patch-tests + (lambda _ + ;; Disable tests that require starting servers, which will hang + ;; during build: + ;; - test_autostart_and_autostop_timer_mismatch + ;; - test_autostart_timer + ;; - test_autostart_timer_too_short + ;; - test_autostop_timer_too_short + (substitute* "desktop/tests/test_gui_share.py" + (("( *)def test_autost(art|op)_(timer(_too_short)?|and_[^(]*)\\(" & >) + (string-append > "@pytest.mark.skip\n" &))) + ;; - test_13_quit_with_server_started_should_warn + (substitute* "desktop/tests/test_gui_tabs.py" + (("( *)def test_13" & >) + (string-append > "@pytest.mark.skip\n" &))) + ;; Remove multiline load-path adjustment, so that onionshare-cli + ;; modules are loaded from input + (use-modules (ice-9 regex) + (ice-9 rdelim)) + (with-atomic-file-replacement "desktop/tests/conftest.py" + (let ((start-rx (make-regexp "^# Allow importing"))) + (lambda (in out) + (let loop () + (let ((line (read-line in 'concat))) + (if (regexp-exec start-rx line) + (begin ; slurp until closing paren + (let slurp () + (let ((line (read-line in 'concat))) + (if (string=? line ")\n") + (dump-port in out) ; done + (slurp))))) + (begin + (display line out) + (loop)))))))))) + (replace 'check + (lambda _ + ;; Some tests need a writable homedir: + (setenv "HOME" "/tmp") + ;; Ensure installed modules can be found: + (setenv "PYTHONPATH" + (string-append %output "/lib/python" + ,(version-major+minor (package-version python)) + "/site-packages:" + (getenv "PYTHONPATH"))) + ;; Avoid `getprotobyname` issues: + (setenv "EVENTLET_NO_GREENDNS" "yes") + ;; Make Qt render "offscreen": + (setenv "QT_QPA_PLATFORM" "offscreen") + ;; Must be run from "desktop" dir: + (chdir "..") + (invoke "./tests/run.sh"))) + (add-after 'install 'install-data + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (share (string-append out "/share"))) + (install-file "org.onionshare.OnionShare.svg" + (string-append share "/icons/hicolor/scalable/apps")) + (install-file "org.onionshare.OnionShare.desktop" + (string-append share "/applications")) + #t))))))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (inputs + ;; TODO: obfs4proxy + `(("onionshare-cli" ,onionshare-cli) + ("python-shiboken-2" ,python-shiboken-2) + ("python-pyside-2" ,python-pyside-2) + ("python-qrcode" ,python-qrcode) + ;; The desktop client uses onionshare-cli like a python module. But + ;; propagating onionshare-cli's inputs is not great, since a user would + ;; not expect to have those installed when using onionshare-cli as a + ;; standalone utility. So add onionshare-cli's inputs here. + ,@(package-inputs onionshare-cli))) + (description "OnionShare lets you securely and anonymously share files, +host websites, and chat with friends using the Tor network."))) + (define-public nyx (package (name "nyx") |