You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by ch...@apache.org on 2013/03/13 11:55:22 UTC

svn commit: r1455882 - in /uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm: IServiceManager.java ServiceHandler.java ServiceManagerComponent.java

Author: challngr
Date: Wed Mar 13 10:55:21 2013
New Revision: 1455882

URL: http://svn.apache.org/r1455882
Log:
UIMA-2737
User validation - user must also own services he/she manipulates.

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceManager.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceManager.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceManager.java?rev=1455882&r1=1455881&r2=1455882&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceManager.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceManager.java Wed Mar 13 10:55:21 2013
@@ -56,4 +56,6 @@ public interface IServiceManager 
     public void publish(ServiceMap map);
 
     public DuccId newId() throws Exception;
+
+    public boolean isAdministrator(String user);
 }

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java?rev=1455882&r1=1455881&r2=1455882&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java Wed Mar 13 10:55:21 2013
@@ -734,11 +734,17 @@ public class ServiceHandler
         String epname = ev.getEndpoint();
         String serviceIdString = extractId(friendly, epname);
         ServiceSet sset = serviceStateHandler.getServiceForApi(friendly, epname);
-
         if ( sset == null ) {
             return new ServiceReplyEvent(false, "Service " + serviceIdString + " does not exist.", null, null);
         }
 
+        String userin = ev.getUser();
+        String userout = sset.getUser();
+
+        if ( !userin.equals(userout) && !serviceManager.isAdministrator(userin) ) {
+            return new ServiceReplyEvent(false, "Service " + serviceIdString + " Start declined: not owner.",  serviceIdString, null);
+        }
+
         if ( sset.isRegistered() ) {
             int running = sset.countImplementors();
             int instances = ev.getInstances();
@@ -819,11 +825,17 @@ public class ServiceHandler
         String epname = ev.getEndpoint();
         String serviceIdString = extractId(friendly, epname);
         ServiceSet sset = serviceStateHandler.getServiceForApi(friendly, epname);
-
         if ( sset == null ) {
             return new ServiceReplyEvent(false, "Service " + serviceIdString + " does not exist.", null, null);
         }
 
+        String userin = ev.getUser();
+        String userout = sset.getUser();
+
+        if ( !userin.equals(userout) && !serviceManager.isAdministrator(userin) ) {
+            return new ServiceReplyEvent(false, "Service " + serviceIdString + " Start declined: not owner.",  serviceIdString, null);
+        }
+
         if ( sset.isRegistered() ) {
             if ( (sset.countImplementors() == 0) && ( sset.isUimaAs()) ) {
                 return new ServiceReplyEvent(false, "Service " + serviceIdString + " is already stopped.", sset.getKey(), sset.getId());
@@ -953,11 +965,17 @@ public class ServiceHandler
         String epname = ev.getEndpoint();
         String serviceIdString = extractId(friendly, epname);
     	ServiceSet sset = serviceStateHandler.getServiceForApi(friendly, epname);
-        
         if ( sset == null ) {
             return new ServiceReplyEvent(false, "Unrecognized service ID[" + friendly + "] Endpoint[" + epname + "]", "?", null);
         }
 
+        String userin = ev.getUser();
+        String userout = sset.getUser();
+
+        if ( !userin.equals(userout) && !serviceManager.isAdministrator(userin) ) {
+            return new ServiceReplyEvent(false, "Service " + serviceIdString + " Start declined: not owner.",  serviceIdString, null);
+        }
+        
     	if ( sset.isRegistered() ) {            
             pendingRequests.add(new ApiHandler(ev, this));
 //             ApiHandler  apih = new ApiHandler(ev, this);
@@ -1006,11 +1024,17 @@ public class ServiceHandler
         String epname = ev.getEndpoint();
         String serviceIdString = extractId(friendly, epname);
         ServiceSet sset = serviceStateHandler.getServiceForApi(friendly, epname);
-
         if ( sset == null ) {
             return new ServiceReplyEvent(false, "Service " + serviceIdString + " does not exist.",  serviceIdString, null);
         }
 
+        String userin = ev.getUser();
+        String userout = sset.getUser();
+
+        if ( !userin.equals(userout) && !serviceManager.isAdministrator(userin) ) {
+            return new ServiceReplyEvent(false, "Service " + serviceIdString + " Unregister declined: not owner.",  serviceIdString, null);
+        }
+
         if ( sset.isRegistered() ) {            
             sset.deregister();          // just sets a flag so we know how to handle it when it starts to die
             pendingRequests.add(new ApiHandler(ev, this));

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java?rev=1455882&r1=1455881&r2=1455882&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java Wed Mar 13 10:55:21 2013
@@ -23,6 +23,7 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Properties;
 import java.util.UUID;
 
 import org.apache.camel.CamelContext;
@@ -106,6 +107,8 @@ public class ServiceManagerComponent 
     private boolean initialized = false;
     private boolean testmode = false;
 
+    Map<String, String> administrators = new HashMap<String, String>();
+
 	public ServiceManagerComponent(CamelContext context) 
     {
 		super("ServiceManager", context);
@@ -225,7 +228,33 @@ public class ServiceManagerComponent 
             initialized = true;
         }
     }
-	
+
+    void readAdministrators()
+    {
+    	String methodName = "readAdministrators";
+        File adminfile = new File(System.getProperty("DUCC_HOME") + "/resources/ducc.administrators");
+        if ( ! adminfile.exists() ) {
+            logger.info(methodName, null, "No ducc administrators found.");
+            return;
+        }
+        
+        Properties props = null;
+		try {
+			FileInputStream fis = new FileInputStream(adminfile);
+			props = new Properties();
+			props.load(fis);
+		} catch (Exception e) {
+            logger.warn(methodName, null, "Cannot read administroators file:", e.toString());
+            return;
+		}
+        
+        for ( Object k : props.keySet() ) {
+            String adm = ((String) k).trim();
+            administrators.put(adm, adm);
+            logger.info(methodName, null, "DUCC Administrator registered:", adm);
+        }
+    }
+
 	@Override
 	public void start(DuccService service, String[] args) throws Exception 
     {
@@ -267,6 +296,8 @@ public class ServiceManagerComponent 
         logger.info(methodName, null, "    DUCC Version            : ", Version.version());
         logger.info(methodName, null, "------------------------------------------------------------------------------------");
 
+        readAdministrators();
+
         // Here is a good place to do any pre-start stuff
 
         // Start the main processing loop
@@ -293,6 +324,11 @@ public class ServiceManagerComponent 
     	logger.info(methodName, null, "Service Manger returns.");
     }
 
+    public boolean isAdministrator(String user)
+    {
+        return administrators.containsKey(user);
+    }
+
     /**
      * At boot only ... pass in the set of all known active services to each service so it can update
      * internal state with current published state.