1
0
mirror of https://github.com/alice-lg/alice-lg.git synced 2024-05-11 05:55:03 +00:00
alice-lg-alice-lg/backend/api_endpoints_routes.go

129 lines
3.1 KiB
Go
Raw Normal View History

2018-09-22 15:51:20 +02:00
package main
import (
"github.com/alice-lg/alice-lg/backend/api"
"github.com/julienschmidt/httprouter"
"net/http"
)
// Handle routes
func apiRoutesList(_req *http.Request, params httprouter.Params) (api.Response, error) {
rsId, err := validateSourceId(params.ByName("id"))
if err != nil {
return nil, err
}
neighbourId := params.ByName("neighbourId")
source := AliceConfig.Sources[rsId].getInstance()
result, err := source.Routes(neighbourId)
return result, err
}
// Paginated Routes Respponse: Received routes
func apiRoutesListReceived(
req *http.Request,
params httprouter.Params,
) (api.Response, error) {
rsId, err := validateSourceId(params.ByName("id"))
if err != nil {
return nil, err
}
neighbourId := params.ByName("neighbourId")
source := AliceConfig.Sources[rsId].getInstance()
result, err := source.RoutesReceived(neighbourId)
if err != nil {
return nil, err
}
// Filter routes based on criteria if present
routes := apiQueryFilterNextHopGateway(req, "q", result.Imported)
// Paginate results
page := apiQueryMustInt(req, "page", 0)
pageSize := AliceConfig.Ui.Pagination.RoutesAcceptedPageSize
routes, pagination := apiPaginateRoutes(routes, page, pageSize)
// Make paginated response
response := api.PaginatedRoutesResponse{
RoutesResponse: &api.RoutesResponse{
Api: result.Api,
Imported: routes,
},
Pagination: pagination,
}
return response, nil
}
func apiRoutesListFiltered(
req *http.Request,
params httprouter.Params,
) (api.Response, error) {
rsId, err := validateSourceId(params.ByName("id"))
if err != nil {
return nil, err
}
neighbourId := params.ByName("neighbourId")
source := AliceConfig.Sources[rsId].getInstance()
result, err := source.RoutesFiltered(neighbourId)
if err != nil {
return nil, err
}
// Filter routes based on criteria if present
routes := apiQueryFilterNextHopGateway(req, "q", result.Filtered)
// Paginate results
page := apiQueryMustInt(req, "page", 0)
pageSize := AliceConfig.Ui.Pagination.RoutesFilteredPageSize
routes, pagination := apiPaginateRoutes(routes, page, pageSize)
// Make response
response := api.PaginatedRoutesResponse{
RoutesResponse: &api.RoutesResponse{
Api: result.Api,
Filtered: routes,
},
Pagination: pagination,
}
return response, nil
}
func apiRoutesListNotExported(
req *http.Request,
params httprouter.Params,
) (api.Response, error) {
rsId, err := validateSourceId(params.ByName("id"))
if err != nil {
return nil, err
}
neighbourId := params.ByName("neighbourId")
source := AliceConfig.Sources[rsId].getInstance()
result, err := source.RoutesNotExported(neighbourId)
if err != nil {
return nil, err
}
routes := apiQueryFilterNextHopGateway(req, "q", result.NotExported)
// Paginate results
page := apiQueryMustInt(req, "page", 0)
pageSize := AliceConfig.Ui.Pagination.RoutesNotExportedPageSize
routes, pagination := apiPaginateRoutes(routes, page, pageSize)
// Make response
response := api.PaginatedRoutesResponse{
RoutesResponse: &api.RoutesResponse{
Api: result.Api,
NotExported: routes,
},
Pagination: pagination,
}
return response, nil
}