[Yanel-commits] rev 35450 - public/yanel/trunk/src/contributions/resources/policymanager/src/java/org/wyona/yanel/impl/resources/policymanager

michi at wyona.com michi at wyona.com
Tue Apr 15 12:07:56 CEST 2008


Author: michi
Date: 2008-04-15 12:07:55 +0200 (Tue, 15 Apr 2008)
New Revision: 35450

Modified:
   public/yanel/trunk/src/contributions/resources/policymanager/src/java/org/wyona/yanel/impl/resources/policymanager/PolicyManagerResource.java
Log:
also editing of policies implemented

Modified: public/yanel/trunk/src/contributions/resources/policymanager/src/java/org/wyona/yanel/impl/resources/policymanager/PolicyManagerResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/policymanager/src/java/org/wyona/yanel/impl/resources/policymanager/PolicyManagerResource.java	2008-04-15 09:47:41 UTC (rev 35449)
+++ public/yanel/trunk/src/contributions/resources/policymanager/src/java/org/wyona/yanel/impl/resources/policymanager/PolicyManagerResource.java	2008-04-15 10:07:55 UTC (rev 35450)
@@ -9,6 +9,8 @@
 import org.wyona.security.core.api.PolicyManager;
 import org.wyona.security.core.api.User;
 import org.wyona.yanel.core.Resource;
+import org.wyona.yanel.core.attributes.viewable.View;
+import org.wyona.yanel.core.util.PathUtil;
 import org.wyona.yanel.impl.resources.BasicXMLResource;
 
 import java.io.ByteArrayInputStream;
@@ -27,6 +29,28 @@
     
     private static String PARAMETER_EDIT_PATH = "policy-path";
     private static String PARAMETER_USECASE = "yanel.policy";
+
+    private static String DEFAULT_ENCODING = "UTF-8";
+
+    /**
+     * See src/webapp/global-resource-configs/policy-manager_yanel-rc.xml or realm specific
+     */
+    public View getView(String viewId) throws Exception {
+        String policyRequestPara = getEnvironment().getRequest().getParameter("yanel.policy");
+	if (policyRequestPara.equals("update")) {
+            String getXML = getEnvironment().getRequest().getParameter("get");
+            String postXML = getEnvironment().getRequest().getParameter("post");
+            if (getXML != null) {
+                viewId = "get-xml";
+            } else if (postXML != null) {
+                viewId = "post-xml";
+            } else {
+                viewId = "editor";
+            }
+        }
+        // otherwise 'default" viewId is used
+        return getXMLView(viewId, getContentXML(viewId));
+    }
     
     /**
      *
@@ -66,38 +90,55 @@
                 if (showTabsParam != null) showTabs = new java.lang.Boolean(showTabsParam).booleanValue();
 
                 sb.append(PolicyViewer.getXHTMLView(getRealm().getPolicyManager(), getRealm().getIdentityManager().getGroupManager(), getPath(), null, orderedBy, showParents, showTabs));
-        } else if (policyUsecase.equals("update")) {
+	    } else if (policyUsecase.equals("update")) {
                 String getXML = request.getParameter("get");
                 String postXML = request.getParameter("post");
                 if (getXML != null && getXML.equals("identities")) {
+                    //response.setContentType("application/xml; charset=" + DEFAULT_ENCODING);
                     sb.append(getIdentitiesAndRightsAsXML(getRealm().getIdentityManager(), getRealm().getPolicyManager(), getRequestedLanguage()));
                 } else if (getXML != null && getXML.equals("policy")) {
+                    //response.setContentType("application/xml; charset=" + DEFAULT_ENCODING);
                     sb.append(getPolicyAsXML(getRealm().getPolicyManager(), getPath()));
                 } else if (postXML != null && postXML.equals("policy")) {
+                    //response.setContentType("application/xml; charset=" + DEFAULT_ENCODING);
                     try {
-                        writePolicy(request.getInputStream(), getRealm().getPolicyManager(), getPath());
+                        writePolicy(getRequest().getInputStream(), getRealm().getPolicyManager(), getPath());
                         sb.append("<?xml version=\"1.0\"?><saved/>");
                     } catch(Exception e) {
                         log.error(e,e);
+                        //response.setStatus(response.SC_NOT_IMPLEMENTED);
+                        log.warn("TODO: Fix HTTP status code: " + response.SC_NOT_IMPLEMENTED);
                         sb.append("<?xml version=\"1.0\"?><not-saved>" + e.getMessage() + "</not-saved>");
                     }
                 } else {
-                    String identitiesURL = "../.." + getPath() + "?policy-path=" + policyPath + "&amp;yanel.policy=update&amp;get=identities";
-                    //String saveURL = "../.." + getPath() + "?yanel.policy=update&post=policy";
-                    String saveURL = "?policy-path=" + policyPath + "&amp;yanel.policy=update&amp;post=policy";
+                    //response.setContentType("text/html; charset=" + DEFAULT_ENCODING);
+                    String identitiesURL = "../.." + getPath() + "?yanel.policy=update&amp;get=identities";
+                    String policyURL = "../.." + getPath() + "?yanel.policy=update&amp;get=policy";
+                    //String saveURL = "../.." + getPath() + "?yanel.policy=update&amp;post=policy";
+                    String saveURL = "?yanel.policy=update&amp;post=policy"; // This doesn't seem to work with all browsers!
                     String cancelURL = org.wyona.commons.io.PathUtil.getName(getPath());
                     if (getPath().endsWith("/")) cancelURL = "./";
+                    if (request.getParameter("cancel-url") != null) {
+                        cancelURL = request.getParameter("cancel-url");
+                    }
 
                     sb.append("<?xml version=\"1.0\"?>");
                     sb.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
                     sb.append("<head>");
                     sb.append("<title>Update Access Policy</title>");
-                    sb.append("<link rel=\"stylesheet\" href=\"" + backToRealm + getYanel().getReservedPrefix() + "/org.wyona.security.gwt.accesspolicyeditor.AccessPolicyEditor/style.css\" type=\"text/css\"/>");
+
+		    sb.append("<link rel=\"stylesheet\" href=\"" + PathUtil.getResourcesHtdocsPath(this) + "js/accesspolicyeditor/style.css\" type=\"text/css\"/>");
+
+                    sb.append("<script language=\"javascript\">var getURLs = {\"identities-url\": \"" + identitiesURL + "\", \"policy-url\": \"" + policyURL + "\", \"cancel-url\": \"" + cancelURL + "\", \"save-url\": \"" + saveURL + "\"};</script><script language=\"javascript\" src=\"" +  PathUtil.getResourcesHtdocsPath(this) + "js/accesspolicyeditor/org.wyona.security.gwt.accesspolicyeditor.AccessPolicyEditor.nocache.js\"></script>");
+
                     sb.append("</head>");
-                    sb.append("<body><h1>Update Access Policy</h1><p><script language=\"javascript\">var getURLs = {\"identities-url\": \"" + identitiesURL + "\", \"policy-url\": \"../.." + getPath() + "?policy-path=" + policyPath + "&amp;yanel.policy=update&amp;get=policy\", \"cancel-url\": \"" + cancelURL + "\", \"save-url\": \"" + saveURL + "\"};</script><script language=\"javascript\" src=\"" + backToRealm + getYanel().getReservedPrefix() + "/org.wyona.security.gwt.accesspolicyeditor.AccessPolicyEditor/org.wyona.security.gwt.accesspolicyeditor.AccessPolicyEditor.nocache.js\"></script></p></body></html>");
+                    sb.append("<body><h1>Update Access Policy</h1><p><div id=\"access-policy-editor-hook\"></div></p></body></html>");
                 }
             } else {
-                sb.append("<html xmlns=\"http://www.w3.org/1999/xhtml\"><body>Policy usecase not implemented yet: " + policyUsecase + "</body></html>");
+                //response.setContentType("text/html; charset=" + DEFAULT_ENCODING);
+                //response.setStatus(response.SC_NOT_IMPLEMENTED);
+                sb.append("<html><body>Policy usecase not implemented yet: " + policyUsecase + "</body></html>");
+                log.error("Policy usecase not implemented yet: " + policyUsecase);
             }
         } catch(Exception e) {
             log.error(e, e);
@@ -107,172 +148,171 @@
     }
     
     /**
-    *
-    */
-   private String getIdentitiesAndRightsAsXML(IdentityManager im, PolicyManager pm, String language) {
-       org.wyona.security.core.api.UserManager um = im.getUserManager();
-       org.wyona.security.core.api.GroupManager gm = im.getGroupManager();
+     *
+     */
+    private String getIdentitiesAndRightsAsXML(IdentityManager im, PolicyManager pm, String language) {
+        org.wyona.security.core.api.UserManager um = im.getUserManager();
+        org.wyona.security.core.api.GroupManager gm = im.getGroupManager();
 
-       StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
-       sb.append("<access-control xmlns=\"http://www.wyona.org/security/1.0\">");
+        StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
+        sb.append("<access-control xmlns=\"http://www.wyona.org/security/1.0\">");
 
-       try {
-           User[] users = um.getUsers();
-           sb.append("<users>");
-           for (int i = 0; i < users.length; i++) {
-               sb.append("<user id=\"" + users[i].getID() + "\">" + users[i].getName() + "</user>");
-           }
-           sb.append("</users>");
+        try {
+            User[] users = um.getUsers();
+            sb.append("<users>");
+            for (int i = 0; i < users.length; i++) {
+                sb.append("<user id=\"" + users[i].getID() + "\">" + users[i].getName() + "</user>");
+            }
+            sb.append("</users>");
 
-           org.wyona.security.core.api.Group[] groups = gm.getGroups();
-           sb.append("<groups>");
-           for (int i = 0; i < groups.length; i++) {
-               sb.append("<group id=\"" + groups[i].getID() + "\">" + groups[i].getName() + "</group>");
-           }
-           sb.append("</groups>");
+            org.wyona.security.core.api.Group[] groups = gm.getGroups();
+            sb.append("<groups>");
+            for (int i = 0; i < groups.length; i++) {
+                sb.append("<group id=\"" + groups[i].getID() + "\">" + groups[i].getName() + "</group>");
+            }
+            sb.append("</groups>");
 
-           sb.append("<rights>");
-           String[] rights = pm.getUsecases();
-           if (rights != null) {
-               for (int i = 0; i < rights.length; i++) {
-                   sb.append("<right id=\"" + rights[i] + "\">" + pm.getUsecaseLabel(rights[i], language) + "</right>");
-               }
-           }
-           sb.append("</rights>");
-       } catch (Exception e) {
-           log.error(e, e);
-           sb.append("<exception>" + e.getMessage() + "</exception>");
-       }
-       sb.append("</access-control>");
-       return sb.toString();
-   }
-   
-   /**
-   *
-   */
-  private String getPolicyAsXML(PolicyManager pm, String path) {
+            sb.append("<rights>");
+            String[] rights = pm.getUsecases();
+            if (rights != null) {
+                for (int i = 0; i < rights.length; i++) {
+                    sb.append("<right id=\"" + rights[i] + "\">" + pm.getUsecaseLabel(rights[i], language) + "</right>");
+                }
+            }
+            sb.append("</rights>");
+        } catch (Exception e) {
+            log.error(e, e);
+            sb.append("<exception>" + e.getMessage() + "</exception>");
+        }
+        sb.append("</access-control>");
+        return sb.toString();
+    }
 
-      StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
+    /**
+     *
+     */
+    private String getPolicyAsXML(PolicyManager pm, String path) {
 
-      try {
-          Policy policy = pm.getPolicy(path, false);
-          if (policy == null) {
-              sb.append("<policy xmlns=\"http://www.wyona.org/security/1.0\" use-inherited-policies=\"false\">");
-              log.warn("No policy yet for path: " + path + " (Return empty policy)");
-          } else {
-              sb.append("<policy xmlns=\"http://www.wyona.org/security/1.0\" use-inherited-policies=\"" + policy.useInheritedPolicies() + "\">");
-              sb.append(getPolicyIdentities(policy));
-              sb.append(getPolicyGroups(policy));
-          }
-      } catch(Exception e) {
-          log.error(e, e);
-          sb.append("<policy xmlns=\"http://www.wyona.org/security/1.0\">");
-          sb.append("<exception>" + e.getMessage() + "</exception>");
-      }
+        StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
 
-      sb.append("</policy>");
-      return sb.toString();
-  }
-  
-  /**
-   * Get users (TODO: Move this code into the security package)
-   */
-  static public StringBuffer getPolicyIdentities(Policy p) {
-      Vector world = new Vector();
-      java.util.HashMap users = new java.util.HashMap();
-      org.wyona.security.core.UsecasePolicy[] up = p.getUsecasePolicies();
-      if (up != null && up.length > 0) {
-          for (int i = 0; i < up.length; i++) {
-              org.wyona.security.core.IdentityPolicy[] idps = up[i].getIdentityPolicies();
-              for (int j = 0; j < idps.length; j++) {
-                  //log.debug("Usecase Identity Policy: " + up[i].getName() + ", " + idps[j].getIdentity().getUsername() + ", " + idps[j].getPermission());
+        try {
+            Policy policy = pm.getPolicy(path, false);
+            if (policy == null) {
+                sb.append("<policy xmlns=\"http://www.wyona.org/security/1.0\" use-inherited-policies=\"false\">");
+                log.warn("No policy yet for path: " + path + " (Return empty policy)");
+            } else {
+                sb.append("<policy xmlns=\"http://www.wyona.org/security/1.0\" use-inherited-policies=\"" + policy.useInheritedPolicies() + "\">");
+                sb.append(getPolicyIdentities(policy));
+                sb.append(getPolicyGroups(policy));
+            }
+        } catch(Exception e) {
+            log.error(e, e);
+            sb.append("<policy xmlns=\"http://www.wyona.org/security/1.0\">");
+            sb.append("<exception>" + e.getMessage() + "</exception>");
+        }
 
-                  if (idps[j].getIdentity().isWorld()) {
-                      world.add(up[i].getName());
-                  } else {
-                      Vector userRights;
-                      if ((userRights = (Vector) users.get(idps[j].getIdentity().getUsername())) != null) {
-                          log.debug("User has already been added: " + idps[j].getIdentity().getUsername());
-                      } else {
-                          userRights = new Vector();
-                          users.put(idps[j].getIdentity().getUsername(), userRights);
-                      }
-                      if (idps[j].getPermission()) {
-                          userRights.add(up[i].getName());
-                      }
-                  }
-              }
-          }
-      } else {
-          log.warn("No policy usecases!");
-      }
+        sb.append("</policy>");
+        return sb.toString();
+    }
 
-      StringBuffer sb = new StringBuffer();
-      //sb.append("<li>WORLD (" + getCommaSeparatedList(world) + ")</li>");
+    /**
+     * Get users (TODO: Move this code into the security package)
+     */
+    static public StringBuffer getPolicyIdentities(Policy p) {
+        Vector world = new Vector();
+        java.util.HashMap users = new java.util.HashMap();
+        org.wyona.security.core.UsecasePolicy[] up = p.getUsecasePolicies();
+        if (up != null && up.length > 0) {
+            for (int i = 0; i < up.length; i++) {
+                org.wyona.security.core.IdentityPolicy[] idps = up[i].getIdentityPolicies();
+                for (int j = 0; j < idps.length; j++) {
+                    //log.debug("Usecase Identity Policy: " + up[i].getName() + ", " + idps[j].getIdentity().getUsername() + ", " + idps[j].getPermission());
 
-      java.util.Iterator userIterator = users.keySet().iterator();
-      while (userIterator.hasNext()) {
-          String userName = (String) userIterator.next();
-          sb.append("<user id=\""+userName+"\">");
-          Vector rights = (Vector) users.get(userName);
-          for (int k = 0; k < rights.size(); k++) {
-              // TODO: Do not hardcode permission
-              sb.append("<right id=\"" + (String) rights.elementAt(k) + "\" permission=\"true\"/>");
-          }
-          sb.append("</user>");
-      }
-      return sb;
-  }
+                    if (idps[j].getIdentity().isWorld()) {
+                        world.add(up[i].getName());
+                    } else {
+                        Vector userRights;
+                        if ((userRights = (Vector) users.get(idps[j].getIdentity().getUsername())) != null) {
+                            log.debug("User has already been added: " + idps[j].getIdentity().getUsername());
+                        } else {
+                            userRights = new Vector();
+                            users.put(idps[j].getIdentity().getUsername(), userRights);
+                        }
+                        if (idps[j].getPermission()) {
+                            userRights.add(up[i].getName());
+                        }
+                    }
+                }
+            }
+        } else {
+            log.warn("No policy usecases!");
+        }
 
-  /**
-   * Get groups (TODO: Move this code into the security package)
-   */
-  static public StringBuffer getPolicyGroups(Policy p) {
-      Vector world = new Vector();
-      java.util.HashMap groups = new java.util.HashMap();
-      org.wyona.security.core.UsecasePolicy[] up = p.getUsecasePolicies();
-      if (up != null && up.length > 0) {
-          for (int i = 0; i < up.length; i++) {
-              org.wyona.security.core.GroupPolicy[] ids = up[i].getGroupPolicies();
-              for (int j = 0; j < ids.length; j++) {
-                  Vector groupRights;
-                  if ((groupRights = (Vector) groups.get(ids[j].getId())) != null) {
-                      log.debug("Group has already been added: " + ids[j].getId());
-                  } else {
-                      groupRights = new Vector();
-                      groups.put(ids[j].getId(), groupRights);
-                  }
-                  if (ids[j].getPermission()) {
-                      groupRights.add(up[i].getName());
-                  }
-              }
-          }
-      } else {
-          log.warn("No policy usecases!");
-      }
+        StringBuffer sb = new StringBuffer();
+        //sb.append("<li>WORLD (" + getCommaSeparatedList(world) + ")</li>");
 
-      StringBuffer sb = new StringBuffer();
+        java.util.Iterator userIterator = users.keySet().iterator();
+        while (userIterator.hasNext()) {
+            String userName = (String) userIterator.next();
+            sb.append("<user id=\""+userName+"\">");
+            Vector rights = (Vector) users.get(userName);
+            for (int k = 0; k < rights.size(); k++) {
+                // TODO: Do not hardcode permission
+                sb.append("<right id=\"" + (String) rights.elementAt(k) + "\" permission=\"true\"/>");
+            }
+            sb.append("</user>");
+        }
+        return sb;
+    }
 
-      java.util.Iterator userIterator = groups.keySet().iterator();
-      while (userIterator.hasNext()) {
-          String userName = (String) userIterator.next();
-          sb.append("<group id=\""+userName+"\">");
-          Vector rights = (Vector) groups.get(userName);
-          for (int k = 0; k < rights.size(); k++) {
-              //TODO: Do not hardcode permission!
-              sb.append("<right id=\"" + (String) rights.elementAt(k) + "\" permission=\"true\"/>");
-          }
-          sb.append("</group>");
-      }
-      return sb;
-  }
+    /**
+     * Get groups (TODO: Move this code into the security package)
+     */
+    static public StringBuffer getPolicyGroups(Policy p) {
+        Vector world = new Vector();
+        java.util.HashMap groups = new java.util.HashMap();
+        org.wyona.security.core.UsecasePolicy[] up = p.getUsecasePolicies();
+        if (up != null && up.length > 0) {
+            for (int i = 0; i < up.length; i++) {
+                org.wyona.security.core.GroupPolicy[] ids = up[i].getGroupPolicies();
+                for (int j = 0; j < ids.length; j++) {
+                    Vector groupRights;
+                    if ((groupRights = (Vector) groups.get(ids[j].getId())) != null) {
+                        log.debug("Group has already been added: " + ids[j].getId());
+                    } else {
+                        groupRights = new Vector();
+                        groups.put(ids[j].getId(), groupRights);
+                    }
+                    if (ids[j].getPermission()) {
+                        groupRights.add(up[i].getName());
+                    }
+                }
+            }
+        } else {
+            log.warn("No policy usecases!");
+        }
 
-  /**
-   * Write/Save policy
-   */
-  private void writePolicy(InputStream policyAsInputStream, PolicyManager pm, String path) throws Exception {
-      Policy policy = new org.wyona.security.util.PolicyParser().parseXML(policyAsInputStream);
-      pm.setPolicy(path, policy);
-  }
-  
+        StringBuffer sb = new StringBuffer();
+
+        java.util.Iterator userIterator = groups.keySet().iterator();
+        while (userIterator.hasNext()) {
+            String userName = (String) userIterator.next();
+            sb.append("<group id=\""+userName+"\">");
+            Vector rights = (Vector) groups.get(userName);
+            for (int k = 0; k < rights.size(); k++) {
+                //TODO: Do not hardcode permission!
+                sb.append("<right id=\"" + (String) rights.elementAt(k) + "\" permission=\"true\"/>");
+            }
+            sb.append("</group>");
+        }
+        return sb;
+    }
+
+    /**
+     * Write/Save policy
+     */
+    private void writePolicy(InputStream policyAsInputStream, PolicyManager pm, String path) throws Exception {
+        Policy policy = new org.wyona.security.util.PolicyParser().parseXML(policyAsInputStream);
+        pm.setPolicy(path, policy);
+    }
 }



More information about the Yanel-commits mailing list