feat(gui): add GUI (Test) implementation with documentation and admin support
- Add GUI (Test) module with Fyne-based interface (internal/gui/gui.go, internal/gui/server.go) - Add CLI monitoring capability (internal/cli/monitor.go) - Add main_cli.go entry point for CLI-only builds - Add comprehensive documentation suite covering setup, build, quick start, and changelog - Add admin manifest (admin.manifest) for Windows UAC elevation support - Add rsrc.syso.json configuration for resource embedding - Update .gitignore to exclude build scripts (*.bat, *.sh) - Update main.go and cli.go to support dual GUI (Test)/CLI modes - Update README.md with new project information - Enables users to build and run both GUI (Test)and CLI versions with proper admin privileges on Windows
This commit is contained in:
@@ -34,6 +34,9 @@ func Run() error {
|
||||
|
||||
choice := readInput("Выберите действие: ")
|
||||
|
||||
state, _ := vpn.GetStatus()
|
||||
isConnected := state != nil && state.Connected
|
||||
|
||||
switch choice {
|
||||
case "1":
|
||||
wireguardMenu()
|
||||
@@ -47,10 +50,29 @@ func Run() error {
|
||||
}
|
||||
pause()
|
||||
case "5":
|
||||
if err := vpn.Disconnect(config.LogsDir); err != nil {
|
||||
fmt.Printf("%s %v\n", red("✗"), err)
|
||||
if isConnected {
|
||||
// Мониторинг в реальном времени
|
||||
if err := MonitorConnection(); err != nil {
|
||||
fmt.Printf("%s %v\n", red("✗"), err)
|
||||
pause()
|
||||
}
|
||||
} else {
|
||||
// Отключение
|
||||
if err := vpn.Disconnect(config.LogsDir); err != nil {
|
||||
fmt.Printf("%s %v\n", red("✗"), err)
|
||||
}
|
||||
pause()
|
||||
}
|
||||
case "6":
|
||||
if isConnected {
|
||||
if err := vpn.Disconnect(config.LogsDir); err != nil {
|
||||
fmt.Printf("%s %v\n", red("✗"), err)
|
||||
}
|
||||
pause()
|
||||
} else {
|
||||
fmt.Printf("%s Неверный выбор\n", red("✗"))
|
||||
pause()
|
||||
}
|
||||
pause()
|
||||
case "0":
|
||||
fmt.Println("До свидания!")
|
||||
return nil
|
||||
@@ -64,25 +86,27 @@ func Run() error {
|
||||
func showMainMenu() {
|
||||
state, _ := vpn.GetStatus()
|
||||
|
||||
statusIcon := "○"
|
||||
statusText := "Не подключено"
|
||||
if state != nil && state.Connected {
|
||||
statusIcon = "✓"
|
||||
statusText = fmt.Sprintf("Подключено: %s", state.ConfigName)
|
||||
}
|
||||
statusLine := ShowQuickStatus()
|
||||
|
||||
fmt.Println("\n" + strings.Repeat("=", 50))
|
||||
fmt.Println("\n" + strings.Repeat("=", 60))
|
||||
fmt.Println(bold("VPN Клиент (Go)"))
|
||||
fmt.Println(strings.Repeat("=", 50))
|
||||
fmt.Printf("Статус: %s %s\n", statusIcon, statusText)
|
||||
fmt.Println(strings.Repeat("=", 50))
|
||||
fmt.Println(strings.Repeat("=", 60))
|
||||
fmt.Printf("Статус: %s\n", statusLine)
|
||||
fmt.Println(strings.Repeat("=", 60))
|
||||
fmt.Println("1. WireGuard")
|
||||
fmt.Println("2. VLESS")
|
||||
fmt.Println("3. Управление подписками")
|
||||
fmt.Println("4. Показать статус подключения")
|
||||
fmt.Println("5. Отключиться от VPN")
|
||||
|
||||
if state != nil && state.Connected {
|
||||
fmt.Println("5. " + green("Мониторинг в реальном времени"))
|
||||
fmt.Println("6. Отключиться от VPN")
|
||||
} else {
|
||||
fmt.Println("5. Отключиться от VPN")
|
||||
}
|
||||
|
||||
fmt.Println("0. Выход")
|
||||
fmt.Println(strings.Repeat("=", 50))
|
||||
fmt.Println(strings.Repeat("=", 60))
|
||||
}
|
||||
|
||||
func vlessMenu() {
|
||||
@@ -252,6 +276,15 @@ func connectVLESS() {
|
||||
fmt.Printf("%s Ошибка подключения: %v\n", red("✗"), err)
|
||||
return
|
||||
}
|
||||
|
||||
// Предлагаем запустить мониторинг
|
||||
fmt.Println("\n" + strings.Repeat("─", 60))
|
||||
choice := readInput("Запустить мониторинг в реальном времени? (y/n): ")
|
||||
if strings.ToLower(choice) == "y" || strings.ToLower(choice) == "д" {
|
||||
if err := MonitorConnection(); err != nil {
|
||||
fmt.Printf("%s %v\n", red("✗"), err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testVLESSConfig() {
|
||||
@@ -861,4 +894,13 @@ func connectWireGuard() {
|
||||
fmt.Printf("%s Ошибка подключения: %v\n", red("✗"), err)
|
||||
return
|
||||
}
|
||||
|
||||
// Предлагаем запустить мониторинг
|
||||
fmt.Println("\n" + strings.Repeat("─", 60))
|
||||
choice := readInput("Запустить мониторинг в реальном времени? (y/n): ")
|
||||
if strings.ToLower(choice) == "y" || strings.ToLower(choice) == "д" {
|
||||
if err := MonitorConnection(); err != nil {
|
||||
fmt.Printf("%s %v\n", red("✗"), err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user