java/code/src/com/redhat/rhn/domain/audit/ScapFactory.java |
16 +
java/code/src/com/redhat/rhn/domain/audit/XccdfTestResult.hbm.xml |
11 +
java/code/src/com/redhat/rhn/frontend/action/systems/audit/ScapSetupAction.java |
3
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java |
1
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/XccdfTestResultSerializer.java |
95 ++++++++++
java/code/src/com/redhat/rhn/frontend/xmlrpc/system/scap/SystemScapHandler.java |
25 ++
java/code/webapp/WEB-INF/pages/systems/details/audit/listscap.jsp |
2
java/code/webapp/WEB-INF/pages/systems/details/audit/schedulexccdf.jsp |
2
8 files changed, 153 insertions(+), 2 deletions(-)
New commits:
commit 2bbe98bfbb906dc381911a42ce8f8a52b9f1b3f4
Author: Simon Lukasik <slukasik(a)redhat.com>
Date: Mon Apr 30 10:43:21 2012 +0200
Requires are better defined elsewhere than in template.
Furthermore, the package is called spacewalk-oscap.
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/systems/audit/ScapSetupAction.java
b/java/code/src/com/redhat/rhn/frontend/action/systems/audit/ScapSetupAction.java
index db201ad..31fb82c 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/systems/audit/ScapSetupAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/systems/audit/ScapSetupAction.java
@@ -27,11 +27,14 @@ import com.redhat.rhn.manager.audit.ScapManager;
public abstract class ScapSetupAction extends RhnAction {
private static final String SCAP_ENABLED = "scapEnabled";
+ private static final String REQUIRED_PKG = "requiredPackage";
+ private static final String SPACEWALK_OSCAP = "spacewalk-oscap";
protected void setupScapEnablementInfo(RequestContext context) {
Server server = context.lookupAndBindServer();
User user = context.getLoggedInUser();
boolean enabled = ScapManager.isScapEnabled(server, user);
context.getRequest().setAttribute(SCAP_ENABLED, enabled);
+ context.getRequest().setAttribute(REQUIRED_PKG, SPACEWALK_OSCAP);
}
}
diff --git a/java/code/webapp/WEB-INF/pages/systems/details/audit/listscap.jsp
b/java/code/webapp/WEB-INF/pages/systems/details/audit/listscap.jsp
index cd2a122..c8bbbc4 100644
--- a/java/code/webapp/WEB-INF/pages/systems/details/audit/listscap.jsp
+++ b/java/code/webapp/WEB-INF/pages/systems/details/audit/listscap.jsp
@@ -17,7 +17,7 @@
<c:choose>
<c:when test="${not requestScope.scapEnabled}">
<p><bean:message key="system.audit.listscap.jsp.missing"
- arg0="spacewalk-openscap"/></p>
+ arg0="${requiredPackage}"/></p>
<br/>
</c:when>
</c:choose>
diff --git a/java/code/webapp/WEB-INF/pages/systems/details/audit/schedulexccdf.jsp
b/java/code/webapp/WEB-INF/pages/systems/details/audit/schedulexccdf.jsp
index 1253be0..012808c 100644
--- a/java/code/webapp/WEB-INF/pages/systems/details/audit/schedulexccdf.jsp
+++ b/java/code/webapp/WEB-INF/pages/systems/details/audit/schedulexccdf.jsp
@@ -15,7 +15,7 @@
<c:choose>
<c:when test="${not requestScope.scapEnabled}">
<p><bean:message key="system.audit.listscap.jsp.missing"
- arg0="spacewalk-openscap"/></p>
+ arg0="${requiredPackage}"/></p>
</c:when>
<c:otherwise>
<html:form method="post"
action="/systems/details/audit/ScheduleXccdf.do">
commit d0bd8f093894e45860a5688a4efed8338175ae9f
Author: Simon Lukasik <slukasik(a)redhat.com>
Date: Fri Apr 27 17:53:48 2012 +0200
API: Show OpenSCAP XCCDF Details.
diff --git a/java/code/src/com/redhat/rhn/domain/audit/ScapFactory.java
b/java/code/src/com/redhat/rhn/domain/audit/ScapFactory.java
index 4086ecc..769506e 100644
--- a/java/code/src/com/redhat/rhn/domain/audit/ScapFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/audit/ScapFactory.java
@@ -19,6 +19,7 @@ import java.util.HashMap;
import org.apache.log4j.Logger;
import com.redhat.rhn.common.hibernate.HibernateFactory;
+import com.redhat.rhn.domain.user.User;
/**
* ScapFactory - the singleton class used to fetch and store
@@ -44,6 +45,21 @@ public class ScapFactory extends HibernateFactory {
}
/**
+ * Lookup a XCCDF TestResult by the id.
+ * Make sure that a given user can access the data.
+ * @param xid of the XCCDF TestResult to search for
+ * @param user user searching the results
+ * @return the XccdfTestResult found
+ */
+ public static XccdfTestResult lookupTestResultByIdAndUser(Long xid, User user) {
+ HashMap<String, Long> params = new HashMap<String, Long>();
+ params.put("xid", xid);
+ params.put("user_id", user.getId());
+ return (XccdfTestResult)singleton.lookupObjectByNamedQuery(
+ "XccdfTestResult.findByIdAndUser", params);
+ }
+
+ /**
* Get the Logger for the derived class so log messages
* show up on the correct class.
* @return Logger
diff --git a/java/code/src/com/redhat/rhn/domain/audit/XccdfTestResult.hbm.xml
b/java/code/src/com/redhat/rhn/domain/audit/XccdfTestResult.hbm.xml
index 6568b21..2492d4c 100644
--- a/java/code/src/com/redhat/rhn/domain/audit/XccdfTestResult.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/audit/XccdfTestResult.hbm.xml
@@ -30,4 +30,15 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<query name="XccdfTestResult.findById">
<![CDATA[from com.redhat.rhn.domain.audit.XccdfTestResult as a where a.id =
:xid]]>
</query>
+
+ <sql-query name="XccdfTestResult.findByIdAndUser">
+ <![CDATA[SELECT {tr.*}
+ FROM rhnXccdfTestResult {tr},
+ rhnUserServerPerms usp
+ WHERE tr.id = :xid
+ AND usp.server_id = tr.server_id
+ AND usp.user_id = :user_id
+ ]]>
+ <return alias="tr"
class="com.redhat.rhn.domain.audit.XccdfTestResult" />
+ </sql-query>
</hibernate-mapping>
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
index aaebfbb..07908e7 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
@@ -117,6 +117,7 @@ public class SerializerRegistry {
SERIALIZER_CLASSES.add(DistChannelMapSerializer.class);
SERIALIZER_CLASSES.add(ContentSourceSerializer.class);
SERIALIZER_CLASSES.add(XccdfTestResultDtoSerializer.class);
+ SERIALIZER_CLASSES.add(XccdfTestResultSerializer.class);
}
/**
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/XccdfTestResultSerializer.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/XccdfTestResultSerializer.java
new file mode 100644
index 0000000..babc498
--- /dev/null
+++
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/XccdfTestResultSerializer.java
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2012 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+
+package com.redhat.rhn.frontend.xmlrpc.serializer;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import redstone.xmlrpc.XmlRpcCustomSerializer;
+import redstone.xmlrpc.XmlRpcException;
+import redstone.xmlrpc.XmlRpcSerializer;
+
+import com.redhat.rhn.domain.action.Action;
+import com.redhat.rhn.domain.action.scap.ScapActionDetails;
+import com.redhat.rhn.domain.audit.XccdfBenchmark;
+import com.redhat.rhn.domain.audit.XccdfProfile;
+import com.redhat.rhn.domain.audit.XccdfTestResult;
+import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
+
+
+/**
+ * XccdfTestResultSerializer
+ * @version $Rev$
+ * @xmlrpc.doc
+ * #struct("OpenSCAP XCCDF Scan")
+ * #prop_desc("int", "xid", "XCCDF TestResult id")
+ * #prop_desc("int", "sid", "serverId")
+ * #prop_desc("int", "action_id", "Id of the parent
action.")
+ * #prop_desc("string", "path", "Path to XCCDF
document")
+ * #prop_desc("string", "oscap_parameters", "oscap
command-line arguments.")
+ * #prop_desc("string", "test_result", "Identifier of XCCDF
TestResult.")
+ * #prop_desc("string", "benchmark", "Identifier of XCCDF
Benchmark.")
+ * #prop_desc("string", "benchmark_version" , "Version of the
Benchmark.")
+ * #prop_desc("string", "profile", "Identifier of XCCDF
Profile.")
+ * #prop_desc("string", "profile_title", "Title of XCCDF
Profile.")
+ * #prop_desc($date, "start_time", "Client machine time of scan
start.")
+ * #prop_desc($date, "end_time", "Client machine time of scan
completion.")
+ * #prop_desc("string", "errors", "Stderr output of
scan.")
+ * #struct_end()
+ */
+public class XccdfTestResultSerializer implements XmlRpcCustomSerializer {
+
+ /**
+ * {@inheritDoc}
+ */
+ public Class getSupportedClass() {
+ return XccdfTestResult.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void serialize(Object value, Writer output,
+ XmlRpcSerializer builtInSerializer) throws XmlRpcException, IOException {
+ XccdfTestResult testResult = (XccdfTestResult) value;
+ ScapActionDetails actionDetails = testResult.getScapActionDetails();
+ XccdfBenchmark benchmark = testResult.getBenchmark();
+ XccdfProfile profile = testResult.getProfile();
+ Action parentAction = actionDetails.getParentAction();
+
+ SerializerHelper helper = new SerializerHelper(builtInSerializer);
+ addToHelper(helper, "xid", testResult.getId());
+ addToHelper(helper, "sid", testResult.getServer().getId());
+ addToHelper(helper, "path", actionDetails.getPath());
+ addToHelper(helper, "oscap_parameters",
actionDetails.getParametersContents());
+ addToHelper(helper, "test_result", testResult.getIdentifier());
+ addToHelper(helper, "benchmark", benchmark.getIdentifier());
+ addToHelper(helper, "benchmark_version", benchmark.getVersion());
+ addToHelper(helper, "profile", profile.getIdentifier());
+ addToHelper(helper, "profile_title", profile.getTitle());
+ addToHelper(helper, "start_time", testResult.getStartTime());
+ addToHelper(helper, "end_time", testResult.getEndTime());
+ addToHelper(helper, "errors", testResult.getErrrosContents());
+ addToHelper(helper, "action_id", parentAction.getId());
+ helper.writeTo(output);
+ }
+
+ private static void addToHelper(SerializerHelper helper, String label, Object value)
{
+ if (value != null) {
+ helper.add(label, value);
+ }
+ }
+}
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/scap/SystemScapHandler.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/scap/SystemScapHandler.java
index 393a0c2..f9dc629 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/scap/SystemScapHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/scap/SystemScapHandler.java
@@ -20,7 +20,10 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import com.redhat.rhn.FaultException;
import com.redhat.rhn.domain.action.scap.ScapAction;
+import com.redhat.rhn.domain.audit.ScapFactory;
+import com.redhat.rhn.domain.audit.XccdfTestResult;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.dto.XccdfTestResultDto;
import com.redhat.rhn.frontend.xmlrpc.BaseHandler;
@@ -62,6 +65,28 @@ public class SystemScapHandler extends BaseHandler {
}
/**
+ * Get Details of given OpenSCAP XCCDF scan.
+ * @param sessionKey The session key.
+ * @param xid The id of XCCDF scan.
+ * @return a detasil of OpenSCAP XCCDF scan.
+ *
+ * @xmlrpc.doc Get details of given OpenSCAP XCCDF scan.
+ * @xmlrpc.param #session_key()
+ * @xmlrpc.param #param("int", "Id of XCCDF scan (xid).")
+ * @xmlrpc.returntype $XccdfTestResultSerializer
+ */
+ public XccdfTestResult getXccdfScanDetails(String sessionKey, Integer xid) {
+ User loggedInUser = getLoggedInUser(sessionKey);
+ XccdfTestResult testResult = ScapFactory.lookupTestResultByIdAndUser(new
Long(xid),
+ loggedInUser);
+ if (testResult == null) {
+ throw new FaultException(-1, "scanDoesNotExists",
+ "Scan of id=" + xid + " does not exists or permission
error.");
+ }
+ return testResult;
+ }
+
+ /**
* Run OpenSCAP XCCDF Evaluation on a given list of servers
* @param sessionKey The session key.
* @param serverIds The list of server ids,