use of org.apache.wicket.request.Url in project wicket by apache.
the class BookmarkableMapper method parseRequest.
@Override
protected UrlInfo parseRequest(Request request) {
if (Application.exists()) {
if (Application.get().getSecuritySettings().getEnforceMounts()) {
return null;
}
}
if (matches(request)) {
Url url = request.getUrl();
// try to extract page and component information from URL
PageComponentInfo info = getPageComponentInfo(url);
List<String> segments = url.getSegments();
// load the page class
String className;
if (segments.size() >= 3) {
className = segments.get(2);
} else {
className = segments.get(1);
}
if (Strings.isEmpty(className)) {
return null;
}
Class<? extends IRequestablePage> pageClass = getPageClass(className);
if (pageClass != null && IRequestablePage.class.isAssignableFrom(pageClass)) {
// extract the PageParameters from URL if there are any
PageParameters pageParameters = extractPageParameters(request, 3, pageParametersEncoder);
if (pageParameters != null) {
pageParameters.setLocale(resolveLocale());
}
return new UrlInfo(info, pageClass, pageParameters);
}
}
return null;
}
use of org.apache.wicket.request.Url in project wicket by apache.
the class BasicResourceReferenceMapper method getCompatibilityScore.
@Override
public int getCompatibilityScore(Request request) {
Url url = request.getUrl();
int score = -1;
if (canBeHandled(url)) {
score = 1;
}
return score;
}
use of org.apache.wicket.request.Url in project wicket by apache.
the class BasicResourceReferenceMapper method mapRequest.
@Override
public IRequestHandler mapRequest(Request request) {
Url url = request.getUrl();
if (canBeHandled(url)) {
final int segmentsSize = url.getSegments().size();
// extract the PageParameters from URL if there are any
PageParameters pageParameters = extractPageParameters(request, segmentsSize, pageParametersEncoder);
if (pageParameters != null) {
pageParameters.setLocale(resolveLocale());
}
String className = url.getSegments().get(2);
StringBuilder name = new StringBuilder(segmentsSize * 2);
for (int i = 3; i < segmentsSize; ++i) {
String segment = url.getSegments().get(i);
// ignore invalid segments
if (segment.indexOf('/') > -1) {
return null;
}
// remove caching information
if (i + 1 == segmentsSize && Strings.isEmpty(segment) == false) {
// The filename + parameters eventually contain caching
// related information which needs to be removed
ResourceUrl resourceUrl = new ResourceUrl(segment, pageParameters);
getCachingStrategy().undecorateUrl(resourceUrl);
segment = resourceUrl.getFileName();
Checks.notEmpty(segment, "Caching strategy returned empty name for '%s'", resourceUrl);
}
if (name.length() > 0) {
name.append('/');
}
name.append(segment);
}
ResourceReference.UrlAttributes attributes = ResourceUtil.decodeResourceReferenceAttributes(url);
Class<?> scope = resolveClass(className);
if (scope != null && scope.getPackage() != null) {
ResourceReference res = getContext().getResourceReferenceRegistry().getResourceReference(scope, name.toString(), attributes.getLocale(), attributes.getStyle(), attributes.getVariation(), true, true);
if (res != null) {
return new ResourceReferenceRequestHandler(res, pageParameters);
}
}
}
return null;
}
use of org.apache.wicket.request.Url in project wicket by apache.
the class CryptoMapper method decryptUrl.
/**
* Decrypts a {@link Url}. This method should return {@code null} if the URL is not decryptable, or if the
* URL should have been encrypted but was not. Returning {@code null} results in a 404 error.
*
* @param request
* The {@link Request}.
* @param encryptedUrl
* The encrypted {@link Url}.
*
* @return Returns a decrypted {@link Url}.
*/
protected Url decryptUrl(final Request request, final Url encryptedUrl) {
Url url = decryptEntireUrl(request, encryptedUrl);
if (url == null) {
if (encryptedUrl.getSegments().size() > 0 && encryptedUrl.getSegments().get(0).equals(getContext().getNamespace())) {
/*
* This URL should have been encrypted, but was not. We should refuse to handle this, except when
* there is more than one CryptoMapper installed, and the request was decrypted by some other
* CryptoMapper.
*/
if (request.getOriginalUrl().getSegments().size() > 0 && request.getOriginalUrl().getSegments().get(0).equals(getContext().getNamespace())) {
return null;
} else {
return encryptedUrl;
}
}
}
if (url == null) {
url = decryptRequestListenerParameter(request, encryptedUrl);
}
log.debug("Url '{}' has been decrypted to '{}'", encryptedUrl, url);
return url;
}
use of org.apache.wicket.request.Url in project wicket by apache.
the class CryptoMapper method mapRequest.
@Override
public IRequestHandler mapRequest(final Request request) {
Url url = decryptUrl(request, request.getUrl());
if (url == null) {
return null;
}
Request decryptedRequest = request.cloneWithUrl(url);
IRequestHandler handler = wrappedMapper.mapRequest(decryptedRequest);
if (handler != null) {
handler = new RequestSettingRequestHandler(decryptedRequest, handler);
}
return handler;
}
Aggregations