diff --git a/cli/onionshare_cli/settings.py b/cli/onionshare_cli/settings.py index 59fcf8df..54a0fcd9 100644 --- a/cli/onionshare_cli/settings.py +++ b/cli/onionshare_cli/settings.py @@ -64,12 +64,13 @@ class Settings(object): "da": "Dansk", # Danish "nl": "Nederlands", # Dutch "en": "English", # English - "fi": "Suomi", # Finnish + # "fi": "Suomi", # Finnish "fr": "Français", # French "gl": "Galego", # Galician "de": "Deutsch", # German "el": "Ελληνικά", # Greek "is": "Íslenska", # Icelandic + "id": "Bahasa Indonesia", # Indonesian # "ga": "Gaeilge", # Irish "it": "Italiano", # Italian "ja": "日本語", # Japanese @@ -79,10 +80,10 @@ class Settings(object): "pl": "Polski", # Polish "pt_BR": "Português (Brasil)", # Portuguese Brazil "pt_PT": "Português (Portugal)", # Portuguese Portugal - "sk": "Slovenčina", # Slovak # "ro": "Română", # Romanian "ru": "Русский", # Russian - # "sr_Latn": "Srpska (latinica)", # Serbian (latin) + "sr_Latn": "Srpska (latinica)", # Serbian (latin) + "sk": "Slovenčina", # Slovak "es": "Español", # Spanish "sv": "Svenska", # Swedish # "te": "తెలుగు", # Telugu diff --git a/docs/README.md b/docs/README.md index fe026802..029217bb 100644 --- a/docs/README.md +++ b/docs/README.md @@ -36,3 +36,75 @@ sphinx-intl update -p build/gettext -l de # Build German translated document make -e SPHINXOPTS="-D language='de'" html ``` + +## Discoving which translations are >90% complete + +Each OnionShare release should only include a language if >90% of the strings have been translated into it. The script `check-weblate.py` script can be used to make a few hundreds weblate API requests to determine this for you automatically. It requires using your weblate API key, which you can find in your [user profile](https://hosted.weblate.org/accounts/profile/#api). + +``` +$ poetry run ./check-weblate.py $WEBLATE_API_KEY +GET https://hosted.weblate.org/api/projects/onionshare/languages/ +GET https://hosted.weblate.org/api/translations/onionshare/translations/hr/ +GET https://hosted.weblate.org/api/translations/onionshare/translations/eo/ +GET https://hosted.weblate.org/api/translations/onionshare/translations/ja/ +<...snip...> +GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/wo/ | error 404 +GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/ar/ +GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/it/ + +App translations >= 100% +======================= +English (en), 100.0% + +App translations >= 90% +======================= +Arabic (ar), 95.0% +Bengali (bn), 95.0% +Catalan (ca), 93.5% +Chinese (Simplified) (zh_Hans), 98.0% +Chinese (Traditional) (zh_Hant), 95.0% +Croatian (hr), 95.0% +Danish (da), 94.5% +Dutch (nl), 92.6% +French (fr), 98.0% +Galician (gl), 97.5% +German (de), 95.0% +Greek (el), 98.0% +Icelandic (is), 98.0% +Indonesian (id), 98.0% +Italian (it), 94.5% +Japanese (ja), 94.5% +Kurdish (Central) (ckb), 94.5% +Norwegian Bokmål (nb_NO), 98.0% +Polish (pl), 95.0% +Portuguese (Brazil) (pt_BR), 95.0% +Portuguese (Portugal) (pt_PT), 92.6% +Russian (ru), 95.0% +Serbian (latin) (sr_Latn), 95.0% +Slovak (sk), 94.5% +Spanish (es), 98.0% +Swedish (sv), 94.5% +Turkish (tr), 98.0% +Ukrainian (uk), 98.0% + +App translations >= 80% +======================= +Finnish (fi), 88.1% + +Docs translations >= 100% +======================== +English (en), 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0% +Turkish (tr), 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0% +Ukrainian (uk), 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0% + +Docs translations >= 90% +======================== + + +Docs translations >= 80% +======================== +German (de), 90.6%, 100.0%, 82.1%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0% +Greek (el), 90.6%, 100.0%, 82.1%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0% +Russian (ru), 90.6%, 100.0%, 82.1%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0% +Spanish (es), 90.6%, 100.0%, 82.1%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0% +``` diff --git a/docs/check-weblate.py b/docs/check-weblate.py new file mode 100755 index 00000000..c3e1be03 --- /dev/null +++ b/docs/check-weblate.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python3 +import sys +import httpx +import asyncio +import time + + +api_token = None +languages = {} +app_translations = {} +docs_translations = {} + + +async def api(path): + url = f"https://hosted.weblate.org{path}" + + async with httpx.AsyncClient() as client: + r = await client.get( + url, headers={"Authorization": f"Token {api_token}"}, timeout=30.0 + ) + + if r.status_code == 200: + print(f"GET {url}") + return r.json() + else: + print(f"GET {url} | error {r.status_code}") + return None + + +async def get_app_translation(lang_code): + global app_translations + obj = await api(f"/api/translations/onionshare/translations/{lang_code}/") + if obj: + app_translations[lang_code] = obj["translated_percent"] + + +async def get_docs_translation(component, lang_code): + global docs_translations + obj = await api(f"/api/translations/onionshare/{component}/{lang_code}/") + if obj: + if component not in docs_translations: + docs_translations[component] = {} + docs_translations[component][lang_code] = obj["translated_percent"] + + +async def app_percent_output(percent_min, percent_max=101): + out = [] + for lang_code in languages: + if ( + app_translations[lang_code] >= percent_min + and app_translations[lang_code] < percent_max + ): + out.append( + f"{languages[lang_code]} ({lang_code}), {app_translations[lang_code]}%" + ) + + out.sort() + + print(f"App translations >= {percent_min}%") + print("=======================") + print("\n".join(out)) + + print("") + + +async def docs_percent_output(percent_min, exclude=[]): + out = [] + for lang_code in languages: + include_language = True + percentages = [] + + for component in docs_translations: + if lang_code not in docs_translations[component]: + include_language = False + break + + percentages.append(docs_translations[component][lang_code]) + + if docs_translations[component][lang_code] < percent_min: + include_language = False + break + + if include_language: + percentages = [f"{p}%" for p in percentages] + percentages = ", ".join(percentages) + out.append(f"{languages[lang_code]} ({lang_code}), {percentages}") + + excluded = [] + for s in out: + if s not in exclude: + excluded.append(s) + + excluded.sort() + + print(f"Docs translations >= {percent_min}%") + print("========================") + print("\n".join(excluded)) + + print("") + return excluded + + +async def main(): + global api_token, languages, app_translations, docs_translations + + if len(sys.argv) != 2: + print(f"Usage: {sys.argv[0]} API_KEY") + print( + "You can find your personal API key at: https://hosted.weblate.org/accounts/profile/#api" + ) + return + + api_token = sys.argv[1] + + # Get the list of languages in the OnionShare project + res = await api("/api/projects/onionshare/languages/") + for obj in res: + languages[obj["code"]] = obj["language"] + + # Get the app translations for each language + await asyncio.gather(*[get_app_translation(lang_code) for lang_code in languages]) + + # Get the documentation translations for each component for each language + for component in [ + "doc-advanced", + "doc-develop", + "doc-features", + "doc-help", + "doc-index", + "doc-install", + "doc-security", + "doc-sphinx", + "doc-tor", + ]: + docs_futures = [] + for lang_code in languages: + docs_futures.append(get_docs_translation(component, lang_code)) + + await asyncio.gather(*docs_futures) + + print("") + + await app_percent_output(100) + await app_percent_output(90, 100) + await app_percent_output(80, 90) + + out100 = await docs_percent_output(100) + out90 = await docs_percent_output(90, out100) + await docs_percent_output(80, out100 + out90) + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/docs/gettext/.doctrees/advanced.doctree b/docs/gettext/.doctrees/advanced.doctree index f3300dc9..3a142d54 100644 Binary files a/docs/gettext/.doctrees/advanced.doctree and b/docs/gettext/.doctrees/advanced.doctree differ diff --git a/docs/gettext/.doctrees/develop.doctree b/docs/gettext/.doctrees/develop.doctree index c50d1041..8c48f7e0 100644 Binary files a/docs/gettext/.doctrees/develop.doctree and b/docs/gettext/.doctrees/develop.doctree differ diff --git a/docs/gettext/.doctrees/environment.pickle b/docs/gettext/.doctrees/environment.pickle index 4127bd0e..4b580f66 100644 Binary files a/docs/gettext/.doctrees/environment.pickle and b/docs/gettext/.doctrees/environment.pickle differ diff --git a/docs/gettext/.doctrees/features.doctree b/docs/gettext/.doctrees/features.doctree index d5025345..339a9870 100644 Binary files a/docs/gettext/.doctrees/features.doctree and b/docs/gettext/.doctrees/features.doctree differ diff --git a/docs/gettext/.doctrees/help.doctree b/docs/gettext/.doctrees/help.doctree index 9af01519..32e71df0 100644 Binary files a/docs/gettext/.doctrees/help.doctree and b/docs/gettext/.doctrees/help.doctree differ diff --git a/docs/gettext/.doctrees/index.doctree b/docs/gettext/.doctrees/index.doctree index bcb4fc44..6ae4d2f8 100644 Binary files a/docs/gettext/.doctrees/index.doctree and b/docs/gettext/.doctrees/index.doctree differ diff --git a/docs/gettext/.doctrees/install.doctree b/docs/gettext/.doctrees/install.doctree index 5e50e29a..ec507658 100644 Binary files a/docs/gettext/.doctrees/install.doctree and b/docs/gettext/.doctrees/install.doctree differ diff --git a/docs/gettext/.doctrees/security.doctree b/docs/gettext/.doctrees/security.doctree index 7cd39d9e..0d5182b7 100644 Binary files a/docs/gettext/.doctrees/security.doctree and b/docs/gettext/.doctrees/security.doctree differ diff --git a/docs/gettext/.doctrees/tor.doctree b/docs/gettext/.doctrees/tor.doctree index ca578150..378ebe7d 100644 Binary files a/docs/gettext/.doctrees/tor.doctree and b/docs/gettext/.doctrees/tor.doctree differ diff --git a/docs/gettext/develop.pot b/docs/gettext/develop.pot index 734070ed..8ef36381 100644 --- a/docs/gettext/develop.pot +++ b/docs/gettext/develop.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-03 21:48-0700\n" +"POT-Creation-Date: 2021-05-10 18:26-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -72,54 +72,54 @@ msgstr "" msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" msgstr "" -#: ../../source/develop.rst:117 +#: ../../source/develop.rst:121 msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" msgstr "" -#: ../../source/develop.rst:121 +#: ../../source/develop.rst:125 msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." msgstr "" -#: ../../source/develop.rst:124 +#: ../../source/develop.rst:128 msgid "Local Only" msgstr "" -#: ../../source/develop.rst:126 +#: ../../source/develop.rst:130 msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" msgstr "" -#: ../../source/develop.rst:164 +#: ../../source/develop.rst:167 msgid "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." msgstr "" -#: ../../source/develop.rst:167 +#: ../../source/develop.rst:170 msgid "Contributing Translations" msgstr "" -#: ../../source/develop.rst:169 +#: ../../source/develop.rst:172 msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." msgstr "" -#: ../../source/develop.rst:171 +#: ../../source/develop.rst:174 msgid "To help translate, make a Hosted Weblate account and start contributing." msgstr "" -#: ../../source/develop.rst:174 +#: ../../source/develop.rst:177 msgid "Suggestions for Original English Strings" msgstr "" -#: ../../source/develop.rst:176 +#: ../../source/develop.rst:179 msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." msgstr "" -#: ../../source/develop.rst:178 +#: ../../source/develop.rst:181 msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." msgstr "" -#: ../../source/develop.rst:182 +#: ../../source/develop.rst:185 msgid "Status of Translations" msgstr "" -#: ../../source/develop.rst:183 +#: ../../source/develop.rst:186 msgid "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" msgstr "" diff --git a/docs/poetry.lock b/docs/poetry.lock index 1be892f9..3bc4f44a 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -6,6 +6,14 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "async-generator" +version = "1.10" +description = "Async generators and context managers for Python 3.5+" +category = "main" +optional = false +python-versions = ">=3.5" + [[package]] name = "babel" version = "2.9.0" @@ -49,6 +57,17 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "contextvars" +version = "2.4" +description = "PEP 567 Backport" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +immutables = ">=0.9" + [[package]] name = "docutils" version = "0.16" @@ -57,6 +76,48 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "h11" +version = "0.12.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "httpcore" +version = "0.13.3" +description = "A minimal low-level HTTP client." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +h11 = ">=0.11,<0.13" +sniffio = ">=1.0.0,<2.0.0" + +[package.extras] +http2 = ["h2 (>=3,<5)"] + +[[package]] +name = "httpx" +version = "0.18.1" +description = "The next generation HTTP client." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +async-generator = {version = "*", markers = "python_version < \"3.7\""} +certifi = "*" +httpcore = ">=0.13.0,<0.14.0" +rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]} +sniffio = "*" + +[package.extras] +brotli = ["brotlicffi (>=1.0.0,<2.0.0)"] +http2 = ["h2 (>=3.0.0,<4.0.0)"] + [[package]] name = "idna" version = "2.10" @@ -73,6 +134,17 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "immutables" +version = "0.15" +description = "Immutable Collections" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["flake8 (>=3.8.4,<3.9.0)", "pycodestyle (>=2.6.0,<2.7.0)"] + [[package]] name = "jinja2" version = "2.11.2" @@ -149,6 +221,20 @@ urllib3 = ">=1.21.1,<1.27" security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +[[package]] +name = "rfc3986" +version = "1.5.0" +description = "Validating URI References per RFC 3986" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +idna = {version = "*", optional = true, markers = "extra == \"idna2008\""} + +[package.extras] +idna2008 = ["idna"] + [[package]] name = "six" version = "1.15.0" @@ -157,6 +243,17 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "sniffio" +version = "1.2.0" +description = "Sniff out which async library your code is running under" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +contextvars = {version = ">=2.1", markers = "python_version < \"3.7\""} + [[package]] name = "snowballstemmer" version = "2.0.0" @@ -314,13 +411,17 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [metadata] lock-version = "1.1" python-versions = "^3.6" -content-hash = "c10cf732636ae0ea2c57b2a5698505a78b3d396c1656a9cd23f3f86ac825c762" +content-hash = "d146005969ffef66c679fac3bac5aeb4e03b1ec2852e1afefdfe4087a5be789c" [metadata.files] alabaster = [ {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, ] +async-generator = [ + {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"}, + {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"}, +] babel = [ {file = "Babel-2.9.0-py2.py3-none-any.whl", hash = "sha256:9d35c22fcc79893c3ecc85ac4a56cde1ecf3f19c540bba0922308a6c06ca6fa5"}, {file = "Babel-2.9.0.tar.gz", hash = "sha256:da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05"}, @@ -341,10 +442,25 @@ colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] +contextvars = [ + {file = "contextvars-2.4.tar.gz", hash = "sha256:f38c908aaa59c14335eeea12abea5f443646216c4e29380d7bf34d2018e2c39e"}, +] docutils = [ {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, ] +h11 = [ + {file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"}, + {file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"}, +] +httpcore = [ + {file = "httpcore-0.13.3-py3-none-any.whl", hash = "sha256:ff614f0ef875b9e5fe0bdd459b31ea0eea282ff12dc82add83d68b3811ee94ad"}, + {file = "httpcore-0.13.3.tar.gz", hash = "sha256:5d674b57a11275904d4fd0819ca02f960c538e4472533620f322fc7db1ea0edc"}, +] +httpx = [ + {file = "httpx-0.18.1-py3-none-any.whl", hash = "sha256:ad2e3db847be736edc4b272c4d5788790a7e5789ef132fc6b5fef8aeb9e9f6e0"}, + {file = "httpx-0.18.1.tar.gz", hash = "sha256:0a2651dd2b9d7662c70d12ada5c290abcf57373b9633515fe4baa9f62566086f"}, +] idna = [ {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, @@ -353,6 +469,23 @@ imagesize = [ {file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"}, {file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"}, ] +immutables = [ + {file = "immutables-0.15-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:6728f4392e3e8e64b593a5a0cd910a1278f07f879795517e09f308daed138631"}, + {file = "immutables-0.15-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f0836cd3bdc37c8a77b192bbe5f41dbcc3ce654db048ebbba89bdfe6db7a1c7a"}, + {file = "immutables-0.15-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:8703d8abfd8687932f2a05f38e7de270c3a6ca3bd1c1efb3c938656b3f2f985a"}, + {file = "immutables-0.15-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b8ad986f9b532c026f19585289384b0769188fcb68b37c7f0bd0df9092a6ca54"}, + {file = "immutables-0.15-cp36-cp36m-win_amd64.whl", hash = "sha256:6f117d9206165b9dab8fd81c5129db757d1a044953f438654236ed9a7a4224ae"}, + {file = "immutables-0.15-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:b75ade826920c4e490b1bb14cf967ac14e61eb7c5562161c5d7337d61962c226"}, + {file = "immutables-0.15-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:b7e13c061785e34f73c4f659861f1b3e4a5fd918e4395c84b21c4e3d449ebe27"}, + {file = "immutables-0.15-cp37-cp37m-win_amd64.whl", hash = "sha256:3035849accee4f4e510ed7c94366a40e0f5fef9069fbe04a35f4787b13610a4a"}, + {file = "immutables-0.15-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:b04fa69174e0c8f815f9c55f2a43fc9e5a68452fab459a08e904a74e8471639f"}, + {file = "immutables-0.15-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:141c2e9ea515a3a815007a429f0b47a578ebeb42c831edaec882a245a35fffca"}, + {file = "immutables-0.15-cp38-cp38-win_amd64.whl", hash = "sha256:cbe8c64640637faa5535d539421b293327f119c31507c33ca880bd4f16035eb6"}, + {file = "immutables-0.15-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:a0a4e4417d5ef4812d7f99470cd39347b58cb927365dd2b8da9161040d260db0"}, + {file = "immutables-0.15-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3b15c08c71c59e5b7c2470ef949d49ff9f4263bb77f488422eaa157da84d6999"}, + {file = "immutables-0.15-cp39-cp39-win_amd64.whl", hash = "sha256:2283a93c151566e6830aee0e5bee55fc273455503b43aa004356b50f9182092b"}, + {file = "immutables-0.15.tar.gz", hash = "sha256:3713ab1ebbb6946b7ce1387bb9d1d7f5e09c45add58c2a2ee65f963c171e746b"}, +] jinja2 = [ {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"}, {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"}, @@ -376,20 +509,39 @@ markupsafe = [ {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"}, {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"}, {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"}, {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"}, {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"}, {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"}, {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032"}, + {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b"}, {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"}, {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-win32.whl", hash = "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39"}, + {file = "MarkupSafe-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8"}, {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, ] packaging = [ @@ -412,10 +564,18 @@ requests = [ {file = "requests-2.25.0-py2.py3-none-any.whl", hash = "sha256:e786fa28d8c9154e6a4de5d46a1d921b8749f8b74e28bde23768e5e16eece998"}, {file = "requests-2.25.0.tar.gz", hash = "sha256:7f1a0b932f4a60a1a65caa4263921bb7d9ee911957e0ae4a23a6dd08185ad5f8"}, ] +rfc3986 = [ + {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, + {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, +] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, ] +sniffio = [ + {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, + {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, +] snowballstemmer = [ {file = "snowballstemmer-2.0.0-py2.py3-none-any.whl", hash = "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0"}, {file = "snowballstemmer-2.0.0.tar.gz", hash = "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"}, diff --git a/docs/pyproject.toml b/docs/pyproject.toml index 1b1cb289..fa1c3c55 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -9,6 +9,7 @@ python = "^3.6" sphinx = "^3.2.1" sphinx-rtd-theme = "^0.5.0" sphinx-intl = "^2.0.1" +httpx = "^0.18.1" [tool.poetry.dev-dependencies] diff --git a/docs/source/develop.rst b/docs/source/develop.rst index ac8703d2..6ac1da61 100644 --- a/docs/source/develop.rst +++ b/docs/source/develop.rst @@ -41,79 +41,83 @@ When developing, it's convenient to run OnionShare from a terminal and add the ` This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example:: $ poetry run onionshare-cli -v ~/Documents/roms/nes/Q-bert\ \(USA\).nes - OnionShare 2.3 | https://onionshare.org/ - - @@@@@@@@@ - @@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _ - @@@@@@ @@@@@@@@@@@@@ / _ \ (_) - @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __ - @@@@@@@@ @@@@@@@@@@ | | | | '_ \| |/ _ \| '_ \ - @@@@@@@@@@@@ @@@@@@@@@@ \ \_/ / | | | | (_) | | | | - @@@@@@@@@@@@@@@@ @@@@@@@@@ \___/|_| |_|_|\___/|_| |_| - @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _ - @@@@@@@@@@ @@@@@@@@@@@@ / ___| | - @@@@@@@@@@ @@@@@@@@ \ `--.| |__ __ _ _ __ ___ - @@@@@@@@@@@ @ @@@@ `--. \ '_ \ / _` | '__/ _ \ - @@@@@@@@@@@@@ @@@@@@ /\__/ / | | | (_| | | | __/ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \____/|_| |_|\__,_|_| \___| - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@ - @@@@@@@@@ - - [Nov 10 2020 20:50:35] Settings.__init__ - [Nov 10 2020 20:50:35] Settings.load - [Nov 10 2020 20:50:35] Common.get_resource_path: filename=wordlist.txt - [Nov 10 2020 20:50:35] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt - [Nov 10 2020 20:50:35] ModeSettings.load: creating /home/user/.config/onionshare/persistent/abstain-reprogram-elevate.json - [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.public = False - [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.autostart_timer = 0 - [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.autostop_timer = 0 - [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.legacy = False - [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.client_auth = False - [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: share.autostop_sharing = True - [Nov 10 2020 20:50:35] Web.__init__: is_gui=False, mode=share - [Nov 10 2020 20:50:35] Common.get_resource_path: filename=static - [Nov 10 2020 20:50:35] Common.get_resource_path: filename=static, path=/home/user/code/onionshare/cli/onionshare_cli/resources/static - [Nov 10 2020 20:50:35] Common.get_resource_path: filename=templates - [Nov 10 2020 20:50:35] Common.get_resource_path: filename=templates, path=/home/user/code/onionshare/cli/onionshare_cli/resources/templates - [Nov 10 2020 20:50:35] Web.generate_static_url_path: new static_url_path is /static_qa7rlyxwnfodczrriv3tj5yeoq - [Nov 10 2020 20:50:35] ShareModeWeb.init - [Nov 10 2020 20:50:35] Onion.__init__ - [Nov 10 2020 20:50:35] Onion.connect - [Nov 10 2020 20:50:35] Settings.__init__ - [Nov 10 2020 20:50:35] Settings.load - [Nov 10 2020 20:50:35] Onion.connect: tor_data_directory_name=/home/user/.config/onionshare/tmp/tmpz53ztq3m - [Nov 10 2020 20:50:35] Common.get_resource_path: filename=torrc_template - [Nov 10 2020 20:50:35] Common.get_resource_path: filename=torrc_template, path=/home/user/code/onionshare/cli/onionshare_cli/resources/torrc_template + ╭───────────────────────────────────────────╮ + │ * ▄▄█████▄▄ * │ + │ ▄████▀▀▀████▄ * │ + │ ▀▀█▀ ▀██▄ │ + │ * ▄█▄ ▀██▄ │ + │ ▄█████▄ ███ -+- │ + │ ███ ▀█████▀ │ + │ ▀██▄ ▀█▀ │ + │ * ▀██▄ ▄█▄▄ * │ + │ * ▀████▄▄▄████▀ │ + │ ▀▀█████▀▀ │ + │ -+- * │ + │ ▄▀▄ ▄▀▀ █ │ + │ █ █ ▀ ▀▄ █ │ + │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │ + │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │ + │ │ + │ v2.3.2.dev1 │ + │ │ + │ 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 Connecting to the Tor network: 100% - Done - [Nov 10 2020 20:50:42] Onion.connect: Connected to tor 0.4.4.5 - [Nov 10 2020 20:50:42] Settings.load - [Nov 10 2020 20:50:42] Web.generate_password: saved_password=None - [Nov 10 2020 20:50:42] Common.get_resource_path: filename=wordlist.txt - [Nov 10 2020 20:50:42] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt - [Nov 10 2020 20:50:42] Web.generate_password: built random password: "pedometer-grower" - [Nov 10 2020 20:50:42] OnionShare.__init__ - [Nov 10 2020 20:50:42] OnionShare.start_onion_service - [Nov 10 2020 20:50:42] Onion.start_onion_service: port=17610 - [Nov 10 2020 20:50:42] Onion.start_onion_service: key_type=NEW, key_content=ED25519-V3 - [Nov 10 2020 20:50:46] ModeSettings.set: updating abstain-reprogram-elevate: general.service_id = x5duatuhpiwfzb23iwpjanalvtxdhoj43ria44s53ryy5diywvbu24ad - [Nov 10 2020 20:50:46] ModeSettings.set: updating abstain-reprogram-elevate: onion.private_key = uIXJzY+88tGSAXAjQxdwkzb2L7jHv467RIX1WDieVkFEZjEA7st2p/6uVCM4KM3L9PdShTPScuUv2IEbVQammA== + [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== Compressing files. - [Nov 10 2020 20:50:46] ShareModeWeb.init - [Nov 10 2020 20:50:46] ShareModeWeb.set_file_info_custom - [Nov 10 2020 20:50:46] ShareModeWeb.build_zipfile_list - [Nov 10 2020 20:50:46] Web.start: port=17610 - * Running on http://127.0.0.1:17610/ (Press CTRL+C to quit) - + [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) + Give this address to the recipient: - http://onionshare:pedometer-grower@x5duatuhpiwfzb23iwpjanalvtxdhoj43ria44s53ryy5diywvbu24ad.onion - + http://onionshare:tipping-colonize@omxjamkys6diqxov7lxru2upromdprxjuq3czdhen6hrshzd4sll2iyd.onion + Press Ctrl+C to stop the server + You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example:: common.log('OnionShareGui', 'start_server', 'I ran here') @@ -127,38 +131,37 @@ Tor is slow, and it's often convenient to skip starting onion services altogethe You can do this with the ``--local-only`` flag. For example:: $ poetry run onionshare-cli --local-only --receive - OnionShare 2.3 | https://onionshare.org/ - - @@@@@@@@@ - @@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _ - @@@@@@ @@@@@@@@@@@@@ / _ \ (_) - @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __ - @@@@@@@@ @@@@@@@@@@ | | | | '_ \| |/ _ \| '_ \ - @@@@@@@@@@@@ @@@@@@@@@@ \ \_/ / | | | | (_) | | | | - @@@@@@@@@@@@@@@@ @@@@@@@@@ \___/|_| |_|_|\___/|_| |_| - @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _ - @@@@@@@@@@ @@@@@@@@@@@@ / ___| | - @@@@@@@@@@ @@@@@@@@ \ `--.| |__ __ _ _ __ ___ - @@@@@@@@@@@ @ @@@@ `--. \ '_ \ / _` | '__/ _ \ - @@@@@@@@@@@@@ @@@@@@ /\__/ / | | | (_| | | | __/ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \____/|_| |_|\__,_|_| \___| - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@ - @@@@@@@@@ - - * Running on http://127.0.0.1:17635/ (Press CTRL+C to quit) - + ╭───────────────────────────────────────────╮ + │ * ▄▄█████▄▄ * │ + │ ▄████▀▀▀████▄ * │ + │ ▀▀█▀ ▀██▄ │ + │ * ▄█▄ ▀██▄ │ + │ ▄█████▄ ███ -+- │ + │ ███ ▀█████▀ │ + │ ▀██▄ ▀█▀ │ + │ * ▀██▄ ▄█▄▄ * │ + │ * ▀████▄▄▄████▀ │ + │ ▀▀█████▀▀ │ + │ -+- * │ + │ ▄▀▄ ▄▀▀ █ │ + │ █ █ ▀ ▀▄ █ │ + │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │ + │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │ + │ │ + │ v2.3.2.dev1 │ + │ │ + │ https://onionshare.org/ │ + ╰───────────────────────────────────────────╯ + + * Running on http://127.0.0.1:17617/ (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:train-system@127.0.0.1:17635 - + http://onionshare:ended-blah@127.0.0.1:17617 + 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.