A4TServlet.java 7.26 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.cq.contentinsight.ProviderSettingsManager
 *  com.adobe.granite.crypto.CryptoSupport
 *  com.day.cq.commons.inherit.InheritanceValueMap
 *  com.day.cq.wcm.webservicesupport.Configuration
 *  com.day.cq.wcm.webservicesupport.ConfigurationManager
 *  com.google.gson.JsonArray
 *  com.google.gson.JsonElement
 *  com.google.gson.JsonObject
 *  com.google.gson.JsonParser
 *  javax.annotation.Nonnull
 *  javax.servlet.ServletException
 *  org.apache.commons.lang.StringUtils
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.sling.SlingServlet
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ValueMap
 *  org.apache.sling.api.servlets.SlingSafeMethodsServlet
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.analytics.testandtarget.impl.servlets;

import com.adobe.cq.contentinsight.ProviderSettingsManager;
import com.adobe.granite.crypto.CryptoSupport;
import com.day.cq.commons.inherit.InheritanceValueMap;
import com.day.cq.wcm.webservicesupport.Configuration;
import com.day.cq.wcm.webservicesupport.ConfigurationManager;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nonnull;
import javax.servlet.ServletException;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Reference;
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.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SlingServlet(name="com.day.cq.analytics.testandtarget.impl.servlets.A4TServlet", resourceTypes={"cq/analytics/components/testandtargetpage"}, selectors={"a4t"}, extensions={"json"})
public class A4TServlet
extends SlingSafeMethodsServlet {
    private static final Logger LOG = LoggerFactory.getLogger(A4TServlet.class);
    private static final String PROP_ANALYTICS_CONFIG_PATH = "analyticsConfigPath";
    @Reference
    CryptoSupport cryptoSupport;
    @Reference
    private ProviderSettingsManager providerSettingsManager;

    protected void doGet(@Nonnull SlingHttpServletRequest request, @Nonnull SlingHttpServletResponse response) throws ServletException, IOException {
        String configurationPath = request.getResource().getParent().getPath();
        ConfigurationManager configMgr = (ConfigurationManager)request.getResourceResolver().adaptTo(ConfigurationManager.class);
        Configuration targetConfig = configMgr.getConfiguration(configurationPath);
        JsonObject responseJson = new JsonObject();
        if (targetConfig == null) {
            responseJson.addProperty("errorMessage", "No configuration found at path " + configurationPath);
            this.sendRespose(response, responseJson, 500);
            return;
        }
        LOG.debug("Retrieving account options for configuration at {}", (Object)configurationPath);
        InheritanceValueMap configOptions = targetConfig.getProperties();
        String accountOptions = (String)configOptions.get("accountOptions", (Object)"");
        boolean a4tEnabled = false;
        String analyticsConfigurationPath = "";
        Resource analyticsConfigResource = null;
        ValueMap settings = null;
        try {
            if (StringUtils.isNotEmpty((String)accountOptions)) {
                String decryptedOptions = this.cryptoSupport.unprotect(accountOptions);
                a4tEnabled = decryptedOptions.contains("enableAnalytics");
                analyticsConfigurationPath = (String)configOptions.get("analyticsConfigPath", (Object)"");
            }
            if (a4tEnabled && StringUtils.isNotEmpty((String)analyticsConfigurationPath)) {
                analyticsConfigResource = request.getResourceResolver().getResource(analyticsConfigurationPath);
                settings = this.providerSettingsManager.getProviderSettings(analyticsConfigResource);
            } else {
                LOG.debug("A4T not enabled or Analytics configuration not found on TnT cloud config " + configurationPath);
            }
        }
        catch (Exception e) {
            LOG.warn("Can't determine if target account is enabled for A4T!", (Throwable)e);
        }
        responseJson.addProperty("a4tEnabled", Boolean.valueOf(a4tEnabled));
        if (settings != null && settings.get((Object)"reportingservices") != null) {
            this.writeValueMapJson(responseJson, (ValueMap)settings.get((Object)"reportingservices"));
            Resource contentAnalyticsConfigRes = analyticsConfigResource.getChild("jcr:content");
            ValueMap analyticsProps = (ValueMap)contentAnalyticsConfigRes.adaptTo(ValueMap.class);
            String metrics = (String)analyticsProps.get("metrics", (Object)"");
            if (StringUtils.isNotEmpty((String)metrics)) {
                JsonArray metricsJson = new JsonParser().parse(metrics).getAsJsonArray();
                responseJson.add("metrics", (JsonElement)metricsJson);
            }
        }
        int responseCode = 200;
        this.sendRespose(response, responseJson, responseCode);
    }

    private void writeValueMapJson(JsonObject responseJson, ValueMap vm) {
        if (vm == null) {
            return;
        }
        for (String key : vm.keySet()) {
            if (vm.get((Object)key) instanceof Map) {
                JsonObject jsonObj = new JsonObject();
                this.writeValueMapJson(jsonObj, (ValueMap)vm.get((Object)key));
                responseJson.add(key, (JsonElement)jsonObj);
                continue;
            }
            responseJson.addProperty(key, vm.get((Object)key).toString());
        }
    }

    private void sendRespose(SlingHttpServletResponse response, JsonObject responseJson, int statusCode) {
        response.setContentType("application/json");
        response.setStatus(statusCode);
        try {
            PrintWriter out = response.getWriter();
            out.print(responseJson.toString());
        }
        catch (IOException e) {
            LOG.error(e.getMessage(), (Throwable)e);
        }
    }

    protected void bindCryptoSupport(CryptoSupport cryptoSupport) {
        this.cryptoSupport = cryptoSupport;
    }

    protected void unbindCryptoSupport(CryptoSupport cryptoSupport) {
        if (this.cryptoSupport == cryptoSupport) {
            this.cryptoSupport = null;
        }
    }

    protected void bindProviderSettingsManager(ProviderSettingsManager providerSettingsManager) {
        this.providerSettingsManager = providerSettingsManager;
    }

    protected void unbindProviderSettingsManager(ProviderSettingsManager providerSettingsManager) {
        if (this.providerSettingsManager == providerSettingsManager) {
            this.providerSettingsManager = null;
        }
    }
}