public RootPathDispatcher(ComponentClassResolver componentClassResolver, ComponentRequestHandler handler, @Symbol(SymbolConstants.START_PAGE_NAME) String startPageName, LocalizationSetter localizationSetter) { this.componentClassResolver = componentClassResolver; this.handler = handler; this.startPageName = startPageName; this.localizationSetter = localizationSetter; parameters = new PageRenderRequestParameters(this.startPageName, EMPTY_CONTEXT, false); }
public Void perform() throws IOException { handler.handle(new PageRenderRequestParameters(pageName, context, false)); return null; } });
private PageRenderRequestParameters checkIfPage(Request request, String pageName, String pageActivationContext) { if (!componentClassResolver.isPageName(pageName)) { return null; } String canonicalized = componentClassResolver.canonicalizePageName(pageName); // If the page is only visible to the whitelist, but the request is not on the whitelist, then // pretend the page doesn't exist! if (isWhitelistOnlyAndNotValid(canonicalized)) { return null; } try { EventContext activationContext = contextPathEncoder.decodePath(pageActivationContext); boolean loopback = request.getParameter(TapestryConstants.PAGE_LOOPBACK_PARAMETER_NAME) != null; return new PageRenderRequestParameters(canonicalized, activationContext, loopback); } catch (IllegalArgumentException e) { // TAP5-2436 return null; } }
public Link createPageRenderLink(String pageName, boolean override, Object... pageActivationContext) { // Resolve the page name to its canonical format (the best version for URLs). This also // validates // the page name. String canonical = resolver.canonicalizePageName(pageName); Object[] context = (override || pageActivationContext.length != 0) ? pageActivationContext : contextCollector .collectPageActivationContext(canonical); boolean loopback = canonical.equals(requestGlobals.getActivePageName()) && pageCache.get(pageName).hasResetListeners(); PageRenderRequestParameters parameters = new PageRenderRequestParameters(canonical, new ArrayEventContext( typeCoercer, context), loopback); Link link = linkEncoder.createPageRenderLink(parameters); for (LinkCreationListener2 listener : listeners) listener.createdPageRenderLink(link, parameters); return link; }
public PageRenderRequestParameters decodePageRenderRequest(Request request) { String path = request.getPath(); String[] split = path.substring(1).split("/"); if (split.length == 1 && split[0].equals("")) return null; int pacx = 0; String possibleLocaleName = split[0]; // Might be just the page activation context, or it might be locale then page // activation context boolean localeSpecified = localizationSetter.isSupportedLocaleName(possibleLocaleName); if (localeSpecified) { pacx++; } if (pacx >= split.length) return null; if (localeSpecified) localizationSetter.setLocaleFromLocaleName(possibleLocaleName); boolean isLoopback = request.getParameter(TapestryConstants.PAGE_LOOPBACK_PARAMETER_NAME) != null; return new PageRenderRequestParameters("View", new ArrayEventContext(typeCoercer, split[pacx]), isLoopback); }
@Test public void root_index_page_gone() { RequestSecurityManager manager = mockRequestSecurityManager(); Response response = mockResponse(); ContextPathEncoder contextPathEncoder = getService(ContextPathEncoder.class); expect(manager.checkPageSecurity("Index")).andReturn(LinkSecurity.INSECURE); train_encodeURL(response, "/", "MAGIC"); replay(); ComponentEventLinkEncoder encoder = new ComponentEventLinkEncoderImpl(null, contextPathEncoder, null, response, manager, null, null, false, "", "", null, null); PageRenderRequestParameters parameters = new PageRenderRequestParameters("Index", new EmptyEventContext()); Link link = encoder.createPageRenderLink(parameters); assertEquals(link.toURI(), "MAGIC"); verify(); }
@Test public void locale_not_encoded() { RequestSecurityManager manager = mockRequestSecurityManager(); Response response = mockResponse(); ContextPathEncoder contextPathEncoder = getService(ContextPathEncoder.class); expect(manager.checkPageSecurity("MyPage")).andReturn(LinkSecurity.INSECURE); train_encodeURL(response, "/myapp/mypage", "MAGIC"); replay(); ComponentEventLinkEncoder encoder = new ComponentEventLinkEncoderImpl(null, contextPathEncoder, null, response, manager, null, null, false, "/myapp", "", null, null); PageRenderRequestParameters parameters = new PageRenderRequestParameters("MyPage", new EmptyEventContext()); Link link = encoder.createPageRenderLink(parameters); assertEquals(link.toURI(), "MAGIC"); verify(); }
@Test public void index_stripped_off() { RequestSecurityManager manager = mockRequestSecurityManager(); Response response = mockResponse(); ContextPathEncoder contextPathEncoder = getService(ContextPathEncoder.class); expect(manager.checkPageSecurity("admin/Index")).andReturn(LinkSecurity.INSECURE); train_encodeURL(response, "/admin/abc", "MAGIC"); replay(); ComponentEventLinkEncoder encoder = new ComponentEventLinkEncoderImpl(null, contextPathEncoder, null, response, manager, null, null, false, "", "", null, null); PageRenderRequestParameters parameters = new PageRenderRequestParameters("admin/Index", new ArrayEventContext( typeCoercer, "abc")); Link link = encoder.createPageRenderLink(parameters); assertEquals(link.toURI(), "MAGIC"); verify(); }
@Test public void check_request_is_secure() throws Exception { Request request = mockRequest(); Response response = mockResponse(); MetaDataLocator locator = mockMetaDataLocator(); ComponentEventLinkEncoder encoder = newMock(ComponentEventLinkEncoder.class); train_isSecure(request, true); replay(); PageRenderRequestParameters parameters = new PageRenderRequestParameters(PAGE_NAME, new EmptyEventContext(), false); RequestSecurityManager manager = new RequestSecurityManagerImpl(request, response, encoder, locator, true); assertFalse(manager.checkForInsecurePageRenderRequest(parameters)); verify(); }
@Test public void create_page_render_link_by_name() { String pageName = "order/Edit"; PageActivationContextCollector collector = mockPageActivationContextCollector(); ComponentEventLinkEncoder linkEncoder = mockComponentEventLinkEncoder(); Link link = mockLink(); ComponentClassResolver resolver = mockComponentClassResolver(); RequestGlobals globals = mockRequestGlobals(); expect(globals.getActivePageName()).andReturn("someOtherPage"); train_canonicalizePageName(resolver, pageName, pageName); train_collectPageActivationContext(collector, pageName, 3); EventContext pageActivationContext = new ArrayEventContext(typeCoercer, 3); PageRenderRequestParameters parameters = new PageRenderRequestParameters(pageName, pageActivationContext, false); expect(linkEncoder.createPageRenderLink(parameters)).andReturn(link); replay(); LinkSource source = new LinkSourceImpl(null, collector, typeCoercer, resolver, linkEncoder, globals, null, emptyConfiguration); Link actual = source.createPageRenderLink(pageName, false); // Make sure the same link is returned. assertEquals(actual, link); verify(); }
@Test public void check_page_not_secure() throws Exception { Request request = mockRequest(); Response response = mockResponse(); MetaDataLocator locator = mockMetaDataLocator(); ComponentEventLinkEncoder encoder = newMock(ComponentEventLinkEncoder.class); train_isSecure(request, false); train_isSecure(locator, PAGE_NAME, false); replay(); PageRenderRequestParameters parameters = new PageRenderRequestParameters(PAGE_NAME, new EmptyEventContext(), false); RequestSecurityManager manager = new RequestSecurityManagerImpl(request, response, encoder, locator, true); assertFalse(manager.checkForInsecurePageRenderRequest(parameters)); verify(); }
@Test public void check_redirect_needed() throws Exception { Request request = mockRequest(); Response response = mockResponse(); MetaDataLocator locator = mockMetaDataLocator(); Link link = mockLink(); ComponentEventLinkEncoder encoder = newMock(ComponentEventLinkEncoder.class); train_isSecure(request, false); train_isSecure(locator, PAGE_NAME, true); PageRenderRequestParameters parameters = new PageRenderRequestParameters(PAGE_NAME, new EmptyEventContext(), false); train_createPageRenderLink(encoder, parameters, link); response.sendRedirect(link); replay(); RequestSecurityManager manager = new RequestSecurityManagerImpl(request, response, encoder, locator, true); assertTrue(manager.checkForInsecurePageRenderRequest(parameters)); verify(); }
PageRenderRequestParameters parameters = new PageRenderRequestParameters("foo/Bar", context, true);
private void testPageLinkCreation(String pageName, boolean overrideContext, Object... context) { PageActivationContextCollector collector = mockPageActivationContextCollector(); LinkCreationListener2 listener = mockLinkCreationListener2(); ComponentEventLinkEncoder linkEncoder = mockComponentEventLinkEncoder(); Link link = mockLink(); ComponentClassResolver resolver = mockComponentClassResolver(); String canonical = "CanonicalPageName"; RequestGlobals globals = mockRequestGlobals(); // Ensure that the loopback logic is off; loopback logic is fully tested via an // integration test. expect(globals.getActivePageName()).andReturn("someOtherPage"); train_canonicalizePageName(resolver, pageName, canonical); if (!overrideContext) train_collectPageActivationContext(collector, canonical, context); PageRenderRequestParameters parameters = new PageRenderRequestParameters(canonical, new ArrayEventContext( typeCoercer, context), false); expect(linkEncoder.createPageRenderLink(parameters)).andReturn(link); listener.createdPageRenderLink(link, parameters); replay(); LinkSource source = new LinkSourceImpl(null, collector, typeCoercer, resolver, linkEncoder, globals, null, emptyConfiguration); source.getLinkCreationHub().addListener(listener); Object[] passedContext = overrideContext ? context : new Object[0]; Link returnedLink = source.createPageRenderLink(pageName, overrideContext, passedContext); assertSame(returnedLink, link); verify(); }
private void testPageLinkCreation2(String pageName, boolean overrideContext, Object... context) { PageActivationContextCollector collector = mockPageActivationContextCollector(); LinkCreationListener2 listener = mockLinkCreationListener2(); ComponentEventLinkEncoder linkEncoder = mockComponentEventLinkEncoder(); Link link = mockLink(); ComponentClassResolver resolver = mockComponentClassResolver(); String canonical = "CanonicalPageName"; RequestGlobals globals = mockRequestGlobals(); // Ensure that the loopback logic is off; loopback logic is fully tested via an // integration test. expect(globals.getActivePageName()).andReturn("someOtherPage"); train_canonicalizePageName(resolver, pageName, canonical); if (!overrideContext) train_collectPageActivationContext(collector, canonical, context); PageRenderRequestParameters parameters = new PageRenderRequestParameters(canonical, new ArrayEventContext( typeCoercer, context), false); expect(linkEncoder.createPageRenderLink(parameters)).andReturn(link); listener.createdPageRenderLink(link, parameters); replay(); LinkSource source = new LinkSourceImpl(null, collector, typeCoercer, resolver, linkEncoder, globals, null, emptyConfiguration); source.getLinkCreationHub().addListener(listener); Object[] passedContext = overrideContext ? context : new Object[0]; Link returnedLink = source.createPageRenderLink(pageName, overrideContext, passedContext); assertSame(returnedLink, link); verify(); }