Pull request #976: all: imp cyclomatic complexity, minor improvements

Merge in DNS/adguard-home from less-cyclo to master

Updates #2646.

Squashed commit of the following:

commit 42f81c9f716ca7a2878d481b96d31d86f7c4151b
Merge: f61e2366 42b88c32
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Feb 5 15:07:04 2021 +0300

    Merge branch 'master' into less-cyclo

commit f61e2366ea10a289cec2f76b700e7117850cd4e2
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Feb 5 15:06:02 2021 +0300

    home: imp docs

commit e3c2310ce09cb78dd53ebbe728de4d2e72e6caf7
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Wed Jan 27 21:14:30 2021 +0300

    all: imp cyclomatic complexity, minor improvements
This commit is contained in:
Ainar Garipov 2021-02-05 15:17:18 +03:00
parent 42b88c32fc
commit e84effffc3
3 changed files with 49 additions and 28 deletions

View File

@ -90,6 +90,28 @@ type dhcpServerConfigJSON struct {
V6 v6ServerConfJSON `json:"v6"`
}
func (s *Server) enableDHCP(ifaceName string) (code int, err error) {
var hasStaticIP bool
hasStaticIP, err = sysutil.IfaceHasStaticIP(ifaceName)
if err != nil {
return http.StatusInternalServerError, fmt.Errorf("checking static ip: %w", err)
}
if !hasStaticIP {
err = sysutil.IfaceSetStaticIP(ifaceName)
if err != nil {
return http.StatusInternalServerError, fmt.Errorf("setting static ip: %w", err)
}
}
err = s.Start()
if err != nil {
return http.StatusBadRequest, fmt.Errorf("starting dhcp server: %w", err)
}
return 0, nil
}
func (s *Server) handleDHCPSetConfig(w http.ResponseWriter, r *http.Request) {
newconfig := dhcpServerConfigJSON{}
newconfig.Enabled = s.conf.Enabled
@ -98,6 +120,7 @@ func (s *Server) handleDHCPSetConfig(w http.ResponseWriter, r *http.Request) {
js, err := jsonutil.DecodeObject(&newconfig, r.Body)
if err != nil {
httpError(r, w, http.StatusBadRequest, "Failed to parse new DHCP config json: %s", err)
return
}
@ -112,6 +135,7 @@ func (s *Server) handleDHCPSetConfig(w http.ResponseWriter, r *http.Request) {
if len(v4conf.RangeStart) == 0 {
v4conf.Enabled = false
}
v4Enabled = v4conf.Enabled
v4conf.InterfaceName = newconfig.InterfaceName
@ -122,7 +146,8 @@ func (s *Server) handleDHCPSetConfig(w http.ResponseWriter, r *http.Request) {
s4, err = v4Create(v4conf)
if err != nil {
httpError(r, w, http.StatusBadRequest, "Invalid DHCPv4 configuration: %s", err)
httpError(r, w, http.StatusBadRequest, "invalid dhcpv4 configuration: %s", err)
return
}
}
@ -133,18 +158,22 @@ func (s *Server) handleDHCPSetConfig(w http.ResponseWriter, r *http.Request) {
if len(v6conf.RangeStart) == 0 {
v6conf.Enabled = false
}
v6Enabled = v6conf.Enabled
v6conf.InterfaceName = newconfig.InterfaceName
v6conf.notify = s.onNotify
s6, err = v6Create(v6conf)
if err != nil {
httpError(r, w, http.StatusBadRequest, "Invalid DHCPv6 configuration: %s", err)
httpError(r, w, http.StatusBadRequest, "invalid dhcpv6 configuration: %s", err)
return
}
}
if newconfig.Enabled && !v4Enabled && !v6Enabled {
httpError(r, w, http.StatusBadRequest, "DHCPv4 or DHCPv6 configuration must be complete")
httpError(r, w, http.StatusBadRequest, "dhcpv4 or dhcpv6 configuration must be complete")
return
}
@ -161,25 +190,20 @@ func (s *Server) handleDHCPSetConfig(w http.ResponseWriter, r *http.Request) {
if s4 != nil {
s.srv4 = s4
}
if s6 != nil {
s.srv6 = s6
}
s.conf.ConfigModified()
s.dbLoad()
if s.conf.Enabled {
staticIP, err := sysutil.IfaceHasStaticIP(newconfig.InterfaceName)
if !staticIP && err == nil {
err = sysutil.IfaceSetStaticIP(newconfig.InterfaceName)
var code int
code, err = s.enableDHCP(newconfig.InterfaceName)
if err != nil {
httpError(r, w, http.StatusInternalServerError, "Failed to configure static IP: %s", err)
return
}
}
httpError(r, w, code, "enabling dhcp: %s", err)
err = s.Start()
if err != nil {
httpError(r, w, http.StatusBadRequest, "Failed to start DHCP server: %s", err)
return
}
}

View File

@ -83,23 +83,16 @@ func whoisParse(data string) map[string]string {
switch k {
case "org-name":
m["orgname"] = trimValue(v)
case "orgname":
fallthrough
case "city":
fallthrough
case "country":
case "city", "country", "orgname":
m[k] = trimValue(v)
case "descr":
if len(descr) == 0 {
descr = v
}
case "netname":
netname = v
case "whois": // "whois: whois.arin.net"
m["whois"] = v
case "referralserver": // "ReferralServer: whois://whois.ripe.net"
if strings.HasPrefix(v, "whois://") {
m["whois"] = v[len("whois://"):]
@ -107,13 +100,17 @@ func whoisParse(data string) map[string]string {
}
}
// descr or netname -> orgname
_, ok := m["orgname"]
if !ok && len(descr) != 0 {
if !ok {
// Set orgname from either descr or netname for the frontent.
//
// TODO(a.garipov): Perhaps don't do that in the V1 HTTP API?
if descr != "" {
m["orgname"] = trimValue(descr)
} else if !ok && len(netname) != 0 {
} else if netname != "" {
m["orgname"] = trimValue(netname)
}
}
return m
}

View File

@ -132,7 +132,7 @@ golint --set_exit_status ./...
"$GO" vet ./...
gocyclo --over 20 .
gocyclo --over 19 .
gosec --quiet .