Initial v1.1.8 Commits

This commit is contained in:
amurcanov
2026-05-23 22:18:08 +03:00
commit ac86caaf8b
76 changed files with 15693 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
package main
import (
"fmt"
"net"
"strings"
"time"
)
// RequestConfig запрашивает WireGuard конфиг через DTLS-соединение.
func RequestConfig(conn net.Conn, localPort, deviceID, password string) (string, error) {
payload := fmt.Sprintf("GETCONF:%s|%s|%s", localPort, deviceID, password)
if _, err := conn.Write([]byte(payload)); err != nil {
return "", fmt.Errorf("отправка GETCONF: %w", err)
}
b := make([]byte, 4096)
if err := conn.SetReadDeadline(time.Now().Add(15 * time.Second)); err != nil {
return "", fmt.Errorf("установка дедлайна: %w", err)
}
n, err := conn.Read(b)
_ = conn.SetReadDeadline(time.Time{})
if err != nil {
return "", fmt.Errorf("чтение ответа конфига: %w", err)
}
resp := string(b[:n])
if resp == "NOCONF" {
return "", nil
}
if strings.HasPrefix(resp, "DENIED:") {
reason := strings.TrimPrefix(resp, "DENIED:")
switch reason {
case "wrong_password":
return "", fmt.Errorf("FATAL_AUTH: неверный пароль подключения")
case "expired":
return "", fmt.Errorf("FATAL_AUTH: срок действия пароля истёк")
case "device_mismatch":
return "", fmt.Errorf("FATAL_AUTH: пароль привязан к другому устройству")
default:
return "", fmt.Errorf("FATAL_AUTH: доступ запрещён (%s)", reason)
}
}
return resp, nil
}