LogoutServlet.java 2.8 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.jcr.Session
 *  javax.servlet.ServletException
 *  javax.servlet.http.HttpServletRequest
 *  javax.servlet.http.HttpServletResponse
 *  javax.servlet.http.HttpServletResponseWrapper
 *  org.apache.sling.api.auth.Authenticator
 *  org.apache.sling.commons.json.JSONException
 *  org.apache.sling.commons.json.io.JSONWriter
 *  org.osgi.framework.BundleContext
 *  org.osgi.framework.ServiceReference
 *  org.slf4j.Logger
 */
package com.day.crx.delite.impl.servlets;

import com.day.crx.delite.impl.AbstractServlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import javax.jcr.Session;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import org.apache.sling.api.auth.Authenticator;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.io.JSONWriter;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.slf4j.Logger;

public class LogoutServlet
extends AbstractServlet {
    public LogoutServlet(BundleContext bc) {
        super(bc);
    }

    protected void doService(HttpServletRequest req, HttpServletResponse res, Session session) throws ServletException, IOException {
        this.logout(req, res);
        res.setStatus(200);
        res.setContentType("application/json");
        res.setCharacterEncoding("UTF-8");
        PrintWriter pw = res.getWriter();
        try {
            JSONWriter writer = new JSONWriter((Writer)pw);
            writer.object();
            writer.endObject();
        }
        catch (JSONException e) {
            this.logger.error("Error while retrieving infos: {}", (Object)e.toString());
            res.sendError(500);
        }
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    private void logout(HttpServletRequest request, HttpServletResponse response) {
        Authenticator auth;
        ServiceReference ref = this.bundleContext.getServiceReference(Authenticator.SERVICE_NAME);
        if (ref != null && (auth = (Authenticator)this.bundleContext.getService(ref)) != null) {
            try {
                auth.logout(request, (HttpServletResponse)new HttpServletResponseWrapper(response){

                    public void sendRedirect(String location) {
                    }

                    public void sendError(int sc) {
                    }

                    public void sendError(int sc, String msg) {
                    }
                });
                response.resetBuffer();
            }
            finally {
                this.bundleContext.ungetService(ref);
            }
        }
    }

}