diff --git a/azkaban-common/src/main/java/azkaban/trigger/TriggerManager.java b/azkaban-common/src/main/java/azkaban/trigger/TriggerManager.java
index 97e858c..e825202 100644
--- a/azkaban-common/src/main/java/azkaban/trigger/TriggerManager.java
+++ b/azkaban-common/src/main/java/azkaban/trigger/TriggerManager.java
@@ -60,7 +60,7 @@ public class TriggerManager extends EventHandler implements
private final Object syncObj = new Object();
private String scannerStage = "";
-
+
public TriggerManager(Props props, TriggerLoader triggerLoader,
ExecutorManager executorManager) throws TriggerManagerException {
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 fe8564d..4323d46 100644
--- a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
+++ b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ProjectManagerServlet.java
@@ -89,7 +89,9 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
new NodeLevelComparator();
private static final String LOCKDOWN_CREATE_PROJECTS_KEY =
"lockdown.create.projects";
-
+ private static final String LOCKDOWN_UPLOAD_PROJECTS_KEY =
+ "lockdown.upload.projects";
+
private static final String PROJECT_DOWNLOAD_BUFFER_SIZE_IN_BYTES =
"project.download.buffer.size";
@@ -100,6 +102,7 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
private int downloadBufferSize;
private boolean lockdownCreateProjects = false;
+ private boolean lockdownUploadProjects = false;
private static Comparator<Flow> FLOW_ID_COMPARATOR = new Comparator<Flow>() {
@Override
@@ -122,7 +125,13 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
if (lockdownCreateProjects) {
logger.info("Creation of projects is locked down");
}
-
+
+ lockdownUploadProjects =
+ server.getServerProps().getBoolean(LOCKDOWN_UPLOAD_PROJECTS_KEY, false);
+ if (lockdownUploadProjects) {
+ logger.info("Uploading of projects is locked down");
+ }
+
downloadBufferSize =
server.getServerProps().getInt(PROJECT_DOWNLOAD_BUFFER_SIZE_IN_BYTES,
8192);
@@ -1606,7 +1615,10 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
String message = null;
HashMap<String, Object> params = null;
- if (lockdownCreateProjects && !hasPermissionToCreateProject(user)) {
+ if (lockdownCreateProjects) {
+ message = "Project creation is locked out";
+ status = "error";
+ } else if (!hasPermissionToCreateProject(user)) {
message =
"User " + user.getUserId()
+ " doesn't have permission to create projects.";
@@ -1649,7 +1661,9 @@ public class ProjectManagerServlet extends LoginAbstractAzkabanServlet {
props.put(ValidatorConfigs.CUSTOM_AUTO_FIX_FLAG_PARAM, "true");
}
- if (projectName == null || projectName.isEmpty()) {
+ if (lockdownUploadProjects) {
+ ret.put("error", "project uploading is locked out");
+ } else if (projectName == null || projectName.isEmpty()) {
ret.put("error", "No project name found.");
} else if (project == null) {
ret.put("error", "Installation Failed. Project '" + projectName