Esempio n. 1
0
 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()
Esempio n. 2
0
 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()
Esempio n. 3
0
 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)
Esempio n. 4
0
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))
Esempio n. 5
0
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.")))
Esempio n. 6
0
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)
Esempio n. 7
0
 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)
Esempio n. 8
0
 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)
Esempio n. 9
0
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
Esempio n. 10
0
 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))
Esempio n. 11
0
 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()
Esempio n. 12
0
 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()
Esempio n. 13
0
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()
Esempio n. 14
0
 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()
Esempio n. 15
0
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))
Esempio n. 16
0
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
Esempio n. 17
0
 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)
Esempio n. 18
0
 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()
Esempio n. 19
0
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()
Esempio n. 20
0
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)
Esempio n. 21
0
 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)
Esempio n. 22
0
 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)
Esempio n. 23
0
 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()
Esempio n. 24
0
 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()
Esempio n. 25
0
 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()
Esempio n. 26
0
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
Esempio n. 27
0
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"]
Esempio n. 28
0
# 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)
Esempio n. 29
0
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)
Esempio n. 30
0
def enable_from_cli():
    check_user_from_cli()
    enable_kiosk()
    fix_shortcut("kiosk", "$MYC", "")
    print(_("KIOSK standalone mode enabled!"))
    kiosk_status()