Completed merge

This commit is contained in:
NoisyCoil 2022-12-30 19:55:47 +01:00
commit e3613c39fe
29 changed files with 132 additions and 179 deletions

View File

@ -348,6 +348,7 @@ jobs:
run: | run: |
sudo lxd init --auto sudo lxd init --auto
sudo snap install snapcraft --classic sudo snap install snapcraft --classic
sudo ufw disable
- name: Build snap - name: Build snap
run: sudo snapcraft --use-lxd run: sudo snapcraft --use-lxd

View File

@ -13,12 +13,13 @@ name: "CodeQL"
on: on:
push: push:
branches: [ develop, stable ] branches:
- main
pull_request: pull_request:
# The branches below must be a subset of the branches above branches:
branches: [ develop ] - main
schedule: schedule:
- cron: '22 11 * * 5' - cron: '22 11 * * 5'
jobs: jobs:
analyze: analyze:

View File

@ -1,6 +1,12 @@
name: Run Tests name: Run Tests
run-name: Run tests run-name: Run tests
on: [push] on:
push:
branches:
- main
pull_request:
branches:
- main
jobs: jobs:
test-cli: test-cli:

View File

@ -1,5 +1,10 @@
# OnionShare Changelog # OnionShare Changelog
## 2.6.1
* Upgrade Tor, Meek, and obfs4proxy versions
* Bug fix: Restore the primary_action mode settings in a tab after OnionShare reconnects to Tor
## 2.6 ## 2.6
* Major feature: a new 'Quickstart' screen, which enables toggling on or off an animated automatic connection to Tor. This allows configuring network settings prior to automatic connection. * Major feature: a new 'Quickstart' screen, which enables toggling on or off an animated automatic connection to Tor. This allows configuring network settings prior to automatic connection.

View File

@ -1 +1 @@
2.6 2.6.1

45
cli/poetry.lock generated
View File

@ -22,7 +22,7 @@ python-versions = ">=3.7"
[[package]] [[package]]
name = "certifi" name = "certifi"
version = "2022.9.24" version = "2022.12.7"
description = "Python package for providing Mozilla's CA Bundle." description = "Python package for providing Mozilla's CA Bundle."
category = "main" category = "main"
optional = false optional = false
@ -99,6 +99,17 @@ dnspython = ">=1.15.0"
greenlet = ">=0.3" greenlet = ">=0.3"
six = ">=1.10.0" six = ">=1.10.0"
[[package]]
name = "exceptiongroup"
version = "1.0.4"
description = "Backport of PEP 654 (exception groups)"
category = "dev"
optional = false
python-versions = ">=3.7"
[package.extras]
test = ["pytest (>=6)"]
[[package]] [[package]]
name = "Flask" name = "Flask"
version = "2.0.3" version = "2.0.3"
@ -273,14 +284,6 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[package.extras] [package.extras]
test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
[[package]]
name = "py"
version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]] [[package]]
name = "pycparser" name = "pycparser"
version = "2.21" version = "2.21"
@ -325,7 +328,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]] [[package]]
name = "pytest" name = "pytest"
version = "7.1.3" version = "7.2.0"
description = "pytest: simple powerful testing with Python" description = "pytest: simple powerful testing with Python"
category = "dev" category = "dev"
optional = false optional = false
@ -334,12 +337,12 @@ python-versions = ">=3.7"
[package.dependencies] [package.dependencies]
attrs = ">=19.2.0" attrs = ">=19.2.0"
colorama = {version = "*", markers = "sys_platform == \"win32\""} colorama = {version = "*", markers = "sys_platform == \"win32\""}
exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*" iniconfig = "*"
packaging = "*" packaging = "*"
pluggy = ">=0.12,<2.0" pluggy = ">=0.12,<2.0"
py = ">=1.8.2" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""}
tomli = ">=1.0.0"
[package.extras] [package.extras]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"]
@ -514,7 +517,7 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"]
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "^3.7" python-versions = "^3.7"
content-hash = "98b6df16d4977242b4669742c67ac52c85023578a418d2099bf49cd8f8520a22" content-hash = "e3797425212955a094fe10eae238723cfb90bf8132785622a4d44853c2f2927b"
[metadata.files] [metadata.files]
attrs = [ attrs = [
@ -526,8 +529,8 @@ bidict = [
{file = "bidict-0.22.0.tar.gz", hash = "sha256:5c826b3e15e97cc6e615de295756847c282a79b79c5430d3bfc909b1ac9f5bd8"}, {file = "bidict-0.22.0.tar.gz", hash = "sha256:5c826b3e15e97cc6e615de295756847c282a79b79c5430d3bfc909b1ac9f5bd8"},
] ]
certifi = [ certifi = [
{file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"},
{file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"},
] ]
cffi = [ cffi = [
{file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"},
@ -615,6 +618,10 @@ eventlet = [
{file = "eventlet-0.33.1-py2.py3-none-any.whl", hash = "sha256:a085922698e5029f820cf311a648ac324d73cec0e4792877609d978a4b5bbf31"}, {file = "eventlet-0.33.1-py2.py3-none-any.whl", hash = "sha256:a085922698e5029f820cf311a648ac324d73cec0e4792877609d978a4b5bbf31"},
{file = "eventlet-0.33.1.tar.gz", hash = "sha256:afbe17f06a58491e9aebd7a4a03e70b0b63fd4cf76d8307bae07f280479b1515"}, {file = "eventlet-0.33.1.tar.gz", hash = "sha256:afbe17f06a58491e9aebd7a4a03e70b0b63fd4cf76d8307bae07f280479b1515"},
] ]
exceptiongroup = [
{file = "exceptiongroup-1.0.4-py3-none-any.whl", hash = "sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828"},
{file = "exceptiongroup-1.0.4.tar.gz", hash = "sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec"},
]
Flask = [ Flask = [
{file = "Flask-2.0.3-py3-none-any.whl", hash = "sha256:59da8a3170004800a2837844bfa84d49b022550616070f7cb1a659682b2e7c9f"}, {file = "Flask-2.0.3-py3-none-any.whl", hash = "sha256:59da8a3170004800a2837844bfa84d49b022550616070f7cb1a659682b2e7c9f"},
{file = "Flask-2.0.3.tar.gz", hash = "sha256:e1120c228ca2f553b470df4a5fa927ab66258467526069981b3eb0a91902687d"}, {file = "Flask-2.0.3.tar.gz", hash = "sha256:e1120c228ca2f553b470df4a5fa927ab66258467526069981b3eb0a91902687d"},
@ -822,10 +829,6 @@ psutil = [
{file = "psutil-5.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:68b35cbff92d1f7103d8f1db77c977e72f49fcefae3d3d2b91c76b0e7aef48b8"}, {file = "psutil-5.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:68b35cbff92d1f7103d8f1db77c977e72f49fcefae3d3d2b91c76b0e7aef48b8"},
{file = "psutil-5.9.2.tar.gz", hash = "sha256:feb861a10b6c3bb00701063b37e4afc754f8217f0f09c42280586bd6ac712b5c"}, {file = "psutil-5.9.2.tar.gz", hash = "sha256:feb861a10b6c3bb00701063b37e4afc754f8217f0f09c42280586bd6ac712b5c"},
] ]
py = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pycparser = [ pycparser = [
{file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
@ -852,8 +855,8 @@ PySocks = [
{file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"},
] ]
pytest = [ pytest = [
{file = "pytest-7.1.3-py3-none-any.whl", hash = "sha256:1377bda3466d70b55e3f5cecfa55bb7cfcf219c7964629b967c37cf0bda818b7"}, {file = "pytest-7.2.0-py3-none-any.whl", hash = "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71"},
{file = "pytest-7.1.3.tar.gz", hash = "sha256:4f365fec2dff9c1162f834d9f18af1ba13062db0c708bf7b946f8a5c76180c39"}, {file = "pytest-7.2.0.tar.gz", hash = "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59"},
] ]
python-engineio = [ python-engineio = [
{file = "python-engineio-4.3.4.tar.gz", hash = "sha256:d8d8b072799c36cadcdcc2b40d2a560ce09797ab3d2d596b2ad519a5e4df19ae"}, {file = "python-engineio-4.3.4.tar.gz", hash = "sha256:d8d8b072799c36cadcdcc2b40d2a560ce09797ab3d2d596b2ad519a5e4df19ae"},

View File

@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "onionshare_cli" name = "onionshare_cli"
version = "2.6" version = "2.6.1"
description = "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service." description = "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service."
authors = ["Micah Lee <micah@micahflee.com>"] authors = ["Micah Lee <micah@micahflee.com>"]
license = "GPLv3+" license = "GPLv3+"
@ -34,7 +34,7 @@ stem = "1.8.1"
werkzeug = "~2.0.3" werkzeug = "~2.0.3"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
pytest = "*" pytest = ">=7.2.0"
[tool.poetry.scripts] [tool.poetry.scripts]
onionshare-cli = 'onionshare_cli:main' onionshare-cli = 'onionshare_cli:main'

View File

@ -244,17 +244,6 @@ class MainWindow(QtWidgets.QMainWindow):
break break
self.tabs.open_settings_tab(from_autoconnect, active_tab=active_tab) self.tabs.open_settings_tab(from_autoconnect, active_tab=active_tab)
def settings_have_changed(self):
self.common.log("OnionShareGui", "settings_have_changed")
if self.common.gui.onion.is_authenticated():
self.status_bar.clearMessage()
# Tell each tab that settings have changed
for index in range(self.tabs.count()):
tab = self.tabs.widget(index)
tab.settings_have_changed()
def bring_to_front(self): def bring_to_front(self):
self.common.log("MainWindow", "bring_to_front") self.common.log("MainWindow", "bring_to_front")
self.raise_() self.raise_()

View File

@ -315,10 +315,6 @@ class SettingsTab(QtWidgets.QWidget):
return settings return settings
def settings_have_changed(self):
# Global settings have changed
self.common.log("SettingsTab", "settings_have_changed")
def _update_autoupdate_timestamp(self, autoupdate_timestamp): def _update_autoupdate_timestamp(self, autoupdate_timestamp):
self.common.log("SettingsTab", "_update_autoupdate_timestamp") self.common.log("SettingsTab", "_update_autoupdate_timestamp")

View File

@ -564,6 +564,8 @@ class Mode(QtWidgets.QWidget):
self.content_widget.show() self.content_widget.show()
self.tor_not_connected_widget.hide() self.tor_not_connected_widget.hide()
self.primary_action.show() self.primary_action.show()
if not self.tab.timer.isActive():
self.tab.timer.start(500)
def tor_connection_stopped(self): def tor_connection_stopped(self):
""" """

View File

@ -149,11 +149,5 @@ class ChatMode(Mode):
""" """
self.primary_action.hide() self.primary_action.hide()
def on_reload_settings(self):
"""
We should be ok to re-enable the 'Start Receive Mode' button now.
"""
self.primary_action.show()
def update_primary_action(self): def update_primary_action(self):
self.common.log("ChatMode", "update_primary_action") self.common.log("ChatMode", "update_primary_action")

View File

@ -409,12 +409,6 @@ class ReceiveMode(Mode):
self.history.in_progress_count -= 1 self.history.in_progress_count -= 1
self.history.update_in_progress() self.history.update_in_progress()
def on_reload_settings(self):
"""
We should be ok to re-enable the 'Start Receive Mode' button now.
"""
self.primary_action.show()
def reset_info_counters(self): def reset_info_counters(self):
""" """
Set the info counters back to zero. Set the info counters back to zero.

View File

@ -362,16 +362,6 @@ class ShareMode(Mode):
strings._("systray_share_canceled_message"), strings._("systray_share_canceled_message"),
) )
def on_reload_settings(self):
"""
If there were some files listed for sharing, we should be ok to re-enable
the 'Start Sharing' button now.
"""
if self.server_status.file_selection.get_num_files() > 0:
self.primary_action.show()
self.info_label.show()
self.remove_all_button.show()
def update_primary_action(self): def update_primary_action(self):
self.common.log("ShareMode", "update_primary_action") self.common.log("ShareMode", "update_primary_action")

View File

@ -317,16 +317,6 @@ class WebsiteMode(Mode):
""" """
self.primary_action.hide() self.primary_action.hide()
def on_reload_settings(self):
"""
If there were some files listed for sharing, we should be ok to re-enable
the 'Start Sharing' button now.
"""
if self.server_status.file_selection.get_num_files() > 0:
self.primary_action.show()
self.info_label.show()
self.remove_all_button.show()
def update_primary_action(self): def update_primary_action(self):
self.common.log("WebsiteMode", "update_primary_action") self.common.log("WebsiteMode", "update_primary_action")

View File

@ -630,20 +630,6 @@ class Tab(QtWidgets.QWidget):
else: else:
return None return None
def settings_have_changed(self):
# Global settings have changed
self.common.log("Tab", "settings_have_changed")
# We might've stopped the main requests timer if a Tor connection failed. If we've reloaded
# settings, we probably succeeded in obtaining a new connection. If so, restart the timer.
if not self.common.gui.local_only:
if self.common.gui.onion.is_authenticated():
mode = self.get_mode()
if mode:
if not self.timer.isActive():
self.timer.start(500)
mode.on_reload_settings()
def close_tab(self): def close_tab(self):
self.common.log("Tab", "close_tab") self.common.log("Tab", "close_tab")
if self.mode is None: if self.mode is None:

View File

@ -903,7 +903,3 @@ class TorSettingsTab(QtWidgets.QWidget):
# Wait 1ms for the event loop to finish, then quit # Wait 1ms for the event loop to finish, then quit
QtCore.QTimer.singleShot(1, self.common.gui.qtapp.quit) QtCore.QTimer.singleShot(1, self.common.gui.qtapp.quit)
def settings_have_changed(self):
# Global settings have changed
self.common.log("TorSettingsTab", "settings_have_changed")

View File

@ -24,6 +24,6 @@
<update_contact>micah@micahflee.com</update_contact> <update_contact>micah@micahflee.com</update_contact>
<content_rating type="oars-1.1" /> <content_rating type="oars-1.1" />
<releases> <releases>
<release type="development" date="2022-10-09" version="2.6" /> <release type="development" date="2022-10-18" version="2.6.1" />
</releases> </releases>
</component> </component>

53
desktop/poetry.lock generated
View File

@ -45,7 +45,7 @@ uvloop = ["uvloop (>=0.15.2)"]
[[package]] [[package]]
name = "certifi" name = "certifi"
version = "2022.9.24" version = "2022.12.7"
description = "Python package for providing Mozilla's CA Bundle." description = "Python package for providing Mozilla's CA Bundle."
category = "main" category = "main"
optional = false optional = false
@ -151,6 +151,17 @@ dnspython = ">=1.15.0"
greenlet = ">=0.3" greenlet = ">=0.3"
six = ">=1.10.0" six = ">=1.10.0"
[[package]]
name = "exceptiongroup"
version = "1.0.4"
description = "Backport of PEP 654 (exception groups)"
category = "dev"
optional = false
python-versions = ">=3.7"
[package.extras]
test = ["pytest (>=6)"]
[[package]] [[package]]
name = "Flask" name = "Flask"
version = "2.0.3" version = "2.0.3"
@ -306,7 +317,7 @@ python-versions = "*"
[[package]] [[package]]
name = "onionshare-cli" name = "onionshare-cli"
version = "2.6" version = "2.6.1"
description = "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service." description = "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service."
category = "main" category = "main"
optional = false optional = false
@ -402,14 +413,6 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[package.extras] [package.extras]
test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
[[package]]
name = "py"
version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]] [[package]]
name = "pycparser" name = "pycparser"
version = "2.21" version = "2.21"
@ -490,7 +493,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]] [[package]]
name = "pytest" name = "pytest"
version = "7.1.3" version = "7.2.0"
description = "pytest: simple powerful testing with Python" description = "pytest: simple powerful testing with Python"
category = "dev" category = "dev"
optional = false optional = false
@ -499,12 +502,12 @@ python-versions = ">=3.7"
[package.dependencies] [package.dependencies]
attrs = ">=19.2.0" attrs = ">=19.2.0"
colorama = {version = "*", markers = "sys_platform == \"win32\""} colorama = {version = "*", markers = "sys_platform == \"win32\""}
exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*" iniconfig = "*"
packaging = "*" packaging = "*"
pluggy = ">=0.12,<2.0" pluggy = ">=0.12,<2.0"
py = ">=1.8.2" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""}
tomli = ">=1.0.0"
[package.extras] [package.extras]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"]
@ -522,7 +525,7 @@ pytest = ">=5.0"
[[package]] [[package]]
name = "pytest-qt" name = "pytest-qt"
version = "4.1.0" version = "4.2.0"
description = "pytest support for PyQt and PySide applications" description = "pytest support for PyQt and PySide applications"
category = "dev" category = "dev"
optional = false optional = false
@ -739,7 +742,7 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"]
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = ">=3.7,<3.11" python-versions = ">=3.7,<3.11"
content-hash = "d6ad676f3ecea349558ed78d2a764826a485adab6f6535818553666b580c2367" content-hash = "074ec9d83cff69188cad191ec42d1ac60a4f3a12beda367e4bb0e95f4d06fcb1"
[metadata.files] [metadata.files]
attrs = [ attrs = [
@ -774,8 +777,8 @@ black = [
{file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"}, {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"},
] ]
certifi = [ certifi = [
{file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"},
{file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"},
] ]
cffi = [ cffi = [
{file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"},
@ -905,6 +908,10 @@ eventlet = [
{file = "eventlet-0.33.1-py2.py3-none-any.whl", hash = "sha256:a085922698e5029f820cf311a648ac324d73cec0e4792877609d978a4b5bbf31"}, {file = "eventlet-0.33.1-py2.py3-none-any.whl", hash = "sha256:a085922698e5029f820cf311a648ac324d73cec0e4792877609d978a4b5bbf31"},
{file = "eventlet-0.33.1.tar.gz", hash = "sha256:afbe17f06a58491e9aebd7a4a03e70b0b63fd4cf76d8307bae07f280479b1515"}, {file = "eventlet-0.33.1.tar.gz", hash = "sha256:afbe17f06a58491e9aebd7a4a03e70b0b63fd4cf76d8307bae07f280479b1515"},
] ]
exceptiongroup = [
{file = "exceptiongroup-1.0.4-py3-none-any.whl", hash = "sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828"},
{file = "exceptiongroup-1.0.4.tar.gz", hash = "sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec"},
]
Flask = [ Flask = [
{file = "Flask-2.0.3-py3-none-any.whl", hash = "sha256:59da8a3170004800a2837844bfa84d49b022550616070f7cb1a659682b2e7c9f"}, {file = "Flask-2.0.3-py3-none-any.whl", hash = "sha256:59da8a3170004800a2837844bfa84d49b022550616070f7cb1a659682b2e7c9f"},
{file = "Flask-2.0.3.tar.gz", hash = "sha256:e1120c228ca2f553b470df4a5fa927ab66258467526069981b3eb0a91902687d"}, {file = "Flask-2.0.3.tar.gz", hash = "sha256:e1120c228ca2f553b470df4a5fa927ab66258467526069981b3eb0a91902687d"},
@ -1159,10 +1166,6 @@ psutil = [
{file = "psutil-5.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:68b35cbff92d1f7103d8f1db77c977e72f49fcefae3d3d2b91c76b0e7aef48b8"}, {file = "psutil-5.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:68b35cbff92d1f7103d8f1db77c977e72f49fcefae3d3d2b91c76b0e7aef48b8"},
{file = "psutil-5.9.2.tar.gz", hash = "sha256:feb861a10b6c3bb00701063b37e4afc754f8217f0f09c42280586bd6ac712b5c"}, {file = "psutil-5.9.2.tar.gz", hash = "sha256:feb861a10b6c3bb00701063b37e4afc754f8217f0f09c42280586bd6ac712b5c"},
] ]
py = [
{file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
{file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pycparser = [ pycparser = [
{file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
@ -1213,16 +1216,16 @@ PySocks = [
{file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"},
] ]
pytest = [ pytest = [
{file = "pytest-7.1.3-py3-none-any.whl", hash = "sha256:1377bda3466d70b55e3f5cecfa55bb7cfcf219c7964629b967c37cf0bda818b7"}, {file = "pytest-7.2.0-py3-none-any.whl", hash = "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71"},
{file = "pytest-7.1.3.tar.gz", hash = "sha256:4f365fec2dff9c1162f834d9f18af1ba13062db0c708bf7b946f8a5c76180c39"}, {file = "pytest-7.2.0.tar.gz", hash = "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59"},
] ]
pytest-faulthandler = [ pytest-faulthandler = [
{file = "pytest-faulthandler-2.0.1.tar.gz", hash = "sha256:ed72bbce87ac344da81eb7d882196a457d4a1026a3da4a57154dacd85cd71ae5"}, {file = "pytest-faulthandler-2.0.1.tar.gz", hash = "sha256:ed72bbce87ac344da81eb7d882196a457d4a1026a3da4a57154dacd85cd71ae5"},
{file = "pytest_faulthandler-2.0.1-py2.py3-none-any.whl", hash = "sha256:236430ba962fd1c910d670922be55fe5b25ea9bc3fc6561a0cafbb8759e7504d"}, {file = "pytest_faulthandler-2.0.1-py2.py3-none-any.whl", hash = "sha256:236430ba962fd1c910d670922be55fe5b25ea9bc3fc6561a0cafbb8759e7504d"},
] ]
pytest-qt = [ pytest-qt = [
{file = "pytest-qt-4.1.0.tar.gz", hash = "sha256:027f3d3f5dd04af0530d846cf50fb858f719f7e87c2e4a1c686abd4e0f72172a"}, {file = "pytest-qt-4.2.0.tar.gz", hash = "sha256:00a17b586dd530b6d7a9399923a40489ca4a9a309719011175f55dc6b5dc8f41"},
{file = "pytest_qt-4.1.0-py2.py3-none-any.whl", hash = "sha256:edd08dae3b207405edddfc482d4dda4b848e85a8e6a0e7c36f20bac11ab328de"}, {file = "pytest_qt-4.2.0-py2.py3-none-any.whl", hash = "sha256:a7659960a1ab2af8fc944655a157ff45d714b80ed7a6af96a4b5bb99ecf40a22"},
] ]
python-engineio = [ python-engineio = [
{file = "python-engineio-4.3.4.tar.gz", hash = "sha256:d8d8b072799c36cadcdcc2b40d2a560ce09797ab3d2d596b2ad519a5e4df19ae"}, {file = "python-engineio-4.3.4.tar.gz", hash = "sha256:d8d8b072799c36cadcdcc2b40d2a560ce09797ab3d2d596b2ad519a5e4df19ae"},

View File

@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "onionshare" name = "onionshare"
version = "2.6" version = "2.6.1"
description = "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service." description = "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service."
authors = ["Micah Lee <micah@micahflee.com>"] authors = ["Micah Lee <micah@micahflee.com>"]
license = "GPLv3+" license = "GPLv3+"
@ -15,9 +15,9 @@ pyside6 = "^6.4.0"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
click = "*" click = "*"
black = "*" black = "*"
pytest = "*" pytest = ">=7.2.0"
pytest-faulthandler = "*" pytest-faulthandler = "*"
pytest-qt = "*" pytest-qt = ">=4.2.0"
cx_freeze = "*" cx_freeze = "*"
importlib-metadata = "*" importlib-metadata = "*"

View File

@ -1,4 +1,4 @@
$env:OBFS4PROXY_TAG = 'obfs4proxy-0.0.13' $env:OBFS4PROXY_TAG = 'obfs4proxy-0.0.14'
New-Item -ItemType Directory -Force -Path .\build\obfs4proxy New-Item -ItemType Directory -Force -Path .\build\obfs4proxy
cd .\build\obfs4proxy cd .\build\obfs4proxy

View File

@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
OBFS4PROXY_TAG=obfs4proxy-0.0.13 OBFS4PROXY_TAG=obfs4proxy-0.0.14
mkdir -p ./build/obfs4proxy mkdir -p ./build/obfs4proxy
cd ./build/obfs4proxy cd ./build/obfs4proxy

View File

@ -1,4 +1,4 @@
$env:SNOWFLAKE_TAG = 'v2.2.0' $env:SNOWFLAKE_TAG = 'v2.3.1'
New-Item -ItemType Directory -Force -Path .\build\snowflake New-Item -ItemType Directory -Force -Path .\build\snowflake
cd .\build\snowflake cd .\build\snowflake

View File

@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
SNOWFLAKE_TAG=v2.2.0 SNOWFLAKE_TAG=v2.3.1
mkdir -p ./build/snowflake mkdir -p ./build/snowflake
cd ./build/snowflake cd ./build/snowflake

View File

@ -9,28 +9,28 @@ import subprocess
import requests import requests
import click import click
torbrowser_version = "11.5.2" torbrowser_version = "12.0"
expected_win32_sha256 = ( expected_win32_sha256 = (
"07e721ae76bc7eefe25f20792091009238e9568d500331fc64bdd8796fec8c0f" "a9cc0f0af2ce8ca0d7a27d65c7efa37f6419cfc793fa80371e7db73d44b4cc02"
) )
expected_win64_sha256 = ( expected_win64_sha256 = (
"8237bca22b5fa545de21f84ba8c9270c84442d0fc50a2e626f757d069e4bc7a8" "f496cc0219c8b73f1f100124d6514bad55f503ff76202747f23620a6677e83c2"
) )
expected_macos_sha256 = ( expected_macos_sha256 = (
"b80d3dba83b343fab7a6c8fc08440b2751da1ac12f86fe593da8e74069e4d7f6" "11c8360187356e6c0837612a320f1a117303fc449602c9fd73f4faf9f9bbcfc9"
) )
expected_linux64_sha256 = ( expected_linux64_sha256 = (
"90cdce3854e9114ee7232aaa74672a2d9f3a40b6fa8ac33971f586ee3a3cf75a" "850ce601d815bac63e4f5937646d2b497173be28b27b30a7526ebb946a459874"
) )
win32_url = f"https://dist.torproject.org/torbrowser/{torbrowser_version}/torbrowser-install-{torbrowser_version}_en-US.exe" win32_filename = f"torbrowser-install-{torbrowser_version}_ALL.exe"
win32_filename = f"torbrowser-install-{torbrowser_version}_en-US.exe" win32_url = f"https://dist.torproject.org/torbrowser/{torbrowser_version}/{win32_filename}"
win64_url = f"https://dist.torproject.org/torbrowser/{torbrowser_version}/torbrowser-install-win64-{torbrowser_version}_en-US.exe" win64_filename = f"torbrowser-install-win64-{torbrowser_version}_ALL.exe"
win64_filename = f"torbrowser-install-win64-{torbrowser_version}_en-US.exe" win64_url = f"https://dist.torproject.org/torbrowser/{torbrowser_version}/{win64_filename}"
macos_url = f"https://dist.torproject.org/torbrowser/{torbrowser_version}/TorBrowser-{torbrowser_version}-osx64_en-US.dmg" macos_filename = f"TorBrowser-{torbrowser_version}-macos_ALL.dmg"
macos_filename = f"TorBrowser-{torbrowser_version}-osx64_en-US.dmg" macos_url = f"https://dist.torproject.org/torbrowser/{torbrowser_version}/{macos_filename}"
linux64_url = f"https://dist.torproject.org/torbrowser/{torbrowser_version}/tor-browser-linux64-{torbrowser_version}_en-US.tar.xz" linux64_filename = f"tor-browser-linux64-{torbrowser_version}_ALL.tar.xz"
linux64_filename = f"tor-browser-linux64-{torbrowser_version}_en-US.tar.xz" linux64_url = f"https://dist.torproject.org/torbrowser/{torbrowser_version}/{linux64_filename}"
# Common paths # Common paths
@ -46,32 +46,14 @@ def get_tor_windows(platform):
win_filename = win32_filename win_filename = win32_filename
expected_win_sha256 = expected_win32_sha256 expected_win_sha256 = expected_win32_sha256
bin_filenames = [ bin_filenames = [
"libcrypto-1_1.dll", "tor.exe"
"libevent-2-1-7.dll",
"libevent_core-2-1-7.dll",
"libevent_extra-2-1-7.dll",
"libgcc_s_dw2-1.dll",
"libssl-1_1.dll",
"libssp-0.dll",
"libwinpthread-1.dll",
"tor.exe",
"zlib1.dll",
] ]
elif platform == "win64": elif platform == "win64":
win_url = win64_url win_url = win64_url
win_filename = win64_filename win_filename = win64_filename
expected_win_sha256 = expected_win64_sha256 expected_win_sha256 = expected_win64_sha256
bin_filenames = [ bin_filenames = [
"libcrypto-1_1-x64.dll", "tor.exe"
"libevent-2-1-7.dll",
"libevent_core-2-1-7.dll",
"libevent_extra-2-1-7.dll",
"libgcc_s_seh-1.dll",
"libssl-1_1-x64.dll",
"libssp-0.dll",
"libwinpthread-1.dll",
"tor.exe",
"zlib1.dll",
] ]
else: else:
click.echo("invalid platform") click.echo("invalid platform")

View File

@ -3,7 +3,7 @@
import setuptools import setuptools
# The version must be hard-coded because Snapcraft won't have access to ../cli # The version must be hard-coded because Snapcraft won't have access to ../cli
version = "2.6" version = "2.6.1"
setuptools.setup( setuptools.setup(
name="onionshare", name="onionshare",

6
docs/poetry.lock generated
View File

@ -36,7 +36,7 @@ pytz = ">=2015.7"
[[package]] [[package]]
name = "certifi" name = "certifi"
version = "2022.9.24" version = "2022.12.7"
description = "Python package for providing Mozilla's CA Bundle." description = "Python package for providing Mozilla's CA Bundle."
category = "main" category = "main"
optional = false optional = false
@ -462,8 +462,8 @@ Babel = [
{file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"},
] ]
certifi = [ certifi = [
{file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"},
{file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"},
] ]
charset-normalizer = [ charset-normalizer = [
{file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"},

View File

@ -1,6 +1,6 @@
project = "OnionShare" project = "OnionShare"
author = copyright = "Micah Lee, et al." author = copyright = "Micah Lee, et al."
version = release = "2.6" version = release = "2.6.1"
extensions = ["sphinx_rtd_theme"] extensions = ["sphinx_rtd_theme"]
templates_path = ["_templates"] templates_path = ["_templates"]
@ -24,7 +24,7 @@ languages = [
("Українська", "uk"), # Ukrainian ("Українська", "uk"), # Ukrainian
] ]
versions = ["2.3", "2.3.1", "2.3.2", "2.3.3", "2.4", "2.5", "2.6"] versions = ["2.3", "2.3.1", "2.3.2", "2.3.3", "2.4", "2.5", "2.6", "2.6.1"]
html_theme = "sphinx_rtd_theme" html_theme = "sphinx_rtd_theme"
html_logo = "_static/logo.png" html_logo = "_static/logo.png"

View File

@ -35,18 +35,20 @@ modules:
- /bin - /bin
sources: sources:
- type: archive - type: archive
sha256: 7ff5f1cc4291fffb6d5a3098b3090abe4d415da2adec740b4e901893d95d7137 sha256: f61210ae24e6882d5d0ca0059229e5dc4f35e2bca92dd6caf96c0f41943a8294
url: https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-5.15.3-src/pyside-setup-opensource-src-5.15.3.tar.xz url: https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-5.15.7-src/pyside-setup-opensource-src-5.15.7.tar.xz
- type: shell - type: shell
commands: commands:
- mkdir -p /app/include/qt5tmp && cp -R /usr/include/Qt* /app/include/qt5tmp # https://bugreports.qt.io/browse/PYSIDE-787 - mkdir -p /app/include/qt5tmp && cp -R /usr/include/Qt* /app/include/qt5tmp # https://bugreports.qt.io/browse/PYSIDE-787
- sed -i 's|\(--include-paths=\)|\1/app/include/qt5tmp:|' sources/pyside2/cmake/Macros/PySideModules.cmake - sed -i 's|\(--include-paths=\)|\1/app/include/qt5tmp:|' sources/pyside2/cmake/Macros/PySideModules.cmake
- sed -i s/'<private\/qaccessiblequickview_p.h>'/'\"private\/qaccessiblequickview_p.h\"'/ /app/include/qt5tmp/QtQuickWidgets/qaccessiblequickwidget.h
- mkdir -p /app/include/qt5tmp/QtQuickWidgets/private && cp /app/include/qt5tmp/QtQuick/5.15.7/QtQuick/private/qaccessiblequickview_p.h /app/include/qt5tmp/QtQuickWidgets/private/qaccessiblequickview_p.h
- name: tor - name: tor
buildsystem: autotools buildsystem: autotools
sources: sources:
- type: archive - type: archive
sha256: d39d38598208f4d6201d7edc6ad573b3a898a932a5c68d3074016a9525519b22 sha256: 3b5d969712c467851bd028f314343ef15a97ea457191e93ffa97310b05b9e395
url: https://dist.torproject.org/tor-0.4.7.9.tar.gz url: https://dist.torproject.org/tor-0.4.7.12.tar.gz
modules: modules:
- name: libevent - name: libevent
buildsystem: autotools buildsystem: autotools
@ -80,7 +82,7 @@ modules:
dest: src/golang.org/x/sys dest: src/golang.org/x/sys
- type: git - type: git
url: https://gitlab.com/yawning/obfs4 url: https://gitlab.com/yawning/obfs4
commit: e330d1b7024b4ab04f7d96cc1afc61325744fafc commit: 336a71d6e4cfd2d33e9c57797828007ad74975e9
dest: src/gitlab.com/yawning/obfs4.git dest: src/gitlab.com/yawning/obfs4.git
- type: git - type: git
url: https://gitlab.com/yawning/utls url: https://gitlab.com/yawning/utls
@ -90,6 +92,14 @@ modules:
url: https://gitlab.com/yawning/bsaes url: https://gitlab.com/yawning/bsaes
commit: 0a714cd429ec754482b4001e918db30cd2094405 commit: 0a714cd429ec754482b4001e918db30cd2094405
dest: src/gitlab.com/yawning/bsaes.git dest: src/gitlab.com/yawning/bsaes.git
- type: git
url: https://gitlab.com/yawning/edwards25519-extra
commit: def713fd18e464864613d2b55ef41a21df2c9493
dest: src/gitlab.com/yawning/edwards25519-extra.git
- type: git
url: https://github.com/FiloSottile/edwards25519
commit: 8c58ed0e35502a485538e4c5ec086070840f3410
dest: src/filippo.io/edwards25519
- type: git - type: git
url: https://git.torproject.org/pluggable-transports/goptlib url: https://git.torproject.org/pluggable-transports/goptlib
commit: 13b7b3552e1eef32e4d8a2a7813f22488f91dc09 commit: 13b7b3552e1eef32e4d8a2a7813f22488f91dc09
@ -173,8 +183,12 @@ modules:
dest: src/git.torproject.org/pluggable-transports/goptlib.git dest: src/git.torproject.org/pluggable-transports/goptlib.git
- type: git - type: git
url: https://git.torproject.org/pluggable-transports/snowflake url: https://git.torproject.org/pluggable-transports/snowflake
commit: ead5a960d7fa19dc890ccbfc0765c5ab6629eaa9 commit: 36f03dfd4483922b3e7400dedc71df9cf2f30b6b
dest: src/git.torproject.org/pluggable-transports/snowflake.git dest: src/git.torproject.org/pluggable-transports/snowflake.git
- type: git
url: https://github.com/refraction-networking/utls
commit: 0b2885c8c0d4467cfe98136748a9d011d0b8fff0
dest: src/github.com/refraction-networking/utls
- type: git - type: git
url: https://github.com/templexxx/xorsimd url: https://github.com/templexxx/xorsimd
commit: e2f34adfb57b524164fc712df2fcfd991ed0ccad commit: e2f34adfb57b524164fc712df2fcfd991ed0ccad

View File

@ -1,6 +1,6 @@
name: onionshare name: onionshare
base: core20 base: core20
version: "2.6" version: "2.6.1"
summary: Securely and anonymously share files, host websites, and chat using Tor summary: Securely and anonymously share files, host websites, and chat using Tor
description: | description: |
OnionShare lets you securely and anonymously send and receive files. It works by starting OnionShare lets you securely and anonymously send and receive files. It works by starting
@ -12,6 +12,7 @@ grade: stable # stable or devel
confinement: strict confinement: strict
architectures: architectures:
- build-on: i386
- build-on: amd64 - build-on: amd64
- build-on: arm64 - build-on: arm64
- build-on: armhf - build-on: armhf
@ -193,8 +194,8 @@ parts:
after: [onionshare-cli] after: [onionshare-cli]
tor: tor:
source: https://dist.torproject.org/tor-0.4.7.9.tar.gz source: https://dist.torproject.org/tor-0.4.7.12.tar.gz
source-checksum: sha256/d39d38598208f4d6201d7edc6ad573b3a898a932a5c68d3074016a9525519b22 source-checksum: sha256/3b5d969712c467851bd028f314343ef15a97ea457191e93ffa97310b05b9e395
source-type: tar source-type: tar
plugin: autotools plugin: autotools
autotools-configure-parameters: autotools-configure-parameters:
@ -216,7 +217,7 @@ parts:
- go/latest/stable - go/latest/stable
source: https://gitlab.com/yawning/obfs4.git source: https://gitlab.com/yawning/obfs4.git
source-type: git source-type: git
source-tag: obfs4proxy-0.0.13 source-tag: obfs4proxy-0.0.14
snowflake-client: snowflake-client:
plugin: go plugin: go
@ -224,7 +225,7 @@ parts:
- go/latest/stable - go/latest/stable
source: https://git.torproject.org/pluggable-transports/snowflake.git source: https://git.torproject.org/pluggable-transports/snowflake.git
source-type: git source-type: git
source-tag: v2.2.0 source-tag: v2.3.1
organize: organize:
bin/client: bin/snowflake-client bin/client: bin/snowflake-client