def passwordFromUser(self, parent, profile_id = None, mode = None, pw_id = 1, prompt = None): """ ask user for password. This does even work when run as cronjob and user is logged in. """ if prompt is None: prompt = _('Profile \'%(profile)s\': Enter password for %(mode)s: ') % {'profile': self.config.profileName(profile_id), 'mode': self.config.SNAPSHOT_MODES[mode][pw_id + 1]} tools.registerBackintimePath('qt') x_server = tools.checkXServer() import_successful = False if x_server: try: import messagebox import_successful = True except ImportError: pass if not import_successful or not x_server: import getpass alarm = tools.Alarm() alarm.start(300) try: password = getpass.getpass(prompt) alarm.stop() except Timeout: password = '' return password password = messagebox.askPasswordDialog(parent, self.config.APP_NAME, prompt = prompt, timeout = 300) return password
def load(self, snapshots=None, cfg=None, force=False): if self.loaded and not force: return if snapshots is None: import snapshots as snapshots_ snapshots = snapshots_.Snapshots(cfg) self.loaded = True self.plugins = [] self.hasGuiPlugins = False loadedPlugins = [] for path in ('plugins', 'common/plugins', 'qt/plugins'): fullPath = tools.backintimePath(path) if os.path.isdir(fullPath): logger.debug('Register plugin path %s' % fullPath, self) tools.registerBackintimePath(path) for f in os.listdir(fullPath): if f not in loadedPlugins and f.endswith( '.py') and not f.startswith('__'): try: module = __import__(f[:-3]) module_dict = module.__dict__ for key, value in list(module_dict.items()): if key.startswith('__'): continue if type(value) is type: if issubclass(value, Plugin): plugin = value() if plugin.init(snapshots): logger.debug( 'Add plugin %s' % f, self) if plugin.isGui(): self.hasGuiPlugins = True self.plugins.insert(0, plugin) else: self.plugins.append(plugin) loadedPlugins.append(f) except BaseException as e: logger.error( 'Failed to load plugin %s: %s' % (f, str(e)), self)
def load(self, snapshots = None, cfg = None, force = False): if self.loaded and not force: return if snapshots is None: import snapshots as snapshots_ snapshots = snapshots_.Snapshots(cfg) self.loaded = True self.plugins = [] self.hasGuiPlugins = False loadedPlugins = [] for path in ('plugins', 'common/plugins', 'qt/plugins'): fullPath = tools.backintimePath(path) if os.path.isdir(fullPath): logger.debug('Register plugin path %s' %fullPath, self) tools.registerBackintimePath(path) for f in os.listdir(fullPath): if f not in loadedPlugins and f.endswith('.py') and not f.startswith('__'): try: module = __import__(f[: -3]) module_dict = module.__dict__ for key, value in list(module_dict.items()): if key.startswith('__'): continue if type(value) is type: if issubclass(value, Plugin): plugin = value() if plugin.init(snapshots): logger.debug('Add plugin %s' %f, self) if plugin.isGui(): self.hasGuiPlugins = True self.plugins.insert(0, plugin) else: self.plugins.append(plugin) loadedPlugins.append(f) except BaseException as e: logger.error('Failed to load plugin %s: %s' %(f, str(e)), self)
import os import sys import unittest from unittest.mock import patch from tempfile import TemporaryDirectory, NamedTemporaryFile from contextlib import contextmanager sys.path.append(os.path.join(os.path.dirname(__file__), '..')) import logger import config import snapshots import tools # mock notifyplugin to suppress notifications tools.registerBackintimePath('qt', 'plugins') TMP_FLOCK = NamedTemporaryFile() PRIV_KEY_FILE = os.path.expanduser(os.path.join("~",".ssh","id_rsa")) AUTHORIZED_KEYS_FILE = os.path.expanduser(os.path.join("~",".ssh","authorized_keys")) DUMMY = 'dummy_test_process.sh' if os.path.exists(PRIV_KEY_FILE + '.pub') and os.path.exists(AUTHORIZED_KEYS_FILE): with open(PRIV_KEY_FILE + '.pub', 'rb') as pub: with open(AUTHORIZED_KEYS_FILE, 'rb') as auth: KEY_IN_AUTH = pub.read() in auth.readlines() else: KEY_IN_AUTH = False LOCAL_SSH = all((tools.processExists('sshd'), os.path.isfile(PRIV_KEY_FILE),
# (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os import sys import tools tools.registerBackintimePath('common') tools.registerBackintimePath('plugins') import logger from exceptions import StopException class Plugin: def __init__(self): return def init(self, snapshots): return True def isGui(self): return False
def test_registerBackintimePath(self): path = tools.backintimePath('foo') tools.registerBackintimePath('foo') self.assertIn(path, sys.path) sys.path.remove(path)
import os import sys import unittest import socket from unittest.mock import patch from tempfile import TemporaryDirectory, NamedTemporaryFile from contextlib import contextmanager sys.path.append(os.path.join(os.path.dirname(__file__), '..')) import logger import config import snapshots import tools # mock notifyplugin to suppress notifications tools.registerBackintimePath('qt', 'plugins') TMP_FLOCK = NamedTemporaryFile() PRIV_KEY_FILE = os.path.expanduser(os.path.join("~", ".ssh", "id_rsa")) AUTHORIZED_KEYS_FILE = os.path.expanduser( os.path.join("~", ".ssh", "authorized_keys")) DUMMY = 'dummy_test_process.sh' if os.path.exists(PRIV_KEY_FILE + '.pub') and os.path.exists(AUTHORIZED_KEYS_FILE): with open(PRIV_KEY_FILE + '.pub', 'rb') as pub: with open(AUTHORIZED_KEYS_FILE, 'rb') as auth: KEY_IN_AUTH = pub.read() in auth.readlines() else: KEY_IN_AUTH = False