InitServlet.java 5.07 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.jcr.Node
 *  javax.jcr.Property
 *  javax.jcr.Repository
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  javax.jcr.Workspace
 *  javax.servlet.ServletException
 *  javax.servlet.http.HttpServletRequest
 *  javax.servlet.http.HttpServletResponse
 *  org.apache.jackrabbit.api.JackrabbitSession
 *  org.apache.jackrabbit.api.security.user.Authorizable
 *  org.apache.jackrabbit.api.security.user.UserManager
 *  org.apache.sling.commons.json.io.JSONWriter
 *  org.osgi.framework.BundleContext
 *  org.slf4j.Logger
 */
package com.day.crx.packmgr.impl.servlets;

import com.day.crx.packmgr.impl.AbstractServlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Arrays;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Workspace;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.jackrabbit.api.security.user.Authorizable;
import org.apache.jackrabbit.api.security.user.UserManager;
import org.apache.sling.commons.json.io.JSONWriter;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;

public class InitServlet
extends AbstractServlet {
    private static final String USER_PROFILE_PATH = "profile";
    private static final String DISPLAY_NAME = "displayName";
    private static final String GIVEN_NAME = "givenName";
    private static final String MIDDLE_NAME = "middleName";
    private static final String FAMILY_NAME = "familyName";

    public InitServlet(BundleContext bc) {
        super(bc);
    }

    @Override
    protected void doService(HttpServletRequest req, HttpServletResponse res, Session session) throws ServletException, IOException {
        res.setContentType("application/json");
        res.setCharacterEncoding("UTF-8");
        PrintWriter pw = res.getWriter();
        try {
            JSONWriter writer = new JSONWriter((Writer)pw);
            writer.object();
            writer.key("contextPath").value((Object)(req.getContextPath() + "/crx"));
            writer.key("launchpadContextPath").value((Object)(req.getContextPath() + "/"));
            String jcrVersion = session.getRepository().getDescriptor("jcr.specification.version");
            writer.key("jcrVersion").value((Object)jcrVersion);
            writer.key("workspace").value((Object)session.getWorkspace().getName());
            writer.key("userID").value((Object)this.getFormattedName(session));
            Object[] ws = session.getWorkspace().getAccessibleWorkspaceNames();
            Arrays.sort(ws);
            writer.key("workspaces").array();
            for (Object w : ws) {
                writer.value(w);
            }
            writer.endArray();
            writer.endObject();
        }
        catch (Exception e) {
            this.logger.error("Error while retrieving infos: {}", (Object)e.toString());
            res.sendError(500);
        }
    }

    private String getFormattedName(Session session) {
        String formattedName = session.getUserID();
        if (session instanceof JackrabbitSession) {
            JackrabbitSession jcrSession = (JackrabbitSession)session;
            try {
                String userPath = jcrSession.getUserManager().getAuthorizable(session.getUserID()).getPath();
                Node userNode = session.getNode(userPath);
                if (userNode.hasNode("profile")) {
                    Node profileNode = userNode.getNode("profile");
                    String displayName = this.getProperty(profileNode, "displayName");
                    if (displayName == "") {
                        StringBuilder stringBuilder = new StringBuilder();
                        InitServlet.append(stringBuilder, this.getProperty(profileNode, "givenName"));
                        InitServlet.append(stringBuilder, this.getProperty(profileNode, "middleName"));
                        InitServlet.append(stringBuilder, this.getProperty(profileNode, "familyName"));
                        displayName = stringBuilder.toString();
                    }
                    formattedName = displayName;
                }
            }
            catch (RepositoryException e) {
                this.logger.error("Could not fetch user id");
            }
        }
        return formattedName;
    }

    private String getProperty(Node node, String prop) {
        String result = "";
        try {
            if (node.hasProperty(prop)) {
                return node.getProperty(prop).getString();
            }
        }
        catch (RepositoryException e) {
            // empty catch block
        }
        return result;
    }

    private static void append(StringBuilder formatted, String prop) {
        if (prop != null && prop.length() > 0) {
            if (formatted.length() > 0) {
                formatted.append(" ");
            }
            formatted.append(prop);
        }
    }
}