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@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@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,
spacewalk-commits@lists.fedorahosted.org