101 lines
2.3 KiB
Go
101 lines
2.3 KiB
Go
package tui
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"tailscale-vpn/internal/pages"
|
|
"tailscale-vpn/internal/services"
|
|
|
|
tea "charm.land/bubbletea/v2"
|
|
)
|
|
|
|
func checkVPNStatusCmd(store *services.ServicesStore) tea.Cmd {
|
|
return func() tea.Msg {
|
|
ctx := context.Background()
|
|
connected, err := store.VPN.CheckStatus(ctx)
|
|
return pages.VPNStatusMsg{
|
|
Connected: connected,
|
|
Err: err,
|
|
}
|
|
}
|
|
}
|
|
|
|
func turnOnVPNCmd(store *services.ServicesStore) tea.Cmd {
|
|
return func() tea.Msg {
|
|
ctx := context.Background()
|
|
if err := store.VPN.TurnOn(ctx); err != nil {
|
|
return pages.VPNToggleMsg{
|
|
Connected: false,
|
|
Err: err,
|
|
}
|
|
}
|
|
connected, _ := store.VPN.CheckStatus(ctx)
|
|
return pages.VPNToggleMsg{
|
|
Connected: connected,
|
|
Err: nil,
|
|
}
|
|
}
|
|
}
|
|
|
|
func turnOffVPNCmd(store *services.ServicesStore) tea.Cmd {
|
|
return func() tea.Msg {
|
|
ctx := context.Background()
|
|
if err := store.VPN.TurnOff(ctx); err != nil {
|
|
return pages.VPNToggleMsg{
|
|
Connected: true,
|
|
Err: err,
|
|
}
|
|
}
|
|
connected, _ := store.VPN.CheckStatus(ctx)
|
|
return pages.VPNToggleMsg{
|
|
Connected: connected,
|
|
Err: nil,
|
|
}
|
|
}
|
|
}
|
|
|
|
func loadServersCmd(store *services.ServicesStore) tea.Cmd {
|
|
return func() tea.Msg {
|
|
servers := store.Config.GetServers()
|
|
return pages.ServerListLoadedMsg{
|
|
Servers: servers,
|
|
Err: nil,
|
|
}
|
|
}
|
|
}
|
|
|
|
func addServerCmd(store *services.ServicesStore, name, host string) tea.Cmd {
|
|
return func() tea.Msg {
|
|
err := store.Config.AddServer(name, host)
|
|
return pages.ServerSaveMsg{Err: err}
|
|
}
|
|
}
|
|
|
|
func updateServerCmd(store *services.ServicesStore, id, name, host string) tea.Cmd {
|
|
return func() tea.Msg {
|
|
err := store.Config.UpdateServer(id, name, host)
|
|
return pages.ServerSaveMsg{Err: err}
|
|
}
|
|
}
|
|
|
|
func deleteServerCmd(store *services.ServicesStore, id string) tea.Cmd {
|
|
return func() tea.Msg {
|
|
err := store.Config.RemoveServer(id)
|
|
return pages.ServerDeleteMsg{Err: err}
|
|
}
|
|
}
|
|
|
|
func selectServerCmd(store *services.ServicesStore, serverID string) tea.Cmd {
|
|
return func() tea.Msg {
|
|
err := store.Config.SetSelectedServer(serverID)
|
|
if err != nil {
|
|
return pages.ServerSelectedMsg{Err: err}
|
|
}
|
|
server, ok := store.Config.GetSelectedServer()
|
|
if !ok {
|
|
return pages.ServerSelectedMsg{Err: fmt.Errorf("failed to get selected server")}
|
|
}
|
|
return pages.ServerSelectedMsg{Server: server, Err: nil}
|
|
}
|
|
}
|