def action_export_repository(self, widget):
        """Create a new unverified group"""
        smodel, siter = self.widgets['groups_tree'].get_selection(
        ).get_selected()
        if not siter:
            return

        if self.imported_groups or self.groups_changed:
            if askyesno(_("Save Changes"),
                        _("Do you want to save your changes?")):
                self.save_groups()

        iter = smodel.convert_iter_to_child_iter(siter)
        model = smodel.get_model()

        if askyesno(
                _("Export Group"),
                _("Are you sure you want to send this group to the repository?"
                  )):
            if upload_group(model.get_value(iter, 0),
                            model.get_value(iter, 1).split('\n')):
                showwarning(_("Exported"),
                            _("Thank you for sending us the group details"))
            else:
                showwarning(_("Error"), _("Please try again"), 4)
Beispiel #2
0
    def delete_user(self, widget):
        (model, node) = self.arw["treeview1"].get_selection().get_selected()
        name = model.get_value(node, 0)
        if model.iter_has_child(node):
            res = askyesno("Remove user",
                           "Do you want to remove category %s?" % name)
        else:
            res = askyesno("Remove user",
                           "Do you want to remove user %s?" % name)
        if res:
            self.users_store.remove(node)

            # User should be removed from the maclist too
            if name in self.controller.maclist:
                del self.controller.maclist[name]

            # Remove user from the filter_store
            for item in self.controller.filter_store:
                users = (item[5] or '').split('\n')
                try:
                    users.remove(name)
                except ValueError:
                    continue
                self.controller.filter_store.set_value(item.iter, 5,
                                                       '\n'.join(users))

            # Refresh the proxy users list
            self.controller.filter_rules.update_filter_user_list()
Beispiel #3
0
 def proxy_group_remove_item(self, widget):
     """When right clicked, Remove the selected item from the list"""
     model, iter = self.arw['proxy_group_domain_tree'].get_selection().get_selected()
     if not iter:
         return
     domain = model.get_value(iter, 0)
     if askyesno(_("Remove domain?"), _("Remove domain: %s") % domain):
         model.remove(iter)
 def delete_item(self, widget):
     """Delete an entry"""
     model, iter = self.widgets['groups_tree'].get_selection().get_selected(
     )
     name = model.get_value(iter, 0)
     if askyesno(_("Delete Group"), _("Do you want to delete %s?" % name)):
         iter = model.convert_iter_to_child_iter(iter)
         model.get_model().remove(iter)
         self.groups_changed = True
    def profile_delete_selected(self, widget):
        """Delete an existing configuration"""

        model, selected_iter = self.arw['profiles_tree'].get_selection(
        ).get_selected()

        if askyesno(
                "Delete Profile", "Really delete %s?" %
                model.get_value(selected_iter, COLUMN_NAME)):
            model.remove(selected_iter)
Beispiel #6
0
    def ports_delete_group(self, widget):
        """Delete the selected ports group"""
        model, iter = self.arw['ports_tree'].get_selection().get_selected()
        name = model.get_value(iter, 0)

        if not askyesno(_('Delete %s') % name, _('Are you sure you want to delete port group?')):
            return

        model, iter = self.arw['ports_tree'].get_selection().get_selected()
        iter = model.convert_iter_to_child_iter(iter)
        model = model.get_model()
        model.remove(iter)
Beispiel #7
0
 def load_defaults(self, widget=None):
     response = askyesno(
         _("No user data"),
         _("There is no user data present. \nDo you want to create standard categories ?"
           ))
     if response == 1:
         if os.path.isfile("./idefix-default.json"):
             data_str = open("./idefix-default.json", "r").read()
             self.config = json.loads(data_str,
                                      object_pairs_hook=OrderedDict)
             self.update_gui()
             self.set_colors()
    def check_date(self):
        """Test if idefix date is out and if it is then update it"""

        data = self.get_infos('infos_system')
        if not data:
            return

        local_tz = tzlocal.get_localzone()

        try:
            lines = data.decode('cp860').split('\n')
            timestamp, idefix_tz = lines[0:2]
            idefix_date = datetime.datetime.fromtimestamp(
                int(timestamp), tz=pytz.timezone(idefix_tz))
        except:
            print(
                "Confix cannot check the date of Idefix. Perhaps a too old version of trigger.py"
            )
            return

        now = datetime.datetime.now(tz=local_tz)

        if not dateutil.utils.within_delta(now, idefix_date, DATE_THRESHOLD):
            # The time is over six hours out, ask the user if we should change time
            answer = askyesno(
                _("Idefix date/time might be incorrect"),
                _("The time set on your Idefix is: %s\nYour computer's time is %s.\n\nUpdate the idefix time?"
                  ) % (idefix_date.strftime('%X %x %Z'),
                       now.astimezone().strftime('%X %x %Z')))
            if answer:
                self.set_date()
        elif idefix_tz != local_tz.zone:
            # Check if the timezone between the two are different
            answer = askyesno(
                _("Idefix timezone different"),
                _("The timezone on your idefix does not match your system timezone. \nIdefix: %s\nComputer: %s\n\n"
                  + "Update the timezone?") % (idefix_tz, local_tz.zone))
            if answer:
                self.set_date()
    def action_import_groups(self, widget):
        """Imports groups from a json file, first adds them into the tree view for later merging/replacing"""
        if self.groups_changed:
            if askyesno(_("Save Changes"),
                        _("Do you want to save your changes?")):
                self.save_groups()

        self.groups_changed = False

        dialog = Gtk.FileChooserDialog(
            _("Import File"),
            self.widgets['groups_window'],
            Gtk.FileChooserAction.OPEN,
            (_("Import"), Gtk.ResponseType.ACCEPT),
        )
        file_filter = Gtk.FileFilter()
        file_filter.add_pattern('*.json')
        file_filter.add_pattern('*.txt')
        dialog.set_filter(file_filter)

        self.buffer = Gtk.TextBuffer()
        self.widgets['groups_view'].set_buffer(self.buffer)
        self.groups_store.clear()
        dialog.show_all()
        response = dialog.run()
        if response == Gtk.ResponseType.ACCEPT:
            with open(dialog.get_filename(),
                      'r',
                      encoding='utf-8-sig',
                      newline='\n') as f:
                if dialog.get_filename().lower().endswith('txt'):
                    # Load the simple group format
                    path, ext = os.path.splitext(dialog.get_filename())
                    data = {
                        'groups': [{
                            'group':
                            os.path.basename(path).title(),
                            'group_id':
                            '',
                            'dest':
                            [line.strip() for line in f.read().split('\n')]
                        }]
                    }
                else:
                    data = json.load(f, object_pairs_hook=OrderedDict)

            self.read_config_data(data)
            self.imported_groups = True

        dialog.destroy()
Beispiel #10
0
    def delete_proxy_group(self, widget):
        model, iter = self.arw['proxy_group'].get_selection().get_selected()
        name = model.get_value(iter, 0).strip()

        names = self.controller.filter_rules.current_store.get_value(self.controller.iter_filter, 7).split('\n')
        if name not in names or name == 'any':
            return

        res = askyesno("Remove group", "Do you want to remove group %s?" % name)
        if not res:
            return

        names.remove(name)

        self.controller.filter_rules.current_store.set_value(self.controller.iter_filter, 7, '\n'.join(names))
        self.update_proxy_group_list()
    def action_edit_groups(self, widget):
        """Show the groups in the tree view to allow the user to edit """
        if self.imported_groups or self.groups_changed:
            if askyesno(_("Save Changes"),
                        _("Do you want to save your changes?")):
                self.save_groups()

        self.imported_groups = False
        self.groups_changed = False

        self.widgets['add_group_menu'].show()

        self.groups_store.clear()
        self.buffer = Gtk.TextBuffer()
        self.widgets['groups_view'].set_buffer(self.buffer)
        for row in self.controller.groups_store:
            self.groups_store.append((row[0], row[1]))
Beispiel #12
0
    def open_connexion_profile(self, configname=""):

        print("open connexion profile")
        self.mymac = None
        self.arw['loading_window'].show()
        while Gtk.events_pending():
            Gtk.main_iteration()
        # ftp connect
        ftp1 = self.ftp_config
        self.ftp = ftp_connect(ftp1["server"], ftp1["login"], ftp1["pass"],
                               self)
        self.arw['loading_window'].hide()

        if not self.ftp:
            # alert(_("Could not connect to %s (%s). \nVerify your cables or your configuration.") % (ftp1["server"], configname))
            return False
        else:
            # retrieve files by ftp
            data0 = ftp_get(self.ftp, "idefix.json", json=True)
            self.active_config_text = data0
            if data0:
                try:
                    self.config = json.loads(data0,
                                             object_pairs_hook=OrderedDict)
                    self.update()
                    self.update_gui()
                except:
                    # Try load a backup configuration
                    if askyesno(
                            _("Corrupted Configuration"),
                            _('Your configuration is corrupted. Search for backup?'
                              )):
                        return self.find_good_backup()
                    else:
                        self.config = OrderedDict()
                        self.load_defaults()
                self.ftp.close()
            else:
                self.load_defaults()

            if self.load_connection():
                return True
Beispiel #13
0
    def delete_verified(self, widget):
        """Delete a verified group"""

        model, iter = self.widgets['verified_treeview'].get_selection().get_selected()
        if not iter:
            return
        iter = model.convert_iter_to_child_iter(iter)
        if not iter:
            return
        model = model.get_model()

        if model.get_value(iter, COLUMN_TYPE) == TYPE_CATEGORY:
            return

        name = model.get_value(iter, COLUMN_NAME)

        if askyesno("Delete Verified Group", "Delete %s?" % name):
            self.database.delete_group(int(model.get_value(iter, COLUMN_ID)))
            self.refresh_database()
            self.verified_dirty = False
Beispiel #14
0
    def delete_filter_user(self, widget):
        model, iter = self.arw['filter_users'].get_selection().get_selected()
        name = model.get_value(iter, 0).strip()

        value = self.current_store.get_value(self.controller.iter_filter, 5)
        if not value:
            names = []
        else:
            names = value.split('\n')
        if name not in names:
            return

        res = askyesno(_("Remove user"),
                       _("Do you want to remove user %s?") % name)
        if not res:
            return

        names.remove(name)

        self.current_store.set_value(self.controller.iter_filter, 5,
                                     '\n'.join(names))
        self.update_filter_user_list()
Beispiel #15
0
 def delete_user3(self, widget):
     (model, node) = self.arw["treeview2"].get_selection().get_selected()
     name = model.get_value(node, 0)
     if askyesno("Remove rule", "Do you want to remove %s?" % name):
         self.firewall_store.remove(node)
Beispiel #16
0
 def ask_verified_save_changes(self):
     """Asks the user if they want to save their changes"""
     if self.verified_dirty:
         return askyesno("Save Changes?", "Do you want to save your changes first?")
Beispiel #17
0
 def delete_rule(self, widget):
     (model, node) = self.arw["treeview3"].get_selection().get_selected()
     name = model.get_value(node, 0)
     if askyesno("Remove filter rule", "Do you want to remove %s?" % name):
         self.current_store.remove(node)
    def action_import_repository(self, widget):
        if self.imported_groups or self.groups_changed:
            if askyesno(_("Save Changes"),
                        _("Do you want to save your changes?")):
                self.save_groups()

        self.imported_groups = False
        self.groups_changed = False

        self.widgets['add_group_menu'].hide()

        # Get the categories from the server
        data = fetch_repository_categories()
        if not data:
            showwarning(_("Repository"), _("Could not get files from server"))
            return

        self._cached_categories = {}
        self._cached_groups = {}
        self._cached_groups_by_category_id = {}

        self.group_results = []
        self.categories_in_results = []

        self.widgets['repository_store'].clear()

        category_iters = {None: None}

        # Always make sure parent id is at the top
        data.sort(key=lambda x: x['parent_id'] is None, reverse=True)

        for category in data:
            self._cached_categories[int(category['id'])] = category
            category_id = int(category['id'])

            if category.get('parent_id'):
                parent_id = int(category['parent_id'])
            else:
                parent_id = None

            category_iters[category_id] = iter = self.widgets[
                'repository_store'].append(category_iters.get(parent_id))
            self.widgets['repository_store'].set_value(iter,
                                                       IMPORT_COLUMN_NAME,
                                                       category['name'])
            self.widgets['repository_store'].set_value(iter, IMPORT_COLUMN_ID,
                                                       category_id)
            self.widgets['repository_store'].set_value(
                iter, IMPORT_COLUMN_PARENT_ID, parent_id)
            self.widgets['repository_store'].set_value(iter,
                                                       IMPORT_COLUMN_TYPE,
                                                       CATEGORY_TYPE)
            self.widgets['repository_store'].set_value(iter,
                                                       IMPORT_COLUMN_CATEGORY,
                                                       True)
            self._cached_categories[int(
                category['id']
            )]['path'] = self.widgets['repository_store'].get_path(iter)

        for group in search_repository_groups():
            self.add_group_to_store(group)

        self.widgets['import_window'].show_all()