azkaban-aplcache

1. include confirmation of projectId and version after successful

2/24/2016 3:49:29 PM

Details

diff --git a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
index 4c8f025..fe8564d 100644
--- a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -25,6 +25,7 @@ import java.io.OutputStream;
 import java.io.Writer;
 import java.security.AccessControlException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
@@ -250,6 +251,14 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       if (handleAjaxPermission(project, user, Type.READ, ret)) {
         ajaxGetPermissions(project, ret);
       }
+    } else if (ajaxName.equals("getGroupPermissions")) {
+      if (handleAjaxPermission(project, user, Type.READ, ret)) {
+        ajaxGetGroupPermissions(project, ret);
+      }
+    } else if (ajaxName.equals("getProxyUsers")) {
+      if (handleAjaxPermission(project, user, Type.READ, ret)) {
+        ajaxGetProxyUsers(project, ret);
+      }
     } else if (ajaxName.equals("changePermission")) {
       if (handleAjaxPermission(project, user, Type.ADMIN, ret)) {
         ajaxChangePermissions(project, ret, req, user);
@@ -495,6 +504,10 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
           String.format("attachment; filename=\"%s\"",
               projectFileHandler.getFileName());
       resp.setHeader(headerKey, headerValue);
+      resp.setHeader("version",
+          Integer.toString(projectFileHandler.getVersion()));
+      resp.setHeader("projectId",
+          Integer.toString(projectFileHandler.getProjectId()));
 
       outStream = resp.getOutputStream();
 
@@ -522,11 +535,12 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
   }
 
   /**
-   * validate readiness of a project and user permission and use projectManager to purge the project
-   * if things looks good
+   * validate readiness of a project and user permission and use projectManager
+   * to purge the project if things looks good
    **/
-  private void handlePurgeProject(HttpServletRequest req, HttpServletResponse resp, Session session)
-          throws ServletException, IOException {
+  private void handlePurgeProject(HttpServletRequest req,
+      HttpServletResponse resp, Session session) throws ServletException,
+      IOException {
     User user = session.getUser();
     HashMap<String, Object> ret = new HashMap<String, Object>();
     boolean isOperationSuccessful = true;
@@ -536,9 +550,14 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       String projectParam = getParam(req, "project");
 
       if (StringUtils.isNumeric(projectParam)) {
-        project = projectManager.getProject(Integer.parseInt(projectParam)); // get project by Id
+        project = projectManager.getProject(Integer.parseInt(projectParam)); // get
+                                                                             // project
+                                                                             // by
+                                                                             // Id
       } else {
-        project = projectManager.getProject(projectParam); // get project by name (name cannot start
+        project = projectManager.getProject(projectParam); // get project by
+                                                           // name (name cannot
+                                                           // start
                                                            // from ints)
       }
 
@@ -549,14 +568,17 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
       }
 
       // project is already deleted
-      if (isOperationSuccessful && projectManager.isActiveProject(project.getId())) {
-        ret.put("error", "Project " + project.getName() + " should be deleted before purging");
+      if (isOperationSuccessful
+          && projectManager.isActiveProject(project.getId())) {
+        ret.put("error", "Project " + project.getName()
+            + " should be deleted before purging");
         isOperationSuccessful = false;
       }
 
       // only eligible users can purge a project
       if (isOperationSuccessful && !hasPermission(project, user, Type.ADMIN)) {
-        ret.put("error", "Cannot purge. User '" + user.getUserId() + "' is not an ADMIN.");
+        ret.put("error", "Cannot purge. User '" + user.getUserId()
+            + "' is not an ADMIN.");
         isOperationSuccessful = false;
       }
 
@@ -1017,6 +1039,13 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     }
   }
 
+  /**
+   * this only returns user permissions, but not group permissions and proxy
+   * users
+   * 
+   * @param project
+   * @param ret
+   */
   private void ajaxGetPermissions(Project project, HashMap<String, Object> ret) {
     ArrayList<HashMap<String, Object>> permissions =
         new ArrayList<HashMap<String, Object>>();
@@ -1032,6 +1061,27 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
     ret.put("permissions", permissions);
   }
 
+  private void ajaxGetGroupPermissions(Project project,
+      HashMap<String, Object> ret) {
+    ArrayList<HashMap<String, Object>> permissions =
+        new ArrayList<HashMap<String, Object>>();
+    for (Pair<String, Permission> perm : project.getGroupPermissions()) {
+      HashMap<String, Object> permObj = new HashMap<String, Object>();
+      String userId = perm.getFirst();
+      permObj.put("username", userId);
+      permObj.put("permission", perm.getSecond().toStringArray());
+
+      permissions.add(permObj);
+    }
+
+    ret.put("permissions", permissions);
+  }
+
+  private void ajaxGetProxyUsers(Project project, HashMap<String, Object> ret) {
+    String[] proxyUsers = project.getProxyUsers().toArray(new String[0]);
+    ret.put("proxyUsers", proxyUsers);
+  }
+
   private void handleProjectLogsPage(HttpServletRequest req,
       HttpServletResponse resp, Session session) throws ServletException,
       IOException {
@@ -1646,14 +1696,14 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
           if (!report.getInfoMsgs().isEmpty()) {
             for (String msg : report.getInfoMsgs()) {
               switch (ValidationReport.getInfoMsgLevel(msg)) {
-                case ERROR:
-                  errorMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
-                  break;
-                case WARN:
-                  warnMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
-                  break;
-                default:
-                  break;
+              case ERROR:
+                errorMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
+                break;
+              case WARN:
+                warnMsgs.append(ValidationReport.getInfoMsg(msg) + "<br/>");
+                break;
+              default:
+                break;
               }
             }
           }
@@ -1675,14 +1725,18 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
           }
         }
         if (errorMsgs.length() > 0) {
-          // If putting more than 4000 characters in the cookie, the entire message
+          // If putting more than 4000 characters in the cookie, the entire
+          // message
           // will somehow get discarded.
-          ret.put("error", errorMsgs.length() > 4000 ?
-              errorMsgs.substring(0, 4000) : errorMsgs.toString());
+          ret.put("error",
+              errorMsgs.length() > 4000 ? errorMsgs.substring(0, 4000)
+                  : errorMsgs.toString());
         }
         if (warnMsgs.length() > 0) {
-          ret.put("warn", warnMsgs.length() > 4000 ?
-              warnMsgs.substring(0, 4000) : warnMsgs.toString());
+          ret.put(
+              "warn",
+              warnMsgs.length() > 4000 ? warnMsgs.substring(0, 4000) : warnMsgs
+                  .toString());
         }
       } catch (Exception e) {
         logger.info("Installation Failed.", e);
@@ -1797,7 +1851,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
   }
 
   private void handleReloadProjectWhitelist(HttpServletRequest req,
-  HttpServletResponse resp, Session session) throws IOException {
+      HttpServletResponse resp, Session session) throws IOException {
     HashMap<String, Object> ret = new HashMap<String, Object>();
 
     if (hasPermission(session.getUser(), Permission.Type.ADMIN)) {
@@ -1805,10 +1859,13 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
         if (projectManager.loadProjectWhiteList()) {
           ret.put("success", "Project whitelist re-loaded!");
         } else {
-          ret.put("error", "azkaban.properties doesn't contain property " + ProjectWhitelist.XML_FILE_PARAM);
+          ret.put("error", "azkaban.properties doesn't contain property "
+              + ProjectWhitelist.XML_FILE_PARAM);
         }
-      } catch(Exception e) {
-        ret.put("error", "Exception occurred while trying to re-load project whitelist: " + e);
+      } catch (Exception e) {
+        ret.put("error",
+            "Exception occurred while trying to re-load project whitelist: "
+                + e);
       }
     } else {
       ret.put("error", "Provided session doesn't have admin privilege.");