60 lines
1.8 KiB
Go
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())
|
|
}
|