AutoProvisioningServlet.java 6.85 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.servlet.RequestDispatcher
 *  javax.servlet.ServletException
 *  javax.servlet.ServletRequest
 *  javax.servlet.ServletResponse
 *  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.servlets.SlingAllMethodsServlet
 *  org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper
 *  org.apache.sling.commons.json.JSONException
 *  org.apache.sling.commons.json.JSONObject
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.analytics.provisioning.impl;

import com.day.cq.analytics.provisioning.impl.ProvisioningHelper;
import com.day.cq.analytics.sitecatalyst.SitecatalystException;
import com.day.cq.analytics.sitecatalyst.SitecatalystHttpClient;
import com.day.cq.analytics.sitecatalyst.impl.util.AnalyticsAPICallsUtils;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
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.servlets.SlingAllMethodsServlet;
import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SlingServlet(methods={"POST"}, resourceTypes={"cq/cloudservicesprovisioning/autoprovisioning"}, extensions={"json"})
public class AutoProvisioningServlet
extends SlingAllMethodsServlet {
    private static final Logger LOG = LoggerFactory.getLogger(AutoProvisioningServlet.class);
    @Reference
    private SitecatalystHttpClient scClient;

    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        String[] serviceNames = request.getParameterValues("servicename");
        HashSet<String> serviceNamesSet = new HashSet<String>(Arrays.asList(serviceNames));
        HashMap<String, String[]> additionalParams = new HashMap<String, String[]>();
        additionalParams.put("cmd", new String[]{"provisionCloudService"});
        if (serviceNamesSet.contains("analytics")) {
            String server = request.getParameter("analytics.server");
            String company = request.getParameter("analytics.company");
            String username = request.getParameter("analytics.username");
            String secret = request.getParameter("analytics.secret");
            String rsid = request.getParameter("analytics.reportsuite");
            if ("true".equals(request.getParameter("automaticProvisioning"))) {
                Properties properties = ProvisioningHelper.getAutomaticProvisioningData();
                server = properties.getProperty("analytics.server");
                company = properties.getProperty("analytics.company");
                username = properties.getProperty("analytics.username");
                secret = properties.getProperty("analytics.secret");
                rsid = properties.getProperty("analytics.reportsuite");
            }
            JSONObject data = new JSONObject();
            try {
                data.put("rsid", (Object)rsid);
                String trackingServerResponse = this.scClient.execute(server, "Company.GetTrackingServer", data.toString(), company, username, secret);
                String errorMessage = AnalyticsAPICallsUtils.getErrorMessageFromResponse(trackingServerResponse);
                if (errorMessage != null) {
                    throw new SitecatalystException(errorMessage);
                }
                JSONObject trackingServerResponseJSON = new JSONObject(trackingServerResponse);
                additionalParams.put("analytics.namespace", new String[]{trackingServerResponseJSON.getString("namespace")});
                additionalParams.put("analytics.trackingserver", new String[]{trackingServerResponseJSON.getString("tracking_server")});
                additionalParams.put("analytics.trackingserversecure", new String[]{trackingServerResponseJSON.getString("tracking_server")});
            }
            catch (SitecatalystException e) {
                LOG.error("Could not obtain tracking server.", (Throwable)e);
                throw new ServletException((Throwable)e);
            }
            catch (JSONException e) {
                LOG.error("Could not obtain tracking server.", (Throwable)e);
                throw new ServletException((Throwable)e);
            }
        }
        request.getRequestDispatcher("/bin/wcmcommand").forward((ServletRequest)new AutoProvisioningRequestWrapper(request, additionalParams), (ServletResponse)response);
    }

    protected void bindScClient(SitecatalystHttpClient sitecatalystHttpClient) {
        this.scClient = sitecatalystHttpClient;
    }

    protected void unbindScClient(SitecatalystHttpClient sitecatalystHttpClient) {
        if (this.scClient == sitecatalystHttpClient) {
            this.scClient = null;
        }
    }

    private class AutoProvisioningRequestWrapper
    extends SlingHttpServletRequestWrapper {
        private Map<String, String[]> additionalParams;
        private Map<String, String[]> allParameters;

        public AutoProvisioningRequestWrapper(SlingHttpServletRequest wrappedRequest, Map<String, String[]> additionalParams) {
            super(wrappedRequest);
            this.allParameters = null;
            this.additionalParams = additionalParams;
        }

        public String getParameter(String name) {
            String[] strings = this.getParameterMap().get(name);
            if (strings != null) {
                return strings[0];
            }
            return super.getParameter(name);
        }

        public Map<String, String[]> getParameterMap() {
            if (this.allParameters == null) {
                this.allParameters = new HashMap<String, String[]>();
                this.allParameters.putAll(super.getParameterMap());
                this.allParameters.putAll(this.additionalParams);
            }
            return Collections.unmodifiableMap(this.allParameters);
        }

        public Enumeration<String> getParameterNames() {
            return Collections.enumeration(this.getParameterMap().keySet());
        }

        public String[] getParameterValues(String name) {
            return this.getParameterMap().get(name);
        }
    }

}