|
@@ -4,6 +4,7 @@ import (
|
|
"encoding/json"
|
|
"encoding/json"
|
|
"errors"
|
|
"errors"
|
|
"fmt"
|
|
"fmt"
|
|
|
|
+ "net"
|
|
"net/http"
|
|
"net/http"
|
|
"strings"
|
|
"strings"
|
|
|
|
|
|
@@ -246,6 +247,40 @@ func createNetwork(w http.ResponseWriter, r *http.Request) {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // validate address ranges: must be private
|
|
|
|
+ if network.AddressRange != "" {
|
|
|
|
+ _, ipNet, err := net.ParseCIDR(network.AddressRange)
|
|
|
|
+ if err != nil {
|
|
|
|
+ logger.Log(0, r.Header.Get("user"), "failed to create network: ",
|
|
|
|
+ err.Error())
|
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if !ipNet.IP.IsPrivate() {
|
|
|
|
+ err := errors.New("address range must be private")
|
|
|
|
+ logger.Log(0, r.Header.Get("user"), "failed to create network: ",
|
|
|
|
+ err.Error())
|
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if network.AddressRange6 != "" {
|
|
|
|
+ _, ipNet, err := net.ParseCIDR(network.AddressRange6)
|
|
|
|
+ if err != nil {
|
|
|
|
+ logger.Log(0, r.Header.Get("user"), "failed to create network: ",
|
|
|
|
+ err.Error())
|
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if !ipNet.IP.IsPrivate() {
|
|
|
|
+ err := errors.New("address range must be private")
|
|
|
|
+ logger.Log(0, r.Header.Get("user"), "failed to create network: ",
|
|
|
|
+ err.Error())
|
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
network, err = logic.CreateNetwork(network)
|
|
network, err = logic.CreateNetwork(network)
|
|
if err != nil {
|
|
if err != nil {
|
|
logger.Log(0, r.Header.Get("user"), "failed to create network: ",
|
|
logger.Log(0, r.Header.Get("user"), "failed to create network: ",
|