Files
ssh-access-tui/internal/ui/menu.go
T
2026-07-22 14:14:53 +03:00

60 lines
1.8 KiB
Go

package ui
import (
"github.com/charmbracelet/bubbles/list"
tea "github.com/charmbracelet/bubbletea"
)
func newMenuList() list.Model {
items := []list.Item{
simpleItem{id: "users", title: "Пользователи", desc: "Создать, заблокировать, удалить учётные записи"},
simpleItem{id: "groups", title: "Группы и хосты", desc: "Кому какие хосты разрешены для прыжка/форвардинга"},
simpleItem{id: "export", title: "Экспорт архивов", desc: "Сгенерировать ключи и .7z архивы для доставки пользователям"},
simpleItem{id: "audit", title: "Аудит / кто в сети", desc: "Активные сессии и журнал подключений"},
simpleItem{id: "quit", title: "Выход", desc: ""},
}
l := list.New(items, list.NewDefaultDelegate(), 0, 0)
l.Title = "ssh-access-tui"
l.SetShowStatusBar(false)
return l
}
func (m Model) updateMenu(msg tea.Msg) (tea.Model, tea.Cmd) {
if key, ok := msg.(tea.KeyMsg); ok {
switch key.String() {
case "enter":
sel, ok := m.menu.SelectedItem().(simpleItem)
if !ok {
return m, nil
}
m.err, m.status = "", ""
switch sel.id {
case "users":
m.screen = scrUsers
m.refreshUsersList()
case "groups":
m.screen = scrGroups
m.refreshGroupsList()
case "export":
m.screen = scrExportSelect
m.initExportSelect()
case "audit":
m.screen = scrAudit
m.refreshAudit()
case "quit":
return m, tea.Quit
}
return m, nil
case "q":
return m, tea.Quit
}
}
var cmd tea.Cmd
m.menu, cmd = m.menu.Update(msg)
return m, cmd
}
func (m Model) viewMenu() string {
return borderStyle.Render(m.menu.View())
}