use of org.webpieces.router.impl.services.RouteInfoForNotFound in project webpieces by deanhiller.
the class ENotFoundRouter method invokeNotFoundRoute.
public XFuture<StreamWriter> invokeNotFoundRoute(RequestContext ctx, ProxyStreamHandle handle, NotFoundException exc) {
Endpoint info = new Endpoint(svc);
RouteInfoForNotFound data = new RouteInfoForNotFound(exc);
InvokeInfo invokeInfo = new InvokeInfo(ctx, handle, RouteType.NOT_FOUND, loadedController, i18nBaseBundle);
return invoker.invokeNotFound(invokeInfo, info, data).thenApply(voidd -> new NullWriter());
}
use of org.webpieces.router.impl.services.RouteInfoForNotFound in project webpieces by deanhiller.
the class LoginFilter method filter.
@Override
public XFuture<Action> filter(MethodMeta meta, Service<MethodMeta, Action> next) {
if (meta.getRoute() instanceof RouteInfoForNotFound || meta.getRoute() instanceof RouteInfoForInternalError) {
// no need to login for routeinfoNotFound NOR internal error pages
return next.invoke(meta);
} else if (patternToMatch != null) {
// If we have a securePath, we act as a NotFoundFilter so we want to redirect to Login ONLY if this is a secure path request
// This hides known vs. unknown pages
Matcher matcher = patternToMatch.matcher(meta.getCtx().getRequest().relativePath);
if (!matcher.matches())
return next.invoke(meta);
}
Session session = Current.session();
if (session.containsKey(token)) {
Current.addModifyResponse(resp -> addCacheHeaders(resp));
return futureUtil.finallyBlock(() -> next.invoke(meta), () -> clearSecureFields(meta));
}
RouterRequest request = Current.request();
if (request.isAjaxRequest) {
if (request.referrer != null) {
Current.flash().put("url", request.referrer);
Current.flash().keep(true);
}
return XFuture.completedFuture(Actions.ajaxRedirect(loginRoute));
} else if (request.method == HttpMethod.GET) {
// store url requested in flash so after logging in, we can redirect the user
// back to the original page
Current.flash().put("url", request.relativePath);
Current.flash().keep(true);
} else if (request.method == HttpMethod.POST) {
// adding a validation error avoids the posting of the form so they post AFTER logging in
if (request.referrer != null)
Current.flash().put("url", request.referrer);
else
Current.flash().put("url", request.relativePath);
Set<String> mySet = new HashSet<>(Arrays.asList(secureFields));
Current.getContext().moveFormParamsToFlash(mySet);
Current.flash().keep(true);
}
// redirect to login page..
return XFuture.completedFuture(Actions.redirect(loginRoute));
}
use of org.webpieces.router.impl.services.RouteInfoForNotFound in project webpieces by deanhiller.
the class DevRouteInvoker method invokeNotFound.
/**
* This one is definitely special
*/
@Override
public XFuture<Void> invokeNotFound(InvokeInfo invokeInfo, Endpoint info, RouteData data) {
// special case for if stuff didn't compile and we flag it
Throwable exc = (Throwable) invokeInfo.getRequestCtx().getRequest().requestState.get(ERROR_KEY);
if (exc != null) {
log.error("Could not compile your code", exc);
RouteInfoForInternalError error = new RouteInfoForInternalError(exc);
return invokeErrorController(invokeInfo, info, error);
}
RequestContext requestCtx = invokeInfo.getRequestCtx();
ProxyStreamHandle handler = invokeInfo.getHandler();
RouteInfoForNotFound notFoundData = (RouteInfoForNotFound) data;
NotFoundException notFoundExc = notFoundData.getNotFoundException();
RouterRequest req = requestCtx.getRequest();
if (notFoundData.getNotFoundException() == null) {
throw new IllegalArgumentException("must have not found exception to be here");
} else if (req.queryParams.containsKey(DevelopmentController.NOT_FOUND_KEY)) {
// This is a callback so render the original webapp developer's not found page into the iframe
return super.invokeNotFound(invokeInfo, info, data);
}
// ok, in dev mode, we hijack the not found page with one with a route list AND an iframe containing the developers original
// notfound page
log.error("(Development only log message) Route not found!!! Either you(developer) typed the wrong url OR you have a bad route. Either way,\n" + " something needs a'fixin. req=" + req, notFoundExc);
Injector webAppInjector = webInjector.getCurrentInjector();
RouteInfo routeInfo = new RouteInfo(new RouteModuleInfo("", null), "/org/webpieces/devrouter/impl/DevelopmentController.notFound");
SvcProxyFixedRoutes svcProxy = new SvcProxyFixedRoutes(serviceInvoker, futureUtil);
LoadedController newLoadedController = controllerFinder.loadGenericController(webAppInjector, routeInfo).getLoadedController();
Endpoint newInfo = new Endpoint(svcProxy);
String reason = "Your route was not found in routes table";
if (notFoundExc != null)
reason = notFoundExc.getMessage();
RouterRequest newRequest = new RouterRequest();
newRequest.putMultipart("webpiecesError", "Exception message=" + reason);
newRequest.putMultipart("url", req.relativePath);
newRequest.isHttps = req.isHttps;
newRequest.isBackendRequest = req.isBackendRequest;
newRequest.originalRequest = req.originalRequest;
newRequest.requestState.put(DevelopmentController.ORIGINAL_REQUEST, req);
ApplicationContext ctx = webInjector.getAppContext();
RequestContext overridenCtx = new RequestContext(requestCtx.getValidation(), (FlashSub) requestCtx.getFlash(), requestCtx.getSession(), newRequest, ctx);
InvokeInfo newInvokeInfo = new InvokeInfo(overridenCtx, handler, RouteType.NOT_FOUND, newLoadedController, null);
RequestContext oldContext = Current.getContext();
Current.setContext(overridenCtx);
try {
return super.invokeNotFound(newInvokeInfo, newInfo, data);
} finally {
Current.setContext(oldContext);
}
}
Aggregations