114 lines
3.2 KiB
Go
114 lines
3.2 KiB
Go
// добавить генерацию файлов с правилами в архив, добавить номера строк, что бы хоть как то ориентироваться и в жопу это
|
||
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
|
||
}
|