From 445a8423d5118f47c499de6ad35c97b9c15585a9 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Mon, 28 May 2018 15:52:43 +1000 Subject: [PATCH 01/38] Fix some lingering attribute/module references that had not been updated to use their new names/paths --- onionshare_gui/onionshare_gui.py | 4 ++-- onionshare_gui/settings_dialog.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index d5a0889a..527129e9 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -560,7 +560,7 @@ class OnionShareGui(QtWidgets.QMainWindow): self.primary_action.hide() self.info_widget.hide() self.status_bar.showMessage(strings._('gui_tor_connection_lost', True)) - if self.systemTray.supportsMessages() and self.settings.get('systray_notifications'): + if self.systemTray.supportsMessages() and self.common.settings.get('systray_notifications'): self.systemTray.showMessage(strings._('gui_tor_connection_lost', True), strings._('gui_tor_connection_error_settings', True)) # scroll to the bottom of the dl progress bar log pane @@ -585,7 +585,7 @@ class OnionShareGui(QtWidgets.QMainWindow): elif event["type"] == self.web.REQUEST_DOWNLOAD: self.downloads.no_downloads_label.hide() - self.downloads.add_download(event["data"]["id"], web.zip_filesize) + self.downloads.add_download(event["data"]["id"], self.web.zip_filesize) self.new_download = True self.downloads_in_progress += 1 self.update_downloads_in_progress(self.downloads_in_progress) diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index 94aa8342..20c7403d 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -716,7 +716,7 @@ class SettingsDialog(QtWidgets.QDialog): self.common.log('SettingsDialog', 'save_clicked', 'rebooting the Onion') self.onion.cleanup() - tor_con = TorConnectionDialog(self.qtapp, settings, self.onion) + tor_con = TorConnectionDialog(self.common, self.qtapp, self.onion, settings) tor_con.start() self.common.log('SettingsDialog', 'save_clicked', 'Onion done rebooting, connected to Tor: {}'.format(self.onion.connected_to_tor)) From 348bf16cef9a1772af7ba2034ca766aaab69217f Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Mon, 28 May 2018 16:14:44 +1000 Subject: [PATCH 02/38] Fix installation of static assets on MacOS and probably Windows too --- install/pyinstaller.spec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/install/pyinstaller.spec b/install/pyinstaller.spec index a4f1532a..716eec88 100644 --- a/install/pyinstaller.spec +++ b/install/pyinstaller.spec @@ -21,7 +21,9 @@ a = Analysis( ('../share/images/*', 'share/images'), ('../share/locale/*', 'share/locale'), ('../share/templates/*', 'share/templates'), - ('../share/static/*', 'share/static') + ('../share/static/css/*', 'share/static/css'), + ('../share/static/img/*', 'share/static/img'), + ('../share/static/js/*', 'share/static/js') ], hiddenimports=[], hookspath=[], From 536ea0ffc9c3ac6eb79a06f8d9a65f14436d827c Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 17 Jun 2018 16:09:37 -0700 Subject: [PATCH 03/38] Added licenses for tor and obfs4 --- install/licenses/LICENSE.obfs4 | 55 +++++ install/licenses/LICENSE.tor | 381 +++++++++++++++++++++++++++++++++ install/licenses/readme.txt | 1 + 3 files changed, 437 insertions(+) create mode 100644 install/licenses/LICENSE.obfs4 create mode 100644 install/licenses/LICENSE.tor create mode 100644 install/licenses/readme.txt diff --git a/install/licenses/LICENSE.obfs4 b/install/licenses/LICENSE.obfs4 new file mode 100644 index 00000000..6b89f8ca --- /dev/null +++ b/install/licenses/LICENSE.obfs4 @@ -0,0 +1,55 @@ +Copyright (c) 2014, Yawning Angel +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +============================================================================== + +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/install/licenses/LICENSE.tor b/install/licenses/LICENSE.tor new file mode 100644 index 00000000..3d0f8c12 --- /dev/null +++ b/install/licenses/LICENSE.tor @@ -0,0 +1,381 @@ + This file contains the license for Tor, + a free software project to provide anonymity on the Internet. + + It also lists the licenses for other components used by Tor. + + For more information about Tor, see https://www.torproject.org/. + + If you got this file as a part of a larger bundle, + there may be other license terms that you should be aware of. + +=============================================================================== +Tor is distributed under this license: + +Copyright (c) 2001-2004, Roger Dingledine +Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson +Copyright (c) 2007-2017, The Tor Project, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + + * Neither the names of the copyright owners nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +=============================================================================== +src/ext/strlcat.c and src/ext/strlcpy.c by Todd C. Miller are licensed +under the following license: + + * Copyright (c) 1998 Todd C. Miller + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +=============================================================================== +src/ext/tor_queue.h is licensed under the following license: + + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + +=============================================================================== +src/ext/csiphash.c is licensed under the following license: + + Copyright (c) 2013 Marek Majkowski + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +=============================================================================== +Trunnel is distributed under this license: + +Copyright 2014 The Tor Project, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + + * Neither the names of the copyright owners nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=============================================================================== +src/config/geoip is licensed under the following license: + +OPEN DATA LICENSE (GeoLite Country and GeoLite City databases) + +Copyright (c) 2008 MaxMind, Inc. All Rights Reserved. + +All advertising materials and documentation mentioning features or use of +this database must display the following acknowledgment: +"This product includes GeoLite data created by MaxMind, available from +http://maxmind.com/" + +Redistribution and use with or without modification, are permitted provided +that the following conditions are met: +1. Redistributions must retain the above copyright notice, this list of +conditions and the following disclaimer in the documentation and/or other +materials provided with the distribution. +2. All advertising materials and documentation mentioning features or use of +this database must display the following acknowledgement: +"This product includes GeoLite data created by MaxMind, available from +http://maxmind.com/" +3. "MaxMind" may not be used to endorse or promote products derived from this +database without specific prior written permission. + +THIS DATABASE IS PROVIDED BY MAXMIND, INC ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL MAXMIND BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +DATABASE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +=============================================================================== +m4/pc_from_ucontext.m4 is available under the following license. Note that +it is *not* built into the Tor software. + +Copyright (c) 2005, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=============================================================================== +m4/pkg.m4 is available under the following license. Note that +it is *not* built into the Tor software. + +pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +serial 1 (pkg-config-0.24) + +Copyright © 2004 Scott James Remnant . + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +As a special exception to the GNU General Public License, if you +distribute this file as part of a program that contains a +configuration script generated by Autoconf, you may include it under +the same distribution terms that you use for the rest of that program. +=============================================================================== +src/ext/readpassphrase.[ch] are distributed under this license: + + Copyright (c) 2000-2002, 2007 Todd C. Miller + + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Sponsored in part by the Defense Advanced Research Projects + Agency (DARPA) and Air Force Research Laboratory, Air Force + Materiel Command, USAF, under agreement number F39502-99-1-0512. + +=============================================================================== +src/ext/mulodi4.c is distributed under this license: + + ========================================================================= + compiler_rt License + ========================================================================= + + The compiler_rt library is dual licensed under both the + University of Illinois "BSD-Like" license and the MIT license. + As a user of this code you may choose to use it under either + license. As a contributor, you agree to allow your code to be + used under both. + + Full text of the relevant licenses is included below. + + ========================================================================= + + University of Illinois/NCSA + Open Source License + + Copyright (c) 2009-2016 by the contributors listed in CREDITS.TXT + + All rights reserved. + + Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal with the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + * Redistributions of source code must retain the above + copyright notice, this list of conditions and the following + disclaimers. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimers in the documentation and/or other materials + provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois + at Urbana-Champaign, nor the names of its contributors may + be used to endorse or promote products derived from this + Software without specific prior written permission. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS WITH THE SOFTWARE. + + ========================================================================= + + Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ========================================================================= + Copyrights and Licenses for Third Party Software Distributed with LLVM: + ========================================================================= + + The LLVM software contains code written by third parties. Such + software will have its own individual LICENSE.TXT file in the + directory in which it appears. This file will describe the + copyrights, license, and restrictions which apply to that code. + + The disclaimer of warranty in the University of Illinois Open + Source License applies to all code in the LLVM Distribution, and + nothing in any of the other licenses gives permission to use the + names of the LLVM Team or the University of Illinois to endorse + or promote products derived from this Software. + +=============================================================================== +If you got Tor as a static binary with OpenSSL included, then you should know: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" +=============================================================================== diff --git a/install/licenses/readme.txt b/install/licenses/readme.txt new file mode 100644 index 00000000..c92e516d --- /dev/null +++ b/install/licenses/readme.txt @@ -0,0 +1 @@ +This folder contains the software licenses for 3rd-party binaries included with OnionShare. From 5b27f952e4bd9a6c08adfcdbffe7f8dabdafc134 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 17 Jun 2018 16:43:38 -0700 Subject: [PATCH 04/38] Add onionshare license to licenses folder, and add licenses folder to PyInstaller spec, and to NSIS installer --- .../licenses/LICENSE.onionshare | 5 ++++- install/onionshare.nsi | 13 +++++++++++-- install/pyinstaller.spec | 1 - 3 files changed, 15 insertions(+), 4 deletions(-) rename share/license.txt => install/licenses/LICENSE.onionshare (99%) diff --git a/share/license.txt b/install/licenses/LICENSE.onionshare similarity index 99% rename from share/license.txt rename to install/licenses/LICENSE.onionshare index 1223e5a6..3d26a84e 100644 --- a/share/license.txt +++ b/install/licenses/LICENSE.onionshare @@ -1,4 +1,7 @@ -Copyright (C) 2017 Micah Lee +OnionShare + +Copyright © 2018 + Micah Lee GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 diff --git a/install/onionshare.nsi b/install/onionshare.nsi index 4030636a..5470b4b6 100644 --- a/install/onionshare.nsi +++ b/install/onionshare.nsi @@ -162,6 +162,12 @@ Section "install" SetOutPath "$INSTDIR\lib2to3\tests\data" File "${BINPATH}\lib2to3\tests\data\README" + SetOutPath "$INSTDIR\licenses" + File "${BINPATH}\licenses\LICENSE.obfs4" + File "${BINPATH}\licenses\LICENSE.onionshare" + File "${BINPATH}\licenses\LICENSE.tor" + File "${BINPATH}\licenses\readme.txt" + SetOutPath "$INSTDIR\PyQt5\Qt\bin" File "${BINPATH}\PyQt5\Qt\bin\qt.conf" @@ -188,7 +194,6 @@ Section "install" File "${BINPATH}\PyQt5\Qt\plugins\printsupport\windowsprintersupport.dll" SetOutPath "$INSTDIR\share" - File "${BINPATH}\share\license.txt" File "${BINPATH}\share\torrc_template" File "${BINPATH}\share\torrc_template-windows" File "${BINPATH}\share\torrc_template-obfs4" @@ -351,6 +356,10 @@ FunctionEnd Delete "$INSTDIR\lib2to3\tests" Delete "$INSTDIR\lib2to3\tests\data" Delete "$INSTDIR\lib2to3\tests\data\README" + Delete "$INSTDIR\licenses\LICENSE.obfs4" + Delete "$INSTDIR\licenses\LICENSE.onionshare" + Delete "$INSTDIR\licenses\LICENSE.tor" + Delete "$INSTDIR\licenses\readme.txt" Delete "$INSTDIR\mfc140u.dll" Delete "$INSTDIR\MSVCP140.dll" Delete "$INSTDIR\onionshare-gui.exe" @@ -405,7 +414,6 @@ FunctionEnd Delete "$INSTDIR\share\images\settings.png" Delete "$INSTDIR\share\images\web_file.png" Delete "$INSTDIR\share\images\web_folder.png" - Delete "$INSTDIR\share\license.txt" Delete "$INSTDIR\share\locale\cs.json" Delete "$INSTDIR\share\locale\de.json" Delete "$INSTDIR\share\locale\en.json" @@ -466,6 +474,7 @@ FunctionEnd rmDir "$INSTDIR\lib2to3\tests\data" rmDir "$INSTDIR\lib2to3\tests" rmDir "$INSTDIR\lib2to3" + rmDir "$INSTDIR\licenses" rmDir "$INSTDIR\PyQt5\Qt\bin" rmDir "$INSTDIR\PyQt5\Qt\plugins\iconengines" rmDir "$INSTDIR\PyQt5\Qt\plugins\imageformats" diff --git a/install/pyinstaller.spec b/install/pyinstaller.spec index 6ca2fdbe..30553707 100644 --- a/install/pyinstaller.spec +++ b/install/pyinstaller.spec @@ -10,7 +10,6 @@ a = Analysis( pathex=['.'], binaries=None, datas=[ - ('../share/license.txt', 'share'), ('../share/version.txt', 'share'), ('../share/wordlist.txt', 'share'), ('../share/torrc_template', 'share'), From e05cee19bcb73ffdd21c2e3a5fef8b8694ea2043 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 17 Jun 2018 16:53:44 -0700 Subject: [PATCH 05/38] Update OnionShare copyright year to 2018 --- LICENSE | 2 +- dev_scripts/onionshare | 2 +- dev_scripts/onionshare-gui | 2 +- install/get-tor-osx.py | 2 +- install/get-tor-windows.py | 2 +- install/scripts/onionshare | 2 +- install/scripts/onionshare-gui | 2 +- install/scripts/onionshare-pyinstaller | 2 +- onionshare/__init__.py | 2 +- onionshare/common.py | 2 +- onionshare/onion.py | 2 +- onionshare/onionshare.py | 2 +- onionshare/settings.py | 2 +- onionshare/strings.py | 2 +- onionshare/web.py | 2 +- onionshare_gui/__init__.py | 2 +- onionshare_gui/alert.py | 2 +- onionshare_gui/downloads.py | 2 +- onionshare_gui/file_selection.py | 2 +- onionshare_gui/onionshare_gui.py | 2 +- onionshare_gui/server_status.py | 2 +- onionshare_gui/settings_dialog.py | 2 +- onionshare_gui/tor_connection_dialog.py | 2 +- onionshare_gui/update_checker.py | 2 +- setup.py | 2 +- test/test_helpers.py | 2 +- test/test_onionshare.py | 2 +- test/test_onionshare_common.py | 2 +- test/test_onionshare_settings.py | 2 +- test/test_onionshare_strings.py | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/LICENSE b/LICENSE index dd69f276..3d26a84e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ OnionShare -Copyright © 2016 +Copyright © 2018 Micah Lee GNU GENERAL PUBLIC LICENSE diff --git a/dev_scripts/onionshare b/dev_scripts/onionshare index 81be89f4..358293e1 100755 --- a/dev_scripts/onionshare +++ b/dev_scripts/onionshare @@ -3,7 +3,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/dev_scripts/onionshare-gui b/dev_scripts/onionshare-gui index aab70404..4e008809 100755 --- a/dev_scripts/onionshare-gui +++ b/dev_scripts/onionshare-gui @@ -3,7 +3,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/install/get-tor-osx.py b/install/get-tor-osx.py index f6cac62f..c780ebae 100644 --- a/install/get-tor-osx.py +++ b/install/get-tor-osx.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/install/get-tor-windows.py b/install/get-tor-windows.py index f5aeb3f7..8875a556 100644 --- a/install/get-tor-windows.py +++ b/install/get-tor-windows.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/install/scripts/onionshare b/install/scripts/onionshare index 6a1529fe..6c560aec 100755 --- a/install/scripts/onionshare +++ b/install/scripts/onionshare @@ -3,7 +3,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/install/scripts/onionshare-gui b/install/scripts/onionshare-gui index 786277c4..6b9fb21b 100755 --- a/install/scripts/onionshare-gui +++ b/install/scripts/onionshare-gui @@ -3,7 +3,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/install/scripts/onionshare-pyinstaller b/install/scripts/onionshare-pyinstaller index c9552120..d026e1bf 100644 --- a/install/scripts/onionshare-pyinstaller +++ b/install/scripts/onionshare-pyinstaller @@ -3,7 +3,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare/__init__.py b/onionshare/__init__.py index 76d2b601..032b4acc 100644 --- a/onionshare/__init__.py +++ b/onionshare/__init__.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare/common.py b/onionshare/common.py index 0d00c7b1..ca6c667d 100644 --- a/onionshare/common.py +++ b/onionshare/common.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare/onion.py b/onionshare/onion.py index 068648ba..4d159d94 100644 --- a/onionshare/onion.py +++ b/onionshare/onion.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare/onionshare.py b/onionshare/onionshare.py index 85bfaf22..b1760537 100644 --- a/onionshare/onionshare.py +++ b/onionshare/onionshare.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare/settings.py b/onionshare/settings.py index 545915e8..034e863f 100644 --- a/onionshare/settings.py +++ b/onionshare/settings.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare/strings.py b/onionshare/strings.py index 7a1f08a5..ccbfc37f 100644 --- a/onionshare/strings.py +++ b/onionshare/strings.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare/web.py b/onionshare/web.py index d16ca251..702ba686 100644 --- a/onionshare/web.py +++ b/onionshare/web.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare_gui/__init__.py b/onionshare_gui/__init__.py index 24e627bb..5350fe29 100644 --- a/onionshare_gui/__init__.py +++ b/onionshare_gui/__init__.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare_gui/alert.py b/onionshare_gui/alert.py index 814ff786..75975cfb 100644 --- a/onionshare_gui/alert.py +++ b/onionshare_gui/alert.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare_gui/downloads.py b/onionshare_gui/downloads.py index 166f14a4..bf891b55 100644 --- a/onionshare_gui/downloads.py +++ b/onionshare_gui/downloads.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare_gui/file_selection.py b/onionshare_gui/file_selection.py index 29bcc592..3f52a96d 100644 --- a/onionshare_gui/file_selection.py +++ b/onionshare_gui/file_selection.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index f38dd727..c05e3323 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py index 03540415..f3156fed 100644 --- a/onionshare_gui/server_status.py +++ b/onionshare_gui/server_status.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index 7c81afc6..c2dca97c 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare_gui/tor_connection_dialog.py b/onionshare_gui/tor_connection_dialog.py index dc472725..12730c32 100644 --- a/onionshare_gui/tor_connection_dialog.py +++ b/onionshare_gui/tor_connection_dialog.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/onionshare_gui/update_checker.py b/onionshare_gui/update_checker.py index 8b4884a2..5d73efb4 100644 --- a/onionshare_gui/update_checker.py +++ b/onionshare_gui/update_checker.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/setup.py b/setup.py index 23e1ea17..14cf05b1 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/test_helpers.py b/test/test_helpers.py index 02db1eb8..b0e94a5c 100644 --- a/test/test_helpers.py +++ b/test/test_helpers.py @@ -1,7 +1,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/test_onionshare.py b/test/test_onionshare.py index 76e471bd..b9e50ba1 100644 --- a/test/test_onionshare.py +++ b/test/test_onionshare.py @@ -1,7 +1,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/test_onionshare_common.py b/test/test_onionshare_common.py index cb864313..d3c78710 100644 --- a/test/test_onionshare_common.py +++ b/test/test_onionshare_common.py @@ -1,7 +1,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/test_onionshare_settings.py b/test/test_onionshare_settings.py index e50eee41..212aceb8 100644 --- a/test/test_onionshare_settings.py +++ b/test/test_onionshare_settings.py @@ -1,7 +1,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/test/test_onionshare_strings.py b/test/test_onionshare_strings.py index d9fa9896..0e7a32ab 100644 --- a/test/test_onionshare_strings.py +++ b/test/test_onionshare_strings.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2017 Micah Lee +Copyright (C) 2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From 089c8201f112b573ab49daa6f234ed02689f7961 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 17 Jun 2018 16:55:04 -0700 Subject: [PATCH 06/38] Actually add licenses folder to PyInstaller spec --- install/pyinstaller.spec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install/pyinstaller.spec b/install/pyinstaller.spec index 30553707..9c233cf4 100644 --- a/install/pyinstaller.spec +++ b/install/pyinstaller.spec @@ -19,7 +19,8 @@ a = Analysis( ('../share/torrc_template-windows', 'share'), ('../share/images/*', 'share/images'), ('../share/locale/*', 'share/locale'), - ('../share/html/*', 'share/html') + ('../share/html/*', 'share/html'), + ('../install/licenses/*', 'licenses') ], hiddenimports=[], hookspath=[], From f1ba17fc7bfd7a2811d9ec517fc1f6f2842bec71 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 18 Jun 2018 10:34:06 -0700 Subject: [PATCH 07/38] Renamed license files to be lowercase, use .txt extension --- .../licenses/{LICENSE.obfs4 => license-obfs4.txt} | 0 .../{LICENSE.onionshare => license-onionshare.txt} | 0 install/licenses/{LICENSE.tor => license-tor.txt} | 0 install/onionshare.nsi | 12 ++++++------ 4 files changed, 6 insertions(+), 6 deletions(-) rename install/licenses/{LICENSE.obfs4 => license-obfs4.txt} (100%) rename install/licenses/{LICENSE.onionshare => license-onionshare.txt} (100%) rename install/licenses/{LICENSE.tor => license-tor.txt} (100%) diff --git a/install/licenses/LICENSE.obfs4 b/install/licenses/license-obfs4.txt similarity index 100% rename from install/licenses/LICENSE.obfs4 rename to install/licenses/license-obfs4.txt diff --git a/install/licenses/LICENSE.onionshare b/install/licenses/license-onionshare.txt similarity index 100% rename from install/licenses/LICENSE.onionshare rename to install/licenses/license-onionshare.txt diff --git a/install/licenses/LICENSE.tor b/install/licenses/license-tor.txt similarity index 100% rename from install/licenses/LICENSE.tor rename to install/licenses/license-tor.txt diff --git a/install/onionshare.nsi b/install/onionshare.nsi index 5470b4b6..245a128b 100644 --- a/install/onionshare.nsi +++ b/install/onionshare.nsi @@ -163,9 +163,9 @@ Section "install" File "${BINPATH}\lib2to3\tests\data\README" SetOutPath "$INSTDIR\licenses" - File "${BINPATH}\licenses\LICENSE.obfs4" - File "${BINPATH}\licenses\LICENSE.onionshare" - File "${BINPATH}\licenses\LICENSE.tor" + File "${BINPATH}\licenses\license-obfs4.txt" + File "${BINPATH}\licenses\license-onionshare.txt" + File "${BINPATH}\licenses\license-tor.txt" File "${BINPATH}\licenses\readme.txt" SetOutPath "$INSTDIR\PyQt5\Qt\bin" @@ -356,9 +356,9 @@ FunctionEnd Delete "$INSTDIR\lib2to3\tests" Delete "$INSTDIR\lib2to3\tests\data" Delete "$INSTDIR\lib2to3\tests\data\README" - Delete "$INSTDIR\licenses\LICENSE.obfs4" - Delete "$INSTDIR\licenses\LICENSE.onionshare" - Delete "$INSTDIR\licenses\LICENSE.tor" + Delete "$INSTDIR\licenses\license-obfs4.txt" + Delete "$INSTDIR\licenses\license-onionshare.txt" + Delete "$INSTDIR\licenses\license-tor.txt" Delete "$INSTDIR\licenses\readme.txt" Delete "$INSTDIR\mfc140u.dll" Delete "$INSTDIR\MSVCP140.dll" From 3be94afbcf8afa871bf1e8d2c352b1effa951302 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 18 Jun 2018 12:00:50 -0700 Subject: [PATCH 08/38] Update Windows build instructions to include newer versions of software --- BUILD.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/BUILD.md b/BUILD.md index e6e54951..c5fe3601 100644 --- a/BUILD.md +++ b/BUILD.md @@ -85,7 +85,7 @@ pip3 install -r install\requirements-windows.txt Download and install pywin32 (build 221, x86, for python 3.6) from https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/. I downloaded `pywin32-221.win32-py3.6.exe`. -Download and install Qt5 from https://www.qt.io/download-open-source/. I downloaded `qt-unified-windows-x86-3.0.2-online.exe`. There's no need to login to a Qt account during installation. Make sure you install the latest Qt 5.x. I installed Qt 5.10.0. +Download and install Qt5 from https://www.qt.io/download-open-source/. I downloaded `qt-unified-windows-x86-3.0.4-online.exe`. There's no need to login to a Qt account during installation. Make sure you install the latest Qt 5.x. I installed Qt 5.11.0. You only need to install the `MSVC 2015 32-bit` component, as well as all of the the `Qt` components, for that that version. After that you can try both the CLI and the GUI version of OnionShare: @@ -100,7 +100,7 @@ These instructions include adding folders to the path in Windows. To do this, go Download and install the 32-bit [Visual C++ Redistributable for Visual Studio 2015](https://www.microsoft.com/en-US/download/details.aspx?id=48145). I downloaded `vc_redist.x86.exe`. -Download and install 7-Zip from http://www.7-zip.org/download.html. I downloaded `7z1800.exe`. +Download and install 7-Zip from http://www.7-zip.org/download.html. I downloaded `7z1805-x64.exe`. Download and install the standalone [Windows 10 SDK](https://dev.windows.com/en-us/downloads/windows-10-sdk). Note that you may not need this if you already have Visual Studio. @@ -113,7 +113,7 @@ Add the following directories to the path: If you want to build the installer: -* Go to http://nsis.sourceforge.net/Download and download the latest NSIS. I downloaded `nsis-3.02.1-setup.exe`. +* Go to http://nsis.sourceforge.net/Download and download the latest NSIS. I downloaded `nsis-3.03-setup.exe`. * Add `C:\Program Files (x86)\NSIS` to the path. If you want to sign binaries with Authenticode: From 97acfccf0965dcd12e80169795b4d62f07c15282 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 18 Jun 2018 12:10:28 -0700 Subject: [PATCH 09/38] Upgrade get-tor scripts to download Tor Browser 7.5.5, which includes Tor 0.3.2.10 --- install/get-tor-osx.py | 6 +++--- install/get-tor-windows.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/install/get-tor-osx.py b/install/get-tor-osx.py index c780ebae..207ecfb3 100644 --- a/install/get-tor-osx.py +++ b/install/get-tor-osx.py @@ -28,9 +28,9 @@ import inspect, os, sys, hashlib, zipfile, io, shutil, subprocess import urllib.request def main(): - dmg_url = 'https://archive.torproject.org/tor-package-archive/torbrowser/7.5/TorBrowser-7.5-osx64_en-US.dmg' - dmg_filename = 'TorBrowser-7.5-osx64_en-US.dmg' - expected_dmg_sha256 = '43a8dc0afd0a77e42766311eb54ad9fc8714f67fcd2d3582a3bcb98b22c2e629' + dmg_url = 'https://archive.torproject.org/tor-package-archive/torbrowser/7.5.5/TorBrowser-7.5.5-osx64_en-US.dmg' + dmg_filename = 'TorBrowser-7.5.5-osx64_en-US.dmg' + expected_dmg_sha256 = '2b445e4237cdd9be0e71e65f76db5d36f0d6c37532982d642803b57e388e4636' # Build paths root_path = os.path.dirname(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))) diff --git a/install/get-tor-windows.py b/install/get-tor-windows.py index 8875a556..e7783191 100644 --- a/install/get-tor-windows.py +++ b/install/get-tor-windows.py @@ -28,9 +28,9 @@ import inspect, os, sys, hashlib, shutil, subprocess import urllib.request def main(): - exe_url = 'https://archive.torproject.org/tor-package-archive/torbrowser/7.5/torbrowser-install-7.5_en-US.exe' - exe_filename = 'torbrowser-install-7.5_en-US.exe' - expected_exe_sha256 = '81ccb9456118cf8fa755a3eafb5c514665fc69599cdd41e9eb36baa335ebe233' + exe_url = 'https://archive.torproject.org/tor-package-archive/torbrowser/7.5.5/torbrowser-install-7.5.5_en-US.exe' + exe_filename = 'torbrowser-install-7.5.5_en-US.exe' + expected_exe_sha256 = '992f9a6658001c3419ed3695a908eef4fb7feb1cd549389bdacbadb7f8cb08a7' # Build paths root_path = os.path.dirname(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))) working_path = os.path.join(os.path.join(root_path, 'build'), 'tor') From 19c2193a496265f69d7a086077d2a0eb3ad4f811 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 18 Jun 2018 12:53:27 -0700 Subject: [PATCH 10/38] Add requests build dependency, and use requests to download Tor Browser in get-tor-osx.py and get-tor-windows.py, because I was running into SSL certificate verification issues downloading using urllib --- install/get-tor-osx.py | 18 ++++++++++++------ install/get-tor-windows.py | 16 ++++++++++------ install/requirements-windows.txt | 1 + install/requirements.txt | 1 + 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/install/get-tor-osx.py b/install/get-tor-osx.py index 207ecfb3..3c498dfe 100644 --- a/install/get-tor-osx.py +++ b/install/get-tor-osx.py @@ -24,8 +24,15 @@ In order to avoid a Mac gnupg dependency, I manually verify the signature and hard-code the sha256 hash. """ -import inspect, os, sys, hashlib, zipfile, io, shutil, subprocess -import urllib.request +import inspect +import os +import sys +import hashlib +import zipfile +import io +import shutil +import subprocess +import requests def main(): dmg_url = 'https://archive.torproject.org/tor-package-archive/torbrowser/7.5.5/TorBrowser-7.5.5-osx64_en-US.dmg' @@ -46,10 +53,9 @@ def main(): # Make sure the zip is downloaded if not os.path.exists(dmg_path): print("Downloading {}".format(dmg_url)) - response = urllib.request.urlopen(dmg_url) - dmg_data = response.read() - open(dmg_path, 'wb').write(dmg_data) - dmg_sha256 = hashlib.sha256(dmg_data).hexdigest() + r = requests.get(dmg_url) + open(dmg_path, 'wb').write(r.content) + dmg_sha256 = hashlib.sha256(r.content).hexdigest() else: dmg_data = open(dmg_path, 'rb').read() dmg_sha256 = hashlib.sha256(dmg_data).hexdigest() diff --git a/install/get-tor-windows.py b/install/get-tor-windows.py index e7783191..44c4ac23 100644 --- a/install/get-tor-windows.py +++ b/install/get-tor-windows.py @@ -24,8 +24,13 @@ In order to avoid a Windows gnupg dependency, I manually verify the signature and hard-code the sha256 hash. """ -import inspect, os, sys, hashlib, shutil, subprocess -import urllib.request +import inspect +import os +import sys +import hashlib +import shutil +import subprocess +import requests def main(): exe_url = 'https://archive.torproject.org/tor-package-archive/torbrowser/7.5.5/torbrowser-install-7.5.5_en-US.exe' @@ -44,10 +49,9 @@ def main(): # Make sure the zip is downloaded if not os.path.exists(exe_path): print("Downloading {}".format(exe_url)) - response = urllib.request.urlopen(exe_url) - exe_data = response.read() - open(exe_path, 'wb').write(exe_data) - exe_sha256 = hashlib.sha256(exe_data).hexdigest() + r = requests.get(exe_url) + open(exe_path, 'wb').write(r.content) + exe_sha256 = hashlib.sha256(r.content).hexdigest() else: exe_data = open(exe_path, 'rb').read() exe_sha256 = hashlib.sha256(exe_data).hexdigest() diff --git a/install/requirements-windows.txt b/install/requirements-windows.txt index 32b8da4a..6e03f6e8 100644 --- a/install/requirements-windows.txt +++ b/install/requirements-windows.txt @@ -8,6 +8,7 @@ pefile==2017.11.5 PyInstaller==3.3.1 PyQt5==5.9.2 PySocks==1.6.7 +requests==2.19.1 sip==4.19.6 stem==1.6.0 Werkzeug==0.14.1 diff --git a/install/requirements.txt b/install/requirements.txt index c7828080..ed83b995 100644 --- a/install/requirements.txt +++ b/install/requirements.txt @@ -6,6 +6,7 @@ MarkupSafe==1.0 PyInstaller==3.3.1 PyQt5==5.9.2 PySocks==1.6.7 +requests==2.19.1 sip==4.19.6 stem==1.6.0 Werkzeug==0.14.1 From d53303a84c99cb7fcfe9cba0e6a5d00144290101 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 18 Jun 2018 12:55:59 -0700 Subject: [PATCH 11/38] Oops, download 32-bit 7zip in build instructions --- BUILD.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILD.md b/BUILD.md index c5fe3601..77d5ee0e 100644 --- a/BUILD.md +++ b/BUILD.md @@ -100,7 +100,7 @@ These instructions include adding folders to the path in Windows. To do this, go Download and install the 32-bit [Visual C++ Redistributable for Visual Studio 2015](https://www.microsoft.com/en-US/download/details.aspx?id=48145). I downloaded `vc_redist.x86.exe`. -Download and install 7-Zip from http://www.7-zip.org/download.html. I downloaded `7z1805-x64.exe`. +Download and install 7-Zip from http://www.7-zip.org/download.html. I downloaded `7z1805.exe`. Download and install the standalone [Windows 10 SDK](https://dev.windows.com/en-us/downloads/windows-10-sdk). Note that you may not need this if you already have Visual Studio. From 662c2b05e64042f5390d332bf8bfc7fe9171db17 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 18 Jun 2018 13:08:40 -0700 Subject: [PATCH 12/38] Version bump to 1.3.1 and updated changelog --- CHANGELOG.md | 5 +++++ install/onionshare.nsi | 2 +- share/version.txt | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a03a151..136dd2b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # OnionShare Changelog +## 1.3.1 + +* Updated Tor to 0.2.3.10 +* Windows and Mac binaries are now distributed with licenses for tor and obfs4 + ## 1.3 * Major UI redesign, introducing many UX improvements diff --git a/install/onionshare.nsi b/install/onionshare.nsi index 245a128b..0d4a22c1 100644 --- a/install/onionshare.nsi +++ b/install/onionshare.nsi @@ -6,7 +6,7 @@ !define INSTALLSIZE 66537 !define VERSIONMAJOR 1 !define VERSIONMINOR 3 -!define VERSIONSTRING "1.3" +!define VERSIONSTRING "1.3.1" RequestExecutionLevel admin diff --git a/share/version.txt b/share/version.txt index 7e32cd56..3a3cd8cc 100644 --- a/share/version.txt +++ b/share/version.txt @@ -1 +1 @@ -1.3 +1.3.1 From 688e1d4777a788722cd32a008959b100c740c00e Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 18 Jun 2018 16:26:53 -0700 Subject: [PATCH 13/38] LICENSE includes a note pointing to the 3rd party licenses --- LICENSE | 6 +++--- install/licenses/license-onionshare.txt | 4 +--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/LICENSE b/LICENSE index 3d26a84e..5a03b106 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ -OnionShare +(Note: Third-party licenses can be found under install/licenses/.) -Copyright © 2018 - Micah Lee +OnionShare +Copyright © 2018 Micah Lee GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 diff --git a/install/licenses/license-onionshare.txt b/install/licenses/license-onionshare.txt index 3d26a84e..dc049cff 100644 --- a/install/licenses/license-onionshare.txt +++ b/install/licenses/license-onionshare.txt @@ -1,7 +1,5 @@ OnionShare - -Copyright © 2018 - Micah Lee +Copyright © 2018 Micah Lee GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 From 85609e68418ed05e23a778be5e33d7c3774ccc1d Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 18 Jun 2018 16:28:09 -0700 Subject: [PATCH 14/38] Remove the /fd sha256 from signtool.exe command, because I'm having trouble generating signatures with the smart card setup with sha256 digests --- install/build_exe.bat | 4 ++-- install/onionshare.nsi | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/install/build_exe.bat b/install/build_exe.bat index 6c49c7d8..ba626fa2 100644 --- a/install/build_exe.bat +++ b/install/build_exe.bat @@ -8,10 +8,10 @@ REM download tor python install\get-tor-windows.py REM sign onionshare-gui.exe -signtool.exe sign /v /d "OnionShare" /a /tr http://time.certum.pl/ /fd sha256 dist\onionshare\onionshare-gui.exe +signtool.exe sign /v /d "OnionShare" /a /tr http://time.certum.pl/ dist\onionshare\onionshare-gui.exe REM build an installer, dist\onionshare-setup.exe makensis.exe install\onionshare.nsi REM sign onionshare-setup.exe -signtool.exe sign /v /d "OnionShare" /a /tr http://time.certum.pl/ /fd sha256 dist\onionshare-setup.exe +signtool.exe sign /v /d "OnionShare" /a /tr http://time.certum.pl/ dist\onionshare-setup.exe diff --git a/install/onionshare.nsi b/install/onionshare.nsi index 0d4a22c1..279f4803 100644 --- a/install/onionshare.nsi +++ b/install/onionshare.nsi @@ -39,7 +39,7 @@ ${EndIf} !echo "Creating normal installer" !system "makensis.exe /DINNER onionshare.nsi" = 0 !system "$%TEMP%\tempinstaller.exe" = 2 - !system "signtool.exe sign /v /d $\"Uninstall OnionShare$\" /a /tr http://time.certum.pl/ /fd sha256 $%TEMP%\uninstall.exe" = 0 + !system "signtool.exe sign /v /d $\"Uninstall OnionShare$\" /a /tr http://time.certum.pl/ $%TEMP%\uninstall.exe" = 0 # all done, now we can build the real installer OutFile "..\dist\onionshare-setup.exe" From bc36b73b6f7b3c1a9c2ceafd7d53e045dd69cf66 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 13 Jul 2018 15:50:17 +1000 Subject: [PATCH 15/38] Remove duplicate line --- onionshare_gui/onionshare_gui.py | 1 - 1 file changed, 1 deletion(-) diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index ad5dee88..4599f35b 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -147,7 +147,6 @@ class OnionShareGui(QtWidgets.QMainWindow): self.receive_mode.server_status.url_copied.connect(self.copy_url) self.receive_mode.server_status.hidservauth_copied.connect(self.copy_hidservauth) self.receive_mode.set_server_active.connect(self.set_server_active) - self.receive_mode.set_server_active.connect(self.set_server_active) self.update_mode_switcher() self.update_server_status_indicator() From 757a6bac59fcfe0a29c838105538b989fbabf85d Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sat, 14 Jul 2018 16:19:16 +1000 Subject: [PATCH 16/38] #707 Hide/show the primary action in Receive Mode when tor connection is lost/regained --- onionshare_gui/onionshare_gui.py | 2 ++ onionshare_gui/receive_mode/__init__.py | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index ad5dee88..6d52ed01 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -308,6 +308,7 @@ class OnionShareGui(QtWidgets.QMainWindow): if not self.timer.isActive(): self.timer.start(500) self.share_mode.on_reload_settings() + self.receive_mode.on_reload_settings() self.status_bar.clearMessage() # If we switched off the shutdown timeout setting, ensure the widget is hidden. @@ -351,6 +352,7 @@ class OnionShareGui(QtWidgets.QMainWindow): self.system_tray.showMessage(strings._('gui_tor_connection_lost', True), strings._('gui_tor_connection_error_settings', True)) self.share_mode.handle_tor_broke() + self.receive_mode.handle_tor_broke() # Process events from the web object if self.mode == self.MODE_SHARE: diff --git a/onionshare_gui/receive_mode/__init__.py b/onionshare_gui/receive_mode/__init__.py index 90100efa..623d3986 100644 --- a/onionshare_gui/receive_mode/__init__.py +++ b/onionshare_gui/receive_mode/__init__.py @@ -123,6 +123,7 @@ class ReceiveMode(Mode): """ Connection to Tor broke. """ + self.primary_action.hide() self.info_widget.hide() def handle_request_load(self, event): @@ -166,6 +167,13 @@ class ReceiveMode(Mode): """ self.uploads.finished(event["data"]["id"]) + def on_reload_settings(self): + """ + We should be ok to re-enable the 'Start Receive Mode' button now. + """ + self.primary_action.show() + self.info_widget.show() + def reset_info_counters(self): """ Set the info counters back to zero. From cb47c3494295d0e0fb295510d438d237f371fec3 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sat, 14 Jul 2018 16:43:21 +1000 Subject: [PATCH 17/38] Fix minor spelling/grammar issues --- onionshare/common.py | 2 +- onionshare_gui/onionshare_gui.py | 2 +- test/test_onionshare_web.py | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/onionshare/common.py b/onionshare/common.py index 646cbba2..61663f23 100644 --- a/onionshare/common.py +++ b/onionshare/common.py @@ -322,7 +322,7 @@ class Common(object): font-size: 11px; }""", - # Recieve mode and child widget styles + # Receive mode and child widget styles 'receive_file': """ QWidget { background-color: #ffffff; diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index ad5dee88..0f6ec78b 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -168,7 +168,7 @@ class OnionShareGui(QtWidgets.QMainWindow): self.setCentralWidget(central_widget) self.show() - # The servers isn't active yet + # The server isn't active yet self.set_server_active(False) # Create the timer diff --git a/test/test_onionshare_web.py b/test/test_onionshare_web.py index 0b96359b..89f02df6 100644 --- a/test/test_onionshare_web.py +++ b/test/test_onionshare_web.py @@ -38,11 +38,11 @@ DEFAULT_ZW_FILENAME_REGEX = re.compile(r'^onionshare_[a-z2-7]{6}.zip$') RANDOM_STR_REGEX = re.compile(r'^[a-z2-7]+$') -def web_obj(common_obj, recieve_mode, num_files=0): +def web_obj(common_obj, receive_mode, num_files=0): """ Creates a Web object, in either share mode or receive mode, ready for testing """ common_obj.load_settings() - web = Web(common_obj, False, recieve_mode) + web = Web(common_obj, False, receive_mode) web.generate_slug() web.stay_open = True web.running = True @@ -50,7 +50,7 @@ def web_obj(common_obj, recieve_mode, num_files=0): web.app.testing = True # Share mode - if not recieve_mode: + if not receive_mode: # Add files files = [] for i in range(num_files): From 194478f346a748fbb38f6ba46f9943ace12e0017 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Tue, 17 Jul 2018 11:45:14 +1000 Subject: [PATCH 18/38] Improve styling of flash() messages by using categories, and style the closed.html. Replace references to 'Uploading' with 'Sending' for consistency --- onionshare/web.py | 6 ++--- share/static/css/style.css | 50 ++++++++++++++++++++++++++++++++++++ share/templates/closed.html | 14 +++++++++- share/templates/receive.html | 8 +++--- 4 files changed, 70 insertions(+), 8 deletions(-) diff --git a/onionshare/web.py b/onionshare/web.py index 94fc5396..01cd8785 100644 --- a/onionshare/web.py +++ b/onionshare/web.py @@ -331,7 +331,7 @@ class Web(object): print(strings._('error_downloads_dir_not_writable').format(self.common.settings.get('downloads_dir'))) valid = False if not valid: - flash('Error uploading, please inform the OnionShare user') + flash('Error uploading, please inform the OnionShare user', 'error') if self.common.settings.get('receive_public_mode'): return redirect('/') else: @@ -390,10 +390,10 @@ class Web(object): # Note that flash strings are on English, and not translated, on purpose, # to avoid leaking the locale of the OnionShare user if len(filenames) == 0: - flash('No files uploaded') + flash('No files uploaded', 'info') else: for filename in filenames: - flash('Uploaded {}'.format(filename)) + flash('Sent {}'.format(filename), 'info') if self.common.settings.get('receive_public_mode'): return redirect('/') diff --git a/share/static/css/style.css b/share/static/css/style.css index 29b839a7..7f5f4310 100644 --- a/share/static/css/style.css +++ b/share/static/css/style.css @@ -142,3 +142,53 @@ ul.flashes li { margin: 0; padding: 10px; } + +li.error { + list-style: none; + margin: 0; + padding: 0; + color: #ffffff; + background-color: #c90c0c; + border: 0; + border-radius: 5px; + text-align: left; +} + +li.info { + list-style: none; + margin: 0; + padding: 0; + color: #000000; + background-color: #a9e26c; + border: 0; + border-radius: 5px; + text-align: left; +} + +.closed-wrapper { + display: flex; + align-items: center; + justify-content: center; + min-height: 400px; +} + +.closed { + text-align: center; +} + +.closed img { + width: 120px; + height: 120px; +} + +.closed .closed-header { + font-size: 30px; + font-weight: normal; + color: #666666; + margin: 0 0 10px 0; +} + +.closed .closed-description { + color: #666666; + margin: 0 0 20px 0; +} diff --git a/share/templates/closed.html b/share/templates/closed.html index 167d0efc..c34e0ee4 100644 --- a/share/templates/closed.html +++ b/share/templates/closed.html @@ -3,8 +3,20 @@ OnionShare is closed + -

Thank you for using OnionShare

+
+ +

OnionShare

+
+ +
+
+

+

Thank you for using OnionShare

+

You may now close this window.

+
+
diff --git a/share/templates/receive.html b/share/templates/receive.html index 81b43616..bc8f8e97 100644 --- a/share/templates/receive.html +++ b/share/templates/receive.html @@ -21,11 +21,11 @@

- {% with messages = get_flashed_messages() %} + {% with messages = get_flashed_messages(with_categories=true) %} {% if messages %}
    - {% for message in messages %} -
  • {{ message }}
  • + {% for category, message in messages %} +
  • {{ message }}
  • {% endfor %}
{% endif %} @@ -36,7 +36,7 @@
{% if receive_allow_receiver_shutdown %}
- +
{% endif %} From 35f0857f032f4a1bf5396ffd6ba6c0fdfad34efa Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Tue, 17 Jul 2018 11:53:55 +1000 Subject: [PATCH 19/38] Only show the 'I'm Finished Sending' button if the user actually already sent (or tried to send) anything --- share/templates/receive.html | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/share/templates/receive.html b/share/templates/receive.html index bc8f8e97..d8b02f73 100644 --- a/share/templates/receive.html +++ b/share/templates/receive.html @@ -35,9 +35,13 @@ {% if receive_allow_receiver_shutdown %} -
- -
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ +
+ {% endif %} + {% endwith %} {% endif %} From 4bdbf3f15258ef5ca9b6daf05f97ae1495ecda39 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sat, 21 Jul 2018 15:50:37 +1000 Subject: [PATCH 20/38] Fix another two places where Alert was called without passing the common object --- onionshare_gui/settings_dialog.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index 20c7403d..83c4eb25 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -503,7 +503,7 @@ class SettingsDialog(QtWidgets.QDialog): self.tor_bridges_use_custom_textbox_options.hide() # Alert the user about meek's costliness if it looks like they're turning it on if not self.old_settings.get('tor_bridges_use_meek_lite_amazon'): - Alert(strings._('gui_settings_meek_lite_expensive_warning', True), QtWidgets.QMessageBox.Warning) + Alert(self.common, strings._('gui_settings_meek_lite_expensive_warning', True), QtWidgets.QMessageBox.Warning) def tor_bridges_use_meek_lite_azure_radio_toggled(self, checked): """ @@ -513,7 +513,7 @@ class SettingsDialog(QtWidgets.QDialog): self.tor_bridges_use_custom_textbox_options.hide() # Alert the user about meek's costliness if it looks like they're turning it on if not self.old_settings.get('tor_bridges_use_meek_lite_azure'): - Alert(strings._('gui_settings_meek_lite_expensive_warning', True), QtWidgets.QMessageBox.Warning) + Alert(self.common, strings._('gui_settings_meek_lite_expensive_warning', True), QtWidgets.QMessageBox.Warning) def tor_bridges_use_custom_radio_toggled(self, checked): """ From a6bc01533b7a991fb2759693606ca9b90f906d84 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sat, 21 Jul 2018 15:52:11 +1000 Subject: [PATCH 21/38] #691 remove meek_lite Amazon --- install/onionshare.nsi | 2 -- install/pyinstaller.spec | 1 - onionshare/onion.py | 6 ------ onionshare/settings.py | 1 - onionshare_gui/settings_dialog.py | 36 +------------------------------ share/locale/en.json | 2 -- test/test_onionshare_settings.py | 2 -- 7 files changed, 1 insertion(+), 49 deletions(-) diff --git a/install/onionshare.nsi b/install/onionshare.nsi index d037ba58..134ff8d2 100644 --- a/install/onionshare.nsi +++ b/install/onionshare.nsi @@ -197,7 +197,6 @@ Section "install" File "${BINPATH}\share\torrc_template" File "${BINPATH}\share\torrc_template-windows" File "${BINPATH}\share\torrc_template-obfs4" - File "${BINPATH}\share\torrc_template-meek_lite_amazon" File "${BINPATH}\share\torrc_template-meek_lite_azure" File "${BINPATH}\share\version.txt" File "${BINPATH}\share\wordlist.txt" @@ -434,7 +433,6 @@ FunctionEnd Delete "$INSTDIR\share\torrc_template" Delete "$INSTDIR\share\torrc_template-windows" Delete "$INSTDIR\share\torrc_template-obfs4" - Delete "$INSTDIR\share\torrc_template-meek_lite_amazon" Delete "$INSTDIR\share\torrc_template-meek_lite_azure" Delete "$INSTDIR\share\version.txt" Delete "$INSTDIR\share\wordlist.txt" diff --git a/install/pyinstaller.spec b/install/pyinstaller.spec index e679ec6e..b8abe5fe 100644 --- a/install/pyinstaller.spec +++ b/install/pyinstaller.spec @@ -14,7 +14,6 @@ a = Analysis( ('../share/wordlist.txt', 'share'), ('../share/torrc_template', 'share'), ('../share/torrc_template-obfs4', 'share'), - ('../share/torrc_template-meek_lite_amazon', 'share'), ('../share/torrc_template-meek_lite_azure', 'share'), ('../share/torrc_template-windows', 'share'), ('../share/images/*', 'share/images'), diff --git a/onionshare/onion.py b/onionshare/onion.py index 461af6a2..6132cc9a 100644 --- a/onionshare/onion.py +++ b/onionshare/onion.py @@ -210,11 +210,6 @@ class Onion(object): with open(self.common.get_resource_path('torrc_template-obfs4')) as o: for line in o: f.write(line) - elif self.settings.get('tor_bridges_use_meek_lite_amazon'): - f.write('ClientTransportPlugin meek_lite exec {}\n'.format(self.obfs4proxy_file_path)) - with open(self.common.get_resource_path('torrc_template-meek_lite_amazon')) as o: - for line in o: - f.write(line) elif self.settings.get('tor_bridges_use_meek_lite_azure'): f.write('ClientTransportPlugin meek_lite exec {}\n'.format(self.obfs4proxy_file_path)) with open(self.common.get_resource_path('torrc_template-meek_lite_azure')) as o: @@ -281,7 +276,6 @@ class Onion(object): # If using bridges, it might take a bit longer to connect to Tor if self.settings.get('tor_bridges_use_custom_bridges') or \ self.settings.get('tor_bridges_use_obfs4') or \ - self.settings.get('tor_bridges_use_meek_lite_amazon') or \ self.settings.get('tor_bridges_use_meek_lite_azure'): connect_timeout = 150 else: diff --git a/onionshare/settings.py b/onionshare/settings.py index a8f2521f..2d056aa6 100644 --- a/onionshare/settings.py +++ b/onionshare/settings.py @@ -66,7 +66,6 @@ class Settings(object): 'autoupdate_timestamp': None, 'no_bridges': True, 'tor_bridges_use_obfs4': False, - 'tor_bridges_use_meek_lite_amazon': False, 'tor_bridges_use_meek_lite_azure': False, 'tor_bridges_use_custom_bridges': '', 'save_private_key': False, diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index e9d3ed8f..07b63fe6 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -168,16 +168,6 @@ class SettingsDialog(QtWidgets.QDialog): self.tor_bridges_use_obfs4_radio = QtWidgets.QRadioButton(strings._('gui_settings_tor_bridges_obfs4_radio_option', True)) self.tor_bridges_use_obfs4_radio.toggled.connect(self.tor_bridges_use_obfs4_radio_toggled) - # meek_lite-amazon option radio - # if the obfs4proxy binary is missing, we can't use meek_lite-amazon transports - (self.tor_path, self.tor_geo_ip_file_path, self.tor_geo_ipv6_file_path, self.obfs4proxy_file_path) = self.common.get_tor_paths() - if not os.path.isfile(self.obfs4proxy_file_path): - self.tor_bridges_use_meek_lite_amazon_radio = QtWidgets.QRadioButton(strings._('gui_settings_tor_bridges_meek_lite_amazon_radio_option_no_obfs4proxy', True)) - self.tor_bridges_use_meek_lite_amazon_radio.setEnabled(False) - else: - self.tor_bridges_use_meek_lite_amazon_radio = QtWidgets.QRadioButton(strings._('gui_settings_tor_bridges_meek_lite_amazon_radio_option', True)) - self.tor_bridges_use_meek_lite_amazon_radio.toggled.connect(self.tor_bridges_use_meek_lite_amazon_radio_toggled) - # meek_lite-azure option radio # if the obfs4proxy binary is missing, we can't use meek_lite-azure transports (self.tor_path, self.tor_geo_ip_file_path, self.tor_geo_ipv6_file_path, self.obfs4proxy_file_path) = self.common.get_tor_paths() @@ -190,7 +180,6 @@ class SettingsDialog(QtWidgets.QDialog): # meek_lite currently not supported on the version of obfs4proxy bundled with TorBrowser if self.system == 'Windows' or self.system == 'Darwin': - self.tor_bridges_use_meek_lite_amazon_radio.hide() self.tor_bridges_use_meek_lite_azure_radio.hide() # Custom bridges radio and textbox @@ -216,7 +205,6 @@ class SettingsDialog(QtWidgets.QDialog): bridges_layout = QtWidgets.QVBoxLayout() bridges_layout.addWidget(self.tor_bridges_no_bridges_radio) bridges_layout.addWidget(self.tor_bridges_use_obfs4_radio) - bridges_layout.addWidget(self.tor_bridges_use_meek_lite_amazon_radio) bridges_layout.addWidget(self.tor_bridges_use_meek_lite_azure_radio) bridges_layout.addWidget(self.tor_bridges_use_custom_radio) bridges_layout.addWidget(self.tor_bridges_use_custom_textbox_options) @@ -450,13 +438,11 @@ class SettingsDialog(QtWidgets.QDialog): if self.old_settings.get('no_bridges'): self.tor_bridges_no_bridges_radio.setChecked(True) self.tor_bridges_use_obfs4_radio.setChecked(False) - self.tor_bridges_use_meek_lite_amazon_radio.setChecked(False) self.tor_bridges_use_meek_lite_azure_radio.setChecked(False) self.tor_bridges_use_custom_radio.setChecked(False) else: self.tor_bridges_no_bridges_radio.setChecked(False) self.tor_bridges_use_obfs4_radio.setChecked(self.old_settings.get('tor_bridges_use_obfs4')) - self.tor_bridges_use_meek_lite_amazon_radio.setChecked(self.old_settings.get('tor_bridges_use_meek_lite_amazon')) self.tor_bridges_use_meek_lite_azure_radio.setChecked(self.old_settings.get('tor_bridges_use_meek_lite_azure')) if self.old_settings.get('tor_bridges_use_custom_bridges'): @@ -495,16 +481,6 @@ class SettingsDialog(QtWidgets.QDialog): if checked: self.tor_bridges_use_custom_textbox_options.hide() - def tor_bridges_use_meek_lite_amazon_radio_toggled(self, checked): - """ - meek_lite-amazon bridges option was toggled. If checked, disable custom bridge options. - """ - if checked: - self.tor_bridges_use_custom_textbox_options.hide() - # Alert the user about meek's costliness if it looks like they're turning it on - if not self.old_settings.get('tor_bridges_use_meek_lite_amazon'): - Alert(strings._('gui_settings_meek_lite_expensive_warning', True), QtWidgets.QMessageBox.Warning) - def tor_bridges_use_meek_lite_azure_radio_toggled(self, checked): """ meek_lite_azure bridges option was toggled. If checked, disable custom bridge options. @@ -700,7 +676,7 @@ class SettingsDialog(QtWidgets.QDialog): 'control_port_port', 'socks_address', 'socks_port', 'socket_file_path', 'auth_type', 'auth_password', 'no_bridges', 'tor_bridges_use_obfs4', - 'tor_bridges_use_meek_lite_amazon', 'tor_bridges_use_meek_lite_azure', + 'tor_bridges_use_meek_lite_azure', 'tor_bridges_use_custom_bridges']): reboot_onion = True @@ -810,31 +786,21 @@ class SettingsDialog(QtWidgets.QDialog): if self.tor_bridges_no_bridges_radio.isChecked(): settings.set('no_bridges', True) settings.set('tor_bridges_use_obfs4', False) - settings.set('tor_bridges_use_meek_lite_amazon', False) settings.set('tor_bridges_use_meek_lite_azure', False) settings.set('tor_bridges_use_custom_bridges', '') if self.tor_bridges_use_obfs4_radio.isChecked(): settings.set('no_bridges', False) settings.set('tor_bridges_use_obfs4', True) - settings.set('tor_bridges_use_meek_lite_amazon', False) - settings.set('tor_bridges_use_meek_lite_azure', False) - settings.set('tor_bridges_use_custom_bridges', '') - if self.tor_bridges_use_meek_lite_amazon_radio.isChecked(): - settings.set('no_bridges', False) - settings.set('tor_bridges_use_obfs4', False) - settings.set('tor_bridges_use_meek_lite_amazon', True) settings.set('tor_bridges_use_meek_lite_azure', False) settings.set('tor_bridges_use_custom_bridges', '') if self.tor_bridges_use_meek_lite_azure_radio.isChecked(): settings.set('no_bridges', False) settings.set('tor_bridges_use_obfs4', False) - settings.set('tor_bridges_use_meek_lite_amazon', False) settings.set('tor_bridges_use_meek_lite_azure', True) settings.set('tor_bridges_use_custom_bridges', '') if self.tor_bridges_use_custom_radio.isChecked(): settings.set('no_bridges', False) settings.set('tor_bridges_use_obfs4', False) - settings.set('tor_bridges_use_meek_lite_amazon', False) settings.set('tor_bridges_use_meek_lite_azure', False) # Insert a 'Bridge' line at the start of each bridge. diff --git a/share/locale/en.json b/share/locale/en.json index 525dab04..4367e1e0 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -105,8 +105,6 @@ "gui_settings_tor_bridges_no_bridges_radio_option": "Don't use bridges", "gui_settings_tor_bridges_obfs4_radio_option": "Use built-in obfs4 pluggable transports", "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Use built-in obfs4 pluggable transports (requires obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_amazon_radio_option": "Use built-in meek_lite (Amazon) pluggable transports", - "gui_settings_tor_bridges_meek_lite_amazon_radio_option_no_obfs4proxy": "Use built-in meek_lite (Amazon) pluggable transports (requires obfs4proxy)", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Use built-in meek_lite (Azure) pluggable transports", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Use built-in meek_lite (Azure) pluggable transports (requires obfs4proxy)", "gui_settings_meek_lite_expensive_warning": "Warning: the meek_lite bridges are very costly for the Tor Project to run!

You should only use meek_lite bridges if you are having trouble connecting to Tor directly, via obfs4 transports or other normal bridges.", diff --git a/test/test_onionshare_settings.py b/test/test_onionshare_settings.py index df05ab76..bfc98f2e 100644 --- a/test/test_onionshare_settings.py +++ b/test/test_onionshare_settings.py @@ -58,7 +58,6 @@ class TestSettings: 'autoupdate_timestamp': None, 'no_bridges': True, 'tor_bridges_use_obfs4': False, - 'tor_bridges_use_meek_lite_amazon': False, 'tor_bridges_use_meek_lite_azure': False, 'tor_bridges_use_custom_bridges': '', 'save_private_key': False, @@ -126,7 +125,6 @@ class TestSettings: assert settings_obj.get('autoupdate_timestamp') is None assert settings_obj.get('no_bridges') is True assert settings_obj.get('tor_bridges_use_obfs4') is False - assert settings_obj.get('tor_bridges_use_meek_lite_amazon') is False assert settings_obj.get('tor_bridges_use_meek_lite_azure') is False assert settings_obj.get('tor_bridges_use_custom_bridges') == '' From e89a74729b2baa15c25ba6837b3fc4a273095aea Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sat, 21 Jul 2018 17:06:11 +1000 Subject: [PATCH 22/38] Expand 'public mode' (optional slugs) to be possible for sharing too, not just receiving, with no rate-limiting/self-destruct on invalid routes. --- onionshare/__init__.py | 4 +- onionshare/settings.py | 4 +- onionshare/web.py | 68 +++++++++++++++++++++---------- onionshare_gui/mode.py | 7 ++-- onionshare_gui/server_status.py | 2 +- onionshare_gui/settings_dialog.py | 42 +++++++++++-------- share/locale/en.json | 3 +- share/templates/send.html | 4 ++ 8 files changed, 87 insertions(+), 47 deletions(-) diff --git a/onionshare/__init__.py b/onionshare/__init__.py index 1cebc4e3..becca93f 100644 --- a/onionshare/__init__.py +++ b/onionshare/__init__.py @@ -128,7 +128,7 @@ def main(cwd=None): print('') # Start OnionShare http service in new thread - t = threading.Thread(target=web.start, args=(app.port, stay_open, common.settings.get('slug'))) + t = threading.Thread(target=web.start, args=(app.port, stay_open, common.settings.get('public_mode'), common.settings.get('slug'))) t.daemon = True t.start() @@ -147,7 +147,7 @@ def main(cwd=None): common.settings.save() # Build the URL - if receive and common.settings.get('receive_public_mode'): + if common.settings.get('public_mode'): url = 'http://{0:s}'.format(app.onion_host) else: url = 'http://{0:s}/{1:s}'.format(app.onion_host, web.slug) diff --git a/onionshare/settings.py b/onionshare/settings.py index 6d551ca0..c0e0e30c 100644 --- a/onionshare/settings.py +++ b/onionshare/settings.py @@ -70,11 +70,11 @@ class Settings(object): 'tor_bridges_use_custom_bridges': '', 'save_private_key': False, 'private_key': '', + 'public_mode': False, 'slug': '', 'hidservauth_string': '', 'downloads_dir': self.build_default_downloads_dir(), - 'receive_allow_receiver_shutdown': True, - 'receive_public_mode': False + 'receive_allow_receiver_shutdown': True } self._settings = {} self.fill_in_defaults() diff --git a/onionshare/web.py b/onionshare/web.py index 94fc5396..60f1d22d 100644 --- a/onionshare/web.py +++ b/onionshare/web.py @@ -143,11 +143,19 @@ class Web(object): """ @self.app.route("/") def index(slug_candidate): + self.check_slug_candidate(slug_candidate) + return index_logic() + + @self.app.route("/") + def index_public(): + if not self.common.settings.get('public_mode'): + return self.error404() + return index_logic() + + def index_logic(slug_candidate=''): """ Render the template for the onionshare landing page. """ - self.check_slug_candidate(slug_candidate) - self.add_request(Web.REQUEST_LOAD, request.path) # Deny new downloads if "Stop After First Download" is checked and there is @@ -158,22 +166,39 @@ class Web(object): return self.add_security_headers(r) # If download is allowed to continue, serve download page - r = make_response(render_template( - 'send.html', - slug=self.slug, - file_info=self.file_info, - filename=os.path.basename(self.zip_filename), - filesize=self.zip_filesize, - filesize_human=self.common.human_readable_filesize(self.zip_filesize))) + if self.slug: + r = make_response(render_template( + 'send.html', + slug=self.slug, + file_info=self.file_info, + filename=os.path.basename(self.zip_filename), + filesize=self.zip_filesize, + filesize_human=self.common.human_readable_filesize(self.zip_filesize))) + else: + # If download is allowed to continue, serve download page + r = make_response(render_template( + 'send.html', + file_info=self.file_info, + filename=os.path.basename(self.zip_filename), + filesize=self.zip_filesize, + filesize_human=self.common.human_readable_filesize(self.zip_filesize))) return self.add_security_headers(r) @self.app.route("//download") def download(slug_candidate): + self.check_slug_candidate(slug_candidate) + return download_logic() + + @self.app.route("/download") + def download_public(): + if not self.common.settings.get('public_mode'): + return self.error404() + return download_logic() + + def download_logic(slug_candidate=''): """ Download the zip file. """ - self.check_slug_candidate(slug_candidate) - # Deny new downloads if "Stop After First Download" is checked and there is # currently a download deny_download = not self.stay_open and self.download_in_progress @@ -288,7 +313,7 @@ class Web(object): def index_logic(): self.add_request(Web.REQUEST_LOAD, request.path) - if self.common.settings.get('receive_public_mode'): + if self.common.settings.get('public_mode'): upload_action = '/upload' close_action = '/close' else: @@ -309,7 +334,7 @@ class Web(object): @self.app.route("/") def index_public(): - if not self.common.settings.get('receive_public_mode'): + if not self.common.settings.get('public_mode'): return self.error404() return index_logic() @@ -332,7 +357,7 @@ class Web(object): valid = False if not valid: flash('Error uploading, please inform the OnionShare user') - if self.common.settings.get('receive_public_mode'): + if self.common.settings.get('public_mode'): return redirect('/') else: return redirect('/{}'.format(slug_candidate)) @@ -395,7 +420,7 @@ class Web(object): for filename in filenames: flash('Uploaded {}'.format(filename)) - if self.common.settings.get('receive_public_mode'): + if self.common.settings.get('public_mode'): return redirect('/') else: return redirect('/{}'.format(slug_candidate)) @@ -407,7 +432,7 @@ class Web(object): @self.app.route("/upload", methods=['POST']) def upload_public(): - if not self.common.settings.get('receive_public_mode'): + if not self.common.settings.get('public_mode'): return self.error404() return upload_logic() @@ -428,7 +453,7 @@ class Web(object): @self.app.route("/close", methods=['POST']) def close_public(): - if not self.common.settings.get('receive_public_mode'): + if not self.common.settings.get('public_mode'): return self.error404() return close_logic() @@ -458,7 +483,7 @@ class Web(object): self.error404_count += 1 # In receive mode, with public mode enabled, skip rate limiting 404s - if not (self.receive_mode and self.common.settings.get('receive_public_mode')): + if not self.common.settings.get('public_mode'): if self.error404_count == 20: self.add_request(Web.REQUEST_RATE_LIMIT, request.path) self.force_shutdown() @@ -563,12 +588,13 @@ class Web(object): pass self.running = False - def start(self, port, stay_open=False, persistent_slug=None): + def start(self, port, stay_open=False, public_mode=False, persistent_slug=None): """ Start the flask web server. """ self.common.log('Web', 'start', 'port={}, stay_open={}, persistent_slug={}'.format(port, stay_open, persistent_slug)) - self.generate_slug(persistent_slug) + if not public_mode: + self.generate_slug(persistent_slug) self.stay_open = stay_open @@ -719,7 +745,7 @@ class ReceiveModeRequest(Request): if self.path == '/{}/upload'.format(self.web.slug): self.upload_request = True else: - if self.web.common.settings.get('receive_public_mode'): + if self.web.common.settings.get('public_mode'): if self.path == '/upload': self.upload_request = True diff --git a/onionshare_gui/mode.py b/onionshare_gui/mode.py index d2579d2c..418afffd 100644 --- a/onionshare_gui/mode.py +++ b/onionshare_gui/mode.py @@ -144,13 +144,14 @@ class Mode(QtWidgets.QWidget): self.app.choose_port() # Start http service in new thread - t = threading.Thread(target=self.web.start, args=(self.app.port, not self.common.settings.get('close_after_first_download'), self.common.settings.get('slug'))) + t = threading.Thread(target=self.web.start, args=(self.app.port, not self.common.settings.get('close_after_first_download'), self.common.settings.get('public_mode'), self.common.settings.get('slug'))) t.daemon = True t.start() # Wait for the web app slug to generate before continuing - while self.web.slug == None: - time.sleep(0.1) + if not self.common.settings.get('public_mode'): + while self.web.slug == None: + time.sleep(0.1) # Now start the onion service try: diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py index 1562ee10..e016e8f9 100644 --- a/onionshare_gui/server_status.py +++ b/onionshare_gui/server_status.py @@ -314,7 +314,7 @@ class ServerStatus(QtWidgets.QWidget): """ Returns the OnionShare URL. """ - if self.mode == ServerStatus.MODE_RECEIVE and self.common.settings.get('receive_public_mode'): + if self.common.settings.get('public_mode'): url = 'http://{0:s}'.format(self.app.onion_host) else: url = 'http://{0:s}/{1:s}'.format(self.app.onion_host, self.web.slug) diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index 94480205..057c7e53 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -52,6 +52,25 @@ class SettingsDialog(QtWidgets.QDialog): self.system = platform.system() + # General options + + # Whether or not to save the Onion private key for reuse (persistent URL mode) + self.save_private_key_checkbox = QtWidgets.QCheckBox() + self.save_private_key_checkbox.setCheckState(QtCore.Qt.Unchecked) + self.save_private_key_checkbox.setText(strings._("gui_save_private_key_checkbox", True)) + + # Use a slug + self.public_mode_checkbox = QtWidgets.QCheckBox() + self.public_mode_checkbox.setCheckState(QtCore.Qt.Unchecked) + self.public_mode_checkbox.setText(strings._("gui_settings_public_mode_checkbox", True)) + + # General options layout + general_group_layout = QtWidgets.QVBoxLayout() + general_group_layout.addWidget(self.save_private_key_checkbox) + general_group_layout.addWidget(self.public_mode_checkbox) + general_group = QtWidgets.QGroupBox(strings._("gui_settings_general_label", True)) + general_group.setLayout(general_group_layout) + # Sharing options # Close after first download @@ -64,16 +83,10 @@ class SettingsDialog(QtWidgets.QDialog): self.shutdown_timeout_checkbox.setCheckState(QtCore.Qt.Checked) self.shutdown_timeout_checkbox.setText(strings._("gui_settings_shutdown_timeout_checkbox", True)) - # Whether or not to save the Onion private key for reuse - self.save_private_key_checkbox = QtWidgets.QCheckBox() - self.save_private_key_checkbox.setCheckState(QtCore.Qt.Unchecked) - self.save_private_key_checkbox.setText(strings._("gui_save_private_key_checkbox", True)) - # Sharing options layout sharing_group_layout = QtWidgets.QVBoxLayout() sharing_group_layout.addWidget(self.close_after_first_download_checkbox) sharing_group_layout.addWidget(self.shutdown_timeout_checkbox) - sharing_group_layout.addWidget(self.save_private_key_checkbox) sharing_group = QtWidgets.QGroupBox(strings._("gui_settings_sharing_label", True)) sharing_group.setLayout(sharing_group_layout) @@ -93,16 +106,10 @@ class SettingsDialog(QtWidgets.QDialog): self.receive_allow_receiver_shutdown_checkbox.setCheckState(QtCore.Qt.Checked) self.receive_allow_receiver_shutdown_checkbox.setText(strings._("gui_settings_receive_allow_receiver_shutdown_checkbox", True)) - # Use a slug - self.receive_public_mode_checkbox = QtWidgets.QCheckBox() - self.receive_public_mode_checkbox.setCheckState(QtCore.Qt.Checked) - self.receive_public_mode_checkbox.setText(strings._("gui_settings_receive_public_mode_checkbox", True)) - # Receiving options layout receiving_group_layout = QtWidgets.QVBoxLayout() receiving_group_layout.addLayout(downloads_layout) receiving_group_layout.addWidget(self.receive_allow_receiver_shutdown_checkbox) - receiving_group_layout.addWidget(self.receive_public_mode_checkbox) receiving_group = QtWidgets.QGroupBox(strings._("gui_settings_receiving_label", True)) receiving_group.setLayout(receiving_group_layout) @@ -377,6 +384,7 @@ class SettingsDialog(QtWidgets.QDialog): # Layout left_col_layout = QtWidgets.QVBoxLayout() + left_col_layout.addWidget(general_group) left_col_layout.addWidget(sharing_group) left_col_layout.addWidget(receiving_group) left_col_layout.addWidget(stealth_group) @@ -431,11 +439,11 @@ class SettingsDialog(QtWidgets.QDialog): else: self.receive_allow_receiver_shutdown_checkbox.setCheckState(QtCore.Qt.Unchecked) - receive_public_mode = self.old_settings.get('receive_public_mode') - if receive_public_mode: - self.receive_public_mode_checkbox.setCheckState(QtCore.Qt.Checked) + public_mode = self.old_settings.get('public_mode') + if public_mode: + self.public_mode_checkbox.setCheckState(QtCore.Qt.Checked) else: - self.receive_public_mode_checkbox.setCheckState(QtCore.Qt.Unchecked) + self.public_mode_checkbox.setCheckState(QtCore.Qt.Unchecked) use_stealth = self.old_settings.get('use_stealth') if use_stealth: @@ -819,7 +827,7 @@ class SettingsDialog(QtWidgets.QDialog): settings.set('hidservauth_string', '') settings.set('downloads_dir', self.downloads_dir_lineedit.text()) settings.set('receive_allow_receiver_shutdown', self.receive_allow_receiver_shutdown_checkbox.isChecked()) - settings.set('receive_public_mode', self.receive_public_mode_checkbox.isChecked()) + settings.set('public_mode', self.public_mode_checkbox.isChecked()) settings.set('use_stealth', self.stealth_checkbox.isChecked()) # Always unset the HidServAuth if Stealth mode is unset if not self.stealth_checkbox.isChecked(): diff --git a/share/locale/en.json b/share/locale/en.json index b1d247d9..4624fd14 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -91,6 +91,7 @@ "gui_settings_autoupdate_timestamp": "Last checked: {}", "gui_settings_autoupdate_timestamp_never": "Never", "gui_settings_autoupdate_check_button": "Check For Upgrades", + "gui_settings_general_label": "General options", "gui_settings_sharing_label": "Sharing options", "gui_settings_close_after_first_download_option": "Stop sharing after first download", "gui_settings_connection_type_label": "How should OnionShare connect to Tor?", @@ -183,7 +184,7 @@ "gui_settings_downloads_label": "Save files to", "gui_settings_downloads_button": "Browse", "gui_settings_receive_allow_receiver_shutdown_checkbox": "Receive mode can be stopped by the sender", - "gui_settings_receive_public_mode_checkbox": "Receive mode is open to the public\n(don't prevent people from guessing the OnionShare address)", + "gui_settings_public_mode_checkbox": "OnionShare is open to the public\n(don't prevent people from guessing the OnionShare address)", "systray_close_server_title": "OnionShare Server Closed", "systray_close_server_message": "A user closed the server", "systray_page_loaded_title": "OnionShare Page Loaded", diff --git a/share/templates/send.html b/share/templates/send.html index ba43f306..df1d3563 100644 --- a/share/templates/send.html +++ b/share/templates/send.html @@ -13,7 +13,11 @@
From 6de110bb22134b8bc7097aa2a9862c7a26b082a0 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 22 Jul 2018 14:58:14 +1000 Subject: [PATCH 23/38] Fix tests for public_mode --- test/test_onionshare_settings.py | 2 +- test/test_onionshare_web.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/test_onionshare_settings.py b/test/test_onionshare_settings.py index 3942ab8c..0c248341 100644 --- a/test/test_onionshare_settings.py +++ b/test/test_onionshare_settings.py @@ -66,7 +66,7 @@ class TestSettings: 'hidservauth_string': '', 'downloads_dir': os.path.expanduser('~/OnionShare'), 'receive_allow_receiver_shutdown': True, - 'receive_public_mode': False + 'public_mode': False } def test_fill_in_defaults(self, settings_obj): diff --git a/test/test_onionshare_web.py b/test/test_onionshare_web.py index 0b96359b..dbd026f4 100644 --- a/test/test_onionshare_web.py +++ b/test/test_onionshare_web.py @@ -168,9 +168,9 @@ class TestWeb: assert res.status_code == 302 assert web.running == True - def test_receive_mode_receive_public_mode_on(self, common_obj): + def test_public_mode_on(self, common_obj): web = web_obj(common_obj, True) - common_obj.settings.set('receive_public_mode', True) + common_obj.settings.set('public_mode', True) with web.app.test_client() as c: # Upload page should be accessible from both / and /[slug] @@ -182,9 +182,9 @@ class TestWeb: data2 = res.get_data() assert res.status_code == 200 - def test_receive_mode_receive_public_mode_off(self, common_obj): + def test_public_mode_off(self, common_obj): web = web_obj(common_obj, True) - common_obj.settings.set('receive_public_mode', False) + common_obj.settings.set('public_mode', False) with web.app.test_client() as c: # / should be a 404 From 2d3c68638377f084b1db7141c17a94043e18a65c Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 22 Jul 2018 15:50:37 +1000 Subject: [PATCH 24/38] #692 move appstream file to /usr/share/metainfo --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index b502e7ae..8806fd12 100644 --- a/setup.py +++ b/setup.py @@ -47,7 +47,7 @@ license = 'GPL v3' keywords = 'onion, share, onionshare, tor, anonymous, web server' data_files=[ (os.path.join(sys.prefix, 'share/applications'), ['install/onionshare.desktop']), - (os.path.join(sys.prefix, 'share/appdata'), ['install/onionshare.appdata.xml']), + (os.path.join(sys.prefix, 'share/metainfo'), ['install/onionshare.appdata.xml']), (os.path.join(sys.prefix, 'share/pixmaps'), ['install/onionshare80.xpm']), (os.path.join(sys.prefix, 'share/onionshare'), file_list('share')), (os.path.join(sys.prefix, 'share/onionshare/images'), file_list('share/images')), From b5c06d446aad28bb60958888c3f4de52ecb6d2a6 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 22 Jul 2018 16:20:19 +1000 Subject: [PATCH 25/38] #681 remove obsolete strings --- share/locale/cs.json | 30 ---------------------- share/locale/da.json | 39 +--------------------------- share/locale/de.json | 17 ------------- share/locale/en.json | 60 +------------------------------------------- share/locale/eo.json | 30 ---------------------- share/locale/es.json | 19 +------------- share/locale/fi.json | 27 +------------------- share/locale/fr.json | 22 ---------------- share/locale/it.json | 27 +------------------- share/locale/nl.json | 38 +--------------------------- share/locale/no.json | 4 --- share/locale/pt.json | 4 --- share/locale/ru.json | 4 --- share/locale/tr.json | 27 +------------------- 14 files changed, 7 insertions(+), 341 deletions(-) diff --git a/share/locale/cs.json b/share/locale/cs.json index aaa80d1b..9e151dd6 100644 --- a/share/locale/cs.json +++ b/share/locale/cs.json @@ -1,58 +1,31 @@ { "config_onion_service": "Nastavuji onion service na portu {0:d}.", "preparing_files": "Připravuji soubory ke sdílení.", - "wait_for_hs": "Čekám na HS až bude připravena:", - "wait_for_hs_trying": "Zkouším...", - "wait_for_hs_nope": "Ještě nepřipraven.", - "wait_for_hs_yup": "Připraven!", "give_this_url": "Dejte tuto URL osobě, které dané soubory posíláte:", "give_this_url_stealth": "Give this URL and HidServAuth line to the person you're sending the file to:", "ctrlc_to_stop": "Stiskněte Ctrl-C pro zastavení serveru", "not_a_file": "{0:s} není soubor.", - "download_page_loaded": "Download page loaded", "other_page_loaded": "URL loaded", "closing_automatically": "Zastavuji automaticky, protože stahování skončilo", "large_filesize": "Varování: Posílání velkých souborů může trvat hodiny", - "error_tails_invalid_port": "Nesprávná hodnota, port musí být celé číslo", - "error_tails_unknown_root": "Neznámá chyba s Tails root procesem", "help_local_only": "Nepoužívat Tor: jen pro vývoj", "help_stay_open": "Nechat běžet onion service po skončení stahování", - "help_transparent_torification": "My system is transparently torified", "help_stealth": "Create stealth onion service (advanced)", "help_debug": "Zaznamenat chyby na disk", "help_filename": "Seznam souborů a složek ke sdílení", - "gui_drag_and_drop": "Táhni a pusť\nsoubory sem", - "gui_add": "Přidat", - "gui_delete": "Smazat", - "gui_choose_items": "Vybrat", "gui_share_start_server": "Spustit sdílení", "gui_share_stop_server": "Zastavit sdílení", "gui_copy_url": "Kopírovat URL", "gui_copy_hidservauth": "Kopírovat HidServAuth", - "gui_downloads": "Stahování:", - "gui_canceled": "Zrušeno", - "gui_copied_url": "URL zkopírováno do schránky", - "gui_copied_hidservauth": "Copied HidServAuth line to clipboard", - "gui_starting_server1": "Spouštím Tor onion service...", - "gui_starting_server2": "Zpracovávám soubory...", "gui_please_wait": "Prosím čekejte...", - "error_hs_dir_cannot_create": "Nejde vytvořit složka onion service {0:s}", - "error_hs_dir_not_writable": "nejde zapisovat do složky onion service {0:s}", "using_ephemeral": "Starting ephemeral Tor onion service and awaiting publication", - "gui_download_upload_progress_complete": "%p%, Uplynulý čas: {0:s}", - "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", - "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", "version_string": "Onionshare {0:s} | https://onionshare.org/", "gui_share_quit_warning": "Jste si jistí, že chcete odejít?\nURL, kterou sdílíte poté nebude existovat.", "gui_quit_warning_quit": "Zavřít", "gui_quit_warning_dont_quit": "Zůstat", "error_rate_limit": "Útočník možná zkouší uhodnout vaši URL. Abychom tomu předešli, OnionShare automaticky zastavil server. Pro sdílení souborů ho musíte spustit znovu a sdílet novou URL.", - "zip_progress_bar_format": "Zpracovávám soubory: %p%", "error_stealth_not_supported": "To create stealth onion services, you need at least Tor 0.2.9.1-alpha (or Tor Browser 6.5) and at least python3-stem 1.5.0.", "error_ephemeral_not_supported": "OnionShare vyžaduje nejméně Tor 0.2.7.1 a nejméně python3-stem 1.4.0.", - "gui_menu_file_menu": "&File", - "gui_menu_settings_action": "&Settings", - "gui_menu_quit_action": "&Quit", "gui_settings_window_title": "Nastavení", "gui_settings_connection_type_label": "Jak by se měl OnionShare připojit k Toru?", "gui_settings_connection_type_automatic_option": "Zkusit automatické nastavení s Tor Browserem", @@ -63,10 +36,7 @@ "gui_settings_authenticate_label": "Autentizační možnosti Toru", "gui_settings_authenticate_no_auth_option": "Žádná autentizace ani cookie autentizace", "gui_settings_authenticate_password_option": "Heslo", - "gui_settings_authenticate_cookie_option": "Cookie", "gui_settings_password_label": "Heslo", - "gui_settings_cookie_label": "Cesta ke cookie", - "gui_settings_button_test": "Test Settings", "gui_settings_button_save": "Uložit", "gui_settings_button_cancel": "Zrušit", "settings_saved": "Nastavení uloženo do {}", diff --git a/share/locale/da.json b/share/locale/da.json index d36f7035..ded2d61c 100644 --- a/share/locale/da.json +++ b/share/locale/da.json @@ -1,66 +1,35 @@ { "config_onion_service": "Konfigurerer onion-tjeneste på port {0:d}.", "preparing_files": "Forbereder filer som skal deles.", - "wait_for_hs": "Venter på at HS bliver klar:", - "wait_for_hs_trying": "Prøver...", - "wait_for_hs_nope": "Endnu ikke klar.", - "wait_for_hs_yup": "Klar!", "give_this_url": "Giv denne URL til personen du sender filen til:", "give_this_url_stealth": "Giv denne URL og HidServAuth-linje til personen du sender filen til:", "ctrlc_to_stop": "Tryk på Ctrl-C for at stoppe serveren", "not_a_file": "{0:s} er ikke en gyldig fil.", "not_a_readable_file": "{0:s} er ikke en læsbar fil.", "no_available_port": "Kunne ikke starte onion-tjenesten da der ikke var nogen tilgængelig port.", - "download_page_loaded": "Downloadside indlæst", "other_page_loaded": "URL indlæst", "close_on_timeout": "Lukker automatisk da timeout er nået", "closing_automatically": "Lukker automatisk da download er færdig", - "timeout_download_still_running": "Venter på at download skal blive færdig inden automatisk stop", "large_filesize": "Advarsel: Det kan tage timer at sende store filer", - "error_tails_invalid_port": "Ugyldig værdi, port skal være et heltal", - "error_tails_unknown_root": "Ukendt fejl med Tails-rodproces", "systray_menu_exit": "Afslut", - "systray_download_started_title": "OnionShare-download startet", - "systray_download_started_message": "En bruger startede download af dine filer", - "systray_download_completed_title": "OnionShare-download færdig", - "systray_download_completed_message": "Brugeren er færdig med at downloade dine filer", - "systray_download_canceled_title": "OnionShare-download annulleret", - "systray_download_canceled_message": "Brugeren annullerede downloaden", "help_local_only": "Undlad at bruge tor: kun til udvikling", "help_stay_open": "Hold onion-tjeneste kørende efter download er færdig", "help_shutdown_timeout": "Luk onion-tjenesten efter N sekunder", - "help_transparent_torification": "Mit system er gennemsigtigt torifiseret", "help_stealth": "Opret usynlig onion-tjeneste (avanceret)", "help_debug": "Log programfejl til stdout, og log webfejl til disk", "help_filename": "Liste over filer eller mapper som skal deles", "help_config": "Sti til en brugerdefineret JSON-konfigurationsfil (valgfri)", - "gui_drag_and_drop": "Træk og slip\nfiler her", - "gui_add": "Tilføj", - "gui_delete": "Slet", - "gui_choose_items": "Vælg", "gui_share_start_server": "Start deling", "gui_share_stop_server": "Stop deling", "gui_copy_url": "Kopiér URL", "gui_copy_hidservauth": "Kopiér HidServAuth", - "gui_downloads": "Downloads:", - "gui_canceled": "Annulleret", - "gui_copied_url": "Kopierede URL til udklipsholder", - "gui_copied_hidservauth": "Kopierede HidServAuth-linje til udklipsholder", - "gui_starting_server1": "Starter Tor onion-tjeneste...", - "gui_starting_server2": "Databehandler filer...", "gui_please_wait": "Vent venligst...", - "error_hs_dir_cannot_create": "Kan ikke oprette onion-tjenestens mappe {0:s}", - "error_hs_dir_not_writable": "onion-tjenestens mappe {0:s} er skrivebeskyttet", "using_ephemeral": "Starter kortvarig Tor onion-tjeneste og afventer udgivelse", - "gui_download_upload_progress_complete": "%p%, tid forløbet: {0:s}", - "gui_download_upload_progress_starting": "{0:s}, %p% (udregner anslået ankomsttid)", - "gui_download_upload_progress_eta": "{0:s}, anslået ankomsttid: {1:s}, %p%", "version_string": "Onionshare {0:s} | https://onionshare.org/", "gui_share_quit_warning": "Er du sikker på, at du vil afslutte?\nURL'en som du deler vil ikke eksistere længere.", "gui_quit_warning_quit": "Afslut", "gui_quit_warning_dont_quit": "Afslut ikke", "error_rate_limit": "En angriber forsøger måske at gætte din URL. For at forhindre det, har OnionShare automatisk stoppet serveren. For at dele filerne skal du starte den igen og dele den nye URL.", - "zip_progress_bar_format": "Databehandler filer: %p%", "error_stealth_not_supported": "For at oprette usynlige onion-tjenester, skal du mindst have Tor 0.2.9.1-alpha (eller Tor Browser 6.5) og mindst python3-stem 1.5.0.", "error_ephemeral_not_supported": "OnionShare kræver mindst Tor 0.2.7.1 og mindst python3-stem 1.4.0.", "gui_settings_window_title": "Indstillinger", @@ -87,9 +56,7 @@ "gui_settings_authenticate_label": "Valgmuligheder for Tor-autentifikation", "gui_settings_authenticate_no_auth_option": "Ingen autentifikation, eller cookieautentifikation", "gui_settings_authenticate_password_option": "Adgangskode", - "gui_settings_authenticate_cookie_option": "Cookie", "gui_settings_password_label": "Adgangskode", - "gui_settings_cookie_label": "Cookiesti", "gui_settings_tor_bridges": "Understøttelse af Tor-bro", "gui_settings_tor_bridges_no_bridges_radio_option": "Brug ikke broer", "gui_settings_tor_bridges_obfs4_radio_option": "Brug indbygget obfs4 udskiftelige transporter", @@ -100,7 +67,6 @@ "gui_settings_button_save": "Gem", "gui_settings_button_cancel": "Annuller", "gui_settings_button_help": "Hjælp", - "gui_settings_shutdown_timeout_choice": "Sæt timer til automatisk stop?", "gui_settings_shutdown_timeout": "Stop delingen ved:", "settings_saved": "Indstillinger gemt til {}", "settings_error_unknown": "Kan ikke oprette forbindelse til Tor-kontroller da indstillingerne ikke giver mening.", @@ -112,7 +78,6 @@ "settings_error_unreadable_cookie_file": "Forbundet til Tor-kontroller, men kan ikke autentificere da din adgangskode kan være forkert, og din bruger ikke har tilladelse til at læse cookiefilen.", "settings_error_bundled_tor_not_supported": "Bundet Tor understøttes ikke når der ikke bruges udviklertilstand i Windows eller MacOS.", "settings_error_bundled_tor_timeout": "Det tager for længe at oprette forbindelse til Tor. Din computer er måske offline, eller dit ur går forkert.", - "settings_error_bundled_tor_canceled": "Tor-processen lukkede inden den blev færdig med at oprette forbindelse.", "settings_error_bundled_tor_broken": "Der er noget galt med OnionShare som opretter forbindelse til Tor i baggrunden:\n{}", "settings_test_success": "Tillykke, OnionShare kan oprette forbindelse til Tor-kontrolleren.\n\nTor version: {}\nUnderstøtter kortvarige onion-tjenester: {}\nUnderstøtter usynlige onion-tjenester: {}", "error_tor_protocol_error": "Fejl under snak med Tor-kontrolleren.\nHvis du bruger Whonix, så tjek https://www.whonix.org/wiki/onionshare for at få OnionShare til at virke.", @@ -129,7 +94,5 @@ "gui_tor_connection_lost": "Afbryder forbindelsen fra Tor.", "gui_server_started_after_timeout": "Serveren startede efter dit valgte automatiske timeout.\nStart venligst en ny deling.", "gui_server_timeout_expired": "Den valgte timeout er allerede udløbet.\nOpdater venligst timeouten og herefter kan du starte deling.", - "share_via_onionshare": "Del via OnionShare", - "gui_save_private_key_checkbox": "Brug en vedvarende URL\n(fravalg vil slette gemte URL)", - "persistent_url_in_use": "Denne deling bruger en vedvarende URL" + "gui_save_private_key_checkbox": "Brug en vedvarende URL\n(fravalg vil slette gemte URL)" } diff --git a/share/locale/de.json b/share/locale/de.json index 8e87b89b..b5925b8e 100644 --- a/share/locale/de.json +++ b/share/locale/de.json @@ -1,34 +1,17 @@ { - "connecting_ctrlport": "Verbinde zum Tor-Kontrollport um den versteckten Dienst auf Port {0:d} laufen zu lassen.", - "cant_connect_ctrlport": "Konnte keine Verbindung zum Tor-Kontrollport auf Port {0:s} aufbauen. Läuft Tor?", - "cant_connect_socksport": "Konnte keine Verbindung zum Tor SOCKS5 Server auf Port {0:s} herstellen. OnionShare setzt voraus dass Tor Browser im Hintergrund läuft. Wenn du noch ihn noch noch nicht hast kannst du ihn unter https://www.torproject.org/ herunterladen.", "preparing_files": "Dateien werden vorbereitet.", - "wait_for_hs": "Warte auf HS:", - "wait_for_hs_trying": "Verbindungsversuch...", - "wait_for_hs_nope": "Noch nicht bereit.", - "wait_for_hs_yup": "Bereit!", "give_this_url": "Geben Sie diese URL der Person, der Sie die Datei zusenden möchten:", "ctrlc_to_stop": "Drücken Sie Strg+C um den Server anzuhalten", "not_a_file": "{0:s} ist keine Datei.", - "download_page_loaded": "Seite geladen", "other_page_loaded": "URL geladen", "closing_automatically": "Halte automatisch an, da der Download beendet wurde", "large_filesize": "Warnung: Das Senden von großen Dateien kann Stunden dauern", - "error_tails_invalid_port": "Ungültiger Wert, Port muss eine ganze Zahl sein", - "error_tails_unknown_root": "Unbekannter Fehler mit Tails root Prozess", - "help_tails_port": "Nur für Tails: Port um den Firewall zu öffnen, starte onion service", "help_local_only": "Nicht mit Tor benutzen, nur für Entwicklung", "help_stay_open": "Den onion service nicht anhalten nachdem ein Download beendet wurde", "help_debug": "Fehler auf Festplatte schreiben", "help_filename": "Liste der zu teilenden Dateien oder Verzeichnisse", - "gui_drag_and_drop": "Drag & drop\nDateien hier", - "gui_add": "Hinzufügen", - "gui_delete": "Löschen", - "gui_choose_items": "Auswählen", "gui_share_start_server": "Server starten", "gui_share_stop_server": "Server anhalten", "gui_copy_url": "URL kopieren", - "gui_downloads": "Downloads:", - "gui_copied_url": "URL wurde in die Zwischenablage kopiert", "gui_please_wait": "Bitte warten..." } diff --git a/share/locale/en.json b/share/locale/en.json index b1d247d9..cbb444ec 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -1,10 +1,6 @@ { "config_onion_service": "Configuring onion service on port {0:d}.", "preparing_files": "Preparing files to share.", - "wait_for_hs": "Waiting for HS to be ready:", - "wait_for_hs_trying": "Trying…", - "wait_for_hs_nope": "Not ready yet.", - "wait_for_hs_yup": "Ready!", "give_this_url": "Give this address to the person you're sending the file to:", "give_this_url_stealth": "Give this address and HidServAuth line to the person you're sending the file to:", "give_this_url_receive": "Give this address to the people sending you files:", @@ -17,21 +13,8 @@ "other_page_loaded": "Address loaded", "close_on_timeout": "Stopped because timer expired", "closing_automatically": "Stopped because download finished", - "timeout_download_still_running": "Waiting for download to complete", "large_filesize": "Warning: Sending large files could take hours", - "error_tails_invalid_port": "Invalid value, port must be a regular number", - "error_tails_unknown_root": "Unknown error with Tails root process", "systray_menu_exit": "Quit", - "systray_download_started_title": "OnionShare Download Started", - "systray_download_started_message": "A user started downloading your files", - "systray_download_completed_title": "OnionShare Download Finished", - "systray_download_completed_message": "The user finished downloading your files", - "systray_download_canceled_title": "OnionShare Download Canceled", - "systray_download_canceled_message": "The user canceled the download", - "systray_upload_started_title": "OnionShare Upload Started", - "systray_upload_started_message": "A user started uploading files to your computer", - "systray_upload_completed_title": "OnionShare Upload Finished", - "systray_upload_completed_message": "The user finished uploading files to your computer", "help_local_only": "Do not attempt to use Tor: For development only", "help_stay_open": "Keep onion service running after download has finished", "help_shutdown_timeout": "Shut down the onion service after N seconds", @@ -40,37 +23,18 @@ "help_debug": "Log application errors to stdout, and log web errors to disk", "help_filename": "List of files or folders to share", "help_config": "Path to a custom JSON config file (optional)", - "gui_drag_and_drop": "Drag and drop files and folders\nto start sharing", - "gui_add": "Add", - "gui_delete": "Delete", - "gui_choose_items": "Choose", "gui_share_start_server": "Start Sharing", "gui_share_stop_server": "Stop Sharing", - "gui_share_stop_server_shutdown_timeout": "Stop Sharing ({}s remaining)", "gui_share_stop_server_shutdown_timeout_tooltip": "Share will expire automatically at {}", "gui_receive_start_server": "Start Receive Mode", "gui_receive_stop_server": "Stop Receive Mode", - "gui_receive_stop_server_shutdown_timeout": "Stop Receive Mode ({}s remaining)", "gui_receive_stop_server_shutdown_timeout_tooltip": "Receive mode will expire automatically at {}", "gui_copy_url": "Copy Address", "gui_copy_hidservauth": "Copy HidServAuth", - "gui_downloads": "Download History", - "gui_downloads_window_tooltip": "Show/hide downloads", - "gui_no_downloads": "No downloads yet.", - "gui_canceled": "Canceled", "gui_copied_url_title": "Copied OnionShare address", - "gui_copied_url": "The OnionShare address has been copied to clipboard", "gui_copied_hidservauth_title": "Copied HidServAuth", - "gui_copied_hidservauth": "The HidServAuth line has been copied to clipboard", - "gui_starting_server1": "Starting Tor onion service…", - "gui_starting_server2": "Compressing files…", "gui_please_wait": "Starting… Click to cancel", - "error_hs_dir_cannot_create": "Cannot create onion service dir {0:s}", - "error_hs_dir_not_writable": "onion service dir {0:s} is not writable", "using_ephemeral": "Starting ephemeral Tor onion service and awaiting publication", - "gui_download_upload_progress_complete": "%p%, Time Elapsed: {0:s}", - "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", - "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", "version_string": "OnionShare {0:s} | https://onionshare.org/", "gui_quit_title": "Transfer in Progress", "gui_share_quit_warning": "You're in the process of sending files. Are you sure you want to quit OnionShare?", @@ -78,7 +42,6 @@ "gui_quit_warning_quit": "Quit", "gui_quit_warning_dont_quit": "Cancel", "error_rate_limit": "An attacker might be trying to guess your address. To prevent this, OnionShare has automatically stopped the server. To share the files you must start it again and share the new address.", - "zip_progress_bar_format": "Compressing files: %p%", "error_stealth_not_supported": "To create stealth onion services, you need at least Tor 0.2.9.1-alpha (or Tor Browser 6.5) and at least python3-stem 1.5.0.", "error_ephemeral_not_supported": "OnionShare requires at least Tor 0.2.7.1 and at least python3-stem 1.4.0.", "gui_settings_window_title": "Settings", @@ -105,9 +68,7 @@ "gui_settings_authenticate_label": "Tor authentication options", "gui_settings_authenticate_no_auth_option": "No authentication, or cookie authentication", "gui_settings_authenticate_password_option": "Password", - "gui_settings_authenticate_cookie_option": "Cookie", "gui_settings_password_label": "Password", - "gui_settings_cookie_label": "Cookie path", "gui_settings_tor_bridges": "Tor Bridge support", "gui_settings_tor_bridges_no_bridges_radio_option": "Don't use bridges", "gui_settings_tor_bridges_obfs4_radio_option": "Use built-in obfs4 pluggable transports", @@ -135,7 +96,6 @@ "settings_error_unreadable_cookie_file": "Connected to Tor controller, but can't authenticate because your password may be wrong, and your user lacks permission to read the cookie file.", "settings_error_bundled_tor_not_supported": "Use of the Tor version bundled with OnionShare is not supported when using developer mode on Windows or macOS.", "settings_error_bundled_tor_timeout": "Connecting to Tor is taking too long. Maybe your computer is offline, or your system clock isn't accurate.", - "settings_error_bundled_tor_canceled": "The Tor process closed before it could finish connecting.", "settings_error_bundled_tor_broken": "OnionShare could not connect to Tor in the background:\n{}", "settings_test_success": "Congratulations, OnionShare can connect to the Tor controller.\n\nTor version: {}\nSupports ephemeral onion services: {}\nSupports stealth onion services: {}", "error_tor_protocol_error": "Could not communicate with the Tor controller.\nIf you're using Whonix, check out https://www.whonix.org/wiki/onionshare to make OnionShare work.", @@ -152,7 +112,6 @@ "gui_tor_connection_lost": "Disconnected from Tor.", "gui_server_started_after_timeout": "The server started after your chosen auto-timeout.\nPlease start a new share.", "gui_server_timeout_expired": "The chosen timeout has already expired.\nPlease update the timeout and then you may start sharing.", - "share_via_onionshare": "Share via OnionShare", "gui_save_private_key_checkbox": "Use a persistent address\n(unchecking will delete any saved addresses)", "gui_share_url_description": "Anyone with this link can download your files using the Tor Browser: ", "gui_receive_url_description": "Anyone with this link can upload files to your computer using the Tor Browser: ", @@ -166,15 +125,10 @@ "gui_status_indicator_receive_stopped": "Ready to Receive", "gui_status_indicator_receive_working": "Starting…", "gui_status_indicator_receive_started": "Receiving", - "gui_file_info": "{} Files, {}", - "gui_file_info_single": "{} File, {}", - "info_in_progress_downloads_tooltip": "{} download(s) in progress", - "info_completed_downloads_tooltip": "{} download(s) completed", "error_cannot_create_downloads_dir": "Error creating downloads folder: {}", "error_downloads_dir_not_writable": "The downloads folder isn't writable: {}", "receive_mode_downloads_dir": "Files people send you will appear in this folder: {}", "receive_mode_warning": "Warning: Receive mode lets someone else upload files to your computer. Some files can hack your computer if you open them! Only open files from people you trust, or if you know what you're doing.", - "gui_receive_mode_warning": "Some files can hack your computer if you open them!
Only open files from people you trust, or if you know what you're doing.", "receive_mode_upload_starting": "Upload of total size {} is starting", "receive_mode_received_file": "Received file: {}", "gui_mode_share_button": "Share Files", @@ -183,17 +137,5 @@ "gui_settings_downloads_label": "Save files to", "gui_settings_downloads_button": "Browse", "gui_settings_receive_allow_receiver_shutdown_checkbox": "Receive mode can be stopped by the sender", - "gui_settings_receive_public_mode_checkbox": "Receive mode is open to the public\n(don't prevent people from guessing the OnionShare address)", - "systray_close_server_title": "OnionShare Server Closed", - "systray_close_server_message": "A user closed the server", - "systray_page_loaded_title": "OnionShare Page Loaded", - "systray_download_page_loaded_message": "A user loaded the download page", - "systray_upload_page_loaded_message": "A user loaded the upload page", - "gui_uploads": "Upload History", - "gui_uploads_window_tooltip": "Show/hide uploads", - "gui_no_uploads": "No uploads yet.", - "gui_upload_in_progress": "Upload Started {}", - "gui_upload_finished_range": "Uploaded {} to {}", - "gui_upload_finished": "Uploaded {}", - "gui_open_folder_error_nautilus": "Cannot open folder the because nautilus is not available. You can find this file here: {}" + "gui_settings_receive_public_mode_checkbox": "Receive mode is open to the public\n(don't prevent people from guessing the OnionShare address)" } diff --git a/share/locale/eo.json b/share/locale/eo.json index 0745ecaf..5c0fa008 100644 --- a/share/locale/eo.json +++ b/share/locale/eo.json @@ -1,58 +1,31 @@ { "config_onion_service": "Agordas onion service je pordo {0:d}.", "preparing_files": "Preparas dosierojn por kundivido.", - "wait_for_hs": "Atendas al hidden sevice por esti preta:", - "wait_for_hs_trying": "Provas...", - "wait_for_hs_nope": "Ankoraŭ ne preta.", - "wait_for_hs_yup": "Preta!", "give_this_url": "Donu ĉi tiun URL al la persono al kiu vi sendas la dosieron:", "give_this_url_stealth": "Give this URL and HidServAuth line to the person you're sending the file to:", "ctrlc_to_stop": "Presu Ctrl-C por halti la servilon", "not_a_file": "{0:s} ne estas dosiero.", - "download_page_loaded": "Download page loaded", "other_page_loaded": "URL loaded", "closing_automatically": "Haltas aŭtomate ĉar la elŝuto finiĝis", "large_filesize": "Atentigo: Sendado de grandaj dosieroj povas daŭri horojn", - "error_tails_invalid_port": "Malĝusta valoro, pordo-numero devas esti plena numero", - "error_tails_unknown_root": "Nekonata eraro kun Tails-root-procezo", "help_local_only": "Ne strebu uzi tor: nur por evoluado", "help_stay_open": "Lasu onion service funkcii post fino de elŝuto", - "help_transparent_torification": "My system is transparently torified", "help_stealth": "Create stealth onion service (advanced)", "help_debug": "Protokoli erarojn sur disko", "help_filename": "Listo de dosieroj aŭ dosierujoj por kundividi", - "gui_drag_and_drop": "Ŝovu kaj metu\nla dosierojn ĉi tien", - "gui_add": "Aldoni", - "gui_delete": "Forviŝi", - "gui_choose_items": "Elekti", "gui_share_start_server": "Komenci kundividon", "gui_share_stop_server": "Ĉesigi kundividon", "gui_copy_url": "Kopii URL", "gui_copy_hidservauth": "Kopii HidServAuth", - "gui_downloads": "Elŝutoj:", - "gui_canceled": "Nuligita", - "gui_copied_url": "URL kopiita en tondujon", - "gui_copied_hidservauth": "Copied HidServAuth line to clipboard", - "gui_starting_server1": "Startigas Tor onion service...", - "gui_starting_server2": "Compressing files...", "gui_please_wait": "Bonvolu atendi...", - "error_hs_dir_cannot_create": "Ne eblas krei hidden-service-dosierujon {0:s}", - "error_hs_dir_not_writable": "ne eblas konservi dosierojn en hidden-service-dosierujo {0:s}", "using_ephemeral": "Starting ephemeral Tor onion service and awaiting publication", - "gui_download_upload_progress_complete": "%p%, Tempo pasinta: {0:s}", - "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", - "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", "version_string": "Onionshare {0:s} | https://onionshare.org/", "gui_share_quit_warning": "Ĉu vi certas ke vi volas foriri?\nLa URL, kiun vi kundividas ne plu ekzistos.", "gui_quit_warning_quit": "Foriri", "gui_quit_warning_dont_quit": "Ne foriri", "error_rate_limit": "Iu atankanto povas provi diveni vian URL. Por eviti tion, OnionShare aŭtomate haltis la servilon. Por kundividi la dosierojn vi devas starti ĝin denove kaj kundividi la novan URL.", - "zip_progress_bar_format": "Compressing files: %p%", "error_stealth_not_supported": "To create stealth onion services, you need at least Tor 0.2.9.1-alpha (or Tor Browser 6.5) and at least python3-stem 1.5.0.", "error_ephemeral_not_supported": "OnionShare postulas almenaŭ Tor 0.2.7.1 kaj almenaŭ python3-stem 1.4.0.", - "gui_menu_file_menu": "&File", - "gui_menu_settings_action": "&Settings", - "gui_menu_quit_action": "&Quit", "gui_settings_window_title": "Settings", "gui_settings_connection_type_label": "Kiel OnionShare devus konektiĝi al Tor?", "gui_settings_connection_type_automatic_option": "Provi aŭtomate agordi kun Tor Browser", @@ -63,10 +36,7 @@ "gui_settings_authenticate_label": "Tor authentication options", "gui_settings_authenticate_no_auth_option": "No authentication, or cookie authentication", "gui_settings_authenticate_password_option": "Pasvorto", - "gui_settings_authenticate_cookie_option": "Kuketo", "gui_settings_password_label": "Pasvorto", - "gui_settings_cookie_label": "Cookie path", - "gui_settings_button_test": "Test Settings", "gui_settings_button_save": "Konservi", "gui_settings_button_cancel": "Nuligi", "settings_saved": "Agordoj konservitaj en {}", diff --git a/share/locale/es.json b/share/locale/es.json index 412fb501..705f4fbb 100644 --- a/share/locale/es.json +++ b/share/locale/es.json @@ -1,32 +1,15 @@ { - "connecting_ctrlport": "Conectando a puerto control de Tor para configurar servicio oculto en puerto {0:d}.", - "cant_connect_ctrlport": "No se pudo conectar a puerto control de Tor en puertos {0:s}. ¿Está funcionando Tor?", - "cant_connect_socksport": "No se pudo conectar al servidor SOCKS5 de Tor en el puerto {0:s}. ¿Está funcionando Tor?", "preparing_files": "Preparando los archivos para compartir.", - "wait_for_hs": "Esperando a que HS esté listo:", - "wait_for_hs_trying": "Probando...", - "wait_for_hs_nope": "No está listo todavía.", - "wait_for_hs_yup": "Listo!", "give_this_url": "Entregue esta URL a la persona a la que está enviando el archivo:", "ctrlc_to_stop": "Pulse Ctrl-C para detener el servidor", "not_a_file": "{0:s} no es un archivo.", - "download_page_loaded": "La página de descarga está lista.", "other_page_loaded": "La URL está lista.", "closing_automatically": "Apagando automáticamente porque la descarga finalizó", - "error_tails_invalid_port": "Valor inválido, el puerto debe ser un entero", - "error_tails_unknown_root": "Error desconocido en el proceso de Tails ejecutando como roo", - "help_tails_port": "Sólo Tails: puerto para abrir en el firewall, al levantar el servicio oculto", "help_local_only": "No intentar usar Tor: sólo para desarrollo", "help_stay_open": "Mantener el servicio oculto ejecutando después de que la descarga haya finalizado", "help_debug": "Guardar registro de errores en el disco", "help_filename": "Lista de archivos o carpetas para compartir", - "gui_drag_and_drop": "Arrastre\narchivos aquí", - "gui_add": "Añadir", - "gui_delete": "Eliminar", - "gui_choose_items": "Elegir", "gui_share_start_server": "Encender el Servidor", "gui_share_stop_server": "Detener el Servidor", - "gui_copy_url": "Copiar URL", - "gui_downloads": "Descargas:", - "gui_copied_url": "Se copió la URL en el portapapeles" + "gui_copy_url": "Copiar URL" } diff --git a/share/locale/fi.json b/share/locale/fi.json index 00768528..6032b8a8 100644 --- a/share/locale/fi.json +++ b/share/locale/fi.json @@ -1,43 +1,18 @@ { - "connecting_ctrlport": "Yhdistetään Torin ohjausporttiin että saadaan salattu palvelin porttiin {0:d}.", - "cant_connect_ctrlport": "Ei voi yhdistää Torin ohjausporttiin portissa {0:s}. OnionShare tarvitsee Tor Browserin toimimaan taustalla. Jos sinulla ei ole sitä niin voit hakea sen osoitteesta https://www.torproject.org/.", - "cant_connect_socksport": "Ei voi yhdistää Tor SOCKS5 palveluun portissa {0:s}. OnionShare tarvitsee Tor Browserin toimimaan taustalla. Jos sinulla ei ole sitä niin voit hakea sen osoitteesta https://www.torproject.org/.", "preparing_files": "Valmistellaan tiedostoja jaettavaksi.", - "wait_for_hs": "Odotetaan piilopalvelun valmistumista:", - "wait_for_hs_trying": "Yritetään...", - "wait_for_hs_nope": "Ei vielä valmis.", - "wait_for_hs_yup": "Valmis!", "give_this_url": "Anna tämä URL-osoite henkilölle, jolle lähetät tiedostot:", "ctrlc_to_stop": "Näppäin Ctrl-C pysäyttää palvelimen", "not_a_file": "{0:s} Ei ole tiedosto.", - "download_page_loaded": "Lataussivu ladattu", "other_page_loaded": "URL-osoite ladattu", "closing_automatically": "Lataus valmis. Suljetaan automaattisesti", "large_filesize": "Varoitus: Isojen tiedostojen lähetys saattaa kestää tunteja", - "error_tails_invalid_port": "Väärä arvo, portti pitää olla koknaisluku", - "error_tails_unknown_root": "Tuntematon virhe Tailsissa", - "help_tails_port": "Vain Tails: portti palomuurin läpi, käynnistetään salainen palvelin", "help_local_only": "Älä käytä Toria: vain ohjelmakehitykseen", "help_stay_open": "Pidä piilopalvelu käynnissä latauksen jälkeen.", - "help_transparent_torification": "Järjestelmäni käyttää Toria läpinäkyvästi", "help_debug": "Tallentaa virheet levylle", "help_filename": "Luettele jaettavat tiedostot tai kansiot", - "gui_drag_and_drop": "Vedä ja pudota\ntiedostot tänne", - "gui_add": "Lisää", - "gui_delete": "Poista", - "gui_choose_items": "Valitse", "gui_share_start_server": "Käynnistä palvelin", "gui_share_stop_server": "Pysäytä palvelin", "gui_copy_url": "Kopioi URL-osoite", - "gui_downloads": "Lataukset:", - "gui_canceled": "Peruutettu", - "gui_copied_url": "URL-osoite kopioitu leikepöydälle", - "gui_starting_server1": "Käynnistetään Tor piilopalvelu...", - "gui_starting_server2": "Tiivistän tiedostoja...", - "gui_starting_server3": "Odotetaan Tor piilopalvelua...", "gui_please_wait": "Odota...", - "error_hs_dir_cannot_create": "Piilopalvelulle ei pystytty luomaan hakemistoa {0:s}", - "error_hs_dir_not_writable": "Piilopalvelun hakemistoon {0:s} ei voi kirjoittaa", - "using_ephemeral": "Käynnistetään lyhytaikainen Tor piilopalvelu ja odotetaan julkaisua", - "zip_progress_bar_format": "Tiivistän tiedostoja: %p%" + "using_ephemeral": "Käynnistetään lyhytaikainen Tor piilopalvelu ja odotetaan julkaisua" } diff --git a/share/locale/fr.json b/share/locale/fr.json index 6ec20b3b..a555dd58 100644 --- a/share/locale/fr.json +++ b/share/locale/fr.json @@ -1,41 +1,19 @@ { - "connecting_ctrlport": "Connexion au réseau Tor pour mettre en place un onion service sur le port {0:d}.", - "cant_connect_ctrlport": "Impossible de se connecter au port de contrôle Tor sur le port {0:s}. Est-ce que Tor tourne ?", "preparing_files": "Préparation des fichiers à partager.", - "wait_for_hs": "En attente du HS:", - "wait_for_hs_trying": "Tentative...", - "wait_for_hs_nope": "Pas encore prêt.", - "wait_for_hs_yup": "Prêt !", "give_this_url": "Donnez cette URL à la personne qui doit recevoir le fichier :", "ctrlc_to_stop": "Ctrl-C arrête le serveur", "not_a_file": "{0:s} n'est pas un fichier.", - "download_page_loaded": "Page de téléchargement chargée", "other_page_loaded": "URL chargée", "closing_automatically": "Fermeture automatique car le téléchargement est fini", - "error_tails_invalid_port": "Valeur invalide, le port doit être un nombre entier", - "error_tails_unknown_root": "Erreur inconnue avec un processus root sur Tails", "systray_menu_exit": "Quitter", - "systray_download_started_title": "Téléchargement OnionShare Démarré", - "systray_download_started_message": "Un utilisateur télécharge vos fichiers", - "systray_download_completed_title": "Téléchargement OnionShare Complete", - "systray_download_canceled_title": "Téléchargement OnionShare Annulé", - "systray_download_canceled_message": "L'utilisateur a annulé le téléchargement", - "help_tails_port": "Seulement sur Tails: port pour ouvrir le firewall, démarrage du onion service", "help_local_only": "Ne tentez pas d'utiliser Tor, uniquement pour développement", "help_stay_open": "Laisser tourner le onion service après que le téléchargment soit fini", "help_debug": "Enregistrer les erreurs sur le disque", "help_filename": "Liste des fichiers ou dossiers à partager", - "gui_drag_and_drop": "Glissez déposez\nles fichiers ici", - "gui_add": "Ajouter", - "gui_delete": "Supprimer", - "gui_choose_items": "Sélectionnez", "gui_share_start_server": "Démarrer le serveur", "gui_share_stop_server": "Arrêter le serveur", "gui_copy_url": "Copier URL", "gui_copy_hidservauth": "Copier HidServAuth", - "gui_downloads": "Téléchargements :", - "gui_canceled": "Annulé", - "gui_copied_url": "URL copié dans le presse-papier", "gui_please_wait": "Attendez-vous...", "gui_quit_warning_quit": "Quitter", "gui_quit_warning_dont_quit": "Ne quitter pas", diff --git a/share/locale/it.json b/share/locale/it.json index 7ad38169..f64b04d5 100644 --- a/share/locale/it.json +++ b/share/locale/it.json @@ -1,43 +1,18 @@ { - "connecting_ctrlport": "Connessione alla porta di controllo di Tor per inizializzare il servizio nascosto sulla porta {0:d}.", - "cant_connect_ctrlport": "Impossibile connettere alla porta di controllo di Tor sulla porta {0:s}. OnionShare richiede l'esecuzione in background di Tor Browser per funzionare. Se non è installato puoi scaricarlo da https://www.torproject.org/.", - "cant_connect_socksport": "Impossibile connettersi al server Tor SOCKS5 sulla porta {0:s}. OnionShare richiede l'esecuzione in background di Tor Browser per funzionare. Se non è installato puoi scaricarlo da https://www.torproject.org/.", "preparing_files": "Preparazione dei files da condividere.", - "wait_for_hs": "In attesa che l'HS sia pronto:", - "wait_for_hs_trying": "Tentativo...", - "wait_for_hs_nope": "Non è ancora pronto.", - "wait_for_hs_yup": "Pronto!", "give_this_url": "Dai questo URL alla persona a cui vuoi inviare il file:", "ctrlc_to_stop": "Premi Ctrl-C per fermare il server", "not_a_file": "{0:s} non è un file.", - "download_page_loaded": "Pagina di Download caricata", "other_page_loaded": "URL caricato", "closing_automatically": "Chiusura automatica dopo aver finito il download", "large_filesize": "Attenzione: Inviare file di grandi dimensioni può richiedere ore", - "error_tails_invalid_port": "Valore non valido, la porta deve essere un numero intero", - "error_tails_unknown_root": "Errore sconosciuto con il processo Tails root", - "help_tails_port": "Solo per Tails: porta per passare il firewall, avvio del servizio nascosto", "help_local_only": "Non usare tor: è solo per lo sviluppo", "help_stay_open": "Mantieni il servizio nascosto avviato anche dopo aver finito il download", - "help_transparent_torification": "Il mio sistema usa tor in modo trasparente", "help_debug": "Registra gli errori sul disco", "help_filename": "Lista dei file o cartelle da condividere", - "gui_drag_and_drop": "Prendi e rilascia\ni file qui sopra", - "gui_add": "Aggiungi", - "gui_delete": "Cancella", - "gui_choose_items": "Scegli", "gui_share_start_server": "Inizia la condivisione", "gui_share_stop_server": "Ferma la condivisione", "gui_copy_url": "Copia lo URL", - "gui_downloads": "Downloads:", - "gui_canceled": "Cancellati", - "gui_copied_url": "URL Copiato nella clipboard", - "gui_starting_server1": "Avviamento del servizio nascosto Tor...", - "gui_starting_server2": "Elaborazione files...", - "gui_starting_server3": "In attesa del servizio nascosto Tor...", "gui_please_wait": "Attendere prego...", - "error_hs_dir_cannot_create": "Impossibile create la cartella per il servizio nascosto {0:s}", - "error_hs_dir_not_writable": "La cartella per il servizio nascosto {0:s} non ha i permessi di scrittura", - "using_ephemeral": "Avviamento del servizio nascosto Tor ephemeral e attesa della pubblicazione", - "zip_progress_bar_format": "Elaborazione files: %p%" + "using_ephemeral": "Avviamento del servizio nascosto Tor ephemeral e attesa della pubblicazione" } diff --git a/share/locale/nl.json b/share/locale/nl.json index 4031effd..19bb2b69 100644 --- a/share/locale/nl.json +++ b/share/locale/nl.json @@ -1,64 +1,33 @@ { "config_onion_service": "Onion service configureren op poort {0:d}.", "preparing_files": "Bestanden om te delen aan het voorbereiden.", - "wait_for_hs": "Wachten op gereed zijn van HS:", - "wait_for_hs_trying": "Proberen...", - "wait_for_hs_nope": "Nog niet gereed.", - "wait_for_hs_yup": "Gereed!", "give_this_url": "Geef deze URL aan de persoon aan wie je dit bestand verzend:", "give_this_url_stealth": "Geef deze URL en de HidServAuth regel aan de persoon aan wie je dit bestand verzend:", "ctrlc_to_stop": "Druk Ctrl-C om de server te stoppen", "not_a_file": "{0:s} is geen bestand.", "not_a_readable_file": "{0:s} is geen leesbaar bestand.", "no_available_port": "Kan de Onion service niet starten, er zijn geen poorten beschikbaar.", - "download_page_loaded": "Downloadpagina geladen", "other_page_loaded": "URL geladen", "close_on_timeout": "Sluit automatisch omdat timeout bereikt is", "closing_automatically": "Sluit automatisch omdat download gereed is", - "timeout_download_still_running": "Wachten totdat download gereed is voor automatisch sluiten", "large_filesize": "Waarschuwing: Versturen van grote bestanden kan uren duren", - "error_tails_invalid_port": "Ongeldige waarde, poort moet een integer zijn", - "error_tails_unknown_root": "Onbekende fout met het Tails root proces", "systray_menu_exit": "Afsluiten", - "systray_download_started_title": "OnionShare download gestart", - "systray_download_started_message": "Een gebruiker is begonnen met downloaden van je bestanden", - "systray_download_completed_title": "OnionShare download gereed", - "systray_download_completed_message": "De gebruiker is klaar met downloaden", - "systray_download_canceled_title": "OnionShare download afgebroken", - "systray_download_canceled_message": "De gebruiker heeft de download afgebroken", "help_local_only": "Maak geen gebruik van Tor, alleen voor ontwikkeling", "help_stay_open": "Laat verborgen service draaien nadat download gereed is", "help_shutdown_timeout": "Sluit de Onion service na N seconden", - "help_transparent_torification": "Mijn systeem gebruikt Tor als proxyserver", "help_stealth": "Maak stealth Onion service (geavanceerd)", "help_debug": "Log fouten naar harde schijf", "help_filename": "Lijst van bestanden of mappen om te delen", "help_config": "Pad naar een JSON configuratie bestand (optioneel)", - "gui_drag_and_drop": "Sleep en zet\nbestanden hier neer", - "gui_add": "Toevoegen", - "gui_delete": "Verwijder", - "gui_choose_items": "Kies", "gui_copy_url": "Kopieer URL", "gui_copy_hidservauth": "Kopieer HidServAuth", - "gui_downloads": "Downloads:", - "gui_canceled": "Afgebroken", - "gui_copied_url": "URL gekopieerd naar klembord", - "gui_copied_hidservauth": "HidServAuth regel gekopieerd naar klembord", - "gui_starting_server1": "Tor onion service wordt gestart...", - "gui_starting_server2": "Bestanden verwerken...", "gui_please_wait": "Moment geduld...", - "error_hs_dir_cannot_create": "Kan verborgen service map {0:s} niet aanmaken", - "error_hs_dir_not_writable": "Verborgen service map {0:s} is niet schrijfbaar", "using_ephemeral": "Kortstondige Tor onion service gestart en in afwachting van publicatie", - "gui_download_upload_progress_complete": "%p%, Tijd verstreken: {0:s}", - "gui_download_upload_progress_starting": "{0:s}, %p% (ETA berekenen)", - "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", "version_string": "Onionshare {0:s} | https://onionshare.org/", "gui_share_quit_warning": "Weet je zeker dat je wilt afsluiten?\nDe URL die je aan het delen bent zal niet meer bestaan.", "gui_quit_warning_quit": "Afsluiten", "gui_quit_warning_dont_quit": "Niet afsluiten", "error_rate_limit": "Een aanvaller probeert misschien je URL te gokken. Om dit te voorkomen heeft OnionShare de server automatisch gestopt. Om de bestanden te delen moet je de server opnieuw starten en de nieuwe URL delen.", - "zip_progress_bar_format": "Bestanden verwerken: %p%", "error_stealth_not_supported": "Om een geheime onion service te maken heb je minstens Tor 0.2.9.1-alpha (of Tor Browser 6.5) en minstens python3-stem 1.5.0 nodig.", "error_ephemeral_not_supported": "OnionShare vereist minstens Tor 0.2.7.1 en minstens python3-stem 1.4.0.", "gui_settings_window_title": "Instellingen", @@ -84,13 +53,10 @@ "gui_settings_authenticate_label": "Tor authenticatie opties", "gui_settings_authenticate_no_auth_option": "Geen authenticatie of cookie authenticatie", "gui_settings_authenticate_password_option": "Wachtwoord", - "gui_settings_authenticate_cookie_option": "Cookie", "gui_settings_password_label": "Wachtwoord", - "gui_settings_cookie_label": "Cookie pad", "gui_settings_button_save": "Opslaan", "gui_settings_button_cancel": "Annuleren", "gui_settings_button_help": "Help", - "gui_settings_shutdown_timeout_choice": "Auto-stop timer instellen?", "gui_settings_shutdown_timeout": "Stop delen om:", "settings_saved": "Instellingen opgeslagen in {}", "settings_error_unknown": "Kan geen verbinding maken met de Tor controller omdat de instellingen niet kloppen.", @@ -102,7 +68,6 @@ "settings_error_unreadable_cookie_file": "Verbonden met Tor controller, maar kan niet authenticeren omdat wachtwoord onjuist is en gebruiker heeft niet de permissies om cookie bestand te lezen.", "settings_error_bundled_tor_not_supported": "Meegeleverde Tor is niet onersteunt wanneer je niet de ontwikkelaarsmodus gebruikt in Windows or macOS.", "settings_error_bundled_tor_timeout": "Verbinden met Tor duurt te lang. Misschien is je computer offline, of je klok is niet accuraat.", - "settings_error_bundled_tor_canceled": "Het Tor is afgesloten voordat het kon verbinden.", "settings_error_bundled_tor_broken": "OnionShare kan niet verbinden met Tor op de achtergrond:\n{}", "settings_test_success": "Gefeliciteerd, OnionShare kan verbinden met de Tor controller.\n\nTor version: {}\nOndersteunt kortstondige onion services: {}\nOndersteunt geheime onion services: {}", "error_tor_protocol_error": "Fout bij praten met de Tor controller.\nAls je Whonix gebruikt, kijk dan hier https://www.whonix.org/wiki/onionshare om OnionShare werkend te krijgen.", @@ -117,6 +82,5 @@ "gui_tor_connection_error_settings": "Probeer de instellingen hoe OnionShare verbind met het Tor network aan te passen in Instellingen.", "gui_tor_connection_canceled": "OnionShare kan niet verbinden met Tor.\n\nControleer of je verbonden bent met het internet, herstart OnionShare om de Tor verbinding te configureren.", "gui_server_started_after_timeout": "De server startte na de gekozen auto-timeout.\nDeel opnieuw.", - "gui_server_timeout_expired": "De gekozen timeout is al verlopen.\nKies nieuwe timeout deel opnieuw.", - "share_via_onionshare": "Deel via OnionShare" + "gui_server_timeout_expired": "De gekozen timeout is al verlopen.\nKies nieuwe timeout deel opnieuw." } diff --git a/share/locale/no.json b/share/locale/no.json index 8b131038..6b277353 100644 --- a/share/locale/no.json +++ b/share/locale/no.json @@ -1,10 +1,6 @@ { - "connecting_ctrlport": "Kobler til Tors kontroll-port for å sette opp en gjemt tjeneste på port {0:d}.", - "cant_connect_ctrlport": "Klarte ikke å koble til Tors kontroll-porter {0:s}. Sjekk at Tor kjører.", "give_this_url": "Gi personen du vil sende filen til denne URL-en:", "ctrlc_to_stop": "Trykk Ctrl+C for å stoppe serveren.", "not_a_file": "{0:s} er ikke en fil.", - "gui_copied_url": "Kopierte URL-en til utklippstavlen", - "download_page_loaded": "Nedlastingsside lastet", "other_page_loaded": "En annen side har blitt lastet" } diff --git a/share/locale/pt.json b/share/locale/pt.json index 71391957..0aefd847 100644 --- a/share/locale/pt.json +++ b/share/locale/pt.json @@ -1,10 +1,6 @@ { - "connecting_ctrlport": "Conectando-se à porta de controle Tor para configurar serviço escondido na porta {0:d}.", - "cant_connect_ctrlport": "Não pode conectar à porta de controle Tor na porta {0:s}. O Tor está rodando?", "give_this_url": "Passe este URL para a pessoa que deve receber o arquivo:", "ctrlc_to_stop": "Pressione Ctrl-C para parar o servidor", "not_a_file": "{0:s} não é um arquivo.", - "gui_copied_url": "URL foi copiado para área de transferência", - "download_page_loaded": "Página de download carregada", "other_page_loaded": "Outra página tem sido carregada" } diff --git a/share/locale/ru.json b/share/locale/ru.json index 193c158d..e1c59721 100644 --- a/share/locale/ru.json +++ b/share/locale/ru.json @@ -1,11 +1,7 @@ { - "connecting_ctrlport": "Соединяемся с контрольным портом Tor для создания скрытого сервиса на порту {0:d}.", - "cant_connect_ctrlport": "Невозможно соединиться с контрольным портом Tor на порту {0:s}. Tor запущен?", "give_this_url": "Отправьте эту ссылку тому человеку, которому вы хотите передать файл:", "ctrlc_to_stop": "Нажмите Ctrl-C чтобы остановить сервер", "not_a_file": "{0:s} не является файлом.", - "gui_copied_url": "Ссылка скопирована в буфер обмена", - "download_page_loaded": "Страница закачки загружена", "other_page_loaded": "Другая страница была загружена", "gui_copy_url": "Скопировать ссылку" } diff --git a/share/locale/tr.json b/share/locale/tr.json index d8097909..2f041233 100644 --- a/share/locale/tr.json +++ b/share/locale/tr.json @@ -1,43 +1,18 @@ { - "connecting_ctrlport": "{0:d} portundaki gizli hizmet(GH) kurulumu için Tor kontrol portuna bağlanıyor.", - "cant_connect_ctrlport": "Tor kontrol {0:s} portuna bağlanamıyor. OnionShare çalışması için arkaplanda Tor Browser çalışması gerekiyor. Tor Browser indirmediyseniz, https://www.torproject.org/", - "cant_connect_socksport": "Tor SOCKS5 sunucu {0:s} portuna bağlanamıyor. OnionShare çalışması için arkaplanda Tor Browser çalışması gerekiyor. Tor Browser indirmediyseniz, https://www.torproject.org/", "preparing_files": "Paylaşmak için dosyalar hazırlanıyor.", - "wait_for_hs": "GH hazır olması bekleniyor:", - "wait_for_hs_trying": "Deneniyor...", - "wait_for_hs_nope": "Henüz hazır değil.", - "wait_for_hs_yup": "Hazır!", "give_this_url": "Dosyayı gönderdiğin kişiye bu URL'i verin:", "ctrlc_to_stop": "Sunucuyu durdurmak için, Ctrl-C basın", "not_a_file": "{0:s} dosya değil.", - "download_page_loaded": "İndirme sayfası yüklendi", "other_page_loaded": "Diğer sayfa yüklendi", "closing_automatically": "İndirme işlemi tamamlandığı için kendiliğinden durduruluyor", "large_filesize": "Uyarı: Büyük dosyaların gönderimi saatler sürebilir", - "error_tails_invalid_port": "Geçersiz değer, port sayı olmalıdır", - "error_tails_unknown_root": "Tails ana işlemi ile ilgili bilinmeyen hata", - "help_tails_port": "Sadece Tails: port for opening firewall, starting onion service", "help_local_only": "Tor kullanmaya kalkışmayın: sadece geliştirme için", "help_stay_open": "İndirme tamamlandıktan sonra gizli hizmeti çalıştırmaya devam et", - "help_transparent_torification": "Sistemim apaçık torlu", "help_debug": "Hata kayıtlarını diske kaydet", "help_filename": "Paylaşmak için dosya ve klasörler listesi", - "gui_drag_and_drop": "Dosyaları buraya\n Sürükle ve Bırak", - "gui_add": "Ekle", - "gui_delete": "Sil", - "gui_choose_items": "Seç", "gui_share_start_server": "Paylaşımı Başlat", "gui_share_stop_server": "Paylaşımı Durdur", "gui_copy_url": "URL Kopyala", - "gui_downloads": "İndirilenler:", - "gui_canceled": "İptal edilen", - "gui_copied_url": "Panoya kopyalanan URL", - "gui_starting_server1": "Tor gizli hizmeti başlatılıyor...", - "gui_starting_server2": "Dosyalar hazırlanıyor...", - "gui_starting_server3": "Tor gizli hizmeti bekleniyor...", "gui_please_wait": "Lütfen bekleyin...", - "error_hs_dir_cannot_create": "Gizli hizmet klasörü {0:s} oluşturulamıyor", - "error_hs_dir_not_writable": "Gizle hizmet klasörü {0:s} yazılabilir değil", - "using_ephemeral": "Geçici Tor gizli hizmetine bakılıyor ve yayımı bekleniyor", - "zip_progress_bar_format": "Dosyalar hazırlanıyor: %p%" + "using_ephemeral": "Geçici Tor gizli hizmetine bakılıyor ve yayımı bekleniyor" } From ba7262380178e75087279f75f79a791944a69a99 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 22 Jul 2018 16:26:10 +1000 Subject: [PATCH 26/38] Revert "#681 remove obsolete strings" This reverts commit b5c06d446aad28bb60958888c3f4de52ecb6d2a6. --- share/locale/cs.json | 30 ++++++++++++++++++++++ share/locale/da.json | 39 +++++++++++++++++++++++++++- share/locale/de.json | 17 +++++++++++++ share/locale/en.json | 60 +++++++++++++++++++++++++++++++++++++++++++- share/locale/eo.json | 30 ++++++++++++++++++++++ share/locale/es.json | 19 +++++++++++++- share/locale/fi.json | 27 +++++++++++++++++++- share/locale/fr.json | 22 ++++++++++++++++ share/locale/it.json | 27 +++++++++++++++++++- share/locale/nl.json | 38 +++++++++++++++++++++++++++- share/locale/no.json | 4 +++ share/locale/pt.json | 4 +++ share/locale/ru.json | 4 +++ share/locale/tr.json | 27 +++++++++++++++++++- 14 files changed, 341 insertions(+), 7 deletions(-) diff --git a/share/locale/cs.json b/share/locale/cs.json index 9e151dd6..aaa80d1b 100644 --- a/share/locale/cs.json +++ b/share/locale/cs.json @@ -1,31 +1,58 @@ { "config_onion_service": "Nastavuji onion service na portu {0:d}.", "preparing_files": "Připravuji soubory ke sdílení.", + "wait_for_hs": "Čekám na HS až bude připravena:", + "wait_for_hs_trying": "Zkouším...", + "wait_for_hs_nope": "Ještě nepřipraven.", + "wait_for_hs_yup": "Připraven!", "give_this_url": "Dejte tuto URL osobě, které dané soubory posíláte:", "give_this_url_stealth": "Give this URL and HidServAuth line to the person you're sending the file to:", "ctrlc_to_stop": "Stiskněte Ctrl-C pro zastavení serveru", "not_a_file": "{0:s} není soubor.", + "download_page_loaded": "Download page loaded", "other_page_loaded": "URL loaded", "closing_automatically": "Zastavuji automaticky, protože stahování skončilo", "large_filesize": "Varování: Posílání velkých souborů může trvat hodiny", + "error_tails_invalid_port": "Nesprávná hodnota, port musí být celé číslo", + "error_tails_unknown_root": "Neznámá chyba s Tails root procesem", "help_local_only": "Nepoužívat Tor: jen pro vývoj", "help_stay_open": "Nechat běžet onion service po skončení stahování", + "help_transparent_torification": "My system is transparently torified", "help_stealth": "Create stealth onion service (advanced)", "help_debug": "Zaznamenat chyby na disk", "help_filename": "Seznam souborů a složek ke sdílení", + "gui_drag_and_drop": "Táhni a pusť\nsoubory sem", + "gui_add": "Přidat", + "gui_delete": "Smazat", + "gui_choose_items": "Vybrat", "gui_share_start_server": "Spustit sdílení", "gui_share_stop_server": "Zastavit sdílení", "gui_copy_url": "Kopírovat URL", "gui_copy_hidservauth": "Kopírovat HidServAuth", + "gui_downloads": "Stahování:", + "gui_canceled": "Zrušeno", + "gui_copied_url": "URL zkopírováno do schránky", + "gui_copied_hidservauth": "Copied HidServAuth line to clipboard", + "gui_starting_server1": "Spouštím Tor onion service...", + "gui_starting_server2": "Zpracovávám soubory...", "gui_please_wait": "Prosím čekejte...", + "error_hs_dir_cannot_create": "Nejde vytvořit složka onion service {0:s}", + "error_hs_dir_not_writable": "nejde zapisovat do složky onion service {0:s}", "using_ephemeral": "Starting ephemeral Tor onion service and awaiting publication", + "gui_download_upload_progress_complete": "%p%, Uplynulý čas: {0:s}", + "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", + "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", "version_string": "Onionshare {0:s} | https://onionshare.org/", "gui_share_quit_warning": "Jste si jistí, že chcete odejít?\nURL, kterou sdílíte poté nebude existovat.", "gui_quit_warning_quit": "Zavřít", "gui_quit_warning_dont_quit": "Zůstat", "error_rate_limit": "Útočník možná zkouší uhodnout vaši URL. Abychom tomu předešli, OnionShare automaticky zastavil server. Pro sdílení souborů ho musíte spustit znovu a sdílet novou URL.", + "zip_progress_bar_format": "Zpracovávám soubory: %p%", "error_stealth_not_supported": "To create stealth onion services, you need at least Tor 0.2.9.1-alpha (or Tor Browser 6.5) and at least python3-stem 1.5.0.", "error_ephemeral_not_supported": "OnionShare vyžaduje nejméně Tor 0.2.7.1 a nejméně python3-stem 1.4.0.", + "gui_menu_file_menu": "&File", + "gui_menu_settings_action": "&Settings", + "gui_menu_quit_action": "&Quit", "gui_settings_window_title": "Nastavení", "gui_settings_connection_type_label": "Jak by se měl OnionShare připojit k Toru?", "gui_settings_connection_type_automatic_option": "Zkusit automatické nastavení s Tor Browserem", @@ -36,7 +63,10 @@ "gui_settings_authenticate_label": "Autentizační možnosti Toru", "gui_settings_authenticate_no_auth_option": "Žádná autentizace ani cookie autentizace", "gui_settings_authenticate_password_option": "Heslo", + "gui_settings_authenticate_cookie_option": "Cookie", "gui_settings_password_label": "Heslo", + "gui_settings_cookie_label": "Cesta ke cookie", + "gui_settings_button_test": "Test Settings", "gui_settings_button_save": "Uložit", "gui_settings_button_cancel": "Zrušit", "settings_saved": "Nastavení uloženo do {}", diff --git a/share/locale/da.json b/share/locale/da.json index ded2d61c..d36f7035 100644 --- a/share/locale/da.json +++ b/share/locale/da.json @@ -1,35 +1,66 @@ { "config_onion_service": "Konfigurerer onion-tjeneste på port {0:d}.", "preparing_files": "Forbereder filer som skal deles.", + "wait_for_hs": "Venter på at HS bliver klar:", + "wait_for_hs_trying": "Prøver...", + "wait_for_hs_nope": "Endnu ikke klar.", + "wait_for_hs_yup": "Klar!", "give_this_url": "Giv denne URL til personen du sender filen til:", "give_this_url_stealth": "Giv denne URL og HidServAuth-linje til personen du sender filen til:", "ctrlc_to_stop": "Tryk på Ctrl-C for at stoppe serveren", "not_a_file": "{0:s} er ikke en gyldig fil.", "not_a_readable_file": "{0:s} er ikke en læsbar fil.", "no_available_port": "Kunne ikke starte onion-tjenesten da der ikke var nogen tilgængelig port.", + "download_page_loaded": "Downloadside indlæst", "other_page_loaded": "URL indlæst", "close_on_timeout": "Lukker automatisk da timeout er nået", "closing_automatically": "Lukker automatisk da download er færdig", + "timeout_download_still_running": "Venter på at download skal blive færdig inden automatisk stop", "large_filesize": "Advarsel: Det kan tage timer at sende store filer", + "error_tails_invalid_port": "Ugyldig værdi, port skal være et heltal", + "error_tails_unknown_root": "Ukendt fejl med Tails-rodproces", "systray_menu_exit": "Afslut", + "systray_download_started_title": "OnionShare-download startet", + "systray_download_started_message": "En bruger startede download af dine filer", + "systray_download_completed_title": "OnionShare-download færdig", + "systray_download_completed_message": "Brugeren er færdig med at downloade dine filer", + "systray_download_canceled_title": "OnionShare-download annulleret", + "systray_download_canceled_message": "Brugeren annullerede downloaden", "help_local_only": "Undlad at bruge tor: kun til udvikling", "help_stay_open": "Hold onion-tjeneste kørende efter download er færdig", "help_shutdown_timeout": "Luk onion-tjenesten efter N sekunder", + "help_transparent_torification": "Mit system er gennemsigtigt torifiseret", "help_stealth": "Opret usynlig onion-tjeneste (avanceret)", "help_debug": "Log programfejl til stdout, og log webfejl til disk", "help_filename": "Liste over filer eller mapper som skal deles", "help_config": "Sti til en brugerdefineret JSON-konfigurationsfil (valgfri)", + "gui_drag_and_drop": "Træk og slip\nfiler her", + "gui_add": "Tilføj", + "gui_delete": "Slet", + "gui_choose_items": "Vælg", "gui_share_start_server": "Start deling", "gui_share_stop_server": "Stop deling", "gui_copy_url": "Kopiér URL", "gui_copy_hidservauth": "Kopiér HidServAuth", + "gui_downloads": "Downloads:", + "gui_canceled": "Annulleret", + "gui_copied_url": "Kopierede URL til udklipsholder", + "gui_copied_hidservauth": "Kopierede HidServAuth-linje til udklipsholder", + "gui_starting_server1": "Starter Tor onion-tjeneste...", + "gui_starting_server2": "Databehandler filer...", "gui_please_wait": "Vent venligst...", + "error_hs_dir_cannot_create": "Kan ikke oprette onion-tjenestens mappe {0:s}", + "error_hs_dir_not_writable": "onion-tjenestens mappe {0:s} er skrivebeskyttet", "using_ephemeral": "Starter kortvarig Tor onion-tjeneste og afventer udgivelse", + "gui_download_upload_progress_complete": "%p%, tid forløbet: {0:s}", + "gui_download_upload_progress_starting": "{0:s}, %p% (udregner anslået ankomsttid)", + "gui_download_upload_progress_eta": "{0:s}, anslået ankomsttid: {1:s}, %p%", "version_string": "Onionshare {0:s} | https://onionshare.org/", "gui_share_quit_warning": "Er du sikker på, at du vil afslutte?\nURL'en som du deler vil ikke eksistere længere.", "gui_quit_warning_quit": "Afslut", "gui_quit_warning_dont_quit": "Afslut ikke", "error_rate_limit": "En angriber forsøger måske at gætte din URL. For at forhindre det, har OnionShare automatisk stoppet serveren. For at dele filerne skal du starte den igen og dele den nye URL.", + "zip_progress_bar_format": "Databehandler filer: %p%", "error_stealth_not_supported": "For at oprette usynlige onion-tjenester, skal du mindst have Tor 0.2.9.1-alpha (eller Tor Browser 6.5) og mindst python3-stem 1.5.0.", "error_ephemeral_not_supported": "OnionShare kræver mindst Tor 0.2.7.1 og mindst python3-stem 1.4.0.", "gui_settings_window_title": "Indstillinger", @@ -56,7 +87,9 @@ "gui_settings_authenticate_label": "Valgmuligheder for Tor-autentifikation", "gui_settings_authenticate_no_auth_option": "Ingen autentifikation, eller cookieautentifikation", "gui_settings_authenticate_password_option": "Adgangskode", + "gui_settings_authenticate_cookie_option": "Cookie", "gui_settings_password_label": "Adgangskode", + "gui_settings_cookie_label": "Cookiesti", "gui_settings_tor_bridges": "Understøttelse af Tor-bro", "gui_settings_tor_bridges_no_bridges_radio_option": "Brug ikke broer", "gui_settings_tor_bridges_obfs4_radio_option": "Brug indbygget obfs4 udskiftelige transporter", @@ -67,6 +100,7 @@ "gui_settings_button_save": "Gem", "gui_settings_button_cancel": "Annuller", "gui_settings_button_help": "Hjælp", + "gui_settings_shutdown_timeout_choice": "Sæt timer til automatisk stop?", "gui_settings_shutdown_timeout": "Stop delingen ved:", "settings_saved": "Indstillinger gemt til {}", "settings_error_unknown": "Kan ikke oprette forbindelse til Tor-kontroller da indstillingerne ikke giver mening.", @@ -78,6 +112,7 @@ "settings_error_unreadable_cookie_file": "Forbundet til Tor-kontroller, men kan ikke autentificere da din adgangskode kan være forkert, og din bruger ikke har tilladelse til at læse cookiefilen.", "settings_error_bundled_tor_not_supported": "Bundet Tor understøttes ikke når der ikke bruges udviklertilstand i Windows eller MacOS.", "settings_error_bundled_tor_timeout": "Det tager for længe at oprette forbindelse til Tor. Din computer er måske offline, eller dit ur går forkert.", + "settings_error_bundled_tor_canceled": "Tor-processen lukkede inden den blev færdig med at oprette forbindelse.", "settings_error_bundled_tor_broken": "Der er noget galt med OnionShare som opretter forbindelse til Tor i baggrunden:\n{}", "settings_test_success": "Tillykke, OnionShare kan oprette forbindelse til Tor-kontrolleren.\n\nTor version: {}\nUnderstøtter kortvarige onion-tjenester: {}\nUnderstøtter usynlige onion-tjenester: {}", "error_tor_protocol_error": "Fejl under snak med Tor-kontrolleren.\nHvis du bruger Whonix, så tjek https://www.whonix.org/wiki/onionshare for at få OnionShare til at virke.", @@ -94,5 +129,7 @@ "gui_tor_connection_lost": "Afbryder forbindelsen fra Tor.", "gui_server_started_after_timeout": "Serveren startede efter dit valgte automatiske timeout.\nStart venligst en ny deling.", "gui_server_timeout_expired": "Den valgte timeout er allerede udløbet.\nOpdater venligst timeouten og herefter kan du starte deling.", - "gui_save_private_key_checkbox": "Brug en vedvarende URL\n(fravalg vil slette gemte URL)" + "share_via_onionshare": "Del via OnionShare", + "gui_save_private_key_checkbox": "Brug en vedvarende URL\n(fravalg vil slette gemte URL)", + "persistent_url_in_use": "Denne deling bruger en vedvarende URL" } diff --git a/share/locale/de.json b/share/locale/de.json index b5925b8e..8e87b89b 100644 --- a/share/locale/de.json +++ b/share/locale/de.json @@ -1,17 +1,34 @@ { + "connecting_ctrlport": "Verbinde zum Tor-Kontrollport um den versteckten Dienst auf Port {0:d} laufen zu lassen.", + "cant_connect_ctrlport": "Konnte keine Verbindung zum Tor-Kontrollport auf Port {0:s} aufbauen. Läuft Tor?", + "cant_connect_socksport": "Konnte keine Verbindung zum Tor SOCKS5 Server auf Port {0:s} herstellen. OnionShare setzt voraus dass Tor Browser im Hintergrund läuft. Wenn du noch ihn noch noch nicht hast kannst du ihn unter https://www.torproject.org/ herunterladen.", "preparing_files": "Dateien werden vorbereitet.", + "wait_for_hs": "Warte auf HS:", + "wait_for_hs_trying": "Verbindungsversuch...", + "wait_for_hs_nope": "Noch nicht bereit.", + "wait_for_hs_yup": "Bereit!", "give_this_url": "Geben Sie diese URL der Person, der Sie die Datei zusenden möchten:", "ctrlc_to_stop": "Drücken Sie Strg+C um den Server anzuhalten", "not_a_file": "{0:s} ist keine Datei.", + "download_page_loaded": "Seite geladen", "other_page_loaded": "URL geladen", "closing_automatically": "Halte automatisch an, da der Download beendet wurde", "large_filesize": "Warnung: Das Senden von großen Dateien kann Stunden dauern", + "error_tails_invalid_port": "Ungültiger Wert, Port muss eine ganze Zahl sein", + "error_tails_unknown_root": "Unbekannter Fehler mit Tails root Prozess", + "help_tails_port": "Nur für Tails: Port um den Firewall zu öffnen, starte onion service", "help_local_only": "Nicht mit Tor benutzen, nur für Entwicklung", "help_stay_open": "Den onion service nicht anhalten nachdem ein Download beendet wurde", "help_debug": "Fehler auf Festplatte schreiben", "help_filename": "Liste der zu teilenden Dateien oder Verzeichnisse", + "gui_drag_and_drop": "Drag & drop\nDateien hier", + "gui_add": "Hinzufügen", + "gui_delete": "Löschen", + "gui_choose_items": "Auswählen", "gui_share_start_server": "Server starten", "gui_share_stop_server": "Server anhalten", "gui_copy_url": "URL kopieren", + "gui_downloads": "Downloads:", + "gui_copied_url": "URL wurde in die Zwischenablage kopiert", "gui_please_wait": "Bitte warten..." } diff --git a/share/locale/en.json b/share/locale/en.json index cbb444ec..b1d247d9 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -1,6 +1,10 @@ { "config_onion_service": "Configuring onion service on port {0:d}.", "preparing_files": "Preparing files to share.", + "wait_for_hs": "Waiting for HS to be ready:", + "wait_for_hs_trying": "Trying…", + "wait_for_hs_nope": "Not ready yet.", + "wait_for_hs_yup": "Ready!", "give_this_url": "Give this address to the person you're sending the file to:", "give_this_url_stealth": "Give this address and HidServAuth line to the person you're sending the file to:", "give_this_url_receive": "Give this address to the people sending you files:", @@ -13,8 +17,21 @@ "other_page_loaded": "Address loaded", "close_on_timeout": "Stopped because timer expired", "closing_automatically": "Stopped because download finished", + "timeout_download_still_running": "Waiting for download to complete", "large_filesize": "Warning: Sending large files could take hours", + "error_tails_invalid_port": "Invalid value, port must be a regular number", + "error_tails_unknown_root": "Unknown error with Tails root process", "systray_menu_exit": "Quit", + "systray_download_started_title": "OnionShare Download Started", + "systray_download_started_message": "A user started downloading your files", + "systray_download_completed_title": "OnionShare Download Finished", + "systray_download_completed_message": "The user finished downloading your files", + "systray_download_canceled_title": "OnionShare Download Canceled", + "systray_download_canceled_message": "The user canceled the download", + "systray_upload_started_title": "OnionShare Upload Started", + "systray_upload_started_message": "A user started uploading files to your computer", + "systray_upload_completed_title": "OnionShare Upload Finished", + "systray_upload_completed_message": "The user finished uploading files to your computer", "help_local_only": "Do not attempt to use Tor: For development only", "help_stay_open": "Keep onion service running after download has finished", "help_shutdown_timeout": "Shut down the onion service after N seconds", @@ -23,18 +40,37 @@ "help_debug": "Log application errors to stdout, and log web errors to disk", "help_filename": "List of files or folders to share", "help_config": "Path to a custom JSON config file (optional)", + "gui_drag_and_drop": "Drag and drop files and folders\nto start sharing", + "gui_add": "Add", + "gui_delete": "Delete", + "gui_choose_items": "Choose", "gui_share_start_server": "Start Sharing", "gui_share_stop_server": "Stop Sharing", + "gui_share_stop_server_shutdown_timeout": "Stop Sharing ({}s remaining)", "gui_share_stop_server_shutdown_timeout_tooltip": "Share will expire automatically at {}", "gui_receive_start_server": "Start Receive Mode", "gui_receive_stop_server": "Stop Receive Mode", + "gui_receive_stop_server_shutdown_timeout": "Stop Receive Mode ({}s remaining)", "gui_receive_stop_server_shutdown_timeout_tooltip": "Receive mode will expire automatically at {}", "gui_copy_url": "Copy Address", "gui_copy_hidservauth": "Copy HidServAuth", + "gui_downloads": "Download History", + "gui_downloads_window_tooltip": "Show/hide downloads", + "gui_no_downloads": "No downloads yet.", + "gui_canceled": "Canceled", "gui_copied_url_title": "Copied OnionShare address", + "gui_copied_url": "The OnionShare address has been copied to clipboard", "gui_copied_hidservauth_title": "Copied HidServAuth", + "gui_copied_hidservauth": "The HidServAuth line has been copied to clipboard", + "gui_starting_server1": "Starting Tor onion service…", + "gui_starting_server2": "Compressing files…", "gui_please_wait": "Starting… Click to cancel", + "error_hs_dir_cannot_create": "Cannot create onion service dir {0:s}", + "error_hs_dir_not_writable": "onion service dir {0:s} is not writable", "using_ephemeral": "Starting ephemeral Tor onion service and awaiting publication", + "gui_download_upload_progress_complete": "%p%, Time Elapsed: {0:s}", + "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", + "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", "version_string": "OnionShare {0:s} | https://onionshare.org/", "gui_quit_title": "Transfer in Progress", "gui_share_quit_warning": "You're in the process of sending files. Are you sure you want to quit OnionShare?", @@ -42,6 +78,7 @@ "gui_quit_warning_quit": "Quit", "gui_quit_warning_dont_quit": "Cancel", "error_rate_limit": "An attacker might be trying to guess your address. To prevent this, OnionShare has automatically stopped the server. To share the files you must start it again and share the new address.", + "zip_progress_bar_format": "Compressing files: %p%", "error_stealth_not_supported": "To create stealth onion services, you need at least Tor 0.2.9.1-alpha (or Tor Browser 6.5) and at least python3-stem 1.5.0.", "error_ephemeral_not_supported": "OnionShare requires at least Tor 0.2.7.1 and at least python3-stem 1.4.0.", "gui_settings_window_title": "Settings", @@ -68,7 +105,9 @@ "gui_settings_authenticate_label": "Tor authentication options", "gui_settings_authenticate_no_auth_option": "No authentication, or cookie authentication", "gui_settings_authenticate_password_option": "Password", + "gui_settings_authenticate_cookie_option": "Cookie", "gui_settings_password_label": "Password", + "gui_settings_cookie_label": "Cookie path", "gui_settings_tor_bridges": "Tor Bridge support", "gui_settings_tor_bridges_no_bridges_radio_option": "Don't use bridges", "gui_settings_tor_bridges_obfs4_radio_option": "Use built-in obfs4 pluggable transports", @@ -96,6 +135,7 @@ "settings_error_unreadable_cookie_file": "Connected to Tor controller, but can't authenticate because your password may be wrong, and your user lacks permission to read the cookie file.", "settings_error_bundled_tor_not_supported": "Use of the Tor version bundled with OnionShare is not supported when using developer mode on Windows or macOS.", "settings_error_bundled_tor_timeout": "Connecting to Tor is taking too long. Maybe your computer is offline, or your system clock isn't accurate.", + "settings_error_bundled_tor_canceled": "The Tor process closed before it could finish connecting.", "settings_error_bundled_tor_broken": "OnionShare could not connect to Tor in the background:\n{}", "settings_test_success": "Congratulations, OnionShare can connect to the Tor controller.\n\nTor version: {}\nSupports ephemeral onion services: {}\nSupports stealth onion services: {}", "error_tor_protocol_error": "Could not communicate with the Tor controller.\nIf you're using Whonix, check out https://www.whonix.org/wiki/onionshare to make OnionShare work.", @@ -112,6 +152,7 @@ "gui_tor_connection_lost": "Disconnected from Tor.", "gui_server_started_after_timeout": "The server started after your chosen auto-timeout.\nPlease start a new share.", "gui_server_timeout_expired": "The chosen timeout has already expired.\nPlease update the timeout and then you may start sharing.", + "share_via_onionshare": "Share via OnionShare", "gui_save_private_key_checkbox": "Use a persistent address\n(unchecking will delete any saved addresses)", "gui_share_url_description": "Anyone with this link can download your files using the Tor Browser: ", "gui_receive_url_description": "Anyone with this link can upload files to your computer using the Tor Browser: ", @@ -125,10 +166,15 @@ "gui_status_indicator_receive_stopped": "Ready to Receive", "gui_status_indicator_receive_working": "Starting…", "gui_status_indicator_receive_started": "Receiving", + "gui_file_info": "{} Files, {}", + "gui_file_info_single": "{} File, {}", + "info_in_progress_downloads_tooltip": "{} download(s) in progress", + "info_completed_downloads_tooltip": "{} download(s) completed", "error_cannot_create_downloads_dir": "Error creating downloads folder: {}", "error_downloads_dir_not_writable": "The downloads folder isn't writable: {}", "receive_mode_downloads_dir": "Files people send you will appear in this folder: {}", "receive_mode_warning": "Warning: Receive mode lets someone else upload files to your computer. Some files can hack your computer if you open them! Only open files from people you trust, or if you know what you're doing.", + "gui_receive_mode_warning": "Some files can hack your computer if you open them!
Only open files from people you trust, or if you know what you're doing.", "receive_mode_upload_starting": "Upload of total size {} is starting", "receive_mode_received_file": "Received file: {}", "gui_mode_share_button": "Share Files", @@ -137,5 +183,17 @@ "gui_settings_downloads_label": "Save files to", "gui_settings_downloads_button": "Browse", "gui_settings_receive_allow_receiver_shutdown_checkbox": "Receive mode can be stopped by the sender", - "gui_settings_receive_public_mode_checkbox": "Receive mode is open to the public\n(don't prevent people from guessing the OnionShare address)" + "gui_settings_receive_public_mode_checkbox": "Receive mode is open to the public\n(don't prevent people from guessing the OnionShare address)", + "systray_close_server_title": "OnionShare Server Closed", + "systray_close_server_message": "A user closed the server", + "systray_page_loaded_title": "OnionShare Page Loaded", + "systray_download_page_loaded_message": "A user loaded the download page", + "systray_upload_page_loaded_message": "A user loaded the upload page", + "gui_uploads": "Upload History", + "gui_uploads_window_tooltip": "Show/hide uploads", + "gui_no_uploads": "No uploads yet.", + "gui_upload_in_progress": "Upload Started {}", + "gui_upload_finished_range": "Uploaded {} to {}", + "gui_upload_finished": "Uploaded {}", + "gui_open_folder_error_nautilus": "Cannot open folder the because nautilus is not available. You can find this file here: {}" } diff --git a/share/locale/eo.json b/share/locale/eo.json index 5c0fa008..0745ecaf 100644 --- a/share/locale/eo.json +++ b/share/locale/eo.json @@ -1,31 +1,58 @@ { "config_onion_service": "Agordas onion service je pordo {0:d}.", "preparing_files": "Preparas dosierojn por kundivido.", + "wait_for_hs": "Atendas al hidden sevice por esti preta:", + "wait_for_hs_trying": "Provas...", + "wait_for_hs_nope": "Ankoraŭ ne preta.", + "wait_for_hs_yup": "Preta!", "give_this_url": "Donu ĉi tiun URL al la persono al kiu vi sendas la dosieron:", "give_this_url_stealth": "Give this URL and HidServAuth line to the person you're sending the file to:", "ctrlc_to_stop": "Presu Ctrl-C por halti la servilon", "not_a_file": "{0:s} ne estas dosiero.", + "download_page_loaded": "Download page loaded", "other_page_loaded": "URL loaded", "closing_automatically": "Haltas aŭtomate ĉar la elŝuto finiĝis", "large_filesize": "Atentigo: Sendado de grandaj dosieroj povas daŭri horojn", + "error_tails_invalid_port": "Malĝusta valoro, pordo-numero devas esti plena numero", + "error_tails_unknown_root": "Nekonata eraro kun Tails-root-procezo", "help_local_only": "Ne strebu uzi tor: nur por evoluado", "help_stay_open": "Lasu onion service funkcii post fino de elŝuto", + "help_transparent_torification": "My system is transparently torified", "help_stealth": "Create stealth onion service (advanced)", "help_debug": "Protokoli erarojn sur disko", "help_filename": "Listo de dosieroj aŭ dosierujoj por kundividi", + "gui_drag_and_drop": "Ŝovu kaj metu\nla dosierojn ĉi tien", + "gui_add": "Aldoni", + "gui_delete": "Forviŝi", + "gui_choose_items": "Elekti", "gui_share_start_server": "Komenci kundividon", "gui_share_stop_server": "Ĉesigi kundividon", "gui_copy_url": "Kopii URL", "gui_copy_hidservauth": "Kopii HidServAuth", + "gui_downloads": "Elŝutoj:", + "gui_canceled": "Nuligita", + "gui_copied_url": "URL kopiita en tondujon", + "gui_copied_hidservauth": "Copied HidServAuth line to clipboard", + "gui_starting_server1": "Startigas Tor onion service...", + "gui_starting_server2": "Compressing files...", "gui_please_wait": "Bonvolu atendi...", + "error_hs_dir_cannot_create": "Ne eblas krei hidden-service-dosierujon {0:s}", + "error_hs_dir_not_writable": "ne eblas konservi dosierojn en hidden-service-dosierujo {0:s}", "using_ephemeral": "Starting ephemeral Tor onion service and awaiting publication", + "gui_download_upload_progress_complete": "%p%, Tempo pasinta: {0:s}", + "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", + "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", "version_string": "Onionshare {0:s} | https://onionshare.org/", "gui_share_quit_warning": "Ĉu vi certas ke vi volas foriri?\nLa URL, kiun vi kundividas ne plu ekzistos.", "gui_quit_warning_quit": "Foriri", "gui_quit_warning_dont_quit": "Ne foriri", "error_rate_limit": "Iu atankanto povas provi diveni vian URL. Por eviti tion, OnionShare aŭtomate haltis la servilon. Por kundividi la dosierojn vi devas starti ĝin denove kaj kundividi la novan URL.", + "zip_progress_bar_format": "Compressing files: %p%", "error_stealth_not_supported": "To create stealth onion services, you need at least Tor 0.2.9.1-alpha (or Tor Browser 6.5) and at least python3-stem 1.5.0.", "error_ephemeral_not_supported": "OnionShare postulas almenaŭ Tor 0.2.7.1 kaj almenaŭ python3-stem 1.4.0.", + "gui_menu_file_menu": "&File", + "gui_menu_settings_action": "&Settings", + "gui_menu_quit_action": "&Quit", "gui_settings_window_title": "Settings", "gui_settings_connection_type_label": "Kiel OnionShare devus konektiĝi al Tor?", "gui_settings_connection_type_automatic_option": "Provi aŭtomate agordi kun Tor Browser", @@ -36,7 +63,10 @@ "gui_settings_authenticate_label": "Tor authentication options", "gui_settings_authenticate_no_auth_option": "No authentication, or cookie authentication", "gui_settings_authenticate_password_option": "Pasvorto", + "gui_settings_authenticate_cookie_option": "Kuketo", "gui_settings_password_label": "Pasvorto", + "gui_settings_cookie_label": "Cookie path", + "gui_settings_button_test": "Test Settings", "gui_settings_button_save": "Konservi", "gui_settings_button_cancel": "Nuligi", "settings_saved": "Agordoj konservitaj en {}", diff --git a/share/locale/es.json b/share/locale/es.json index 705f4fbb..412fb501 100644 --- a/share/locale/es.json +++ b/share/locale/es.json @@ -1,15 +1,32 @@ { + "connecting_ctrlport": "Conectando a puerto control de Tor para configurar servicio oculto en puerto {0:d}.", + "cant_connect_ctrlport": "No se pudo conectar a puerto control de Tor en puertos {0:s}. ¿Está funcionando Tor?", + "cant_connect_socksport": "No se pudo conectar al servidor SOCKS5 de Tor en el puerto {0:s}. ¿Está funcionando Tor?", "preparing_files": "Preparando los archivos para compartir.", + "wait_for_hs": "Esperando a que HS esté listo:", + "wait_for_hs_trying": "Probando...", + "wait_for_hs_nope": "No está listo todavía.", + "wait_for_hs_yup": "Listo!", "give_this_url": "Entregue esta URL a la persona a la que está enviando el archivo:", "ctrlc_to_stop": "Pulse Ctrl-C para detener el servidor", "not_a_file": "{0:s} no es un archivo.", + "download_page_loaded": "La página de descarga está lista.", "other_page_loaded": "La URL está lista.", "closing_automatically": "Apagando automáticamente porque la descarga finalizó", + "error_tails_invalid_port": "Valor inválido, el puerto debe ser un entero", + "error_tails_unknown_root": "Error desconocido en el proceso de Tails ejecutando como roo", + "help_tails_port": "Sólo Tails: puerto para abrir en el firewall, al levantar el servicio oculto", "help_local_only": "No intentar usar Tor: sólo para desarrollo", "help_stay_open": "Mantener el servicio oculto ejecutando después de que la descarga haya finalizado", "help_debug": "Guardar registro de errores en el disco", "help_filename": "Lista de archivos o carpetas para compartir", + "gui_drag_and_drop": "Arrastre\narchivos aquí", + "gui_add": "Añadir", + "gui_delete": "Eliminar", + "gui_choose_items": "Elegir", "gui_share_start_server": "Encender el Servidor", "gui_share_stop_server": "Detener el Servidor", - "gui_copy_url": "Copiar URL" + "gui_copy_url": "Copiar URL", + "gui_downloads": "Descargas:", + "gui_copied_url": "Se copió la URL en el portapapeles" } diff --git a/share/locale/fi.json b/share/locale/fi.json index 6032b8a8..00768528 100644 --- a/share/locale/fi.json +++ b/share/locale/fi.json @@ -1,18 +1,43 @@ { + "connecting_ctrlport": "Yhdistetään Torin ohjausporttiin että saadaan salattu palvelin porttiin {0:d}.", + "cant_connect_ctrlport": "Ei voi yhdistää Torin ohjausporttiin portissa {0:s}. OnionShare tarvitsee Tor Browserin toimimaan taustalla. Jos sinulla ei ole sitä niin voit hakea sen osoitteesta https://www.torproject.org/.", + "cant_connect_socksport": "Ei voi yhdistää Tor SOCKS5 palveluun portissa {0:s}. OnionShare tarvitsee Tor Browserin toimimaan taustalla. Jos sinulla ei ole sitä niin voit hakea sen osoitteesta https://www.torproject.org/.", "preparing_files": "Valmistellaan tiedostoja jaettavaksi.", + "wait_for_hs": "Odotetaan piilopalvelun valmistumista:", + "wait_for_hs_trying": "Yritetään...", + "wait_for_hs_nope": "Ei vielä valmis.", + "wait_for_hs_yup": "Valmis!", "give_this_url": "Anna tämä URL-osoite henkilölle, jolle lähetät tiedostot:", "ctrlc_to_stop": "Näppäin Ctrl-C pysäyttää palvelimen", "not_a_file": "{0:s} Ei ole tiedosto.", + "download_page_loaded": "Lataussivu ladattu", "other_page_loaded": "URL-osoite ladattu", "closing_automatically": "Lataus valmis. Suljetaan automaattisesti", "large_filesize": "Varoitus: Isojen tiedostojen lähetys saattaa kestää tunteja", + "error_tails_invalid_port": "Väärä arvo, portti pitää olla koknaisluku", + "error_tails_unknown_root": "Tuntematon virhe Tailsissa", + "help_tails_port": "Vain Tails: portti palomuurin läpi, käynnistetään salainen palvelin", "help_local_only": "Älä käytä Toria: vain ohjelmakehitykseen", "help_stay_open": "Pidä piilopalvelu käynnissä latauksen jälkeen.", + "help_transparent_torification": "Järjestelmäni käyttää Toria läpinäkyvästi", "help_debug": "Tallentaa virheet levylle", "help_filename": "Luettele jaettavat tiedostot tai kansiot", + "gui_drag_and_drop": "Vedä ja pudota\ntiedostot tänne", + "gui_add": "Lisää", + "gui_delete": "Poista", + "gui_choose_items": "Valitse", "gui_share_start_server": "Käynnistä palvelin", "gui_share_stop_server": "Pysäytä palvelin", "gui_copy_url": "Kopioi URL-osoite", + "gui_downloads": "Lataukset:", + "gui_canceled": "Peruutettu", + "gui_copied_url": "URL-osoite kopioitu leikepöydälle", + "gui_starting_server1": "Käynnistetään Tor piilopalvelu...", + "gui_starting_server2": "Tiivistän tiedostoja...", + "gui_starting_server3": "Odotetaan Tor piilopalvelua...", "gui_please_wait": "Odota...", - "using_ephemeral": "Käynnistetään lyhytaikainen Tor piilopalvelu ja odotetaan julkaisua" + "error_hs_dir_cannot_create": "Piilopalvelulle ei pystytty luomaan hakemistoa {0:s}", + "error_hs_dir_not_writable": "Piilopalvelun hakemistoon {0:s} ei voi kirjoittaa", + "using_ephemeral": "Käynnistetään lyhytaikainen Tor piilopalvelu ja odotetaan julkaisua", + "zip_progress_bar_format": "Tiivistän tiedostoja: %p%" } diff --git a/share/locale/fr.json b/share/locale/fr.json index a555dd58..6ec20b3b 100644 --- a/share/locale/fr.json +++ b/share/locale/fr.json @@ -1,19 +1,41 @@ { + "connecting_ctrlport": "Connexion au réseau Tor pour mettre en place un onion service sur le port {0:d}.", + "cant_connect_ctrlport": "Impossible de se connecter au port de contrôle Tor sur le port {0:s}. Est-ce que Tor tourne ?", "preparing_files": "Préparation des fichiers à partager.", + "wait_for_hs": "En attente du HS:", + "wait_for_hs_trying": "Tentative...", + "wait_for_hs_nope": "Pas encore prêt.", + "wait_for_hs_yup": "Prêt !", "give_this_url": "Donnez cette URL à la personne qui doit recevoir le fichier :", "ctrlc_to_stop": "Ctrl-C arrête le serveur", "not_a_file": "{0:s} n'est pas un fichier.", + "download_page_loaded": "Page de téléchargement chargée", "other_page_loaded": "URL chargée", "closing_automatically": "Fermeture automatique car le téléchargement est fini", + "error_tails_invalid_port": "Valeur invalide, le port doit être un nombre entier", + "error_tails_unknown_root": "Erreur inconnue avec un processus root sur Tails", "systray_menu_exit": "Quitter", + "systray_download_started_title": "Téléchargement OnionShare Démarré", + "systray_download_started_message": "Un utilisateur télécharge vos fichiers", + "systray_download_completed_title": "Téléchargement OnionShare Complete", + "systray_download_canceled_title": "Téléchargement OnionShare Annulé", + "systray_download_canceled_message": "L'utilisateur a annulé le téléchargement", + "help_tails_port": "Seulement sur Tails: port pour ouvrir le firewall, démarrage du onion service", "help_local_only": "Ne tentez pas d'utiliser Tor, uniquement pour développement", "help_stay_open": "Laisser tourner le onion service après que le téléchargment soit fini", "help_debug": "Enregistrer les erreurs sur le disque", "help_filename": "Liste des fichiers ou dossiers à partager", + "gui_drag_and_drop": "Glissez déposez\nles fichiers ici", + "gui_add": "Ajouter", + "gui_delete": "Supprimer", + "gui_choose_items": "Sélectionnez", "gui_share_start_server": "Démarrer le serveur", "gui_share_stop_server": "Arrêter le serveur", "gui_copy_url": "Copier URL", "gui_copy_hidservauth": "Copier HidServAuth", + "gui_downloads": "Téléchargements :", + "gui_canceled": "Annulé", + "gui_copied_url": "URL copié dans le presse-papier", "gui_please_wait": "Attendez-vous...", "gui_quit_warning_quit": "Quitter", "gui_quit_warning_dont_quit": "Ne quitter pas", diff --git a/share/locale/it.json b/share/locale/it.json index f64b04d5..7ad38169 100644 --- a/share/locale/it.json +++ b/share/locale/it.json @@ -1,18 +1,43 @@ { + "connecting_ctrlport": "Connessione alla porta di controllo di Tor per inizializzare il servizio nascosto sulla porta {0:d}.", + "cant_connect_ctrlport": "Impossibile connettere alla porta di controllo di Tor sulla porta {0:s}. OnionShare richiede l'esecuzione in background di Tor Browser per funzionare. Se non è installato puoi scaricarlo da https://www.torproject.org/.", + "cant_connect_socksport": "Impossibile connettersi al server Tor SOCKS5 sulla porta {0:s}. OnionShare richiede l'esecuzione in background di Tor Browser per funzionare. Se non è installato puoi scaricarlo da https://www.torproject.org/.", "preparing_files": "Preparazione dei files da condividere.", + "wait_for_hs": "In attesa che l'HS sia pronto:", + "wait_for_hs_trying": "Tentativo...", + "wait_for_hs_nope": "Non è ancora pronto.", + "wait_for_hs_yup": "Pronto!", "give_this_url": "Dai questo URL alla persona a cui vuoi inviare il file:", "ctrlc_to_stop": "Premi Ctrl-C per fermare il server", "not_a_file": "{0:s} non è un file.", + "download_page_loaded": "Pagina di Download caricata", "other_page_loaded": "URL caricato", "closing_automatically": "Chiusura automatica dopo aver finito il download", "large_filesize": "Attenzione: Inviare file di grandi dimensioni può richiedere ore", + "error_tails_invalid_port": "Valore non valido, la porta deve essere un numero intero", + "error_tails_unknown_root": "Errore sconosciuto con il processo Tails root", + "help_tails_port": "Solo per Tails: porta per passare il firewall, avvio del servizio nascosto", "help_local_only": "Non usare tor: è solo per lo sviluppo", "help_stay_open": "Mantieni il servizio nascosto avviato anche dopo aver finito il download", + "help_transparent_torification": "Il mio sistema usa tor in modo trasparente", "help_debug": "Registra gli errori sul disco", "help_filename": "Lista dei file o cartelle da condividere", + "gui_drag_and_drop": "Prendi e rilascia\ni file qui sopra", + "gui_add": "Aggiungi", + "gui_delete": "Cancella", + "gui_choose_items": "Scegli", "gui_share_start_server": "Inizia la condivisione", "gui_share_stop_server": "Ferma la condivisione", "gui_copy_url": "Copia lo URL", + "gui_downloads": "Downloads:", + "gui_canceled": "Cancellati", + "gui_copied_url": "URL Copiato nella clipboard", + "gui_starting_server1": "Avviamento del servizio nascosto Tor...", + "gui_starting_server2": "Elaborazione files...", + "gui_starting_server3": "In attesa del servizio nascosto Tor...", "gui_please_wait": "Attendere prego...", - "using_ephemeral": "Avviamento del servizio nascosto Tor ephemeral e attesa della pubblicazione" + "error_hs_dir_cannot_create": "Impossibile create la cartella per il servizio nascosto {0:s}", + "error_hs_dir_not_writable": "La cartella per il servizio nascosto {0:s} non ha i permessi di scrittura", + "using_ephemeral": "Avviamento del servizio nascosto Tor ephemeral e attesa della pubblicazione", + "zip_progress_bar_format": "Elaborazione files: %p%" } diff --git a/share/locale/nl.json b/share/locale/nl.json index 19bb2b69..4031effd 100644 --- a/share/locale/nl.json +++ b/share/locale/nl.json @@ -1,33 +1,64 @@ { "config_onion_service": "Onion service configureren op poort {0:d}.", "preparing_files": "Bestanden om te delen aan het voorbereiden.", + "wait_for_hs": "Wachten op gereed zijn van HS:", + "wait_for_hs_trying": "Proberen...", + "wait_for_hs_nope": "Nog niet gereed.", + "wait_for_hs_yup": "Gereed!", "give_this_url": "Geef deze URL aan de persoon aan wie je dit bestand verzend:", "give_this_url_stealth": "Geef deze URL en de HidServAuth regel aan de persoon aan wie je dit bestand verzend:", "ctrlc_to_stop": "Druk Ctrl-C om de server te stoppen", "not_a_file": "{0:s} is geen bestand.", "not_a_readable_file": "{0:s} is geen leesbaar bestand.", "no_available_port": "Kan de Onion service niet starten, er zijn geen poorten beschikbaar.", + "download_page_loaded": "Downloadpagina geladen", "other_page_loaded": "URL geladen", "close_on_timeout": "Sluit automatisch omdat timeout bereikt is", "closing_automatically": "Sluit automatisch omdat download gereed is", + "timeout_download_still_running": "Wachten totdat download gereed is voor automatisch sluiten", "large_filesize": "Waarschuwing: Versturen van grote bestanden kan uren duren", + "error_tails_invalid_port": "Ongeldige waarde, poort moet een integer zijn", + "error_tails_unknown_root": "Onbekende fout met het Tails root proces", "systray_menu_exit": "Afsluiten", + "systray_download_started_title": "OnionShare download gestart", + "systray_download_started_message": "Een gebruiker is begonnen met downloaden van je bestanden", + "systray_download_completed_title": "OnionShare download gereed", + "systray_download_completed_message": "De gebruiker is klaar met downloaden", + "systray_download_canceled_title": "OnionShare download afgebroken", + "systray_download_canceled_message": "De gebruiker heeft de download afgebroken", "help_local_only": "Maak geen gebruik van Tor, alleen voor ontwikkeling", "help_stay_open": "Laat verborgen service draaien nadat download gereed is", "help_shutdown_timeout": "Sluit de Onion service na N seconden", + "help_transparent_torification": "Mijn systeem gebruikt Tor als proxyserver", "help_stealth": "Maak stealth Onion service (geavanceerd)", "help_debug": "Log fouten naar harde schijf", "help_filename": "Lijst van bestanden of mappen om te delen", "help_config": "Pad naar een JSON configuratie bestand (optioneel)", + "gui_drag_and_drop": "Sleep en zet\nbestanden hier neer", + "gui_add": "Toevoegen", + "gui_delete": "Verwijder", + "gui_choose_items": "Kies", "gui_copy_url": "Kopieer URL", "gui_copy_hidservauth": "Kopieer HidServAuth", + "gui_downloads": "Downloads:", + "gui_canceled": "Afgebroken", + "gui_copied_url": "URL gekopieerd naar klembord", + "gui_copied_hidservauth": "HidServAuth regel gekopieerd naar klembord", + "gui_starting_server1": "Tor onion service wordt gestart...", + "gui_starting_server2": "Bestanden verwerken...", "gui_please_wait": "Moment geduld...", + "error_hs_dir_cannot_create": "Kan verborgen service map {0:s} niet aanmaken", + "error_hs_dir_not_writable": "Verborgen service map {0:s} is niet schrijfbaar", "using_ephemeral": "Kortstondige Tor onion service gestart en in afwachting van publicatie", + "gui_download_upload_progress_complete": "%p%, Tijd verstreken: {0:s}", + "gui_download_upload_progress_starting": "{0:s}, %p% (ETA berekenen)", + "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", "version_string": "Onionshare {0:s} | https://onionshare.org/", "gui_share_quit_warning": "Weet je zeker dat je wilt afsluiten?\nDe URL die je aan het delen bent zal niet meer bestaan.", "gui_quit_warning_quit": "Afsluiten", "gui_quit_warning_dont_quit": "Niet afsluiten", "error_rate_limit": "Een aanvaller probeert misschien je URL te gokken. Om dit te voorkomen heeft OnionShare de server automatisch gestopt. Om de bestanden te delen moet je de server opnieuw starten en de nieuwe URL delen.", + "zip_progress_bar_format": "Bestanden verwerken: %p%", "error_stealth_not_supported": "Om een geheime onion service te maken heb je minstens Tor 0.2.9.1-alpha (of Tor Browser 6.5) en minstens python3-stem 1.5.0 nodig.", "error_ephemeral_not_supported": "OnionShare vereist minstens Tor 0.2.7.1 en minstens python3-stem 1.4.0.", "gui_settings_window_title": "Instellingen", @@ -53,10 +84,13 @@ "gui_settings_authenticate_label": "Tor authenticatie opties", "gui_settings_authenticate_no_auth_option": "Geen authenticatie of cookie authenticatie", "gui_settings_authenticate_password_option": "Wachtwoord", + "gui_settings_authenticate_cookie_option": "Cookie", "gui_settings_password_label": "Wachtwoord", + "gui_settings_cookie_label": "Cookie pad", "gui_settings_button_save": "Opslaan", "gui_settings_button_cancel": "Annuleren", "gui_settings_button_help": "Help", + "gui_settings_shutdown_timeout_choice": "Auto-stop timer instellen?", "gui_settings_shutdown_timeout": "Stop delen om:", "settings_saved": "Instellingen opgeslagen in {}", "settings_error_unknown": "Kan geen verbinding maken met de Tor controller omdat de instellingen niet kloppen.", @@ -68,6 +102,7 @@ "settings_error_unreadable_cookie_file": "Verbonden met Tor controller, maar kan niet authenticeren omdat wachtwoord onjuist is en gebruiker heeft niet de permissies om cookie bestand te lezen.", "settings_error_bundled_tor_not_supported": "Meegeleverde Tor is niet onersteunt wanneer je niet de ontwikkelaarsmodus gebruikt in Windows or macOS.", "settings_error_bundled_tor_timeout": "Verbinden met Tor duurt te lang. Misschien is je computer offline, of je klok is niet accuraat.", + "settings_error_bundled_tor_canceled": "Het Tor is afgesloten voordat het kon verbinden.", "settings_error_bundled_tor_broken": "OnionShare kan niet verbinden met Tor op de achtergrond:\n{}", "settings_test_success": "Gefeliciteerd, OnionShare kan verbinden met de Tor controller.\n\nTor version: {}\nOndersteunt kortstondige onion services: {}\nOndersteunt geheime onion services: {}", "error_tor_protocol_error": "Fout bij praten met de Tor controller.\nAls je Whonix gebruikt, kijk dan hier https://www.whonix.org/wiki/onionshare om OnionShare werkend te krijgen.", @@ -82,5 +117,6 @@ "gui_tor_connection_error_settings": "Probeer de instellingen hoe OnionShare verbind met het Tor network aan te passen in Instellingen.", "gui_tor_connection_canceled": "OnionShare kan niet verbinden met Tor.\n\nControleer of je verbonden bent met het internet, herstart OnionShare om de Tor verbinding te configureren.", "gui_server_started_after_timeout": "De server startte na de gekozen auto-timeout.\nDeel opnieuw.", - "gui_server_timeout_expired": "De gekozen timeout is al verlopen.\nKies nieuwe timeout deel opnieuw." + "gui_server_timeout_expired": "De gekozen timeout is al verlopen.\nKies nieuwe timeout deel opnieuw.", + "share_via_onionshare": "Deel via OnionShare" } diff --git a/share/locale/no.json b/share/locale/no.json index 6b277353..8b131038 100644 --- a/share/locale/no.json +++ b/share/locale/no.json @@ -1,6 +1,10 @@ { + "connecting_ctrlport": "Kobler til Tors kontroll-port for å sette opp en gjemt tjeneste på port {0:d}.", + "cant_connect_ctrlport": "Klarte ikke å koble til Tors kontroll-porter {0:s}. Sjekk at Tor kjører.", "give_this_url": "Gi personen du vil sende filen til denne URL-en:", "ctrlc_to_stop": "Trykk Ctrl+C for å stoppe serveren.", "not_a_file": "{0:s} er ikke en fil.", + "gui_copied_url": "Kopierte URL-en til utklippstavlen", + "download_page_loaded": "Nedlastingsside lastet", "other_page_loaded": "En annen side har blitt lastet" } diff --git a/share/locale/pt.json b/share/locale/pt.json index 0aefd847..71391957 100644 --- a/share/locale/pt.json +++ b/share/locale/pt.json @@ -1,6 +1,10 @@ { + "connecting_ctrlport": "Conectando-se à porta de controle Tor para configurar serviço escondido na porta {0:d}.", + "cant_connect_ctrlport": "Não pode conectar à porta de controle Tor na porta {0:s}. O Tor está rodando?", "give_this_url": "Passe este URL para a pessoa que deve receber o arquivo:", "ctrlc_to_stop": "Pressione Ctrl-C para parar o servidor", "not_a_file": "{0:s} não é um arquivo.", + "gui_copied_url": "URL foi copiado para área de transferência", + "download_page_loaded": "Página de download carregada", "other_page_loaded": "Outra página tem sido carregada" } diff --git a/share/locale/ru.json b/share/locale/ru.json index e1c59721..193c158d 100644 --- a/share/locale/ru.json +++ b/share/locale/ru.json @@ -1,7 +1,11 @@ { + "connecting_ctrlport": "Соединяемся с контрольным портом Tor для создания скрытого сервиса на порту {0:d}.", + "cant_connect_ctrlport": "Невозможно соединиться с контрольным портом Tor на порту {0:s}. Tor запущен?", "give_this_url": "Отправьте эту ссылку тому человеку, которому вы хотите передать файл:", "ctrlc_to_stop": "Нажмите Ctrl-C чтобы остановить сервер", "not_a_file": "{0:s} не является файлом.", + "gui_copied_url": "Ссылка скопирована в буфер обмена", + "download_page_loaded": "Страница закачки загружена", "other_page_loaded": "Другая страница была загружена", "gui_copy_url": "Скопировать ссылку" } diff --git a/share/locale/tr.json b/share/locale/tr.json index 2f041233..d8097909 100644 --- a/share/locale/tr.json +++ b/share/locale/tr.json @@ -1,18 +1,43 @@ { + "connecting_ctrlport": "{0:d} portundaki gizli hizmet(GH) kurulumu için Tor kontrol portuna bağlanıyor.", + "cant_connect_ctrlport": "Tor kontrol {0:s} portuna bağlanamıyor. OnionShare çalışması için arkaplanda Tor Browser çalışması gerekiyor. Tor Browser indirmediyseniz, https://www.torproject.org/", + "cant_connect_socksport": "Tor SOCKS5 sunucu {0:s} portuna bağlanamıyor. OnionShare çalışması için arkaplanda Tor Browser çalışması gerekiyor. Tor Browser indirmediyseniz, https://www.torproject.org/", "preparing_files": "Paylaşmak için dosyalar hazırlanıyor.", + "wait_for_hs": "GH hazır olması bekleniyor:", + "wait_for_hs_trying": "Deneniyor...", + "wait_for_hs_nope": "Henüz hazır değil.", + "wait_for_hs_yup": "Hazır!", "give_this_url": "Dosyayı gönderdiğin kişiye bu URL'i verin:", "ctrlc_to_stop": "Sunucuyu durdurmak için, Ctrl-C basın", "not_a_file": "{0:s} dosya değil.", + "download_page_loaded": "İndirme sayfası yüklendi", "other_page_loaded": "Diğer sayfa yüklendi", "closing_automatically": "İndirme işlemi tamamlandığı için kendiliğinden durduruluyor", "large_filesize": "Uyarı: Büyük dosyaların gönderimi saatler sürebilir", + "error_tails_invalid_port": "Geçersiz değer, port sayı olmalıdır", + "error_tails_unknown_root": "Tails ana işlemi ile ilgili bilinmeyen hata", + "help_tails_port": "Sadece Tails: port for opening firewall, starting onion service", "help_local_only": "Tor kullanmaya kalkışmayın: sadece geliştirme için", "help_stay_open": "İndirme tamamlandıktan sonra gizli hizmeti çalıştırmaya devam et", + "help_transparent_torification": "Sistemim apaçık torlu", "help_debug": "Hata kayıtlarını diske kaydet", "help_filename": "Paylaşmak için dosya ve klasörler listesi", + "gui_drag_and_drop": "Dosyaları buraya\n Sürükle ve Bırak", + "gui_add": "Ekle", + "gui_delete": "Sil", + "gui_choose_items": "Seç", "gui_share_start_server": "Paylaşımı Başlat", "gui_share_stop_server": "Paylaşımı Durdur", "gui_copy_url": "URL Kopyala", + "gui_downloads": "İndirilenler:", + "gui_canceled": "İptal edilen", + "gui_copied_url": "Panoya kopyalanan URL", + "gui_starting_server1": "Tor gizli hizmeti başlatılıyor...", + "gui_starting_server2": "Dosyalar hazırlanıyor...", + "gui_starting_server3": "Tor gizli hizmeti bekleniyor...", "gui_please_wait": "Lütfen bekleyin...", - "using_ephemeral": "Geçici Tor gizli hizmetine bakılıyor ve yayımı bekleniyor" + "error_hs_dir_cannot_create": "Gizli hizmet klasörü {0:s} oluşturulamıyor", + "error_hs_dir_not_writable": "Gizle hizmet klasörü {0:s} yazılabilir değil", + "using_ephemeral": "Geçici Tor gizli hizmetine bakılıyor ve yayımı bekleniyor", + "zip_progress_bar_format": "Dosyalar hazırlanıyor: %p%" } From 0be4f36894c16578ec3cf3ea8a7cbaf4bee59711 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 22 Jul 2018 17:00:30 +1000 Subject: [PATCH 27/38] Fix check_lacked_trans.py script to check subfolders and also match on more than first occurrence of strings._ in a single line --- install/check_lacked_trans.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/install/check_lacked_trans.py b/install/check_lacked_trans.py index 3313db7c..57568b1a 100644 --- a/install/check_lacked_trans.py +++ b/install/check_lacked_trans.py @@ -54,7 +54,7 @@ def main(): dir = args.onionshare_dir - src = files_in(dir, 'onionshare') + files_in(dir, 'onionshare_gui') + src = files_in(dir, 'onionshare') + files_in(dir, 'onionshare_gui') + files_in(dir, 'onionshare_gui/share_mode') + files_in(dir, 'onionshare_gui/receive_mode') + files_in(dir, 'install/scripts') pysrc = [p for p in src if p.endswith('.py')] lang_code = args.lang_code @@ -64,11 +64,11 @@ def main(): for line in fileinput.input(pysrc, openhook=fileinput.hook_encoded('utf-8')): # search `strings._('translate_key')` # `strings._('translate_key', True)` - m = re.search(r'strings\._\((.*?)\)', line) + m = re.findall(r'strings\._\((.*?)\)', line) if m: - arg = m.group(1) - key = arg.split(',')[0].strip('''"' ''') - translate_keys.add(key) + for match in m: + key = match.split(',')[0].strip('''"' ''') + translate_keys.add(key) if args.show_all_keys: for k in sorted(translate_keys): From f6dbc55c0c39d271005a0cdd7b9d8721bc974289 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 22 Jul 2018 17:13:04 +1000 Subject: [PATCH 28/38] Also include test dir for strings --- install/check_lacked_trans.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/install/check_lacked_trans.py b/install/check_lacked_trans.py index 57568b1a..027edab1 100644 --- a/install/check_lacked_trans.py +++ b/install/check_lacked_trans.py @@ -54,7 +54,12 @@ def main(): dir = args.onionshare_dir - src = files_in(dir, 'onionshare') + files_in(dir, 'onionshare_gui') + files_in(dir, 'onionshare_gui/share_mode') + files_in(dir, 'onionshare_gui/receive_mode') + files_in(dir, 'install/scripts') + src = files_in(dir, 'onionshare') + \ + files_in(dir, 'onionshare_gui') + \ + files_in(dir, 'onionshare_gui/share_mode') + \ + files_in(dir, 'onionshare_gui/receive_mode') + \ + files_in(dir, 'install/scripts') + \ + files_in(dir, 'test') pysrc = [p for p in src if p.endswith('.py')] lang_code = args.lang_code From f6f469db594dac7ad07cf294e3361d537e1bd050 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 22 Jul 2018 17:13:23 +1000 Subject: [PATCH 29/38] remove obsolete strings --- share/locale/cs.json | 17 ----------------- share/locale/da.json | 18 +----------------- share/locale/de.json | 10 ---------- share/locale/en.json | 14 -------------- share/locale/eo.json | 17 ----------------- share/locale/es.json | 10 ---------- share/locale/fi.json | 16 ---------------- share/locale/fr.json | 9 --------- share/locale/it.json | 16 ---------------- share/locale/nl.json | 15 --------------- share/locale/no.json | 3 --- share/locale/pt.json | 3 --- share/locale/ru.json | 3 --- share/locale/tr.json | 16 ---------------- 14 files changed, 1 insertion(+), 166 deletions(-) diff --git a/share/locale/cs.json b/share/locale/cs.json index aaa80d1b..40e48f87 100644 --- a/share/locale/cs.json +++ b/share/locale/cs.json @@ -2,22 +2,15 @@ "config_onion_service": "Nastavuji onion service na portu {0:d}.", "preparing_files": "Připravuji soubory ke sdílení.", "wait_for_hs": "Čekám na HS až bude připravena:", - "wait_for_hs_trying": "Zkouším...", - "wait_for_hs_nope": "Ještě nepřipraven.", - "wait_for_hs_yup": "Připraven!", "give_this_url": "Dejte tuto URL osobě, které dané soubory posíláte:", "give_this_url_stealth": "Give this URL and HidServAuth line to the person you're sending the file to:", "ctrlc_to_stop": "Stiskněte Ctrl-C pro zastavení serveru", "not_a_file": "{0:s} není soubor.", - "download_page_loaded": "Download page loaded", "other_page_loaded": "URL loaded", "closing_automatically": "Zastavuji automaticky, protože stahování skončilo", "large_filesize": "Varování: Posílání velkých souborů může trvat hodiny", - "error_tails_invalid_port": "Nesprávná hodnota, port musí být celé číslo", - "error_tails_unknown_root": "Neznámá chyba s Tails root procesem", "help_local_only": "Nepoužívat Tor: jen pro vývoj", "help_stay_open": "Nechat běžet onion service po skončení stahování", - "help_transparent_torification": "My system is transparently torified", "help_stealth": "Create stealth onion service (advanced)", "help_debug": "Zaznamenat chyby na disk", "help_filename": "Seznam souborů a složek ke sdílení", @@ -33,11 +26,7 @@ "gui_canceled": "Zrušeno", "gui_copied_url": "URL zkopírováno do schránky", "gui_copied_hidservauth": "Copied HidServAuth line to clipboard", - "gui_starting_server1": "Spouštím Tor onion service...", - "gui_starting_server2": "Zpracovávám soubory...", "gui_please_wait": "Prosím čekejte...", - "error_hs_dir_cannot_create": "Nejde vytvořit složka onion service {0:s}", - "error_hs_dir_not_writable": "nejde zapisovat do složky onion service {0:s}", "using_ephemeral": "Starting ephemeral Tor onion service and awaiting publication", "gui_download_upload_progress_complete": "%p%, Uplynulý čas: {0:s}", "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", @@ -50,9 +39,6 @@ "zip_progress_bar_format": "Zpracovávám soubory: %p%", "error_stealth_not_supported": "To create stealth onion services, you need at least Tor 0.2.9.1-alpha (or Tor Browser 6.5) and at least python3-stem 1.5.0.", "error_ephemeral_not_supported": "OnionShare vyžaduje nejméně Tor 0.2.7.1 a nejméně python3-stem 1.4.0.", - "gui_menu_file_menu": "&File", - "gui_menu_settings_action": "&Settings", - "gui_menu_quit_action": "&Quit", "gui_settings_window_title": "Nastavení", "gui_settings_connection_type_label": "Jak by se měl OnionShare připojit k Toru?", "gui_settings_connection_type_automatic_option": "Zkusit automatické nastavení s Tor Browserem", @@ -63,10 +49,7 @@ "gui_settings_authenticate_label": "Autentizační možnosti Toru", "gui_settings_authenticate_no_auth_option": "Žádná autentizace ani cookie autentizace", "gui_settings_authenticate_password_option": "Heslo", - "gui_settings_authenticate_cookie_option": "Cookie", "gui_settings_password_label": "Heslo", - "gui_settings_cookie_label": "Cesta ke cookie", - "gui_settings_button_test": "Test Settings", "gui_settings_button_save": "Uložit", "gui_settings_button_cancel": "Zrušit", "settings_saved": "Nastavení uloženo do {}", diff --git a/share/locale/da.json b/share/locale/da.json index d36f7035..00539212 100644 --- a/share/locale/da.json +++ b/share/locale/da.json @@ -2,23 +2,17 @@ "config_onion_service": "Konfigurerer onion-tjeneste på port {0:d}.", "preparing_files": "Forbereder filer som skal deles.", "wait_for_hs": "Venter på at HS bliver klar:", - "wait_for_hs_trying": "Prøver...", - "wait_for_hs_nope": "Endnu ikke klar.", - "wait_for_hs_yup": "Klar!", "give_this_url": "Giv denne URL til personen du sender filen til:", "give_this_url_stealth": "Giv denne URL og HidServAuth-linje til personen du sender filen til:", "ctrlc_to_stop": "Tryk på Ctrl-C for at stoppe serveren", "not_a_file": "{0:s} er ikke en gyldig fil.", "not_a_readable_file": "{0:s} er ikke en læsbar fil.", "no_available_port": "Kunne ikke starte onion-tjenesten da der ikke var nogen tilgængelig port.", - "download_page_loaded": "Downloadside indlæst", "other_page_loaded": "URL indlæst", "close_on_timeout": "Lukker automatisk da timeout er nået", "closing_automatically": "Lukker automatisk da download er færdig", "timeout_download_still_running": "Venter på at download skal blive færdig inden automatisk stop", "large_filesize": "Advarsel: Det kan tage timer at sende store filer", - "error_tails_invalid_port": "Ugyldig værdi, port skal være et heltal", - "error_tails_unknown_root": "Ukendt fejl med Tails-rodproces", "systray_menu_exit": "Afslut", "systray_download_started_title": "OnionShare-download startet", "systray_download_started_message": "En bruger startede download af dine filer", @@ -29,7 +23,6 @@ "help_local_only": "Undlad at bruge tor: kun til udvikling", "help_stay_open": "Hold onion-tjeneste kørende efter download er færdig", "help_shutdown_timeout": "Luk onion-tjenesten efter N sekunder", - "help_transparent_torification": "Mit system er gennemsigtigt torifiseret", "help_stealth": "Opret usynlig onion-tjeneste (avanceret)", "help_debug": "Log programfejl til stdout, og log webfejl til disk", "help_filename": "Liste over filer eller mapper som skal deles", @@ -46,11 +39,7 @@ "gui_canceled": "Annulleret", "gui_copied_url": "Kopierede URL til udklipsholder", "gui_copied_hidservauth": "Kopierede HidServAuth-linje til udklipsholder", - "gui_starting_server1": "Starter Tor onion-tjeneste...", - "gui_starting_server2": "Databehandler filer...", "gui_please_wait": "Vent venligst...", - "error_hs_dir_cannot_create": "Kan ikke oprette onion-tjenestens mappe {0:s}", - "error_hs_dir_not_writable": "onion-tjenestens mappe {0:s} er skrivebeskyttet", "using_ephemeral": "Starter kortvarig Tor onion-tjeneste og afventer udgivelse", "gui_download_upload_progress_complete": "%p%, tid forløbet: {0:s}", "gui_download_upload_progress_starting": "{0:s}, %p% (udregner anslået ankomsttid)", @@ -87,9 +76,7 @@ "gui_settings_authenticate_label": "Valgmuligheder for Tor-autentifikation", "gui_settings_authenticate_no_auth_option": "Ingen autentifikation, eller cookieautentifikation", "gui_settings_authenticate_password_option": "Adgangskode", - "gui_settings_authenticate_cookie_option": "Cookie", "gui_settings_password_label": "Adgangskode", - "gui_settings_cookie_label": "Cookiesti", "gui_settings_tor_bridges": "Understøttelse af Tor-bro", "gui_settings_tor_bridges_no_bridges_radio_option": "Brug ikke broer", "gui_settings_tor_bridges_obfs4_radio_option": "Brug indbygget obfs4 udskiftelige transporter", @@ -100,7 +87,6 @@ "gui_settings_button_save": "Gem", "gui_settings_button_cancel": "Annuller", "gui_settings_button_help": "Hjælp", - "gui_settings_shutdown_timeout_choice": "Sæt timer til automatisk stop?", "gui_settings_shutdown_timeout": "Stop delingen ved:", "settings_saved": "Indstillinger gemt til {}", "settings_error_unknown": "Kan ikke oprette forbindelse til Tor-kontroller da indstillingerne ikke giver mening.", @@ -112,7 +98,6 @@ "settings_error_unreadable_cookie_file": "Forbundet til Tor-kontroller, men kan ikke autentificere da din adgangskode kan være forkert, og din bruger ikke har tilladelse til at læse cookiefilen.", "settings_error_bundled_tor_not_supported": "Bundet Tor understøttes ikke når der ikke bruges udviklertilstand i Windows eller MacOS.", "settings_error_bundled_tor_timeout": "Det tager for længe at oprette forbindelse til Tor. Din computer er måske offline, eller dit ur går forkert.", - "settings_error_bundled_tor_canceled": "Tor-processen lukkede inden den blev færdig med at oprette forbindelse.", "settings_error_bundled_tor_broken": "Der er noget galt med OnionShare som opretter forbindelse til Tor i baggrunden:\n{}", "settings_test_success": "Tillykke, OnionShare kan oprette forbindelse til Tor-kontrolleren.\n\nTor version: {}\nUnderstøtter kortvarige onion-tjenester: {}\nUnderstøtter usynlige onion-tjenester: {}", "error_tor_protocol_error": "Fejl under snak med Tor-kontrolleren.\nHvis du bruger Whonix, så tjek https://www.whonix.org/wiki/onionshare for at få OnionShare til at virke.", @@ -130,6 +115,5 @@ "gui_server_started_after_timeout": "Serveren startede efter dit valgte automatiske timeout.\nStart venligst en ny deling.", "gui_server_timeout_expired": "Den valgte timeout er allerede udløbet.\nOpdater venligst timeouten og herefter kan du starte deling.", "share_via_onionshare": "Del via OnionShare", - "gui_save_private_key_checkbox": "Brug en vedvarende URL\n(fravalg vil slette gemte URL)", - "persistent_url_in_use": "Denne deling bruger en vedvarende URL" + "gui_save_private_key_checkbox": "Brug en vedvarende URL\n(fravalg vil slette gemte URL)" } diff --git a/share/locale/de.json b/share/locale/de.json index 8e87b89b..6c0fa861 100644 --- a/share/locale/de.json +++ b/share/locale/de.json @@ -1,22 +1,12 @@ { - "connecting_ctrlport": "Verbinde zum Tor-Kontrollport um den versteckten Dienst auf Port {0:d} laufen zu lassen.", - "cant_connect_ctrlport": "Konnte keine Verbindung zum Tor-Kontrollport auf Port {0:s} aufbauen. Läuft Tor?", - "cant_connect_socksport": "Konnte keine Verbindung zum Tor SOCKS5 Server auf Port {0:s} herstellen. OnionShare setzt voraus dass Tor Browser im Hintergrund läuft. Wenn du noch ihn noch noch nicht hast kannst du ihn unter https://www.torproject.org/ herunterladen.", "preparing_files": "Dateien werden vorbereitet.", "wait_for_hs": "Warte auf HS:", - "wait_for_hs_trying": "Verbindungsversuch...", - "wait_for_hs_nope": "Noch nicht bereit.", - "wait_for_hs_yup": "Bereit!", "give_this_url": "Geben Sie diese URL der Person, der Sie die Datei zusenden möchten:", "ctrlc_to_stop": "Drücken Sie Strg+C um den Server anzuhalten", "not_a_file": "{0:s} ist keine Datei.", - "download_page_loaded": "Seite geladen", "other_page_loaded": "URL geladen", "closing_automatically": "Halte automatisch an, da der Download beendet wurde", "large_filesize": "Warnung: Das Senden von großen Dateien kann Stunden dauern", - "error_tails_invalid_port": "Ungültiger Wert, Port muss eine ganze Zahl sein", - "error_tails_unknown_root": "Unbekannter Fehler mit Tails root Prozess", - "help_tails_port": "Nur für Tails: Port um den Firewall zu öffnen, starte onion service", "help_local_only": "Nicht mit Tor benutzen, nur für Entwicklung", "help_stay_open": "Den onion service nicht anhalten nachdem ein Download beendet wurde", "help_debug": "Fehler auf Festplatte schreiben", diff --git a/share/locale/en.json b/share/locale/en.json index b1d247d9..a96fe526 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -2,9 +2,6 @@ "config_onion_service": "Configuring onion service on port {0:d}.", "preparing_files": "Preparing files to share.", "wait_for_hs": "Waiting for HS to be ready:", - "wait_for_hs_trying": "Trying…", - "wait_for_hs_nope": "Not ready yet.", - "wait_for_hs_yup": "Ready!", "give_this_url": "Give this address to the person you're sending the file to:", "give_this_url_stealth": "Give this address and HidServAuth line to the person you're sending the file to:", "give_this_url_receive": "Give this address to the people sending you files:", @@ -19,8 +16,6 @@ "closing_automatically": "Stopped because download finished", "timeout_download_still_running": "Waiting for download to complete", "large_filesize": "Warning: Sending large files could take hours", - "error_tails_invalid_port": "Invalid value, port must be a regular number", - "error_tails_unknown_root": "Unknown error with Tails root process", "systray_menu_exit": "Quit", "systray_download_started_title": "OnionShare Download Started", "systray_download_started_message": "A user started downloading your files", @@ -30,8 +25,6 @@ "systray_download_canceled_message": "The user canceled the download", "systray_upload_started_title": "OnionShare Upload Started", "systray_upload_started_message": "A user started uploading files to your computer", - "systray_upload_completed_title": "OnionShare Upload Finished", - "systray_upload_completed_message": "The user finished uploading files to your computer", "help_local_only": "Do not attempt to use Tor: For development only", "help_stay_open": "Keep onion service running after download has finished", "help_shutdown_timeout": "Shut down the onion service after N seconds", @@ -62,11 +55,7 @@ "gui_copied_url": "The OnionShare address has been copied to clipboard", "gui_copied_hidservauth_title": "Copied HidServAuth", "gui_copied_hidservauth": "The HidServAuth line has been copied to clipboard", - "gui_starting_server1": "Starting Tor onion service…", - "gui_starting_server2": "Compressing files…", "gui_please_wait": "Starting… Click to cancel", - "error_hs_dir_cannot_create": "Cannot create onion service dir {0:s}", - "error_hs_dir_not_writable": "onion service dir {0:s} is not writable", "using_ephemeral": "Starting ephemeral Tor onion service and awaiting publication", "gui_download_upload_progress_complete": "%p%, Time Elapsed: {0:s}", "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", @@ -105,9 +94,7 @@ "gui_settings_authenticate_label": "Tor authentication options", "gui_settings_authenticate_no_auth_option": "No authentication, or cookie authentication", "gui_settings_authenticate_password_option": "Password", - "gui_settings_authenticate_cookie_option": "Cookie", "gui_settings_password_label": "Password", - "gui_settings_cookie_label": "Cookie path", "gui_settings_tor_bridges": "Tor Bridge support", "gui_settings_tor_bridges_no_bridges_radio_option": "Don't use bridges", "gui_settings_tor_bridges_obfs4_radio_option": "Use built-in obfs4 pluggable transports", @@ -135,7 +122,6 @@ "settings_error_unreadable_cookie_file": "Connected to Tor controller, but can't authenticate because your password may be wrong, and your user lacks permission to read the cookie file.", "settings_error_bundled_tor_not_supported": "Use of the Tor version bundled with OnionShare is not supported when using developer mode on Windows or macOS.", "settings_error_bundled_tor_timeout": "Connecting to Tor is taking too long. Maybe your computer is offline, or your system clock isn't accurate.", - "settings_error_bundled_tor_canceled": "The Tor process closed before it could finish connecting.", "settings_error_bundled_tor_broken": "OnionShare could not connect to Tor in the background:\n{}", "settings_test_success": "Congratulations, OnionShare can connect to the Tor controller.\n\nTor version: {}\nSupports ephemeral onion services: {}\nSupports stealth onion services: {}", "error_tor_protocol_error": "Could not communicate with the Tor controller.\nIf you're using Whonix, check out https://www.whonix.org/wiki/onionshare to make OnionShare work.", diff --git a/share/locale/eo.json b/share/locale/eo.json index 0745ecaf..18e73165 100644 --- a/share/locale/eo.json +++ b/share/locale/eo.json @@ -2,22 +2,15 @@ "config_onion_service": "Agordas onion service je pordo {0:d}.", "preparing_files": "Preparas dosierojn por kundivido.", "wait_for_hs": "Atendas al hidden sevice por esti preta:", - "wait_for_hs_trying": "Provas...", - "wait_for_hs_nope": "Ankoraŭ ne preta.", - "wait_for_hs_yup": "Preta!", "give_this_url": "Donu ĉi tiun URL al la persono al kiu vi sendas la dosieron:", "give_this_url_stealth": "Give this URL and HidServAuth line to the person you're sending the file to:", "ctrlc_to_stop": "Presu Ctrl-C por halti la servilon", "not_a_file": "{0:s} ne estas dosiero.", - "download_page_loaded": "Download page loaded", "other_page_loaded": "URL loaded", "closing_automatically": "Haltas aŭtomate ĉar la elŝuto finiĝis", "large_filesize": "Atentigo: Sendado de grandaj dosieroj povas daŭri horojn", - "error_tails_invalid_port": "Malĝusta valoro, pordo-numero devas esti plena numero", - "error_tails_unknown_root": "Nekonata eraro kun Tails-root-procezo", "help_local_only": "Ne strebu uzi tor: nur por evoluado", "help_stay_open": "Lasu onion service funkcii post fino de elŝuto", - "help_transparent_torification": "My system is transparently torified", "help_stealth": "Create stealth onion service (advanced)", "help_debug": "Protokoli erarojn sur disko", "help_filename": "Listo de dosieroj aŭ dosierujoj por kundividi", @@ -33,11 +26,7 @@ "gui_canceled": "Nuligita", "gui_copied_url": "URL kopiita en tondujon", "gui_copied_hidservauth": "Copied HidServAuth line to clipboard", - "gui_starting_server1": "Startigas Tor onion service...", - "gui_starting_server2": "Compressing files...", "gui_please_wait": "Bonvolu atendi...", - "error_hs_dir_cannot_create": "Ne eblas krei hidden-service-dosierujon {0:s}", - "error_hs_dir_not_writable": "ne eblas konservi dosierojn en hidden-service-dosierujo {0:s}", "using_ephemeral": "Starting ephemeral Tor onion service and awaiting publication", "gui_download_upload_progress_complete": "%p%, Tempo pasinta: {0:s}", "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", @@ -50,9 +39,6 @@ "zip_progress_bar_format": "Compressing files: %p%", "error_stealth_not_supported": "To create stealth onion services, you need at least Tor 0.2.9.1-alpha (or Tor Browser 6.5) and at least python3-stem 1.5.0.", "error_ephemeral_not_supported": "OnionShare postulas almenaŭ Tor 0.2.7.1 kaj almenaŭ python3-stem 1.4.0.", - "gui_menu_file_menu": "&File", - "gui_menu_settings_action": "&Settings", - "gui_menu_quit_action": "&Quit", "gui_settings_window_title": "Settings", "gui_settings_connection_type_label": "Kiel OnionShare devus konektiĝi al Tor?", "gui_settings_connection_type_automatic_option": "Provi aŭtomate agordi kun Tor Browser", @@ -63,10 +49,7 @@ "gui_settings_authenticate_label": "Tor authentication options", "gui_settings_authenticate_no_auth_option": "No authentication, or cookie authentication", "gui_settings_authenticate_password_option": "Pasvorto", - "gui_settings_authenticate_cookie_option": "Kuketo", "gui_settings_password_label": "Pasvorto", - "gui_settings_cookie_label": "Cookie path", - "gui_settings_button_test": "Test Settings", "gui_settings_button_save": "Konservi", "gui_settings_button_cancel": "Nuligi", "settings_saved": "Agordoj konservitaj en {}", diff --git a/share/locale/es.json b/share/locale/es.json index 412fb501..b829540a 100644 --- a/share/locale/es.json +++ b/share/locale/es.json @@ -1,21 +1,11 @@ { - "connecting_ctrlport": "Conectando a puerto control de Tor para configurar servicio oculto en puerto {0:d}.", - "cant_connect_ctrlport": "No se pudo conectar a puerto control de Tor en puertos {0:s}. ¿Está funcionando Tor?", - "cant_connect_socksport": "No se pudo conectar al servidor SOCKS5 de Tor en el puerto {0:s}. ¿Está funcionando Tor?", "preparing_files": "Preparando los archivos para compartir.", "wait_for_hs": "Esperando a que HS esté listo:", - "wait_for_hs_trying": "Probando...", - "wait_for_hs_nope": "No está listo todavía.", - "wait_for_hs_yup": "Listo!", "give_this_url": "Entregue esta URL a la persona a la que está enviando el archivo:", "ctrlc_to_stop": "Pulse Ctrl-C para detener el servidor", "not_a_file": "{0:s} no es un archivo.", - "download_page_loaded": "La página de descarga está lista.", "other_page_loaded": "La URL está lista.", "closing_automatically": "Apagando automáticamente porque la descarga finalizó", - "error_tails_invalid_port": "Valor inválido, el puerto debe ser un entero", - "error_tails_unknown_root": "Error desconocido en el proceso de Tails ejecutando como roo", - "help_tails_port": "Sólo Tails: puerto para abrir en el firewall, al levantar el servicio oculto", "help_local_only": "No intentar usar Tor: sólo para desarrollo", "help_stay_open": "Mantener el servicio oculto ejecutando después de que la descarga haya finalizado", "help_debug": "Guardar registro de errores en el disco", diff --git a/share/locale/fi.json b/share/locale/fi.json index 00768528..09186be8 100644 --- a/share/locale/fi.json +++ b/share/locale/fi.json @@ -1,25 +1,14 @@ { - "connecting_ctrlport": "Yhdistetään Torin ohjausporttiin että saadaan salattu palvelin porttiin {0:d}.", - "cant_connect_ctrlport": "Ei voi yhdistää Torin ohjausporttiin portissa {0:s}. OnionShare tarvitsee Tor Browserin toimimaan taustalla. Jos sinulla ei ole sitä niin voit hakea sen osoitteesta https://www.torproject.org/.", - "cant_connect_socksport": "Ei voi yhdistää Tor SOCKS5 palveluun portissa {0:s}. OnionShare tarvitsee Tor Browserin toimimaan taustalla. Jos sinulla ei ole sitä niin voit hakea sen osoitteesta https://www.torproject.org/.", "preparing_files": "Valmistellaan tiedostoja jaettavaksi.", "wait_for_hs": "Odotetaan piilopalvelun valmistumista:", - "wait_for_hs_trying": "Yritetään...", - "wait_for_hs_nope": "Ei vielä valmis.", - "wait_for_hs_yup": "Valmis!", "give_this_url": "Anna tämä URL-osoite henkilölle, jolle lähetät tiedostot:", "ctrlc_to_stop": "Näppäin Ctrl-C pysäyttää palvelimen", "not_a_file": "{0:s} Ei ole tiedosto.", - "download_page_loaded": "Lataussivu ladattu", "other_page_loaded": "URL-osoite ladattu", "closing_automatically": "Lataus valmis. Suljetaan automaattisesti", "large_filesize": "Varoitus: Isojen tiedostojen lähetys saattaa kestää tunteja", - "error_tails_invalid_port": "Väärä arvo, portti pitää olla koknaisluku", - "error_tails_unknown_root": "Tuntematon virhe Tailsissa", - "help_tails_port": "Vain Tails: portti palomuurin läpi, käynnistetään salainen palvelin", "help_local_only": "Älä käytä Toria: vain ohjelmakehitykseen", "help_stay_open": "Pidä piilopalvelu käynnissä latauksen jälkeen.", - "help_transparent_torification": "Järjestelmäni käyttää Toria läpinäkyvästi", "help_debug": "Tallentaa virheet levylle", "help_filename": "Luettele jaettavat tiedostot tai kansiot", "gui_drag_and_drop": "Vedä ja pudota\ntiedostot tänne", @@ -32,12 +21,7 @@ "gui_downloads": "Lataukset:", "gui_canceled": "Peruutettu", "gui_copied_url": "URL-osoite kopioitu leikepöydälle", - "gui_starting_server1": "Käynnistetään Tor piilopalvelu...", - "gui_starting_server2": "Tiivistän tiedostoja...", - "gui_starting_server3": "Odotetaan Tor piilopalvelua...", "gui_please_wait": "Odota...", - "error_hs_dir_cannot_create": "Piilopalvelulle ei pystytty luomaan hakemistoa {0:s}", - "error_hs_dir_not_writable": "Piilopalvelun hakemistoon {0:s} ei voi kirjoittaa", "using_ephemeral": "Käynnistetään lyhytaikainen Tor piilopalvelu ja odotetaan julkaisua", "zip_progress_bar_format": "Tiivistän tiedostoja: %p%" } diff --git a/share/locale/fr.json b/share/locale/fr.json index 6ec20b3b..b6f6eaa7 100644 --- a/share/locale/fr.json +++ b/share/locale/fr.json @@ -1,26 +1,17 @@ { - "connecting_ctrlport": "Connexion au réseau Tor pour mettre en place un onion service sur le port {0:d}.", - "cant_connect_ctrlport": "Impossible de se connecter au port de contrôle Tor sur le port {0:s}. Est-ce que Tor tourne ?", "preparing_files": "Préparation des fichiers à partager.", "wait_for_hs": "En attente du HS:", - "wait_for_hs_trying": "Tentative...", - "wait_for_hs_nope": "Pas encore prêt.", - "wait_for_hs_yup": "Prêt !", "give_this_url": "Donnez cette URL à la personne qui doit recevoir le fichier :", "ctrlc_to_stop": "Ctrl-C arrête le serveur", "not_a_file": "{0:s} n'est pas un fichier.", - "download_page_loaded": "Page de téléchargement chargée", "other_page_loaded": "URL chargée", "closing_automatically": "Fermeture automatique car le téléchargement est fini", - "error_tails_invalid_port": "Valeur invalide, le port doit être un nombre entier", - "error_tails_unknown_root": "Erreur inconnue avec un processus root sur Tails", "systray_menu_exit": "Quitter", "systray_download_started_title": "Téléchargement OnionShare Démarré", "systray_download_started_message": "Un utilisateur télécharge vos fichiers", "systray_download_completed_title": "Téléchargement OnionShare Complete", "systray_download_canceled_title": "Téléchargement OnionShare Annulé", "systray_download_canceled_message": "L'utilisateur a annulé le téléchargement", - "help_tails_port": "Seulement sur Tails: port pour ouvrir le firewall, démarrage du onion service", "help_local_only": "Ne tentez pas d'utiliser Tor, uniquement pour développement", "help_stay_open": "Laisser tourner le onion service après que le téléchargment soit fini", "help_debug": "Enregistrer les erreurs sur le disque", diff --git a/share/locale/it.json b/share/locale/it.json index 7ad38169..304e0cb9 100644 --- a/share/locale/it.json +++ b/share/locale/it.json @@ -1,25 +1,14 @@ { - "connecting_ctrlport": "Connessione alla porta di controllo di Tor per inizializzare il servizio nascosto sulla porta {0:d}.", - "cant_connect_ctrlport": "Impossibile connettere alla porta di controllo di Tor sulla porta {0:s}. OnionShare richiede l'esecuzione in background di Tor Browser per funzionare. Se non è installato puoi scaricarlo da https://www.torproject.org/.", - "cant_connect_socksport": "Impossibile connettersi al server Tor SOCKS5 sulla porta {0:s}. OnionShare richiede l'esecuzione in background di Tor Browser per funzionare. Se non è installato puoi scaricarlo da https://www.torproject.org/.", "preparing_files": "Preparazione dei files da condividere.", "wait_for_hs": "In attesa che l'HS sia pronto:", - "wait_for_hs_trying": "Tentativo...", - "wait_for_hs_nope": "Non è ancora pronto.", - "wait_for_hs_yup": "Pronto!", "give_this_url": "Dai questo URL alla persona a cui vuoi inviare il file:", "ctrlc_to_stop": "Premi Ctrl-C per fermare il server", "not_a_file": "{0:s} non è un file.", - "download_page_loaded": "Pagina di Download caricata", "other_page_loaded": "URL caricato", "closing_automatically": "Chiusura automatica dopo aver finito il download", "large_filesize": "Attenzione: Inviare file di grandi dimensioni può richiedere ore", - "error_tails_invalid_port": "Valore non valido, la porta deve essere un numero intero", - "error_tails_unknown_root": "Errore sconosciuto con il processo Tails root", - "help_tails_port": "Solo per Tails: porta per passare il firewall, avvio del servizio nascosto", "help_local_only": "Non usare tor: è solo per lo sviluppo", "help_stay_open": "Mantieni il servizio nascosto avviato anche dopo aver finito il download", - "help_transparent_torification": "Il mio sistema usa tor in modo trasparente", "help_debug": "Registra gli errori sul disco", "help_filename": "Lista dei file o cartelle da condividere", "gui_drag_and_drop": "Prendi e rilascia\ni file qui sopra", @@ -32,12 +21,7 @@ "gui_downloads": "Downloads:", "gui_canceled": "Cancellati", "gui_copied_url": "URL Copiato nella clipboard", - "gui_starting_server1": "Avviamento del servizio nascosto Tor...", - "gui_starting_server2": "Elaborazione files...", - "gui_starting_server3": "In attesa del servizio nascosto Tor...", "gui_please_wait": "Attendere prego...", - "error_hs_dir_cannot_create": "Impossibile create la cartella per il servizio nascosto {0:s}", - "error_hs_dir_not_writable": "La cartella per il servizio nascosto {0:s} non ha i permessi di scrittura", "using_ephemeral": "Avviamento del servizio nascosto Tor ephemeral e attesa della pubblicazione", "zip_progress_bar_format": "Elaborazione files: %p%" } diff --git a/share/locale/nl.json b/share/locale/nl.json index 4031effd..67297ae0 100644 --- a/share/locale/nl.json +++ b/share/locale/nl.json @@ -2,23 +2,17 @@ "config_onion_service": "Onion service configureren op poort {0:d}.", "preparing_files": "Bestanden om te delen aan het voorbereiden.", "wait_for_hs": "Wachten op gereed zijn van HS:", - "wait_for_hs_trying": "Proberen...", - "wait_for_hs_nope": "Nog niet gereed.", - "wait_for_hs_yup": "Gereed!", "give_this_url": "Geef deze URL aan de persoon aan wie je dit bestand verzend:", "give_this_url_stealth": "Geef deze URL en de HidServAuth regel aan de persoon aan wie je dit bestand verzend:", "ctrlc_to_stop": "Druk Ctrl-C om de server te stoppen", "not_a_file": "{0:s} is geen bestand.", "not_a_readable_file": "{0:s} is geen leesbaar bestand.", "no_available_port": "Kan de Onion service niet starten, er zijn geen poorten beschikbaar.", - "download_page_loaded": "Downloadpagina geladen", "other_page_loaded": "URL geladen", "close_on_timeout": "Sluit automatisch omdat timeout bereikt is", "closing_automatically": "Sluit automatisch omdat download gereed is", "timeout_download_still_running": "Wachten totdat download gereed is voor automatisch sluiten", "large_filesize": "Waarschuwing: Versturen van grote bestanden kan uren duren", - "error_tails_invalid_port": "Ongeldige waarde, poort moet een integer zijn", - "error_tails_unknown_root": "Onbekende fout met het Tails root proces", "systray_menu_exit": "Afsluiten", "systray_download_started_title": "OnionShare download gestart", "systray_download_started_message": "Een gebruiker is begonnen met downloaden van je bestanden", @@ -29,7 +23,6 @@ "help_local_only": "Maak geen gebruik van Tor, alleen voor ontwikkeling", "help_stay_open": "Laat verborgen service draaien nadat download gereed is", "help_shutdown_timeout": "Sluit de Onion service na N seconden", - "help_transparent_torification": "Mijn systeem gebruikt Tor als proxyserver", "help_stealth": "Maak stealth Onion service (geavanceerd)", "help_debug": "Log fouten naar harde schijf", "help_filename": "Lijst van bestanden of mappen om te delen", @@ -44,11 +37,7 @@ "gui_canceled": "Afgebroken", "gui_copied_url": "URL gekopieerd naar klembord", "gui_copied_hidservauth": "HidServAuth regel gekopieerd naar klembord", - "gui_starting_server1": "Tor onion service wordt gestart...", - "gui_starting_server2": "Bestanden verwerken...", "gui_please_wait": "Moment geduld...", - "error_hs_dir_cannot_create": "Kan verborgen service map {0:s} niet aanmaken", - "error_hs_dir_not_writable": "Verborgen service map {0:s} is niet schrijfbaar", "using_ephemeral": "Kortstondige Tor onion service gestart en in afwachting van publicatie", "gui_download_upload_progress_complete": "%p%, Tijd verstreken: {0:s}", "gui_download_upload_progress_starting": "{0:s}, %p% (ETA berekenen)", @@ -84,13 +73,10 @@ "gui_settings_authenticate_label": "Tor authenticatie opties", "gui_settings_authenticate_no_auth_option": "Geen authenticatie of cookie authenticatie", "gui_settings_authenticate_password_option": "Wachtwoord", - "gui_settings_authenticate_cookie_option": "Cookie", "gui_settings_password_label": "Wachtwoord", - "gui_settings_cookie_label": "Cookie pad", "gui_settings_button_save": "Opslaan", "gui_settings_button_cancel": "Annuleren", "gui_settings_button_help": "Help", - "gui_settings_shutdown_timeout_choice": "Auto-stop timer instellen?", "gui_settings_shutdown_timeout": "Stop delen om:", "settings_saved": "Instellingen opgeslagen in {}", "settings_error_unknown": "Kan geen verbinding maken met de Tor controller omdat de instellingen niet kloppen.", @@ -102,7 +88,6 @@ "settings_error_unreadable_cookie_file": "Verbonden met Tor controller, maar kan niet authenticeren omdat wachtwoord onjuist is en gebruiker heeft niet de permissies om cookie bestand te lezen.", "settings_error_bundled_tor_not_supported": "Meegeleverde Tor is niet onersteunt wanneer je niet de ontwikkelaarsmodus gebruikt in Windows or macOS.", "settings_error_bundled_tor_timeout": "Verbinden met Tor duurt te lang. Misschien is je computer offline, of je klok is niet accuraat.", - "settings_error_bundled_tor_canceled": "Het Tor is afgesloten voordat het kon verbinden.", "settings_error_bundled_tor_broken": "OnionShare kan niet verbinden met Tor op de achtergrond:\n{}", "settings_test_success": "Gefeliciteerd, OnionShare kan verbinden met de Tor controller.\n\nTor version: {}\nOndersteunt kortstondige onion services: {}\nOndersteunt geheime onion services: {}", "error_tor_protocol_error": "Fout bij praten met de Tor controller.\nAls je Whonix gebruikt, kijk dan hier https://www.whonix.org/wiki/onionshare om OnionShare werkend te krijgen.", diff --git a/share/locale/no.json b/share/locale/no.json index 8b131038..a04710d2 100644 --- a/share/locale/no.json +++ b/share/locale/no.json @@ -1,10 +1,7 @@ { - "connecting_ctrlport": "Kobler til Tors kontroll-port for å sette opp en gjemt tjeneste på port {0:d}.", - "cant_connect_ctrlport": "Klarte ikke å koble til Tors kontroll-porter {0:s}. Sjekk at Tor kjører.", "give_this_url": "Gi personen du vil sende filen til denne URL-en:", "ctrlc_to_stop": "Trykk Ctrl+C for å stoppe serveren.", "not_a_file": "{0:s} er ikke en fil.", "gui_copied_url": "Kopierte URL-en til utklippstavlen", - "download_page_loaded": "Nedlastingsside lastet", "other_page_loaded": "En annen side har blitt lastet" } diff --git a/share/locale/pt.json b/share/locale/pt.json index 71391957..1b2d3139 100644 --- a/share/locale/pt.json +++ b/share/locale/pt.json @@ -1,10 +1,7 @@ { - "connecting_ctrlport": "Conectando-se à porta de controle Tor para configurar serviço escondido na porta {0:d}.", - "cant_connect_ctrlport": "Não pode conectar à porta de controle Tor na porta {0:s}. O Tor está rodando?", "give_this_url": "Passe este URL para a pessoa que deve receber o arquivo:", "ctrlc_to_stop": "Pressione Ctrl-C para parar o servidor", "not_a_file": "{0:s} não é um arquivo.", "gui_copied_url": "URL foi copiado para área de transferência", - "download_page_loaded": "Página de download carregada", "other_page_loaded": "Outra página tem sido carregada" } diff --git a/share/locale/ru.json b/share/locale/ru.json index 193c158d..b7c89d69 100644 --- a/share/locale/ru.json +++ b/share/locale/ru.json @@ -1,11 +1,8 @@ { - "connecting_ctrlport": "Соединяемся с контрольным портом Tor для создания скрытого сервиса на порту {0:d}.", - "cant_connect_ctrlport": "Невозможно соединиться с контрольным портом Tor на порту {0:s}. Tor запущен?", "give_this_url": "Отправьте эту ссылку тому человеку, которому вы хотите передать файл:", "ctrlc_to_stop": "Нажмите Ctrl-C чтобы остановить сервер", "not_a_file": "{0:s} не является файлом.", "gui_copied_url": "Ссылка скопирована в буфер обмена", - "download_page_loaded": "Страница закачки загружена", "other_page_loaded": "Другая страница была загружена", "gui_copy_url": "Скопировать ссылку" } diff --git a/share/locale/tr.json b/share/locale/tr.json index d8097909..7b531bd6 100644 --- a/share/locale/tr.json +++ b/share/locale/tr.json @@ -1,25 +1,14 @@ { - "connecting_ctrlport": "{0:d} portundaki gizli hizmet(GH) kurulumu için Tor kontrol portuna bağlanıyor.", - "cant_connect_ctrlport": "Tor kontrol {0:s} portuna bağlanamıyor. OnionShare çalışması için arkaplanda Tor Browser çalışması gerekiyor. Tor Browser indirmediyseniz, https://www.torproject.org/", - "cant_connect_socksport": "Tor SOCKS5 sunucu {0:s} portuna bağlanamıyor. OnionShare çalışması için arkaplanda Tor Browser çalışması gerekiyor. Tor Browser indirmediyseniz, https://www.torproject.org/", "preparing_files": "Paylaşmak için dosyalar hazırlanıyor.", "wait_for_hs": "GH hazır olması bekleniyor:", - "wait_for_hs_trying": "Deneniyor...", - "wait_for_hs_nope": "Henüz hazır değil.", - "wait_for_hs_yup": "Hazır!", "give_this_url": "Dosyayı gönderdiğin kişiye bu URL'i verin:", "ctrlc_to_stop": "Sunucuyu durdurmak için, Ctrl-C basın", "not_a_file": "{0:s} dosya değil.", - "download_page_loaded": "İndirme sayfası yüklendi", "other_page_loaded": "Diğer sayfa yüklendi", "closing_automatically": "İndirme işlemi tamamlandığı için kendiliğinden durduruluyor", "large_filesize": "Uyarı: Büyük dosyaların gönderimi saatler sürebilir", - "error_tails_invalid_port": "Geçersiz değer, port sayı olmalıdır", - "error_tails_unknown_root": "Tails ana işlemi ile ilgili bilinmeyen hata", - "help_tails_port": "Sadece Tails: port for opening firewall, starting onion service", "help_local_only": "Tor kullanmaya kalkışmayın: sadece geliştirme için", "help_stay_open": "İndirme tamamlandıktan sonra gizli hizmeti çalıştırmaya devam et", - "help_transparent_torification": "Sistemim apaçık torlu", "help_debug": "Hata kayıtlarını diske kaydet", "help_filename": "Paylaşmak için dosya ve klasörler listesi", "gui_drag_and_drop": "Dosyaları buraya\n Sürükle ve Bırak", @@ -32,12 +21,7 @@ "gui_downloads": "İndirilenler:", "gui_canceled": "İptal edilen", "gui_copied_url": "Panoya kopyalanan URL", - "gui_starting_server1": "Tor gizli hizmeti başlatılıyor...", - "gui_starting_server2": "Dosyalar hazırlanıyor...", - "gui_starting_server3": "Tor gizli hizmeti bekleniyor...", "gui_please_wait": "Lütfen bekleyin...", - "error_hs_dir_cannot_create": "Gizli hizmet klasörü {0:s} oluşturulamıyor", - "error_hs_dir_not_writable": "Gizle hizmet klasörü {0:s} yazılabilir değil", "using_ephemeral": "Geçici Tor gizli hizmetine bakılıyor ve yayımı bekleniyor", "zip_progress_bar_format": "Dosyalar hazırlanıyor: %p%" } From 0c50f4ea9393c639e687b2c92c30031eb095d20a Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Wed, 15 Aug 2018 09:09:52 +1000 Subject: [PATCH 30/38] Add explicit dependency on rpm-build in the BUILD.md. Add a link to community-provided OpenSuSE instructions --- BUILD.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/BUILD.md b/BUILD.md index 77d5ee0e..4b87b98f 100644 --- a/BUILD.md +++ b/BUILD.md @@ -13,7 +13,7 @@ Install the needed dependencies: For Debian-like distros: `apt install -y build-essential fakeroot python3-all python3-stdeb dh-python python3-flask python3-stem python3-pyqt5 python-nautilus python3-pytest tor obfs4proxy` -For Fedora-like distros: `dnf install -y rpm-build python3-flask python3-stem python3-qt5 python3-pytest nautilus-python tor obfs4` +For Fedora-like distros: `dnf install -y rpm-build python3-flask python3-stem python3-qt5 python3-pytest nautilus-python tor obfs4 rpm-build` After that you can try both the CLI and the GUI version of OnionShare: @@ -28,6 +28,8 @@ Create a .deb on Debian-like distros: `./install/build_deb.sh` Create a .rpm on Fedora-like distros: `./install/build_rpm.sh` +For OpenSuSE: There are instructions for building [in the wiki](https://github.com/micahflee/onionshare/wiki/Linux-Distribution-Support#opensuse-leap-150). + For ArchLinux: There is a PKBUILD available [here](https://aur.archlinux.org/packages/onionshare/) that can be used to install OnionShare. If you find that these instructions don't work for your Linux distribution or version, consult the [Linux Distribution Support wiki guide](https://github.com/micahflee/onionshare/wiki/Linux-Distribution-Support), which might contain extra instructions. From fee1a1eba23c2244f2663552aef0c1515c507151 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Thu, 30 Aug 2018 15:18:29 +1000 Subject: [PATCH 31/38] Fix the passing of the latest version returned to the UI if it is an invalid version --- onionshare_gui/settings_dialog.py | 4 ++-- onionshare_gui/update_checker.py | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index e9d3ed8f..ab0b0b4d 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -658,8 +658,8 @@ class SettingsDialog(QtWidgets.QDialog): Alert(self.common, strings._('update_error_check_error', True), QtWidgets.QMessageBox.Warning) close_forced_update_thread() - def update_invalid_version(): - Alert(self.common, strings._('update_error_invalid_latest_version', True).format(e.latest_version), QtWidgets.QMessageBox.Warning) + def update_invalid_version(latest_version): + Alert(self.common, strings._('update_error_invalid_latest_version', True).format(latest_version), QtWidgets.QMessageBox.Warning) close_forced_update_thread() forced_update_thread = UpdateThread(self.common, self.onion, self.config, force=True) diff --git a/onionshare_gui/update_checker.py b/onionshare_gui/update_checker.py index 9c4ee82e..1fd52505 100644 --- a/onionshare_gui/update_checker.py +++ b/onionshare_gui/update_checker.py @@ -53,7 +53,7 @@ class UpdateChecker(QtCore.QObject): update_available = QtCore.pyqtSignal(str, str, str) update_not_available = QtCore.pyqtSignal() update_error = QtCore.pyqtSignal() - update_invalid_version = QtCore.pyqtSignal() + update_invalid_version = QtCore.pyqtSignal(str) def __init__(self, common, onion, config=False): super(UpdateChecker, self).__init__() @@ -136,7 +136,7 @@ class UpdateChecker(QtCore.QObject): # This regex is: 1-3 dot-separated numeric components version_re = r"^(\d+\.)?(\d+\.)?(\d+)$" if not re.match(version_re, latest_version): - self.update_invalid_version.emit() + self.update_invalid_version.emit(latest_version) raise UpdateCheckerInvalidLatestVersion(latest_version) # Update the last checked timestamp (dropping the seconds and milliseconds) @@ -160,7 +160,7 @@ class UpdateThread(QtCore.QThread): update_available = QtCore.pyqtSignal(str, str, str) update_not_available = QtCore.pyqtSignal() update_error = QtCore.pyqtSignal() - update_invalid_version = QtCore.pyqtSignal() + update_invalid_version = QtCore.pyqtSignal(str) def __init__(self, common, onion, config=False, force=False): super(UpdateThread, self).__init__() @@ -203,7 +203,7 @@ class UpdateThread(QtCore.QThread): self.active = False self.update_error.emit() - def _update_invalid_version(self): + def _update_invalid_version(self, latest_version): self.common.log('UpdateThread', '_update_invalid_version') self.active = False - self.update_invalid_version.emit() + self.update_invalid_version.emit(latest_version) From b53469fc7d64de4a1022e3a5bd810d7a93a92d10 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sat, 1 Sep 2018 09:20:50 +1000 Subject: [PATCH 32/38] Truncate the length of the uploaded file name if it is longer than the width of the Upload window --- onionshare_gui/receive_mode/uploads.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/onionshare_gui/receive_mode/uploads.py b/onionshare_gui/receive_mode/uploads.py index 203a9804..09834156 100644 --- a/onionshare_gui/receive_mode/uploads.py +++ b/onionshare_gui/receive_mode/uploads.py @@ -38,6 +38,7 @@ class File(QtWidgets.QWidget): # Filename label self.filename_label = QtWidgets.QLabel(self.filename) + self.filename_label_width = self.filename_label.width() # File size label self.filesize_label = QtWidgets.QLabel() @@ -214,6 +215,8 @@ class Uploads(QtWidgets.QScrollArea): self.common = common self.common.log('Uploads', '__init__') + self.resizeEvent = None + self.uploads = {} self.setWindowTitle(strings._('gui_uploads', True)) @@ -292,3 +295,16 @@ class Uploads(QtWidgets.QScrollArea): self.no_uploads_label.show() self.resize(self.sizeHint()) + + def resizeEvent(self, event): + width = self.frameGeometry().width() + try: + for upload in self.uploads.values(): + for item in upload.files.values(): + if item.filename_label_width > width: + item.filename_label.setText(item.filename[:25] + '[...]') + item.adjustSize() + if width > item.filename_label_width: + item.filename_label.setText(item.filename) + except: + pass From 1e29a12221469e011e1410d626b5ffa439d1168a Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Tue, 4 Sep 2018 14:26:47 +1000 Subject: [PATCH 33/38] Use the distribution's PySocks module instead of our custom version --- BUILD.md | 4 +- onionshare/onion.py | 1 - onionshare/socks.py | 530 ------------------------------- onionshare_gui/update_checker.py | 2 +- 4 files changed, 3 insertions(+), 534 deletions(-) delete mode 100644 onionshare/socks.py diff --git a/BUILD.md b/BUILD.md index 77d5ee0e..f079806b 100644 --- a/BUILD.md +++ b/BUILD.md @@ -11,9 +11,9 @@ cd onionshare Install the needed dependencies: -For Debian-like distros: `apt install -y build-essential fakeroot python3-all python3-stdeb dh-python python3-flask python3-stem python3-pyqt5 python-nautilus python3-pytest tor obfs4proxy` +For Debian-like distros: `apt install -y build-essential fakeroot python3-all python3-stdeb dh-python python3-socks python3-flask python3-stem python3-pyqt5 python-nautilus python3-pytest tor obfs4proxy` -For Fedora-like distros: `dnf install -y rpm-build python3-flask python3-stem python3-qt5 python3-pytest nautilus-python tor obfs4` +For Fedora-like distros: `dnf install -y rpm-build python3-flask python3-pysocks python3-stem python3-qt5 python3-pytest nautilus-python tor obfs4` After that you can try both the CLI and the GUI version of OnionShare: diff --git a/onionshare/onion.py b/onionshare/onion.py index 461af6a2..7cdd68ab 100644 --- a/onionshare/onion.py +++ b/onionshare/onion.py @@ -23,7 +23,6 @@ from stem import ProtocolError, SocketClosed from stem.connection import MissingPassword, UnreadableCookieFile, AuthenticationFailure import os, sys, tempfile, shutil, urllib, platform, subprocess, time, shlex -from . import socks from . import common, strings from .settings import Settings diff --git a/onionshare/socks.py b/onionshare/socks.py deleted file mode 100644 index 809a4444..00000000 --- a/onionshare/socks.py +++ /dev/null @@ -1,530 +0,0 @@ -""" -SocksiPy - Python SOCKS module. -Version 1.5.0 - -Copyright 2006 Dan-Haim. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -3. Neither the name of Dan Haim nor the names of his contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY DAN HAIM "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL DAN HAIM OR HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA -OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -This module provides a standard socket-like interface for Python -for tunneling connections through SOCKS proxies. - -=============================================================================== - -Minor modifications made by Christopher Gilbert (http://motomastyle.com/) -for use in PyLoris (http://pyloris.sourceforge.net/) - -Minor modifications made by Mario Vilas (http://breakingcode.wordpress.com/) -mainly to merge bug fixes found in Sourceforge - -Modifications made by Anorov (https://github.com/Anorov) --Forked and renamed to PySocks --Fixed issue with HTTP proxy failure checking (same bug that was in the old ___recvall() method) --Included SocksiPyHandler (sockshandler.py), to be used as a urllib2 handler, - courtesy of e000 (https://github.com/e000): https://gist.github.com/869791#file_socksipyhandler.py --Re-styled code to make it readable - -Aliased PROXY_TYPE_SOCKS5 -> SOCKS5 etc. - -Improved exception handling and output - -Removed irritating use of sequence indexes, replaced with tuple unpacked variables - -Fixed up Python 3 bytestring handling - chr(0x03).encode() -> b"\x03" - -Other general fixes --Added clarification that the HTTP proxy connection method only supports CONNECT-style tunneling HTTP proxies --Various small bug fixes -""" - -__version__ = "1.5.0" - -import socket -import struct - -PROXY_TYPE_SOCKS4 = SOCKS4 = 1 -PROXY_TYPE_SOCKS5 = SOCKS5 = 2 -PROXY_TYPE_HTTP = HTTP = 3 - -PRINTABLE_PROXY_TYPES = {SOCKS4: "SOCKS4", SOCKS5: "SOCKS5", HTTP: "HTTP"} - -_orgsocket = _orig_socket = socket.socket - - -class ProxyError(IOError): - """ - socket_err contains original socket.error exception. - """ - def __init__(self, msg, socket_err=None): - self.msg = msg - self.socket_err = socket_err - - if socket_err: - self.msg = msg + ": {}".format(socket_err) - - def __str__(self): - return self.msg - - -class GeneralProxyError(ProxyError): - pass - - -class ProxyConnectionError(ProxyError): - pass - - -class SOCKS5AuthError(ProxyError): - pass - - -class SOCKS5Error(ProxyError): - pass - - -class SOCKS4Error(ProxyError): - pass - - -class HTTPError(ProxyError): - pass - - -SOCKS4_ERRORS = { - 0x5B: "Request rejected or failed", - 0x5C: "Request rejected because SOCKS server cannot connect to identd on the client", - 0x5D: "Request rejected because the client program and identd report different user-ids", -} - -SOCKS5_ERRORS = { - 0x01: "General SOCKS server failure", - 0x02: "Connection not allowed by ruleset", - 0x03: "Network unreachable", - 0x04: "Host unreachable", - 0x05: "Connection refused", - 0x06: "TTL expired", - 0x07: "Command not supported, or protocol error", - 0x08: "Address type not supported", -} - -DEFAULT_PORTS = { - SOCKS4: 1080, - SOCKS5: 1080, - HTTP: 8080, -} - - -def set_default_proxy(proxy_type=None, addr=None, port=None, rdns=True, username=None, password=None): - """ - set_default_proxy(proxy_type, addr[, port[, rdns[, username, password]]]) - - Sets a default proxy which all further socksocket objects will use, - unless explicitly changed. - """ - socksocket.default_proxy = (proxy_type, addr.encode(), port, rdns, - username.encode() if username else None, - password.encode() if password else None) - -setdefaultproxy = set_default_proxy - - -def get_default_proxy(): - """ - Returns the default proxy, set by set_default_proxy. - """ - return socksocket.default_proxy - -getdefaultproxy = get_default_proxy - - -def wrap_module(module): - """ - Attempts to replace a module's socket library with a SOCKS socket. Must set - a default proxy using set_default_proxy(...) first. - This will only work on modules that import socket directly into the namespace; - most of the Python Standard Library falls into this category. - """ - if socksocket.default_proxy: - module.socket.socket = socksocket - else: - raise GeneralProxyError("No default proxy specified") - -wrapmodule = wrap_module - - -def create_connection(dest_pair, proxy_type=None, proxy_addr=None, - proxy_port=None, proxy_username=None, - proxy_password=None, timeout=None): - """create_connection(dest_pair, **proxy_args) -> socket object - - Like socket.create_connection(), but connects to proxy - before returning the socket object. - - dest_pair - 2-tuple of (IP/hostname, port). - **proxy_args - Same args passed to socksocket.set_proxy(). - timeout - Optional socket timeout value, in seconds. - """ - sock = socksocket() - if isinstance(timeout, (int, float)): - sock.settimeout(timeout) - sock.set_proxy(proxy_type, proxy_addr, proxy_port, - proxy_username, proxy_password) - sock.connect(dest_pair) - return sock - - -class socksocket(socket.socket): - """socksocket([family[, type[, proto]]]) -> socket object - - Open a SOCKS enabled socket. The parameters are the same as - those of the standard socket init. In order for SOCKS to work, - you must specify family=AF_INET, type=SOCK_STREAM and proto=0. - """ - - default_proxy = None - - def __init__(self, family=socket.AF_INET, type=socket.SOCK_STREAM, proto=0, _sock=None): - _orig_socket.__init__(self, family, type, proto, _sock) - - if self.default_proxy: - self.proxy = self.default_proxy - else: - self.proxy = (None, None, None, None, None, None) - self.proxy_sockname = None - self.proxy_peername = None - - self.proxy_negotiators = { - SOCKS4: self._negotiate_SOCKS4, - SOCKS5: self._negotiate_SOCKS5, - HTTP: self._negotiate_HTTP, - } - - def _recvall(self, count): - """ - Receive EXACTLY the number of bytes requested from the socket. - Blocks until the required number of bytes have been received. - """ - data = b"" - while len(data) < count: - d = self.recv(count - len(data)) - if not d: - raise GeneralProxyError("Connection closed unexpectedly") - data += d - return data - - def set_proxy(self, proxy_type=None, addr=None, port=None, rdns=True, username=None, password=None): - """set_proxy(proxy_type, addr[, port[, rdns[, username[, password]]]]) - Sets the proxy to be used. - - proxy_type - The type of the proxy to be used. Three types - are supported: PROXY_TYPE_SOCKS4 (including socks4a), - PROXY_TYPE_SOCKS5 and PROXY_TYPE_HTTP - addr - The address of the server (IP or DNS). - port - The port of the server. Defaults to 1080 for SOCKS - servers and 8080 for HTTP proxy servers. - rdns - Should DNS queries be performed on the remote side - (rather than the local side). The default is True. - Note: This has no effect with SOCKS4 servers. - username - Username to authenticate with to the server. - The default is no authentication. - password - Password to authenticate with to the server. - Only relevant when username is also provided. - """ - self.proxy = (proxy_type, addr.encode(), port, rdns, - username.encode() if username else None, - password.encode() if password else None) - - setproxy = set_proxy - - def get_proxy_sockname(self): - """ - Returns the bound IP address and port number at the proxy. - """ - return self.proxy_sockname - - getproxysockname = get_proxy_sockname - - def get_proxy_peername(self): - """ - Returns the IP and port number of the proxy. - """ - return _orig_socket.getpeername(self) - - getproxypeername = get_proxy_peername - - def get_peername(self): - """ - Returns the IP address and port number of the destination - machine (note: get_proxy_peername returns the proxy) - """ - return self.proxy_peername - - getpeername = get_peername - - def _negotiate_SOCKS5(self, dest_addr, dest_port): - """ - Negotiates a connection through a SOCKS5 server. - """ - proxy_type, addr, port, rdns, username, password = self.proxy - - # First we'll send the authentication packages we support. - if username and password: - # The username/password details were supplied to the - # set_proxy method so we support the USERNAME/PASSWORD - # authentication (in addition to the standard none). - self.sendall(b"\x05\x02\x00\x02") - else: - # No username/password were entered, therefore we - # only support connections with no authentication. - self.sendall(b"\x05\x01\x00") - - # We'll receive the server's response to determine which - # method was selected - chosen_auth = self._recvall(2) - - if chosen_auth[0:1] != b"\x05": - # Note: string[i:i+1] is used because indexing of a bytestring - # via bytestring[i] yields an integer in Python 3 - raise GeneralProxyError("SOCKS5 proxy server sent invalid data") - - # Check the chosen authentication method - - if chosen_auth[1:2] == b"\x02": - # Okay, we need to perform a basic username/password - # authentication. - self.sendall(b"\x01" + chr(len(username)).encode() - + username - + chr(len(password)).encode() - + password) - auth_status = self._recvall(2) - if auth_status[0:1] != b"\x01": - # Bad response - raise GeneralProxyError("SOCKS5 proxy server sent invalid data") - if auth_status[1:2] != b"\x00": - # Authentication failed - raise SOCKS5AuthError("SOCKS5 authentication failed") - - # Otherwise, authentication succeeded - - # No authentication is required if 0x00 - elif chosen_auth[1:2] != b"\x00": - # Reaching here is always bad - if chosen_auth[1:2] == b"\xFF": - raise SOCKS5AuthError("All offered SOCKS5 authentication methods were rejected") - else: - raise GeneralProxyError("SOCKS5 proxy server sent invalid data") - - # Now we can request the actual connection - req = b"\x05\x01\x00" - # If the given destination address is an IP address, we'll - # use the IPv4 address request even if remote resolving was specified. - try: - addr_bytes = socket.inet_aton(dest_addr) - req += b"\x01" + addr_bytes - except socket.error: - # Well it's not an IP number, so it's probably a DNS name. - if rdns: - # Resolve remotely - addr_bytes = None - req += b"\x03" + chr(len(dest_addr)).encode() + dest_addr.encode() - else: - # Resolve locally - addr_bytes = socket.inet_aton(socket.gethostbyname(dest_addr)) - req += b"\x01" + addr_bytes - - req += struct.pack(">H", dest_port) - self.sendall(req) - - # Get the response - resp = self._recvall(4) - if resp[0:1] != b"\x05": - raise GeneralProxyError("SOCKS5 proxy server sent invalid data") - - status = ord(resp[1:2]) - if status != 0x00: - # Connection failed: server returned an error - error = SOCKS5_ERRORS.get(status, "Unknown error") - raise SOCKS5Error("{:#04x}: {}".format(status, error)) - - # Get the bound address/port - if resp[3:4] == b"\x01": - bound_addr = self._recvall(4) - elif resp[3:4] == b"\x03": - resp += self.recv(1) - bound_addr = self._recvall(ord(resp[4:5])) - else: - raise GeneralProxyError("SOCKS5 proxy server sent invalid data") - - bound_port = struct.unpack(">H", self._recvall(2))[0] - self.proxy_sockname = bound_addr, bound_port - if addr_bytes: - self.proxy_peername = socket.inet_ntoa(addr_bytes), dest_port - else: - self.proxy_peername = dest_addr, dest_port - - def _negotiate_SOCKS4(self, dest_addr, dest_port): - """ - Negotiates a connection through a SOCKS4 server. - """ - proxy_type, addr, port, rdns, username, password = self.proxy - - # Check if the destination address provided is an IP address - remote_resolve = False - try: - addr_bytes = socket.inet_aton(dest_addr) - except socket.error: - # It's a DNS name. Check where it should be resolved. - if rdns: - addr_bytes = b"\x00\x00\x00\x01" - remote_resolve = True - else: - addr_bytes = socket.inet_aton(socket.gethostbyname(dest_addr)) - - # Construct the request packet - req = struct.pack(">BBH", 0x04, 0x01, dest_port) + addr_bytes - - # The username parameter is considered userid for SOCKS4 - if username: - req += username - req += b"\x00" - - # DNS name if remote resolving is required - # NOTE: This is actually an extension to the SOCKS4 protocol - # called SOCKS4A and may not be supported in all cases. - if remote_resolve: - req += dest_addr.encode() + b"\x00" - self.sendall(req) - - # Get the response from the server - resp = self._recvall(8) - if resp[0:1] != b"\x00": - # Bad data - raise GeneralProxyError("SOCKS4 proxy server sent invalid data") - - status = ord(resp[1:2]) - if status != 0x5A: - # Connection failed: server returned an error - error = SOCKS4_ERRORS.get(status, "Unknown error") - raise SOCKS4Error("{:#04x}: {}".format(status, error)) - - # Get the bound address/port - self.proxy_sockname = (socket.inet_ntoa(resp[4:]), struct.unpack(">H", resp[2:4])[0]) - if remote_resolve: - self.proxy_peername = socket.inet_ntoa(addr_bytes), dest_port - else: - self.proxy_peername = dest_addr, dest_port - - def _negotiate_HTTP(self, dest_addr, dest_port): - """ - Negotiates a connection through an HTTP server. - NOTE: This currently only supports HTTP CONNECT-style proxies. - """ - proxy_type, addr, port, rdns, username, password = self.proxy - - # If we need to resolve locally, we do this now - addr = dest_addr if rdns else socket.gethostbyname(dest_addr) - - self.sendall(b"CONNECT " + addr.encode() + b":" + str(dest_port).encode() + - b" HTTP/1.1\r\n" + b"Host: " + dest_addr.encode() + b"\r\n\r\n") - - # We just need the first line to check if the connection was successful - fobj = self.makefile() - status_line = fobj.readline() - fobj.close() - - if not status_line: - raise GeneralProxyError("Connection closed unexpectedly") - - try: - proto, status_code, status_msg = status_line.split(" ", 2) - except ValueError: - raise GeneralProxyError("HTTP proxy server sent invalid response") - - if not proto.startswith("HTTP/"): - raise GeneralProxyError("Proxy server does not appear to be an HTTP proxy") - - try: - status_code = int(status_code) - except ValueError: - raise HTTPError("HTTP proxy server did not return a valid HTTP status") - - if status_code != 200: - error = "{}: {}".format(status_code, status_msg) - if status_code in (400, 403, 405): - # It's likely that the HTTP proxy server does not support the CONNECT tunneling method - error += ("\n[*] Note: The HTTP proxy server may not be supported by PySocks" - " (must be a CONNECT tunnel proxy)") - raise HTTPError(error) - - self.proxy_sockname = (b"0.0.0.0", 0) - self.proxy_peername = addr, dest_port - - def connect(self, dest_pair): - """ - Connects to the specified destination through a proxy. - Uses the same API as socket's connect(). - To select the proxy server, use set_proxy(). - - dest_pair - 2-tuple of (IP/hostname, port). - """ - proxy_type, proxy_addr, proxy_port, rdns, username, password = self.proxy - dest_addr, dest_port = dest_pair - - # Do a minimal input check first - if (not isinstance(dest_pair, (list, tuple)) - or len(dest_pair) != 2 - or not isinstance(dest_addr, type("")) - or not isinstance(dest_port, int)): - raise GeneralProxyError("Invalid destination-connection (host, port) pair") - - if proxy_type is None: - # Treat like regular socket object - _orig_socket.connect(self, (dest_addr, dest_port)) - return - - proxy_port = proxy_port or DEFAULT_PORTS.get(proxy_type) - if not proxy_port: - raise GeneralProxyError("Invalid proxy type") - - try: - # Initial connection to proxy server - _orig_socket.connect(self, (proxy_addr, proxy_port)) - - except socket.error as error: - # Error while connecting to proxy - self.close() - proxy_server = "{}:{}".format(proxy_addr.decode(), proxy_port) - printable_type = PRINTABLE_PROXY_TYPES[proxy_type] - - msg = "Error connecting to {} proxy {}".format(printable_type, - proxy_server) - raise ProxyConnectionError(msg, error) - - else: - # Connected to proxy server, now negotiate - try: - # Calls negotiate_{SOCKS4, SOCKS5, HTTP} - self.proxy_negotiators[proxy_type](dest_addr, dest_port) - except socket.error as error: - # Wrap socket errors - self.close() - raise GeneralProxyError("Socket error", error) - except ProxyError: - # Protocol error while negotiating with proxy - self.close() - raise diff --git a/onionshare_gui/update_checker.py b/onionshare_gui/update_checker.py index 9c4ee82e..c573b1b9 100644 --- a/onionshare_gui/update_checker.py +++ b/onionshare_gui/update_checker.py @@ -19,9 +19,9 @@ along with this program. If not, see . """ from PyQt5 import QtCore import datetime, time, socket, re, platform +import socks from distutils.version import LooseVersion as Version -from onionshare import socks from onionshare.settings import Settings from onionshare.onion import Onion From 3eace71261b11ca8b07df70799c1bcaaa26dcd6e Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Tue, 4 Sep 2018 14:49:56 +1000 Subject: [PATCH 34/38] Pass self to help_clicked function in systray, so we can use self.common --- onionshare_gui/onionshare_gui.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index a6c20e33..6dfbaf4e 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -277,7 +277,7 @@ class OnionShareGui(QtWidgets.QMainWindow): self.settingsAction = menu.addAction(strings._('gui_settings_window_title', True)) self.settingsAction.triggered.connect(self.open_settings) self.helpAction = menu.addAction(strings._('gui_settings_button_help', True)) - self.helpAction.triggered.connect(SettingsDialog.help_clicked) + self.helpAction.triggered.connect(lambda: SettingsDialog.help_clicked(self)) self.exitAction = menu.addAction(strings._('systray_menu_exit', True)) self.exitAction.triggered.connect(self.close) From 6586cf6df9632e6565b8355a47886b2eecc4f7f8 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sat, 15 Sep 2018 11:36:34 +1000 Subject: [PATCH 35/38] Don't check slug candidate in public mode --- onionshare/web.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/onionshare/web.py b/onionshare/web.py index 8044dbaf..bc06ca8c 100644 --- a/onionshare/web.py +++ b/onionshare/web.py @@ -143,7 +143,8 @@ class Web(object): """ @self.app.route("/") def index(slug_candidate): - self.check_slug_candidate(slug_candidate) + if not self.common.settings.get('public_mode'): + self.check_slug_candidate(slug_candidate) return index_logic() @self.app.route("/") @@ -186,7 +187,8 @@ class Web(object): @self.app.route("//download") def download(slug_candidate): - self.check_slug_candidate(slug_candidate) + if not self.common.settings.get('public_mode'): + self.check_slug_candidate(slug_candidate) return download_logic() @self.app.route("/download") @@ -329,7 +331,8 @@ class Web(object): @self.app.route("/") def index(slug_candidate): - self.check_slug_candidate(slug_candidate) + if not self.common.settings.get('public_mode'): + self.check_slug_candidate(slug_candidate) return index_logic() @self.app.route("/") @@ -427,7 +430,8 @@ class Web(object): @self.app.route("//upload", methods=['POST']) def upload(slug_candidate): - self.check_slug_candidate(slug_candidate) + if not self.common.settings.get('public_mode'): + self.check_slug_candidate(slug_candidate) return upload_logic(slug_candidate) @self.app.route("/upload", methods=['POST']) @@ -448,7 +452,8 @@ class Web(object): @self.app.route("//close", methods=['POST']) def close(slug_candidate): - self.check_slug_candidate(slug_candidate) + if not self.common.settings.get('public_mode'): + self.check_slug_candidate(slug_candidate) return close_logic(slug_candidate) @self.app.route("/close", methods=['POST']) From 61179a086028ad02df789079f1c500189e0617c9 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sat, 15 Sep 2018 19:05:40 -0700 Subject: [PATCH 36/38] Fix bad merge in license comment --- dev_scripts/onionshare | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev_scripts/onionshare b/dev_scripts/onionshare index 8b6989ef..29cdedcc 100755 --- a/dev_scripts/onionshare +++ b/dev_scripts/onionshare @@ -3,7 +3,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2014-2018 Micah Lee >>>>>>> develop +Copyright (C) 2014-2018 Micah Lee This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From 8769cf7c97569bf8c7f30b572344147639ab9dda Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sat, 15 Sep 2018 19:47:42 -0700 Subject: [PATCH 37/38] Check for public_mode in the check_slug_candidate function, to make 404 errors work again during public mode --- onionshare/web.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/onionshare/web.py b/onionshare/web.py index bc06ca8c..221c2c53 100644 --- a/onionshare/web.py +++ b/onionshare/web.py @@ -143,8 +143,7 @@ class Web(object): """ @self.app.route("/") def index(slug_candidate): - if not self.common.settings.get('public_mode'): - self.check_slug_candidate(slug_candidate) + self.check_slug_candidate(slug_candidate) return index_logic() @self.app.route("/") @@ -187,8 +186,7 @@ class Web(object): @self.app.route("//download") def download(slug_candidate): - if not self.common.settings.get('public_mode'): - self.check_slug_candidate(slug_candidate) + self.check_slug_candidate(slug_candidate) return download_logic() @self.app.route("/download") @@ -331,8 +329,7 @@ class Web(object): @self.app.route("/") def index(slug_candidate): - if not self.common.settings.get('public_mode'): - self.check_slug_candidate(slug_candidate) + self.check_slug_candidate(slug_candidate) return index_logic() @self.app.route("/") @@ -430,8 +427,7 @@ class Web(object): @self.app.route("//upload", methods=['POST']) def upload(slug_candidate): - if not self.common.settings.get('public_mode'): - self.check_slug_candidate(slug_candidate) + self.check_slug_candidate(slug_candidate) return upload_logic(slug_candidate) @self.app.route("/upload", methods=['POST']) @@ -452,8 +448,7 @@ class Web(object): @self.app.route("//close", methods=['POST']) def close(slug_candidate): - if not self.common.settings.get('public_mode'): - self.check_slug_candidate(slug_candidate) + self.check_slug_candidate(slug_candidate) return close_logic(slug_candidate) @self.app.route("/close", methods=['POST']) @@ -574,10 +569,14 @@ class Web(object): self.app.logger.addHandler(log_handler) def check_slug_candidate(self, slug_candidate, slug_compare=None): - if not slug_compare: - slug_compare = self.slug - if not hmac.compare_digest(slug_compare, slug_candidate): + self.common.log('Web', 'check_slug_candidate: slug_candidate={}, slug_compare={}'.format(slug_candidate, slug_compare)) + if self.common.settings.get('public_mode'): abort(404) + else: + if not slug_compare: + slug_compare = self.slug + if not hmac.compare_digest(slug_compare, slug_candidate): + abort(404) def force_shutdown(self): """ From 4bf69445a0f8d3dad83ddbdb3e6c0b7aacd74ac5 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sat, 15 Sep 2018 19:52:53 -0700 Subject: [PATCH 38/38] Make 404 error page look better, and remove the text that it's probably a typo, because in public mode that isn't necessarily true --- share/static/css/style.css | 8 ++++---- share/templates/404.html | 20 +++++++++++++------- share/templates/closed.html | 8 ++++---- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/share/static/css/style.css b/share/static/css/style.css index 7f5f4310..fd10ecdf 100644 --- a/share/static/css/style.css +++ b/share/static/css/style.css @@ -172,23 +172,23 @@ li.info { min-height: 400px; } -.closed { +.info { text-align: center; } -.closed img { +.info img { width: 120px; height: 120px; } -.closed .closed-header { +.info .info-header { font-size: 30px; font-weight: normal; color: #666666; margin: 0 0 10px 0; } -.closed .closed-description { +.info .info-description { color: #666666; margin: 0 0 20px 0; } diff --git a/share/templates/404.html b/share/templates/404.html index b704f9f2..264ca517 100644 --- a/share/templates/404.html +++ b/share/templates/404.html @@ -1,10 +1,16 @@ - - OnionShare: Error 404 - - - -

Error 404: You probably typed the OnionShare address wrong

- + + OnionShare: 404 Not Found + + + + +
+
+

+

404 Not Found

+
+
+ diff --git a/share/templates/closed.html b/share/templates/closed.html index c34e0ee4..64c8b369 100644 --- a/share/templates/closed.html +++ b/share/templates/closed.html @@ -11,11 +11,11 @@

OnionShare

-
-
+
+

-

Thank you for using OnionShare

-

You may now close this window.

+

Thank you for using OnionShare

+

You may now close this window.