func CatchAllHandler()

in pkg/mock/handlers/handlers.go [46:115]


func CatchAllHandler(res http.ResponseWriter, req *http.Request) {
	log.Println("Received request to CatchAllHandler: ", req.URL.Path)
	// CatchAllHandler may be invoked before ListRoutesHandler
	if len(trimmedRoutes) == 0 {
		formatRoutes()
	}

	var routes, results []string

	// Clean request path and determine which route list to search
	trimmedRoute := req.URL.Path
	if strings.HasPrefix(trimmedRoute, static.ServicePath) {
		trimmedRoute = strings.TrimPrefix(trimmedRoute, static.ServicePath+"/")
		log.Println("static prefix detected..trimming: ", trimmedRoute)
		routes = trimmedRoutes
	} else if strings.HasPrefix(trimmedRoute, dynamic.ServicePath) {
		trimmedRoute = strings.TrimPrefix(trimmedRoute, dynamic.ServicePath+"/")
		log.Println("dynamic prefix detected..trimming: ", trimmedRoute)
		routes = trimmedRoutesDynamic
	} else {
		server.ReturnNotFoundResponse(res)
		return
	}

	if paths, ok := routeLookupTable[trimmedRoute]; ok {
		log.Printf("CatchAllHandler entry %s already in map: %v \n", trimmedRoute, routeLookupTable[trimmedRoute])
		server.FormatAndReturnTextResponse(res, strings.Join(paths, "\n"))
		return
	}

	/*
		The request /latest/meta-data/iam will populate results as [info, security-credentials/]
		Note: not every path for which iam is a prefix needs to be appended to results.
		ex: iam/security-credentials/baskinc-role should not be added because security-credentials/ already exists
		results are cached in routeLookupTable
	*/
	appendToResults := true
	for _, route := range routes {
		if strings.Contains(route, trimmedRoute) {
			// ex: iam/security-credentials contains iam
			route = strings.TrimPrefix(route, trimmedRoute+"/")
			// route is now security-credentials
			for i, existingRoute := range results {
				if strings.Contains(route, existingRoute) {
					// security-credentials/baskinc-role contains security-credentials
					results[i] = existingRoute + "/"
					// display as security-credentials/
					appendToResults = false
					// do not add security-credentials/baskinc-role to results
					break
				}
			}
			if appendToResults {
				log.Printf("adding route: %s to results\n", route)
				results = append(results, route)
			}
			appendToResults = true
		}
	}

	if len(results) <= 0 {
		server.ReturnNotFoundResponse(res)
		return
	}

	routeLookupTable[trimmedRoute] = results
	log.Printf("CatchAllHandler: adding  %s  and its routes: %v to the map\n", trimmedRoute, results)
	server.FormatAndReturnTextResponse(res, strings.Join(results, "\n"))
	return
}