package io.lumify.web.routes.admin; import io.lumify.core.config.Configuration; import io.lumify.core.model.user.UserRepository; import io.lumify.core.model.workspace.WorkspaceRepository; import io.lumify.web.BaseRequestHandler; import io.lumify.miniweb.App; import io.lumify.miniweb.HandlerChain; import io.lumify.miniweb.Route; import com.google.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; import java.util.Map; public class AdminList extends BaseRequestHandler { @Inject public AdminList( final UserRepository userRepository, final WorkspaceRepository workspaceRepository, final Configuration configuration) { super(userRepository, workspaceRepository, configuration); } @Override public void handle(HttpServletRequest request, HttpServletResponse response, HandlerChain chain) throws Exception { App app = App.getApp(request); List<String> paths = getPaths(app); String out = pathsToHtml(paths); respondWithHtml(response, out); } private String pathsToHtml(List<String> paths) { StringBuilder out = new StringBuilder(); out.append("<html>"); out.append("<head>"); out.append(" <title>Lumify: Admin Index</title>"); out.append("</head>"); out.append("<body>"); out.append(" <ul>"); for (String path : paths) { out.append(" <li><a href='" + path + "'>" + path + "</a></li>"); } out.append(" </ul>"); out.append("</body>"); out.append("</html>"); return out.toString(); } private List<String> getPaths(App app) { Map<Route.Method, List<Route>> routes = app.getRouter().getRoutes(); List<String> paths = new ArrayList<String>(); for (Map.Entry<Route.Method, List<Route>> routeByMethod : routes.entrySet()) { if (routeByMethod.getKey() != Route.Method.GET) { continue; } for (Route route : routeByMethod.getValue()) { if (!route.getPath().startsWith("/admin/")) { continue; } paths.add(route.getPath()); } } return paths; } }