mirror of
https://github.com/alice-lg/birdwatcher.git
synced 2025-03-09 00:00:05 +01:00
202 lines
6 KiB
Go
202 lines
6 KiB
Go
package endpoints
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/alice-lg/birdwatcher/bird"
|
|
"github.com/julienschmidt/httprouter"
|
|
)
|
|
|
|
func ProtoRoutes(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
protocol, err := ValidateProtocolParam(ps.ByName("protocol"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesProto(useCache, protocol)
|
|
}
|
|
|
|
func RoutesFiltered(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
protocol, err := ValidateProtocolParam(ps.ByName("protocol"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesFiltered(useCache, protocol)
|
|
}
|
|
|
|
func RoutesExport(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
protocol, err := ValidateProtocolParam(ps.ByName("protocol"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesExport(useCache, protocol)
|
|
}
|
|
|
|
func RoutesNoExport(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
protocol, err := ValidateProtocolParam(ps.ByName("protocol"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesNoExport(useCache, protocol)
|
|
}
|
|
|
|
func RoutesPrefixed(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
qs := r.URL.Query()
|
|
prefixl := qs["prefix"]
|
|
if len(prefixl) != 1 {
|
|
return bird.Parsed{"error": "need a prefix as single query parameter"}, false
|
|
}
|
|
|
|
prefix, err := ValidatePrefixParam(prefixl[0])
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesPrefixed(useCache, prefix)
|
|
}
|
|
|
|
func TableRoutes(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
table, err := ValidateProtocolParam(ps.ByName("table"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesTable(useCache, table)
|
|
}
|
|
|
|
func TableRoutesFiltered(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
table, err := ValidateProtocolParam(ps.ByName("table"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesTableFiltered(useCache, table)
|
|
}
|
|
|
|
func TableAndPeerRoutes(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
table, err := ValidateProtocolParam(ps.ByName("table"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
peer, err := ValidatePrefixParam(ps.ByName("peer"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesTableAndPeer(useCache, table, peer)
|
|
}
|
|
|
|
func ProtoCount(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
protocol, err := ValidateProtocolParam(ps.ByName("protocol"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesProtoCount(useCache, protocol)
|
|
}
|
|
|
|
func ProtoPrimaryCount(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
protocol, err := ValidateProtocolParam(ps.ByName("protocol"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
return bird.RoutesProtoPrimaryCount(useCache, protocol)
|
|
}
|
|
|
|
func TableCount(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
table, err := ValidateProtocolParam(ps.ByName("table"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesTableCount(useCache, table)
|
|
}
|
|
|
|
func RouteNet(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
net, err := ValidatePrefixParam(ps.ByName("net"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesLookupTable(useCache, net, "master")
|
|
}
|
|
|
|
func RouteNetTable(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
net, err := ValidatePrefixParam(ps.ByName("net"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
table, err := ValidateProtocolParam(ps.ByName("table"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesLookupTable(useCache, net, table)
|
|
}
|
|
|
|
func PipeRoutesFiltered(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
qs := r.URL.Query()
|
|
|
|
if len(qs["table"]) != 1 {
|
|
return bird.Parsed{"error": "need a table as single query parameter"}, false
|
|
}
|
|
table, err := ValidateProtocolParam(qs["table"][0])
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
if len(qs["pipe"]) != 1 {
|
|
return bird.Parsed{"error": "need a pipe as single query parameter"}, false
|
|
}
|
|
pipe, err := ValidateProtocolParam(qs["pipe"][0])
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.PipeRoutesFiltered(useCache, pipe, table)
|
|
}
|
|
|
|
func PipeRoutesFilteredCount(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
qs := r.URL.Query()
|
|
|
|
if len(qs["table"]) != 1 {
|
|
return bird.Parsed{"error": "need a table as single query parameter"}, false
|
|
}
|
|
table, err := ValidateProtocolParam(qs["table"][0])
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
if len(qs["pipe"]) != 1 {
|
|
return bird.Parsed{"error": "need a pipe as single query parameter"}, false
|
|
}
|
|
pipe, err := ValidateProtocolParam(qs["pipe"][0])
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
if len(qs["address"]) != 1 {
|
|
return bird.Parsed{"error": "need a address as single query parameter"}, false
|
|
}
|
|
address, err := ValidatePrefixParam(qs["address"][0])
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.PipeRoutesFilteredCount(useCache, pipe, table, address)
|
|
}
|
|
|
|
func PeerRoutes(r *http.Request, ps httprouter.Params, useCache bool) (bird.Parsed, bool) {
|
|
peer, err := ValidatePrefixParam(ps.ByName("peer"))
|
|
if err != nil {
|
|
return bird.Parsed{"error": fmt.Sprintf("%s", err)}, false
|
|
}
|
|
|
|
return bird.RoutesPeer(useCache, peer)
|
|
}
|