Merge pull request #103844 from lourkeur/onionshare-2.3

onionshare: 2.2 -> 2.3.1

Changed files
+116 -157
pkgs
applications
+54 -38
pkgs/applications/networking/onionshare/default.nix
···
{
lib,
buildPythonApplication,
-
stdenv,
substituteAll,
fetchFromGitHub,
isPy3k,
flask,
flask-httpauth,
+
flask-socketio,
stem,
+
psutil,
pyqt5,
pycrypto,
-
pysocks,
-
pytest,
+
pyside2,
+
pytestCheckHook,
+
qrcode,
qt5,
requests,
+
unidecode,
tor,
obfs4,
}:
let
-
version = "2.2";
+
version = "2.3.1";
src = fetchFromGitHub {
owner = "micahflee";
repo = "onionshare";
rev = "v${version}";
-
sha256 = "0m8ygxcyp3nfzzhxs2dfnpqwh1vx0aws44lszpnnczz4fks3a5j4";
+
sha256 = "sha256-H09x3OF6l1HLHukGPvV2rZUjW9fxeKKMZkKbY9a2m9I=";
};
meta = with lib; {
description = "Securely and anonymously send and receive files";
···
maintainers = with maintainers; [ lourkeur ];
};
-
common = buildPythonApplication {
-
pname = "onionshare-common";
-
inherit version meta src;
-
+
in rec {
+
onionshare = buildPythonApplication {
+
pname = "onionshare-cli";
+
inherit version meta;
+
src = "${src}/cli";
+
patches = [
+
# hardcode store paths of dependencies
+
(substituteAll {
+
src = ./fix-paths.patch;
+
inherit tor obfs4;
+
inherit (tor) geoip;
+
})
+
];
disable = !isPy3k;
propagatedBuildInputs = [
flask
flask-httpauth
+
flask-socketio
stem
-
pyqt5
+
psutil
pycrypto
-
pysocks
requests
+
unidecode
];
+
buildInputs = [
tor
obfs4
];
+
checkInputs = [
+
pytestCheckHook
+
];
+
+
preCheck = ''
+
# Tests use the home directory
+
export HOME="$(mktemp -d)"
+
'';
+
};
+
+
onionshare-gui = buildPythonApplication {
+
pname = "onionshare";
+
inherit version meta;
+
src = "${src}/desktop/src";
patches = [
+
# hardcode store paths of dependencies
(substituteAll {
-
src = ./fix-paths.patch;
+
src = ./fix-paths-gui.patch;
inherit tor obfs4;
inherit (tor) geoip;
})
];
-
postPatch = "substituteInPlace onionshare/common.py --subst-var-by common $out";
-
doCheck = false;
-
};
-
in
-
{
-
onionshare = stdenv.mkDerivation {
-
pname = "onionshare";
-
inherit version meta;
+
disable = !isPy3k;
+
propagatedBuildInputs = [
+
onionshare
+
pyqt5
+
pyside2
+
psutil
+
qrcode
+
];
-
dontUnpack = true;
+
nativeBuildInputs = [ qt5.wrapQtAppsHook ];
-
inherit common;
-
installPhase = ''
-
mkdir -p $out/bin
-
cp $common/bin/onionshare -t $out/bin
+
preFixup = ''
+
wrapQtApp $out/bin/onionshare
'';
-
};
-
onionshare-gui = stdenv.mkDerivation {
-
pname = "onionshare-gui";
-
inherit version meta;
-
nativeBuildInputs = [ qt5.wrapQtAppsHook ];
-
-
dontUnpack = true;
+
doCheck = false;
-
inherit common;
-
installPhase = ''
-
mkdir -p $out/bin
-
cp $common/bin/onionshare-gui -t $out/bin
-
wrapQtApp $out/bin/onionshare-gui
-
'';
+
pythonImportsCheck = [ "onionshare" ];
};
}
+37
pkgs/applications/networking/onionshare/fix-paths-gui.patch
···
+
+
--- a/onionshare/gui_common.py
+
+++ b/onionshare/gui_common.py
+
@@ -376,29 +376,10 @@ class GuiCommon:
+
}
+
+
def get_tor_paths(self):
+
- if self.common.platform == "Linux":
+
- tor_path = shutil.which("tor")
+
- obfs4proxy_file_path = shutil.which("obfs4proxy")
+
- prefix = os.path.dirname(os.path.dirname(tor_path))
+
- tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip")
+
- tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6")
+
- elif self.common.platform == "Windows":
+
- base_path = self.get_resource_path("tor")
+
- tor_path = os.path.join(base_path, "Tor", "tor.exe")
+
- obfs4proxy_file_path = os.path.join(base_path, "Tor", "obfs4proxy.exe")
+
- tor_geo_ip_file_path = os.path.join(base_path, "Data", "Tor", "geoip")
+
- tor_geo_ipv6_file_path = os.path.join(base_path, "Data", "Tor", "geoip6")
+
- elif self.common.platform == "Darwin":
+
- base_path = self.get_resource_path("tor")
+
- tor_path = os.path.join(base_path, "tor")
+
- obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy.exe")
+
- tor_geo_ip_file_path = os.path.join(base_path, "geoip")
+
- tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6")
+
- elif self.common.platform == "BSD":
+
- tor_path = "/usr/local/bin/tor"
+
- tor_geo_ip_file_path = "/usr/local/share/tor/geoip"
+
- tor_geo_ipv6_file_path = "/usr/local/share/tor/geoip6"
+
- obfs4proxy_file_path = "/usr/local/bin/obfs4proxy"
+
+ tor_path = "@tor@/bin/tor"
+
+ tor_geo_ip_file_path = "@geoip@/share/tor/geoip"
+
+ tor_geo_ipv6_file_path = "@geoip@/share/tor/geoip6"
+
+ obfs4proxy_file_path = "@obfs4@/bin/obfs4proxy"
+
+
return (
+
tor_path,
+25 -119
pkgs/applications/networking/onionshare/fix-paths.patch
···
-
diff --git a/onionshare/common.py b/onionshare/common.py
-
index 3373462..7fd245b 100644
-
--- a/onionshare/common.py
-
+++ b/onionshare/common.py
-
@@ -87,66 +87,16 @@ class Common(object):
-
),
-
"share",
-
)
-
- if not os.path.exists(prefix):
-
- # While running tests during stdeb bdist_deb, look 3 directories up for the share folder
-
- prefix = os.path.join(
-
- os.path.dirname(
-
- os.path.dirname(os.path.dirname(os.path.dirname(prefix)))
-
- ),
-
- "share",
-
- )
-
-
-
- elif self.platform == "BSD" or self.platform == "Linux":
-
- # Assume OnionShare is installed systemwide in Linux, since we're not running in dev mode
-
- prefix = os.path.join(sys.prefix, "share/onionshare")
-
-
-
- elif getattr(sys, "frozen", False):
-
- # Check if app is "frozen"
-
- # https://pythonhosted.org/PyInstaller/#run-time-information
-
- if self.platform == "Darwin":
-
- prefix = os.path.join(sys._MEIPASS, "share")
-
- elif self.platform == "Windows":
-
- prefix = os.path.join(os.path.dirname(sys.executable), "share")
-
+ else:
-
+ prefix = "@common@/share/onionshare"
-
-
return os.path.join(prefix, filename)
-
+
--- a/onionshare_cli/common.py
+
+++ b/onionshare_cli/common.py
+
@@ -86,33 +86,10 @@ class Common:
+
return path
+
def get_tor_paths(self):
- if self.platform == "Linux":
-
- tor_path = "/usr/bin/tor"
-
- tor_geo_ip_file_path = "/usr/share/tor/geoip"
-
- tor_geo_ipv6_file_path = "/usr/share/tor/geoip6"
-
- obfs4proxy_file_path = "/usr/bin/obfs4proxy"
+
- tor_path = shutil.which("tor")
+
- if not tor_path:
+
- raise CannotFindTor()
+
- obfs4proxy_file_path = shutil.which("obfs4proxy")
+
- prefix = os.path.dirname(os.path.dirname(tor_path))
+
- tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip")
+
- tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6")
- elif self.platform == "Windows":
-
- base_path = os.path.join(
-
- os.path.dirname(os.path.dirname(self.get_resource_path(""))), "tor"
-
- )
-
- tor_path = os.path.join(os.path.join(base_path, "Tor"), "tor.exe")
-
- obfs4proxy_file_path = os.path.join(
-
- os.path.join(base_path, "Tor"), "obfs4proxy.exe"
-
- )
-
- tor_geo_ip_file_path = os.path.join(
-
- os.path.join(os.path.join(base_path, "Data"), "Tor"), "geoip"
-
- )
-
- tor_geo_ipv6_file_path = os.path.join(
-
- os.path.join(os.path.join(base_path, "Data"), "Tor"), "geoip6"
-
- )
+
- base_path = self.get_resource_path("tor")
+
- tor_path = os.path.join(base_path, "Tor", "tor.exe")
+
- obfs4proxy_file_path = os.path.join(base_path, "Tor", "obfs4proxy.exe")
+
- tor_geo_ip_file_path = os.path.join(base_path, "Data", "Tor", "geoip")
+
- tor_geo_ipv6_file_path = os.path.join(base_path, "Data", "Tor", "geoip6")
- elif self.platform == "Darwin":
-
- base_path = os.path.dirname(
-
- os.path.dirname(os.path.dirname(self.get_resource_path("")))
-
- )
-
- tor_path = os.path.join(base_path, "Resources", "Tor", "tor")
-
- tor_geo_ip_file_path = os.path.join(base_path, "Resources", "Tor", "geoip")
-
- tor_geo_ipv6_file_path = os.path.join(
-
- base_path, "Resources", "Tor", "geoip6"
-
- )
-
- obfs4proxy_file_path = os.path.join(
-
- base_path, "Resources", "Tor", "obfs4proxy"
-
- )
+
- tor_path = shutil.which("tor")
+
- if not tor_path:
+
- raise CannotFindTor()
+
- obfs4proxy_file_path = shutil.which("obfs4proxy")
+
- prefix = os.path.dirname(os.path.dirname(tor_path))
+
- tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip")
+
- tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6")
- elif self.platform == "BSD":
- tor_path = "/usr/local/bin/tor"
- tor_geo_ip_file_path = "/usr/local/share/tor/geoip"
···
+ tor_geo_ip_file_path = "@geoip@/share/tor/geoip"
+ tor_geo_ipv6_file_path = "@geoip@/share/tor/geoip6"
+ obfs4proxy_file_path = "@obfs4@/bin/obfs4proxy"
-
+
return (
tor_path,
-
diff --git a/setup.py b/setup.py
-
index 9af72fc..53ca47b 100644
-
--- a/setup.py
-
+++ b/setup.py
-
@@ -70,41 +70,41 @@ classifiers = [
-
]
-
data_files = [
-
(
-
- os.path.join(sys.prefix, "share/applications"),
-
+ "share/applications",
-
["install/org.onionshare.OnionShare.desktop"],
-
),
-
(
-
- os.path.join(sys.prefix, "share/icons/hicolor/scalable/apps"),
-
+ "share/icons/hicolor/scalable/apps",
-
["install/org.onionshare.OnionShare.svg"],
-
),
-
(
-
- os.path.join(sys.prefix, "share/metainfo"),
-
+ "share/metainfo",
-
["install/org.onionshare.OnionShare.appdata.xml"],
-
),
-
- (os.path.join(sys.prefix, "share/onionshare"), file_list("share")),
-
- (os.path.join(sys.prefix, "share/onionshare/images"), file_list("share/images")),
-
- (os.path.join(sys.prefix, "share/onionshare/locale"), file_list("share/locale")),
-
+ ( "share/onionshare", file_list("share")),
-
+ ( "share/onionshare/images", file_list("share/images")),
-
+ ( "share/onionshare/locale", file_list("share/locale")),
-
(
-
- os.path.join(sys.prefix, "share/onionshare/templates"),
-
+ "share/onionshare/templates",
-
file_list("share/templates"),
-
),
-
(
-
- os.path.join(sys.prefix, "share/onionshare/static/css"),
-
+ "share/onionshare/static/css",
-
file_list("share/static/css"),
-
),
-
(
-
- os.path.join(sys.prefix, "share/onionshare/static/img"),
-
+ "share/onionshare/static/img",
-
file_list("share/static/img"),
-
),
-
(
-
- os.path.join(sys.prefix, "share/onionshare/static/js"),
-
+ "share/onionshare/static/js",
-
file_list("share/static/js"),
-
),
-
]
-
if not platform.system().endswith("BSD") and platform.system() != "DragonFly":
-
data_files.append(
-
(
-
- "/usr/share/nautilus-python/extensions/",
-
+ "share/nautilus-python/extensions/",
-
["install/scripts/onionshare-nautilus.py"],
-
)
-
)