package com.fourspaces.featherdb.httpd; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.JSONObject; import com.fourspaces.featherdb.auth.Credentials; import com.fourspaces.featherdb.views.AdHocViewRunner; import com.fourspaces.featherdb.views.ViewException; public class AdHocView extends BaseRequestHandler { @SuppressWarnings("unchecked") public void handleInner(Credentials credentials, HttpServletRequest request, HttpServletResponse response, String db, String id, String rev/*, String[] fields*/) throws IOException{ String line; StringBuilder sb = new StringBuilder(); BufferedReader reader = null; request.setCharacterEncoding("UTF-8"); try { reader = new BufferedReader(new InputStreamReader(request.getInputStream())); while ((line=reader.readLine())!=null) { log.debug(line); sb.append(line); sb.append("\n"); } } finally { if (reader!=null) { reader.close(); } } String src = sb.toString(); if (src!=null && src.length()>0) { try { sendJSONString(response, AdHocViewRunner.adHocView(featherDB,db,src)); } catch (ViewException e) { sendError(response,"View error",e.getMessage()); log.error("Error processing view code: {}",src,e); } } else { JSONObject status = new JSONObject(); status.put("db",db); status.put("view","_temp_view"); sendError(response, "View javascript source not sent",status,HttpServletResponse.SC_BAD_REQUEST); log.info("Bad adhoc view: {}",src); } } public boolean match(Credentials credentials, HttpServletRequest request, String db, String id) { return (db!=null && !db.startsWith("_") && id!=null && id.equals("_temp_view") && request.getMethod().equals("POST") && credentials.isAuthorizedRead(db)); } }