diff --git a/internal/api/agent/server.go b/internal/api/agent/server.go new file mode 100644 index 0000000..05653a4 --- /dev/null +++ b/internal/api/agent/server.go @@ -0,0 +1,16 @@ +package agentapi + +import ( + "log" + "net/http" +) + +func Start(address string) { + mux := http.NewServeMux() + mux.HandleFunc("/vpcs", VpcsHandler) + mux.HandleFunc("/vpcs/", VpcByNameHandler) + mux.HandleFunc("/subnets", SubnetsHandler) + mux.HandleFunc("/subnets/", SubnetByNameHandler) + log.Printf("API server listening on %s", address) + log.Fatal(http.ListenAndServe(address, mux)) +} diff --git a/internal/api/agent/subnet.go b/internal/api/agent/subnet.go new file mode 100644 index 0000000..e46e4f4 --- /dev/null +++ b/internal/api/agent/subnet.go @@ -0,0 +1,25 @@ +package agentapi + +import ( + "encoding/json" + "net/http" + "strings" +) + +func SubnetByNameHandler(w http.ResponseWriter, r *http.Request) { + name := strings.TrimPrefix(r.URL.Path, "/subnets/") + if name == "" { + http.NotFound(w, r) + return + } + w.Header().Set("Content-Type", "application/json") + switch r.Method { + case http.MethodGet: + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(map[string]string{"name": name}) + case http.MethodDelete: + w.WriteHeader(http.StatusAccepted) + default: + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + } +} diff --git a/internal/api/agent/subnets.go b/internal/api/agent/subnets.go new file mode 100644 index 0000000..53dce2e --- /dev/null +++ b/internal/api/agent/subnets.go @@ -0,0 +1,19 @@ +package agentapi + +import ( + "encoding/json" + "net/http" +) + +func SubnetsHandler(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + switch r.Method { + case http.MethodGet: + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode([]interface{}{}) + case http.MethodPost: + w.WriteHeader(http.StatusAccepted) + default: + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + } +} diff --git a/internal/api/agent/vpc.go b/internal/api/agent/vpc.go new file mode 100644 index 0000000..aecfaa1 --- /dev/null +++ b/internal/api/agent/vpc.go @@ -0,0 +1,25 @@ +package agentapi + +import ( + "encoding/json" + "net/http" + "strings" +) + +func VpcByNameHandler(w http.ResponseWriter, r *http.Request) { + name := strings.TrimPrefix(r.URL.Path, "/vpcs/") + if name == "" { + http.NotFound(w, r) + return + } + w.Header().Set("Content-Type", "application/json") + switch r.Method { + case http.MethodGet: + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(map[string]string{"name": name}) + case http.MethodDelete: + w.WriteHeader(http.StatusAccepted) + default: + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + } +} diff --git a/internal/api/agent/vpcs.go b/internal/api/agent/vpcs.go new file mode 100644 index 0000000..c4e9b27 --- /dev/null +++ b/internal/api/agent/vpcs.go @@ -0,0 +1,19 @@ +package agentapi + +import ( + "encoding/json" + "net/http" +) + +func VpcsHandler(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + switch r.Method { + case http.MethodGet: + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode([]interface{}{}) + case http.MethodPost: + w.WriteHeader(http.StatusAccepted) + default: + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + } +}