Merge pull request #1404 from mig5/client_auth_v3

Support ClientAuth (a.k.a 'stealth') on v3 onions with Tor 0.4.6.x
This commit is contained in:
Micah Lee 2021-08-29 12:22:49 -07:00 committed by GitHub
commit cf9dfad1c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
87 changed files with 682 additions and 1411 deletions

View File

@ -38,14 +38,6 @@ from .onionshare import OnionShare
from .mode_settings import ModeSettings
def build_url(mode_settings, app, web):
# Build the URL
if mode_settings.get("general", "public"):
return f"http://{app.onion_host}"
else:
return f"http://onionshare:{web.password}@{app.onion_host}"
def main(cwd=None):
"""
The main() function implements all of the logic that the command-line version of
@ -113,7 +105,7 @@ def main(cwd=None):
action="store_true",
dest="public",
default=False,
help="Don't use a password",
help="Don't use a private key",
)
parser.add_argument(
"--auto-start-timer",
@ -129,20 +121,6 @@ def main(cwd=None):
default=0,
help="Stop onion service at schedule time (N seconds from now)",
)
parser.add_argument(
"--legacy",
action="store_true",
dest="legacy",
default=False,
help="Use legacy address (v2 onion service, not recommended)",
)
parser.add_argument(
"--client-auth",
action="store_true",
dest="client_auth",
default=False,
help="Use client authorization (requires --legacy)",
)
# Share args
parser.add_argument(
"--no-autostop-sharing",
@ -215,8 +193,6 @@ def main(cwd=None):
public = bool(args.public)
autostart_timer = int(args.autostart_timer)
autostop_timer = int(args.autostop_timer)
legacy = bool(args.legacy)
client_auth = bool(args.client_auth)
autostop_sharing = not bool(args.no_autostop_sharing)
data_dir = args.data_dir
webhook_url = args.webhook_url
@ -237,13 +213,6 @@ def main(cwd=None):
# Verbose mode?
common.verbose = verbose
# client_auth can only be set if legacy is also set
if client_auth and not legacy:
print(
"Client authentication (--client-auth) is only supported with with legacy onion services (--legacy)"
)
sys.exit()
# Re-load settings, if a custom config was passed in
if config_filename:
common.load_settings(config_filename)
@ -264,8 +233,6 @@ def main(cwd=None):
mode_settings.set("general", "public", public)
mode_settings.set("general", "autostart_timer", autostart_timer)
mode_settings.set("general", "autostop_timer", autostop_timer)
mode_settings.set("general", "legacy", legacy)
mode_settings.set("general", "client_auth", client_auth)
if mode == "share":
mode_settings.set("share", "autostop_sharing", autostop_sharing)
if mode == "receive":
@ -352,11 +319,6 @@ def main(cwd=None):
try:
common.settings.load()
if mode_settings.get("general", "public"):
web.password = None
else:
web.generate_password(mode_settings.get("onion", "password"))
# Receive mode needs to know the tor proxy details for webhooks
if mode == "receive":
if local_only:
@ -381,7 +343,7 @@ def main(cwd=None):
sys.exit()
app.start_onion_service(mode, mode_settings, False)
url = build_url(mode_settings, app, web)
url = f"http://{app.onion_host}"
schedule = datetime.now() + timedelta(seconds=autostart_timer)
if mode == "receive":
print(
@ -394,21 +356,21 @@ def main(cwd=None):
"what you are doing."
)
print("")
if mode_settings.get("general", "client_auth"):
if not mode_settings.get("general", "public"):
print(
f"Give this address and HidServAuth lineto your sender, and tell them it won't be accessible until: {schedule.strftime('%I:%M:%S%p, %b %d, %y')}"
f"Give this address and private key to your sender, and tell them it won't be accessible until: {schedule.strftime('%I:%M:%S%p, %b %d, %y')}"
)
print(app.auth_string)
print(f"Private key: {app.auth_string}")
else:
print(
f"Give this address to your sender, and tell them it won't be accessible until: {schedule.strftime('%I:%M:%S%p, %b %d, %y')}"
)
else:
if mode_settings.get("general", "client_auth"):
if not mode_settings.get("general", "public"):
print(
f"Give this address and HidServAuth line to your recipient, and tell them it won't be accessible until: {schedule.strftime('%I:%M:%S%p, %b %d, %y')}"
f"Give this address and private key to your recipient, and tell them it won't be accessible until: {schedule.strftime('%I:%M:%S%p, %b %d, %y')}"
)
print(app.auth_string)
print(f"Private key: {app.auth_string}")
else:
print(
f"Give this address to your recipient, and tell them it won't be accessible until: {schedule.strftime('%I:%M:%S%p, %b %d, %y')}"
@ -426,7 +388,6 @@ def main(cwd=None):
sys.exit()
except (TorTooOldEphemeral, TorTooOldStealth, TorErrorProtocolError) as e:
print("")
print(e.args[0])
sys.exit()
if mode == "website":
@ -458,21 +419,14 @@ def main(cwd=None):
t.start()
try: # Trap Ctrl-C
# Wait for web.generate_password() to finish running
time.sleep(0.2)
# start auto-stop timer thread
if app.autostop_timer > 0:
app.autostop_timer_thread.start()
# Save the web password if we are using a persistent private key
if mode_settings.get("persistent", "enabled"):
if not mode_settings.get("onion", "password"):
mode_settings.set("onion", "password", web.password)
# mode_settings.save()
# Build the URL
url = build_url(mode_settings, app, web)
url = f"http://{app.onion_host}"
print("")
if autostart_timer > 0:
@ -490,21 +444,21 @@ def main(cwd=None):
)
print("")
if mode_settings.get("general", "client_auth"):
print("Give this address and HidServAuth to the sender:")
print(url)
print(app.auth_string)
else:
if mode_settings.get("general", "public"):
print("Give this address to the sender:")
print(url)
else:
if mode_settings.get("general", "client_auth"):
print("Give this address and HidServAuth line to the recipient:")
print(url)
print(app.auth_string)
else:
print("Give this address and private key to the sender:")
print(url)
print(f"Private key: {app.auth_string}")
else:
if mode_settings.get("general", "public"):
print("Give this address to the recipient:")
print(url)
else:
print("Give this address and private key to the recipient:")
print(url)
print(f"Private key: {app.auth_string}")
print("")
print("Press Ctrl+C to stop the server")

View File

@ -37,8 +37,8 @@ class ModeSettings:
self.default_settings = {
"onion": {
"private_key": None,
"hidservauth_string": None,
"password": None,
"client_auth_priv_key": None,
"client_auth_pub_key": None,
},
"persistent": {"mode": None, "enabled": False},
"general": {
@ -46,8 +46,6 @@ class ModeSettings:
"public": False,
"autostart_timer": False,
"autostop_timer": False,
"legacy": False,
"client_auth": False,
"service_id": None,
},
"share": {"autostop_sharing": True, "filenames": []},

View File

@ -21,8 +21,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
from stem.control import Controller
from stem import ProtocolError, SocketClosed
from stem.connection import MissingPassword, UnreadableCookieFile, AuthenticationFailure
from Crypto.PublicKey import RSA
import base64
import nacl.public
import os
import tempfile
import subprocess
@ -170,6 +170,20 @@ class Onion(object):
# Keep track of onions where it's important to gracefully close to prevent truncated downloads
self.graceful_close_onions = []
def key_str(self, key):
"""
Returns a base32 decoded string of a key.
"""
# bytes to base 32
key_bytes = bytes(key)
key_b32 = base64.b32encode(key_bytes)
# strip trailing ====
assert key_b32[-4:] == b'===='
key_b32 = key_b32[:-4]
# change from b'ASDF' to ASDF
s = key_b32.decode('utf-8')
return s
def connect(
self,
custom_settings=None,
@ -570,14 +584,15 @@ class Onion(object):
callable(list_ephemeral_hidden_services) and self.tor_version >= "0.2.7.1"
)
# Do the versions of stem and tor that I'm using support stealth onion services?
# Do the versions of stem and tor that I'm using support v3 stealth onion services?
try:
res = self.c.create_ephemeral_hidden_service(
{1: 1},
basic_auth={"onionshare": None},
basic_auth=None,
await_publication=False,
key_type="NEW",
key_content="RSA1024",
key_content="ED25519-V3",
client_auth_v3="E2GOT5LTUTP3OAMRCRXO4GSH6VKJEUOXZQUC336SRKAHTTT5OVSA",
)
tmp_service_id = res.service_id
self.c.remove_ephemeral_hidden_service(tmp_service_id)
@ -612,65 +627,58 @@ class Onion(object):
"Your version of Tor is too old, ephemeral onion services are not supported"
)
raise TorTooOldEphemeral()
if mode_settings.get("general", "client_auth") and not self.supports_stealth:
print(
"Your version of Tor is too old, stealth onion services are not supported"
)
raise TorTooOldStealth()
auth_cookie = None
if mode_settings.get("general", "client_auth"):
if mode_settings.get("onion", "hidservauth_string"):
auth_cookie = mode_settings.get("onion", "hidservauth_string").split()[
2
]
if auth_cookie:
basic_auth = {"onionshare": auth_cookie}
else:
# If we had neither a scheduled auth cookie or a persistent hidservauth string,
# set the cookie to 'None', which means Tor will create one for us
basic_auth = {"onionshare": None}
else:
# Not using client auth at all
basic_auth = None
if mode_settings.get("onion", "private_key"):
key_content = mode_settings.get("onion", "private_key")
if self.is_v2_key(key_content):
key_type = "RSA1024"
else:
# Assume it was a v3 key. Stem will throw an error if it's something illegible
key_type = "ED25519-V3"
key_type = "ED25519-V3"
else:
key_content = "ED25519-V3"
key_type = "NEW"
# Work out if we can support v3 onion services, which are preferred
if self.supports_v3_onions and not mode_settings.get("general", "legacy"):
key_content = "ED25519-V3"
else:
# fall back to v2 onion services
key_content = "RSA1024"
# v3 onions don't yet support basic auth. Our ticket:
# https://github.com/onionshare/onionshare/issues/697
if (
key_type == "NEW"
and key_content == "ED25519-V3"
and not mode_settings.get("general", "legacy")
):
basic_auth = None
debug_message = f"key_type={key_type}"
if key_type == "NEW":
debug_message += f", key_content={key_content}"
self.common.log("Onion", "start_onion_service", debug_message)
if mode_settings.get("general", "public"):
client_auth_priv_key = None
client_auth_pub_key = None
else:
if not self.supports_stealth:
print(
"Your version of Tor is too old, stealth onion services are not supported"
)
raise TorTooOldStealth()
else:
if key_type == "NEW" or not mode_settings.get("onion", "client_auth_priv_key"):
# Generate a new key pair for Client Auth on new onions, or if
# it's a persistent onion but for some reason we don't them
client_auth_priv_key_raw = nacl.public.PrivateKey.generate()
client_auth_priv_key = self.key_str(client_auth_priv_key_raw)
client_auth_pub_key = self.key_str(client_auth_priv_key_raw.public_key)
else:
# These should have been saved in settings from the previous run of a persistent onion
client_auth_priv_key = mode_settings.get("onion", "client_auth_priv_key")
client_auth_pub_key = mode_settings.get("onion", "client_auth_pub_key")
try:
res = self.c.create_ephemeral_hidden_service(
{80: port},
await_publication=await_publication,
basic_auth=basic_auth,
key_type=key_type,
key_content=key_content,
)
if not self.supports_stealth:
res = self.c.create_ephemeral_hidden_service(
{80: port},
await_publication=await_publication,
basic_auth=None,
key_type=key_type,
key_content=key_content,
)
else:
res = self.c.create_ephemeral_hidden_service(
{80: port},
await_publication=await_publication,
basic_auth=None,
key_type=key_type,
key_content=key_content,
client_auth_v3=client_auth_pub_key,
)
except ProtocolError as e:
print("Tor error: {}".format(e.args[0]))
@ -688,12 +696,20 @@ class Onion(object):
# Save the private key and hidservauth string
if not mode_settings.get("onion", "private_key"):
mode_settings.set("onion", "private_key", res.private_key)
if mode_settings.get("general", "client_auth") and not mode_settings.get(
"onion", "hidservauth_string"
):
auth_cookie = list(res.client_auth.values())[0]
self.auth_string = f"HidServAuth {onion_host} {auth_cookie}"
mode_settings.set("onion", "hidservauth_string", self.auth_string)
# If using V3 onions and Client Auth, save both the private and public key
# because we need to send the public key to ADD_ONION (if we restart this
# same share at a later date), and the private key to the other user for
# their Tor Browser.
if not mode_settings.get("general", "public"):
mode_settings.set("onion", "client_auth_priv_key", client_auth_priv_key)
mode_settings.set("onion", "client_auth_pub_key", client_auth_pub_key)
# If we were pasting the client auth directly into the filesystem behind a Tor client,
# it would need to be in the format below. However, let's just set the private key
# by itself, as this can be pasted directly into Tor Browser, which is likely to
# be the most common use case.
# self.auth_string = f"{onion_host}:x25519:{client_auth_priv_key}"
self.auth_string = client_auth_priv_key
return onion_host
@ -825,15 +841,3 @@ class Onion(object):
return ("127.0.0.1", 9150)
else:
return (self.settings.get("socks_address"), self.settings.get("socks_port"))
def is_v2_key(self, key):
"""
Helper function for determining if a key is RSA1024 (v2) or not.
"""
try:
# Import the key
key = RSA.importKey(base64.b64decode(key))
# Is this a v2 Onion key? (1024 bits) If so, we should keep using it.
return key.n.bit_length() == 1024
except Exception:
return False

View File

@ -74,13 +74,15 @@ class OnionShare(object):
if self.local_only:
self.onion_host = f"127.0.0.1:{self.port}"
if not mode_settings.get("general", "public"):
self.auth_string = "E2GOT5LTUTP3OAMRCRXO4GSH6VKJEUOXZQUC336SRKAHTTT5OVSA"
return
self.onion_host = self.onion.start_onion_service(
mode, mode_settings, self.port, await_publication
)
if mode_settings.get("general", "client_auth"):
if not mode_settings.get("general", "public"):
self.auth_string = self.onion.auth_string
def stop_onion_service(self, mode_settings):

View File

@ -1,21 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>OnionShare: 401 Unauthorized Access</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="{{ static_url_path }}/img/favicon.ico" rel="icon" type="image/x-icon" />
<link rel="stylesheet" rel="subresource" type="text/css" href="{{ static_url_path }}/css/style.css" media="all">
</head>
<body>
<div class="info-wrapper">
<div class="info">
<p><img class="logo" src="{{ static_url_path }}/img/logo_large.png" title="OnionShare"></p>
<p class="info-header">401 Unauthorized Access</p>
</div>
</div>
</body>
</html>

View File

@ -34,7 +34,6 @@ from flask import (
send_file,
__version__ as flask_version,
)
from flask_httpauth import HTTPBasicAuth
from flask_socketio import SocketIO
from .share_mode import ShareModeWeb
@ -64,18 +63,16 @@ class Web:
REQUEST_STARTED = 1
REQUEST_PROGRESS = 2
REQUEST_CANCELED = 3
REQUEST_RATE_LIMIT = 4
REQUEST_UPLOAD_INCLUDES_MESSAGE = 5
REQUEST_UPLOAD_FILE_RENAMED = 6
REQUEST_UPLOAD_SET_DIR = 7
REQUEST_UPLOAD_FINISHED = 8
REQUEST_UPLOAD_CANCELED = 9
REQUEST_INDIVIDUAL_FILE_STARTED = 10
REQUEST_INDIVIDUAL_FILE_PROGRESS = 11
REQUEST_INDIVIDUAL_FILE_CANCELED = 12
REQUEST_ERROR_DATA_DIR_CANNOT_CREATE = 13
REQUEST_OTHER = 14
REQUEST_INVALID_PASSWORD = 15
REQUEST_UPLOAD_INCLUDES_MESSAGE = 4
REQUEST_UPLOAD_FILE_RENAMED = 5
REQUEST_UPLOAD_SET_DIR = 6
REQUEST_UPLOAD_FINISHED = 7
REQUEST_UPLOAD_CANCELED = 8
REQUEST_INDIVIDUAL_FILE_STARTED = 9
REQUEST_INDIVIDUAL_FILE_PROGRESS = 10
REQUEST_INDIVIDUAL_FILE_CANCELED = 11
REQUEST_ERROR_DATA_DIR_CANNOT_CREATE = 12
REQUEST_OTHER = 13
def __init__(self, common, is_gui, mode_settings, mode="share"):
self.common = common
@ -92,8 +89,6 @@ class Web:
)
self.app.secret_key = self.common.random_string(8)
self.generate_static_url_path()
self.auth = HTTPBasicAuth()
self.auth.error_handler(self.error401)
# Verbose mode?
if self.common.verbose:
@ -132,9 +127,6 @@ class Web:
]
self.q = queue.Queue()
self.password = None
self.reset_invalid_passwords()
self.done = False
@ -199,28 +191,6 @@ class Web:
Common web app routes between all modes.
"""
@self.auth.get_password
def get_pw(username):
if username == "onionshare":
return self.password
else:
return None
@self.app.before_request
def conditional_auth_check():
# Allow static files without basic authentication
if request.path.startswith(self.static_url_path + "/"):
return None
# If public mode is disabled, require authentication
if not self.settings.get("general", "public"):
@self.auth.login_required
def _check_login():
return None
return _check_login()
@self.app.errorhandler(404)
def not_found(e):
mode = self.get_mode()
@ -260,31 +230,6 @@ class Web:
f"{self.common.get_resource_path('static')}/img/favicon.ico"
)
def error401(self):
auth = request.authorization
if auth:
if (
auth["username"] == "onionshare"
and auth["password"] not in self.invalid_passwords
):
print(f"Invalid password guess: {auth['password']}")
self.add_request(Web.REQUEST_INVALID_PASSWORD, data=auth["password"])
self.invalid_passwords.append(auth["password"])
self.invalid_passwords_count += 1
if self.invalid_passwords_count == 20:
self.add_request(Web.REQUEST_RATE_LIMIT)
self.force_shutdown()
print(
"Someone has made too many wrong attempts to guess your password, so OnionShare has stopped the server. Start sharing again and send the recipient a new address to share."
)
r = make_response(
render_template("401.html", static_url_path=self.static_url_path), 401
)
return self.add_security_headers(r)
def error403(self):
self.add_request(Web.REQUEST_OTHER, request.path)
r = make_response(
@ -362,21 +307,6 @@ class Web:
"""
self.q.put({"type": request_type, "path": path, "data": data})
def generate_password(self, saved_password=None):
self.common.log("Web", "generate_password", f"saved_password={saved_password}")
if saved_password is not None and saved_password != "":
self.password = saved_password
self.common.log(
"Web",
"generate_password",
f'saved_password sent, so password is: "{self.password}"',
)
else:
self.password = self.common.build_password()
self.common.log(
"Web", "generate_password", f'built random password: "{self.password}"'
)
def verbose_mode(self):
"""
Turn on verbose mode, which will log flask errors to a file.
@ -386,10 +316,6 @@ class Web:
log_handler.setLevel(logging.WARNING)
self.app.logger.addHandler(log_handler)
def reset_invalid_passwords(self):
self.invalid_passwords_count = 0
self.invalid_passwords = []
def force_shutdown(self):
"""
Stop the flask web server, from the context of the flask app.
@ -446,18 +372,9 @@ class Web:
# To stop flask, load http://shutdown:[shutdown_password]@127.0.0.1/[shutdown_password]/shutdown
# (We're putting the shutdown_password in the path as well to make routing simpler)
if self.running:
if self.password:
requests.get(
f"http://127.0.0.1:{port}/{self.shutdown_password}/shutdown",
auth=requests.auth.HTTPBasicAuth("onionshare", self.password),
)
else:
requests.get(
f"http://127.0.0.1:{port}/{self.shutdown_password}/shutdown"
)
# Reset any password that was in use
self.password = None
requests.get(
f"http://127.0.0.1:{port}/{self.shutdown_password}/shutdown"
)
def cleanup(self):
"""

460
cli/poetry.lock generated
View File

@ -1,32 +1,33 @@
[[package]]
name = "atomicwrites"
version = "1.4.0"
description = "Atomic file writes."
category = "dev"
description = "Atomic file writes."
marker = "sys_platform == \"win32\""
name = "atomicwrites"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.4.0"
[[package]]
name = "attrs"
version = "21.2.0"
description = "Classes Without Boilerplate"
category = "dev"
description = "Classes Without Boilerplate"
name = "attrs"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "21.2.0"
[package.extras]
dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
dev = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
tests = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
tests_no_zope = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
[[package]]
name = "bidict"
version = "0.21.2"
description = "The bidirectional mapping library for Python."
category = "main"
description = "The bidirectional mapping library for Python."
name = "bidict"
optional = false
python-versions = ">=3.6"
version = "0.21.2"
[package.extras]
coverage = ["coverage (<6)", "pytest-cov (<3)"]
@ -36,56 +37,67 @@ precommit = ["pre-commit (<3)"]
test = ["hypothesis (<6)", "py (<2)", "pytest (<7)", "pytest-benchmark (>=3.2.0,<4)", "sortedcollections (<2)", "sortedcontainers (<3)", "Sphinx (<4)", "sphinx-autodoc-typehints (<2)"]
[[package]]
name = "certifi"
version = "2021.5.30"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
description = "Python package for providing Mozilla's CA Bundle."
name = "certifi"
optional = false
python-versions = "*"
version = "2021.5.30"
[[package]]
name = "chardet"
version = "4.0.0"
category = "main"
description = "Foreign Function Interface for Python calling C code."
name = "cffi"
optional = false
python-versions = "*"
version = "1.14.6"
[package.dependencies]
pycparser = "*"
[[package]]
category = "main"
description = "Universal encoding detector for Python 2 and 3"
category = "main"
name = "chardet"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "4.0.0"
[[package]]
name = "click"
version = "7.1.2"
category = "main"
description = "Composable command line interface toolkit"
category = "main"
name = "click"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "7.1.2"
[[package]]
name = "colorama"
version = "0.4.4"
category = "main"
description = "Cross-platform colored terminal text."
category = "main"
name = "colorama"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "0.4.4"
[[package]]
name = "dnspython"
version = "1.16.0"
description = "DNS toolkit"
category = "main"
description = "DNS toolkit"
name = "dnspython"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.16.0"
[package.extras]
DNSSEC = ["pycryptodome", "ecdsa (>=0.13)"]
IDNA = ["idna (>=2.1)"]
[[package]]
name = "eventlet"
version = "0.31.0"
description = "Highly concurrent networking library"
category = "main"
description = "Highly concurrent networking library"
name = "eventlet"
optional = false
python-versions = "*"
version = "0.31.0"
[package.dependencies]
dnspython = ">=1.15.0,<2.0.0"
@ -93,18 +105,18 @@ greenlet = ">=0.3"
six = ">=1.10.0"
[[package]]
name = "flask"
version = "1.1.4"
description = "A simple framework for building complex web applications."
category = "main"
description = "A simple framework for building complex web applications."
name = "flask"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "1.1.4"
[package.dependencies]
click = ">=5.1,<8.0"
itsdangerous = ">=0.24,<2.0"
Jinja2 = ">=2.10.1,<3.0"
Werkzeug = ">=0.15,<2.0"
click = ">=5.1,<8.0"
itsdangerous = ">=0.24,<2.0"
[package.extras]
dev = ["pytest", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"]
@ -112,86 +124,79 @@ docs = ["sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-
dotenv = ["python-dotenv"]
[[package]]
name = "flask-httpauth"
version = "4.4.0"
description = "Basic and Digest HTTP authentication for Flask routes"
category = "main"
optional = false
python-versions = "*"
[package.dependencies]
Flask = "*"
[[package]]
name = "flask-socketio"
version = "5.0.1"
description = "Socket.IO integration for Flask applications"
category = "main"
name = "flask-socketio"
optional = false
python-versions = "*"
version = "5.0.1"
[package.dependencies]
Flask = ">=0.9"
python-socketio = ">=5.0.2"
[[package]]
name = "greenlet"
version = "1.1.0"
description = "Lightweight in-process concurrent programming"
category = "main"
description = "Lightweight in-process concurrent programming"
name = "greenlet"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
version = "1.1.0"
[package.extras]
docs = ["sphinx"]
[[package]]
name = "idna"
version = "2.10"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
description = "Internationalized Domain Names in Applications (IDNA)"
name = "idna"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "2.10"
[[package]]
name = "importlib-metadata"
version = "4.4.0"
description = "Read metadata from Python packages"
category = "dev"
description = "Read metadata from Python packages"
marker = "python_version < \"3.8\""
name = "importlib-metadata"
optional = false
python-versions = ">=3.6"
version = "4.4.0"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.dependencies.typing-extensions]
python = "<3.8"
version = ">=3.6.4"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "iniconfig"
version = "1.1.1"
description = "iniconfig: brain-dead simple config-ini parsing"
category = "dev"
description = "iniconfig: brain-dead simple config-ini parsing"
name = "iniconfig"
optional = false
python-versions = "*"
version = "1.1.1"
[[package]]
name = "itsdangerous"
version = "1.1.0"
description = "Various helpers to pass data to untrusted environments and back."
category = "main"
description = "Various helpers to pass data to untrusted environments and back."
name = "itsdangerous"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.1.0"
[[package]]
name = "jinja2"
version = "2.11.3"
description = "A very fast and expressive template engine."
category = "main"
description = "A very fast and expressive template engine."
name = "jinja2"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "2.11.3"
[package.dependencies]
MarkupSafe = ">=0.23"
@ -200,122 +205,143 @@ MarkupSafe = ">=0.23"
i18n = ["Babel (>=0.8)"]
[[package]]
name = "markupsafe"
version = "2.0.1"
description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
description = "Safely add untrusted strings to HTML/XML markup."
name = "markupsafe"
optional = false
python-versions = ">=3.6"
version = "2.0.1"
[[package]]
name = "packaging"
version = "20.9"
description = "Core utilities for Python packages"
category = "dev"
description = "Core utilities for Python packages"
name = "packaging"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "20.9"
[package.dependencies]
pyparsing = ">=2.0.2"
[[package]]
name = "pluggy"
version = "0.13.1"
description = "plugin and hook calling mechanisms for python"
category = "dev"
description = "plugin and hook calling mechanisms for python"
name = "pluggy"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "0.13.1"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.dependencies.importlib-metadata]
python = "<3.8"
version = ">=0.12"
[package.extras]
dev = ["pre-commit", "tox"]
[[package]]
name = "psutil"
version = "5.8.0"
description = "Cross-platform lib for process and system monitoring in Python."
category = "main"
description = "Cross-platform lib for process and system monitoring in Python."
name = "psutil"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "5.8.0"
[package.extras]
test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"]
[[package]]
name = "py"
version = "1.10.0"
category = "dev"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
name = "py"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.10.0"
[[package]]
name = "pycryptodome"
version = "3.10.1"
description = "Cryptographic library for Python"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyparsing"
version = "2.4.7"
description = "Python parsing module"
category = "dev"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "pysocks"
version = "1.7.1"
description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information."
category = "main"
description = "C parser in Python"
name = "pycparser"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "2.20"
[[package]]
name = "pytest"
version = "6.2.4"
description = "pytest: simple powerful testing with Python"
category = "dev"
category = "main"
description = "Python binding to the Networking and Cryptography (NaCl) library"
name = "pynacl"
optional = false
python-versions = ">=3.6"
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.4.0"
[package.dependencies]
atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
cffi = ">=1.4.1"
six = "*"
[package.extras]
docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"]
tests = ["pytest (>=3.2.1,<3.3.0 || >3.3.0)", "hypothesis (>=3.27.0)"]
[[package]]
category = "dev"
description = "Python parsing module"
name = "pyparsing"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
version = "2.4.7"
[[package]]
category = "main"
description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information."
name = "pysocks"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.7.1"
[[package]]
category = "dev"
description = "pytest: simple powerful testing with Python"
name = "pytest"
optional = false
python-versions = ">=3.6"
version = "6.2.4"
[package.dependencies]
atomicwrites = ">=1.0"
attrs = ">=19.2.0"
colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
colorama = "*"
iniconfig = "*"
packaging = "*"
pluggy = ">=0.12,<1.0.0a1"
py = ">=1.8.2"
toml = "*"
[package.dependencies.importlib-metadata]
python = "<3.8"
version = ">=0.12"
[package.extras]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
[[package]]
name = "python-engineio"
version = "4.2.0"
description = "Engine.IO server"
category = "main"
description = "Engine.IO server"
name = "python-engineio"
optional = false
python-versions = "*"
version = "4.2.0"
[package.extras]
asyncio_client = ["aiohttp (>=3.4)"]
client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"]
[[package]]
name = "python-socketio"
version = "5.3.0"
description = "Socket.IO server"
category = "main"
description = "Socket.IO server"
name = "python-socketio"
optional = false
python-versions = "*"
version = "5.3.0"
[package.dependencies]
bidict = ">=0.21.0"
@ -326,105 +352,114 @@ asyncio_client = ["aiohttp (>=3.4)", "websockets (>=7.0)"]
client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"]
[[package]]
name = "requests"
version = "2.25.1"
description = "Python HTTP for Humans."
category = "main"
description = "Python HTTP for Humans."
name = "requests"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "2.25.1"
[package.dependencies]
certifi = ">=2017.4.17"
chardet = ">=3.0.2,<5"
idna = ">=2.5,<3"
PySocks = {version = ">=1.5.6,<1.5.7 || >1.5.7", optional = true, markers = "extra == \"socks\""}
urllib3 = ">=1.21.1,<1.27"
[package.dependencies.PySocks]
optional = true
version = ">=1.5.6,<1.5.7 || >1.5.7"
[package.extras]
security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"]
[[package]]
name = "six"
version = "1.16.0"
description = "Python 2 and 3 compatibility utilities"
category = "main"
description = "Python 2 and 3 compatibility utilities"
name = "six"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
version = "1.16.0"
[[package]]
name = "stem"
version = "1.8.0"
description = "Stem is a Python controller library that allows applications to interact with Tor (https://www.torproject.org/)."
category = "main"
description = ""
name = "stem"
optional = false
python-versions = "*"
version = "1.8.1"
[package.source]
reference = "de3d03a03c7ee57c74c80e9c63cb88072d833717"
type = "git"
url = "https://github.com/onionshare/stem.git"
[[package]]
name = "toml"
version = "0.10.2"
description = "Python Library for Tom's Obvious, Minimal Language"
category = "dev"
description = "Python Library for Tom's Obvious, Minimal Language"
name = "toml"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
version = "0.10.2"
[[package]]
name = "typing-extensions"
version = "3.10.0.0"
description = "Backported and Experimental Type Hints for Python 3.5+"
category = "dev"
description = "Backported and Experimental Type Hints for Python 3.5+"
marker = "python_version < \"3.8\""
name = "typing-extensions"
optional = false
python-versions = "*"
version = "3.10.0.0"
[[package]]
name = "unidecode"
version = "1.2.0"
description = "ASCII transliterations of Unicode text"
category = "main"
description = "ASCII transliterations of Unicode text"
name = "unidecode"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.2.0"
[[package]]
name = "urllib3"
version = "1.26.5"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
description = "HTTP library with thread-safe connection pooling, file post, and more."
name = "urllib3"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
version = "1.26.5"
[package.extras]
brotli = ["brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"]
[[package]]
name = "werkzeug"
version = "1.0.1"
description = "The comprehensive WSGI web application library."
category = "main"
description = "The comprehensive WSGI web application library."
name = "werkzeug"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "1.0.1"
[package.extras]
dev = ["pytest", "pytest-timeout", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinx-issues"]
watchdog = ["watchdog"]
[[package]]
name = "zipp"
version = "3.4.1"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "dev"
description = "Backport of pathlib-compatible object wrapper for zip files"
marker = "python_version < \"3.8\""
name = "zipp"
optional = false
python-versions = ">=3.6"
version = "3.4.1"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
content-hash = "181891640e59dac730905019444d42ef8e99da0c34c96fb8a616781661bae537"
python-versions = "^3.6"
content-hash = "b33fc47db907e6db7cb254b5cac34b0d9558547418e8074280063159b291766a"
[metadata.files]
atomicwrites = [
@ -443,6 +478,53 @@ certifi = [
{file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
{file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
]
cffi = [
{file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"},
{file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"},
{file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"},
{file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"},
{file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"},
{file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"},
{file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"},
{file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"},
{file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"},
{file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"},
{file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"},
{file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"},
{file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"},
{file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"},
{file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"},
{file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"},
{file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"},
{file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"},
{file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"},
{file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"},
{file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"},
{file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"},
{file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"},
{file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"},
{file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"},
{file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"},
{file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"},
{file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"},
{file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"},
{file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"},
{file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"},
{file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"},
{file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"},
{file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"},
{file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"},
{file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"},
{file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"},
{file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"},
{file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"},
{file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"},
{file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"},
{file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"},
{file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"},
{file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"},
{file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
]
chardet = [
{file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"},
{file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"},
@ -467,10 +549,6 @@ flask = [
{file = "Flask-1.1.4-py2.py3-none-any.whl", hash = "sha256:c34f04500f2cbbea882b1acb02002ad6fe6b7ffa64a6164577995657f50aed22"},
{file = "Flask-1.1.4.tar.gz", hash = "sha256:0fbeb6180d383a9186d0d6ed954e0042ad9f18e0e8de088b2b419d526927d196"},
]
flask-httpauth = [
{file = "Flask-HTTPAuth-4.4.0.tar.gz", hash = "sha256:bcaaa7a35a3cba0b2eafd4f113b3016bf70eb78087456d96484c3c18928b813a"},
{file = "Flask_HTTPAuth-4.4.0-py2.py3-none-any.whl", hash = "sha256:d9131122cdc5709dda63790f6e9b3142d8101447d424b0b95ffd4ee279f49539"},
]
flask-socketio = [
{file = "Flask-SocketIO-5.0.1.tar.gz", hash = "sha256:5c4319f5214ada20807857dc8fdf3dc7d2afe8d6dd38f5c516c72e2be47d2227"},
{file = "Flask_SocketIO-5.0.1-py2.py3-none-any.whl", hash = "sha256:5d9a4438bafd806c5a3b832e74b69758781a8ee26fb6c9b1dbdda9b4fced432e"},
@ -547,12 +625,22 @@ jinja2 = [
{file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"},
]
markupsafe = [
{file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"},
{file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"},
{file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"},
{file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"},
{file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"},
{file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"},
{file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"},
{file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"},
@ -561,14 +649,21 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"},
{file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"},
{file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"},
{file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"},
{file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"},
{file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
{file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
{file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
@ -578,6 +673,9 @@ markupsafe = [
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"},
{file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"},
{file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
{file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
{file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
@ -624,37 +722,29 @@ py = [
{file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
{file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
]
pycryptodome = [
{file = "pycryptodome-3.10.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1c5e1ca507de2ad93474be5cfe2bfa76b7cf039a1a32fc196f40935944871a06"},
{file = "pycryptodome-3.10.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:6260e24d41149268122dd39d4ebd5941e9d107f49463f7e071fd397e29923b0c"},
{file = "pycryptodome-3.10.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:3f840c49d38986f6e17dbc0673d37947c88bc9d2d9dba1c01b979b36f8447db1"},
{file = "pycryptodome-3.10.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:2dea65df54349cdfa43d6b2e8edb83f5f8d6861e5cf7b1fbc3e34c5694c85e27"},
{file = "pycryptodome-3.10.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:e61e363d9a5d7916f3a4ce984a929514c0df3daf3b1b2eb5e6edbb131ee771cf"},
{file = "pycryptodome-3.10.1-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:2603c98ae04aac675fefcf71a6c87dc4bb74a75e9071ae3923bbc91a59f08d35"},
{file = "pycryptodome-3.10.1-cp27-cp27m-win32.whl", hash = "sha256:38661348ecb71476037f1e1f553159b80d256c00f6c0b00502acac891f7116d9"},
{file = "pycryptodome-3.10.1-cp27-cp27m-win_amd64.whl", hash = "sha256:1723ebee5561628ce96748501cdaa7afaa67329d753933296321f0be55358dce"},
{file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:77997519d8eb8a4adcd9a47b9cec18f9b323e296986528186c0e9a7a15d6a07e"},
{file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:99b2f3fc51d308286071d0953f92055504a6ffe829a832a9fc7a04318a7683dd"},
{file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:e0a4d5933a88a2c98bbe19c0c722f5483dc628d7a38338ac2cb64a7dbd34064b"},
{file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d3d6958d53ad307df5e8469cc44474a75393a434addf20ecd451f38a72fe29b8"},
{file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:a8eb8b6ea09ec1c2535bf39914377bc8abcab2c7d30fa9225eb4fe412024e427"},
{file = "pycryptodome-3.10.1-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:31c1df17b3dc5f39600a4057d7db53ac372f492c955b9b75dd439f5d8b460129"},
{file = "pycryptodome-3.10.1-cp35-abi3-manylinux1_i686.whl", hash = "sha256:a3105a0eb63eacf98c2ecb0eb4aa03f77f40fbac2bdde22020bb8a536b226bb8"},
{file = "pycryptodome-3.10.1-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:a92d5c414e8ee1249e850789052608f582416e82422502dc0ac8c577808a9067"},
{file = "pycryptodome-3.10.1-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:60386d1d4cfaad299803b45a5bc2089696eaf6cdd56f9fc17479a6f89595cfc8"},
{file = "pycryptodome-3.10.1-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:501ab36aae360e31d0ec370cf5ce8ace6cb4112060d099b993bc02b36ac83fb6"},
{file = "pycryptodome-3.10.1-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:fc7489a50323a0df02378bc2fff86eb69d94cc5639914346c736be981c6a02e7"},
{file = "pycryptodome-3.10.1-cp35-abi3-win32.whl", hash = "sha256:9b6f711b25e01931f1c61ce0115245a23cdc8b80bf8539ac0363bdcf27d649b6"},
{file = "pycryptodome-3.10.1-cp35-abi3-win_amd64.whl", hash = "sha256:7fd519b89585abf57bf47d90166903ec7b43af4fe23c92273ea09e6336af5c07"},
{file = "pycryptodome-3.10.1-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:09c1555a3fa450e7eaca41ea11cd00afe7c91fef52353488e65663777d8524e0"},
{file = "pycryptodome-3.10.1-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:758949ca62690b1540dfb24ad773c6da9cd0e425189e83e39c038bbd52b8e438"},
{file = "pycryptodome-3.10.1-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:e3bf558c6aeb49afa9f0c06cee7fb5947ee5a1ff3bd794b653d39926b49077fa"},
{file = "pycryptodome-3.10.1-pp27-pypy_73-win32.whl", hash = "sha256:f977cdf725b20f6b8229b0c87acb98c7717e742ef9f46b113985303ae12a99da"},
{file = "pycryptodome-3.10.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6d2df5223b12437e644ce0a3be7809471ffa71de44ccd28b02180401982594a6"},
{file = "pycryptodome-3.10.1-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:98213ac2b18dc1969a47bc65a79a8fca02a414249d0c8635abb081c7f38c91b6"},
{file = "pycryptodome-3.10.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:12222a5edc9ca4a29de15fbd5339099c4c26c56e13c2ceddf0b920794f26165d"},
{file = "pycryptodome-3.10.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:6bbf7fee7b7948b29d7e71fcacf48bac0c57fb41332007061a933f2d996f9713"},
{file = "pycryptodome-3.10.1.tar.gz", hash = "sha256:3e2e3a06580c5f190df843cdb90ea28d61099cf4924334d5297a995de68e4673"},
pycparser = [
{file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
{file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
]
pynacl = [
{file = "PyNaCl-1.4.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:ea6841bc3a76fa4942ce00f3bda7d436fda21e2d91602b9e21b7ca9ecab8f3ff"},
{file = "PyNaCl-1.4.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:d452a6746f0a7e11121e64625109bc4468fc3100452817001dbe018bb8b08514"},
{file = "PyNaCl-1.4.0-cp27-cp27m-win32.whl", hash = "sha256:2fe0fc5a2480361dcaf4e6e7cea00e078fcda07ba45f811b167e3f99e8cff574"},
{file = "PyNaCl-1.4.0-cp27-cp27m-win_amd64.whl", hash = "sha256:f8851ab9041756003119368c1e6cd0b9c631f46d686b3904b18c0139f4419f80"},
{file = "PyNaCl-1.4.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:7757ae33dae81c300487591c68790dfb5145c7d03324000433d9a2c141f82af7"},
{file = "PyNaCl-1.4.0-cp35-abi3-macosx_10_10_x86_64.whl", hash = "sha256:757250ddb3bff1eecd7e41e65f7f833a8405fede0194319f87899690624f2122"},
{file = "PyNaCl-1.4.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:30f9b96db44e09b3304f9ea95079b1b7316b2b4f3744fe3aaecccd95d547063d"},
{file = "PyNaCl-1.4.0-cp35-abi3-win32.whl", hash = "sha256:4e10569f8cbed81cb7526ae137049759d2a8d57726d52c1a000a3ce366779634"},
{file = "PyNaCl-1.4.0-cp35-abi3-win_amd64.whl", hash = "sha256:c914f78da4953b33d4685e3cdc7ce63401247a21425c16a39760e282075ac4a6"},
{file = "PyNaCl-1.4.0-cp35-cp35m-win32.whl", hash = "sha256:06cbb4d9b2c4bd3c8dc0d267416aaed79906e7b33f114ddbf0911969794b1cc4"},
{file = "PyNaCl-1.4.0-cp35-cp35m-win_amd64.whl", hash = "sha256:511d269ee845037b95c9781aa702f90ccc36036f95d0f31373a6a79bd8242e25"},
{file = "PyNaCl-1.4.0-cp36-cp36m-win32.whl", hash = "sha256:11335f09060af52c97137d4ac54285bcb7df0cef29014a1a4efe64ac065434c4"},
{file = "PyNaCl-1.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:cd401ccbc2a249a47a3a1724c2918fcd04be1f7b54eb2a5a71ff915db0ac51c6"},
{file = "PyNaCl-1.4.0-cp37-cp37m-win32.whl", hash = "sha256:8122ba5f2a2169ca5da936b2e5a511740ffb73979381b4229d9188f6dcb22f1f"},
{file = "PyNaCl-1.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:537a7ccbea22905a0ab36ea58577b39d1fa9b1884869d173b5cf111f006f689f"},
{file = "PyNaCl-1.4.0-cp38-cp38-win32.whl", hash = "sha256:9c4a7ea4fb81536c1b1f5cc44d54a296f96ae78c1ebd2311bd0b60be45a48d96"},
{file = "PyNaCl-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:7c6092102219f59ff29788860ccb021e80fffd953920c4a8653889c029b2d420"},
{file = "PyNaCl-1.4.0.tar.gz", hash = "sha256:54e9a2c849c742006516ad56a88f5c74bf2ce92c9f67435187c3c5953b346505"},
]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
@ -685,9 +775,7 @@ six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
stem = [
{file = "stem-1.8.0.tar.gz", hash = "sha256:a0b48ea6224e95f22aa34c0bc3415f0eb4667ddeae3dfb5e32a6920c185568c2"},
]
stem = []
toml = [
{file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},

View File

@ -19,18 +19,17 @@ classifiers = [
python = "^3.6"
click = "*"
flask = "1.1.4"
flask-httpauth = "*"
flask-socketio = "5.0.1"
psutil = "*"
pycryptodome = "*"
pysocks = "*"
requests = {extras = ["socks"], version = "*"}
stem = "*"
unidecode = "*"
urllib3 = "*"
eventlet = "*"
setuptools = "*"
pynacl = "^1.4.0"
colorama = "*"
stem = {git = "https://github.com/onionshare/stem.git", rev = "1.8.1"}
[tool.poetry.dev-dependencies]
pytest = "*"

View File

@ -48,7 +48,6 @@ def web_obj(temp_dir, common_obj, mode, num_files=0):
common_obj.settings = Settings(common_obj)
mode_settings = ModeSettings(common_obj)
web = Web(common_obj, False, mode_settings, mode)
web.generate_password()
web.running = True
web.cleanup_filenames == []
@ -75,23 +74,13 @@ class TestWeb:
web = web_obj(temp_dir, common_obj, "share", 3)
assert web.mode == "share"
with web.app.test_client() as c:
# Load / without auth
# Load /
res = c.get("/")
res.get_data()
assert res.status_code == 401
# Load / with invalid auth
res = c.get("/", headers=self._make_auth_headers("invalid"))
res.get_data()
assert res.status_code == 401
# Load / with valid auth
res = c.get("/", headers=self._make_auth_headers(web.password))
res.get_data()
assert res.status_code == 200
# Download
res = c.get("/download", headers=self._make_auth_headers(web.password))
res = c.get("/download")
res.get_data()
assert res.status_code == 200
assert (
@ -107,7 +96,7 @@ class TestWeb:
with web.app.test_client() as c:
# Download the first time
res = c.get("/download", headers=self._make_auth_headers(web.password))
res = c.get("/download")
res.get_data()
assert res.status_code == 200
assert (
@ -127,7 +116,7 @@ class TestWeb:
with web.app.test_client() as c:
# Download the first time
res = c.get("/download", headers=self._make_auth_headers(web.password))
res = c.get("/download")
res.get_data()
assert res.status_code == 200
assert (
@ -141,18 +130,8 @@ class TestWeb:
assert web.mode == "receive"
with web.app.test_client() as c:
# Load / without auth
res = c.get("/")
res.get_data()
assert res.status_code == 401
# Load / with invalid auth
res = c.get("/", headers=self._make_auth_headers("invalid"))
res.get_data()
assert res.status_code == 401
# Load / with valid auth
res = c.get("/", headers=self._make_auth_headers(web.password))
res = c.get("/",)
res.get_data()
assert res.status_code == 200
@ -171,7 +150,7 @@ class TestWeb:
)
with web.app.test_client() as c:
res = c.get("/", headers=self._make_auth_headers(web.password))
res = c.get("/")
res.get_data()
assert res.status_code == 200
@ -180,7 +159,6 @@ class TestWeb:
buffered=True,
content_type="multipart/form-data",
data={"file[]": (BytesIO(b"THIS IS A TEST FILE"), "new_york.jpg")},
headers=self._make_auth_headers(web.password),
)
res.get_data()
assert res.status_code == 200
@ -202,7 +180,6 @@ class TestWeb:
buffered=True,
content_type="multipart/form-data",
data={"text": "you know just sending an anonymous message"},
headers=self._make_auth_headers(web.password),
)
content = res.get_data()
assert res.status_code == 200
@ -237,7 +214,6 @@ class TestWeb:
"file[]": (BytesIO(b"THIS IS A TEST FILE"), "new_york.jpg"),
"text": "you know just sending an anonymous message",
},
headers=self._make_auth_headers(web.password),
)
content = res.get_data()
assert res.status_code == 200
@ -270,7 +246,6 @@ class TestWeb:
buffered=True,
content_type="multipart/form-data",
data={"file[]": (BytesIO(b"THIS IS A TEST FILE"), "new_york.jpg")},
headers=self._make_auth_headers(web.password),
)
content = res.get_data()
assert res.status_code == 200
@ -303,7 +278,6 @@ class TestWeb:
buffered=True,
content_type="multipart/form-data",
data={},
headers=self._make_auth_headers(web.password),
)
content = res.get_data()
assert res.status_code == 200
@ -326,26 +300,6 @@ class TestWeb:
res.get_data()
assert res.status_code == 200
def test_public_mode_off(self, temp_dir, common_obj):
web = web_obj(temp_dir, common_obj, "receive")
web.settings.set("general", "public", False)
with web.app.test_client() as c:
# Load / without auth
res = c.get("/")
res.get_data()
assert res.status_code == 401
# But static resources should work without auth
res = c.get(f"{web.static_url_path}/css/style.css")
res.get_data()
assert res.status_code == 200
# Load / with valid auth
res = c.get("/", headers=self._make_auth_headers(web.password))
res.get_data()
assert res.status_code == 200
def test_cleanup(self, common_obj, temp_dir_1024, temp_file_1024):
web = web_obj(temp_dir_1024, common_obj, "share", 3)
@ -356,12 +310,6 @@ class TestWeb:
assert os.path.exists(temp_dir_1024) is False
assert web.cleanup_filenames == []
def _make_auth_headers(self, password):
auth = base64.b64encode(b"onionshare:" + password.encode()).decode()
h = Headers()
h.add("Authorization", "Basic " + auth)
return h
class TestZipWriterDefault:
@pytest.mark.parametrize(
@ -450,8 +398,7 @@ def live_server(web):
proc.start()
url = "http://127.0.0.1:{}".format(port)
auth = base64.b64encode(b"onionshare:" + web.password.encode()).decode()
req = Request(url, headers={"Authorization": "Basic {}".format(auth)})
req = Request(url)
attempts = 20
while True:
@ -509,7 +456,7 @@ class TestRangeRequests:
url = "/download"
with web.app.test_client() as client:
resp = client.get(url, headers=self._make_auth_headers(web.password))
resp = client.get(url)
assert resp.headers["ETag"].startswith('"sha256:')
assert resp.headers["Accept-Ranges"] == "bytes"
assert resp.headers.get("Last-Modified") is not None
@ -524,7 +471,7 @@ class TestRangeRequests:
contents = f.read()
with web.app.test_client() as client:
resp = client.get(url, headers=self._make_auth_headers(web.password))
resp = client.get(url)
assert resp.status_code == 200
assert resp.data == contents
@ -536,7 +483,7 @@ class TestRangeRequests:
contents = f.read()
with web.app.test_client() as client:
headers = self._make_auth_headers(web.password)
headers = Headers()
headers.extend({"Range": "bytes=0-10"})
resp = client.get(url, headers=headers)
assert resp.status_code == 206
@ -572,7 +519,7 @@ class TestRangeRequests:
contents = f.read()
with web.app.test_client() as client:
headers = self._make_auth_headers(web.password)
headers = Headers()
resp = client.get(url, headers=headers)
assert resp.status_code == 200
@ -587,7 +534,7 @@ class TestRangeRequests:
url = "/download"
with web.app.test_client() as client:
headers = self._make_auth_headers(web.password)
headers = Headers()
resp = client.get(url, headers=headers)
assert resp.status_code == 200
last_mod = resp.headers["Last-Modified"]
@ -602,7 +549,7 @@ class TestRangeRequests:
url = "/download"
with web.app.test_client() as client:
headers = self._make_auth_headers(web.password)
headers = Headers()
resp = client.get(url, headers=headers)
assert resp.status_code == 200
@ -621,11 +568,6 @@ class TestRangeRequests:
resp = client.get(url, headers=headers)
assert resp.status_code == 206
def _make_auth_headers(self, password):
auth = base64.b64encode(b"onionshare:" + password.encode()).decode()
h = Headers()
h.add("Authorization", "Basic " + auth)
return h
@pytest.mark.skipif(sys.platform != "Linux", reason="requires Linux")
@check_unsupported("curl", ["--version"])
@ -638,12 +580,9 @@ class TestRangeRequests:
with live_server(web) as url:
# Debugging help from `man curl`, on error 33
# 33 HTTP range error. The range "command" didn't work.
auth_header = self._make_auth_headers(web.password)
subprocess.check_call(
[
"curl",
"-H",
str(auth_header).strip(),
"--output",
str(download),
"--continue-at",
@ -663,12 +602,9 @@ class TestRangeRequests:
download.write("x" * 10)
with live_server(web) as url:
auth_header = self._make_auth_headers(web.password)
subprocess.check_call(
[
"wget",
"--header",
str(auth_header).strip(),
"--continue",
"-O",
str(download),

View File

@ -22,12 +22,9 @@
"gui_receive_stop_server": "Staak Ontvangmodus",
"gui_receive_stop_server_autostop_timer": "Staak Ontvangmodus ({} oorblywend)",
"gui_copy_url": "Kopieer Adres",
"gui_copy_hidservauth": "Kopieer HidServAuth",
"gui_canceled": "Gekanselleer",
"gui_copied_url_title": "OnionShare-adres Gekopieer",
"gui_copied_url": "OnionShare-adres na knipbord gekopieer",
"gui_copied_hidservauth_title": "HidServAuth Gekopieer",
"gui_copied_hidservauth": "HidServAuth-reël na knipbord gekopieer",
"gui_waiting_to_start": "Geskeduleer om oor {} te begin. Klik om te kanselleer.",
"gui_please_wait": "Begin… Klik om te kanselleer.",
"gui_quit_title": "Nie so haastig nie",
@ -35,14 +32,12 @@
"gui_receive_quit_warning": "U is besig om lêers te ontvang. Is u seker u wil OnionShare afsluit?",
"gui_quit_warning_quit": "Sluit Af",
"gui_quit_warning_dont_quit": "Kanselleer",
"error_rate_limit": "Iemand het te veel verkeerde raaiskote met u wagwoord probeer, daarom het OnionShare die bediener gestaak. Begin weer deel en stuur n nuwe adres aan die ontvanger.",
"zip_progress_bar_format": "Samepersing: %p%",
"error_stealth_not_supported": "U benodig ten minste Tor 0.2.6.1-alfa (of TorBrowser 6.5) en python3-stem 1.5.0 om kliënt-magtiging te gebruik.",
"error_ephemeral_not_supported": "OnionShare vereis ten minste Tor 0.2.7.1 en python3-stem 1.4.0.",
"gui_settings_window_title": "Instellings",
"gui_settings_whats_this": "<a href='{0:s}'>Wat is dit?</a>",
"gui_settings_stealth_option": "Gebruik kliëntmagtiging",
"gui_settings_stealth_hidservauth_string": "Deur u privaat sleutel vir herbruik bewaar te hê kan u nou klik om u HidServAuth te kopieer.",
"gui_settings_autoupdate_label": "Soek na nuwe weergawe",
"gui_settings_autoupdate_option": "Laat my weet wanneer n nuwe weergawe beskikbaar is",
"gui_settings_autoupdate_timestamp": "Laas gesoek: {}",
@ -114,7 +109,6 @@
"gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Die outo-stoptyd kan nie dieselfde of vroeër as die outo-begintyd wees nie. Pas dit aan om te begin deel.",
"share_via_onionshare": "Deel d.m.v. OnionShare",
"gui_connect_to_tor_for_onion_settings": "Koppel aan Tor om uidiensinstellings te sien",
"gui_use_legacy_v2_onions_checkbox": "Gebruik argaïese adresse",
"gui_save_private_key_checkbox": "Gebruik n blywende adres",
"gui_share_url_description": "<b>Enigeen</b> met hierdie OnionShare-adres kan u lêers d.m.v. die <b>Tor Browser aflaai</b>: <img src=\"{}\"/>",
"gui_website_url_description": "<b>Enigeen</b> met hierdie OnionShare-adres kan u webwerf d.m.v. die <b>Tor Browser besoek</b>: <img src='{}' />",

View File

@ -45,14 +45,11 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -63,14 +60,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "",
"gui_quit_warning_dont_quit": "ተወው",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -135,7 +130,6 @@
"gui_server_started_after_autostop_timer": "",
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "أوقف طور التلقّي (باقي {})",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "نسخ العنوان",
"gui_copy_hidservauth": "نسخ مُصادقة الخدمة المخفية",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "تم الإلغاء",
"gui_copied_url_title": "OnionShare تمّ نسخ عنوان",
"gui_copied_url": "تمّ نسخ عوان اونينشير إلى الحافظة",
"gui_copied_hidservauth_title": "تم نسخ مُصادقة الخدمة المخفية",
"gui_copied_hidservauth": "تم نسخ سطر مصادقة الخدمة المخفية إلى الحافظة",
"gui_please_wait": "جاري البدء… اضغط هنا للإلغاء.",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "يجري حالبا تلقّي ملفات. أمتأكد أنك تريد إنهاء OnionShare؟",
"gui_quit_warning_quit": "أنهِ",
"gui_quit_warning_dont_quit": "ألغِ",
"error_rate_limit": "أجرى شخص ما محاولات كثيرة خاطئة لتخمين كلمة السر، لذلك فقد تمّ إيقاف الخادم. عاوِد المُشاركة و أرسل إلى المتلقّي عنوان المشاركة الجديد.",
"zip_progress_bar_format": "جاري الضغط: %p%",
"error_stealth_not_supported": "لاستعمال استيثاق العميل تلزمك إصدارة تور 0.2.9.1-alpha أو (متصفّح تور 6.5) و python3-stem الإصدارة 1.5.0، أو ما بعدها.",
"error_ephemeral_not_supported": "يتطلّب OnionShare كلّا من إصدارة تور 0.2.7.1 و الإصدارة 1.4.0 من python3-stem.",
"gui_settings_window_title": "الإعدادات",
"gui_settings_whats_this": "<a href='{0:s}'>ما هذا؟</a>",
"gui_settings_stealth_option": "فعّل استيثاق العميل",
"gui_settings_stealth_hidservauth_string": "بحفظ مفتاحك السّرّيّ لاستعماله لاحقًا صار بوسعك النقر هنا لنسخ HidServAuth.",
"gui_settings_autoupdate_label": "تحقق من وجود إصدار الجديد",
"gui_settings_autoupdate_option": "أخطرني عند وجود إصدارة أحدث",
"gui_settings_autoupdate_timestamp": "تاريخ آخر تحقُق: {}",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "بلغ مؤقِّت الإيقاف أجله قبل اشتغال الخادوم. أنشئ مشاركة جديدة.",
"gui_server_autostop_timer_expired": "انتهى وقت الايقاف التلقائي للمشاركة. من فضلك عدّله للبدء بالمشاركة.",
"share_via_onionshare": "شارك باستعمال OnionShare",
"gui_use_legacy_v2_onions_checkbox": "استخدم صيغة العناوين التاريخية",
"gui_save_private_key_checkbox": "استخدم عنوانًا دائمًا",
"gui_share_url_description": "<b>أيّ شخص</b> لديه مسار OnionShare هذا سيكون بوسعه <b>تنزيل</b> تلك الملفات باستعمال <b>متصفّح تور</b>: <img src='{}' />",
"gui_receive_url_description": "<b>أيّ شخص</b> لديه مسار OnionShare هذا سيكون بوسعه <b>رفع</b> ملفات إلى حاسوبك باستعمال <b>متصفّح تور</b>: <img src='{}' />",
@ -248,7 +242,6 @@
"mode_settings_receive_data_dir_browse_button": "تصفح",
"mode_settings_receive_data_dir_label": "حفظ الملفات إلى",
"mode_settings_share_autostop_sharing_checkbox": "إيقاف المشاركة بعد إرسال الملفات ( قم بإلغاء التحديد للسماح بتنزيل الملفات الفردية)",
"mode_settings_client_auth_checkbox": "استخدم ترخيص العميل",
"mode_settings_legacy_checkbox": "استخدم عنوانًا قديمًا (النسخة الثانية من خدمة onion، لا ينصح بها)",
"mode_settings_autostop_timer_checkbox": "إيقاف خدمة Onion في ميعاد مجدول",
"mode_settings_autostart_timer_checkbox": "بدء خدمة Onion في ميعاد مجدول",
@ -283,4 +276,4 @@
"gui_color_mode_changed_notice": "يُرجى إعادة تشغيل OnionShare من أجل تطبيق المظهر باللون الجديد.",
"gui_open_folder_error": "فشل فتح ملف باستخدام xdg-open. الملف هنا: {}",
"gui_chat_url_description": "<b>أي شخص </b> يوجد معه عنوان OnionShare يمكنه <b>الانضمام إلى غرفة المحادثة هذه </b> باستخدام متصفح تور <b>Tor Browser</b><img src='{}' />"
}
}

View File

@ -45,14 +45,11 @@
"gui_receive_stop_server_autostop_timer": "Спрете получаващия режим ({} остават)",
"gui_receive_stop_server_autostop_timer_tooltip": "Автоматично спиращият таймер спира в {}",
"gui_copy_url": "Копирайте адрес",
"gui_copy_hidservauth": "Копирайте HidServAuth",
"gui_downloads": "Свалете история",
"gui_no_downloads": "Още няма изтегляния",
"gui_canceled": "Отменен",
"gui_copied_url_title": "OnionShare адресът е копиран",
"gui_copied_url": "OnionShare адресът е копиран към клипборда",
"gui_copied_hidservauth_title": "HidServAuth е копиран",
"gui_copied_hidservauth": "HidServAuth редът е копиран към клипборда",
"gui_please_wait": "Започва... кликни за отменяне.",
"gui_download_upload_progress_complete": "%p%, {0:s} изтече.",
"gui_download_upload_progress_starting": "{0:s}, %p% (изчисляване)",
@ -63,14 +60,12 @@
"gui_receive_quit_warning": "Намирате се в процес на получаване на файлове. Сигурни ли сте, че искате да спрете OnionShare?",
"gui_quit_warning_quit": "Изход",
"gui_quit_warning_dont_quit": "Отказ",
"error_rate_limit": "Някой е направил прекалено много грешни опити за адреса Ви, което означава, че може да се опитват да го отгатнат, така че OnionShare спря сървъра. Стартирайте споделянето отново и изпратете нов адрес на получателя за споделяне.",
"zip_progress_bar_format": "Компресира: %p%",
"error_stealth_not_supported": "За да използвате ауторизация на клиента Ви трябва поне Tor 0.2.9.1-alpha (или на браузъра 6.5) и python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare изисква поне Tor 0.2.7.1 и python3-stem 1.4.0.",
"gui_settings_window_title": "Настройки",
"gui_settings_whats_this": "<a href='{0:s}'>Какво е това?</a>",
"gui_settings_stealth_option": "Използвайте клиент ауторизация (наследствен)",
"gui_settings_stealth_hidservauth_string": "След като Вашия частен ключ бе запазен за повторна употреба, можете сега да кликнете, за да копирате Вашия HidServAuth.",
"gui_settings_autoupdate_label": "Провери за нова версия",
"gui_settings_autoupdate_option": "Уведоми ме, когато е налице нова версия",
"gui_settings_autoupdate_timestamp": "Последна проверка: {}",
@ -135,7 +130,6 @@
"gui_server_started_after_autostop_timer": "Автоматично спиращият таймер спря преди сървърът да стартира.\nМоля направете нов дял.",
"gui_server_autostop_timer_expired": "Автоматично спиращият таймер спря.\nМоля актуализирайте за да започнете споделяне.",
"share_via_onionshare": "Споделете го чрез OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Използвайте стари адреси",
"gui_save_private_key_checkbox": "Използвайте постоянни адреси (стари)",
"gui_share_url_description": "<b>Всеки</b> с този OnionShare адрес може да <b>свали</b> Вашите файлове използвайки <b>Тор браузера</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Всеки</b> с този OnionShare адрес може да <b>качи</b> файлове на Вашия компютър, използвайки <b>Тор браузера</b>: <img src='{}' />",

View File

@ -45,14 +45,11 @@
"gui_receive_stop_server_autostop_timer": "রিসিভ মোড বন্ধ করো({} বাকি)",
"gui_receive_stop_server_autostop_timer_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে",
"gui_copy_url": "এড্রেস কপি করো",
"gui_copy_hidservauth": "হিডসার্ভঅথ কপি করো",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "বাতিল করা হয়েছে",
"gui_copied_url_title": "OnionShare ঠিকানা কপি করা হয়েছে",
"gui_copied_url": "OnionShare ঠিকানাটি ক্লিপবোর্ডে কপি করা হয়েছে",
"gui_copied_hidservauth_title": "HidServAuth কপি করা হয়েছে",
"gui_copied_hidservauth": "HidServAuth লাইনটি ক্লিপবোর্ডে কপি করা হয়েছে",
"gui_please_wait": "চালু করছি… বাতিল করতে এখানে ক্লিক করো।",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -63,7 +60,6 @@
"gui_receive_quit_warning": "আপনি ফাইল গ্রহণের প্রক্রিয়ার মধ্যে আছেন। আপনি কি আসলেই OnionShare বন্ধ করতে চান?",
"gui_quit_warning_quit": "প্রস্থান করো",
"gui_quit_warning_dont_quit": "বাতিল",
"error_rate_limit": "কেউ একজন অসংখ্যবার তোমার পাসওয়ার্ডটি অনুমান করার ব্যর্থ চেষ্টা করেছে, তাই OnionShare নিরাপত্তার জন্য সার্ভার বন্ধ করে দিয়েছে। তাই, নতুন করে আবার তোমার ফাইল(গুলো)শেয়ার করো এবং প্রাপককে নতুন এড্রেসটি দিন।",
"zip_progress_bar_format": "কমপ্রেস করছি: %p%",
"error_stealth_not_supported": "ক্লায়েন্ট অথোরাইজেশন ব্যবহার করার জন্য, তোমার অন্তত Tor 0.2.9.1-alpha (or Tor Browser 6.5) এবং python3-stem 1.5.0 দুটোই থাকতে হবে।",
"error_ephemeral_not_supported": "OnionShare ব্যবহার করার জন্য Tor 0.2.9.1-alpha (or Tor Browser 6.5) এবং python3-stem 1.5.0 দুটোই থাকতে হবে।",
@ -135,7 +131,6 @@
"gui_server_started_after_autostop_timer": "সার্ভার শুরু হওয়ার আগেই স্বয়ংক্রিয়-বন্ধ ঘড়ির সময় শেষ হয়ে গেছে। অনুগ্রহ করে আবার নতুনভাবে শেয়ার করো।",
"gui_server_autostop_timer_expired": "অটো-স্টপ টাইমারের সময় ইতিমধ্যেই শেষ হয়ে গিয়েছে। দয়া করে, শেয়ারিং শুরু করতে নতুনভাবে সময় সেট করো।",
"share_via_onionshare": "OnionShare এর মাধমে শেয়ার করো",
"gui_use_legacy_v2_onions_checkbox": "লেগাসি ঠিকানা ব্যবহার করো",
"gui_save_private_key_checkbox": "একটি স্থায়ী ঠিকানা ব্যবহার করো",
"gui_share_url_description": "যার কাছেই এই ঠিকানা থাকবে সে ই <b>টর ব্রাউজার</b> ব্যবহার করে এই OnionShare ঠিকানায় গিয়ে <b>যে কেউ</b> আপনার ফাইল(গুলি) <b>ডাউনলোড</b> করতে পারবে:<img src='{}' />",
"gui_receive_url_description": "যার কাছেই এই ঠিকানা থাকবে সে ই <b>টর ব্রাউজার</b> ব্যবহার করে এই OnionShare ঠিকানায় গিয়ে <b>যে কেউ</b> আপনার কম্পিউটারে ফাইল <b>আপলোড</b> করতে পারবে:<img src='{}' />",
@ -243,7 +238,6 @@
"gui_new_tab_receive_description": "তোমার কম্পিউটারকে একটি অনলাইন ড্রপবক্স বানাও। অন্যরা টর ব্রাউজার ব্যবহার করে তোমার কম্পিউটারে ফাইল পাঠাতে পারবে।",
"gui_new_tab_share_description": "অন্য কাউকে পাঠাতে তোমার কম্পিউটারের ফাইল নির্বাচন করো. তুমি যাকে বা যাদের কাছে ফাইল পাঠাতে চাও তাকে বা তাদেরকে তোমার কাছ থেকে ফাইল ডাউনলোড করতে টর ব্রাউজার ব্যবহার করতে হবে।",
"mode_settings_share_autostop_sharing_checkbox": "ফাইল পাঠানোর পর শেয়ার করা বন্ধ করো (স্বতন্ত্র ফাইল ডাউনলোড এর মঞ্জুরি দিতে টিক চিহ্ন তুলে দাও)",
"mode_settings_client_auth_checkbox": "ক্লায়েন্ট অথোরাইজেশন ব্যবহার করো",
"mode_settings_autostop_timer_checkbox": "নির্ধারিত সময়ে অনিওন সেবা বন্ধ করো",
"mode_settings_autostart_timer_checkbox": "নির্ধারিত সময়ে অনিওন সেবা শুরু করো",
"mode_settings_persistent_checkbox": "এই ট্যাব সংরক্ষণ করো, এবং যখন আমি অনিওনশেয়ার খুলব তখন এটি স্বয়ংক্রিয়ভাবে খুলো",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "Atura el mode de recepció (queden {})",
"gui_receive_stop_server_autostop_timer_tooltip": "El temporitzador acaba a {}",
"gui_copy_url": "Copia l'adreça",
"gui_copy_hidservauth": "Copia el HidServAuth",
"gui_downloads": "Historial de descàrregues",
"gui_no_downloads": "No n'hi ha cap",
"gui_canceled": "S'ha cancel·lat",
"gui_copied_url_title": "S'ha copiat l'adreça OnionShare",
"gui_copied_url": "S'ha copiat l'adreça OnionShare al porta-retalls",
"gui_copied_hidservauth_title": "S'ha copiat el HidServAuth",
"gui_copied_hidservauth": "S'ha copiat la línia HidServAuth al porta-retalls",
"gui_please_wait": "S'està iniciant… Feu clic per a cancel·lar.",
"gui_download_upload_progress_complete": "Han passat %p%, {0:s}.",
"gui_download_upload_progress_starting": "{0:s}, %p% (s'està calculant)",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "Encara s'estan rebent fitxers. Segur que voleu sortir de l'OnionShare?",
"gui_quit_warning_quit": "Surt",
"gui_quit_warning_dont_quit": "Cancel·la",
"error_rate_limit": "Algú ha fet massa intents incorrectes intentant endevinar la vostra contrasenya. Per això l'OnionShare ha aturat el servidor. Torneu a començar el procés i envieu una adreça nova al receptor.",
"zip_progress_bar_format": "S'està comprimint: %p%",
"error_stealth_not_supported": "Per a fer servir l'autorització de client, necessiteu versions iguals o superiors a Tor 0.2.9.1-alpha (o Tor Browser 6.5) i python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare necessita almenys les versions Tor 0.2.7.1 i python3-stem 1.4.0.",
"gui_settings_window_title": "Paràmetres",
"gui_settings_whats_this": "<a href='{0:s}'>Què és això?</a>",
"gui_settings_stealth_option": "Fes servir autorització de client",
"gui_settings_stealth_hidservauth_string": "Ara que ja heu desat la clau privada per a reutilitzar-la, podeu fer clic per a copiar el HidServAuth.",
"gui_settings_autoupdate_label": "Comprova si hi ha versions noves",
"gui_settings_autoupdate_option": "Notifica'm si hi ha una actualització disponible",
"gui_settings_autoupdate_timestamp": "Última comprovació: {}",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "El temporitzador de finalització automàtica ha acabat abans que s'iniciés el servidor. Torneu a compartir-ho.",
"gui_server_autostop_timer_expired": "El temporitzador de finalització automàtica ja s'ha acabat. Ajusteu-lo per a poder compartir.",
"share_via_onionshare": "Comparteix-ho amb l'OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Fes servir adreces amb un format antic",
"gui_save_private_key_checkbox": "Fes servir una adreça persistent",
"gui_share_url_description": "<b>Qualsevol persona</b> amb aquesta adreça d'OnionShare pot <b>baixar</b> els vostres fitxers fent servir el <b>Navegador Tor</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Qualsevol persona</b> amb aquesta adreça d'OnionShare pot <b>pujar</b> fitxers al vostre ordinador fent servir el <b>Navegador Tor</b>: <img src='{}' />",
@ -227,7 +221,6 @@
"hours_first_letter": "h",
"minutes_first_letter": "min",
"seconds_first_letter": "s",
"invalid_password_guess": "Intent de contrasenya incorrecte",
"gui_website_url_description": "<b>Qualsevol persona</b> amb aquesta adreça d'OnionShare pot <b>visitar</b> el vostre lloc web fent servir el <b>Navegador Tor</b>: <img src='{}' />",
"gui_mode_website_button": "Publica el lloc web",
"systray_site_loaded_title": "S'ha carregat el lloc web",
@ -250,7 +243,6 @@
"mode_settings_receive_data_dir_browse_button": "Navega",
"mode_settings_receive_data_dir_label": "Desa els fitxers a",
"mode_settings_share_autostop_sharing_checkbox": "Atura la compartició després que s'hagin enviat els fitxers (desmarqueu-ho per a permetre baixar fitxers individuals)",
"mode_settings_client_auth_checkbox": "Usa autorització del client",
"mode_settings_legacy_checkbox": "Usa una adreça antiga (servei ceba v2, no recomanat)",
"mode_settings_autostop_timer_checkbox": "Atura el servei ceba a una hora programada",
"mode_settings_autostart_timer_checkbox": "Inicia el servei ceba a una hora programada",

View File

@ -24,17 +24,13 @@
"gui_receive_stop_server_autostop_timer": "Mod ya wergirtinê betal bike ({} maye)",
"gui_receive_flatpak_data_dir": "Ji ber tu Onionshare bi rêya Flatpak bar kir, pêwîste tu belge di dosyayek di nav ~/OnionShare qeyd bikî.",
"gui_copy_url": "Malper kopî bike",
"gui_copy_hidservauth": "HidServAuth kopî bike",
"gui_canceled": "Betal bû",
"gui_copied_url_title": "Malpera OnionShare kopî bû",
"gui_copied_url": "Malpera OnionShare lis ser taxtê kopî bû",
"gui_copied_hidservauth_title": "HidServAuth kopî bû",
"gui_copied_hidservauth": " HidServAuth xet li ser taxtê kopî bû",
"gui_show_url_qr_code": "QR kod nîşan bide",
"gui_qr_code_dialog_title": "OnionShare QR kod",
"gui_waiting_to_start": "Pilankirî ye di {} destpê bike. Bitkîne ji bo betal bike.",
"gui_please_wait": "Destpê dike...Bitikîne ji bo betal bike.",
"error_rate_limit": "Kesekî ji bo texmîn kirna şîfre gelek hewldanên nerast pêk anî, ji ber wê OnionShare weşan betal kir. Weşan ji nû ve destpê bike û malpera parvekirinê ji nû ve ji bo pêwendiyê xwe re bişîne.",
"zip_progress_bar_format": "Dewisandin %p%",
"gui_settings_window_title": "Ayar",
"gui_settings_autoupdate_label": "Ji bo versyonekî nû kontrol bike",
@ -168,7 +164,6 @@
"mode_settings_autostart_timer_checkbox": "Servîsa onion di wextekî ayarkirî despê bike",
"mode_settings_autostop_timer_checkbox": "Servîsa onion di wextekî ayarkirî biseknîne",
"mode_settings_legacy_checkbox": "Malperekî kêrhatî bişxulîne(servîsa onion v2 nayê pêsniyar kirin)",
"mode_settings_client_auth_checkbox": "Rastbûyîna muşterî kontrol bike",
"mode_settings_share_autostop_sharing_checkbox": "Parvekirin piştî name haitn şandin biseknîne (Ji bo destûra berjêrkirina nameyên yekane tikandin derbixe)",
"mode_settings_receive_data_dir_label": "Nameyan li qeyd bike",
"mode_settings_receive_data_dir_browse_button": "Bigere",

View File

@ -20,11 +20,9 @@
"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": "Historie stahování",
"gui_canceled": "Zrušeno",
"gui_copied_url": "URL zkopírováno do schránky",
"gui_copied_hidservauth": "HidServAuth zkopírováno do schránky",
"gui_please_wait": "Spouštění... Klikněte pro zrušení.",
"gui_download_upload_progress_complete": "%p%, Uplynulý čas: {0:s}",
"gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)",
@ -33,7 +31,6 @@
"gui_share_quit_warning": "Jste si jistí, že chcete odejít? URL, 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": "K autorizaci klienta potřebujete alespoň Tor 0.2.9.1-alpha (or Tor Browser 6.5) a 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.",
@ -78,11 +75,9 @@
"gui_receive_start_server": "Spustit mód přijímání",
"gui_receive_stop_server": "Zastavit přijímání",
"gui_receive_stop_server_autostop_timer": "Zastavit mód přijímání ({} zbývá)",
"gui_copied_hidservauth_title": "Zkopírovaný HidServAuth token",
"gui_copied_url_title": "OnionShare Address zkopírována",
"gui_quit_title": "Ne tak rychle",
"gui_settings_stealth_option": "Autorizace klienta",
"gui_settings_stealth_hidservauth_string": "Uložení priváního klíče pro znovu použití znamená, že teď můžete zkopírovat Váš HidServAuth.",
"gui_settings_autoupdate_label": "Kontrola nové verze",
"gui_settings_autoupdate_option": "Upozornit na dostupnost nové verze",
"gui_settings_autoupdate_timestamp": "Poslední kontrola {}",

View File

@ -33,11 +33,9 @@
"gui_share_start_server": "Begynd at dele",
"gui_share_stop_server": "Stop deling",
"gui_copy_url": "Kopiér adresse",
"gui_copy_hidservauth": "Kopiér HidServAuth",
"gui_downloads": "Downloadhistorik",
"gui_canceled": "Annulleret",
"gui_copied_url": "OnionShare-adressen blev kopieret til udklipsholderen",
"gui_copied_hidservauth": "HidServAuth-linjen blev kopieret til udklipsholderen",
"gui_please_wait": "Starter ... klik for at annullere.",
"gui_download_upload_progress_complete": ".",
"gui_download_upload_progress_starting": "{0:s}, %p% (udregner anslået ankomsttid)",
@ -46,13 +44,11 @@
"gui_share_quit_warning": "Du er ved at afsende filer. Er du sikker på, at du vil afslutte OnionShare?",
"gui_quit_warning_quit": "Afslut",
"gui_quit_warning_dont_quit": "Annuller",
"error_rate_limit": "Nogen har forsøgt at gætte din adgangskode for mange gange, så OnionShare har stoppet serveren. Begynd at dele igen og send en ny adresse til modtageren for at dele.",
"zip_progress_bar_format": "Komprimerer: %p%",
"error_stealth_not_supported": "For at bruge klientautentifikation skal du have mindst Tor 0.2.9.1-alpha (eller Tor Browser 6.5) og python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare kræver mindst både Tor 0.2.7.1 og python3-stem 1.4.0.",
"gui_settings_window_title": "Indstillinger",
"gui_settings_stealth_option": "Brug klientautentifikation",
"gui_settings_stealth_hidservauth_string": "Ved at have gemt din private nøgle til at blive brugt igen, betyder det at du nu kan klikke for at kopiere din HidServAuth.",
"gui_settings_autoupdate_label": "Søg efter ny version",
"gui_settings_autoupdate_option": "Giv mig besked når der findes en ny version",
"gui_settings_autoupdate_timestamp": "Sidste søgning: {}",
@ -113,7 +109,6 @@
"share_via_onionshare": "Del via OnionShare",
"gui_save_private_key_checkbox": "Brug en vedvarende adresse",
"gui_copied_url_title": "Kopierede OnionShare-adresse",
"gui_copied_hidservauth_title": "Kopierede HidServAuth",
"gui_quit_title": "Klap lige hesten",
"gui_settings_tor_bridges_meek_lite_azure_radio_option": "Brug indbyggede meek_lite (Azure) udskiftelige transporter",
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Brug indbyggede meek_lite (Azure) udskiftelige transporter (kræver obfs4proxy)",
@ -145,7 +140,6 @@
"gui_no_downloads": "Ingen downloads endnu",
"error_tor_protocol_error_unknown": "Der opstod en ukendt fejl med Tor",
"error_invalid_private_key": "Den private nøgletype understøttes ikke",
"gui_use_legacy_v2_onions_checkbox": "Brug udgåede adresser",
"gui_status_indicator_share_stopped": "Klar til at dele",
"gui_status_indicator_share_working": "Starter …",
"gui_status_indicator_share_started": "Deler",
@ -230,7 +224,6 @@
"hours_first_letter": "t",
"minutes_first_letter": "m",
"seconds_first_letter": "s",
"invalid_password_guess": "Ugyldigt adgangskodegæt",
"gui_website_url_description": "<b>Alle</b> med OnionShare-adressen kan <b>besøge</b> dit websted med <b>Tor Browser</b>: <img src='{}' />",
"gui_mode_website_button": "Udgiv websted",
"gui_website_mode_no_files": "Der er endnu ikke delt noget websted",
@ -244,7 +237,6 @@
"gui_new_tab_receive_description": "Brug din computer som en online-dropbox. Andre vil kunne bruge Tor Browser til at sende filer til din computer.",
"mode_settings_share_autostop_sharing_checkbox": "Stop deling efter filerne er blevet sendt (fravælg for at gøre det muligt at downloade individuelle filer)",
"mode_settings_legacy_checkbox": "Brug en udgået adresse (v2 oniontjeneste, anbefales ikke)",
"mode_settings_client_auth_checkbox": "Brug klientautentifikation",
"mode_settings_autostop_timer_checkbox": "Stop oniontjeneste på det planlagte tidspunkt",
"mode_settings_autostart_timer_checkbox": "Start oniontjeneste på det planlagte tidspunkt",
"mode_settings_persistent_checkbox": "Gem fanebladet og åbn det automatisk når jeg åbner OnionShare",

View File

@ -34,9 +34,7 @@
"systray_download_completed_message": "Der Benutzer hat deine Dateien heruntergeladen",
"systray_download_canceled_title": "OnionShare Download abgebrochen",
"systray_download_canceled_message": "Der Benutzer hat den Download abgebrochen",
"gui_copy_hidservauth": "HidServAuth kopieren",
"gui_canceled": "Abgebrochen",
"gui_copied_hidservauth_title": "HidServAuth kopiert",
"gui_quit_warning_quit": "Beenden",
"gui_quit_warning_dont_quit": "Abbrechen",
"gui_settings_window_title": "Einstellungen",
@ -83,7 +81,6 @@
"gui_receive_stop_server_autostop_timer_tooltip": "Zeit läuft in {} ab",
"gui_no_downloads": "Bisher keine Downloads",
"gui_copied_url_title": "OnionShare-Adresse kopiert",
"gui_copied_hidservauth": "HidServAuth-Zeile in die Zwischenablage kopiert",
"gui_download_upload_progress_complete": "%p%, {0:s} vergangen.",
"gui_download_upload_progress_starting": "{0:s}, %p% (berechne)",
"gui_download_upload_progress_eta": "{0:s}, Voraussichtliche Dauer: {1:s}, %p%",
@ -91,7 +88,6 @@
"gui_quit_title": "Nicht so schnell",
"gui_share_quit_warning": "Du versendest gerade Dateien. Bist du sicher, dass du OnionShare beenden willst?",
"gui_receive_quit_warning": "Du empfängst gerade Dateien. Bist du sicher, dass du OnionShare beenden willst?",
"error_rate_limit": "Jemand hat zu viele falsche Versuche gemacht, dein Passwort zu erraten, deswegen hat OnionShare die Freigabe gestoppt. Starte die Freigabe erneut und sende dem Empfänger eine neue OnionShare-Adresse.",
"zip_progress_bar_format": "Komprimiere: %p%",
"error_stealth_not_supported": "Um die Client-Authorisierung zu nutzen, benötigst du mindestens Tor 0.2.9.1-alpha (oder Tor Browser 6.5) und python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare benötigt mindestens sowohl Tor 0.2.7.1 als auch python3-stem 1.4.0.",
@ -128,7 +124,6 @@
"gui_tor_connection_error_settings": "Versuche in den Einstellungen zu ändern, wie sich OnionShare mit dem Tor-Netzwerk verbindet.",
"gui_tor_connection_canceled": "Konnte keine Verbindung zu Tor herstellen.\n\nStelle sicher, dass du mit dem Internet verbunden bist, öffne OnionShare erneut und richte die Verbindung zu Tor ein.",
"share_via_onionshare": "Teilen über OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Nutze das alte Adressformat",
"gui_save_private_key_checkbox": "Nutze eine gleichbleibende Adresse",
"gui_share_url_description": "<b>Jeder</b> mit dieser OnionShare-Adresse kann deine Dateien mit dem <b>Tor Browser</b> <b>herunterladen</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Jeder</b> mit dieser OnionShare-Adresse kann mit dem <b>Tor Browser</b> Dateien auf deinen Computer <b>hochladen</b>: <img src='{}' />",
@ -171,7 +166,6 @@
"gui_settings_language_changed_notice": "Starte OnionShare neu, damit die neue Sprache übernommen wird.",
"help_config": "Ort deiner eigenen JSON Konfigurationsdatei (optional)",
"timeout_upload_still_running": "Warte bis Upload vollständig ist",
"gui_settings_stealth_hidservauth_string": "Da dein privater Schlüssel jetzt gespeichert wurde, um ihn später erneut zu nutzen, kannst du jetzt klicken, um deinen HidServAuth zu kopieren.",
"gui_settings_connection_type_bundled_option": "Die integrierte Tor-Version von OnionShare nutzen",
"settings_error_socket_file": "Kann nicht mittels des Tor-Controller-Socket {} verbinden.",
"gui_server_started_after_autostop_timer": "Die Zeit ist abgelaufen, bevor der Server gestartet werden konnte. Bitte starte einen erneuten Teilvorgang.",
@ -227,7 +221,6 @@
"hours_first_letter": "h",
"minutes_first_letter": "m",
"seconds_first_letter": "s",
"invalid_password_guess": "Ungültige Passwortratschläge",
"gui_website_url_description": "<b>Jeder</b> mit dieser OnionShare-Adresse kann deine Webseite mit dem <b>Tor Browser</b> <b>ansehen</b>: <img src='{}' />",
"gui_mode_website_button": "Webseite veröffentlichen",
"systray_site_loaded_title": "Webseite geladen",
@ -245,7 +238,6 @@
"mode_settings_website_disable_csp_checkbox": "Content-Security-Policy-Header deaktivieren (ermöglicht es, Ressourcen von Drittanbietern auf deiner Onion-Webseite einzubinden)",
"mode_settings_receive_data_dir_browse_button": "Durchsuchen",
"mode_settings_receive_data_dir_label": "Dateien speichern unter",
"mode_settings_client_auth_checkbox": "Benutze Client-Authorisierung",
"mode_settings_legacy_checkbox": "Benutze ein veraltetes Adressformat (Onion-Dienste-Adressformat v2, nicht empfohlen)",
"mode_settings_autostop_timer_checkbox": "Onion-Dienst zu einem festgelegten Zeitpunkt stoppen",
"mode_settings_autostart_timer_checkbox": "Onion-Dienst zu einem festgelegten Zeitpunkt starten",
@ -305,4 +297,4 @@
"gui_status_indicator_chat_scheduled": "Geplant…",
"gui_status_indicator_chat_working": "Startet…",
"gui_status_indicator_chat_stopped": "Bereit zum Chatten"
}
}

View File

@ -62,7 +62,6 @@
"gui_receive_quit_warning": "Αυτή τη στιγμή παραλαμβάνονται αρχείων. Είστε σίγουρος/η πώς θέλετε να κλείσετε το OnionShare;",
"gui_quit_warning_quit": "Έξοδος",
"gui_quit_warning_dont_quit": "Ακύρωση",
"error_rate_limit": "Κάποιος/α προσπάθησε να μαντέψει τον κωδικό σας πολλές φορές. Για αυτό, το OnionShare τερματίστηκε αυτόματα. Πρέπει να ξεκινήσετε πάλι τον διαμοιρασμό και να στείλετε στον/ην παραλήπτη/τρια μια νέα διεύθυνση για να διαμοιραστούν αρχεία και μηνύματα μαζί σας.",
"zip_progress_bar_format": "Γίνεται συμπίεση: %p%",
"error_stealth_not_supported": "Για τη χρήση εξουσιοδότησης πελάτη, χρειάζεστε τουλάχιστον το Tor 0.2.9.1-alpha (ή τον Tor Browser 6.5) και το python3-stem 1.5.0.",
"error_ephemeral_not_supported": "Το OnionShare απαιτεί τουλάχιστον το Tor 0.2.7.1 και το python3-stem 1.4.0.",
@ -134,7 +133,6 @@
"gui_server_started_after_autostop_timer": "Το χρονόμετρο αυτόματης διακοπής τελείωσε πριν την εκκίνηση του server. Παρακαλώ κάντε ένα νέο διαμοιρασμό.",
"gui_server_autostop_timer_expired": "Το χρονόμετρο αυτόματης διακοπής έχει ήδη τελειώσει. Παρακαλώ ρυθμίστε το για να ξεκινήσετε το διαμοιρασμό.",
"share_via_onionshare": "Μοιραστείτε μέσω OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Χρήση \"παραδοσιακών\" διευθύνσεων",
"gui_save_private_key_checkbox": "Χρήση μόνιμης διεύθυνσης",
"gui_share_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση OnionShare μπορεί να <b>κατεβάσει</b> τα αρχεία σας χρησιμοποιώντας το <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση OnionShare, μπορεί να <b>ανεβάσει</b> αρχεία στον υπολογιστή σας χρησιμοποιώντας το <b>Tor Browser</b>: <img src='{}' />",
@ -243,7 +241,6 @@
"mode_settings_receive_data_dir_browse_button": "Επιλογή",
"mode_settings_receive_data_dir_label": "Αποθήκευση αρχείων σε",
"mode_settings_share_autostop_sharing_checkbox": "Τερματισμός κοινής χρήσης με την ολοκλήρωση αρχείων (αποεπιλέξτε για λήψη μεμονωμένων αρχείων)",
"mode_settings_client_auth_checkbox": "Χρήση εξουσιοδότησης πελάτη",
"mode_settings_legacy_checkbox": "Χρήση παλαιάς διεύθυνσης (δεν προτείνεται η χρήση υπηρεσία v2 onion)",
"mode_settings_autostop_timer_checkbox": "Προγραμματισμένος τερματισμός",
"mode_settings_autostart_timer_checkbox": "Προγραμματισμένη εκκίνηση",
@ -293,4 +290,4 @@
"gui_status_indicator_chat_scheduled": "Δρομολόγηση…",
"gui_status_indicator_chat_working": "Εκκίνηση…",
"gui_status_indicator_chat_stopped": "Έτοιμο για συνομιλία"
}
}

View File

@ -24,18 +24,19 @@
"gui_receive_stop_server_autostop_timer": "Stop Receive Mode ({} remaining)",
"gui_receive_flatpak_data_dir": "Because you installed OnionShare using Flatpak, you must save files to a folder in ~/OnionShare.",
"gui_copy_url": "Copy Address",
"gui_copy_hidservauth": "Copy HidServAuth",
"gui_copy_client_auth": "Copy Private Key",
"gui_canceled": "Canceled",
"gui_copied_url_title": "Copied OnionShare Address",
"gui_copied_url": "OnionShare address copied to clipboard",
"gui_copied_hidservauth_title": "Copied HidServAuth",
"gui_copied_hidservauth": "HidServAuth line copied to clipboard",
"gui_copied_client_auth_title": "Copied Private Key",
"gui_copied_client_auth": "Private Key copied to clipboard",
"gui_show_url_qr_code": "Show QR Code",
"gui_qr_code_dialog_title": "OnionShare QR Code",
"gui_qr_label_url_title": "OnionShare Address",
"gui_qr_label_auth_string_title": "Private Key",
"gui_waiting_to_start": "Scheduled to start in {}. Click to cancel.",
"gui_please_wait_no_button": "Starting…",
"gui_please_wait": "Starting… Click to cancel.",
"error_rate_limit": "Someone has made too many wrong attempts to guess your password, so OnionShare has stopped the server. Start sharing again and send the recipient a new address to share.",
"zip_progress_bar_format": "Compressing: %p%",
"gui_settings_window_title": "Settings",
"gui_settings_autoupdate_label": "Check for new version",
@ -85,11 +86,16 @@
"gui_server_autostop_timer_expired": "The auto-stop timer already ran out. Please adjust it to start sharing.",
"gui_server_autostart_timer_expired": "The scheduled time has already passed. Please adjust it to start sharing.",
"gui_autostop_timer_cant_be_earlier_than_autostart_timer": "The auto-stop time can't be the same or earlier than the auto-start time. Please adjust it to start sharing.",
"gui_server_doesnt_support_stealth": "Sorry, this version of Tor doesn't support stealth (Client Authentication). Please try with a newer version of Tor, or use 'public' mode if it doesn't need to be private.",
"share_via_onionshare": "Share via OnionShare",
"gui_share_url_description": "<b>Anyone</b> with this OnionShare address can <b>download</b> your files using the <b>Tor Browser</b>: <img src='{}' />",
"gui_website_url_description": "<b>Anyone</b> with this OnionShare address can <b>visit</b> your website using the <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Anyone</b> with this OnionShare address can <b>upload</b> files to your computer using the <b>Tor Browser</b>: <img src='{}' />",
"gui_chat_url_description": "<b>Anyone</b> with this OnionShare address can <b>join this chat room</b> using the <b>Tor Browser</b>: <img src='{}' />",
"gui_share_url_description": "<b>Anyone</b> with this OnionShare address and private key can <b>download</b> your files using the <b>Tor Browser</b>: <img src='{}' />",
"gui_share_url_public_description": "<b>Anyone</b> with this OnionShare address can <b>download</b> your files using the <b>Tor Browser</b>: <img src='{}' />",
"gui_website_url_description": "<b>Anyone</b> with this OnionShare address and private key can <b>visit</b> your website using the <b>Tor Browser</b>: <img src='{}' />",
"gui_website_url_public_description": "<b>Anyone</b> with this OnionShare address can <b>visit</b> your website using the <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Anyone</b> with this OnionShare address and private key can <b>upload</b> files to your computer using the <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_public_description": "<b>Anyone</b> with this OnionShare address can <b>upload</b> files to your computer using the <b>Tor Browser</b>: <img src='{}' />",
"gui_chat_url_description": "<b>Anyone</b> with this OnionShare address and private key can <b>join this chat room</b> using the <b>Tor Browser</b>: <img src='{}' />",
"gui_chat_url_public_description": "<b>Anyone</b> with this OnionShare address can <b>join this chat room</b> using the <b>Tor Browser</b>: <img src='{}' />",
"gui_url_label_persistent": "This share will not auto-stop.<br><br>Every subsequent share reuses the address. (To use one-time addresses, turn off \"Use persistent address\" in the settings.)",
"gui_url_label_stay_open": "This share will not auto-stop.",
"gui_url_label_onetime": "This share will stop after first completion.",
@ -176,11 +182,9 @@
"mode_settings_advanced_toggle_hide": "Hide advanced settings",
"mode_settings_title_label": "Custom title",
"mode_settings_persistent_checkbox": "Save this tab, and automatically open it when I open OnionShare",
"mode_settings_public_checkbox": "Don't use a password",
"mode_settings_public_checkbox": "This is a public OnionShare service (disables private key)",
"mode_settings_autostart_timer_checkbox": "Start onion service at scheduled time",
"mode_settings_autostop_timer_checkbox": "Stop onion service at scheduled time",
"mode_settings_legacy_checkbox": "Use a legacy address (v2 onion service, not recommended)",
"mode_settings_client_auth_checkbox": "Use client authorization",
"mode_settings_share_autostop_sharing_checkbox": "Stop sharing after files have been sent (uncheck to allow downloading individual files)",
"mode_settings_receive_data_dir_label": "Save files to",
"mode_settings_receive_data_dir_browse_button": "Browse",
@ -207,4 +211,4 @@
"error_port_not_available": "OnionShare port not available",
"history_receive_read_message_button": "Read Message",
"error_tor_protocol_error": "There was an error with Tor: {}"
}
}

View File

@ -20,11 +20,9 @@
"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_please_wait": "Bonvolu atendi...",
"gui_download_upload_progress_complete": "%p%, Tempo pasinta: {0:s}",
"gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)",
@ -33,7 +31,6 @@
"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.",

View File

@ -28,16 +28,13 @@
"help_stealth": "Usar autorización de cliente (avanzada)",
"help_config": "Ubicación del archivo de configuración JSON personalizado (opcional)",
"gui_copied_url_title": "Dirección OnionShare Copiada",
"gui_copied_hidservauth": "Línea HidServAuth copiada al portapapeles",
"gui_please_wait": "Comenzando… Clic para cancelar.",
"gui_quit_title": "No tan rápido",
"error_rate_limit": "Alguien ha intentado adivinar tu contraseña demasiadas veces, por lo que OnionShare ha detenido al servidor. Inicia la compartición de nuevo y envía una dirección nueva al receptor.",
"zip_progress_bar_format": "Comprimiendo: %p%",
"error_stealth_not_supported": "Para utilizar autorización de cliente, necesitas al menos Tor 0.2.9.1-alpha (o Navegador Tor 6.5) y python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare necesita por lo menos Tor 0.2.7.1 y python3-stem 1.4.0.",
"gui_settings_window_title": "Configuración",
"gui_settings_stealth_option": "Utilizar autorización de cliente",
"gui_settings_stealth_hidservauth_string": "Habiendo guardado tu clave privada para reutilizarla, ahora puedes hacer clic para copiar tu HidServAuth.",
"gui_settings_autoupdate_label": "Comprobar nuevas versiones",
"gui_settings_autoupdate_option": "Notifícame cuando haya una versión nueva disponible",
"gui_settings_autoupdate_check_button": "Comprobar Nueva Versión",
@ -66,10 +63,8 @@
"gui_receive_stop_server": "Detener Modo de Recepción",
"gui_receive_stop_server_autostop_timer": "Detener Modo de Recepción (quedan {})",
"gui_receive_stop_server_autostop_timer_tooltip": "El temporizador de parada automática termina en {}",
"gui_copy_hidservauth": "Copiar HidServAuth",
"gui_no_downloads": "Ninguna Descarga Todavía",
"gui_canceled": "Cancelado",
"gui_copied_hidservauth_title": "HidServAuth Copiada",
"settings_error_unknown": "No se puede conectar al controlador Tor porque tu configuración no tiene sentido.",
"settings_error_automatic": "No se puede conectar al controlador Tor. ¿Se está ejecutando el Navegador Tor (disponible en torproject.org) en segundo plano?",
"settings_error_socket_port": "No se puede conectar al controlador Tor en {}:{}.",
@ -98,7 +93,6 @@
"gui_server_started_after_autostop_timer": "El temporizador de parada automática expiró antes de que se iniciara el servidor. Por favor crea un recurso compartido nuevo.",
"gui_server_autostop_timer_expired": "El temporizador de parada automática ya expiró. Por favor ajústalo para comenzar a compartir.",
"share_via_onionshare": "Compartir con OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Usar direcciones obsoletas",
"gui_save_private_key_checkbox": "Usar una dirección persistente",
"gui_share_url_description": "<b>Cualquiera</b> con esta dirección OnionShare puede <b>descargar</b> tus archivos usando el <b>Navegador Tor</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Cualquiera</b> con esta dirección OnionShare puede <b>cargar</b> archivos a tu equipo usando el <b>Navegador Tor</b>: <img src='{}' />",
@ -231,7 +225,6 @@
"hours_first_letter": "h",
"minutes_first_letter": "m",
"seconds_first_letter": "s",
"invalid_password_guess": "Intento de contraseña incorrecto",
"gui_website_url_description": "<b>Cualquiera</b> con esta dirección OnionShare puede <b>visitar</b> tu sitio web usando el <b>Navegador Tor</b>: <img src='{}' />",
"gui_mode_website_button": "Publicar sitio web",
"systray_site_loaded_title": "Sitio web cargado",
@ -247,7 +240,6 @@
"systray_individual_file_downloaded_message": "Archivo individual {} visto",
"gui_settings_csp_header_disabled_option": "Deshabilitar encabezado de Política de Seguridad de Contenido",
"gui_settings_website_label": "Configuración de sitio web",
"mode_settings_client_auth_checkbox": "Utilizar autorización de cliente",
"mode_settings_legacy_checkbox": "Usar una dirección obsoleta (servicio cebolla v2, no recomendado)",
"mode_settings_autostop_timer_checkbox": "Detener el servicio cebolla a una hora determinada",
"mode_settings_autostart_timer_checkbox": "Iniciar el servicio cebolla a una hora determinada",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "توقف حالت دریافت ({} باقیمانده)",
"gui_receive_stop_server_autostop_timer_tooltip": "تایمر توقف خودکار در {} به پایان می رسد",
"gui_copy_url": "کپی آدرس",
"gui_copy_hidservauth": "کپی HidServAuth",
"gui_downloads": "دانلود تاریخچه",
"gui_no_downloads": "",
"gui_canceled": "لغو شده",
"gui_copied_url_title": "آدرس OnionShare کپی شد",
"gui_copied_url": "آدرس OnionShare بر کلیپ بورد کپی شد",
"gui_copied_hidservauth_title": "HidServAuth کپی شد",
"gui_copied_hidservauth": "خط HidServAuth بر کلیپ بورد کپی شد",
"gui_please_wait": "در حال آغاز... برای لغو کلیک کنید.",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "شما در پروسه دریافت پرونده هستید. مطمئنید که می‌خواهید از OnionShare خارج شوید؟",
"gui_quit_warning_quit": "خروج",
"gui_quit_warning_dont_quit": "لغو",
"error_rate_limit": "شخصی تعداد زیادی تلاش ناموفق برای حدس زدن گذرواژه شما داشته است، بنابراین OnionShare کارساز را متوقف کرده است. هم‌رسانی را دوباره آغاز کنید و به گیرنده، یک نشانی جدید برای هم‌رسانی بفرستید.",
"zip_progress_bar_format": "فشرده سازی: %p%",
"error_stealth_not_supported": "برای استفاده از احراز هویت کلاینت، شما نیاز به داشتن Tor 0.2.9.1-alpha (یا مرورگر Tor 6.5) و python3-stem 1.5.0 دارید.",
"error_ephemeral_not_supported": "OnionShare حداقل به Tor 0.2.7.1 و python3-stem 1.4.0 نیاز دارد.",
"gui_settings_window_title": "تنظیمات",
"gui_settings_whats_this": "<a href='{0:s}'>این چیست؟</a>",
"gui_settings_stealth_option": "استفاده از احراز هویت کلاینت",
"gui_settings_stealth_hidservauth_string": "ذخیره کردن کلید خصوصی برای استفاده دوباره، بدین معناست که الان می‌توانید برای کپی HidServAuth کلیک کنید.",
"gui_settings_autoupdate_label": "بررسی برای نسخه جدید",
"gui_settings_autoupdate_option": "زمانی که نسخه جدید موجود بود من را خبر کن",
"gui_settings_autoupdate_timestamp": "آخرین بررسی: {}",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "زمان‌سنج توقف خودکار، قبل از آغاز کارساز به پایان رسید. لطفا یک هم‌رسانی جدید درست کنید.",
"gui_server_autostop_timer_expired": "زمان‌سنج توقف خودکار به پایان رسید. لطفا برای آغاز هم‌رسانی آن را تنظیم کنید.",
"share_via_onionshare": "هم‌رسانی با OnionShare",
"gui_use_legacy_v2_onions_checkbox": "استفاده از آدرس‌های بازمانده",
"gui_save_private_key_checkbox": "استفاده از یک آدرس پایا",
"gui_share_url_description": "<b>هرکس</b> با این آدرس OnionShare می‌تواند روی کامپیوتر شما پرونده <b>بارگیری</b> کند از طریق <b>مرورگر تور</b>: <img src='{}' />",
"gui_receive_url_description": "<b>هرکس</b> با این آدرس OnionShare می‌تواند روی کامپیوتر شما پرونده <b>بارگذاری</b> کند از طریق <b>مرورگر تور</b>: <img src='{}' />",

View File

@ -41,23 +41,18 @@
"gui_receive_stop_server": "Lopeta vastaanottotila",
"gui_receive_stop_server_autostop_timer": "Lopeta vastaanottotila ({} jäljellä)",
"gui_receive_stop_server_autostop_timer_tooltip": "Auto-stop ajastin loppuu kello {}",
"gui_copy_hidservauth": "Kopioi HidServAuth",
"gui_copied_url_title": "Kopioi OnionShare-osoite",
"gui_copied_hidservauth_title": "HidServAuth kopioitu",
"gui_copied_hidservauth": "HidServAuth-rivi kopioitu leikepöydälle",
"version_string": "OnionShare {0:s} | https://onionshare.org/",
"gui_quit_title": "Ei niin nopeasti",
"gui_share_quit_warning": "Olet lähettämässä tiedostoja. Haluatko varmasti lopettaa OnionSharen?",
"gui_receive_quit_warning": "Olet vastaanottamassa tiedostoja. Haluatko varmasti lopettaa OnionSharen?",
"gui_quit_warning_quit": "Lopeta",
"gui_quit_warning_dont_quit": "Peruuta",
"error_rate_limit": "Joku on yrittänyt arvata salasanasi väärin liian monta kertaa, joten OnionShare on pysäyttänyt palvelimen. Aloita jakaminen uudelleen ja lähetä vastaanottajalle uusi osoite jatkaaksesi jakamista.",
"error_stealth_not_supported": "Asiakasvaltuuden käyttämiseen tarvitaan ainakin Tor 0.2.9.1-alpha (tai Tor Browser 6.5) ja python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionSharen käyttö vaatii ainakin Tor 0.2.7.1 ja python3-stem 1.4.0.",
"gui_settings_window_title": "Asetukset",
"gui_settings_whats_this": "<a href='{0:s}'>Mikä tämä on?</a>",
"gui_settings_stealth_option": "Käytä asiakaslupaa",
"gui_settings_stealth_hidservauth_string": "Nyt kun olet tallentanut yksityisen avaimesi uudelleenkäyttöä varten, voit kopioida HidServAuth-osoitteesi napista.",
"gui_settings_autoupdate_label": "Tarkista päivitykset",
"gui_settings_autoupdate_option": "Ilmoita minulle, kun uusi versio on saatavilla",
"gui_settings_autoupdate_timestamp": "Viimeksi tarkistettu: {}",
@ -124,7 +119,6 @@
"gui_server_autostop_timer_expired": "Automaattinen pysäytysajastin päättyi jo.\nSäädä se jaon aloittamiseksi.",
"share_via_onionshare": "Jaa OnionSharella",
"gui_connect_to_tor_for_onion_settings": "Yhdistä Tor-verkkoon nähdäksesi onion palvelun asetukset",
"gui_use_legacy_v2_onions_checkbox": "Käytä vanhoja osoitteita",
"gui_save_private_key_checkbox": "Käytä pysyviä osoitteita",
"gui_share_url_description": "<b>Kaikki</b> joilla on tämä OnionShare-osoite voivat <b>ladata</b> tiedostojasi käyttämällä <b>Tor-selainta</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Kaikki</b> joilla on tämä OnionShare-osoite voivat <b>lähettää</b>tiedostoja tietokoneellesi käyttämällä <b>Tor-selainta</b>: <img src='{}' />",
@ -222,7 +216,6 @@
"gui_new_tab_tooltip": "Avaa uusi välilehti",
"gui_new_tab": "Uusi välilehti",
"mode_settings_website_disable_csp_checkbox": "Poista 'Sisällön suojauskäytännön' otsikko käytöstä (mahdollistaa kolmansien osapuolien resurssien käytön nettisivussasi)",
"mode_settings_client_auth_checkbox": "Käytä asiakkaan valtuutusta",
"mode_settings_legacy_checkbox": "Käytä vanhaa osoitetta (v2 onion-palvelu, ei suositella)",
"mode_settings_autostop_timer_checkbox": "Lopeta onion-palvelu tiettyyn kellon aikaan",
"mode_settings_autostart_timer_checkbox": "Aloita onion-palvelu tiettyyn kellon aikaan",

View File

@ -22,7 +22,6 @@
"gui_share_start_server": "Commencer le partage",
"gui_share_stop_server": "Arrêter le partage",
"gui_copy_url": "Copier ladresse",
"gui_copy_hidservauth": "Copier HidServAuth",
"gui_downloads": "Historique de téléchargement",
"gui_canceled": "Annulé",
"gui_copied_url": "Ladresse OnionShare a été copiée dans le presse-papiers",
@ -38,7 +37,6 @@
"not_a_readable_file": "{0:s} nest pas un fichier lisible.",
"timeout_download_still_running": "En attente de la fin du téléchargement",
"systray_download_completed_message": "La personne a terminé de télécharger vos fichiers",
"gui_copied_hidservauth_title": "HidServAuth a été copié",
"gui_settings_window_title": "Paramètres",
"gui_settings_autoupdate_timestamp": "Dernière vérification : {}",
"gui_settings_close_after_first_download_option": "Arrêter le partage après lenvoi des fichiers",
@ -58,7 +56,6 @@
"connecting_to_tor": "Connexion au réseau Tor",
"help_config": "Emplacement du fichier personnalisé de configuration JSON (facultatif)",
"large_filesize": "Avertissement : Lenvoi dun partage volumineux peut prendre des heures",
"gui_copied_hidservauth": "La ligne HidServAuth a été copiée dans le presse-papiers",
"version_string": "OnionShare {0:s} | https://onionshare.org/",
"zip_progress_bar_format": "Compression : %p %",
"error_ephemeral_not_supported": "OnionShare exige au moins et Tor 0.2.7.1 et python3-stem 1.4.0.",
@ -152,18 +149,15 @@
"gui_download_upload_progress_complete": "%p%, {0:s} écoulées.",
"gui_download_upload_progress_starting": "{0:s}, %p% (estimation)",
"gui_download_upload_progress_eta": "{0:s}, Fin : {1:s}, %p%",
"error_rate_limit": "Quelquun a effectué trop de tentatives infructueuses pour deviner votre mot de passe, cest pourquoi OnionShare a arrêté le serveur. Redémarrez le partage et envoyez au destinataire une nouvelle adresse afin de partager.",
"error_stealth_not_supported": "Pour utiliser lautorisation client, Tor 0.2.9.1-alpha (ou le Navigateur Tor 6.5) et python3-stem 1.5.0 ou versions ultérieures sont exigés.",
"gui_settings_stealth_option": "Utiliser lautorisation du client",
"timeout_upload_still_running": "En attente de la fin de l'envoi",
"gui_settings_stealth_hidservauth_string": "Lenregistrement de votre clé privée pour réutilisation signifie que vous pouvez maintenant cliquer pour copier votre HidServAuth.",
"gui_settings_autoupdate_check_button": "Vérifier la présence dune nouvelle version",
"settings_test_success": "Vous êtes connecté au contrôleur Tor.\n\nVersion de Tor : {}\nPrend en charge les services onion éphémères : {}.\nPrend en charge lauthentification client : {}.\nPrend en charge la nouvelle génération dadresses .onion : {}.",
"update_error_check_error": "Impossible de vérifier lexistence dune mise à jour : peut-être nêtes-vous pas connecté à Tor ou le site Web dOnionShare est-il hors service?",
"update_error_invalid_latest_version": "Impossible de vérifier la présence dune mise à jour : le site Web dOnionShare indique que la version la plus récente est la « {} » qui nest pas reconnue…",
"gui_tor_connection_ask": "Ouvrir les paramètres pour résoudre le problème de connexion à Tor ?",
"gui_tor_connection_canceled": "Impossible de se connecter à Tor.\n\nAssurez-vous dêtre connecté à Internet, puis rouvrez OnionShare et configurez sa connexion à Tor.",
"gui_use_legacy_v2_onions_checkbox": "Utiliser les adresses héritées",
"info_in_progress_uploads_tooltip": "{} envoi(s) en cours",
"info_completed_uploads_tooltip": "{} envoi(s) terminé(s)",
"error_cannot_create_downloads_dir": "Impossible de créer le dossier du mode réception : {}",
@ -233,7 +227,6 @@
"systray_website_started_title": "Début du partage du site Web",
"systray_website_started_message": "Quelquun visite votre site Web",
"gui_website_mode_no_files": "Aucun site Web na encore été partagé",
"invalid_password_guess": "La tentative de mot de passe est invalide",
"gui_mode_website_button": "Publier un site Web",
"incorrect_password": "Le mot de passe est erroné",
"gui_settings_individual_downloads_label": "Décocher pour permettre le téléchargement de fichiers individuels",
@ -258,7 +251,6 @@
"mode_settings_receive_data_dir_browse_button": "Parcourir",
"mode_settings_receive_data_dir_label": "Enregistrer les fichiers dans",
"mode_settings_share_autostop_sharing_checkbox": "Cesser le partage une fois que les fichiers ont été envoyés (décocher afin de permettre le téléchargement de fichiers individuels)",
"mode_settings_client_auth_checkbox": "Utiliser lautorisation du client",
"mode_settings_legacy_checkbox": "Utiliser une ancienne adresse (service onion v2, non recommandée)",
"mode_settings_public_checkbox": "Ne pas utiliser un mot de passe",
"mode_settings_persistent_checkbox": "Enregistrer cet onglet et louvrir automatiquement quand jouvre OnionShare",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "Stop an Mód Glactha ({} fágtha)",
"gui_receive_stop_server_autostop_timer_tooltip": "Amadóir uathstoptha caite {}",
"gui_copy_url": "Cóipeáil an Seoladh",
"gui_copy_hidservauth": "Cóipeáil HidServAuth",
"gui_downloads": "Stair Íoslódála",
"gui_no_downloads": "Níl aon rud íoslódáilte agat fós",
"gui_canceled": "Curtha ar ceal",
"gui_copied_url_title": "Cóipeáladh an Seoladh OnionShare",
"gui_copied_url": "Cóipeáladh an seoladh OnionShare go dtí an ghearrthaisce",
"gui_copied_hidservauth_title": "Cóipeáladh HidServAuth",
"gui_copied_hidservauth": "Cóipeáladh an líne HidServAuth go dtí an ghearrthaisce",
"gui_please_wait": "Ag tosú... Cliceáil lena chur ar ceal.",
"gui_download_upload_progress_complete": "%[%, {0:s} caite.",
"gui_download_upload_progress_starting": "{0:s}, %p% (á áireamh)",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "Tá tú le linn roinnt comhad a íoslódáil. An bhfuil tú cinnte gur mhaith leat OnionShare a scor?",
"gui_quit_warning_quit": "Scoir",
"gui_quit_warning_dont_quit": "Cealaigh",
"error_rate_limit": "Rinne duine éigin an iomarca iarrachtaí míchearta ar d'fhocal faire, agus dá bharr sin stop OnionShare an freastalaí. Tosaigh ag comhroinnt arís agus cuir seoladh nua chuig an bhfaighteoir.",
"zip_progress_bar_format": "Á chomhbhrú: %p%",
"error_stealth_not_supported": "Chun údarú cliaint a úsáid, teastaíonn uait Tor 0.2.9.1-alpha (nó Brabhsálaí 6.5) agus python3-stem 1.5.0.",
"error_ephemeral_not_supported": "Teastaíonn uait ar a laghad Tor 0.2.7.1 agus python3-stem 1.4.0 chun OnionShare a úsáid.",
"gui_settings_window_title": "Socruithe",
"gui_settings_whats_this": "<a href='{0:s}'>Cad é seo</a>",
"gui_settings_stealth_option": "Úsáid údarú cliaint",
"gui_settings_stealth_hidservauth_string": "Toisc gur shábháil tú d'eochair phríobháideach, anois is féidir leat cliceáil chun an HidServAuth a chóipeáil.",
"gui_settings_autoupdate_label": "Lorg nuashonruithe",
"gui_settings_autoupdate_option": "Cuir in iúl dom nuair a bheidh leagan nua ar fáil",
"gui_settings_autoupdate_timestamp": "Seiceáilte: {}",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "Bhí an t-amadóir uathstoptha caite sular thosaigh an freastalaí. Caithfidh tú comhroinnt nua a chruthú.",
"gui_server_autostop_timer_expired": "Tá an t-amadóir uathstoptha caite cheana. Caithfidh tú é a athshocrú sular féidir leat comhaid a chomhroinnt.",
"share_via_onionshare": "Comhroinn trí OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Úsáid seoltaí sean-nóis",
"gui_save_private_key_checkbox": "Úsáid seoladh seasmhach",
"gui_share_url_description": "Tá <b>aon duine</b> a bhfuil an seoladh OnionShare aige/aici in ann do chuid comhad a <b>íoslódáil</b> le <b>Brabhsálaí Tor</b>: <img src='{}' />",
"gui_receive_url_description": "Tá <b>aon duine</b> a bhfuil an seoladh OnionShare aige/aici in ann comhaid a <b>uaslódáil</b> go dtí do ríomhaire le <b>Brabhsálaí Tor</b>: <img src='{}' />",

View File

@ -24,17 +24,13 @@
"gui_receive_stop_server_autostop_timer": "Deter o modo Recepción ({} restante)",
"gui_receive_flatpak_data_dir": "Debido a que instalaches OnionShare usando Flatpk, tes que gardar os ficheiros nun cartafol dentro de ~/OnionShare.",
"gui_copy_url": "Copiar enderezo",
"gui_copy_hidservauth": "Copiar HidServAuth",
"gui_canceled": "Cancelado",
"gui_copied_url_title": "Enderezo de OnionShare copiado",
"gui_copied_url": "Enderezo OnionShare copiado ó portapapeis",
"gui_copied_hidservauth_title": "HidServAuth copiado",
"gui_copied_hidservauth": "Liña HidServAuth copiada ó portapapeis",
"gui_show_url_qr_code": "Mostrar código QR",
"gui_qr_code_dialog_title": "Código QR OnionShare",
"gui_waiting_to_start": "Programado para comezar en {}. Fai clic para cancelar.",
"gui_please_wait": "Iniciando... Fai click para cancelar.",
"error_rate_limit": "Alguén fixo demasiados intentos errados para adiviñar o teu contrasinal, polo que OnionShare detivo o servidor. Comeza a compartir de novo e envía ao destinatario un novo enderezo para compartir.",
"zip_progress_bar_format": "Comprimindo: %p%",
"gui_settings_window_title": "Axustes",
"gui_settings_autoupdate_label": "Comproba se hai nova versión",
@ -169,7 +165,6 @@
"mode_settings_autostart_timer_checkbox": "Iniciar o servizo onion na hora programada",
"mode_settings_autostop_timer_checkbox": "Deter o servizo onion na hora programada",
"mode_settings_legacy_checkbox": "Usar enderezos antigos (servizo onion v2, non recomendado)",
"mode_settings_client_auth_checkbox": "Usar autorización do cliente",
"mode_settings_share_autostop_sharing_checkbox": "Deixar de compartir unha vez enviado o ficheiro (desmarca para permitir a descarga de ficheiros individuais)",
"mode_settings_receive_data_dir_label": "Gardar ficheiros en",
"mode_settings_receive_data_dir_browse_button": "Navegar",

View File

@ -45,14 +45,11 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -63,14 +60,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "",
"gui_quit_warning_dont_quit": "",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -135,7 +130,6 @@
"gui_server_started_after_autostop_timer": "",
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -47,14 +47,11 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "העתק כתובת",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "מבוטל",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -65,14 +62,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "יציאה",
"gui_quit_warning_dont_quit": "ביטול",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "הגדרות",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "בדיקה לאיתור גרסה חדשה",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -138,7 +133,6 @@
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_connect_to_tor_for_onion_settings": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -36,12 +36,9 @@
"gui_receive_stop_server_autostop_timer": "रिसीव मोड बंद करें ({} remaining)",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "पता कॉपी करें",
"gui_copy_hidservauth": "HidServAuth कॉपी करें",
"gui_canceled": "रद्द हो गया",
"gui_copied_url_title": "OnionShare पता कॉपी हो गया",
"gui_copied_url": "OnionShare पता क्लिपबोर्ड में कॉपी हो गया",
"gui_copied_hidservauth_title": "HidServAuth कॉपी हो गया",
"gui_copied_hidservauth": "HidServAuth लाइन क्लिपबोर्ड में कॉपी हो गया",
"gui_please_wait": "शुरू हो रहा है... रद्द करने के लिए क्लिक करें।",
"version_string": "",
"gui_quit_title": "इतनी तेज़ी से नहीं",
@ -49,14 +46,12 @@
"gui_receive_quit_warning": "आप अभी फाइलों को प्राप्त रहे हैं। क्या आप वाकई OnionShare को बंद करना चाहते हैं?",
"gui_quit_warning_quit": "छोड़ें",
"gui_quit_warning_dont_quit": "रद्द करें",
"error_rate_limit": "किसी ने आपके पासवर्ड का अंदाज़ा लगाने के लिए कई सारे गलत प्रयास किए हैं, इसीलिए OnionShare ने सर्वर रोक दिया है। साझा पुनः शुरू करें और साझा करने के लिए भेजनेवाले व्यक्ति को एक नया पता साझा करें।",
"zip_progress_bar_format": "कॉम्प्रेस हो रहा है: %p%",
"error_stealth_not_supported": "क्लाइंट सत्यापन उपयोग करने के लिए, आपको कम से कम Tor 0.2.9.1-alpha (या Tor Browser 6.5) और python3-stem 1.5.0 दोनों चाहिए।",
"error_ephemeral_not_supported": "OnionShare को कम से कम Tor 0.2.7.1 और python3-stem 1.4.0 की आवश्यकता है।",
"gui_settings_window_title": "सेटिंग्स",
"gui_settings_whats_this": "<a href='{0:s}'>यह क्या है</a>",
"gui_settings_stealth_option": "क्लाइंट सत्यापन उपयोग करें",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "नए संस्करण की जांच करें",
"gui_settings_autoupdate_option": "जब कोई नया संस्करण आए तो मुझे सूचित करें",
"gui_settings_autoupdate_timestamp": "अंतिम जांच: {}",
@ -123,7 +118,6 @@
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_connect_to_tor_for_onion_settings": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -22,12 +22,9 @@
"gui_receive_stop_server": "Prekini modus primanja",
"gui_receive_stop_server_autostop_timer": "Prekini modus primanja ({} preostalo)",
"gui_copy_url": "Kopiraj adresu",
"gui_copy_hidservauth": "Kopiraj HidServAuth",
"gui_canceled": "Prekinuto",
"gui_copied_url_title": "OnionShare adresa je kopirana",
"gui_copied_url": "OnionShare adresa je kopirana u međuspremnik",
"gui_copied_hidservauth_title": "HidServAuth kopirano",
"gui_copied_hidservauth": "HidServAuth redak je kopiran u međuspremnik",
"gui_waiting_to_start": "Planirano pokretanje za {}. Pritisni za prekid.",
"gui_please_wait": "Pokretanje … Pritisni za prekid.",
"gui_quit_title": "Ne tako brzo",
@ -35,14 +32,12 @@
"gui_receive_quit_warning": "Proces primanja datoteka je u tijeku. Zaista želiš zatvoriti OnionShare?",
"gui_quit_warning_quit": "Izađi",
"gui_quit_warning_dont_quit": "Odustani",
"error_rate_limit": "Netko je prečesto pokušao pogoditi tvoju lozinku, pa je OnionShare zaustavio poslužitelja. Ponovo pokreni dijeljenje i primatelju pošalji novu adresu za dijeljenje.",
"zip_progress_bar_format": "Komprimiranje: %p %",
"error_stealth_not_supported": "Za korištenje autorizacije klijenta, potrebni su barem Tor 0.2.9.1-alpha (ili Tor Browser 6.5) i python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare zahtijeva barem Tor 0.2.7.1 i python3-stem 1.4.0.",
"gui_settings_window_title": "Postavke",
"gui_settings_whats_this": "<a href='{0:s}'>Što je ovo?</a>",
"gui_settings_stealth_option": "Koristi autorizaciju klijenta",
"gui_settings_stealth_hidservauth_string": "Budući da je privatni ključ spremljen za ponovnu upotrebu, znači da sada možeš kopirati tvoj HidServAuth.",
"gui_settings_autoupdate_label": "Traži nove verzije",
"gui_settings_autoupdate_option": "Obavijesti me o novim verzijama",
"gui_settings_autoupdate_timestamp": "Zadnja provjera: {}",
@ -114,7 +109,6 @@
"gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Vrijeme za automatsko prekidanje ne može biti isto kao vrijeme za automatsko pokretanje ili ranije. Za pokretanje dijeljenja, podesi vrijeme.",
"share_via_onionshare": "Dijeli putem OnionSharea",
"gui_connect_to_tor_for_onion_settings": "Poveži se s Torom za prikaz postavki Onion usluge",
"gui_use_legacy_v2_onions_checkbox": "Koristi stare adrese",
"gui_save_private_key_checkbox": "Koristi trajnu adresu",
"gui_share_url_description": "<b>Svatko</b> s ovom OnionShare adresom može <b>preuzeti</b> tvoje datoteke koristeći <b>Tor preglednik</b>: <img src='{}' />",
"gui_website_url_description": "<b>Svatko</b> s ovom OnionShare adresom može <b>posjetiti</b> tvoju web-stranicu koristeći <b>Tor preglednik</b>: <img src='{}' />",
@ -184,7 +178,6 @@
"mode_settings_receive_data_dir_browse_button": "Pregledaj",
"mode_settings_receive_data_dir_label": "Spremi datoteke u",
"mode_settings_share_autostop_sharing_checkbox": "Prekini dijeljenje nakon što se datoteke pošalju (deaktiviraj za preuzimanje pojedinačnih datoteka)",
"mode_settings_client_auth_checkbox": "Koristi autorizaciju klijenta",
"mode_settings_legacy_checkbox": "Koristi stare adrese (v2 onion usluge, ne preporučuje se)",
"mode_settings_autostop_timer_checkbox": "Prekini onion uslugu u planirano vrijeme",
"mode_settings_autostart_timer_checkbox": "Pokreni onion uslugu u planirano vrijeme",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "Fogadó mód leállítása ({} van hátra)",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "Cím másolása",
"gui_copy_hidservauth": "HidServAuth másolása",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "Megszakítva",
"gui_copied_url_title": "OnionShare-cím másolva",
"gui_copied_url": "OnionShare-cím a vágólapra másolva",
"gui_copied_hidservauth_title": "HidServAuth másolva",
"gui_copied_hidservauth": "HidServAuth-sor a vágólapra másolva",
"gui_please_wait": "Indítás... Kattints a megszakításhoz.",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "A fájlok fogadása folyamatban van. Biztosan kilépsz az OnionShare-ből?",
"gui_quit_warning_quit": "Kilépés",
"gui_quit_warning_dont_quit": "Mégse",
"error_rate_limit": "Valaki túl sokszor próbálta meg beírni a jelszavad, ezért az OnionShare leállította a szervert. Kezdj el újra megosztani és küldj új megosztási címet a fogadó félnek.",
"zip_progress_bar_format": "Tömörítés: %p%",
"error_stealth_not_supported": "A kliens-hitelesítés használatához szükséged van legalább ezekre: Tor 0.2.9.1-alpha (vagy Tor Browser 6.5) és python3-stem 1.5.0.",
"error_ephemeral_not_supported": "Az OnionShare minimális követelményei: Tor 0.2.7.1 és python3-stem 1.4.0.",
"gui_settings_window_title": "Beállítások",
"gui_settings_whats_this": "<a href='{0:s}'>Mi ez?</a>",
"gui_settings_stealth_option": "Kliens-hitelesítés használata",
"gui_settings_stealth_hidservauth_string": "Mivel elmentetted a titkos kulcsodat, mostantól kattintással másolhatod a HivServAuth-odat.",
"gui_settings_autoupdate_label": "Új verzió keresése",
"gui_settings_autoupdate_option": "Értesítést kérek, ha új verzió érhető el",
"gui_settings_autoupdate_timestamp": "Utoljára ellenőrizve: {}",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "",
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "Menghentikan Mode Menerima ({}d tersisa)",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "Salin Alamat",
"gui_copy_hidservauth": "Salin HidServAuth",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "Dibatalkan",
"gui_copied_url_title": "Alamat OnionShare disalin",
"gui_copied_url": "Alamat OnionShare disalin ke papan klip",
"gui_copied_hidservauth_title": "HidServAuth disalin",
"gui_copied_hidservauth": "Baris HidServAuth disalin ke papan klip",
"gui_please_wait": "Memulai... Klik untuk membatalkan.",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "Anda sedang dalam proses menerima berkas. Apakah Anda yakin ingin menghentikan OnionShare?",
"gui_quit_warning_quit": "Keluar",
"gui_quit_warning_dont_quit": "Batal",
"error_rate_limit": "Seseorang berusaha berulang kali untuk menebak kata sandi Anda, jadi OnionShare telah menghentikan server. Mulailah berbagi lagi dan kirim penerima alamat baru untuk dibagikan.",
"zip_progress_bar_format": "Mengompresi: %p%",
"error_stealth_not_supported": "Untuk menggunakan otorisasi klien, Anda perlu setidaknya Tor 0.2.9.1-alpha (atau Tor Browser 6.5) dan python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare memerlukan setidaknya Tor 0.2.7.1 dan python3-stem 1.4.0.",
"gui_settings_window_title": "Pengaturan",
"gui_settings_whats_this": "<a href='{0:s}'>Apakah ini?</a>",
"gui_settings_stealth_option": "Gunakan otorisasi klien",
"gui_settings_stealth_hidservauth_string": "Telah menyimpan kunci privat Anda untuk digunakan kembali, berarti Anda dapat klik untuk menyalin HidServAuth Anda.",
"gui_settings_autoupdate_label": "Periksa versi terbaru",
"gui_settings_autoupdate_option": "Beritahu saya ketika versi baru tersedia",
"gui_settings_autoupdate_timestamp": "Terakhir diperiksa: {}",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "Timer berhenti otomatis habis sebelum server dimulai. Silakan buat pembagian baru.",
"gui_server_autostop_timer_expired": "Timer berhenti otomatis sudah habis. Silakan sesuaikan untuk mulai berbagi.",
"share_via_onionshare": "Bagikan via OnionShare",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>mengunduh</b> berkas Anda menggunakan <b>Tor Browser</b>:<img src='{}' />",
"gui_receive_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>mengunggah</b> berkas ke komputer Anda menggunakan <b>Tor Browser</b>:<img src='{}' />",
@ -217,7 +211,6 @@
"mode_settings_receive_data_dir_browse_button": "Telusur",
"mode_settings_receive_data_dir_label": "Simpan file ke",
"mode_settings_share_autostop_sharing_checkbox": "Berhenti berbagi setelah file dikirim (hapus centang untuk memperbolehkan mengunduh file individual)",
"mode_settings_client_auth_checkbox": "Gunakan otorisasi klien",
"mode_settings_legacy_checkbox": "Gunakan alamat legacy (layanan onion v2, tidak disarankan)",
"mode_settings_autostop_timer_checkbox": "Hentikan layanan onion pada waktu yang dijadwalkan",
"mode_settings_autostart_timer_checkbox": "Mulai layanan onion pada waktu yang dijadwalkan",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "Hætta í móttökuham ({} eftir)",
"gui_receive_stop_server_autostop_timer_tooltip": "Sjálfvirk niðurtalning endar {}",
"gui_copy_url": "Afrita vistfang",
"gui_copy_hidservauth": "Afrita HidServAuth",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "Hætt við",
"gui_copied_url_title": "Afritaði OnionShare-vistfang",
"gui_copied_url": "OnionShare-vistfang afritað á klippispjald",
"gui_copied_hidservauth_title": "Afritaði HidServAuth",
"gui_copied_hidservauth": "HidServAuth-lína afrituð á klippispjald",
"gui_please_wait": "Ræsi... Smelltu til að hætta við.",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "Þú ert að taka á móti skrám. Ertu viss um að þú viljir hætta í OnionShare?",
"gui_quit_warning_quit": "Hætta",
"gui_quit_warning_dont_quit": "Hætta við",
"error_rate_limit": "Einhver hefur gert of margar rangar tilraunir til að giska á lykilorðið þitt, þannig að OnionShare hefur stöðvað þjóninn. Byrjaðu deiling aftur og sendu viðtakandanum nýtt vistfang til deilingar.",
"zip_progress_bar_format": "Þjappa: %p%",
"error_stealth_not_supported": "Til að nota biðlaraauðkenningu þarf a.m.k. bæði Tor 0.2.9.1-Alpha (eða Tor Browser 6,5) og python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare krefst a.m.k. bæði Tor 0.2.7.1 og python3-stem 1.4.0.",
"gui_settings_window_title": "Stillingar",
"gui_settings_whats_this": "<a href='{0:s}'>Hvað er þetta?</a>",
"gui_settings_stealth_option": "Nota auðkenningu biðlaraforrits",
"gui_settings_stealth_hidservauth_string": "Ef þú hefur vistað einkalykil til endurnotkunar, þýðir að þú getur nú smellt til að afrita HidServAuth.",
"gui_settings_autoupdate_label": "Athuga með nýja útgáfu",
"gui_settings_autoupdate_option": "Láta vita þegar ný útgáfa er tiltæk",
"gui_settings_autoupdate_timestamp": "Síðast athugað: {}",
@ -133,7 +128,6 @@
"gui_tor_connection_lost": "Aftengt frá Tor.",
"gui_server_autostop_timer_expired": "Sjálfvirkri niðurtalningu er þegar lokið. Lagaðu hana til að hefja deilingu.",
"share_via_onionshare": "Deila með OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Nota eldri vistföng",
"gui_save_private_key_checkbox": "Nota viðvarandi vistföng",
"gui_share_url_description": "<b>Hver sem er</b> með þetta OnionShare vistfang getur <b>sótt</b> skrárnar þínar með því að nota <b>Tor-vafrann</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Hver sem er</b> með þetta OnionShare vistfang getur <b>sent skrár inn</b> á tölvuna þína með því að nota <b>Tor-vafrann</b>: <img src='{}' />",
@ -226,7 +220,6 @@
"hours_first_letter": "klst",
"minutes_first_letter": "mín",
"seconds_first_letter": "sek",
"invalid_password_guess": "Ógilt lykilorð",
"gui_website_url_description": "<b>Hver sem er</b> með þetta OnionShare vistfang getur <b>skoðað</b> vefsvæðið þitt með því að nota <b>Tor-vafrann</b>: <img src='{}' />",
"gui_mode_website_button": "Birta vefsvæði",
"gui_website_mode_no_files": "Ennþá hefur engu vefsvæði verið deilt",
@ -256,7 +249,6 @@
"mode_settings_advanced_toggle_show": "Birta ítarlegar stillingar",
"gui_new_tab_tooltip": "Opna nýjan flipa",
"gui_new_tab_receive_button": "Taka á móti skrám",
"mode_settings_client_auth_checkbox": "Nota auðkenningu biðlaraforrits",
"mode_settings_advanced_toggle_hide": "Fela ítarlegar stillingar",
"gui_quit_warning_cancel": "Hætta við",
"gui_close_tab_warning_title": "Ertu viss?",

View File

@ -48,11 +48,8 @@
"gui_receive_stop_server": "Arresta modalità Ricezione",
"gui_receive_stop_server_autostop_timer": "Interrompi la ricezione ({} rimanenti)",
"gui_receive_stop_server_autostop_timer_tooltip": "Il timer termina tra {}",
"gui_copy_hidservauth": "Copia HidServAuth",
"gui_no_downloads": "Ancora nessun Download",
"gui_copied_url_title": "Indirizzo OnionShare copiato",
"gui_copied_hidservauth_title": "HidServAuth copiato",
"gui_copied_hidservauth": "Linea HidServAuth copiata negli appunti",
"gui_download_upload_progress_complete": "%p%, {0:s} trascorsi.",
"gui_download_upload_progress_starting": "{0:s}, %p% (calcolato)",
"gui_download_upload_progress_eta": "{0:s}, Terminando in: {1:s}, %p%",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "Stai ricevendo dei file, vuoi davvero terminare OnionShare?",
"gui_quit_warning_quit": "Esci",
"gui_quit_warning_dont_quit": "Annulla",
"error_rate_limit": "Qualcuno ha tentato troppe volte di indovinare la tua password, così OnionShare ha fermato il server. Riavvia la condivisione e invia al tuo contatto il nuovo indirizzo per condividere.",
"error_stealth_not_supported": "Per usare l'opzione \"client auth\" hai bisogno almeno della versione di Tor 0.2.9.1-alpha (o Tor Browser 6.5) con python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare richiede almeno Tor 0.2.7.1 e python3-stem 1.4.0.",
"gui_settings_window_title": "Impostazioni",
"gui_settings_whats_this": "<a href='{0:s}'>Cos'è questo?</a>",
"help_receive": "Ricevi le condivisioni invece di inviarle",
"gui_settings_stealth_option": "Usa l'autorizzazione client (legacy)",
"gui_settings_stealth_hidservauth_string": "Avendo salvato la tua chiave privata per il riutilizzo, puoi cliccare per copiare il tuo HidServAuth.",
"gui_settings_autoupdate_label": "Verifica se c'è una nuova versione",
"gui_settings_autoupdate_option": "Avvisami quando è disponibile una nuova versione",
"gui_settings_autoupdate_timestamp": "Ultimo controllo: {}",
@ -140,7 +135,6 @@
"gui_server_autostop_timer_expired": "Il timer di arresto automatico è già scaduto. Si prega di modificarlo per iniziare la condivisione.",
"share_via_onionshare": "Condividi via OnionShare",
"gui_connect_to_tor_for_onion_settings": "Connetti a Tor per vedere le impostazioni del servizio onion",
"gui_use_legacy_v2_onions_checkbox": "Usa gli indirizzi legacy",
"gui_save_private_key_checkbox": "Usa un indirizzo persistente",
"gui_share_url_description": "<b>1 Tutti</b>2 con questo l'indirizzo di OnionShare possono <b>3 scaricare</b>4 i tuoi file usando <b>5 il Browser Tor</b>6: <img src='{}' />7",
"gui_receive_url_description": "<b>1 Tutti</b>2 con questo indirizzo OnionShare possono <b>3 caricare</b>4 file nel tuo computer usando <b>5 Tor Browser</b>6: <img src='{}' />7",
@ -266,7 +260,6 @@
"gui_close_tab_warning_website_description": "Stai ospitando un sito web. Sei sicuro di voler chiudere questa scheda?",
"mode_settings_website_disable_csp_checkbox": "Non inviare l'intestazione della Politica sulla Sicurezza dei Contenuti (consente al sito web di utilizzare risorse di terze parti)",
"mode_settings_receive_data_dir_browse_button": "Naviga",
"mode_settings_client_auth_checkbox": "Usa l'autorizzazione del client",
"mode_settings_autostop_timer_checkbox": "Interrompere il servizio onion all'ora pianificata",
"mode_settings_autostart_timer_checkbox": "Avviare il servizio onion all'ora pianificata",
"mode_settings_persistent_checkbox": "Salva questa scheda e aprirla automaticamente quando apro OnionShare",

View File

@ -47,14 +47,11 @@
"gui_receive_stop_server_autostop_timer": "受信モードを停止(残り {} 秒)",
"gui_receive_stop_server_autostop_timer_tooltip": "{}に自動停止します",
"gui_copy_url": "アドレスをコピー",
"gui_copy_hidservauth": "HidServAuthをコピー",
"gui_downloads": "ダウンロード履歴",
"gui_no_downloads": "まだダウンロードがありません",
"gui_canceled": "キャンセルされました",
"gui_copied_url_title": "OnionShareのアドレスをコピーしました",
"gui_copied_url": "OnionShareのアドレスをクリップボードへコピーしました",
"gui_copied_hidservauth_title": "HidServAuthをコピーしました",
"gui_copied_hidservauth": "HidServAuthの行をクリップボードへコピーしました",
"gui_please_wait": "実行中… クリックでキャンセルします。",
"gui_download_upload_progress_complete": "%p%、 経過時間 ({0:s})。",
"gui_download_upload_progress_starting": "{0:s}, %p% (計算中)",
@ -65,14 +62,12 @@
"gui_receive_quit_warning": "ファイルを受信中です。本当にOnionShareを終了しますか",
"gui_quit_warning_quit": "終了",
"gui_quit_warning_dont_quit": "キャンセル",
"error_rate_limit": "誰かが何度パスワードを推測しようとして試みるので、不正アクセスしようとする可能性があります。セキュリティーのためにOnionShareはサーバーを停止しました。再び共有し始めて、受領者に新しいアドレスを送って下さい。",
"zip_progress_bar_format": "圧縮中: %p%",
"error_stealth_not_supported": "クライアント認証を使用するのに、少なくともTor 0.2.9.1-alpha (それともTor Browser 6.5)とpython3-stem 1.5.0が必要です。",
"error_ephemeral_not_supported": "OnionShareは少なくともTor 0.2.7.1とpython3-stem 1.4.0が必要です。",
"gui_settings_window_title": "設定",
"gui_settings_whats_this": "<a href='{0:s}'>これは何ですか?</a>",
"gui_settings_stealth_option": "クライアント認証を使用",
"gui_settings_stealth_hidservauth_string": "秘密鍵を保存したので、クリックしてHidServAuthをコピーできます。",
"gui_settings_autoupdate_label": "更新バージョンの有無をチェックする",
"gui_settings_autoupdate_option": "更新通知を起動します",
"gui_settings_autoupdate_timestamp": "前回にチェックした時: {}",
@ -138,7 +133,6 @@
"gui_server_autostop_timer_expired": "自動停止タイマーはすでにタイムアウトしています。共有し始めるにはタイマーを調整して下さい。",
"share_via_onionshare": "OnionShareで共有する",
"gui_connect_to_tor_for_onion_settings": "onionサービス設定を見るのにTorと接続して下さい",
"gui_use_legacy_v2_onions_checkbox": "レガシーアドレスを使用する",
"gui_save_private_key_checkbox": "永続的アドレスを使用する",
"gui_share_url_description": "このOnionShareアドレスを持つ限り<b>誰でも</b>は<b>Tor Browser</b>を利用してこのファイルを<b>ダウンロードできます</b><img src='{}' />",
"gui_receive_url_description": "このOnionShareアドレスを持つ限り<b>誰でも</b>は<b>Tor Browser</b>を利用してこのPCにファイルを<b>アップロードできます</b><img src='{}' />",
@ -238,7 +232,6 @@
"mode_settings_receive_data_dir_browse_button": "閲覧",
"mode_settings_receive_data_dir_label": "保存するファイルの位置",
"mode_settings_share_autostop_sharing_checkbox": "ファイル送信が終了したら共有を停止(個別ファイルのダウンロードを許可するにはチェックマークを消す)",
"mode_settings_client_auth_checkbox": "クライアント認証を利用",
"mode_settings_legacy_checkbox": "レガシーアドレスを利用するv2 onionサービス、非推奨",
"mode_settings_autostop_timer_checkbox": "指定の日時にonionサービスを停止する",
"mode_settings_autostart_timer_checkbox": "指定の日時にonionサービスを起動する",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "პროგრამის დატოვება",
"gui_quit_warning_dont_quit": "",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "",
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -21,12 +21,9 @@
"gui_receive_stop_server": "",
"gui_receive_stop_server_autostop_timer": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_waiting_to_start": "",
"gui_please_wait": "",
"gui_quit_title": "",
@ -34,14 +31,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "",
"gui_quit_warning_dont_quit": "",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -111,7 +106,6 @@
"gui_autostop_timer_cant_be_earlier_than_autostart_timer": "",
"share_via_onionshare": "",
"gui_connect_to_tor_for_onion_settings": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -45,14 +45,11 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "취소 된",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -63,14 +60,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "종료",
"gui_quit_warning_dont_quit": "취소",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "설정",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -135,7 +130,6 @@
"gui_server_started_after_autostop_timer": "",
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -45,14 +45,11 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -63,14 +60,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "",
"gui_quit_warning_dont_quit": "",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -135,7 +130,6 @@
"gui_server_started_after_autostop_timer": "",
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -30,7 +30,6 @@
"gui_copied_hidservauth": "HidServAuth eilutė nukopijuota į iškarpinę",
"gui_waiting_to_start": "Planuojama pradėti {}. Spustelėkite , jei norite atšaukti.",
"gui_please_wait": "Pradedama… Spustelėkite norėdami atsisakyti.",
"error_rate_limit": "Kažkas padarė per daug klaidingų bandymų atspėti jūsų slaptažodį, todėl „OnionShare“ sustabdė serverį. Vėl pradėkite bendrinti ir nusiųskite gavėjui naują bendrinimo adresą.",
"zip_progress_bar_format": "Glaudinama: %p%",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
@ -109,7 +108,6 @@
"gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Automatinio sustabdymo laikas negali būti toks pat arba ankstesnis už automatinio paleidimo laiką. Sureguliuokite jį, kad galėtumėte pradėti dalytis.",
"share_via_onionshare": "Bendrinti per OnionShare",
"gui_connect_to_tor_for_onion_settings": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "<b>Visi</b>, turintys šį OnionShare adresą gali <b>atsisiųsti</b> jūsų failus, naudodamiesi <b>Tor Naršykle</b>: <img src='{}' />",
"gui_website_url_description": "<b>Kiekvienas</b>, turintis šį „OnionShare“ adresą, gali <b>apsilankyti</b> jūsų svetainėje naudodamas <b>„Tor“ naršyklę</b>: <img src='{}' />",
@ -200,7 +198,6 @@
"mode_settings_autostart_timer_checkbox": "Pradėti onion paslaugos paleidimą suplanuotu laiku",
"mode_settings_autostop_timer_checkbox": "Sustabdyti onion paslaugos paleidimą suplanuotu laiku",
"mode_settings_legacy_checkbox": "Naudoti senąjį adresą (nerekomenduojama naudoti v2 onion paslaugos)",
"mode_settings_client_auth_checkbox": "Naudoti kliento autorizavimą",
"mode_settings_share_autostop_sharing_checkbox": "Sustabdyti dalijimąsi po to, kai failai buvo išsiųsti (atžymėkite, jei norite leisti atsisiųsti atskirus failus)",
"mode_settings_receive_data_dir_label": "Įrašyti failus į",
"mode_settings_receive_data_dir_browse_button": "Naršyti",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "Излези",
"gui_quit_warning_dont_quit": "Откажи",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "Поставки",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "",
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -36,12 +36,9 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"version_string": "",
"gui_quit_title": "",
@ -49,14 +46,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "Keluar",
"gui_quit_warning_dont_quit": "Batal",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "Tetapan",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -123,7 +118,6 @@
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_connect_to_tor_for_onion_settings": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -45,13 +45,10 @@
"gui_receive_stop_server_autostop_timer": "Stopp mottaksmodus ({} gjenstår)",
"gui_receive_stop_server_autostop_timer_tooltip": "Tidsavbruddsuret går ut {}",
"gui_copy_url": "Kopier nettadresse",
"gui_copy_hidservauth": "Kopier HidServAuth",
"gui_downloads": "Nedlastingshistorikk",
"gui_no_downloads": "Ingen nedlastinger enda.",
"gui_canceled": "Avbrutt",
"gui_copied_url_title": "Kopierte OnionShare-adressen",
"gui_copied_hidservauth_title": "Kopierte HidServAuth",
"gui_copied_hidservauth": "HidServAuth-linje kopiert til utklippstavle",
"gui_please_wait": "Starter… Klikk for å avbryte.",
"gui_download_upload_progress_complete": "%p%, {0:s} forløpt.",
"gui_download_upload_progress_starting": "{0:s}, %p% (regner ut)",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "Du har ikke fått alle filene enda. Er du sikker på at du ønsker å avslutte OnionShare?",
"gui_quit_warning_quit": "Avslutt",
"gui_quit_warning_dont_quit": "Avbryt",
"error_rate_limit": "Noen har prøvd å gjette passordet ditt for mange ganger, så OnionShare har derfor stoppet tjeneren. Start deling igjen, og send mottakeren en ny adresse å dele.",
"zip_progress_bar_format": "Pakker sammen: %p%",
"error_stealth_not_supported": "For å bruke klientidentitetsbekreftelse, trenger du minst Tor 0.2.9.1-alpha (eller Tor-Browser 6.5) og python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare krever minst både Tor 0.2.7.1 og pything3-stem 1.4.0.",
"gui_settings_window_title": "Innstillinger",
"gui_settings_whats_this": "<a href='{0:s}'>Hva er dette?</a>",
"gui_settings_stealth_option": "Bruk klientidentifisering",
"gui_settings_stealth_hidservauth_string": "Siden du har lagret din private nøkkel for gjenbruk, kan du nå klikke for å kopiere din HidServAuth-linje.",
"gui_settings_autoupdate_label": "Se etter ny versjon",
"gui_settings_autoupdate_option": "Gi meg beskjed når en ny versjon er tilgjengelig",
"gui_settings_autoupdate_timestamp": "Sist sjekket: {}",
@ -135,7 +130,6 @@
"gui_server_started_after_autostop_timer": "Tidsavbruddsuret gikk ut før tjeneren startet. Lag en ny deling.",
"gui_server_autostop_timer_expired": "Tidsavbruddsuret har gått ut allerede. Juster det for å starte deling.",
"share_via_onionshare": "Del via OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Bruk gammeldagse adresser",
"gui_save_private_key_checkbox": "Bruk en vedvarende adresse",
"gui_share_url_description": "<b>Alle</b> som har denne OnionShare-adressen kan <b>Laste ned</b> filene dine ved bruk av <b>Tor-Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Alle</b> som har denne OnionShare-adressen kan <b>Laste opp</b> filer til din datamaskin ved bruk av <b>Tor-Browser</b>: <img src='{}' />",
@ -238,7 +232,6 @@
"systray_website_started_title": "Starter deling av nettside",
"systray_website_started_message": "Noen besøker din nettside",
"gui_website_mode_no_files": "Ingen nettside delt enda",
"invalid_password_guess": "Feil passord",
"incorrect_password": "Feil passord",
"gui_settings_individual_downloads_label": "Forby nedlasting av enkeltfiler",
"history_requests_tooltip": "{} vevforespørsler",
@ -278,7 +271,6 @@
"gui_open_folder_error": "Klarte ikke å åpne mappe med xdg-open. Filen er her: {}",
"gui_receive_flatpak_data_dir": "Fordi du har installert OnionShare som Flatpak må du lagre filer til en mappe i ~/OnionShare.",
"mode_settings_share_autostop_sharing_checkbox": "Stopp deling etter at filer er sendt (fravelg for å tillate nedlasting av individuelle filer)",
"mode_settings_client_auth_checkbox": "Bruk klient-identitetsgodkjennelse",
"gui_close_tab_warning_persistent_description": "Denne fanen er vedvarende. Hvis du lukker den vil du miste onion-adressen den bruker. Er du sikker på at du vil lukke den?",
"gui_tab_name_chat": "Prat",
"gui_tab_name_website": "Nettside",

View File

@ -31,11 +31,9 @@
"gui_delete": "Verwijder",
"gui_choose_items": "Kies",
"gui_copy_url": "Kopieer URL",
"gui_copy_hidservauth": "Kopieer HidServAuth",
"gui_downloads": "Download Geschiedenis",
"gui_canceled": "Afgebroken",
"gui_copied_url": "OnionShare adres gekopieerd naar klembord",
"gui_copied_hidservauth": "HidServAuth regel gekopieerd naar klembord",
"gui_please_wait": "Aan het starten... Klik om te annuleren.",
"gui_download_upload_progress_complete": "%p%, {0:s} verstreken.",
"gui_download_upload_progress_starting": "{0:s}, %p% (berekenen)",
@ -44,7 +42,6 @@
"gui_share_quit_warning": "Je bent in het proces van bestanden versturen. Weet je zeker dat je OnionShare af wilt sluiten?",
"gui_quit_warning_quit": "Afsluiten",
"gui_quit_warning_dont_quit": "Annuleren",
"error_rate_limit": "Iemand heeft teveel incorrecte pogingen gedaan om je wachwoord te raden. Daarom heeft OnionShare de server gestopt. Herstart het delen en stuur de ontvanger een nieuw adres.",
"zip_progress_bar_format": "Comprimeren: %p%",
"error_stealth_not_supported": "Om client authorization te gebruiken heb je op zijn minst zowel Tor 0.2.9.1-alpha (of Tor Browser 6.5) en python3-stem 1.5.0 nodig.",
"error_ephemeral_not_supported": "OnionShare vereist minstens zowel Tor 0.2.7.1 als python3-stem 1.4.0.",
@ -116,11 +113,9 @@
"gui_receive_stop_server_autostop_timer_tooltip": "Auto-stop timer stopt bij {}",
"gui_no_downloads": "Nog Geen Downloads",
"gui_copied_url_title": "Gekopieerd OnionShare Adres",
"gui_copied_hidservauth_title": "HidServAuth gekopieerd",
"gui_quit_title": "Niet zo snel",
"gui_receive_quit_warning": "Je bent in het proces van bestanden ontvangen. Weet je zeker dat je OnionShare af wilt sluiten?",
"gui_settings_whats_this": "<a href='{0:s}'>1Wat is dit?</a>2",
"gui_settings_stealth_hidservauth_string": "Je privésleutel is voor hergebruik opgeslagen. Je kunt nu klikken om je HidServAuth te kopiëren.",
"gui_settings_general_label": "Algemene instellingen",
"gui_settings_tor_bridges": "Tor bridge ondersteuning",
"gui_settings_tor_bridges_no_bridges_radio_option": "Gebruik geen bridges",
@ -136,7 +131,6 @@
"error_tor_protocol_error_unknown": "Er was een onbekende fout met Tor",
"error_invalid_private_key": "Dit type privésleutel wordt niet ondersteund",
"gui_tor_connection_lost": "De verbinding met Tor is verbroken.",
"gui_use_legacy_v2_onions_checkbox": "Gebruik ouderwetse adressen",
"gui_save_private_key_checkbox": "Gebruik een vast adres",
"gui_share_url_description": "<b>1Iedereen</b>2 met dit OnionShare-adres kan je bestanden <b>3binnenhalen</b>4 met de <b>5Tor Browser</b>6: <img src='{}' />",
"gui_receive_url_description": "<b>Iedereen</b> met dit OnionShare adres kan bestanden op je computer <b>plaatsen</b> met de <b>Tor Browser</b>: <img src='{}' />",
@ -259,7 +253,6 @@
"mode_settings_website_disable_csp_checkbox": "Stuur geen Content Security Policy header (hiermee kan uw website bronnen van derden gebruiken)",
"mode_settings_receive_data_dir_browse_button": "Blader",
"mode_settings_receive_data_dir_label": "Bewaar bestanden in",
"mode_settings_client_auth_checkbox": "Gebruik client authorisatie",
"mode_settings_autostop_timer_checkbox": "Stop onion service op een geplande tijd",
"mode_settings_autostart_timer_checkbox": "Start onion service op een geplande tijd",
"mode_settings_persistent_checkbox": "Bewaar dit tabblad en open het automatisch wanneer ik OnionShare open",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "ਬਾਹਰ",
"gui_quit_warning_dont_quit": "",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "",
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "Zatrzymaj tryb odbierania (pozostało {})",
"gui_receive_stop_server_autostop_timer_tooltip": "Czas upływa za {}",
"gui_copy_url": "Kopiuj adres załącznika",
"gui_copy_hidservauth": "Kopiuj HidServAuth",
"gui_downloads": "Historia pobierania",
"gui_no_downloads": "Nie pobrano jeszcze niczego",
"gui_canceled": "Anulowano",
"gui_copied_url_title": "Skopiowano adres URL OnionShare",
"gui_copied_url": "Adres URL OnionShare został skopiowany do schowka",
"gui_copied_hidservauth_title": "Skopiowano HidServAuth",
"gui_copied_hidservauth": "Linijka HidServAuth została skopiowana do schowka",
"gui_please_wait": "Rozpoczynam... Kliknij, aby zatrzymać.",
"gui_download_upload_progress_complete": "%p%, {0:s} upłynęło.",
"gui_download_upload_progress_starting": "{0:s}, %p% (obliczam)",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "Odbierasz teraz pliki. Jesteś pewien, że chcesz wyjść z OnionShare?",
"gui_quit_warning_quit": "Wyjście",
"gui_quit_warning_dont_quit": "Anuluj",
"error_rate_limit": "Ktoś zbyt często próbował odczytać Twój adres, co może oznaczać, że ktoś próbuje go odgadnąć, zatem OnionShare zatrzymał serwer. Rozpocznij udostępnianie ponownie i wyślij odbiorcy nowy adres aby udostępniać Twoje pliki.",
"zip_progress_bar_format": "Kompresuję: %p%",
"error_stealth_not_supported": "Aby skorzystać z autoryzacji klienta wymagana jest wersja programu Tor 0.2.9.1-alpha lub nowsza, bądź Tor Browser w wersji 6.5 lub nowszej oraz python3-stem w wersji 1.5 lub nowszej.",
"error_ephemeral_not_supported": "OnionShare wymaga programu Tor w wersji 0.2.7.1 lub nowszej oraz python3-stem w wersji 1.4.0 lub nowszej.",
"gui_settings_window_title": "Ustawienia",
"gui_settings_whats_this": "<a href='{0:s}'>Co to jest?</a>",
"gui_settings_stealth_option": "Użyj autoryzacji klienta",
"gui_settings_stealth_hidservauth_string": "Po zapisaniu klucza prywatnego do ponownego użycia, możesz teraz kliknąć, aby skopiować HidServAuth.",
"gui_settings_autoupdate_label": "Sprawdź nową wersję",
"gui_settings_autoupdate_option": "Poinformuj mnie, kiedy nowa wersja programu będzie dostępna",
"gui_settings_autoupdate_timestamp": "Ostatnie sprawdzenie aktualizacji: {}",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "Czasomierz automatycznego rozpoczęcia wygasł przed uruchomieniem serwera. Utwórz nowy udział.",
"gui_server_autostop_timer_expired": "Czasomierz automatycznego rozpoczęcia wygasł. Dostosuj go, aby rozpocząć udostępnianie.",
"share_via_onionshare": "Udostępniaj przez OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Użyj starszych adresów",
"gui_save_private_key_checkbox": "Użyj stałego adresu",
"gui_share_url_description": "<b>Każdy</b> z tym adresem OnionShare może <b> pobrać</b> Twoje pliki za pomocą przeglądarki <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Każdy</b> z tym adresem OnionShare może <b>przesyłać</b> pliki na komputer za pomocą przeglądarki <b>Tor Browser</b>: <img src='{}' />",
@ -265,7 +259,6 @@
"mode_settings_receive_data_dir_browse_button": "Przeglądaj",
"mode_settings_receive_data_dir_label": "Zapisz pliki do",
"mode_settings_share_autostop_sharing_checkbox": "Zatrzymaj udostępnianie po wysłaniu plików (usuń zaznaczenie, aby umożliwić pobieranie pojedynczych plików)",
"mode_settings_client_auth_checkbox": "Użyj autoryzacji klienta",
"mode_settings_legacy_checkbox": "Użyj starszego adresu (onion service v2, niezalecane)",
"mode_settings_autostop_timer_checkbox": "Zatrzymaj usługę cebulową w zaplanowanym czasie",
"mode_settings_autostart_timer_checkbox": "Uruchomienie usługi cebulowej w zaplanowanym czasie",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "Parar o Modo Recepção ({} para terminar)",
"gui_receive_stop_server_autostop_timer_tooltip": "O cronômetro automático termina às {}",
"gui_copy_url": "Copiar endereço",
"gui_copy_hidservauth": "Copiar HidServAuth",
"gui_downloads": "Histórico de download",
"gui_no_downloads": "Nenhum download por enquanto",
"gui_canceled": "Cancelado",
"gui_copied_url_title": "O endereço OnionShare foi copiado",
"gui_copied_url": "O endereço OnionShare foi copiado para a área de transferência",
"gui_copied_hidservauth_title": "O HidServAuth foi copiado",
"gui_copied_hidservauth": "A linha HidServAuth foi copiada na área de transferência",
"gui_please_wait": "Começando... Clique para cancelar.",
"gui_download_upload_progress_complete": "%p%, {0:s} decorridos.",
"gui_download_upload_progress_starting": "{0:s}, %p% (calculando)",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "O recebimento dos seus arquivos ainda não terminou. Você tem certeza de que quer sair do OnionShare?",
"gui_quit_warning_quit": "Sair",
"gui_quit_warning_dont_quit": "Cancelar",
"error_rate_limit": "Alguém tentou por várias vezes adivinhar sua senha. Por isso, o OnionShare interrompeu o servidor. Comece o compartilhamento novamente e envie um novo endereço ao seu destinatário para compartilhar.",
"zip_progress_bar_format": "Comprimindo: %p%",
"error_stealth_not_supported": "Para usar uma autorização de cliente, você precisa ao menos de Tor 0.2.9.1-alpha (ou Navegador Tor 6.5) e de python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare requer ao menos Tor 0.2.7.1 e python3-stem 1.4.0.",
"gui_settings_window_title": "Configurações",
"gui_settings_whats_this": "<a href='{0:s}'>O que é isso?</a>",
"gui_settings_stealth_option": "Usar autorização de cliente",
"gui_settings_stealth_hidservauth_string": "Após salvar a sua chave privada para reutilização, você pode clicar para copiar o seu HidServAuth.",
"gui_settings_autoupdate_label": "Procurar por uma nova versão",
"gui_settings_autoupdate_option": "Notificar-me quando uma nova versão estiver disponível",
"gui_settings_autoupdate_timestamp": "Última verificação: {}",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "O cronômetro de parada automática acabou antes que o servidor fosse iniciado. Por favor, faça um novo compartilhamento.",
"gui_server_autostop_timer_expired": "O cronômetro já esgotou. Por favor, ajuste-o para começar a compartilhar.",
"share_via_onionshare": "Compartilhar via OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Usar endereços do tipo antigo",
"gui_save_private_key_checkbox": "Usar o mesmo endereço",
"gui_share_url_description": "<b>Qualquer pessoa</b> com este endereço do OnionShare pode <b>baixar</b> seus arquivos usando o <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Qualquer pessoa</b> com este endereço do OnionShare pode <b>carregar</b> arquivos no seu computador usando o <b>Tor Browser</b>: <img src='{}' />",
@ -239,7 +233,6 @@
"mode_settings_receive_data_dir_browse_button": "Navegar",
"mode_settings_receive_data_dir_label": "Salvar arquivos em",
"mode_settings_share_autostop_sharing_checkbox": "Interrompa o compartilhamento após o envio dos arquivos (desmarque para permitir o download de arquivos individuais)",
"mode_settings_client_auth_checkbox": "Usar autorização de cliente",
"mode_settings_legacy_checkbox": "Usar um endereço herdado (serviço de onion v2, não recomendado)",
"mode_settings_autostop_timer_checkbox": "Interromper o serviço de onion na hora programada",
"mode_settings_autostart_timer_checkbox": "Iniciar serviço de onion na hora programada",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "Parar Modo de Receber ({} restantes)",
"gui_receive_stop_server_autostop_timer_tooltip": "O cronómetro automático de parar a partilha termina em {}",
"gui_copy_url": "Copiar Endereço",
"gui_copy_hidservauth": "Copiar HidServAuth",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "Cancelado",
"gui_copied_url_title": "Endereço OnionShare Copiado",
"gui_copied_url": "O endereço OnionShare foi copiado para área de transferência",
"gui_copied_hidservauth_title": "HidServAuth Copiado",
"gui_copied_hidservauth": "Linha HidServAuth copiada para a área de transferência",
"gui_please_wait": "A iniciar… Clique para cancelar.",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "Ainda não recebeu todos os seus ficheiros. Tem a certeza que que deseja sair do OnionShare?",
"gui_quit_warning_quit": "Sair",
"gui_quit_warning_dont_quit": "Cancelar",
"error_rate_limit": "Alguém tentou por várias vezes adivinhar a sua palavra-passe, por isso OnionShare parou o servidor. Inicie novamente a partilha e envie um novo endereço ao destinatário para partilhar.",
"zip_progress_bar_format": "A comprimir: %p%",
"error_stealth_not_supported": "Para utilizar uma autorização de cliente, precisa pelo menos do Tor 0.2.9.1-alpha (ou do Tor Browser 6.5) e do python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare requer pelo menos do Tor 0.2.7.1 e do python3-stem 1.4.0.",
"gui_settings_window_title": "Configurações",
"gui_settings_whats_this": "<a href='{0:s}'>O que é isto?</a>",
"gui_settings_stealth_option": "Utilizar autorização de cliente",
"gui_settings_stealth_hidservauth_string": "Depois de guardar a sua chave privada para reutilização, pode clicar para copiar o seu HidServAuth.",
"gui_settings_autoupdate_label": "Procurar por nova versão",
"gui_settings_autoupdate_option": "Notificar-me quando estiver disponível uma nova versão",
"gui_settings_autoupdate_timestamp": "Última verificação: {}",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "O cronómetro de paragem automática atingiu o tempo limite antes do servidor iniciar. Crie uma nova partilha.",
"gui_server_autostop_timer_expired": "O cronómetro de paragem automática expirou. Por favor, ajuste-o para começar a partilhar.",
"share_via_onionshare": "Partilhar via OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Usar endereços antigos",
"gui_save_private_key_checkbox": "Usar um endereço persistente",
"gui_share_url_description": "<b>Qualquer pessoa</b> com este endereço do OnionShare pode <b>descarregar</b> os seus ficheiros utilizando o <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Qualquer pessoa</b> com este endereço do OnionShare pode <b>enviar</b> ficheiros para o seu computador utilizando o <b>Tor Browser</b>: <img src='{}' />",
@ -255,7 +249,6 @@
"mode_settings_receive_data_dir_browse_button": "Navegar",
"mode_settings_receive_data_dir_label": "Guardar ficheiros para",
"mode_settings_share_autostop_sharing_checkbox": "Parar a partilha de ficheiros após terem sido enviados (desmarque para permitir o descarregamento de ficheiros individuais)",
"mode_settings_client_auth_checkbox": "Utilizar autorização do cliente",
"mode_settings_legacy_checkbox": "Utilize um endereço de herança (serviço onion v2, não é recomendado)",
"mode_settings_persistent_checkbox": "Guarda esta aba e abre-a automaticamente quando eu inicio o OnionShare",
"gui_quit_warning_description": "A partilha está ativa em algumas das suas abas. Se sair, todas as abas serão fechadas. Tem a certeza que pretende sair?",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "Opriți modul de primire (au rămas {})",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "Copiere adresă",
"gui_copy_hidservauth": "Copiere HidServAuth",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "Anulat",
"gui_copied_url_title": "Adresă OnionShare copiată",
"gui_copied_url": "Adresa OnionShare a fost copiată în memoria clipboard",
"gui_copied_hidservauth_title": "Am copiat HidServAuth",
"gui_copied_hidservauth": "Linia HidServAuth a fost copiată în clipboard",
"gui_please_wait": "Începem ... Faceți clic pentru a anula.",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "Sunteți în proces de primire fișiere. Sigur vreți să închideți OnionShare?",
"gui_quit_warning_quit": "Închidere",
"gui_quit_warning_dont_quit": "Anulare",
"error_rate_limit": "Cineva a făcut prea multe încercări greșite pentru a ghici parola, astfel încât OnionShare a oprit serverul. Începeți partajarea din nou și trimiteți destinatarului o nouă adresă de partajat.",
"zip_progress_bar_format": "Compresare: %p%",
"error_stealth_not_supported": "Pentru a folosi autorizarea clientului, aveți nevoie de versiunile minim Tor 0.2.9.1-alfa (sau Tor Browser 6.5) cât și de python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare are nevoie de minim versiunea Tor 0.2.7.1 cât și de Python3-stem 1.4.0.",
"gui_settings_window_title": "Setari",
"gui_settings_whats_this": "<a href='{0:s}'>Ce este asta?</a>",
"gui_settings_stealth_option": "Utilizați autorizarea clientului",
"gui_settings_stealth_hidservauth_string": "După ce v-ați salvat cheia privată pentru reutilizare, înseamnă că puteți face clic acum pentru a copia HidServAuth.",
"gui_settings_autoupdate_label": "Verificați dacă există o versiune nouă",
"gui_settings_autoupdate_option": "Anunțați-mă când este disponibilă o nouă versiune",
"gui_settings_autoupdate_timestamp": "Ultima verificare: {}",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "Cronometrul de oprire automată a expirat înainte de pornirea serverului. Vă rugăm să faceți o nouă partajare.",
"gui_server_autostop_timer_expired": "Timpul pentru cronometrul auto-stop a expirat deja. Vă rugăm să îl modificați pentru a începe distribuirea.",
"share_via_onionshare": "Partajați prin OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Folosire adrese moștenite",
"gui_save_private_key_checkbox": "Folosiți o adresă persistentă",
"gui_share_url_description": "<b>Oricine</b> are această adresă OnionShare poate <b>descărca</b> fișierele dvs. folosind <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Oricine</b> are această adresă OnionShare poate <b>încărca</b> fișiere pe computerul dvs. folosind <b>Tor Browser</b>: <img src='{}' />",

View File

@ -66,12 +66,9 @@
"gui_receive_stop_server": "Выключить режим получения",
"gui_receive_stop_server_autostop_timer": "Выключить Режим Получения (осталось {})",
"gui_receive_stop_server_autostop_timer_tooltip": "Время таймера истекает в {}",
"gui_copy_hidservauth": "Скопировать строку HidServAuth",
"gui_downloads": "История скачиваний",
"gui_no_downloads": "Скачиваний пока нет ",
"gui_copied_url_title": "Адрес OnionShare скопирован",
"gui_copied_hidservauth_title": "Строка HidServAuth скопирована",
"gui_copied_hidservauth": "Строка HidServAuth скопирована в буфер обмена",
"gui_please_wait": "Запуск... Для отмены нажмите здесь.",
"gui_download_upload_progress_complete": "%p%, прошло {0:s}.",
"gui_download_upload_progress_starting": "{0:s}, %p% (вычисляем)",
@ -80,13 +77,11 @@
"gui_quit_title": "Не так быстро",
"gui_share_quit_warning": "Идёт процесс отправки файлов. Уверены, что хотите завершить работу OnionShare?",
"gui_receive_quit_warning": "Идёт процесс получения файлов. Уверены, что хотите завершить работу OnionShare?",
"error_rate_limit": "Кто-то совершил слишком много попыток отгадать Ваш пароль, в связи с чем OnionShare остановил сервер. Отправьте Ваши данные повторно и перешлите получателю новый адрес.",
"zip_progress_bar_format": "Сжатие: %p%",
"error_stealth_not_supported": "Для использования авторизации клиента необходимы как минимум версии Tor 0.2.9.1-alpha (или Tor Browser 6.5) и библиотеки python3-stem 1.5.0.",
"error_ephemeral_not_supported": "Для работы OnionShare необходимы как минимум версии Tor 0.2.7.1 и библиотеки python3-stem 1.4.0.",
"gui_settings_whats_this": "<a href='{0:s}'>Что это?</a>",
"gui_settings_stealth_option": "Использовать авторизацию клиента",
"gui_settings_stealth_hidservauth_string": "Сохранили Ваш приватный ключ для повторного использования.\nНажмите сюда, чтобы скопировать строку HidServAuth.",
"gui_settings_autoupdate_label": "Проверить наличие новой версии",
"gui_settings_autoupdate_option": "Уведомить меня, когда будет доступна новая версия",
"gui_settings_autoupdate_timestamp": "Последняя проверка: {}",
@ -141,7 +136,6 @@
"gui_server_started_after_autostop_timer": "Время стоп-таймера истекло до того, как сервер был запущен. Пожалуйста, отправьте файлы заново.",
"gui_server_autostop_timer_expired": "Время стоп-таймера истекло. Пожалуйста, отрегулируйте его для начала отправки.",
"share_via_onionshare": "Поделиться через OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Используйте устаревшие адреса",
"gui_save_private_key_checkbox": "Используйте постоянный адрес",
"gui_share_url_description": "<b>Кто угодно</b> c этим адресом OnionShare может <b>скачать</b> Ваши файлы при помощи <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Кто угодно</b> c этим адресом OnionShare может <b>загрузить</b> файлы на ваш компьютер с помощью<b>Tor Browser</b>: <img src='{}' />",
@ -240,7 +234,6 @@
"mode_settings_receive_data_dir_browse_button": "Обзор файлов",
"mode_settings_receive_data_dir_label": "Сохранять файлы в",
"mode_settings_share_autostop_sharing_checkbox": "Закрыть доступ к файлам после их отправки (отмените чтобы разрешить скачивание отдельных файлов)",
"mode_settings_client_auth_checkbox": "Использовать авторизацию клиента",
"mode_settings_legacy_checkbox": "Использовать устаревшую версию адресов (версия 2 сервиса Тор, не рукомендуем)",
"mode_settings_autostop_timer_checkbox": "Отключить сервис onion в назначенное время",
"mode_settings_autostart_timer_checkbox": "Запустить сервис onion в назначенное время",

View File

@ -24,17 +24,13 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_flatpak_data_dir": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_show_url_qr_code": "",
"gui_qr_code_dialog_title": "",
"gui_waiting_to_start": "",
"gui_please_wait": "",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"gui_settings_window_title": "",
"gui_settings_autoupdate_label": "",
@ -170,7 +166,6 @@
"mode_settings_autostart_timer_checkbox": "",
"mode_settings_autostop_timer_checkbox": "",
"mode_settings_legacy_checkbox": "",
"mode_settings_client_auth_checkbox": "",
"mode_settings_share_autostop_sharing_checkbox": "",
"mode_settings_receive_data_dir_label": "",
"mode_settings_receive_data_dir_browse_button": "",

View File

@ -24,18 +24,14 @@
"gui_receive_stop_server_autostop_timer": "Zastaviť režim prijímania (zostáva {})",
"gui_receive_flatpak_data_dir": "Pretože ste nainštalovali OnionShare pomocou Flatpak, musíte uložiť súbory do priečinka v ~/OnionShare.",
"gui_copy_url": "Kopírovať adresu",
"gui_copy_hidservauth": "Kopírovať HidServAuth",
"gui_canceled": "Zrušené",
"gui_copied_url_title": "Skopírovaná OnionShare adresa",
"gui_copied_url": "OnionShare adresa bola skopírovaná do schránky",
"gui_copied_hidservauth_title": "Skopírovaný HidServAuth",
"gui_copied_hidservauth": "HidServAuth riadok bol skopírovaný do schránky",
"gui_show_url_qr_code": "Zobraziť QR kód",
"gui_qr_code_dialog_title": "OnionShare QR kód",
"gui_qr_code_description": "Naskenujte tento QR kód pomocou čítačky QR, napríklad fotoaparátom na telefóne, aby ste mohli jednoduchšie zdieľať adresu OnionShare s niekým.",
"gui_waiting_to_start": "Naplánované spustenie o {}. Kliknutím zrušíte.",
"gui_please_wait": "Spúšťa sa... Kliknutím zrušíte.",
"error_rate_limit": "Niekto urobil príliš veľa zlých pokusov uhádnuť vaše heslo, takže OnionShare zastavil server. Začnite znova zdieľať a odošlite príjemcovi novú adresu na zdieľanie.",
"zip_progress_bar_format": "Komprimovanie: %p%",
"gui_settings_window_title": "Nastavenia",
"gui_settings_autoupdate_label": "Skontrolovať novú verziu",
@ -169,7 +165,6 @@
"mode_settings_autostart_timer_checkbox": "Spustiť onion službu v plánovanom čase",
"mode_settings_autostop_timer_checkbox": "Zastaviť onion službu v plánovanom čase",
"mode_settings_legacy_checkbox": "Použiť staršiu adresu (v2 onion služba, neodporúča sa)",
"mode_settings_client_auth_checkbox": "Použiť autorizáciu klienta",
"mode_settings_share_autostop_sharing_checkbox": "Po odoslaní súborov zastaviť zdieľanie (zrušením začiarknutia povolíte sťahovanie jednotlivých súborov)",
"mode_settings_receive_data_dir_label": "Uložiť súbory do",
"mode_settings_receive_data_dir_browse_button": "Prechádzať",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "Odpovedan",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "Izhod",
"gui_quit_warning_dont_quit": "",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "",
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -47,14 +47,11 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -65,14 +62,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "",
"gui_quit_warning_dont_quit": "",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -138,7 +133,6 @@
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_connect_to_tor_for_onion_settings": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -22,12 +22,9 @@
"gui_receive_stop_server": "Prekini režim primanja",
"gui_receive_stop_server_autostop_timer": "Prekini režim primanja ({} preostalo)",
"gui_copy_url": "Kopiraj adresu",
"gui_copy_hidservauth": "Kopiraj HidServAuth",
"gui_canceled": "Obustavljeno",
"gui_copied_url_title": "Kopirana OnionShare adresa",
"gui_copied_url": "OnionShare adresa kopirana u privremenu memoriju",
"gui_copied_hidservauth_title": "Kopiran HidServAuth",
"gui_copied_hidservauth": "HidServAuth linija kopirana u privremenu memoriju",
"gui_waiting_to_start": "Planirano da počne u {}. Klikni da obustaviš.",
"gui_please_wait": "Počinje… Klikni da obustaviš.",
"gui_quit_title": "Ne tako brzo",
@ -35,14 +32,12 @@
"gui_receive_quit_warning": "Proces primanja datoteka u toku. Jeste li sigurni da želite da zaustavite OnionShare?",
"gui_quit_warning_quit": "Izađi",
"gui_quit_warning_dont_quit": "Odustani",
"error_rate_limit": "Neko je načinio suviše pogrešnih pokušaja da pogodi tvoju lozinku, tako da je OnionShare zaustavio server. Počni deljenje ponovo i pošalji primaocu novu adresu za deljenje.",
"zip_progress_bar_format": "Komprimujem: %p%",
"error_stealth_not_supported": "Da bi koristion klijen autorizaciju, potrebni su ti barem Tor 0.2.9.1-alpha (ili Tor Browser 6.5) i python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare zahteva barem Tor 0.2.7.1 i python3-stem 1.4.0.",
"gui_settings_window_title": "Podešavanja",
"gui_settings_whats_this": "<a href='{0:s}'>Šta je ovo?</a>",
"gui_settings_stealth_option": "Koristi klijent autorizaciju",
"gui_settings_stealth_hidservauth_string": "Ako si sačuvao svoj privatni ključ za ponovnu upotrenu, sada možeš kliknuti da iskopiraš svoj HidServAuth.",
"gui_settings_autoupdate_label": "Proveri da li postoji nova verzija",
"gui_settings_autoupdate_option": "Obavesti me kada nova verzija bude na raspolaganju",
"gui_settings_autoupdate_timestamp": "Poslednja provera: {}",
@ -114,7 +109,6 @@
"gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Vreme automatskog zaustavljanja ne može biti isto ili ranije od vremena početka automatskog pokretanja. Podesi ga da bi započelo deljenje.",
"share_via_onionshare": "Deljenje pomoću OnionShare",
"gui_connect_to_tor_for_onion_settings": "Poveži se sa Torom da bi video postavke onion servisa",
"gui_use_legacy_v2_onions_checkbox": "Koristi nasleđene adrese",
"gui_save_private_key_checkbox": "Koristi trajnu adresu",
"gui_share_url_description": "<b>Svako</b> sa ovom OnionShare sdresom može <b>preuzeti</b> tvoje datoteke koristeći <b>Tor Browser</b>: <img src='{}' />",
"gui_website_url_description": "<b>Svako</b> sa ovom OnionShare adresom može <b>posetiti</b> tvoju veb-stranicu koristeći <b>Tor Browser</b>: <img src='{}' />",
@ -192,7 +186,6 @@
"gui_close_tab_warning_persistent_description": "Ovaj jezičak je postojan. Ako ga zatvorite, izgubićete onion adresu koju koristite. Da li ste sigurni da želite zatvoriti?",
"mode_settings_receive_data_dir_browse_button": "Pronađi",
"mode_settings_receive_data_dir_label": "Sačuvaj fajlove u",
"mode_settings_client_auth_checkbox": "Koristi klijentsku autorizaciju",
"mode_settings_legacy_checkbox": "Koristite zastarelu adresu (v2 onion servis, nije preporučeno)",
"mode_settings_autostop_timer_checkbox": "Zaustavi onion servis u planirano vreme",
"mode_settings_autostart_timer_checkbox": "Pokreni onion servis u planirano vreme",

View File

@ -45,14 +45,11 @@
"gui_receive_stop_server_autostop_timer": "Stoppa mottagningsläge ({} kvarstår)",
"gui_receive_stop_server_autostop_timer_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}",
"gui_copy_url": "Kopiera adress",
"gui_copy_hidservauth": "Kopiera HidServAuth",
"gui_downloads": "Nedladdningshistorik",
"gui_no_downloads": "Inga Nedladdningar Än",
"gui_canceled": "Avbruten",
"gui_copied_url_title": "OnionShare-adress kopierad",
"gui_copied_url": "OnionShare-adress kopierad till urklipp",
"gui_copied_hidservauth_title": "HidServAuth kopierad",
"gui_copied_hidservauth": "HidServAuth-rad kopierad till urklipp",
"gui_please_wait": "Startar... klicka för att avbryta.",
"gui_download_upload_progress_complete": "%p%, {0:s} förflutit.",
"gui_download_upload_progress_starting": "{0:s}, %p% (beräknar)",
@ -63,14 +60,12 @@
"gui_receive_quit_warning": "Du håller på att ta emot filer. Är du säker på att du vill avsluta OnionShare?",
"gui_quit_warning_quit": "Avsluta",
"gui_quit_warning_dont_quit": "Avbryt",
"error_rate_limit": "Någon har gjort för många felförsök att gissa ditt lösenord, därför har OnionShare stoppat servern. Starta delning igen och skicka mottagaren en ny adress att dela.",
"zip_progress_bar_format": "Komprimerar: %p%",
"error_stealth_not_supported": "För att använda klientauktorisering behöver du minst både Tor 0.2.9.1-alpha (eller Tor Browser 6.5) och python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare kräver minst både Tor 0.2.7.1 och python3-stem 1.4.0.",
"gui_settings_window_title": "Inställningar",
"gui_settings_whats_this": "<a href='{0:s}'>Vad är det här?</a>",
"gui_settings_stealth_option": "Använd klientauktorisering",
"gui_settings_stealth_hidservauth_string": "Efter att ha sparat din privata nyckel för återanvändning, innebär det att du nu kan klicka för att kopiera din HidServAuth.",
"gui_settings_autoupdate_label": "Sök efter ny version",
"gui_settings_autoupdate_option": "Meddela mig när en ny version är tillgänglig",
"gui_settings_autoupdate_timestamp": "Senast kontrollerad: {}",
@ -135,7 +130,6 @@
"gui_server_started_after_autostop_timer": "Tiden för den automatiska stopp-tidtagaren löpte ut innan servern startades.\nVänligen gör en ny delning.",
"gui_server_autostop_timer_expired": "Den automatiska stopp-tidtagaren har redan löpt ut. Vänligen justera den för att starta delning.",
"share_via_onionshare": "Dela med OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Använd äldre adresser",
"gui_save_private_key_checkbox": "Använd en beständig adress",
"gui_share_url_description": "<b>Alla</b> med denna OnionShare-adress kan <b>hämta</b> dina filer med <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Alla</b> med denna OnionShare-adress kan <b>ladda upp</b> filer till din dator med <b>Tor Browser</b>: <img src='{}' />",
@ -226,7 +220,6 @@
"hours_first_letter": "t",
"minutes_first_letter": "m",
"seconds_first_letter": "s",
"invalid_password_guess": "Ogiltig lösenordsgissning",
"gui_website_url_description": "<b>Alla</b> med denna OnionShare-adress kan <b>besöka</b> din webbplats med <b>Tor Browser</b>: <img src='{}' />",
"gui_mode_website_button": "Publicera webbplats",
"systray_site_loaded_title": "Webbplats inläst",
@ -247,7 +240,6 @@
"mode_settings_receive_data_dir_browse_button": "Bläddra",
"mode_settings_receive_data_dir_label": "Spara filer till",
"mode_settings_share_autostop_sharing_checkbox": "Stoppa delning efter att filer har skickats (avmarkera för att tillåta hämtning av enskilda filer)",
"mode_settings_client_auth_checkbox": "Använd klientauktorisering",
"mode_settings_legacy_checkbox": "Använd en äldre adress (v2-oniontjänst, rekommenderas inte)",
"mode_settings_autostart_timer_checkbox": "Starta oniontjänsten vid schemalagd tid",
"mode_settings_autostop_timer_checkbox": "Stoppa oniontjänsten vid schemalagd tid",

View File

@ -21,12 +21,9 @@
"gui_receive_stop_server": "",
"gui_receive_stop_server_autostop_timer": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_waiting_to_start": "",
"gui_please_wait": "",
"gui_quit_title": "",
@ -34,14 +31,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "",
"gui_quit_warning_dont_quit": "",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -111,7 +106,6 @@
"gui_autostop_timer_cant_be_earlier_than_autostart_timer": "",
"share_via_onionshare": "",
"gui_connect_to_tor_for_onion_settings": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -21,12 +21,9 @@
"gui_receive_stop_server": "స్వీకరించు రీతిని ఆపివేయి",
"gui_receive_stop_server_autostop_timer": "స్వీకరించు రీతిని ఆపివేయి ({} మిగిలినది)",
"gui_copy_url": "జాల చిరునామాను నకలు తీయి",
"gui_copy_hidservauth": "HidServAuth నకలు తీయి",
"gui_canceled": "రద్దు చేయబడినది",
"gui_copied_url_title": "OnionShare జాల చిరునామా నకలు తీయబడినది",
"gui_copied_url": "OnionShare జాల చిరునామా క్లిప్‌బోర్డునకు నకలు తీయబడినది",
"gui_copied_hidservauth_title": "HidServAuth నకలు తీయబడినది",
"gui_copied_hidservauth": "HidServAuth పంక్తి క్లిప్‌బోర్డునకు నకలు తీయబడినది",
"gui_waiting_to_start": "ఇంకా {}లో మొదలగునట్లు అమర్చబడినది. రద్దుచేయుటకై ఇక్కడ నొక్కు.",
"gui_please_wait": "మొదలుపెట్టబడుతుంది... రద్దు చేయుటకై ఇక్కడ నొక్కు.",
"gui_quit_title": "అంత త్వరగా కాదు",
@ -34,14 +31,12 @@
"gui_receive_quit_warning": "మీరు దస్త్రాలను స్వీకరించే క్రమంలో ఉన్నారు. మీరు నిశ్చయంగా ఇప్పుడు OnionShareని విడిచి వెళ్ళాలనుకుంటున్నారా?",
"gui_quit_warning_quit": "నిష్క్రమించు",
"gui_quit_warning_dont_quit": "రద్దుచేయి",
"error_rate_limit": "ఎవరో మీ జాల చిరునామాతో చాలా సరికాని సంకేతశబ్దాలు వాడారు, బహుశా వారు దానిని ఊహించడానికి ప్రయత్నిస్తుండవచ్చు, కనుక OnionShare సర్వరును ఆపివేసింది. మరల పంచుకోవడం మొదలుపెట్టి మీ గ్రహీతలకు ఆ కొత్త జాల చిరునామాను పంపండి.",
"zip_progress_bar_format": "కుదించబడుతున్నది: %p%",
"error_stealth_not_supported": "ఉపయోక్త ధ్రువీకరణను వాడుటకై కనీసం Tor 0.2.9.1-alpha (లేదా Tor Browser 6.5), python3-stem 1.5.0 ఈ రెండూ ఉండాలి.",
"error_ephemeral_not_supported": "OnionShare పనిచేయాలంటే Tor 0.2.7.1 మరియు python-3-stem 1.4.0, ఈ రెండూ ఉండాలి.",
"gui_settings_window_title": "అమరికలు",
"gui_settings_whats_this": "<a href='{0:s}'>ఇది ఏమిటి?</a>",
"gui_settings_stealth_option": "ఉపయోక్త ధ్రువీకరణను వాడు",
"gui_settings_stealth_hidservauth_string": "మరల వాడుటకై మీ ప్రైవేటు కీని భద్రపరచడం వలన మీరు ఇక్కడ నొక్కడం ద్వారా మీ HidServAuth నకలు తీయవచ్చు.",
"gui_settings_autoupdate_label": "కొత్త రూపాంతరం కోసం సరిచూడు",
"gui_settings_autoupdate_option": "కొత్త రూపాంతరం వస్తే నాకు తెలియచేయి",
"gui_settings_autoupdate_timestamp": "ఇంతకుముందు సరిచూసినది: {}",
@ -111,7 +106,6 @@
"gui_autostop_timer_cant_be_earlier_than_autostart_timer": "స్వయంచాలక ఆగు సమయం అనేది స్వయంచాలక ప్రారంభ సమయంతో సమానంగా లేదా అంతకు ముందు ఉండకూడదు. పంచుకోవడం ప్రారంభించడం కొరకు దయచేసి దానిని నవీకరించండి.",
"share_via_onionshare": "OnionShare చేయి",
"gui_connect_to_tor_for_onion_settings": "Onion సేవా అమరికలను చూచుటకు Torతో అనుసంధానించు",
"gui_use_legacy_v2_onions_checkbox": "పాత చిరునామాలు వాడు",
"gui_save_private_key_checkbox": "ఒక నిరంతర చిరునామాను వాడు",
"gui_share_url_description": "ఈOnionShare చిరునామా గల <b>ఎవరైనా</b> మీ దస్త్రాలను <b>Tor విహారిణి</b>తో <b>దింపుకోవచ్చు</b>: <img src='{}' />",
"gui_receive_url_description": "ఈOnionShare చిరునామా గల <b>ఎవరైనా</b> మీ దస్త్రాలను <b>Tor విహారిణి</b>తో <b>ఎక్కించుకోవచ్చు</b>:<img src='{}' />",

View File

@ -41,23 +41,18 @@
"gui_receive_stop_server": "Alma Modunu Durdur",
"gui_receive_stop_server_autostop_timer": "Alma Modunu Durdur ({} kaldı)",
"gui_receive_stop_server_autostop_timer_tooltip": "Otomatik durdurma zamanlayıcısı {} sonra biter",
"gui_copy_hidservauth": "HidServAuth Kopyala",
"gui_copied_url_title": "OnionShare Adresi Kopyalandı",
"gui_copied_hidservauth_title": "HidServAuth Kopyalandı",
"gui_copied_hidservauth": "HidServAuth satırı panoya kopyalandı",
"version_string": "OnionShare {0:s} | https://onionshare.org/",
"gui_quit_title": "Çok hızlı değil",
"gui_share_quit_warning": "Dosya gönderiyorsunuz. OnionShare uygulamasından çıkmak istediğinize emin misiniz?",
"gui_receive_quit_warning": "Dosya alıyorsunuz. OnionShare uygulamasından çıkmak istediğinize emin misiniz?",
"gui_quit_warning_quit": ık",
"gui_quit_warning_dont_quit": "İptal",
"error_rate_limit": "Birisi parolanızı tahmin etmek için çok fazla yanlış girişimde bulundu, bu yüzden OnionShare sunucuyu durdurdu. Paylaşmayı tekrar başlatın ve alıcıya paylaşmanın yeni bir adresini gönderin.",
"error_stealth_not_supported": "İstemci kimlik doğrulamasını kullanmak için, en az Tor 0.2.9.1-alpha (ya da Tor Browser 6.5) ve python3-stem 1.5.0 sürümleri gereklidir.",
"error_ephemeral_not_supported": "OnionShare için en az Tor 0.2.7.1 ve python3-stem 1.4.0 sürümleri gereklidir.",
"gui_settings_window_title": "Ayarlar",
"gui_settings_whats_this": "<a href='{0:s}'>Bu nedir?</a>",
"gui_settings_stealth_option": "İstemci kimlik doğrulaması kullanılsın",
"gui_settings_stealth_hidservauth_string": "Özel anahtarınızı yeniden kullanmak üzere kaydettiğinizden, tıklayarak HidServAuth verinizi kopyalabilirsiniz.",
"gui_settings_autoupdate_label": "Yeni sürümü denetle",
"gui_settings_autoupdate_option": "Yeni bir sürüm olduğunda bana haber ver",
"gui_settings_autoupdate_timestamp": "Son denetleme: {}",
@ -124,7 +119,6 @@
"gui_server_autostop_timer_expired": "Otomatik durma sayacı zaten sona ermiş. Paylaşmaya başlamak için sayacı ayarlayın.",
"share_via_onionshare": "OnionShare ile paylaş",
"gui_connect_to_tor_for_onion_settings": "Onion hizmet ayarlarını görmek için Tor bağlantısı kurun",
"gui_use_legacy_v2_onions_checkbox": "Eski adresler kullanılsın",
"gui_save_private_key_checkbox": "Kalıcı bir adres kullanılsın",
"gui_share_url_description": "Bu OnionShare adresine sahip olan <b>herkes</b> <b>Tor Browser</b> kullanarak dosyalarınızı <b>indirebilir</b>: <img src='{}' />",
"gui_receive_url_description": "Bu OnionShare adresine sahip olan <b>herkes</b> <b>Tor Browser</b> kullanarak dosyaları bilgisayarınıza <b>yükleyebilir</b>: <img src='{}' />",
@ -197,7 +191,6 @@
"hours_first_letter": "s",
"minutes_first_letter": "d",
"seconds_first_letter": "sn",
"invalid_password_guess": "Geçersiz parola tahmini",
"gui_website_url_description": "Bu OnionShare adresine sahip olan <b>herkes</b> <b>Tor Browser</b> kullanarak web sitenizi <b>ziyaret edebilir</b>: <img src='{}' />",
"gui_mode_website_button": "Web Sitesini Yayınla",
"gui_website_mode_no_files": "Henüz Bir Web Sitesi Paylaşılmadı",
@ -210,7 +203,6 @@
"mode_settings_receive_data_dir_browse_button": "Göz at",
"mode_settings_receive_data_dir_label": "Dosyaları şuraya kaydet",
"mode_settings_share_autostop_sharing_checkbox": "Dosyalar gönderildikten sonra paylaşmayı durdur (dosyaların tek tek indirilmesine izin vermek için işareti kaldırın)",
"mode_settings_client_auth_checkbox": "İstemci kimlik doğrulaması kullan",
"mode_settings_legacy_checkbox": "Eski bir adres kullan (v2 onion hizmeti, tavsiye edilmez)",
"mode_settings_autostop_timer_checkbox": "Onion hizmetini zamanlanan saatte durdur",
"mode_settings_autostart_timer_checkbox": "Onion hizmetini zamanlanan saatte başlat",

View File

@ -21,12 +21,9 @@
"gui_receive_stop_server": "Зупинити режим отримання",
"gui_receive_stop_server_autostop_timer": "Зупинити режим отримання ({} залишилось)",
"gui_copy_url": "Копіювати Адресу",
"gui_copy_hidservauth": "Копіювати HidServAuth",
"gui_canceled": "Скасовано",
"gui_copied_url_title": "Адресу OnionShare копійовано",
"gui_copied_url": "Адресу OnionShare копійовано до буферу обміну",
"gui_copied_hidservauth_title": "Скопійовано HidServAuth",
"gui_copied_hidservauth": "Рядок HidServAuth копійовано до буфера обміну",
"gui_waiting_to_start": "Заплановано почати за {}. Натисніть для скасування.",
"gui_please_wait": "Початок... Натисніть для скасування.",
"gui_quit_title": "Не так швидко",
@ -34,14 +31,12 @@
"gui_receive_quit_warning": "Відбувається отримання файлів. Ви впевнені, що бажаєте вийти з OnionShare?",
"gui_quit_warning_quit": "Вийти",
"gui_quit_warning_dont_quit": "Відміна",
"error_rate_limit": "Хтось здійснив забагато невдалих спроб під'єднатися до вашого сервера, тому OnionShare зупинив сервер. Почніть надсилання знову й надішліть одержувачу нову адресу надсилання.",
"zip_progress_bar_format": "Стиснення: %p%",
"error_stealth_not_supported": "Для авторизації клієнта, вам потрібні принаймні Tor 0.2.9.1-alpha(або Tor Browser 6.5) і python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare потребує принаймні Tor 0.2.7.1 і python3-stem 1.4.0.",
"gui_settings_window_title": "Налаштування",
"gui_settings_whats_this": "<a href='{0:s}'>Що це?</a>",
"gui_settings_stealth_option": "Використовувати авторизацію клієнта",
"gui_settings_stealth_hidservauth_string": "Зберігши свій закритий ключ для повторного користування, ви можете копіювати HidServAuth.",
"gui_settings_autoupdate_label": "Перевірити наявність оновлень",
"gui_settings_autoupdate_option": "Повідомляти про наявність нової версії",
"gui_settings_autoupdate_timestamp": "Попередня перевірка: {}",
@ -111,7 +106,6 @@
"gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Час автоспину не може бути однаковим або ранішим за час автоматичного запуску. Налаштуйте його, щоб почати надсилання.",
"share_via_onionshare": "Поділитися через OnionShare",
"gui_connect_to_tor_for_onion_settings": "З'єднайтеся з Tor, щоб побачити параметри служби onion",
"gui_use_legacy_v2_onions_checkbox": "Використовувати застарілі адреси",
"gui_save_private_key_checkbox": "Використовувати постійну адресу",
"gui_share_url_description": "<b>Будь-хто</b>, за допомогою цієї адреси, може <b>завантажити</b> ваші файли, через <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Будь-хто</b>, за допомогою цієї адреси, може <b>завантажити</b> файли до вашого комп'ютера через <b>Tor Browser</b>: <img src='{}' />",
@ -187,7 +181,6 @@
"mode_settings_website_disable_csp_checkbox": "Не надсилати заголовок політики безпеки вмісту (дозволяє вебсайту застосовувати сторонні ресурси)",
"mode_settings_receive_data_dir_label": "Зберігати файли до",
"mode_settings_share_autostop_sharing_checkbox": "Закрити доступ, коли файли надіслано (приберіть позначку, щоб дозволити завантаження окремих файлів)",
"mode_settings_client_auth_checkbox": "Застосовувати авторизацію клієнта",
"mode_settings_legacy_checkbox": "Користуватися застарілою адресою (служба onion v2, не рекомендовано)",
"mode_settings_autostop_timer_checkbox": "Зупинити службу onion у запланований час",
"mode_settings_autostart_timer_checkbox": "Запускати службу onion у запланований час",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "",
"gui_quit_warning_dont_quit": "",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "",
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -45,14 +45,11 @@
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
"gui_copied_hidservauth": "",
"gui_please_wait": "",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -63,14 +60,12 @@
"gui_receive_quit_warning": "",
"gui_quit_warning_quit": "",
"gui_quit_warning_dont_quit": "",
"error_rate_limit": "",
"zip_progress_bar_format": "",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
"gui_settings_window_title": "",
"gui_settings_whats_this": "",
"gui_settings_stealth_option": "",
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "",
"gui_settings_autoupdate_option": "",
"gui_settings_autoupdate_timestamp": "",
@ -135,7 +130,6 @@
"gui_server_started_after_autostop_timer": "",
"gui_server_autostop_timer_expired": "",
"share_via_onionshare": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "",
"gui_receive_url_description": "",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "停止接收模式(还剩 {} 秒)",
"gui_receive_stop_server_autostop_timer_tooltip": "在{}自动停止",
"gui_copy_url": "复制地址",
"gui_copy_hidservauth": "复制 HidServAuth",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "已取消",
"gui_copied_url_title": "已复制 OnionShare 地址",
"gui_copied_url": "OnionShare 地址已复制到剪贴板",
"gui_copied_hidservauth_title": "已复制 HidServAuth",
"gui_copied_hidservauth": "HidServAuth 行已复制到剪贴板",
"gui_please_wait": "正在开启……点击以取消。",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "您有文件在接收中……确定要退出 OnionShare 吗?",
"gui_quit_warning_quit": "退出",
"gui_quit_warning_dont_quit": "取消",
"error_rate_limit": "有人发出了过多错误请求来猜测您的地址,因此 OinionShare 已停止服务。请重新开启共享并且向接收人发送新的共享地址。",
"zip_progress_bar_format": "压缩中:%p%",
"error_stealth_not_supported": "要使用客户端认证最低版本要求是Tor 0.2.9.1-alpha或 Tor Browser 6.5)和 python3-stem 1.5.0。",
"error_ephemeral_not_supported": "OnionShare 最低版本要求为 Tor 0.2.7.1 和 python3-stem 1.4.0。",
"gui_settings_window_title": "设置",
"gui_settings_whats_this": "<a href='{0:s}'>这是什么?</a>",
"gui_settings_stealth_option": "使用客户端认证",
"gui_settings_stealth_hidservauth_string": "已保存您的私钥用于重复使用,这意味着您现在可以点击以复制您的 HidServAuth。",
"gui_settings_autoupdate_label": "检查新版本",
"gui_settings_autoupdate_option": "新版本可用时通知我",
"gui_settings_autoupdate_timestamp": "上次检查更新时间:{}",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "在服务器启动之前,自动停止的定时器的计时已到。请建立一个新的共享。",
"gui_server_autostop_timer_expired": "自动停止的定时器计时已到。请对其调整以开始共享。",
"share_via_onionshare": "通过 OnionShare 共享",
"gui_use_legacy_v2_onions_checkbox": "使用老式地址",
"gui_save_private_key_checkbox": "使用长期地址",
"gui_share_url_description": "<b>任何人</b>只要有这个 OnionShare 地址,都可以用<b> Tor Browser </b>来<b>下载</b>您的文件:<img src='{}' />",
"gui_receive_url_description": "<b>任何人</b>只要有这个 OnionShare 地址,都可以用<b> Tor Browser </b>向您的电脑<b>上传</b>文件:<img src='{}' />",
@ -238,7 +232,6 @@
"mode_settings_receive_data_dir_browse_button": "浏览",
"mode_settings_receive_data_dir_label": "保存文件到",
"mode_settings_share_autostop_sharing_checkbox": "文件传送完后停止共享(取消选中可允许下载单个文件)",
"mode_settings_client_auth_checkbox": "使用客户端认证",
"mode_settings_legacy_checkbox": "使用旧地址v2 onion服务不推荐",
"mode_settings_autostop_timer_checkbox": "定时停止onion服务",
"mode_settings_autostart_timer_checkbox": "定时起动onion服务",

View File

@ -44,14 +44,11 @@
"gui_receive_stop_server_autostop_timer": "停止接收模式 (剩餘{}秒)",
"gui_receive_stop_server_autostop_timer_tooltip": "計數器將在{}停止",
"gui_copy_url": "複製地址",
"gui_copy_hidservauth": "複製HidServAuth",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "已取消",
"gui_copied_url_title": "已複製OnionShare地址",
"gui_copied_url": "OnionShare地址已複製到剪貼簿",
"gui_copied_hidservauth_title": "已複製HidServAuth",
"gui_copied_hidservauth": "HidServAuth已複製到剪貼簿",
"gui_please_wait": "啟動中...點擊以取消。",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
@ -62,14 +59,12 @@
"gui_receive_quit_warning": "仍在接收檔案您確定要結束OnionShare嗎?",
"gui_quit_warning_quit": "結束",
"gui_quit_warning_dont_quit": "取消",
"error_rate_limit": "有人嘗試猜測您的密碼太多次因此OnionShare已經停止服務。再次啟動分享並傳送新的地址給接收者以開始分享。",
"zip_progress_bar_format": "壓縮中: %p%",
"error_stealth_not_supported": "為了使用客戶端認證, 您至少需要 Tor 0.2.9.1-alpha (或 Tor Browser 6.5) 以及 python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare 需要至少 Tor 0.2.7.1 以及 python3-stem 1.4.0.",
"gui_settings_window_title": "設定",
"gui_settings_whats_this": "<a href='{0:s}'>這是什麼?</a>",
"gui_settings_stealth_option": "使用客戶端認證",
"gui_settings_stealth_hidservauth_string": "已經將您的私鑰存起來以便使用代表您現在可以點選以複製您的HidSerAuth。",
"gui_settings_autoupdate_label": "檢查新版本",
"gui_settings_autoupdate_option": "當有新版本的時候提醒我",
"gui_settings_autoupdate_timestamp": "上一次檢查時間: {}",
@ -134,7 +129,6 @@
"gui_server_started_after_autostop_timer": "在服務器啓動之前,自動停止的定時器的計時已到。請建立一個新的共享。",
"gui_server_autostop_timer_expired": "自動停止計時器時間已到。請調整它來開始分享。",
"share_via_onionshare": "使用OnionShare分享",
"gui_use_legacy_v2_onions_checkbox": "使用傳統地址",
"gui_save_private_key_checkbox": "使用永久地址",
"gui_share_url_description": "<b>任何人</b>只要擁有這個地址就可以<b>下載</b>你的檔案經由<b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>任何人</b>只要擁有這個地址就可以<b>上傳</b>檔案到你的電腦經由<b>Tor Browser</b>: <img src='{}' />",
@ -270,7 +264,6 @@
"gui_rendezvous_cleanup": "等待Tor电路关闭以确保文檔传输成功。\n\n這可能需要幾分鐘。",
"mode_settings_website_disable_csp_checkbox": "取消內容安全政策Content Security Policy信頭允許您的網站使用三方資源",
"mode_settings_share_autostop_sharing_checkbox": "檔案傳送完後停止共享(取消選中可允許下載單個檔案)",
"mode_settings_client_auth_checkbox": "使用者端認證",
"mode_settings_legacy_checkbox": "使用舊地址v2 onion服務不推薦",
"mode_settings_autostop_timer_checkbox": "定時停止onion服務",
"mode_settings_autostart_timer_checkbox": "定時起動onion服務",

View File

@ -246,13 +246,25 @@ class Mode(QtWidgets.QWidget):
self.start_onion_thread()
def start_onion_thread(self, obtain_onion_early=False):
self.common.log("Mode", "start_server", "Starting an onion thread")
self.obtain_onion_early = obtain_onion_early
self.onion_thread = OnionThread(self)
self.onion_thread.success.connect(self.starting_server_step2.emit)
self.onion_thread.success_early.connect(self.starting_server_early.emit)
self.onion_thread.error.connect(self.starting_server_error.emit)
self.onion_thread.start()
# If we tried to start with Client Auth and our Tor is too old to support it,
# bail out early
if (
not self.server_status.local_only
and not self.app.onion.supports_stealth
and not self.settings.get("general", "public")
):
self.stop_server()
self.start_server_error(
strings._("gui_server_doesnt_support_stealth")
)
else:
self.common.log("Mode", "start_server", "Starting an onion thread")
self.obtain_onion_early = obtain_onion_early
self.onion_thread = OnionThread(self)
self.onion_thread.success.connect(self.starting_server_step2.emit)
self.onion_thread.success_early.connect(self.starting_server_early.emit)
self.onion_thread.error.connect(self.starting_server_error.emit)
self.onion_thread.start()
def start_scheduled_service(self, obtain_onion_early=False):
# We start a new OnionThread with the saved scheduled key from settings
@ -438,15 +450,6 @@ class Mode(QtWidgets.QWidget):
"""
pass
def handle_request_rate_limit(self, event):
"""
Handle REQUEST_RATE_LIMIT event.
"""
self.stop_server()
Alert(
self.common, strings._("error_rate_limit"), QtWidgets.QMessageBox.Critical
)
def handle_request_progress(self, event):
"""
Handle REQUEST_PROGRESS event.

View File

@ -130,7 +130,6 @@ class ChatMode(Mode):
"""
# Reset web counters
self.web.chat_mode.cur_history_id = 0
self.web.reset_invalid_passwords()
def start_server_step2_custom(self):
"""

View File

@ -129,28 +129,6 @@ class ModeSettingsWidget(QtWidgets.QScrollArea):
autostop_timer_layout.addWidget(self.autostop_timer_checkbox)
autostop_timer_layout.addWidget(self.autostop_timer_widget)
# Legacy address
self.legacy_checkbox = QtWidgets.QCheckBox()
self.legacy_checkbox.clicked.connect(self.legacy_checkbox_clicked)
self.legacy_checkbox.clicked.connect(self.update_ui)
self.legacy_checkbox.setText(strings._("mode_settings_legacy_checkbox"))
if self.settings.get("general", "legacy"):
self.legacy_checkbox.setCheckState(QtCore.Qt.Checked)
else:
self.legacy_checkbox.setCheckState(QtCore.Qt.Unchecked)
# Client auth
self.client_auth_checkbox = QtWidgets.QCheckBox()
self.client_auth_checkbox.clicked.connect(self.client_auth_checkbox_clicked)
self.client_auth_checkbox.clicked.connect(self.update_ui)
self.client_auth_checkbox.setText(
strings._("mode_settings_client_auth_checkbox")
)
if self.settings.get("general", "client_auth"):
self.client_auth_checkbox.setCheckState(QtCore.Qt.Checked)
else:
self.client_auth_checkbox.setCheckState(QtCore.Qt.Unchecked)
# Toggle advanced settings
self.toggle_advanced_button = QtWidgets.QPushButton()
self.toggle_advanced_button.clicked.connect(self.toggle_advanced_clicked)
@ -165,8 +143,6 @@ class ModeSettingsWidget(QtWidgets.QScrollArea):
advanced_layout.addLayout(title_layout)
advanced_layout.addLayout(autostart_timer_layout)
advanced_layout.addLayout(autostop_timer_layout)
advanced_layout.addWidget(self.legacy_checkbox)
advanced_layout.addWidget(self.client_auth_checkbox)
self.advanced_widget = QtWidgets.QWidget()
self.advanced_widget.setLayout(advanced_layout)
self.advanced_widget.hide()
@ -200,28 +176,6 @@ class ModeSettingsWidget(QtWidgets.QScrollArea):
strings._("mode_settings_advanced_toggle_show")
)
# Client auth is only a legacy option
if self.client_auth_checkbox.isChecked():
self.legacy_checkbox.setChecked(True)
self.legacy_checkbox.setEnabled(False)
else:
self.legacy_checkbox.setEnabled(True)
if self.legacy_checkbox.isChecked():
self.client_auth_checkbox.show()
else:
self.client_auth_checkbox.hide()
# If the server has been started in the past, prevent changing legacy option
if self.settings.get("onion", "private_key"):
if self.legacy_checkbox.isChecked():
# If using legacy, disable legacy and client auth options
self.legacy_checkbox.setEnabled(False)
self.client_auth_checkbox.setEnabled(False)
else:
# If using v3, hide legacy and client auth options
self.legacy_checkbox.hide()
self.client_auth_checkbox.hide()
def title_editing_finished(self):
if self.title_lineedit.text().strip() == "":
self.title_lineedit.setText("")
@ -283,14 +237,6 @@ class ModeSettingsWidget(QtWidgets.QScrollArea):
else:
self.autostop_timer_widget.hide()
def legacy_checkbox_clicked(self):
self.settings.set("general", "legacy", self.legacy_checkbox.isChecked())
def client_auth_checkbox_clicked(self):
self.settings.set(
"general", "client_auth", self.client_auth_checkbox.isChecked()
)
def toggle_advanced_clicked(self):
if self.advanced_widget.isVisible():
self.advanced_widget.hide()

View File

@ -296,7 +296,6 @@ class ReceiveMode(Mode):
"""
# Reset web counters
self.web.receive_mode.cur_history_id = 0
self.web.reset_invalid_passwords()
# Hide and reset the uploads if we have previously shared
self.reset_info_counters()

View File

@ -219,7 +219,6 @@ class ShareMode(Mode):
"""
# Reset web counters
self.web.share_mode.cur_history_id = 0
self.web.reset_invalid_passwords()
# Hide and reset the downloads if we have previously shared
self.reset_info_counters()

View File

@ -210,7 +210,6 @@ class WebsiteMode(Mode):
"""
# Reset web counters
self.web.website_mode.visit_count = 0
self.web.reset_invalid_passwords()
# Hide and reset the downloads if we have previously shared
self.reset_info_counters()

View File

@ -38,7 +38,7 @@ class ServerStatus(QtWidgets.QWidget):
server_canceled = QtCore.Signal()
button_clicked = QtCore.Signal()
url_copied = QtCore.Signal()
hidservauth_copied = QtCore.Signal()
client_auth_copied = QtCore.Signal()
STATUS_STOPPED = 0
STATUS_WORKING = 1
@ -95,8 +95,8 @@ class ServerStatus(QtWidgets.QWidget):
self.common.gui.css["server_status_url_buttons"]
)
self.copy_url_button.clicked.connect(self.copy_url)
self.copy_hidservauth_button = QtWidgets.QPushButton(
strings._("gui_copy_hidservauth")
self.copy_client_auth_button = QtWidgets.QPushButton(
strings._("gui_copy_client_auth")
)
self.show_url_qr_code_button = QtWidgets.QPushButton(
strings._("gui_show_url_qr_code")
@ -109,14 +109,14 @@ class ServerStatus(QtWidgets.QWidget):
self.common.gui.css["server_status_url_buttons"]
)
self.copy_hidservauth_button.setStyleSheet(
self.copy_client_auth_button.setStyleSheet(
self.common.gui.css["server_status_url_buttons"]
)
self.copy_hidservauth_button.clicked.connect(self.copy_hidservauth)
self.copy_client_auth_button.clicked.connect(self.copy_client_auth)
url_buttons_layout = QtWidgets.QHBoxLayout()
url_buttons_layout.addWidget(self.copy_url_button)
url_buttons_layout.addWidget(self.copy_client_auth_button)
url_buttons_layout.addWidget(self.show_url_qr_code_button)
url_buttons_layout.addWidget(self.copy_hidservauth_button)
url_buttons_layout.addStretch()
url_layout = QtWidgets.QVBoxLayout()
@ -173,21 +173,41 @@ class ServerStatus(QtWidgets.QWidget):
info_image = GuiCommon.get_resource_path("images/info.png")
if self.mode == self.common.gui.MODE_SHARE:
self.url_description.setText(
strings._("gui_share_url_description").format(info_image)
)
if self.settings.get("general", "public"):
self.url_description.setText(
strings._("gui_share_url_public_description").format(info_image)
)
else:
self.url_description.setText(
strings._("gui_share_url_description").format(info_image)
)
elif self.mode == self.common.gui.MODE_WEBSITE:
self.url_description.setText(
strings._("gui_website_url_description").format(info_image)
)
if self.settings.get("general", "public"):
self.url_description.setText(
strings._("gui_website_url_public_description").format(info_image)
)
else:
self.url_description.setText(
strings._("gui_website_url_description").format(info_image)
)
elif self.mode == self.common.gui.MODE_RECEIVE:
self.url_description.setText(
strings._("gui_receive_url_description").format(info_image)
)
if self.settings.get("general", "public"):
self.url_description.setText(
strings._("gui_receive_url_public_description").format(info_image)
)
else:
self.url_description.setText(
strings._("gui_receive_url_description").format(info_image)
)
elif self.mode == self.common.gui.MODE_CHAT:
self.url_description.setText(
strings._("gui_chat_url_description").format(info_image)
)
if self.settings.get("general", "public"):
self.url_description.setText(
strings._("gui_chat_url_public_description").format(info_image)
)
else:
self.url_description.setText(
strings._("gui_chat_url_description").format(info_image)
)
# Show a Tool Tip explaining the lifecycle of this URL
if self.settings.get("persistent", "enabled"):
@ -213,10 +233,10 @@ class ServerStatus(QtWidgets.QWidget):
self.show_url_qr_code_button.show()
if self.settings.get("general", "client_auth"):
self.copy_hidservauth_button.show()
if self.settings.get("general", "public"):
self.copy_client_auth_button.hide()
else:
self.copy_hidservauth_button.hide()
self.copy_client_auth_button.show()
def update(self):
"""
@ -230,10 +250,6 @@ class ServerStatus(QtWidgets.QWidget):
self.common.settings.load()
self.show_url()
if not self.settings.get("onion", "password"):
self.settings.set("onion", "password", self.web.password)
self.settings.save()
if self.settings.get("general", "autostop_timer"):
self.server_button.setToolTip(
strings._("gui_stop_server_autostop_timer_tooltip").format(
@ -246,7 +262,7 @@ class ServerStatus(QtWidgets.QWidget):
self.url_description.hide()
self.url.hide()
self.copy_url_button.hide()
self.copy_hidservauth_button.hide()
self.copy_client_auth_button.hide()
self.show_url_qr_code_button.hide()
self.mode_settings_widget.update_ui()
@ -395,7 +411,11 @@ class ServerStatus(QtWidgets.QWidget):
"""
Show a QR code of the onion URL.
"""
self.qr_code_dialog = QRCodeDialog(self.common, self.get_url())
if self.settings.get("general", "public"):
self.qr_code_dialog = QRCodeDialog(self.common, self.get_url())
else:
# Make a QR Code for the ClientAuth too
self.qr_code_dialog = QRCodeDialog(self.common, self.get_url(), self.app.auth_string)
def start_server(self):
"""
@ -453,21 +473,18 @@ class ServerStatus(QtWidgets.QWidget):
self.url_copied.emit()
def copy_hidservauth(self):
def copy_client_auth(self):
"""
Copy the HidServAuth line to the clipboard.
Copy the ClientAuth private key line to the clipboard.
"""
clipboard = self.qtapp.clipboard()
clipboard.setText(self.app.auth_string)
self.hidservauth_copied.emit()
self.client_auth_copied.emit()
def get_url(self):
"""
Returns the OnionShare URL.
"""
if self.settings.get("general", "public"):
url = f"http://{self.app.onion_host}"
else:
url = f"http://onionshare:{self.web.password}@{self.app.onion_host}"
url = f"http://{self.app.onion_host}"
return url

View File

@ -275,7 +275,7 @@ class Tab(QtWidgets.QWidget):
self.share_mode.start_server_finished.connect(self.clear_message)
self.share_mode.server_status.button_clicked.connect(self.clear_message)
self.share_mode.server_status.url_copied.connect(self.copy_url)
self.share_mode.server_status.hidservauth_copied.connect(self.copy_hidservauth)
self.share_mode.server_status.client_auth_copied.connect(self.copy_client_auth)
self.change_title.emit(self.tab_id, strings._("gui_tab_name_share"))
@ -310,8 +310,8 @@ class Tab(QtWidgets.QWidget):
self.receive_mode.start_server_finished.connect(self.clear_message)
self.receive_mode.server_status.button_clicked.connect(self.clear_message)
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.server_status.client_auth_copied.connect(
self.copy_client_auth
)
self.change_title.emit(self.tab_id, strings._("gui_tab_name_receive"))
@ -347,8 +347,8 @@ class Tab(QtWidgets.QWidget):
self.website_mode.start_server_finished.connect(self.clear_message)
self.website_mode.server_status.button_clicked.connect(self.clear_message)
self.website_mode.server_status.url_copied.connect(self.copy_url)
self.website_mode.server_status.hidservauth_copied.connect(
self.copy_hidservauth
self.website_mode.server_status.client_auth_copied.connect(
self.copy_client_auth
)
self.change_title.emit(self.tab_id, strings._("gui_tab_name_website"))
@ -382,7 +382,7 @@ class Tab(QtWidgets.QWidget):
self.chat_mode.start_server_finished.connect(self.clear_message)
self.chat_mode.server_status.button_clicked.connect(self.clear_message)
self.chat_mode.server_status.url_copied.connect(self.copy_url)
self.chat_mode.server_status.hidservauth_copied.connect(self.copy_hidservauth)
self.chat_mode.server_status.client_auth_copied.connect(self.copy_client_auth)
self.change_title.emit(self.tab_id, strings._("gui_tab_name_chat"))
@ -531,9 +531,6 @@ class Tab(QtWidgets.QWidget):
elif event["type"] == Web.REQUEST_STARTED:
mode.handle_request_started(event)
elif event["type"] == Web.REQUEST_RATE_LIMIT:
mode.handle_request_rate_limit(event)
elif event["type"] == Web.REQUEST_PROGRESS:
mode.handle_request_progress(event)
@ -581,11 +578,6 @@ class Tab(QtWidgets.QWidget):
f"{strings._('other_page_loaded')}: {event['path']}"
)
if event["type"] == Web.REQUEST_INVALID_PASSWORD:
self.status_bar.showMessage(
f"[#{mode.web.invalid_passwords_count}] {strings._('incorrect_password')}: {event['data']}"
)
mode.timer_callback()
def copy_url(self):
@ -597,14 +589,15 @@ class Tab(QtWidgets.QWidget):
strings._("gui_copied_url_title"), strings._("gui_copied_url")
)
def copy_hidservauth(self):
def copy_client_auth(self):
"""
When the stealth onion service HidServAuth gets copied to the clipboard, display this in the status bar.
When the onion service's ClientAuth private key gets copied to
the clipboard, display this in the status bar.
"""
self.common.log("Tab", "copy_hidservauth")
self.common.log("Tab", "copy_client_auth")
self.system_tray.showMessage(
strings._("gui_copied_hidservauth_title"),
strings._("gui_copied_hidservauth"),
strings._("gui_copied_client_auth_title"),
strings._("gui_copied_client_auth"),
)
def clear_message(self):

View File

@ -65,14 +65,9 @@ class OnionThread(QtCore.QThread):
# Make a new static URL path for each new share
self.mode.web.generate_static_url_path()
# Choose port and password early, because we need them to exist in advance for scheduled shares
# Choose port early, because we need them to exist in advance for scheduled shares
if not self.mode.app.port:
self.mode.app.choose_port()
if not self.mode.settings.get("general", "public"):
if not self.mode.web.password:
self.mode.web.generate_password(
self.mode.settings.get("onion", "password")
)
try:
if self.mode.obtain_onion_early:

View File

@ -130,20 +130,47 @@ class QRCodeDialog(QtWidgets.QDialog):
A dialog showing a QR code.
"""
def __init__(self, common, text):
def __init__(self, common, url, auth_string=None):
super(QRCodeDialog, self).__init__()
self.common = common
self.text = text
self.common.log("QrCode", "__init__")
self.qr_label = QtWidgets.QLabel(self)
self.qr_label.setPixmap(qrcode.make(self.text, image_factory=Image).pixmap())
self.qr_label_url = QtWidgets.QLabel(self)
self.qr_label_url.setPixmap(qrcode.make(url, image_factory=Image).pixmap())
self.qr_label_url.setScaledContents(True)
self.qr_label_url.setFixedSize(350, 350)
self.qr_label_url_title = QtWidgets.QLabel(self)
self.qr_label_url_title.setText(strings._("gui_qr_label_url_title"))
self.qr_label_url_title.setAlignment(QtCore.Qt.AlignCenter)
self.setWindowTitle(strings._("gui_qr_code_dialog_title"))
self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png")))
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.qr_label)
layout = QtWidgets.QHBoxLayout(self)
url_layout = QtWidgets.QVBoxLayout(self)
url_layout.addWidget(self.qr_label_url_title)
url_layout.addWidget(self.qr_label_url)
url_code_with_label = QtWidgets.QWidget()
url_code_with_label.setLayout(url_layout)
layout.addWidget(url_code_with_label)
if auth_string:
self.qr_label_auth_string = QtWidgets.QLabel(self)
self.qr_label_auth_string.setPixmap(qrcode.make(auth_string, image_factory=Image).pixmap())
self.qr_label_auth_string.setScaledContents(True)
self.qr_label_auth_string.setFixedSize(350, 350)
self.qr_label_auth_string_title = QtWidgets.QLabel(self)
self.qr_label_auth_string_title.setText(strings._("gui_qr_label_auth_string_title"))
self.qr_label_auth_string_title.setAlignment(QtCore.Qt.AlignCenter)
auth_string_layout = QtWidgets.QVBoxLayout(self)
auth_string_layout.addWidget(self.qr_label_auth_string_title)
auth_string_layout.addWidget(self.qr_label_auth_string)
auth_string_code_with_label = QtWidgets.QWidget()
auth_string_code_with_label.setLayout(auth_string_layout)
layout.addWidget(auth_string_code_with_label)
self.exec_()

View File

@ -191,30 +191,13 @@ class GuiBaseTest(unittest.TestCase):
# Upload a file
files = {"file[]": open(self.tmpfiles[0], "rb")}
url = f"http://127.0.0.1:{tab.app.port}/upload"
if tab.settings.get("general", "public"):
requests.post(url, files=files)
else:
requests.post(
url,
files=files,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().web.password
),
)
requests.post(url, files=files)
QtTest.QTest.qWait(2000, self.gui.qtapp)
if type(tab.get_mode()) == ShareMode:
# Download files
url = f"http://127.0.0.1:{tab.app.port}/download"
if tab.settings.get("general", "public"):
requests.get(url)
else:
requests.get(
url,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().web.password
),
)
requests.get(url)
QtTest.QTest.qWait(2000, self.gui.qtapp)
# Indicator should be visible, have a value of "1"
@ -273,13 +256,6 @@ class GuiBaseTest(unittest.TestCase):
except requests.exceptions.ConnectionError:
self.assertTrue(False)
def have_a_password(self, tab):
"""Test that we have a valid password"""
if not tab.settings.get("general", "public"):
self.assertRegex(tab.get_mode().server_status.web.password, r"(\w+)-(\w+)")
else:
self.assertIsNone(tab.get_mode().server_status.web.password, r"(\w+)-(\w+)")
def add_button_visible(self, tab):
"""Test that the add button should be visible"""
if platform.system() == "Darwin":
@ -304,13 +280,7 @@ class GuiBaseTest(unittest.TestCase):
tab.get_mode().server_status.copy_url_button.click()
clipboard = tab.common.gui.qtapp.clipboard()
if tab.settings.get("general", "public"):
self.assertEqual(clipboard.text(), f"http://127.0.0.1:{tab.app.port}")
else:
self.assertEqual(
clipboard.text(),
f"http://onionshare:{tab.get_mode().server_status.web.password}@127.0.0.1:{tab.app.port}",
)
self.assertEqual(clipboard.text(), f"http://127.0.0.1:{tab.app.port}")
def have_show_qr_code_button(self, tab):
"""Test that the Show QR Code URL button is shown and that it loads a QR Code Dialog"""
@ -343,16 +313,7 @@ class GuiBaseTest(unittest.TestCase):
"""Test that the web page contains a string"""
url = f"http://127.0.0.1:{tab.app.port}/"
if tab.settings.get("general", "public"):
r = requests.get(url)
else:
r = requests.get(
url,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().web.password
),
)
r = requests.get(url)
self.assertTrue(string in r.text)
def history_widgets_present(self, tab):
@ -384,7 +345,7 @@ class GuiBaseTest(unittest.TestCase):
self.assertFalse(tab.get_mode().server_status.url.isVisible())
self.assertFalse(tab.get_mode().server_status.url_description.isVisible())
self.assertFalse(
tab.get_mode().server_status.copy_hidservauth_button.isVisible()
tab.get_mode().server_status.copy_client_auth_button.isVisible()
)
def web_server_is_stopped(self, tab):
@ -465,6 +426,21 @@ class GuiBaseTest(unittest.TestCase):
# We should have timed out now
self.assertEqual(tab.get_mode().server_status.status, 0)
def clientauth_is_visible(self, tab):
"""Test that the ClientAuth button is visible and that the clipboard contains its contents"""
self.assertTrue(
tab.get_mode().server_status.copy_client_auth_button.isVisible()
)
tab.get_mode().server_status.copy_client_auth_button.click()
clipboard = tab.common.gui.qtapp.clipboard()
self.assertEqual(clipboard.text(), "E2GOT5LTUTP3OAMRCRXO4GSH6VKJEUOXZQUC336SRKAHTTT5OVSA")
def clientauth_is_not_visible(self, tab):
"""Test that the ClientAuth button is not visible"""
self.assertFalse(
tab.get_mode().server_status.copy_client_auth_button.isVisible()
)
def hit_405(self, url, expected_resp, data = {}, methods = [] ):
"""Test various HTTP methods and the response"""
for method in methods:

View File

@ -11,15 +11,7 @@ class TestChat(GuiBaseTest):
def view_chat(self, tab):
"""Test that we can view the chat room"""
url = f"http://127.0.0.1:{tab.app.port}/"
if tab.settings.get("general", "public"):
r = requests.get(url)
else:
r = requests.get(
url,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().server_status.web.password
),
)
r = requests.get(url)
QtTest.QTest.qWait(500, self.gui.qtapp)
self.assertTrue("Chat <b>requires JavaScript</b>" in r.text)
@ -31,16 +23,7 @@ class TestChat(GuiBaseTest):
"""Test that we can change our username"""
url = f"http://127.0.0.1:{tab.app.port}/update-session-username"
data = {"username": "oniontest"}
if tab.settings.get("general", "public"):
r = requests.post(url, json=data)
else:
r = requests.post(
url,
json=data,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().server_status.web.password
),
)
r = requests.post(url, json=data)
QtTest.QTest.qWait(500, self.gui.qtapp)
jsonResponse = r.json()
@ -53,7 +36,6 @@ class TestChat(GuiBaseTest):
self.server_status_indicator_says_starting(tab)
self.server_is_started(tab, startup_time=500)
self.web_server_is_running(tab)
self.have_a_password(tab)
self.url_description_shown(tab)
self.have_copy_url_button(tab)
self.have_show_qr_code_button(tab)

View File

@ -23,28 +23,10 @@ class TestReceive(GuiBaseTest):
files = {"file[]": open(file_to_upload, "rb")}
url = f"http://127.0.0.1:{tab.app.port}/upload"
if tab.settings.get("general", "public"):
requests.post(url, files=files)
if identical_files_at_once:
# Send a duplicate upload to test for collisions
requests.post(url, files=files)
if identical_files_at_once:
# Send a duplicate upload to test for collisions
requests.post(url, files=files)
else:
requests.post(
url,
files=files,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().web.password
),
)
if identical_files_at_once:
# Send a duplicate upload to test for collisions
requests.post(
url,
files=files,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().web.password
),
)
QtTest.QTest.qWait(1000, self.gui.qtapp)
@ -74,16 +56,7 @@ class TestReceive(GuiBaseTest):
files = {"file[]": open(self.tmpfile_test, "rb")}
url = f"http://127.0.0.1:{tab.app.port}/upload"
if tab.settings.get("general", "public"):
r = requests.post(url, files=files)
else:
r = requests.post(
url,
files=files,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().web.password
),
)
r = requests.post(url, files=files)
def accept_dialog():
window = tab.common.gui.qtapp.activeWindow()
@ -100,16 +73,7 @@ class TestReceive(GuiBaseTest):
QtTest.QTest.qWait(2000, self.gui.qtapp)
url = f"http://127.0.0.1:{tab.app.port}/upload"
if tab.settings.get("general", "public"):
requests.post(url, data={"text": message})
else:
requests.post(
url,
data={"text": message},
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().web.password
),
)
requests.post(url, data={"text": message})
QtTest.QTest.qWait(1000, self.gui.qtapp)
@ -134,12 +98,6 @@ class TestReceive(GuiBaseTest):
self.assertTrue(exists)
def try_without_auth_in_non_public_mode(self, tab):
r = requests.post(f"http://127.0.0.1:{tab.app.port}/upload")
self.assertEqual(r.status_code, 401)
r = requests.get(f"http://127.0.0.1:{tab.app.port}/close")
self.assertEqual(r.status_code, 401)
# 'Grouped' tests follow from here
def run_all_receive_mode_setup_tests(self, tab):
@ -151,7 +109,6 @@ class TestReceive(GuiBaseTest):
self.server_status_indicator_says_starting(tab)
self.server_is_started(tab)
self.web_server_is_running(tab)
self.have_a_password(tab)
self.url_description_shown(tab)
self.have_copy_url_button(tab)
self.have_show_qr_code_button(tab)
@ -160,8 +117,6 @@ class TestReceive(GuiBaseTest):
def run_all_receive_mode_tests(self, tab):
"""Submit files and messages in receive mode and stop the share"""
self.run_all_receive_mode_setup_tests(tab)
if not tab.settings.get("general", "public"):
self.try_without_auth_in_non_public_mode(tab)
self.upload_file(tab, self.tmpfile_test, "test.txt")
self.history_widgets_present(tab)
self.counter_incremented(tab, 1)

View File

@ -72,15 +72,7 @@ class TestShare(GuiBaseTest):
def download_share(self, tab):
"""Test that we can download the share"""
url = f"http://127.0.0.1:{tab.app.port}/download"
if tab.settings.get("general", "public"):
r = requests.get(url)
else:
r = requests.get(
url,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().server_status.web.password
),
)
r = requests.get(url)
tmp_file = tempfile.NamedTemporaryFile("wb", delete=False)
tmp_file.write(r.content)
@ -99,40 +91,16 @@ class TestShare(GuiBaseTest):
"""
url = f"http://127.0.0.1:{tab.app.port}"
download_file_url = f"http://127.0.0.1:{tab.app.port}/test.txt"
if tab.settings.get("general", "public"):
r = requests.get(url)
else:
r = requests.get(
url,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().server_status.web.password
),
)
r = requests.get(url)
if tab.settings.get("share", "autostop_sharing"):
self.assertFalse('a href="/test.txt"' in r.text)
if tab.settings.get("general", "public"):
r = requests.get(download_file_url)
else:
r = requests.get(
download_file_url,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().server_status.web.password
),
)
r = requests.get(download_file_url)
self.assertEqual(r.status_code, 404)
self.download_share(tab)
else:
self.assertTrue('a href="test.txt"' in r.text)
if tab.settings.get("general", "public"):
r = requests.get(download_file_url)
else:
r = requests.get(
download_file_url,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().server_status.web.password
),
)
r = requests.get(download_file_url)
tmp_file = tempfile.NamedTemporaryFile("wb", delete=False)
tmp_file.write(r.content)
@ -144,34 +112,6 @@ class TestShare(GuiBaseTest):
QtTest.QTest.qWait(500, self.gui.qtapp)
def hit_401(self, tab):
"""Test that the server stops after too many 401s, or doesn't when in public mode"""
# In non-public mode, get ready to accept the dialog
if not tab.settings.get("general", "public"):
def accept_dialog():
window = tab.common.gui.qtapp.activeWindow()
if window:
window.close()
QtCore.QTimer.singleShot(1000, accept_dialog)
# Make 20 requests with guessed passwords
url = f"http://127.0.0.1:{tab.app.port}/"
for _ in range(20):
password_guess = self.gui.common.build_password()
requests.get(
url, auth=requests.auth.HTTPBasicAuth("onionshare", password_guess)
)
# In public mode, we should still be running (no rate-limiting)
if tab.settings.get("general", "public"):
self.web_server_is_running(tab)
# In non-public mode, we should be shut down (rate-limiting)
else:
self.web_server_is_stopped(tab)
def set_autostart_timer(self, tab, timer):
"""Test that the timer can be set"""
schedule = QtCore.QDateTime.currentDateTime().addSecs(timer)
@ -241,7 +181,6 @@ class TestShare(GuiBaseTest):
self.mode_settings_widget_is_hidden(tab)
self.server_is_started(tab, startup_time)
self.web_server_is_running(tab)
self.have_a_password(tab)
self.url_description_shown(tab)
self.have_copy_url_button(tab)
self.have_show_qr_code_button(tab)
@ -490,24 +429,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
def test_persistent_password(self):
"""
Test a large download
"""
tab = self.new_share_tab()
tab.get_mode().mode_settings_widget.persistent_checkbox.click()
self.run_all_common_setup_tests()
self.run_all_share_mode_setup_tests(tab)
self.run_all_share_mode_started_tests(tab)
password = tab.get_mode().server_status.web.password
self.run_all_share_mode_download_tests(tab)
self.run_all_share_mode_started_tests(tab)
self.assertEqual(tab.get_mode().server_status.web.password, password)
self.run_all_share_mode_download_tests(tab)
self.close_all_tabs()
def test_autostop_timer(self):
"""
Test the autostop timer
@ -570,45 +491,33 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
def test_401_triggers_ratelimit(self):
def test_client_auth(self):
"""
Rate limit should be triggered
Test the ClientAuth is received from the backend,
that the widget is visible in the UI and that the
clipboard contains the ClientAuth string
"""
tab = self.new_share_tab()
def accept_dialog():
window = tab.common.gui.qtapp.activeWindow()
if window:
window.close()
tab.get_mode().autostop_sharing_checkbox.click()
tab.get_mode().mode_settings_widget.toggle_advanced_button.click()
self.run_all_common_setup_tests()
self.run_all_share_mode_tests(tab)
self.hit_401(tab)
self.run_all_share_mode_setup_tests(tab)
self.run_all_share_mode_started_tests(tab)
self.clientauth_is_visible(tab)
self.close_all_tabs()
def test_401_public_skips_ratelimit(self):
"""
Public mode should skip the rate limit
"""
# Now try in public mode
tab = self.new_share_tab()
def accept_dialog():
window = tab.common.gui.qtapp.activeWindow()
if window:
window.close()
tab.get_mode().autostop_sharing_checkbox.click()
tab.get_mode().mode_settings_widget.public_checkbox.click()
self.run_all_common_setup_tests()
self.run_all_share_mode_tests(tab)
self.hit_401(tab)
self.run_all_share_mode_setup_tests(tab)
self.run_all_share_mode_started_tests(tab)
self.clientauth_is_not_visible(tab)
self.close_all_tabs()
def test_405_page_returned_for_invalid_methods(self):
"""
Our custom 405 page should return for invalid methods
@ -621,6 +530,7 @@ class TestShare(GuiBaseTest):
self.run_all_common_setup_tests()
self.run_all_share_mode_setup_tests(tab)
self.run_all_share_mode_started_tests(tab)
url = f"http://127.0.0.1:{tab.app.port}/"
self.hit_405(url, expected_resp="OnionShare: 405 Method Not Allowed", data = {'foo':'bar'}, methods = ["put", "post", "delete", "options"])
self.history_widgets_present(tab)

View File

@ -11,32 +11,14 @@ class TestWebsite(GuiBaseTest):
def view_website(self, tab):
"""Test that we can download the share"""
url = f"http://127.0.0.1:{tab.app.port}/"
if tab.settings.get("general", "public"):
r = requests.get(url)
else:
r = requests.get(
url,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().server_status.web.password
),
)
r = requests.get(url)
QtTest.QTest.qWait(500, self.gui.qtapp)
self.assertTrue("This is a test website hosted by OnionShare" in r.text)
def check_csp_header(self, tab):
"""Test that the CSP header is present when enabled or vice versa"""
url = f"http://127.0.0.1:{tab.app.port}/"
if tab.settings.get("general", "public"):
r = requests.get(url)
else:
r = requests.get(
url,
auth=requests.auth.HTTPBasicAuth(
"onionshare", tab.get_mode().server_status.web.password
),
)
r = requests.get(url)
QtTest.QTest.qWait(500, self.gui.qtapp)
if tab.settings.get("website", "disable_csp"):
self.assertFalse("Content-Security-Policy" in r.headers)
@ -63,7 +45,6 @@ class TestWebsite(GuiBaseTest):
self.add_remove_buttons_hidden(tab)
self.server_is_started(tab, startup_time)
self.web_server_is_running(tab)
self.have_a_password(tab)
self.url_description_shown(tab)
self.have_copy_url_button(tab)
self.have_show_qr_code_button(tab)

View File

@ -16,23 +16,23 @@ When a tab is saved a purple pin icon appears to the left of its server status.
.. image:: _static/screenshots/advanced-save-tabs.png
When you quit OnionShare and then open it again, your saved tabs will start opened.
You'll have to manually start each service, but when you do they will start with the same OnionShare address and password.
You'll have to manually start each service, but when you do they will start with the same OnionShare address and private key.
If you save a tab, a copy of that tab's onion service secret key will be stored on your computer with your OnionShare settings.
.. _turn_off_passwords:
.. _turn_off_private_key:
Turn Off Passwords
------------------
Turn Off Private Key
--------------------
By default, all OnionShare services are protected with the username ``onionshare`` and a randomly-generated password.
If someone takes 20 wrong guesses at the password, your onion service is automatically stopped to prevent a brute force attack against the OnionShare service.
By default, all OnionShare services are protected with a private key, which Tor calls Client Authentication.
When browsing to an OnionShare service in Tor Browser, Tor Browser will prompt for the private key to be entered.
Sometimes you might want your OnionShare service to be accessible to the public, like if you want to set up an OnionShare receive service so the public can securely and anonymously send you files.
In this case, it's better to disable the password altogether.
If you don't do this, someone can force your server to stop just by making 20 wrong guesses of your password, even if they know the correct password.
In this case, it's better to disable the private key altogether.
To turn off the password for any tab, just check the "Don't use a password" box before starting the server. Then the server will be public and won't have a password.
To turn off the private key for any tab, check the "This is a public OnionShare service (disables private key)" box before starting the server. Then the server will be public and won't need a private key to view in Tor Browser.
.. _custom_titles:
@ -106,11 +106,14 @@ You can browse the command-line documentation by running ``onionshare --help``::
│ https://onionshare.org/ │
╰───────────────────────────────────────────╯
usage: onionshare-cli [-h] [--receive] [--website] [--chat] [--local-only] [--connect-timeout SECONDS] [--config FILENAME]
[--persistent FILENAME] [--title TITLE] [--public] [--auto-start-timer SECONDS]
[--auto-stop-timer SECONDS] [--legacy] [--client-auth] [--no-autostop-sharing] [--data-dir data_dir]
[--webhook-url webhook_url] [--disable-text] [--disable-files] [--disable_csp] [-v]
[filename ...]
usage: onionshare-cli [-h] [--receive] [--website] [--chat] [--local-only]
[--connect-timeout SECONDS] [--config FILENAME]
[--persistent FILENAME] [--title TITLE] [--public]
[--auto-start-timer SECONDS] [--auto-stop-timer SECONDS]
[--no-autostop-sharing] [--data-dir data_dir]
[--webhook-url webhook_url] [--disable-text]
[--disable-files] [--disable_csp] [-v]
[filename [filename ...]]
positional arguments:
filename List of files or folders to share
@ -122,44 +125,29 @@ You can browse the command-line documentation by running ``onionshare --help``::
--chat Start chat server
--local-only Don't use Tor (only for development)
--connect-timeout SECONDS
Give up connecting to Tor after a given amount of seconds (default: 120)
Give up connecting to Tor after a given amount of
seconds (default: 120)
--config FILENAME Filename of custom global settings
--persistent FILENAME Filename of persistent session
--title TITLE Set a title
--public Don't use a password
--public Don't use a private key
--auto-start-timer SECONDS
Start onion service at scheduled time (N seconds from now)
Start onion service at scheduled time (N seconds
from now)
--auto-stop-timer SECONDS
Stop onion service at schedule time (N seconds from now)
--legacy Use legacy address (v2 onion service, not recommended)
--client-auth Use client authorization (requires --legacy)
--no-autostop-sharing Share files: Continue sharing after files have been sent (default is to stop sharing)
--data-dir data_dir Receive files: Save files received to this directory
Stop onion service at schedule time (N seconds
from now)
--no-autostop-sharing Share files: Continue sharing after files have
been sent (default is to stop sharing)
--data-dir data_dir Receive files: Save files received to this
directory
--webhook-url webhook_url
Receive files: URL to receive webhook notifications
Receive files: URL to receive webhook
notifications
--disable-text Receive files: Disable receiving text messages
--disable-files Receive files: Disable receiving files
--disable_csp Publish website: Disable Content Security Policy header (allows your website to use third-party
--disable_csp Publish website: Disable Content Security Policy
header (allows your website to use third-party
resources)
-v, --verbose Log OnionShare errors to stdout, and web errors to disk
Legacy Addresses
----------------
OnionShare uses v3 Tor onion services by default.
These are modern onion addresses that have 56 characters, for example::
uf3wmtpbstcupvrrsetrtct7qcmnqvdcsxqzxthxbx2y7tidatxye7id.onion
OnionShare still has support for v2 onion addresses, the old type of onion addresses that have 16 characters, for example::
lc7j6u55vhrh45eq.onion
OnionShare calls v2 onion addresses "legacy addresses", and they are not recommended, as v3 onion addresses are more secure.
To use legacy addresses, before starting a server click "Show advanced settings" from its tab and check the "Use a legacy address (v2 onion service, not recommended)" box.
In legacy mode you can optionally turn on Tor client authentication.
Once you start a server in legacy mode you cannot remove legacy mode in that tab.
Instead you must start a separate service in a separate tab.
Tor Project plans to `completely deprecate v2 onion services <https://blog.torproject.org/v2-deprecation-timeline>`_ on October 15, 2021, and legacy onion services will be removed from OnionShare before then.
-v, --verbose Log OnionShare errors to stdout, and web errors to
disk

View File

@ -63,57 +63,54 @@ This prints a lot of helpful messages to the terminal, such as when certain obje
│ https://onionshare.org/ │
╰───────────────────────────────────────────╯
[May 10 2021 18:24:02] Settings.__init__
[May 10 2021 18:24:02] Settings.load
[May 10 2021 18:24:02] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
[May 10 2021 18:24:02] Common.get_resource_path: filename=wordlist.txt
[May 10 2021 18:24:02] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt
[May 10 2021 18:24:02] ModeSettings.load: creating /home/user/.config/onionshare/persistent/tattered-handgun-stress.json
[May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.title = None
[May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.public = False
[May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.autostart_timer = 0
[May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.autostop_timer = 0
[May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.legacy = False
[May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.client_auth = False
[May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: share.autostop_sharing = True
[May 10 2021 18:24:02] Web.__init__: is_gui=False, mode=share
[May 10 2021 18:24:02] Common.get_resource_path: filename=static
[May 10 2021 18:24:02] Common.get_resource_path: filename=static, path=/home/user/code/onionshare/cli/onionshare_cli/resources/static
[May 10 2021 18:24:02] Common.get_resource_path: filename=templates
[May 10 2021 18:24:02] Common.get_resource_path: filename=templates, path=/home/user/code/onionshare/cli/onionshare_cli/resources/templates
[May 10 2021 18:24:02] Web.generate_static_url_path: new static_url_path is /static_4yxrx2mzi5uzkblklpzd46mwke
[May 10 2021 18:24:02] ShareModeWeb.init
[May 10 2021 18:24:02] Onion.__init__
[May 10 2021 18:24:02] Onion.connect
[May 10 2021 18:24:02] Settings.__init__
[May 10 2021 18:24:02] Settings.load
[May 10 2021 18:24:02] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
[May 10 2021 18:24:02] Onion.connect: tor_data_directory_name=/home/user/.config/onionshare/tmp/tmpw6u0nz8l
[May 10 2021 18:24:02] Common.get_resource_path: filename=torrc_template
[May 10 2021 18:24:02] Common.get_resource_path: filename=torrc_template, path=/home/user/code/onionshare/cli/onionshare_cli/resources/torrc_template
[Aug 28 2021 10:32:39] Settings.__init__
[Aug 28 2021 10:32:39] Settings.load
[Aug 28 2021 10:32:39] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
[Aug 28 2021 10:32:39] Common.get_resource_path: filename=wordlist.txt
[Aug 28 2021 10:32:39] Common.get_resource_path: filename=wordlist.txt, path=/home/user/git/onionshare/cli/onionshare_cli/resources/wordlist.txt
[Aug 28 2021 10:32:39] ModeSettings.load: creating /home/user/.config/onionshare/persistent/dreamy-stiffen-moving.json
[Aug 28 2021 10:32:39] ModeSettings.set: updating dreamy-stiffen-moving: general.title = None
[Aug 28 2021 10:32:39] ModeSettings.set: updating dreamy-stiffen-moving: general.public = False
[Aug 28 2021 10:32:39] ModeSettings.set: updating dreamy-stiffen-moving: general.autostart_timer = 0
[Aug 28 2021 10:32:39] ModeSettings.set: updating dreamy-stiffen-moving: general.autostop_timer = 0
[Aug 28 2021 10:32:39] ModeSettings.set: updating dreamy-stiffen-moving: share.autostop_sharing = True
[Aug 28 2021 10:32:39] Web.__init__: is_gui=False, mode=share
[Aug 28 2021 10:32:39] Common.get_resource_path: filename=static
[Aug 28 2021 10:32:39] Common.get_resource_path: filename=static, path=/home/user/git/onionshare/cli/onionshare_cli/resources/static
[Aug 28 2021 10:32:39] Common.get_resource_path: filename=templates
[Aug 28 2021 10:32:39] Common.get_resource_path: filename=templates, path=/home/user/git/onionshare/cli/onionshare_cli/resources/templates
[Aug 28 2021 10:32:39] Web.generate_static_url_path: new static_url_path is /static_3tix3w3s5feuzlhii3zwqb2gpq
[Aug 28 2021 10:32:39] ShareModeWeb.init
[Aug 28 2021 10:32:39] Onion.__init__
[Aug 28 2021 10:32:39] Onion.connect
[Aug 28 2021 10:32:39] Settings.__init__
[Aug 28 2021 10:32:39] Settings.load
[Aug 28 2021 10:32:39] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
[Aug 28 2021 10:32:39] Onion.connect: tor_data_directory_name=/home/user/.config/onionshare/tmp/tmppb7kvf4k
[Aug 28 2021 10:32:39] Common.get_resource_path: filename=torrc_template
[Aug 28 2021 10:32:39] Common.get_resource_path: filename=torrc_template, path=/home/user/git/onionshare/cli/onionshare_cli/resources/torrc_template
Connecting to the Tor network: 100% - Done
[May 10 2021 18:24:10] Onion.connect: Connected to tor 0.4.5.7
[May 10 2021 18:24:10] Settings.load
[May 10 2021 18:24:10] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
[May 10 2021 18:24:10] Web.generate_password: saved_password=None
[May 10 2021 18:24:10] Common.get_resource_path: filename=wordlist.txt
[May 10 2021 18:24:10] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt
[May 10 2021 18:24:10] Web.generate_password: built random password: "tipping-colonize"
[May 10 2021 18:24:10] OnionShare.__init__
[May 10 2021 18:24:10] OnionShare.start_onion_service
[May 10 2021 18:24:10] Onion.start_onion_service: port=17645
[May 10 2021 18:24:10] Onion.start_onion_service: key_type=NEW, key_content=ED25519-V3
[May 10 2021 18:24:14] ModeSettings.set: updating tattered-handgun-stress: general.service_id = omxjamkys6diqxov7lxru2upromdprxjuq3czdhen6hrshzd4sll2iyd
[May 10 2021 18:24:14] ModeSettings.set: updating tattered-handgun-stress: onion.private_key = 6PhomJCjlWicmOyAAe0wnQoEM3vcyHBivrRGDy0hzm900fW5ITDJ6iv2+tluLoueYj81MhmnYeTOHDm8UGOfhg==
[Aug 28 2021 10:32:56] Onion.connect: Connected to tor 0.4.6.7
[Aug 28 2021 10:32:56] Settings.load
[Aug 28 2021 10:32:56] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
[Aug 28 2021 10:32:56] OnionShare.__init__
[Aug 28 2021 10:32:56] OnionShare.start_onion_service
[Aug 28 2021 10:32:56] Onion.start_onion_service: port=17609
[Aug 28 2021 10:32:56] Onion.start_onion_service: key_type=NEW, key_content=ED25519-V3
[Aug 28 2021 10:33:03] ModeSettings.set: updating dreamy-stiffen-moving: general.service_id = sobp4rklarkz34mcog3pqtkb4t5bvyxv3dazvsqmfyhw4imqj446ffqd
[Aug 28 2021 10:33:03] ModeSettings.set: updating dreamy-stiffen-moving: onion.private_key = sFiznwaPWJdKmFXumdDLkJGdUUdjI/0TWo+l/QEZiE/XoVogjK9INNoz2Tf8vmpe66ssa85En+5w6F2kKyTstA==
[Aug 28 2021 10:33:03] ModeSettings.set: updating dreamy-stiffen-moving: onion.client_auth_priv_key = YL6YIEMZS6J537Y5ZKEA2Z6IIQEWFK2CMGTWK5G3DGGUREHJSJNQ
[Aug 28 2021 10:33:03] ModeSettings.set: updating dreamy-stiffen-moving: onion.client_auth_pub_key = 5HUL6RCPQ5VEFDOHCSRAHPFIB74EHVFJO6JJHDP76EDWVRJE2RJQ
Compressing files.
[May 10 2021 18:24:14] ShareModeWeb.init
[May 10 2021 18:24:14] ShareModeWeb.set_file_info_custom
[May 10 2021 18:24:14] ShareModeWeb.build_zipfile_list
[May 10 2021 18:24:14] Web.start: port=17645
* Running on http://127.0.0.1:17645/ (Press CTRL+C to quit)
[Aug 28 2021 10:33:03] ShareModeWeb.init
[Aug 28 2021 10:33:03] ShareModeWeb.set_file_info_custom
[Aug 28 2021 10:33:03] ShareModeWeb.build_zipfile_list
[Aug 28 2021 10:33:03] Web.start: port=17609
* Running on http://127.0.0.1:17609/ (Press CTRL+C to quit)
Give this address to the recipient:
http://onionshare:tipping-colonize@omxjamkys6diqxov7lxru2upromdprxjuq3czdhen6hrshzd4sll2iyd.onion
Give this address and private key to the recipient:
http://sobp4rklarkz34mcog3pqtkb4t5bvyxv3dazvsqmfyhw4imqj446ffqd.onion
Private key: YL6YIEMZS6J537Y5ZKEA2Z6IIQEWFK2CMGTWK5G3DGGUREHJSJNQ
Press Ctrl+C to stop the server
@ -153,18 +150,19 @@ You can do this with the ``--local-only`` flag. For example::
│ https://onionshare.org/ │
╰───────────────────────────────────────────╯
* Running on http://127.0.0.1:17617/ (Press CTRL+C to quit)
* Running on http://127.0.0.1:17621/ (Press CTRL+C to quit)
Files sent to you appear in this folder: /home/user/OnionShare
Warning: Receive mode lets people upload files to your computer. Some files can potentially take control of your computer if you open them. Only open things from people you trust, or if you know what you are doing.
Give this address to the sender:
http://onionshare:ended-blah@127.0.0.1:17617
Give this address and private key to the sender:
http://127.0.0.1:17621
Private key: E2GOT5LTUTP3OAMRCRXO4GSH6VKJEUOXZQUC336SRKAHTTT5OVSA
Press Ctrl+C to stop the server
In this case, you load the URL ``http://onionshare:train-system@127.0.0.1:17635`` in a normal web-browser like Firefox, instead of using the Tor Browser.
In this case, you load the URL ``http://127.0.0.1:17621`` in a normal web-browser like Firefox, instead of using the Tor Browser. The Private key is not actually needed in local-only mode, so you can ignore it.
Contributing Translations
-------------------------
@ -186,4 +184,4 @@ Status of Translations
Here is the current translation status.
If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net
.. image:: https://hosted.weblate.org/widgets/onionshare/-/translations/multi-auto.svg
.. image:: https://hosted.weblate.org/widgets/onionshare/-/translations/multi-auto.svg

View File

@ -5,14 +5,20 @@ How OnionShare Works
Web servers are started locally on your computer and made accessible to other people as `Tor <https://www.torproject.org/>`_ `onion services <https://community.torproject.org/onion-services/>`_.
By default, OnionShare web addresses are protected with a random password. A typical OnionShare address might look something like this::
By default, OnionShare web addresses are protected with a private key (Client Authentication). A typical OnionShare address might look something like this::
http://onionshare:constrict-purity@by4im3ir5nsvygprmjq74xwplrkdgt44qmeapxawwikxacmr3dqzyjad.onion
http://by4im3ir5nsvygprmjq74xwplrkdgt44qmeapxawwikxacmr3dqzyjad.onion
You're responsible for securely sharing that URL using a communication channel of your choice like in an encrypted chat message, or using something less secure like unencrypted e-mail, depending on your `threat model <https://ssd.eff.org/module/your-security-plan>`_.
And the Private key might look something like this::
EM6UK3LFM7PFLX63DVZIUQQPW5JV5KO6PB3TP3YNA4OLB3OH7AQA
You're responsible for securely sharing that URL, and the private key, using a communication channel of your choice like in an encrypted chat message, or using something less secure like unencrypted e-mail, depending on your `threat model <https://ssd.eff.org/module/your-security-plan>`_.
The people you send the URL to then copy and paste it into their `Tor Browser <https://www.torproject.org/>`_ to access the OnionShare service.
Tor Browser will then prompt for the private key in an authentication dialog, which the person can also then copy and paste in.
If you run OnionShare on your laptop to send someone files, and then suspend it before the files are sent, the service will not be available until your laptop is unsuspended and on the Internet again. OnionShare works best when working with people in real-time.
Because your own computer is the web server, *no third party can access anything that happens in OnionShare*, not even the developers of OnionShare. It's completely private. And because OnionShare is based on Tor onion services too, it also protects your anonymity. See the :doc:`security design </security>` for more info.
@ -39,7 +45,7 @@ When you're ready to share, click the "Start sharing" button. You can always cli
Now that you have a OnionShare, copy the address and send it to the person you want to receive the files. If the files need to stay secure, or the person is otherwise exposed to danger, use an encrypted messaging app.
That person then must load the address in Tor Browser. After logging in with the random password included in the web address, the files can be downloaded directly from your computer by clicking the "Download Files" link in the corner.
That person then must load the address in Tor Browser. After logging in with the private key, the files can be downloaded directly from your computer by clicking the "Download Files" link in the corner.
.. image:: _static/screenshots/share-torbrowser.png
@ -88,7 +94,7 @@ Tips for running a receive service
If you want to host your own anonymous dropbox using OnionShare, it's recommended you do so on a separate, dedicated computer always powered on and connected to the Internet, and not on the one you use on a regular basis.
If you intend to put the OnionShare address on your website or social media profiles, save the tab (see :ref:`save_tabs`) and run it as a public service (see :ref:`turn_off_passwords`). It's also a good idea to give it a custom title (see :ref:`custom_titles`).
If you intend to put the OnionShare address on your website or social media profiles, save the tab (see :ref:`save_tabs`) and run it as a public service (see :ref:`turn_off_private_key`). It's also a good idea to give it a custom title (see :ref:`custom_titles`).
Host a Website
--------------
@ -118,7 +124,7 @@ Tips for running a website service
If you want to host a long-term website using OnionShare (meaning not something to quickly show someone something), it's recommended you do it on a separate, dedicated computer always powered on and connected to the Internet, and not on the one you use on a regular basis.
Save the tab (see :ref:`save_tabs`) so you can resume the website with the same address if you close OnionShare and re-open it later.
If your website is intended for the public, you should run it as a public service (see :ref:`turn_off_passwords`).
If your website is intended for the public, you should run it as a public service (see :ref:`turn_off_private_key`).
Chat Anonymously
----------------

View File

@ -14,11 +14,11 @@ What OnionShare protects against
**Anonymity of OnionShare users are protected by Tor.** OnionShare and Tor Browser protect the anonymity of the users. As long as the OnionShare user anonymously communicates the OnionShare address with the Tor Browser users, the Tor Browser users and eavesdroppers can't learn the identity of the OnionShare user.
**If an attacker learns about the onion service, it still can't access anything.** Prior attacks against the Tor network to enumerate onion services allowed the attacker to discover private .onion addresses. If an attack discovers a private OnionShare address, a password will be prevent them from accessing it (unless the OnionShare user chooses to turn it off and make it public). The password is generated by choosing two random words from a list of 6800 words, making 6800², or about 46 million possible passwords. Only 20 wrong guesses can be made before OnionShare stops the server, preventing brute force attacks against the password.
**If an attacker learns about the onion service, it still can't access anything.** Prior attacks against the Tor network to enumerate onion services allowed the attacker to discover private .onion addresses. If an attack discovers a private OnionShare address, but not the private key used for Client Authentication, they will be prevented from accessing it (unless the OnionShare user chooses to turn off the private key and make it public - see :ref:`turn_off_private_key`).
What OnionShare doesn't protect against
---------------------------------------
**Communicating the OnionShare address might not be secure.** Communicating the OnionShare address to people is the responsibility of the OnionShare user. If sent insecurely (such as through an email message monitored by an attacker), an eavesdropper can tell that OnionShare is being used. If the eavesdropper loads the address in Tor Browser while the service is still up, they can access it. To avoid this, the address must be communicateed securely, via encrypted text message (probably with disappearing messages enabled), encrypted email, or in person. This isn't necessary when using OnionShare for something that isn't secret.
**Communicating the OnionShare address and private key might not be secure.** Communicating the OnionShare address to people is the responsibility of the OnionShare user. If sent insecurely (such as through an email message monitored by an attacker), an eavesdropper can tell that OnionShare is being used. If the eavesdropper loads the address in Tor Browser while the service is still up, they can access it. To avoid this, the address must be communicateed securely, via encrypted text message (probably with disappearing messages enabled), encrypted email, or in person. This isn't necessary when using OnionShare for something that isn't secret.
**Communicating the OnionShare address might not be anonymous.** Extra precautions must be taken to ensure the OnionShare address is communicated anonymously. A new email or chat account, only accessed over Tor, can be used to share the address. This isn't necessary unless anonymity is a goal.
**Communicating the OnionShare address and private key might not be anonymous.** Extra precautions must be taken to ensure the OnionShare address is communicated anonymously. A new email or chat account, only accessed over Tor, can be used to share the address. This isn't necessary unless anonymity is a goal.

View File

@ -172,33 +172,6 @@ modules:
- type: file
url: https://files.pythonhosted.org/packages/10/27/a33329150147594eff0ea4c33c2036c0eadd933141055be0ff911f7f8d04/Werkzeug-1.0.1.tar.gz
sha256: 6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c
- name: python3-flask-httpauth
buildsystem: simple
build-commands:
- pip3 install --exists-action=i --no-index --find-links="file://${PWD}" --prefix=${FLATPAK_DEST}
"flask-httpauth"
sources:
- type: file
url: https://files.pythonhosted.org/packages/4f/e7/65300e6b32e69768ded990494809106f87da1d436418d5f1367ed3966fd7/Jinja2-2.11.3.tar.gz
sha256: a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6
- type: file
url: https://files.pythonhosted.org/packages/27/6f/be940c8b1f1d69daceeb0032fee6c34d7bd70e3e649ccac0951500b4720e/click-7.1.2.tar.gz
sha256: d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a
- type: file
url: https://files.pythonhosted.org/packages/2d/6a/e458a74c909899d136aa76cb4d707f0f600fba6ca0d603de681e8fcac91f/Flask-HTTPAuth-4.2.0.tar.gz
sha256: 8c7e49e53ce7dc14e66fe39b9334e4b7ceb8d0b99a6ba1c3562bb528ef9da84a
- type: file
url: https://files.pythonhosted.org/packages/b9/2e/64db92e53b86efccfaea71321f597fa2e1b2bd3853d8ce658568f7a13094/MarkupSafe-1.1.1.tar.gz
sha256: 29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b
- type: file
url: https://files.pythonhosted.org/packages/68/1a/f27de07a8a304ad5fa817bbe383d1238ac4396da447fa11ed937039fa04b/itsdangerous-1.1.0.tar.gz
sha256: 321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19
- type: file
url: https://files.pythonhosted.org/packages/4e/0b/cb02268c90e67545a0e3a37ea1ca3d45de3aca43ceb7dbf1712fb5127d5d/Flask-1.1.2.tar.gz
sha256: 4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060
- type: file
url: https://files.pythonhosted.org/packages/10/27/a33329150147594eff0ea4c33c2036c0eadd933141055be0ff911f7f8d04/Werkzeug-1.0.1.tar.gz
sha256: 6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c
- name: python3-flask-socketio
buildsystem: simple
build-commands:

View File

@ -117,7 +117,6 @@ parts:
- poetry
- click
- flask
- flask-httpauth
- flask-socketio == 5.0.1
- pycryptodome
- psutil