[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 + "&yanel.policy=update&get=identities";
- //String saveURL = "../.." + getPath() + "?yanel.policy=update&post=policy";
- String saveURL = "?policy-path=" + policyPath + "&yanel.policy=update&post=policy";
+ //response.setContentType("text/html; charset=" + DEFAULT_ENCODING);
+ String identitiesURL = "../.." + getPath() + "?yanel.policy=update&get=identities";
+ String policyURL = "../.." + getPath() + "?yanel.policy=update&get=policy";
+ //String saveURL = "../.." + 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(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 + "&yanel.policy=update&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