// GET /{network}/leases/subnet?next=cursor func handleWatchLease(ctx context.Context, sm subnet.Manager, w http.ResponseWriter, r *http.Request) { network := mux.Vars(r)["network"] if network == "_" { network = "" } sn := subnet.ParseSubnetKey(mux.Vars(r)["subnet"]) if sn == nil { w.WriteHeader(http.StatusBadRequest) fmt.Fprint(w, "bad subnet") return } cursor := getCursor(r.URL) wr, err := sm.WatchLease(ctx, network, *sn, cursor) if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprint(w, err) return } switch wr.Cursor.(type) { case string: case fmt.Stringer: wr.Cursor = wr.Cursor.(fmt.Stringer).String() default: w.WriteHeader(http.StatusInternalServerError) fmt.Fprint(w, fmt.Errorf("internal error: watch cursor is of unknown type")) return } jsonResponse(w, http.StatusOK, wr) }
func handleRevokeLease(ctx context.Context, sm subnet.Manager, w http.ResponseWriter, r *http.Request) { network := mux.Vars(r)["network"] if network == "_" { network = "" } sn := subnet.ParseSubnetKey(mux.Vars(r)["subnet"]) if sn == nil { w.WriteHeader(http.StatusBadRequest) fmt.Fprint(w, "failed to parse subnet") return } if err := sm.RevokeLease(ctx, network, *sn); err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprint(w, err) return } }
// GET /{network}/config func handleGetNetworkConfig(ctx context.Context, sm subnet.Manager, w http.ResponseWriter, r *http.Request) { network := mux.Vars(r)["network"] if network == "_" { network = "" } c, err := sm.GetNetworkConfig(ctx, network) if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprint(w, err) return } jsonResponse(w, http.StatusOK, c) }
// POST /{network}/reservations func handleAddReservation(ctx context.Context, sm subnet.Manager, w http.ResponseWriter, r *http.Request) { network := mux.Vars(r)["network"] if network == "_" { network = "" } rsv := &subnet.Reservation{} if err := json.NewDecoder(r.Body).Decode(rsv); err != nil { w.WriteHeader(http.StatusBadRequest) fmt.Fprint(w, "JSON decoding error: ", err) return } if err := sm.AddReservation(ctx, network, rsv); err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprint(w, fmt.Errorf("internal error: %v", err)) return } }
// PUT /{network}/{lease.network} func handleRenewLease(ctx context.Context, sm subnet.Manager, w http.ResponseWriter, r *http.Request) { network := mux.Vars(r)["network"] if network == "_" { network = "" } lease := subnet.Lease{} if err := json.NewDecoder(r.Body).Decode(&lease); err != nil { w.WriteHeader(http.StatusBadRequest) fmt.Fprint(w, "JSON decoding error: ", err) return } if err := sm.RenewLease(ctx, network, &lease); err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprint(w, err) return } jsonResponse(w, http.StatusOK, lease) }
// POST /{network}/leases func handleAcquireLease(ctx context.Context, sm subnet.Manager, w http.ResponseWriter, r *http.Request) { defer r.Body.Close() network := mux.Vars(r)["network"] if network == "_" { network = "" } attrs := subnet.LeaseAttrs{} if err := json.NewDecoder(r.Body).Decode(&attrs); err != nil { w.WriteHeader(http.StatusBadRequest) fmt.Fprint(w, "JSON decoding error: ", err) return } lease, err := sm.AcquireLease(ctx, network, &attrs) if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprint(w, err) return } jsonResponse(w, http.StatusOK, lease) }