Browse Source

saving work. API functioning but validation bad.

afeiszli 4 years ago
parent
commit
7905f09849
3 changed files with 48 additions and 11 deletions
  1. 1 0
      controllers/controller.go
  2. 44 8
      controllers/dnsHttpController.go
  3. 3 3
      models/dnsEntry.go

+ 1 - 0
controllers/controller.go

@@ -28,6 +28,7 @@ func HandleRESTRequests(wg *sync.WaitGroup) {
     nodeHandlers(r)
     nodeHandlers(r)
     userHandlers(r)
     userHandlers(r)
     networkHandlers(r)
     networkHandlers(r)
+    dnsHandlers(r)
     fileHandlers(r)
     fileHandlers(r)
     serverHandlers(r)
     serverHandlers(r)
 
 

+ 44 - 8
controllers/dnsHttpController.go

@@ -19,10 +19,11 @@ import (
 
 
 func dnsHandlers(r *mux.Router) {
 func dnsHandlers(r *mux.Router) {
 
 
-	r.HandleFunc("/api/dns/{network}/nodes", securityCheck(http.HandlerFunc(getNodeDNS))).Methods("GET")
-	r.HandleFunc("/api/dns/{network}/custom", securityCheck(http.HandlerFunc(getCustomDNS))).Methods("GET")
-	r.HandleFunc("/api/dns/{network}", securityCheck(http.HandlerFunc(getDNS))).Methods("GET")
-	r.HandleFunc("/api/dns/{network}/{domain}", securityCheck(http.HandlerFunc(createDNS))).Methods("POST")
+	r.HandleFunc("/api/dns", securityCheck(http.HandlerFunc(getAllDNS))).Methods("GET")
+	r.HandleFunc("/api/dns/adm/{network}/nodes", securityCheck(http.HandlerFunc(getNodeDNS))).Methods("GET")
+	r.HandleFunc("/api/dns/adm/{network}/custom", securityCheck(http.HandlerFunc(getCustomDNS))).Methods("GET")
+	r.HandleFunc("/api/dns/adm/{network}", securityCheck(http.HandlerFunc(getDNS))).Methods("GET")
+	r.HandleFunc("/api/dns/{network}", securityCheck(http.HandlerFunc(createDNS))).Methods("POST")
 	r.HandleFunc("/api/dns/{network}/{domain}", securityCheck(http.HandlerFunc(deleteDNS))).Methods("DELETE")
 	r.HandleFunc("/api/dns/{network}/{domain}", securityCheck(http.HandlerFunc(deleteDNS))).Methods("DELETE")
 	r.HandleFunc("/api/dns/{network}/{domain}", securityCheck(http.HandlerFunc(updateDNS))).Methods("PUT")
 	r.HandleFunc("/api/dns/{network}/{domain}", securityCheck(http.HandlerFunc(updateDNS))).Methods("PUT")
 }
 }
@@ -46,6 +47,34 @@ func getNodeDNS(w http.ResponseWriter, r *http.Request) {
         json.NewEncoder(w).Encode(dns)
         json.NewEncoder(w).Encode(dns)
 }
 }
 
 
+//Gets all nodes associated with network, including pending nodes
+func getAllDNS(w http.ResponseWriter, r *http.Request) {
+
+        w.Header().Set("Content-Type", "application/json")
+
+        var dns []models.DNSEntry
+
+	networks, err := functions.ListNetworks()
+        if err != nil {
+                returnErrorResponse(w, r, formatError(err, "internal"))
+                return
+        }
+
+        for _, net := range networks {
+                netdns, err := GetDNS(net.NetID)
+                if err != nil {
+			returnErrorResponse(w, r, formatError(err, "internal"))
+                        return
+                }
+	        dns = append(dns, netdns...)
+        }
+
+        //Returns all the nodes in JSON format
+        w.WriteHeader(http.StatusOK)
+        json.NewEncoder(w).Encode(dns)
+}
+
+
 func GetNodeDNS(network string) ([]models.DNSEntry, error){
 func GetNodeDNS(network string) ([]models.DNSEntry, error){
 
 
         var dns []models.DNSEntry
         var dns []models.DNSEntry
@@ -199,9 +228,11 @@ func createDNS(w http.ResponseWriter, r *http.Request) {
 	w.Header().Set("Content-Type", "application/json")
 	w.Header().Set("Content-Type", "application/json")
 
 
 	var entry models.DNSEntry
 	var entry models.DNSEntry
+        var params = mux.Vars(r)
 
 
 	//get node from body of request
 	//get node from body of request
 	_ = json.NewDecoder(r.Body).Decode(&entry)
 	_ = json.NewDecoder(r.Body).Decode(&entry)
+	entry.Network = params["network"]
 
 
 	err := ValidateDNSCreate(entry)
 	err := ValidateDNSCreate(entry)
 	if err != nil {
 	if err != nil {
@@ -214,7 +245,7 @@ func createDNS(w http.ResponseWriter, r *http.Request) {
                 returnErrorResponse(w, r, formatError(err, "internal"))
                 returnErrorResponse(w, r, formatError(err, "internal"))
 		return
 		return
 	}
 	}
-
+        w.WriteHeader(http.StatusOK)
 	json.NewEncoder(w).Encode(entry)
 	json.NewEncoder(w).Encode(entry)
 }
 }
 
 
@@ -265,7 +296,7 @@ func deleteDNS(w http.ResponseWriter, r *http.Request) {
         // get params
         // get params
         var params = mux.Vars(r)
         var params = mux.Vars(r)
 
 
-        success, err := DeleteDNS(params["domain"])
+        success, err := DeleteDNS(params["domain"], params["network"])
 
 
         if err != nil {
         if err != nil {
                 returnErrorResponse(w, r, formatError(err, "internal"))
                 returnErrorResponse(w, r, formatError(err, "internal"))
@@ -347,13 +378,13 @@ func UpdateDNS(dnschange models.DNSEntry, entry models.DNSEntry) (models.DNSEntr
         return dnsupdate, errN
         return dnsupdate, errN
 }
 }
 
 
-func DeleteDNS(domain string) (bool, error) {
+func DeleteDNS(domain string, network string) (bool, error) {
 
 
 	deleted := false
 	deleted := false
 
 
 	collection := mongoconn.Client.Database("netmaker").Collection("dns")
 	collection := mongoconn.Client.Database("netmaker").Collection("dns")
 
 
-	filter := bson.M{"name": domain}
+	filter := bson.M{"name": domain,  "network": network}
 
 
 	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
 	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
 
 
@@ -399,6 +430,7 @@ func WriteHosts() error {
 func ValidateDNSCreate(entry models.DNSEntry) error {
 func ValidateDNSCreate(entry models.DNSEntry) error {
 
 
 	v := validator.New()
 	v := validator.New()
+        fmt.Println("Validating DNS: " + entry.Name)
 
 
 	_ = v.RegisterValidation("name_unique", func(fl validator.FieldLevel) bool {
 	_ = v.RegisterValidation("name_unique", func(fl validator.FieldLevel) bool {
 		num, err := GetDNSEntryNum(entry.Name, entry.Network)
 		num, err := GetDNSEntryNum(entry.Name, entry.Network)
@@ -416,6 +448,10 @@ func ValidateDNSCreate(entry models.DNSEntry) error {
                 isIpv4 := functions.IsIpv4Net(entry.Address)
                 isIpv4 := functions.IsIpv4Net(entry.Address)
 		return notEmptyCheck && isIpv4
 		return notEmptyCheck && isIpv4
 	})
 	})
+        _ = v.RegisterValidation("network_exists", func(fl validator.FieldLevel) bool {
+                _, err := functions.GetParentNetwork(entry.Network)
+                return err == nil
+        })
 
 
 	err := v.Struct(entry)
 	err := v.Struct(entry)
 
 

+ 3 - 3
models/dnsEntry.go

@@ -2,7 +2,7 @@
 package models
 package models
 
 
 type DNSEntry struct {
 type DNSEntry struct {
-	Address	string `json:"address" bson:"address"`
-	Name	string `json:"name" bson:"name"`
-	Network	string `json:"network" bson:"network"`
+	Address	string `json:"address" bson:"address" validate:"address_valid`
+	Name	string `json:"name" bson:"name" validate:"omitempty,name_valid,name_unique,max=120"`
+	Network	string `json:"network" bson:"network" validate:"network_exists"`
 }
 }