platform: modularize api/gui, add docs-tests-web foundation, and refresh root config
This commit is contained in:
72
selective-vpn-api/app/dns_settings_handlers_mode.go
Normal file
72
selective-vpn-api/app/dns_settings_handlers_mode.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// EN: `handleDNSStatus` is an HTTP handler for dns status.
|
||||
// RU: `handleDNSStatus` - HTTP-обработчик для dns status.
|
||||
// ---------------------------------------------------------------------
|
||||
func handleDNSStatus(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodGet {
|
||||
http.Error(w, "method not allowed", http.StatusMethodNotAllowed)
|
||||
return
|
||||
}
|
||||
mode := loadDNSMode()
|
||||
writeJSON(w, http.StatusOK, makeDNSStatusResponse(mode))
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// EN: `handleDNSModeSet` is an HTTP handler for dns mode set.
|
||||
// RU: `handleDNSModeSet` - HTTP-обработчик для dns mode set.
|
||||
// ---------------------------------------------------------------------
|
||||
func handleDNSModeSet(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodPost {
|
||||
http.Error(w, "method not allowed", http.StatusMethodNotAllowed)
|
||||
return
|
||||
}
|
||||
|
||||
var req DNSModeRequest
|
||||
if r.Body != nil {
|
||||
defer r.Body.Close()
|
||||
if err := json.NewDecoder(io.LimitReader(r.Body, 1<<20)).Decode(&req); err != nil && err != io.EOF {
|
||||
http.Error(w, "bad json", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
mode := loadDNSMode()
|
||||
mode.Mode = normalizeDNSResolverMode(req.Mode, req.ViaSmartDNS)
|
||||
mode.ViaSmartDNS = mode.Mode != DNSModeDirect
|
||||
if strings.TrimSpace(req.SmartDNSAddr) != "" {
|
||||
mode.SmartDNSAddr = req.SmartDNSAddr
|
||||
}
|
||||
if err := saveDNSMode(mode); err != nil {
|
||||
http.Error(w, "write error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
mode = loadDNSMode()
|
||||
writeJSON(w, http.StatusOK, makeDNSStatusResponse(mode))
|
||||
}
|
||||
|
||||
func makeDNSStatusResponse(mode DNSMode) DNSStatusResponse {
|
||||
rt := smartDNSRuntimeSnapshot()
|
||||
resp := DNSStatusResponse{
|
||||
ViaSmartDNS: mode.ViaSmartDNS,
|
||||
SmartDNSAddr: mode.SmartDNSAddr,
|
||||
Mode: mode.Mode,
|
||||
UnitState: smartdnsUnitState(),
|
||||
RuntimeNftset: rt.Enabled,
|
||||
WildcardSource: rt.WildcardSource,
|
||||
RuntimeCfgPath: rt.ConfigPath,
|
||||
}
|
||||
if rt.Message != "" {
|
||||
resp.RuntimeCfgError = rt.Message
|
||||
}
|
||||
return resp
|
||||
}
|
||||
Reference in New Issue
Block a user