[Yanel-commits] rev 32501 - public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet

michi at wyona.com michi at wyona.com
Tue Feb 26 13:08:42 CET 2008


Author: michi
Date: 2008-02-26 13:08:42 +0100 (Tue, 26 Feb 2008)
New Revision: 32501

Modified:
   public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
Log:
policy loading fixed

Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2008-02-26 11:45:37 UTC (rev 32500)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2008-02-26 12:08:42 UTC (rev 32501)
@@ -15,6 +15,7 @@
 import java.util.Calendar;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.Vector;
 
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
@@ -2206,9 +2207,8 @@
                     response.setContentType("application/xml; charset=" + DEFAULT_ENCODING);
                     sb.append(getIdentitiesAndRightsAsXML(resource.getRealm().getIdentityManager(), resource.getRealm().getPolicyManager()));
                 } else if (getXML != null && getXML.equals("policy")) {
-                    log.error("Get policy not implemented yet!");
                     response.setContentType("application/xml; charset=" + DEFAULT_ENCODING);
-                    sb.append("<hello/>");
+                    sb.append(getPolicyAsXML(resource.getRealm().getPolicyManager(), resource.getPath()));
                 } else {
                     response.setContentType("text/html; charset=" + DEFAULT_ENCODING);
                     sb.append("<html><body><h1>Update Access Policy</h1><p><script language=\"javascript\">var getURLs = {\"identities-url\": \"../.." + resource.getPath() + "?yanel.policy=update&get=identities\", \"policy-url\": \"../.." + resource.getPath() + "?yanel.policy=update&get=policy\"};</script><script language=\"javascript\" src=\"" + backToRealm + reservedPrefix + "/org.wyona.yanel.gwt.accesspolicyeditor.AccessPolicyEditor/org.wyona.yanel.gwt.accesspolicyeditor.AccessPolicyEditor.nocache.js\"></script></p></body></html>");
@@ -2287,12 +2287,114 @@
      *
      */
     private String getIdentitiesAndRightsAsXML(IdentityManager im, PolicyManager pm) {
+        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\">");
-        sb.append("<users>");
-        sb.append("<user id=\"hugo\">HUGO</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>");
+
+            // TODO: Implement rights
+            sb.append("<rights>");
+            sb.append("<right id=\"view\">Read</right>");
+            sb.append("<right id=\"write\">Write</right>");
+            sb.append("<right id=\"toolbar\">Toolbar</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) {
+
+        StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
+        sb.append("<policy xmlns=\"http://www.wyona.org/security/1.0\">");
+
+        try {
+            Policy policy = pm.getPolicy(path, true);
+            sb.append(getPolicyIdentities(policy));
+        } catch(Exception e) {
+            log.error(e, e);
+            sb.append("<exception>" + e.getMessage() + "</exception>");
+        }
+
+        sb.append("</policy>");
+        return sb.toString();
+    }
+
+    /**
+     * Get policy as XHTML list ordered by identities
+     */
+    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++) {
+                Identity[] ids = up[i].getIdentities();
+                for (int j = 0; j < ids.length; j++) {
+                    if (ids[j].isWorld()) {
+                        world.add(up[i].getName());
+                    } else {
+                        Vector userRights;
+                        if ((userRights = (Vector) users.get(ids[j].getUsername())) != null) {
+                            log.debug("User has already been added: " + ids[j].getUsername());
+                        } else {
+                            userRights = new Vector();
+                            users.put(ids[j].getUsername(), userRights);
+                        }
+                        userRights.add(up[i].getName());
+                    }
+                }
+            }
+        } else {
+            log.warn("No policy usecases!");
+        }
+
+        StringBuffer sb = new StringBuffer();
+        //sb.append("<li>WORLD (" + getCommaSeparatedList(world) + ")</li>");
+
+        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++) {
+            sb.append("<right id=\"" + (String) rights.elementAt(k) + "\"/>");
+            }
+            sb.append("</user>");
+        }
+
+/*
+        for (int i = 0; i < groups.length; i++) {
+            sb.append("<li>Group: ... (...)</li>");
+        }
+*/
+/*
+        for (int i = 0; i < hosts.length; i++) {
+            sb.append("<li>Host: 192.168.1.34 (view, open, write)</li>");
+        }
+*/
+        return sb;
+    }
 }



More information about the Yanel-commits mailing list