// 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 } }