[Pkg-privacy-commits] [onionshare] 45/256: Created a Settings object, which loads and saves settings to file, and made the Settings dialog use the settings from this object
Ulrike Uhlig
ulrike at moszumanska.debian.org
Fri May 26 12:53:09 UTC 2017
This is an automated email from the git hooks/post-receive script.
ulrike pushed a commit to branch master
in repository onionshare.
commit 25109c8a66a629209918cb229aa64bedb6f4ab3f
Author: Micah Lee <micah at micahflee.com>
Date: Wed Dec 28 19:52:21 2016 -0800
Created a Settings object, which loads and saves settings to file, and made the Settings dialog use the settings from this object
---
onionshare/onion.py | 3 ++
onionshare/settings.py | 90 +++++++++++++++++++++++++++++++++++++++
onionshare_gui/settings_dialog.py | 34 ++++++++++++---
3 files changed, 120 insertions(+), 7 deletions(-)
diff --git a/onionshare/onion.py b/onionshare/onion.py
index 05d479b..9088151 100644
--- a/onionshare/onion.py
+++ b/onionshare/onion.py
@@ -25,6 +25,7 @@ import os, sys, tempfile, shutil, urllib
from . import socks
from . import helpers, strings
+from .settings import Settings
class NoTor(Exception):
"""
@@ -60,6 +61,8 @@ class Onion(object):
self.transparent_torification = transparent_torification
self.stealth = stealth
+ self.settings = Settings()
+
# files and dirs to delete on shutdown
self.cleanup_filenames = []
self.service_id = None
diff --git a/onionshare/settings.py b/onionshare/settings.py
new file mode 100644
index 0000000..2bafbee
--- /dev/null
+++ b/onionshare/settings.py
@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+"""
+OnionShare | https://onionshare.org/
+
+Copyright (C) 2016 Micah Lee <micah at 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 platform, os, json
+
+from . import helpers
+
+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):
+ self.filename = self.build_filename()
+ self.load()
+
+ def build_filename(self):
+ """
+ Returns the path of the settings file.
+ """
+ p = platform.system()
+ if p == 'Windows':
+ appdata = os.environ['APPDATA']
+ return '{}\\OnionShare\\onionshare.json'.format(appdata)
+ elif p == 'Darwin':
+ return os.path.expanduser('~/Library/Application Support/OnionShare/onionshare.json')
+ else:
+ return os.path.expanduser('~/.config/onionshare/onionshare.json')
+
+ def load(self):
+ """
+ Load the settings from file.
+ """
+ default_settings = {
+ 'version': helpers.get_version(),
+ 'connection_type': 'automatic',
+ 'control_port_address': '127.0.0.1',
+ 'control_port_port': '9051',
+ 'socket_file_path': '/var/run/tor/control',
+ 'auth_type': 'no_auth',
+ 'auth_password': '',
+ 'auth_cookie_path': '/var/run/tor/control.authcookie'
+ }
+
+ if os.path.exists(self.filename):
+ # If the settings file exists, load it
+ try:
+ self._settings = json.loads(open(self.filename, 'r').read())
+ except:
+ # If the settings don't work, use default ones instead
+ self._settings = default_settings
+
+ else:
+ # Otherwise, use default settings
+ self._settings = default_settings
+
+ def save(self):
+ """
+ Save settings to file.
+ """
+ os.mkdirs(os.path.dirname(self.filename))
+ open(self.filename, 'w').write(json.dumps(self._settings))
+
+ def get(self, key):
+ """
+ Set a setting.
+ """
+ return self._settings[key]
+
+ def set(self, key, val):
+ self._settings[key] = val
diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py
index 93e94c1..55a76d0 100644
--- a/onionshare_gui/settings_dialog.py
+++ b/onionshare_gui/settings_dialog.py
@@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
from PyQt5 import QtCore, QtWidgets, QtGui
from onionshare import strings
+from onionshare.settings import Settings
class SettingsDialog(QtWidgets.QDialog):
"""
@@ -42,8 +43,8 @@ class SettingsDialog(QtWidgets.QDialog):
self.connection_type_control_port_radio.toggled.connect(self.connection_type_control_port_toggled)
connection_type_control_port_extras_label = QtWidgets.QLabel(strings._('gui_settings_control_port_label', True))
- self.connection_type_control_port_extras_address = QtWidgets.QLineEdit('127.0.0.1')
- self.connection_type_control_port_extras_port = QtWidgets.QLineEdit('9051')
+ self.connection_type_control_port_extras_address = QtWidgets.QLineEdit()
+ self.connection_type_control_port_extras_port = QtWidgets.QLineEdit()
connection_type_control_port_extras_layout = QtWidgets.QHBoxLayout()
connection_type_control_port_extras_layout.addWidget(connection_type_control_port_extras_label)
connection_type_control_port_extras_layout.addWidget(self.connection_type_control_port_extras_address)
@@ -58,7 +59,7 @@ class SettingsDialog(QtWidgets.QDialog):
self.connection_type_socket_file_radio.toggled.connect(self.connection_type_socket_file_toggled)
connection_type_socket_file_extras_label = QtWidgets.QLabel(strings._('gui_settings_socket_file_label', True))
- self.connection_type_socket_file_extras_path = QtWidgets.QLineEdit('/var/run/tor/control')
+ self.connection_type_socket_file_extras_path = QtWidgets.QLineEdit()
connection_type_socket_file_extras_layout = QtWidgets.QHBoxLayout()
connection_type_socket_file_extras_layout.addWidget(connection_type_socket_file_extras_label)
connection_type_socket_file_extras_layout.addWidget(self.connection_type_socket_file_extras_path)
@@ -103,7 +104,7 @@ class SettingsDialog(QtWidgets.QDialog):
self.authenticate_cookie_radio.toggled.connect(self.authenticate_cookie_toggled)
authenticate_cookie_extras_label = QtWidgets.QLabel(strings._('gui_settings_cookie_label', True))
- self.authenticate_cookie_extras_cookie_path = QtWidgets.QLineEdit('/var/run/tor/control.authcookie')
+ self.authenticate_cookie_extras_cookie_path = QtWidgets.QLineEdit()
authenticate_cookie_extras_layout = QtWidgets.QHBoxLayout()
authenticate_cookie_extras_layout.addWidget(authenticate_cookie_extras_label)
authenticate_cookie_extras_layout.addWidget(self.authenticate_cookie_extras_cookie_path)
@@ -143,9 +144,28 @@ class SettingsDialog(QtWidgets.QDialog):
layout.addLayout(buttons_layout)
self.setLayout(layout)
- # Set default option
- self.connection_type_automatic_radio.setChecked(True)
- self.authenticate_no_auth_radio.setChecked(True)
+
+ # Load settings, and fill them in
+ self.settings = Settings()
+ connection_type = self.settings.get('connection_type')
+ if connection_type == 'automatic':
+ self.connection_type_automatic_radio.setChecked(True)
+ elif connection_type == 'control_port':
+ self.connect_type_control_port_radio.setChecked(True)
+ elif connection_type == 'socket_file':
+ self.connection_type_socket_file_radio.setChecked(True)
+ self.connection_type_control_port_extras_address.setText(self.settings.get('control_port_address'))
+ self.connection_type_control_port_extras_port.setText(self.settings.get('control_port_port'))
+ self.connection_type_socket_file_extras_path.setText(self.settings.get('socket_file_path'))
+ auth_type = self.settings.get('auth_type')
+ if auth_type == 'no_auth':
+ self.authenticate_no_auth_radio.setChecked(True)
+ elif auth_type == 'password':
+ self.authenticate_password_radio.setChecked(True)
+ elif auth_type == 'cookie':
+ self.authenticate_cookie_radio.setChecked(True)
+ self.authenticate_password_extras_password.setText(self.settings.get('auth_password'))
+ self.authenticate_cookie_extras_cookie_path.setText(self.settings.get('auth_cookie_path'))
# Show the dialog
self.exec_()
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-privacy/packages/onionshare.git
More information about the Pkg-privacy-commits
mailing list