This commit is contained in:
2026-04-04 00:09:02 +08:00
commit 38e896363e
117 changed files with 119311 additions and 0 deletions

View File

@@ -0,0 +1,113 @@
// добавить генерацию файлов с правилами в архив, добавить номера строк, что бы хоть как то ориентироваться и в жопу это
package main
import (
"fmt"
"strings"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
// widget.NewLabel(fmt.Sprintf("UFW\t%s\nNftables\t%s\nFirewalld\t%s\nIptables\t%s", server.Firewalls.Ufw, server.Firewalls.Nftables, server.Firewalls.Firewalld, server.Firewalls.Iptables))
func createFirewallTab(server outputStruct) *container.AppTabs {
firewallTabs := container.NewAppTabs()
firewallTabs.Append(container.NewTabItem("список фаерволов", createFirewallListTab(server)))
firewallTabs.Append(container.NewTabItem("nft list ruleset", createNftListRuleset(server)))
return firewallTabs
}
func createFirewallListTab(server outputStruct) *fyne.Container {
firewalls := ""
if server.Firewalls.Firewalld != "" {
firewalls = firewalls + "firewalld"
}
if server.Firewalls.Nftables != "" {
firewalls = firewalls + ", nftables"
}
if server.Firewalls.Ufw != "" {
firewalls = firewalls + ", ufw"
}
tab := container.NewBorder(
container.NewVBox(
widget.NewSeparator(),
widget.NewLabel(fmt.Sprintf("Активные службы фаерволов: %s", firewalls)),
), nil, nil, nil,
)
return tab
}
func createNftListRuleset(server outputStruct) *fyne.Container {
searchEntry := widget.NewEntry()
searchEntry.SetPlaceHolder("Поиск ...")
filteredEntries := server.NftRuleset.Lines
list := widget.NewList(
func() int {
return len(filteredEntries)
},
func() fyne.CanvasObject {
return container.NewVBox(
widget.NewLabel("fileName"),
)
},
func(id widget.ListItemID, obj fyne.CanvasObject) {
box := obj.(*fyne.Container)
e := filteredEntries[id]
fileName := box.Objects[0].(*widget.Label)
fileName.SetText(e)
fileName.Selectable = true
},
)
searchEntry.OnChanged = func(text string) {
if text == "" {
filteredEntries = server.NftRuleset.Lines
} else {
var filtered []string
lText := strings.ToLower(text)
for _, elem := range server.NftRuleset.Lines {
if strings.Contains(strings.ToLower(elem), lText) {
filtered = append(filtered, elem)
}
}
filteredEntries = filtered
}
list.Refresh()
}
// searchEntry.OnChanged = func(text string) {
// if text == "" {
// // Если поиск пустой - сбрасываем выделение
// list.UnselectAll()
// return
// }
// lText := strings.ToLower(text)
// // Ищем первое вхождение
// for index, elem := range server.NftRuleset.Lines {
// if strings.Contains(strings.ToLower(elem), lText) {
// // Выделяем найденный элемент
// list.Select(index)
// // Прокручиваем к нему
// list.ScrollTo(index)
// return
// }
// }
// // Если ничего не найдено - сбрасываем выделение
// list.UnselectAll()
// }
tab := container.NewBorder(
container.NewVBox(
searchEntry,
widget.NewSeparator(),
), nil, nil, nil,
container.NewScroll(list),
)
return tab
}