예제 #1
0
    def rename_host_in_folder_rules(folder):
        rulesets = watolib.FolderRulesets(folder)
        rulesets.load()

        changed_folder_rulesets = []
        for varname, ruleset in rulesets.get_rulesets().items():
            for _rule_folder, _rulenr, rule in ruleset.get_rules():
                orig_rule = rule.clone(preserve_id=True)
                if rule.replace_explicit_host_condition(oldname, newname):
                    changed_folder_rulesets.append(varname)

                    log_audit(
                        "edit-rule",
                        _('Renamed host condition from "%s" to "%s"') % (oldname, newname),
                        diff_text=make_diff_text(orig_rule.to_log(), rule.to_log()),
                        object_ref=rule.object_ref(),
                    )

        if changed_folder_rulesets:
            add_change(
                "edit-ruleset",
                _("Renamed host in %d rulesets of folder %s")
                % (len(changed_folder_rulesets), folder.title()),
                object_ref=folder.object_ref(),
                sites=folder.all_site_ids(),
            )
            rulesets.save()

        changed_rulesets.extend(changed_folder_rulesets)

        for subfolder in folder.subfolders():
            rename_host_in_folder_rules(subfolder)
예제 #2
0
def test_log_audit_with_object_diff(request_context):
    old = {
        "a": "b",
        "b": "c",
    }
    new = {
        "b": "c",
    }

    with on_time("2018-04-15 16:50", "CET"):
        log_audit(
            object_ref=None,
            action="bla",
            message="Message",
            user_id=UserId("calvin"),
            diff_text=make_diff_text(old, new),
        )

    store = AuditLogStore(AuditLogStore.make_path())
    assert store.read() == [
        AuditLogStore.Entry(
            time=1523811000,
            object_ref=None,
            user_id="calvin",
            action="bla",
            text="Message",
            diff_text='Attribute "a" with value "b" removed.',
        ),
    ]
예제 #3
0
def edit_users(changed_users):
    all_users = userdb.load_users(lock=True)
    new_users_info = []
    modified_users_info = []
    for user_id, settings in changed_users.items():
        user_attrs = settings.get("attributes")
        is_new_user = settings.get("is_new_user", True)
        _validate_user_attributes(all_users, user_id, user_attrs, is_new_user=is_new_user)
        if is_new_user:
            new_users_info.append(user_id)
        else:
            modified_users_info.append(user_id)

        if is_new_user:
            add_internal_attributes(user_attrs)

        old_object = make_user_audit_log_object(all_users.get(user_id, {}))
        log_audit(action="edit-user",
                  message=(_("Created new user: %s") %
                           user_id if is_new_user else _("Modified user: %s") % user_id),
                  diff_text=make_diff_text(old_object, make_user_audit_log_object(user_attrs)),
                  object_ref=make_user_object_ref(user_id))

        all_users[user_id] = user_attrs

    if new_users_info:
        add_change("edit-users", _("Created new users: %s") % ", ".join(new_users_info))
    if modified_users_info:
        add_change("edit-users", _("Modified users: %s") % ", ".join(modified_users_info))

    userdb.save_users(all_users)
예제 #4
0
    def clone_rule(self, orig_rule, rule):
        if rule.folder == orig_rule.folder:
            self.insert_rule_after(rule, orig_rule)
        else:
            self.append_rule(rule.folder, rule)

        add_change("new-rule",
                   _("Cloned rule from rule %s in ruleset \"%s\" in folder \"%s\"") %
                   (orig_rule.id, self.title(), rule.folder.alias_path()),
                   sites=rule.folder.all_site_ids(),
                   diff_text=make_diff_text({}, rule.to_web_api()),
                   object_ref=rule.object_ref())
예제 #5
0
    def edit_rule(self, orig_rule, rule):
        folder_rules = self._rules[orig_rule.folder.path()]
        index = folder_rules.index(orig_rule)

        folder_rules[index] = rule

        add_change("edit-rule",
                   _("Changed properties of rule #%d in ruleset \"%s\" in folder \"%s\"") %
                   (index, self.title(), rule.folder.alias_path()),
                   sites=rule.folder.all_site_ids(),
                   diff_text=make_diff_text(orig_rule.to_web_api(), rule.to_web_api()),
                   object_ref=rule.object_ref())
        self._on_change()
예제 #6
0
    def clone_rule(self, orig_rule: Rule, rule: Rule) -> None:
        if rule.folder == orig_rule.folder:
            self.insert_rule_after(rule, orig_rule)
        else:
            self.append_rule(rule.folder, rule)

        add_change(
            "new-rule",
            _('Cloned rule from rule %s in ruleset "%s" in folder "%s"')
            % (orig_rule.id, self.title(), rule.folder.alias_path()),
            sites=rule.folder.all_site_ids(),
            diff_text=make_diff_text({}, rule.to_log()),
            object_ref=rule.object_ref(),
        )
예제 #7
0
    def edit_rule(self, orig_rule: Rule, rule: Rule) -> None:
        folder_rules = self._rules[orig_rule.folder.path()]
        index = folder_rules.index(orig_rule)

        folder_rules[index] = rule

        add_change(
            "edit-rule",
            _('Changed properties of rule #%d in ruleset "%s" in folder "%s"')
            % (index, self.title(), rule.folder.alias_path()),
            sites=rule.folder.all_site_ids(),
            diff_text=make_diff_text(orig_rule.to_log(), rule.to_log()),
            object_ref=rule.object_ref(),
        )
        self._on_change()