def onDeleteAllPasswords(self, *args): """Delete all save passwords from keyring""" dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.WARNING, Gtk.ButtonsType.OK_CANCEL, _("Delete passwords")) dialog.format_secondary_text( _("Confirm deleting all saved passwords from the keyring.")) response = dialog.run() if response == Gtk.ResponseType.OK: import keyring for mycfile in os.listdir(WORKFOLDER): connection = "%s/%s" % (WORKFOLDER, mycfile) if Path(mycfile).suffix.lower() == ".myc": conf = ConfigParser(interpolation=None) try: conf.read(connection) if conf["myconnector"].getboolean("passwdsave"): keyring.delete_password( conf["myconnector"].get("server", ""), conf["myconnector"].get("username", "")) conf["myconnector"]["passwdsave"] = "False" with open(connection, "w") as f: conf.write(f) except: pass log.info( _("All saved passwords have been deleted from the keyring.")) dialog.destroy()
def onSave(self, *args): """Сохранение настроек программы""" if self.changeRdpRem.get_active(): CONFIG["rdp"] = "remmina" else: CONFIG["rdp"] = "freerdp" if self.changeVncRem.get_active(): CONFIG["vnc"] = "remmina" else: CONFIG["vnc"] = "vncviewer" CONFIG['tab'] = self.combo_tabs.get_active_id() CONFIG['fs'] = self.entryFS.get_text() CONFIG['tray'] = str(self.checkTray.get_active()) CONFIG['check_version'] = str(self.checkVersion.get_active()) CONFIG['log'] = str(self.checkLog.get_active()) CONFIG['sort'] = self.combo_sort.get_active_id() CONFIG['editor'] = self.editor.get_text() CONFIG['passwd_off'] = str(self.checkPasswd.get_active()) config_save() msg_save = "%s myconnector.conf..." % _( "The preferences are saved in a file") myconnector.ui.viewStatus(self.statusbar, msg_save) log.info(msg_save) if not self.checkLog.get_active(): log.warning( _("LOGGING WILL BE DISABLED AFTER THE PROGRAM IS RESTARTED!")) myconnector.ui.Gui.initLabels(True, self.labelRDP, self.labelVNC, self.labelFS) self.conn_note.set_current_page(int(CONFIG['tab'])) self.combo_protocols.set_active_id(CONFIG['tab']) self.updateTray()
def start(self, args): _exec = CONFIG['fs'] + ' "' if type(args) == str: if not args.find("://") != -1: os.system( "zenity --warning --text='%s!\n%s.' --no-wrap --icon-name=myconnector" % (_("Enter the connection protocol"), _("Or select from the list in the advanced options"))) return 1 else: command = _exec + args + '"' server = args else: try: protocol, server = args["server"].split("://") except: server = args["server"] try: protocol = args["type"] except KeyError: options.msg_error( _("The FS connection configuration file is corrupted - the type is missing!" ), options.log.exception) return 1 command = _exec + protocol + "://" if args.get("domain", ""): command += "%s;" % args["domain"] if args.get("user", ""): command += "%s@" % args["user"] command += server if args.get("folder", ""): command += "/%s" % args["folder"] command += '"' options.log.info("%s %s. %s:", _("Connecting to a file server"), server, _("Launch Command")) options.log.info(command) os.system(command + STD_TO_LOG)
def checkLogFile(filePath): """Функция проверки размера лог-файла и его архивация, если он больше 10Мб""" if os.path.exists(filePath): sizeLog = int( check_output("stat -c%%s %s; exit 0" % filePath, shell=True, universal_newlines=True).strip()) if sizeLog > 10000000: import tarfile from datetime import datetime os.chdir(LOGFOLDER) filename = os.path.basename(filePath) #'2017-04-05 15:09:52.981053' -> 20170405: dt = datetime.today() today = str(dt).split(' ')[0].split('-') today = ''.join(today) tarName = filePath + '.' + today + '.tgz' tar = tarfile.open(tarName, "w:gz") tar.add(filename) os.remove(filename) os.chdir(MAINFOLDER) tar.close() msg = "%s %s %s %s" % ( _("Log"), filename, _("exceeded the allowed size (10mb), been archived"), os.path.basename(tarName)) os.system('echo "--- INFO %s %s" >> %s' % (str(dt), msg, LOGFILE))
def check_user(user): """User existence check""" try: pwd.getpwnam(user) except KeyError: os.system("xterm -e 'adduser %s'" % user) os.system( "zenity --info --title='KIOSK' --icon-name=myconnector --text='%s \"%s\" %s'" % (_("User"), user, _("was created without password! Set, if need.")))
def check_user_from_cli(): user = _config["kiosk"].get("user", "") if user: check_user(user) return user else: print("%s: %s" % (_("Config error"), _("user not specified!"))) disable_kiosk() kiosk_disabled() exit(1)
def onSave(self, *args): """Action for button 'Save'""" mode = "0" file = '' url = '' disable_kiosk() _config['kiosk']['autologin'] = str( self.checkKioskAutologin.get_active()) user = self.entryKioskUser.get_text() if user == "root": os.system( "zenity --error --title='KIOSK' --icon-name=myconnector --text='%s'" % _("Root is not allowed to use the mode!")) return 1 if user == "": user = "******" _config['kiosk']['user'] = user if not self.changeKioskOff.get_active(): check_user(user) if self.changeKioskAll.get_active(): mode = "1" enable_kiosk() fix_shortcut("kiosk", "$MYC", "") if self.changeKioskCtor.get_active(): mode = "2" uri = self.entryKioskCtor.get_uri() if uri: source = unquote(uri.replace("file://", "")) result = myc_save(user, source) if result: os.system( "zenity --error --title='KIOSK' --icon-name=myconnector --text=\"%s\"" % result) return 1 else: os.system( "zenity --error --title='KIOSK' --icon-name=myconnector --text='%s'" % _("No connection file specified!")) return 1 if self.changeKioskWeb.get_active(): mode = "3" url = self.entryKioskWeb.get_text() enable_kiosk_web(url) ctrl = self.checkKioskCtrl.get_active() if ctrl: disable_ctrl() else: enable_ctrl() _config['kiosk']['mode'] = mode _config['kiosk']['file'] = file _config['kiosk']['url'] = url _config['kiosk']['ctrl_disabled'] = str(ctrl) with open(_kiosk_conf, 'w') as configfile: _config.write(configfile) #else need disable tray... self.onClose(self)
def start(self, args): if x2goCheck(): if type(args) == str: command = "pyhoca-cli -N --add-to-known-hosts --server %s" % args options.log.info("X2GO: %s %s", _("Connecting to the server"), args) options.log.info(command) else: server = args["server"] username = args.get("username", "") command = "pyhoca-cli -N --add-to-known-hosts --server %s" % server if username: command += " --user %s" % args["username"] if args.get("port", "22"): command += " --port %s" % args["port"] if args.get("session", "MATE"): command += " --command %s" % args["session"] geometry = args.get("geometry", "fullscreen") if geometry: command += " --geometry %s" % args["geometry"] if args.get("printers", "False") == "True": command += " --printing" if args.get("sound", "False") == "True": command += " --sound pulse" options.log.info("X2GO: %s %s. %s:", _("Connecting to the server"), server, _("Launch Command")) options.log.info(command) password = args.get("passwd", "") if not password: password = keyring.get_password(server, username) if password: password = escape(password) else: new_username, password = passwd(server, username) if new_username == username or not new_username: pass else: command = command.replace("--user %s" % username, "--user %s" % new_username) command += " --password %s" % password if password != False: #if there is not password os.system(command + STD_TO_LOG) if enableLog: signal.signal(signal.SIGCHLD, signal.SIG_IGN) # without zombie Popen([MAINFOLDER + "/myconnector-check-x2go-errors"]) else: options.msg_error( _("The 'pyhoca-cli' client for X2GO is not installed!"), options.log.warning)
def loadFromFile(filename, window=None, _import=False): """Load/import parameters from file .myc or import from .ctor, .rdp, .remmina""" if _import: from myconnector.converter import (ctor_import, remmina_import, rdp_import) ext = Path(filename).suffix.lower() result = False if ext == ".ctor": result = ctor_import(filename) if ext == ".remmina": result = remmina_import(filename) if ext in [".rdp", ".rdpx"]: result = rdp_import(filename) if result == None: msg_error( "%s \"%s\" %s!" % (_("Import from file"), filename, _("failed")), log.error) return None elif result: return result else: filepath = filename else: filepath = "%s/%s" % (WORKFOLDER, filename) filename = filename.replace("tmp_", "") if not os.path.isfile(filepath): msg_error("%s \"%s\" %s." % (_("File"), filename, _("not found")), log.exception) return None try: conf = ConfigParser(interpolation=None) try: conf.read(filepath) try: return conf["myconnector"] except KeyError: msg_error( "%s \"%s\" %s [myconnector]." % (_("File"), filename, _("does not contain a section")), log.exception) except ParsingError: msg_error( "%s \"%s\" %s." % (_("File"), filename, _("contains errors")), log.exception) except: msg_error( "%s \"%s\" %s!" % (_("File"), filename, _("has an invalid format")), log.exception) return None
def start(self, parameters): """Run connection via Remmina""" self.create_cfg_file(parameters) options.log.info("Remmina: %s %s %s: %s", _("connecting via the protocol"), self.cfg["protocol"], _("to the server"), self.cfg["server"]) knock = parameters.get("knocking", "") if knock: cmd = "knock %s %s" % (sub(":.*", "", parameters["server"]), knock) options.log.info(cmd) os.system("%s%s" % (cmd, STD_TO_LOG)) command = "remmina -c \"%s/%s\"" % (WORKFOLDER, self.f_name) options.log.info(command) os.system("cd $HOME && %s%s" % (command, STD_TO_LOG))
def onButtonReset(self, *args): """Сброс параметров программы""" dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.WARNING, Gtk.ButtonsType.OK_CANCEL, _("Reset the program")) dialog.format_secondary_text( _("Confirm resetting the program parameters to their default values." )) response = dialog.run() if response == Gtk.ResponseType.OK: config_save(default=True) log.info(_("The program is reset to the default value.")) dialog.destroy() self.initParameters() self.updateTray()
def __init__(self): """Window with settings of the mode KIOSK""" os.makedirs(_lightdm_conf_dir, exist_ok=True) os.makedirs(_etc_dir, exist_ok=True) Gtk.Window.__init__(self, title=_("KIOSK mode control")) builder = Gtk.Builder() builder.set_translation_domain(APP) builder.add_from_file("%s/kiosk.ui" % UIFOLDER) builder.connect_signals(self) self.set_position(Gtk.WindowPosition.CENTER) self.set_resizable(False) self.set_modal(True) self.set_default_icon_name("myconnector") self.changeKioskOff = builder.get_object("radio_kiosk_off") self.changeKioskAll = builder.get_object("radio_kiosk_all") self.changeKioskCtor = builder.get_object("radio_kiosk_ctor") self.entryKioskCtor = builder.get_object("entry_kiosk_ctor") self.changeKioskWeb = builder.get_object("radio_kiosk_web") self.entryKioskWeb = builder.get_object("entry_kiosk_web") self.entryKioskUser = builder.get_object("entry_kiosk_user") self.checkKioskCtrl = builder.get_object("check_kiosk_safe") self.checkKioskAutologin = builder.get_object("check_kiosk_autologin") box = builder.get_object("box") self.add(box) self.connect("delete-event", self.onClose) self.show_all() result = _config.read(_kiosk_conf) if not result: config_init(True) self.initParams()
def enable_from_cli_web(): check_user_from_cli() url = _config["kiosk"].get("url", "") if url: enable_kiosk_web(url) if _config["kiosk"].get("ctrl_disabled", "False") in _true: disable_ctrl() else: enable_ctrl() else: print("%s: %s" % (_("Config error"), _("URL for webkiosk not specified!"))) disable_kiosk() kiosk_disabled() exit(1) print(_("WEB-KIOSK enabled!")) kiosk_status()
def preferences(): if citrixCheck(): options.log.info("Citrix: %s." % _("Opening the program settings")) os.system( '/opt/Citrix/ICAClient/util/configmgr --icaroot /opt/Citrix/ICAClient' + STD_TO_LOG) else: _missCitrix()
def myc_save(args): """Save imported parameters to myc file""" _config = ConfigParser(interpolation=None) ctorfile = args.input mycfile = args.output if not mycfile: mycfile = ctorfile.replace(".ctor", ".myc") _config["myconnector"] = ctor_import(ctorfile) try: with open(mycfile, "w") as configfile: _config.write(configfile) print( "%s (%s) %s - %s " % (_("File"), ctorfile, _("has been successfully converted to the new format"), mycfile)) except FileNotFoundError as e: print("%s. %s" % (_("Import error"), e))
def remmina_import(filename): """Get parameters from remmina file""" conf = ConfigParser(interpolation=None) try: conf.read(filename) try: conf["remmina"]["program"] = "remmina" return conf["remmina"] except KeyError: options.log.exception( "%s \"%s\" %s [remmina]." % (_("File"), filename, _("does not contain a section"))) return None except ParsingError: options.log.exception("%s \"%s\" %s." % (_("File"), filename, _("contains errors"))) return None
def start(self, args): if type(args) == str: options.log.info("VNC: %s %s", _("Connecting to the server"), args) command = 'vncviewer ' + args server = args else: for key in CONFIGS["VNC1"]: if not key in args: args[key] = CONFIGS["VNC1"][key] server = args["server"] command = 'vncviewer %s ' % server if args.get("fullscreen", "False") == "True": command += "-fullscreen " if args.get("viewonly", "False") == "True": command += "-viewonly " if args.get("listen", "False") == "True": command = "vncviewer -listen %s" % args.get("listen_port", "") options.log.info("VNC: %s %s. %s:", _("Connecting to the server"), server, _("Launch Command")) options.log.info(command) os.system(command + STD_TO_LOG)
def clearFile(self, target, title, message): """Функция для очисти БД серверов или списка подключений""" dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.WARNING, Gtk.ButtonsType.OK_CANCEL, title) dialog.format_secondary_text(message) response = dialog.run() if response == Gtk.ResponseType.OK: if target == "servers": f = open("%s/%s" % (WORKFOLDER, filename), "w") f.close() myconnector.ui.viewStatus( self.statusbar, _("Done, the changes will take effect after the restart..." )) log.info(_("Autofill data is cleared.")) if target == "connections": os.system("rm -f %s/*.myc" % WORKFOLDER) myconnector.ui.Gui.setSavesToListstore(self.main_window) dialog.destroy()
def enable_from_cli_myc(): user = check_user_from_cli() file = _config["kiosk"].get("file", "") error = False if file: result = myc_save(user, file) if result: print("%s: %s" % (_("Config error"), result)) error = True else: print("%s: %s" % (_("Config error"), _("No connection file specified!"))) error = True if error: disable_kiosk() kiosk_disabled() exit(1) print("%s: %s" % (_("KIOSK the filemode enabled! File"), file)) kiosk_status()
def passwd(server, username): """Authentication window""" from myconnector.passwd import PasswdDialog dialog = PasswdDialog(username) username, password, save = dialog.run() if password == False: options.log.info(_("The connection was canceled by the user!")) else: if save and password: keyring.set_password(str(server), str(username), str(password)) return (username, password)
def start(self, args): if type(args) == str: addr = args else: addr = args["server"] if not addr.find("://") != -1: addr = "http://" + addr command = 'xdg-open "' + addr + '"' options.log.info("WWW: %s %s", _("Opening a web resource"), addr) options.log.info(command) os.system(command + STD_TO_LOG)
def start(self, args): if vmwareCheck(): if type(args) == str: command = 'vmware-view -q -s ' + args options.log.info("VMware: %s %s", _("Connecting to the server"), args) options.log.info(command) else: command = 'vmware-view -q -s %s' % args["server"] if args.get("username", ""): command += " -u %s" % args["username"] if args.get("domain", ""): command += " -d %s" % args["domain"] if args.get("fullscreen", "False") == "True": command += " --fullscreen" options.log.info("VMware: %s %s", _("Connecting to the server"), args["server"]) options.log.info(command) if args.get("passwd", ""): command += " -p %s" % escape(args["passwd"]) os.system(command + STD_TO_LOG) else: options.msg_error("VMware Horizon Client %s!" % _("not installed"), options.log.warning)
def start(self, args): if type(args) == str: addr = args else: addr = args["server"] if citrixCheck(): options.log.info("Citrix: %s %s", _("Connecting to the server"), addr) os.system("/opt/Citrix/ICAClient/util/storebrowse --addstore " + addr + STD_TO_LOG.replace("&", "")) os.system( '/opt/Citrix/ICAClient/selfservice --icaroot /opt/Citrix/ICAClient' + STD_TO_LOG) else: _missCitrix()
def __init__( self, username ): Gtk.Window.__init__( self, title = _("Authentication...") ) builder = Gtk.Builder() self.set_resizable( False ) self.set_modal( True ) builder.set_translation_domain( APP ) self.set_default_icon_name( APP ) builder.add_from_file( "%s/passwd.ui" % UIFOLDER ) builder.connect_signals(self) main_box = builder.get_object( "main_box" ) self.entry_passwd = builder.get_object( "entry_passwd" ) self.check_passwd = builder.get_object( "check_passwd" ) self.entry_username = builder.get_object( "entry_username" ) self.add( main_box ) self.entry_username.set_text( username ) if username: self.entry_passwd.grab_focus() else: self.entry_username.grab_focus() self.connect( "delete-event", self.onCancel ) self.username = "" self.passwd = False self.save = False self.show_all()
def __init__(self, mainWindow): Gtk.Window.__init__(self, title=_("MyConnector Preferences")) builder = Gtk.Builder() self.main_window = mainWindow self.labelRDP = mainWindow.labelRDP self.labelVNC = mainWindow.labelVNC self.conn_note = mainWindow.conn_note self.combo_protocols = mainWindow.combo_protocols self.labelFS = mainWindow.labelFS self.set_position(Gtk.WindowPosition.CENTER) self.set_resizable(False) self.set_modal(True) self.set_default_icon_name(APP) builder.set_translation_domain(APP) builder.add_from_file("%s/preferences.ui" % UIFOLDER) builder.connect_signals(self) box = builder.get_object("box_properties") cancel = builder.get_object("button_cancel") self.changeRdpRem = builder.get_object("radio_RDP_remmina") self.changeVncRem = builder.get_object("radio_VNC_remmina") self.statusbar = builder.get_object("statusbar") self.combo_tabs = builder.get_object("combo_tabs") self.changeRdpFree = builder.get_object("radio_RDP_freeRDP") self.changeVncView = builder.get_object("radio_VNC_viewer") self.entryFS = builder.get_object("entry_FS") self.checkTray = builder.get_object("check_TRAY") self.checkVersion = builder.get_object("check_VERSION") self.checkLog = builder.get_object("check_LOG") self.checkPasswd = builder.get_object("check_PASSWD") self.combo_sort = builder.get_object("combo_sort") self.editor = builder.get_object("entry_editor") self.initParameters() self.add(box) self.connect("delete-event", self.onClose) cancel.connect("clicked", self.onCancel, self) self.show_all()
def rdp_import(filename): """Get parameters from RDP file""" tmpconf = "/tmp/%s" % basename(filename) tmpfile = open(tmpconf, "w") print("[rdp]", file=tmpfile) with open(filename, "r", errors="ignore") as f: text = f.read().replace("\x00", "").replace("\n\n", "\n") print(sub(":.*:", "=", text), file=tmpfile) tmpfile.close() conf = ConfigParser(interpolation=None) try: conf.read(tmpconf) try: config = conf["rdp"] except KeyError: options.log.exception( "%s \"%s\" %s [rdp]." % (_("File"), filename, _("does not contain a section"))) return None config["program"] = "freerdp" config["protocol"] = "RDP" config["fullscreen"] = "True" config["desktop"] = config[ "downloads"] = config["documents"] = "True" if config.get( "drivestoredirect", "") else "False" config["username"] = config.get("username", "").replace("\\", "\\\\") config["server"] = config.get("full address", "") config["gserver"] = config.get("gatewayhostname", "") config["color"] = config.get("session bpp", "") config["gserver"] = config.get("gatewayhostname", "") config["usb"] = "True" if config.get("devicestoredirect", "") else "False" config["sound"] = "True" if config.get("audiomode", "2") == "0" else "False" config["printers"] = "True" if config.getboolean( "redirectprinters") else "False" config["smartcards"] = "True" if config.getboolean( "redirectsmartcards") else "False" config["clipboard"] = "True" if config.getboolean( "redirectclipboard") else "False" config["reconnect"] = "True" if config.getboolean( "autoreconnection enabled") else "False" config["microphone"] = "True" if config.getboolean( "audiocapturemode") else "False" config["multimon"] = "True" if config.getboolean( "use multimon") else "False" config["fonts"] = "True" if config.getboolean( "allow font smoothing") else "False" config["aero"] = "True" if config.getboolean( "allow desktop composition") else "False" config["theme"] = "True" if config.getboolean( "disable themes") else "False" config["wallpapers"] = "True" if config.getboolean( "disable wallpaper") else "False" config["drag"] = "False" if config.getboolean( "disable full window drag") else "True" config["animation"] = "False" if config.getboolean( "disable menu anims") else "True" return config except ParsingError: options.log.exception("%s \"%s\" %s." % (_("File"), filename, _("contains errors"))) return None
def ctor_import(filename): """Get parameters from ctor (old format) file""" try: with open(filename, "rb") as ctorfile: params_from_ctor = load(ctorfile) except FileNotFoundError as e: print("%s. %s" % (_("Import error"), e)) exit(1) except: print("%s. %s?" % (_("Import error"), _("Is this Connector's file"))) exit(1) protocol = params_from_ctor[0] params_to_myc = {} params_to_myc["protocol"] = protocol params_to_myc["server"] = params_from_ctor[1] if protocol == "VNC": if len(params_from_ctor) == 4: params_to_myc["program"] = "vncviewer" params_to_myc["fullscreen"] = bool(params_from_ctor[2]) params_to_myc["viewonly"] = bool(params_from_ctor[3]) else: params_to_myc["program"] = "remmina" params_to_myc["username"] = params_from_ctor[2] params_to_myc["quality"] = params_from_ctor[3] params_to_myc["colordepth"] = params_from_ctor[4] params_to_myc["viewmode"] = params_from_ctor[5] params_to_myc["viewonly"] = params_from_ctor[6] params_to_myc["disableencryption"] = params_from_ctor[7] params_to_myc["disableclipboard"] = params_from_ctor[8] params_to_myc["showcursor"] = params_from_ctor[9] if protocol == "RDP": if len(params_from_ctor) == 13: params_to_myc["program"] = "remmina" params_to_myc["username"] = params_from_ctor[2] params_to_myc["domain"] = params_from_ctor[3] params_to_myc["colordepth"] = params_from_ctor[4] params_to_myc["quality"] = params_from_ctor[5] params_to_myc["resolution"] = params_from_ctor[6] params_to_myc["viewmode"] = params_from_ctor[7] params_to_myc["sharefolder"] = params_from_ctor[8] params_to_myc["shareprinter"] = params_from_ctor[9] params_to_myc["disableclipboard"] = params_from_ctor[10] params_to_myc["sound"] = params_from_ctor[11] params_to_myc["sharesmartcard"] = params_from_ctor[12] else: params_to_myc["program"] = "freerdp" params_to_myc["username"] = params_from_ctor[2] params_to_myc["domain"] = params_from_ctor[3] params_to_myc["fullscreen"] = bool(params_from_ctor[4]) params_to_myc["clipboard"] = bool(params_from_ctor[5]) params_to_myc["resolution"] = params_from_ctor[6] params_to_myc["color"] = params_from_ctor[7] params_to_myc["folder"] = params_from_ctor[8] params_to_myc["gserver"] = params_from_ctor[9] params_to_myc["guser"] = params_from_ctor[10] params_to_myc["gdomain"] = params_from_ctor[11] params_to_myc["gpasswd"] = params_from_ctor[12] params_to_myc["admin"] = bool(params_from_ctor[13]) params_to_myc["smartcards"] = bool(params_from_ctor[14]) params_to_myc["printers"] = bool(params_from_ctor[15]) params_to_myc["sound"] = bool(params_from_ctor[16]) params_to_myc["microphone"] = bool(params_from_ctor[17]) params_to_myc["multimon"] = bool(params_from_ctor[18]) params_to_myc["compression"] = bool(params_from_ctor[19]) params_to_myc["compr_level"] = str(params_from_ctor[20]) params_to_myc["fonts"] = bool(params_from_ctor[21]) params_to_myc["aero"] = bool(params_from_ctor[22]) params_to_myc["drag"] = bool(params_from_ctor[23]) params_to_myc["animation"] = bool(params_from_ctor[24]) params_to_myc["theme"] = bool(params_from_ctor[25]) params_to_myc["wallpapers"] = bool(params_from_ctor[26]) params_to_myc["nsc"] = bool(params_from_ctor[27]) params_to_myc["jpeg"] = bool(params_from_ctor[28]) params_to_myc["jpeg_quality"] = str(params_from_ctor[29]) params_to_myc["usb"] = bool(params_from_ctor[30]) params_to_myc["disable_nla"] = bool(params_from_ctor[31]) try: params_to_myc["workarea"] = bool(params_from_ctor[32]) except IndexError: pass try: params_to_myc["span"] = bool(params_from_ctor[33]) except IndexError: pass try: params_to_myc["desktop"] = bool(params_from_ctor[34]) params_to_myc["downloads"] = bool(params_from_ctor[35]) params_to_myc["documents"] = bool(params_from_ctor[36]) except IndexError: pass try: params_to_myc["gdi"] = bool(params_from_ctor[37]) except IndexError: pass try: params_to_myc["reconnect"] = bool(params_from_ctor[38]) params_to_myc["certignore"] = bool(params_from_ctor[39]) except IndexError: pass try: params_to_myc["glyph"] = bool(params_from_ctor[42]) except IndexError: pass try: params_to_myc["userparams"] = params_from_ctor[43] except IndexError: pass if protocol == "NX": params_to_myc["username"] = params_from_ctor[2] params_to_myc["quality"] = params_from_ctor[3] params_to_myc["resolution"] = params_from_ctor[4] params_to_myc["viewmode"] = params_from_ctor[5] params_to_myc["nx_privatekey"] = params_from_ctor[6] params_to_myc["disableencryption"] = params_from_ctor[7] params_to_myc["disableclipboard"] = params_from_ctor[8] params_to_myc["exec"] = params_from_ctor[9] if protocol == "XDMCP": params_to_myc["colordepth"] = params_from_ctor[2] params_to_myc["viewmode"] = params_from_ctor[3] params_to_myc["resolution"] = params_from_ctor[4] params_to_myc["once"] = params_from_ctor[5] params_to_myc["showcursor"] = params_from_ctor[6] params_to_myc["exec"] = params_from_ctor[7] if protocol == "SPICE": params_to_myc["usetls"] = params_from_ctor[2] params_to_myc["viewonly"] = params_from_ctor[3] params_to_myc["resizeguest"] = params_from_ctor[4] params_to_myc["disableclipboard"] = params_from_ctor[5] params_to_myc["sharesmartcard"] = params_from_ctor[6] params_to_myc["enableaudio"] = params_from_ctor[7] params_to_myc["cacert"] = params_from_ctor[8] if protocol == "SSH": params_to_myc["username"] = params_from_ctor[2] params_to_myc["ssh_auth"] = params_from_ctor[3] params_to_myc["ssh_privatekey"] = params_from_ctor[4] params_to_myc["ssh_charset"] = params_from_ctor[5] params_to_myc["exec"] = params_from_ctor[6] if protocol == "SFTP": params_to_myc["username"] = params_from_ctor[2] params_to_myc["ssh_auth"] = params_from_ctor[3] params_to_myc["ssh_privatekey"] = params_from_ctor[4] params_to_myc["ssh_charset"] = params_from_ctor[5] params_to_myc["execpath"] = params_from_ctor[6] if protocol == "FS": params_to_myc["user"] = params_from_ctor[2] params_to_myc["domain"] = params_from_ctor[3] params_to_myc["folder"] = params_from_ctor[4] params_to_myc["type"] = params_from_ctor[5] if protocol == "VMWARE": params_to_myc["username"] = params_from_ctor[2] params_to_myc["domain"] = params_from_ctor[3] params_to_myc["passwd"] = params_from_ctor[4] params_to_myc["fullscreen"] = params_from_ctor[5] conf = ConfigParser(interpolation=None) conf["myconnector"] = params_to_myc return conf["myconnector"]
# 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/. from argparse import (ArgumentParser, RawTextHelpFormatter) from configparser import (ConfigParser, ParsingError) from myconnector.connector import options from os.path import basename from re import sub from pickle import load from myconnector.config import (CONFIGS, _) _version = "0.1" _info = _( "Converter from .ctor (outdated format Connector) to new .myc (MyConnector)" ) def rdp_import(filename): """Get parameters from RDP file""" tmpconf = "/tmp/%s" % basename(filename) tmpfile = open(tmpconf, "w") print("[rdp]", file=tmpfile) with open(filename, "r", errors="ignore") as f: text = f.read().replace("\x00", "").replace("\n\n", "\n") print(sub(":.*:", "=", text), file=tmpfile) tmpfile.close() conf = ConfigParser(interpolation=None) try: conf.read(tmpconf)
def CLI(option): """KIOSK mode control""" if not os.path.exists("/etc/altlinux-release"): print(_("Unsupported OS! Need ALT!")) exit(1) if option in ("disable", "status", "enable", "edit"): if os.getuid() == 0: if option == "disable": disable_kiosk() kiosk_disabled() exit(0) if option == "status": _config.read(_kiosk_conf) try: mode = _config.get("kiosk", "mode") except (NoOptionError, NoSectionError) as e: print("%s: %s." % (_("Error"), e)) print("%s\n%s:" % (_("The default settings are set."), _("Config does not exists or contains errors"))) config_init(True) mode = "0" if mode == "0": print("%s: %s\n----------------" % (_("Status"), _("disabled"))) else: print("%s: %s\n---------------" % (_("Status"), _("enabled"))) print("%s %s:" % (_("KIOSK config file"), _kiosk_conf)) os.system("cat %s" % _kiosk_conf) exit(0) if option == "enable": disable_kiosk(False) _config.read(_kiosk_conf) try: mode = _config.get("kiosk", "mode") except NoSectionError: config_init(True) finally: _config["kiosk"]["mode"] = "1" enable_from_cli() with open(_kiosk_conf, 'w') as configfile: _config.write(configfile) exit(0) if option == "edit": editor = os.getenv("EDITOR") if not editor: editor = os.getenv("VISUAL") if not editor: editor = "vi" call([editor, _kiosk_conf]) _config.read(_kiosk_conf) disable_kiosk(False) try: mode = _config["kiosk"].get("mode", "0") except KeyError: print("%s %s" % (_("Config contains errors."), _("The default settings are set."))) config_init(True) kiosk_disabled() exit(1) if mode == "0": kiosk_disabled() exit(0) if mode == "1": enable_from_cli() exit(0) if mode == "2": enable_from_cli_myc() exit(0) if mode == "3": enable_from_cli_web() exit(0) else: print(_("Permission denied!")) exit(126) if option == "help": print("""myconnector --kiosk - %s %s: myconnector --kiosk <option> %s: enable %s; edit %s %s: vi); disable %s; status %s; help %s. %s: man myconnector-kiosk Copyright (C) 2014-2021 Evgeniy Korneechev <*****@*****.**>""" % ( _("KIOSK mode control"), _("Usage"), _("Options"), _("enable the standalone mode"), _("edit config file for enable/disable the mode (will use"), _("any the editor defines by VISUAL or EDITOR, default"), _("disable the mode"), _("display current status of the mode"), _("show this help message and exit"), _("See also"), )) exit(0) else: print("myconnector --kiosk: %s: %s" % (_("invalid command"), option)) print("%s 'myconnector --kiosk help' %s." % (_("Try"), _("for more information"))) exit(1)
def enable_from_cli(): check_user_from_cli() enable_kiosk() fix_shortcut("kiosk", "$MYC", "") print(_("KIOSK standalone mode enabled!")) kiosk_status()