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

michi at wyona.com michi at wyona.com
Tue Apr 15 23:15:14 CEST 2008


Author: michi
Date: 2008-04-15 23:15:14 +0200 (Tue, 15 Apr 2008)
New Revision: 35489

Modified:
   public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
Log:
move the whole policy management source into the policy resource

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-04-15 21:14:12 UTC (rev 35488)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2008-04-15 21:15:14 UTC (rev 35489)
@@ -2154,83 +2154,28 @@
     }
 
     /**
-     * Handle access policy requests (CRUD)
+     * Handle access policy requests (CRUD, whereas delete is not implemented yet!)
      */
     private void doAccessPolicyRequest(HttpServletRequest request, HttpServletResponse response, String usecase)  throws ServletException, IOException {
-        Resource resource = getResource(request, response);
-        String backToRealm = org.wyona.yanel.core.util.PathUtil.backToRealm(resource.getPath());
-        StringBuffer sb = new StringBuffer("");
         try {
             String viewId = request.getParameter(VIEW_ID_PARAM_NAME);
-            if (usecase.equals("read")) {
-                Realm realm = map.getRealm(request.getServletPath());
-                String path = map.getPath(realm, request.getServletPath());
-
-                File pmrcGlobalFile = getGlobalResourceConfiguration("policy-manager_yanel-rc.xml", realm);
-                Resource policyManagerResource = yanel.getResourceManager().getResource(getEnvironment(request, response), realm, path, new ResourceConfiguration(new java.io.FileInputStream(pmrcGlobalFile)));
-                View view = ((ViewableV2) policyManagerResource).getView(viewId);
-                if (view != null) {
-                    if (generateResponse(view, policyManagerResource, request, response, getDocument(NAMESPACE, "yanel"), -1, -1) != null) return;
-                }
-                log.error("Something went wrong!");
-                return;
-	    } else if (usecase.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);
-                    response.setStatus(response.SC_OK);
-                    sb.append(getIdentitiesAndRightsAsXML(resource.getRealm().getIdentityManager(), resource.getRealm().getPolicyManager(), getLanguage(request)));
-                } else if (getXML != null && getXML.equals("policy")) {
-                    response.setContentType("application/xml; charset=" + DEFAULT_ENCODING);
-                    response.setStatus(response.SC_OK);
-                    sb.append(getPolicyAsXML(resource.getRealm().getPolicyManager(), resource.getPath()));
-                } else if (postXML != null && postXML.equals("policy")) {
-                    response.setContentType("application/xml; charset=" + DEFAULT_ENCODING);
-                    try {
-                        writePolicy(request.getInputStream(), resource.getRealm().getPolicyManager(), resource.getPath());
-                        response.setStatus(response.SC_OK);
-                        sb.append("<?xml version=\"1.0\"?><saved/>");
-                    } catch(Exception e) {
-                        log.error(e,e);
-                        response.setStatus(response.SC_NOT_IMPLEMENTED);
-                        sb.append("<?xml version=\"1.0\"?><not-saved>" + e.getMessage() + "</not-saved>");
-                    }
-                } else {
-                    response.setContentType("text/html; charset=" + DEFAULT_ENCODING);
-                    response.setStatus(response.SC_OK);
-                    String identitiesURL = "../.." + resource.getPath() + "?yanel.policy=update&get=identities";
-                    String policyURL = "../.." + resource.getPath() + "?yanel.policy=update&get=policy";
-                    //String saveURL = "../.." + resource.getPath() + "?yanel.policy=update&post=policy";
-                    String saveURL = "?yanel.policy=update&post=policy"; // This doesn't seem to work with all browsers!
-                    String cancelURL = org.wyona.commons.io.PathUtil.getName(resource.getPath());
-                    if (resource.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 + reservedPrefix + "/org.wyona.security.gwt.accesspolicyeditor.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=\"" + backToRealm + reservedPrefix + "/org.wyona.security.gwt.accesspolicyeditor.AccessPolicyEditor/org.wyona.security.gwt.accesspolicyeditor.AccessPolicyEditor.nocache.js\"></script>");
-                    sb.append("</head>");
-                    sb.append("<body><h1>Update Access Policy</h1><p><div id=\"access-policy-editor-hook\"></div></p></body></html>");
-                }
-            } else {
-                response.setContentType("text/html; charset=" + DEFAULT_ENCODING);
-                response.setStatus(response.SC_NOT_IMPLEMENTED);
-                sb.append("<html><body>Policy usecase not implemented yet: " + usecase + "</body></html>");
+            
+            Realm realm = map.getRealm(request.getServletPath());
+            String path = map.getPath(realm, request.getServletPath());
+            
+            File pmrcGlobalFile = getGlobalResourceConfiguration("policy-manager_yanel-rc.xml", realm);
+            Resource policyManagerResource = yanel.getResourceManager().getResource(getEnvironment(request, response), realm, path, new ResourceConfiguration(new java.io.FileInputStream(pmrcGlobalFile)));
+            View view = ((ViewableV2) policyManagerResource).getView(viewId);
+            if (view != null) {
+                if (generateResponse(view, policyManagerResource, request, response, getDocument(NAMESPACE, "yanel"), -1, -1) != null) return;
             }
+            log.error("Something went terribly wrong!");
+            response.getWriter().print("Something went terribly wrong!");
+            return;
         } catch(Exception e) {
             log.error(e, e);
             throw new ServletException(e.getMessage());
         }
-
-        PrintWriter writer = response.getWriter();
-        writer.print(sb.toString());
-        return;
     }
 
     /**
@@ -2286,175 +2231,6 @@
     /**
      *
      */
-    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\">");
-
-        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>");
-
-            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) {
-
-        StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
-
-        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>");
-        }
-
-        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());
-
-                    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!");
-        }
-
-        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++) {
-                // TODO: Do not hardcode permission
-                sb.append("<right id=\"" + (String) rights.elementAt(k) + "\" permission=\"true\"/>");
-            }
-            sb.append("</user>");
-        }
-        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!");
-        }
-
-        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);
-    }
-
-    /**
-     *
-     */
     private File getGlobalResourceConfiguration(String resConfigName, Realm realm) {
         // TODO: Introduce a repository for the Yanel webapp
         File realmDir = new File(realm.getConfigFile().getParent());



More information about the Yanel-commits mailing list