This commit is contained in:
redlineo committed 2026-07-22 14:14:53 +03:00
commit 23c7133fa9
33 files changed
+2896

No files matched your search

+72
View File
@@ -0,0 +1,72 @@
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)
}