OfferCallbackServlet.java 4.39 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.annotation.Nonnull
 *  javax.servlet.RequestDispatcher
 *  javax.servlet.ServletException
 *  javax.servlet.ServletRequest
 *  javax.servlet.ServletResponse
 *  org.apache.commons.lang.StringUtils
 *  org.apache.felix.scr.annotations.sling.SlingServlet
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.request.RequestDispatcherOptions
 *  org.apache.sling.api.request.RequestPathInfo
 *  org.apache.sling.api.resource.NonExistingResource
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.SyntheticResource
 *  org.apache.sling.api.servlets.SlingSafeMethodsServlet
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.analytics.testandtarget.impl.servlets;

import java.io.IOException;
import javax.annotation.Nonnull;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestDispatcherOptions;
import org.apache.sling.api.request.RequestPathInfo;
import org.apache.sling.api.resource.NonExistingResource;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.SyntheticResource;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SlingServlet(name="com.day.cq.analytics.testandtarget.impl.servlets.OfferCallbackServlet", resourceTypes={"cq:Page"}, methods={"GET"}, selectors={"targetoffer"})
public class OfferCallbackServlet
extends SlingSafeMethodsServlet {
    private static final Logger LOG = LoggerFactory.getLogger(OfferCallbackServlet.class);

    protected void doGet(@Nonnull SlingHttpServletRequest request, @Nonnull SlingHttpServletResponse response) throws ServletException, IOException {
        String offerPath = request.getRequestPathInfo().getSuffix();
        LOG.debug("Received offer path {}", (Object)offerPath);
        if (StringUtils.isEmpty((String)offerPath)) {
            this.forwardToSamePage(request, response);
            return;
        }
        String resourcePath = offerPath;
        if (offerPath.endsWith("tandt.html")) {
            resourcePath = StringUtils.substring((String)offerPath, (int)0, (int)offerPath.indexOf(".tandt.html"));
            if (request.getResourceResolver().resolve(resourcePath) instanceof NonExistingResource || request.getResourceResolver().resolve(resourcePath) instanceof SyntheticResource) {
                LOG.warn("Path {} doesn't resolve to an actual resource", (Object)resourcePath);
                this.forwardToSamePage(request, response);
                return;
            }
            Resource resource = request.getResourceResolver().getResource(resourcePath);
            if (!resource.isResourceType("cq:Page")) {
                this.forwardToSamePage(request, response);
                return;
            }
            resource = resource.getChild("jcr:content");
            if (!resource.isResourceType("cq/personalization/components/teaserpage") && !resource.isResourceType("cq/personalization/components/offerproxy")) {
                LOG.warn("Path {} doesn't point to an offer page", (Object)resourcePath);
                this.forwardToSamePage(request, response);
                return;
            }
        } else if (!offerPath.startsWith(request.getResource().getPath()) || !offerPath.endsWith("default.html")) {
            this.forwardToSamePage(request, response);
            return;
        }
        request.getRequestDispatcher(offerPath).forward((ServletRequest)request, (ServletResponse)response);
    }

    private void forwardToSamePage(@Nonnull SlingHttpServletRequest request, @Nonnull SlingHttpServletResponse response) throws ServletException, IOException {
        RequestDispatcherOptions opts = new RequestDispatcherOptions();
        opts.setReplaceSelectors("");
        request.getRequestDispatcher(request.getResource(), opts).forward((ServletRequest)request, (ServletResponse)response);
    }
}