aboutsummaryrefslogtreecommitdiff
path: root/onionshare/settings.py
diff options
context:
space:
mode:
authorMicah Lee <micah@micahflee.com>2020-10-12 22:40:55 -0700
committerMicah Lee <micah@micahflee.com>2020-10-12 22:40:55 -0700
commitf4abcf1be9122a28005dc3e0949bf5952192e982 (patch)
tree0c6fdb71401ac294403fe87730ef6a73b0d7498a /onionshare/settings.py
parentb81a55f546ffaf00586e43cdc279b967da096e4f (diff)
downloadonionshare-f4abcf1be9122a28005dc3e0949bf5952192e982.tar.gz
onionshare-f4abcf1be9122a28005dc3e0949bf5952192e982.zip
Add onionshare CLI to cli folder, move GUI to desktop folder, and start refactoring it to work with briefcase
Diffstat (limited to 'onionshare/settings.py')
-rw-r--r--onionshare/settings.py199
1 files changed, 0 insertions, 199 deletions
diff --git a/onionshare/settings.py b/onionshare/settings.py
deleted file mode 100644
index 6b6ed6ab..00000000
--- a/onionshare/settings.py
+++ /dev/null
@@ -1,199 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-OnionShare | https://onionshare.org/
-
-Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-"""
-
-import json
-import os
-import platform
-import locale
-
-try:
- # We only need pwd module in macOS, and it's not available in Windows
- import pwd
-except:
- pass
-
-from . import strings
-
-
-class Settings(object):
- """
- This class stores all of the settings for OnionShare, specifically for how
- to connect to Tor. If it can't find the settings file, it uses the default,
- which is to attempt to connect automatically using default Tor Browser
- settings.
- """
-
- def __init__(self, common, config=False):
- self.common = common
-
- self.common.log("Settings", "__init__")
-
- # If a readable config file was provided, use that instead
- if config:
- if os.path.isfile(config):
- self.filename = config
- else:
- self.common.log(
- "Settings",
- "__init__",
- "Supplied config does not exist or is unreadable. Falling back to default location",
- )
- self.filename = self.build_filename()
-
- else:
- # Default config
- self.filename = self.build_filename()
-
- # Dictionary of available languages in this version of OnionShare,
- # mapped to the language name, in that language
- self.available_locales = {
- "ar": "العربية", # Arabic
- #'bn': 'বাংলা', # Bengali (commented out because not at 90% translation)
- "ca": "Català", # Catalan
- "zh_Hant": "正體中文 (繁體)", # Traditional Chinese
- "zh_Hans": "中文 (简体)", # Simplified Chinese
- "da": "Dansk", # Danish
- "nl": "Nederlands", # Dutch
- "en": "English", # English
- # "fi": "Suomi", # Finnish (commented out because not at 90% translation)
- "fr": "Français", # French
- "de": "Deutsch", # German
- "el": "Ελληνικά", # Greek
- "is": "Íslenska", # Icelandic
- "ga": "Gaeilge", # Irish
- "it": "Italiano", # Italian
- "ja": "日本語", # Japanese
- "nb_NO": "Norsk Bokmål", # Norwegian Bokmål
- "fa": "فارسی", # Persian
- "pl": "Polski", # Polish
- "pt_BR": "Português (Brasil)", # Portuguese Brazil
- "pt_PT": "Português (Portugal)", # Portuguese Portugal
- "ro": "Română", # Romanian
- "ru": "Русский", # Russian
- "sr_Latn": "Srpska (latinica)", # Serbian (latin)
- "es": "Español", # Spanish
- "sv": "Svenska", # Swedish
- "te": "తెలుగు", # Telugu
- "tr": "Türkçe", # Turkish
- "uk": "Українська", # Ukrainian
- }
-
- # These are the default settings. They will get overwritten when loading from disk
- self.default_settings = {
- "version": self.common.version,
- "connection_type": "bundled",
- "control_port_address": "127.0.0.1",
- "control_port_port": 9051,
- "socks_address": "127.0.0.1",
- "socks_port": 9050,
- "socket_file_path": "/var/run/tor/control",
- "auth_type": "no_auth",
- "auth_password": "",
- "use_autoupdate": True,
- "autoupdate_timestamp": None,
- "no_bridges": True,
- "tor_bridges_use_obfs4": False,
- "tor_bridges_use_meek_lite_azure": False,
- "tor_bridges_use_custom_bridges": "",
- "persistent_tabs": [],
- "locale": None, # this gets defined in fill_in_defaults()
- }
- self._settings = {}
- self.fill_in_defaults()
-
- def fill_in_defaults(self):
- """
- If there are any missing settings from self._settings, replace them with
- their default values.
- """
- for key in self.default_settings:
- if key not in self._settings:
- self._settings[key] = self.default_settings[key]
-
- # Choose the default locale based on the OS preference, and fall-back to English
- if self._settings["locale"] is None:
- language_code, encoding = locale.getdefaultlocale()
-
- # Default to English
- if not language_code:
- language_code = "en_US"
-
- if language_code == "pt_PT" and language_code == "pt_BR":
- # Portuguese locales include country code
- default_locale = language_code
- else:
- # All other locales cut off the country code
- default_locale = language_code[:2]
-
- if default_locale not in self.available_locales:
- default_locale = "en"
- self._settings["locale"] = default_locale
-
- def build_filename(self):
- """
- Returns the path of the settings file.
- """
- return os.path.join(self.common.build_data_dir(), "onionshare.json")
-
- def load(self):
- """
- Load the settings from file.
- """
- self.common.log("Settings", "load")
-
- # If the settings file exists, load it
- if os.path.exists(self.filename):
- try:
- self.common.log("Settings", "load", f"Trying to load {self.filename}")
- with open(self.filename, "r") as f:
- self._settings = json.load(f)
- self.fill_in_defaults()
- except:
- pass
-
- # Make sure data_dir exists
- try:
- os.makedirs(self.get("data_dir"), exist_ok=True)
- except:
- pass
-
- def save(self):
- """
- Save settings to file.
- """
- self.common.log("Settings", "save")
- open(self.filename, "w").write(json.dumps(self._settings, indent=2))
- self.common.log("Settings", "save", f"Settings saved in {self.filename}")
-
- def get(self, key):
- return self._settings[key]
-
- def set(self, key, val):
- # If typecasting int values fails, fallback to default values
- if key == "control_port_port" or key == "socks_port":
- try:
- val = int(val)
- except:
- if key == "control_port_port":
- val = self.default_settings["control_port_port"]
- elif key == "socks_port":
- val = self.default_settings["socks_port"]
-
- self._settings[key] = val