73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package ui
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
|
|
"ssh-access-tui/internal/audit"
|
|
)
|
|
|
|
func (m *Model) refreshAudit() {
|
|
st := m.loadState()
|
|
managed := map[string]bool{}
|
|
for _, u := range st.Users {
|
|
managed[u.Username] = true
|
|
}
|
|
sessions, err := audit.ListOnline(managed)
|
|
if err != nil {
|
|
m.err = err.Error()
|
|
}
|
|
m.onlineSessions = sessions
|
|
|
|
events, err := audit.ReadRecent(m.cfg.AuditLog, 25)
|
|
if err != nil {
|
|
m.err = err.Error()
|
|
}
|
|
m.recentEvents = events
|
|
}
|
|
|
|
func (m Model) updateAudit(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
if key, ok := msg.(tea.KeyMsg); ok {
|
|
switch key.String() {
|
|
case "esc":
|
|
m.screen = scrMenu
|
|
m.err, m.status = "", ""
|
|
return m, nil
|
|
case "r":
|
|
m.refreshAudit()
|
|
return m, nil
|
|
}
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
func (m Model) viewAudit() string {
|
|
body := "Сейчас в сети (сессии с активным sshd-процессом):\n\n"
|
|
if len(m.onlineSessions) == 0 {
|
|
body += " (никого)\n"
|
|
}
|
|
for _, s := range m.onlineSessions {
|
|
body += fmt.Sprintf(" %-16s pid=%-8d в сети %s\n", s.User, s.PID, s.Elapsed)
|
|
}
|
|
|
|
body += "\nПоследние события (журнал подключений):\n\n"
|
|
if len(m.recentEvents) == 0 {
|
|
body += " (пока пусто — фоновый сборщик журнала ещё не запущен или не было событий)\n"
|
|
}
|
|
for i := len(m.recentEvents) - 1; i >= 0; i-- {
|
|
e := m.recentEvents[i]
|
|
line := fmt.Sprintf(" %s %-10s %-16s", e.Time.Local().Format("2006-01-02 15:04:05"), e.Action, e.User)
|
|
if e.SrcIP != "" {
|
|
line += " from " + e.SrcIP
|
|
}
|
|
if e.Detail != "" {
|
|
line += " " + e.Detail
|
|
}
|
|
body += line + "\n"
|
|
}
|
|
|
|
body += "\n[r] обновить [esc] назад"
|
|
return borderStyle.Render(body)
|
|
}
|