4 new revisions:
Revision: 2f595e3c14b7
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Thu Jun 19 03:01:11 2014 UTC
Log: - Supports DCDT-169....
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=2f595e3c14b7
Revision: d65e67b69b41
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Mon Jun 23 06:12:33 2014 UTC
Log: - Further supports DCDT-169....
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=d65e67b69b41
Revision: 905ed2dfe85f
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Mon Jun 23 13:21:03 2014 UTC
Log: - Further supports DCDT-169....
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=905ed2dfe85f
Revision: 9d79953e632d
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Mon Jun 23 13:25:37 2014 UTC
Log: - Further supports DCDT-169....
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=9d79953e632d
==============================================================================
Revision: 2f595e3c14b7
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Thu Jun 19 03:01:11 2014 UTC
Log: - Supports DCDT-169.
- Re-enabled Logback configuration file (change) scanning.
- Secured the Logback status servlet (now requires admin login/session to
view).
- Increased mail service remote delivery connection + transmission timeouts.
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=2f595e3c14b7
Added:
/dcdt-web/src/main/java/gov/hhs/onc/dcdt/web/controller/impl/LogbackController.java
/dcdt-web/src/main/java/gov/hhs/onc/dcdt/web/security/WebSecurityRoles.java
/dcdt-web/src/main/java/gov/hhs/onc/dcdt/web/servlet/impl/LogbackStatusServlet.java
Modified:
/dcdt-core/src/main/resources/META-INF/logback/logback-core.xml
/dcdt-core/src/main/resources/META-INF/spring/spring-core.xml
/dcdt-parent/pom.xml
/dcdt-service-core/src/main/resources/META-INF/logback/logback-service.xml
/dcdt-service-mail/src/main/resources/META-INF/spring/spring-service-mail.xml
/dcdt-web/src/main/resources/META-INF/logback/logback-web.xml
/dcdt-web/src/main/resources/META-INF/spring/spring-web-filter.xml
/dcdt-web/src/main/resources/META-INF/spring/spring-web-mvc.xml
/dcdt-web/src/main/resources/META-INF/spring/spring-web-security.xml
/dcdt-web/src/main/webapp/WEB-INF/web.xml
=======================================
--- /dev/null
+++
/dcdt-web/src/main/java/gov/hhs/onc/dcdt/web/controller/impl/LogbackController.java
Thu Jun 19 03:01:11 2014 UTC
@@ -0,0 +1,39 @@
+package gov.hhs.onc.dcdt.web.controller.impl;
+
+import gov.hhs.onc.dcdt.web.ToolWebException;
+import gov.hhs.onc.dcdt.web.controller.DisplayController;
+import gov.hhs.onc.dcdt.web.servlet.impl.LogbackStatusServlet;
+import java.io.IOException;
+import javax.annotation.Nullable;
+import javax.annotation.Resource;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.web.savedrequest.RequestCache;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.servlet.ModelAndView;
+
+@Controller("logbackController")
+@DisplayController
+public class LogbackController extends AbstractToolController {
+ private final static String SERVLET_NAME_LOGBACK_STATUS
= "logbackStatusServlet";
+
+ @Resource(name = "authReqCacheSession")
+ private RequestCache authReqCache;
+
+ @Nullable
+ @RequestMapping(value = { "/logback/status" }, method = {
RequestMethod.GET, RequestMethod.POST })
+ public ModelAndView forwardToStatus(HttpServletRequest servletReq,
HttpServletResponse servletResp) throws ToolWebException {
+
servletReq.setAttribute(LogbackStatusServlet.REQ_ATTR_NAME_AUTH_REQ_CACHE,
this.authReqCache);
+
+ try {
+
servletReq.getServletContext().getNamedDispatcher(SERVLET_NAME_LOGBACK_STATUS).forward(servletReq,
servletResp);
+ } catch (IOException | ServletException e) {
+ throw new ToolWebException(String.format("Unable to forward
Logback status servlet (name=%s) request.", SERVLET_NAME_LOGBACK_STATUS),
e);
+ }
+
+ return null;
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-web/src/main/java/gov/hhs/onc/dcdt/web/security/WebSecurityRoles.java
Thu Jun 19 03:01:11 2014 UTC
@@ -0,0 +1,10 @@
+package gov.hhs.onc.dcdt.web.security;
+
+public final class WebSecurityRoles {
+ private final static String PREFIX = "ROLE_";
+
+ public final static String ADMIN = (PREFIX + "ADMIN");
+
+ private WebSecurityRoles() {
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-web/src/main/java/gov/hhs/onc/dcdt/web/servlet/impl/LogbackStatusServlet.java
Thu Jun 19 03:01:11 2014 UTC
@@ -0,0 +1,26 @@
+package gov.hhs.onc.dcdt.web.servlet.impl;
+
+import ch.qos.logback.classic.ViewStatusMessagesServlet;
+import gov.hhs.onc.dcdt.web.security.WebSecurityRoles;
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.web.savedrequest.RequestCache;
+
+public class LogbackStatusServlet extends ViewStatusMessagesServlet {
+ public final static String REQ_ATTR_NAME_AUTH_REQ_CACHE
= "authReqCache";
+
+ private final static long serialVersionUID = 0L;
+
+ @Override
+ protected void service(HttpServletRequest servletReq,
HttpServletResponse servletResp) throws IOException, ServletException {
+ if (!servletReq.isUserInRole(WebSecurityRoles.ADMIN)) {
+ ((RequestCache)
servletReq.getAttribute(REQ_ATTR_NAME_AUTH_REQ_CACHE)).saveRequest(servletReq,
servletResp);
+
+ servletReq.authenticate(servletResp);
+ }
+
+ super.service(servletReq, servletResp);
+ }
+}
=======================================
--- /dcdt-core/src/main/resources/META-INF/logback/logback-core.xml Sun May
25 10:47:16 2014 UTC
+++ /dcdt-core/src/main/resources/META-INF/logback/logback-core.xml Thu Jun
19 03:01:11 2014 UTC
@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration
debug="false"
+ scan="true"
+ scanPeriod="30 seconds"
xmlns="ch.qos.logback"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="ch.qos.logback /META-INF/logback/logback.xsd">
=======================================
--- /dcdt-core/src/main/resources/META-INF/spring/spring-core.xml Wed Jun
11 12:39:46 2014 UTC
+++ /dcdt-core/src/main/resources/META-INF/spring/spring-core.xml Thu Jun
19 03:01:11 2014 UTC
@@ -61,7 +61,7 @@
=====================================================================================================-->
<beans:bean id="toolMsgSource"
class="gov.hhs.onc.dcdt.context.ToolMessageSource" abstract="true"/>
<beans:bean id="toolMsgSourceImpl"
class="gov.hhs.onc.dcdt.context.impl.ToolMessageSourceImpl"
parent="toolMsgSource" abstract="true"
- p:cacheSeconds="300"
+ p:cacheSeconds="30"
p:defaultEncoding="#{ charsetUtf8.name() }"
p:fallbackToSystemLocale="false"/>
=======================================
--- /dcdt-parent/pom.xml Thu Jun 12 16:25:57 2014 UTC
+++ /dcdt-parent/pom.xml Thu Jun 19 03:01:11 2014 UTC
@@ -322,7 +322,7 @@
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
- <version>10.10.1.1</version>
+ <version>10.10.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.directory.api</groupId>
=======================================
---
/dcdt-service-core/src/main/resources/META-INF/logback/logback-service.xml
Sun May 25 10:47:16 2014 UTC
+++
/dcdt-service-core/src/main/resources/META-INF/logback/logback-service.xml
Thu Jun 19 03:01:11 2014 UTC
@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration
debug="false"
+ scan="true"
+ scanPeriod="30 seconds"
xmlns="ch.qos.logback"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="ch.qos.logback /META-INF/logback/logback.xsd">
=======================================
---
/dcdt-service-mail/src/main/resources/META-INF/spring/spring-service-mail.xml
Wed Jun 11 18:16:57 2014 UTC
+++
/dcdt-service-mail/src/main/resources/META-INF/spring/spring-service-mail.xml
Thu Jun 19 03:01:11 2014 UTC
@@ -278,12 +278,12 @@
<util:map>
<beans:entry
key="bounceProcessor"
value="#{
T(gov.hhs.onc.dcdt.service.mail.james.MailProcessorState).ERROR.state }"/>
- <beans:entry
key="connectiontimeout" value="#{
T(gov.hhs.onc.dcdt.utils.ToolDateUtils).MS_IN_SEC * 15 }"/>
+ <beans:entry
key="connectiontimeout" value="#{
T(gov.hhs.onc.dcdt.utils.ToolDateUtils).MS_IN_SEC * 60 }"/>
<beans:entry key="debug"
value="true"/>
<beans:entry
key="delayTime" value="1 minute"/>
<beans:entry
key="deliveryThreads" value="20"/>
<beans:entry
key="maxRetries" value="5"/>
- <beans:entry key="timeout"
value="#{ T(gov.hhs.onc.dcdt.utils.ToolDateUtils).MS_IN_SEC * 30 }"/>
+ <beans:entry key="timeout"
value="#{ T(gov.hhs.onc.dcdt.utils.ToolDateUtils).MS_IN_SEC * 120 }"/>
</util:map>
</beans:property>
</beans:bean>
=======================================
--- /dcdt-web/src/main/resources/META-INF/logback/logback-web.xml Sun May
25 10:47:16 2014 UTC
+++ /dcdt-web/src/main/resources/META-INF/logback/logback-web.xml Thu Jun
19 03:01:11 2014 UTC
@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration
debug="false"
+ scan="true"
+ scanPeriod="30 seconds"
xmlns="ch.qos.logback"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="ch.qos.logback /META-INF/logback/logback.xsd">
=======================================
--- /dcdt-web/src/main/resources/META-INF/spring/spring-web-filter.xml Fri
May 2 21:53:01 2014 UTC
+++ /dcdt-web/src/main/resources/META-INF/spring/spring-web-filter.xml Thu
Jun 19 03:01:11 2014 UTC
@@ -20,6 +20,9 @@
=====================================================================================================-->
<beans:bean id="filter" class="javax.servlet.Filter" abstract="true"/>
+
<!--====================================================================================================
+ = URL REWRITE FILTER
+
=====================================================================================================-->
<beans:bean id="filterUrlRewrite"
class="gov.hhs.onc.dcdt.web.filter.impl.ToolUrlRewriteFilter"
p:confPath="/WEB-INF/urlrewrite/urlrewrite-web.xml"
p:confReloadCheckInterval="30"
=======================================
--- /dcdt-web/src/main/resources/META-INF/spring/spring-web-mvc.xml Thu
Feb 6 11:41:47 2014 UTC
+++ /dcdt-web/src/main/resources/META-INF/spring/spring-web-mvc.xml Thu Jun
19 03:01:11 2014 UTC
@@ -17,20 +17,32 @@
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
+
<!--====================================================================================================
+ = RESOURCES
+
=====================================================================================================-->
<mvc:resources mapping="/static/**" location="/static/"/>
+
<!--====================================================================================================
+ = INTERCEPTORS
+
=====================================================================================================-->
+ <beans:bean id="interceptor"
class="org.springframework.web.servlet.HandlerInterceptor" abstract="true"/>
+
+ <beans:bean id="interceptorWebContent"
class="org.springframework.web.servlet.mvc.WebContentInterceptor"
parent="interceptor"
+ p:cacheSeconds="0"
+ p:useCacheControlHeader="true"
+ p:useCacheControlNoStore="true"
+ p:useExpiresHeader="true"/>
+
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
- <!-- Deactivating web content cache usage -->
- <beans:bean id="webContentInterceptor"
class="org.springframework.web.servlet.mvc.WebContentInterceptor"
- p:cacheSeconds="0"
- p:useCacheControlHeader="true"
- p:useCacheControlNoStore="true"
- p:useExpiresHeader="true"/>
+ <beans:ref bean="interceptorWebContent"/>
</mvc:interceptor>
</mvc:interceptors>
+
<!--====================================================================================================
+ = TILES
+
=====================================================================================================-->
<beans:bean id="tilesViewResolver"
class="org.springframework.web.servlet.view.tiles3.TilesViewResolver"
p:exposePathVariables="true"/>
=======================================
--- /dcdt-web/src/main/resources/META-INF/spring/spring-web-security.xml
Mon Jun 9 03:48:25 2014 UTC
+++ /dcdt-web/src/main/resources/META-INF/spring/spring-web-security.xml
Thu Jun 19 03:01:11 2014 UTC
@@ -31,19 +31,28 @@
<sec:authentication-manager id="authManager">
<sec:authentication-provider>
<sec:user-service id="userService">
- <sec:user name="${
dcdt.web.user.admin.name}"
authorities="ROLE_ADMIN" password="${dcdt.web.user.admin.secret}"/>
+ <sec:user name="${
dcdt.web.user.admin.name}"
authorities="#{ T(gov.hhs.onc.dcdt.web.security.WebSecurityRoles).ADMIN }"
+ password="${dcdt.web.user.admin.secret}"/>
</sec:user-service>
</sec:authentication-provider>
<sec:authentication-provider ref="authProvAnon"/>
</sec:authentication-manager>
+
<!--====================================================================================================
+ = AUTHENTICATION REQUEST CACHE
+
=====================================================================================================-->
+ <beans:bean id="authReqCache"
class="org.springframework.security.web.savedrequest.RequestCache"
abstract="true"/>
+
+ <beans:bean id="authReqCacheSession"
class="org.springframework.security.web.savedrequest.HttpSessionRequestCache"
parent="authReqCache"/>
+
<!--====================================================================================================
= AUTHENTICATION SUCCESS HANDLERS
=====================================================================================================-->
<beans:bean id="authHandlerSuccess"
class="org.springframework.security.web.authentication.AuthenticationSuccessHandler"
abstract="true"/>
<beans:bean id="authHandlerSuccessSavedReq"
class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler"
- parent="authHandlerSuccess"/>
+ parent="authHandlerSuccess"
+ p:requestCache-ref="authReqCacheSession"/>
<!--====================================================================================================
= HTTP SECURITY
@@ -51,8 +60,8 @@
<sec:http authentication-manager-ref="authManager"
use-expressions="true">
<sec:intercept-url pattern="/admin/login**" access="permitAll"/>
<sec:intercept-url pattern="/admin/logout**" access="permitAll"/>
- <sec:intercept-url pattern="/admin**"
access="hasAuthority('ROLE_ADMIN')"/>
- <sec:intercept-url pattern="/logback**"
access="hasAuthority('ROLE_ADMIN')"/>
+ <sec:intercept-url pattern="/admin**" access="hasAuthority('#{
T(gov.hhs.onc.dcdt.web.security.WebSecurityRoles).ADMIN }')"/>
+ <sec:intercept-url pattern="/logback**" access="hasAuthority('#{
T(gov.hhs.onc.dcdt.web.security.WebSecurityRoles).ADMIN }')"/>
<sec:intercept-url pattern="/**" access="permitAll"/>
<sec:form-login authentication-failure-url="/admin/login?error"
authentication-success-handler-ref="authHandlerSuccessSavedReq"
login-page="/admin/login"
login-processing-url="/admin/login/process" password-parameter="pass"
username-parameter="user"/>
=======================================
--- /dcdt-web/src/main/webapp/WEB-INF/web.xml Mon Jun 9 03:48:25 2014 UTC
+++ /dcdt-web/src/main/webapp/WEB-INF/web.xml Thu Jun 19 03:01:11 2014 UTC
@@ -47,6 +47,33 @@
<param-value>dcdt.web.webapp.dir</param-value>
</context-param>
+
<!--====================================================================================================
+ = FILTERS
+
=====================================================================================================-->
+ <filter>
+ <filter-name>filterUrlRewrite</filter-name>
+
<filter-class>gov.hhs.onc.dcdt.web.filter.impl.DispatcherServletFilterProxy</filter-class>
+ <init-param>
+ <param-name>targetFilterLifecycle</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ </filter>
+ <filter-mapping>
+ <filter-name>filterUrlRewrite</filter-name>
+ <url-pattern>/*</url-pattern>
+ <dispatcher>FORWARD</dispatcher>
+ <dispatcher>REQUEST</dispatcher>
+ </filter-mapping>
+
+ <filter>
+ <filter-name>springSecurityFilterChain</filter-name>
+
<filter-class>gov.hhs.onc.dcdt.web.filter.impl.DispatcherServletFilterProxy</filter-class>
+ </filter>
+ <filter-mapping>
+ <filter-name>springSecurityFilterChain</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
<!--====================================================================================================
= SERVLETS
=====================================================================================================-->
@@ -75,12 +102,8 @@
<servlet>
<servlet-name>logbackStatusServlet</servlet-name>
-
<servlet-class>ch.qos.logback.classic.ViewStatusMessagesServlet</servlet-class>
+
<servlet-class>gov.hhs.onc.dcdt.web.servlet.impl.LogbackStatusServlet</servlet-class>
</servlet>
- <servlet-mapping>
- <servlet-name>logbackStatusServlet</servlet-name>
- <url-pattern>/logback/status</url-pattern>
- </servlet-mapping>
<!--====================================================================================================
= LISTENERS
@@ -104,41 +127,4 @@
<listener>
<listener-class>gov.hhs.onc.dcdt.web.context.impl.DriverManagerServletContextListener</listener-class>
</listener>
-
-
<!--====================================================================================================
- = FILTERS
-
=====================================================================================================-->
- <filter>
- <filter-name>filterUrlRewrite</filter-name>
-
<filter-class>gov.hhs.onc.dcdt.web.filter.impl.DispatcherServletFilterProxy</filter-class>
- <init-param>
- <param-name>targetFilterLifecycle</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>filterUrlRewrite</filter-name>
- <servlet-name>dispatcherServlet</servlet-name>
- <dispatcher>FORWARD</dispatcher>
- <dispatcher>REQUEST</dispatcher>
- </filter-mapping>
- <filter-mapping>
- <filter-name>filterUrlRewrite</filter-name>
- <servlet-name>logbackStatusServlet</servlet-name>
- <dispatcher>FORWARD</dispatcher>
- <dispatcher>REQUEST</dispatcher>
- </filter-mapping>
-
- <filter>
- <filter-name>springSecurityFilterChain</filter-name>
-
<filter-class>gov.hhs.onc.dcdt.web.filter.impl.DispatcherServletFilterProxy</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>springSecurityFilterChain</filter-name>
- <servlet-name>dispatcherServlet</servlet-name>
- </filter-mapping>
- <filter-mapping>
- <filter-name>springSecurityFilterChain</filter-name>
- <servlet-name>logbackStatusServlet</servlet-name>
- </filter-mapping>
</web-app>
==============================================================================
Revision: d65e67b69b41
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Mon Jun 23 06:12:33 2014 UTC
Log: - Further supports DCDT-169.
- Refactored Spring type conversion to separate out Spring (field)
formatters.
- Added embedded Tomcat instance logging during web integration testing.
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=d65e67b69b41
Added:
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/impl/NamedBeanFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/utils/ToolConversionUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/impl/CertificateFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/impl/X500NameFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsCodeIdentifier.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsIdentifier.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMnemonicIdentifier.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsNameLabelIdentifier.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsOperationType.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/impl/DnsNameFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/format/ToolFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/format/ToolFormatterRegistrar.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/format/impl/AbstractToolFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/format/impl/ToolFormatterRegistrarImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/io/impl/PathFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/json/impl/ConvertingJsonDeserializer.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/json/impl/ConvertingJsonSerializer.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/filter/impl/LdapFilterFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/impl/DnFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/impl/LdapAttributeFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/impl/RdnFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/ldif/impl/LdifFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/impl/MailAddressFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/impl/InetAddressFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/impl/UriFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/impl/UrlFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/mime/impl/MimeTypeFormatter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/utils/ToolEnumUtils.java
Deleted:
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/impl/NamedBeanConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/ConvertsJson.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/ConvertsUserType.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/impl/X500NameConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsNameLabel.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/filter/impl/LdapFilterConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/impl/LdapAttributeConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/impl/UriConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/impl/UrlConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/mime/impl/MimeTypeConverter.java
Modified:
/dcdt-core/src/assembly/tomcat.xml
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/Converts.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/ToolConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/impl/AbstractToolConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyAlgorithmIdentifier.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyIdentifier.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyObjectIdentifier.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyTaggedIdentifier.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyTypeIdentifier.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/impl/CertificateConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/impl/CertificateInfoImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/impl/CertificateNameImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/keys/impl/KeyConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/keys/impl/KeyInfoImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CertificateNameUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CertificateUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CryptographyUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/KeyUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/data/impl/ToolLocalSessionFactoryBean.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/discovery/steps/dns/impl/AbstractDnsLookupStep.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/discovery/steps/dns/impl/DnsCertRecordLookupStepImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/discovery/steps/dns/impl/DnsSrvRecordLookupStepImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsDclassType.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageFlag.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageRcode.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageSection.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsRecordType.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsResultType.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsServiceProtocol.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsServiceType.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/ARecordConfigImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/CertRecordConfigImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/CnameRecordConfigImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/MxRecordConfigImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/NsRecordConfigImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/SoaRecordConfigImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/SrvRecordConfigImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/impl/DnsNameConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/impl/DnsLookupResultImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/impl/DnsLookupServiceImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsNameUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsResolverUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/io/impl/PathConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/json/impl/ToolObjectMapper.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/impl/DnConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/impl/RdnConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/ldif/impl/LdifConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/crypto/utils/ToolSmimeUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/impl/MailAddressConverter.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/impl/InetAddressConverter.java
/dcdt-core/src/main/resources/META-INF/logback/logback-core-include.xml
/dcdt-core/src/main/resources/META-INF/logback/logback.xsd
/dcdt-core/src/main/resources/META-INF/spring/spring-core-convert.xml
/dcdt-core/src/main/resources/META-INF/spring/spring-core-dns.xml
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance-ldap.xml
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance-mail.xml
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance.xml
/dcdt-core/src/main/resources/META-INF/spring/spring-core-json.xml
/dcdt-core/src/main/resources/META-INF/spring/spring-core.xml
/dcdt-core/src/tomcat/logback.xml
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java
/dcdt-service-ldap/src/main/resources/META-INF/ehcache/ehcache-service-ldap.xml
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolDnsServiceImpl.java
/dcdt-service-parent/pom.xml
/dcdt-web/pom.xml
/dcdt-web/src/main/resources/META-INF/spring/spring-web.xml
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/test/impl/AbstractToolWebIntegrationTests.java
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/impl/NamedBeanFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,38 @@
+package gov.hhs.onc.dcdt.beans.impl;
+
+import gov.hhs.onc.dcdt.beans.ToolNamedBean;
+import gov.hhs.onc.dcdt.beans.utils.ToolBeanUtils;
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import java.util.Locale;
+import javax.annotation.Nullable;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.stereotype.Component;
+
+@Component("formatterNamedBean")
+public class NamedBeanFormatter extends
AbstractToolFormatter<ToolNamedBean> implements ApplicationContextAware {
+ private AbstractApplicationContext appContext;
+
+ public NamedBeanFormatter() {
+ super(ToolNamedBean.class);
+ }
+
+ @Nullable
+ @Override
+ protected String printInternal(ToolNamedBean obj, Locale locale)
throws Exception {
+ return obj.getName();
+ }
+
+ @Nullable
+ @Override
+ protected ToolNamedBean parseInternal(String str, Locale locale)
throws Exception {
+ return ToolBeanUtils.findNamed(this.appContext, str);
+ }
+
+ @Override
+ public void setApplicationContext(ApplicationContext appContext)
throws BeansException {
+ this.appContext = ((AbstractApplicationContext) appContext);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/utils/ToolConversionUtils.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,45 @@
+package gov.hhs.onc.dcdt.convert.utils;
+
+import gov.hhs.onc.dcdt.collections.impl.AbstractToolPredicate;
+import gov.hhs.onc.dcdt.utils.ToolClassUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.core.convert.TypeDescriptor;
+import
org.springframework.core.convert.converter.GenericConverter.ConvertiblePair;
+
+public abstract class ToolConversionUtils {
+ public static class IsAssignableConvertiblePredicate extends
AbstractToolPredicate<ConvertiblePair> {
+ private Class<?> srcClass;
+ private Class<?> targetClass;
+
+ public IsAssignableConvertiblePredicate(ConvertiblePair convType) {
+ this(convType.getSourceType(), convType.getTargetType());
+ }
+
+ public IsAssignableConvertiblePredicate(TypeDescriptor srcType,
TypeDescriptor targetType) {
+ this(srcType.getType(), targetType.getType());
+ }
+
+ public IsAssignableConvertiblePredicate(Class<?> srcClass,
Class<?> targetClass) {
+ this.srcClass = srcClass;
+ this.targetClass = targetClass;
+ }
+
+ @Override
+ protected boolean evaluateInternal(ConvertiblePair convType)
throws Exception {
+ return isAssignable(this.srcClass, this.targetClass, convType);
+ }
+ }
+
+ public static boolean isAssignable(ConvertiblePair convType1,
ConvertiblePair convType2) {
+ return isAssignable(convType1.getSourceType(),
convType1.getTargetType(), convType2);
+ }
+
+ public static boolean isAssignable(TypeDescriptor srcType,
TypeDescriptor targetType, ConvertiblePair convType) {
+ return isAssignable(srcType.getType(), targetType.getType(),
convType);
+ }
+
+ @SuppressWarnings({ "unchecked" })
+ public static boolean isAssignable(Class<?> srcClass, Class<?>
targetClass, ConvertiblePair convType) {
+ return ToolClassUtils.isAssignable(ArrayUtils.toArray(srcClass,
targetClass), convType.getSourceType(), convType.getTargetType());
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/impl/CertificateFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,22 @@
+package gov.hhs.onc.dcdt.crypto.certs.impl;
+
+import gov.hhs.onc.dcdt.crypto.DataEncoding;
+import gov.hhs.onc.dcdt.crypto.certs.CertificateType;
+import gov.hhs.onc.dcdt.crypto.utils.CertificateUtils;
+import gov.hhs.onc.dcdt.crypto.utils.CryptographyUtils;
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import java.security.cert.X509Certificate;
+import java.util.Locale;
+import org.springframework.stereotype.Component;
+
+@Component("formatterCert")
+public class CertificateFormatter extends
AbstractToolFormatter<X509Certificate> {
+ public CertificateFormatter() {
+ super(X509Certificate.class, false, true);
+ }
+
+ @Override
+ protected String printInternal(X509Certificate obj, Locale locale)
throws Exception {
+ return
CertificateUtils.readCertificate(CryptographyUtils.JCE_PROVIDER_HELPER,
obj.getEncoded(), CertificateType.X509, DataEncoding.DER).toString();
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/impl/X500NameFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,18 @@
+package gov.hhs.onc.dcdt.crypto.impl;
+
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import java.util.Locale;
+import org.bouncycastle.asn1.x500.X500Name;
+import org.springframework.stereotype.Component;
+
+@Component("formatterX500Name")
+public class X500NameFormatter extends AbstractToolFormatter<X500Name> {
+ public X500NameFormatter() {
+ super(X500Name.class);
+ }
+
+ @Override
+ protected X500Name parseInternal(String str, Locale locale) throws
Exception {
+ return new X500Name(str);
+ }
+}
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsCodeIdentifier.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,10 @@
+package gov.hhs.onc.dcdt.dns;
+
+import javax.annotation.Nonnegative;
+
+public interface DnsCodeIdentifier {
+ public final static String PROP_NAME_CODE = "code";
+
+ @Nonnegative
+ public int getCode();
+}
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsIdentifier.java Mon
Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,7 @@
+package gov.hhs.onc.dcdt.dns;
+
+public interface DnsIdentifier {
+ public final static String PROP_NAME_ID = "id";
+
+ public String getId();
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMnemonicIdentifier.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,4 @@
+package gov.hhs.onc.dcdt.dns;
+
+public interface DnsMnemonicIdentifier extends DnsCodeIdentifier,
DnsIdentifier {
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsNameLabelIdentifier.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,9 @@
+package gov.hhs.onc.dcdt.dns;
+
+import
org.xbill.DNS.Name;
+
+public interface DnsNameLabelIdentifier extends DnsIdentifier {
+ public final static String PROP_NAME_NAME_LBL = "nameLabel";
+
+ public Name getNameLabel() throws DnsNameException;
+}
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsOperationType.java Mon
Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,27 @@
+package gov.hhs.onc.dcdt.dns;
+
+import javax.annotation.Nonnegative;
+import org.xbill.DNS.Opcode;
+
+public enum DnsOperationType implements DnsMnemonicIdentifier {
+ QUERY(Opcode.QUERY), IQUERY(Opcode.IQUERY), STATUS(Opcode.STATUS),
NOTIFY(Opcode.NOTIFY), UPDATE(Opcode.UPDATE);
+
+ private final int code;
+ private final String id;
+
+ private DnsOperationType(int code) {
+ this.code = code;
+
this.id = Opcode.string(code);
+ }
+
+ @Nonnegative
+ @Override
+ public int getCode() {
+ return this.code;
+ }
+
+ @Override
+ public String getId() {
+ return
this.id;
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/impl/DnsNameFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,19 @@
+package gov.hhs.onc.dcdt.dns.impl;
+
+import gov.hhs.onc.dcdt.dns.utils.ToolDnsNameUtils;
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import java.util.Locale;
+import org.springframework.stereotype.Component;
+import
org.xbill.DNS.Name;
+
+@Component("formatterDnsName")
+public class DnsNameFormatter extends AbstractToolFormatter<Name> {
+ public DnsNameFormatter() {
+ super(Name.class);
+ }
+
+ @Override
+ protected Name parseInternal(String str, Locale locale) throws
Exception {
+ return ToolDnsNameUtils.fromString(str);
+ }
+}
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsUtils.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,26 @@
+package gov.hhs.onc.dcdt.dns.utils;
+
+import gov.hhs.onc.dcdt.dns.DnsCodeIdentifier;
+import gov.hhs.onc.dcdt.dns.DnsIdentifier;
+import gov.hhs.onc.dcdt.dns.DnsNameLabelIdentifier;
+import gov.hhs.onc.dcdt.utils.ToolEnumUtils;
+import javax.annotation.Nonnegative;
+import javax.annotation.Nullable;
+import
org.xbill.DNS.Name;
+
+public abstract class ToolDnsUtils {
+ @Nullable
+ public static <T extends Enum<T> & DnsNameLabelIdentifier> T
findByNameLabel(Class<T> enumClass, Name nameLbl) {
+ return ToolEnumUtils.findByPropertyValue(enumClass,
DnsNameLabelIdentifier.PROP_NAME_NAME_LBL, nameLbl);
+ }
+
+ @Nullable
+ public static <T extends Enum<T> & DnsCodeIdentifier> T
findByCode(Class<T> enumClass, @Nonnegative int code) {
+ return ToolEnumUtils.findByPropertyValue(enumClass,
DnsCodeIdentifier.PROP_NAME_CODE, code);
+ }
+
+ @Nullable
+ public static <T extends Enum<T> & DnsIdentifier> T findById(Class<T>
enumClass, String id) {
+ return ToolEnumUtils.findByPropertyValue(enumClass,
DnsIdentifier.PROP_NAME_ID, id);
+ }
+}
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/format/ToolFormatter.java Mon
Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,20 @@
+package gov.hhs.onc.dcdt.format;
+
+import gov.hhs.onc.dcdt.beans.ToolBean;
+import java.text.ParseException;
+import javax.annotation.Nullable;
+import org.springframework.format.Formatter;
+
+public interface ToolFormatter<T> extends Formatter<T>, ToolBean {
+ @Nullable
+ public String print(@Nullable T obj);
+
+ @Nullable
+ public T parse(@Nullable String str) throws ParseException;
+
+ public Class<T> getFormattedClass();
+
+ public boolean canParse();
+
+ public boolean canPrint();
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/format/ToolFormatterRegistrar.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,10 @@
+package gov.hhs.onc.dcdt.format;
+
+import gov.hhs.onc.dcdt.beans.ToolBean;
+import java.util.Set;
+import org.springframework.format.Formatter;
+import org.springframework.format.FormatterRegistrar;
+
+public interface ToolFormatterRegistrar extends FormatterRegistrar,
ToolBean {
+ public Set<? extends Formatter<?>> getFormatters();
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/format/impl/AbstractToolFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,89 @@
+package gov.hhs.onc.dcdt.format.impl;
+
+import gov.hhs.onc.dcdt.beans.impl.AbstractToolBean;
+import gov.hhs.onc.dcdt.format.ToolFormatter;
+import gov.hhs.onc.dcdt.utils.ToolClassUtils;
+import java.text.ParseException;
+import java.util.Locale;
+import javax.annotation.Nullable;
+import org.springframework.context.i18n.LocaleContextHolder;
+
+public abstract class AbstractToolFormatter<T> extends AbstractToolBean
implements ToolFormatter<T> {
+ protected Class<T> formattedClass;
+ protected boolean parse;
+ protected boolean print;
+
+ protected AbstractToolFormatter(Class<T> formattedClass) {
+ this(formattedClass, true, true);
+ }
+
+ protected AbstractToolFormatter(Class<T> formattedClass, boolean
parse, boolean print) {
+ this.formattedClass = formattedClass;
+ this.parse = parse;
+ this.print = print;
+ }
+
+ @Nullable
+ @Override
+ public String print(@Nullable T obj) {
+ return this.print(obj, LocaleContextHolder.getLocale());
+ }
+
+ @Nullable
+ @Override
+ public String print(@Nullable T obj, Locale locale) {
+ try {
+ return ((obj != null) ? this.printInternal(obj, locale) :
null);
+ } catch (IllegalArgumentException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new IllegalArgumentException(String.format(
+ "Unable to print (class=%s) object (class=%s,
formattedClass=%s) as localized string (locale={%s}).",
ToolClassUtils.getName(this),
+ ToolClassUtils.getName(obj),
ToolClassUtils.getName(this.formattedClass), locale), e);
+ }
+ }
+
+ @Nullable
+ @Override
+ public T parse(@Nullable String str) throws ParseException {
+ return this.parse(str, LocaleContextHolder.getLocale());
+ }
+
+ @Nullable
+ @Override
+ public T parse(@Nullable String str, Locale locale) throws
ParseException {
+ try {
+ return ((str != null) ? this.parseInternal(str, locale) :
null);
+ } catch (IllegalArgumentException | ParseException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new IllegalArgumentException(String.format("Unable to
parse (class=%s) localized string (locale={%s}) into object (class=%s): %s",
+ ToolClassUtils.getName(this), locale,
ToolClassUtils.getName(this.formattedClass), str), e);
+ }
+ }
+
+ @Nullable
+ protected String printInternal(T obj, Locale locale) throws Exception {
+ return obj.toString();
+ }
+
+ @Nullable
+ protected T parseInternal(String str, Locale locale) throws Exception {
+ return null;
+ }
+
+ @Override
+ public Class<T> getFormattedClass() {
+ return this.formattedClass;
+ }
+
+ @Override
+ public boolean canParse() {
+ return this.parse;
+ }
+
+ @Override
+ public boolean canPrint() {
+ return this.print;
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/format/impl/ToolFormatterRegistrarImpl.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,88 @@
+package gov.hhs.onc.dcdt.format.impl;
+
+import gov.hhs.onc.dcdt.beans.impl.AbstractToolBean;
+import gov.hhs.onc.dcdt.convert.utils.ToolConversionUtils;
+import
gov.hhs.onc.dcdt.convert.utils.ToolConversionUtils.IsAssignableConvertiblePredicate;
+import gov.hhs.onc.dcdt.format.ToolFormatter;
+import gov.hhs.onc.dcdt.format.ToolFormatterRegistrar;
+import gov.hhs.onc.dcdt.utils.ToolClassUtils;
+import java.text.ParseException;
+import java.util.HashSet;
+import java.util.Set;
+import javax.annotation.Nullable;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.core.convert.TypeDescriptor;
+import
org.springframework.core.convert.converter.ConditionalGenericConverter;
+import org.springframework.format.FormatterRegistry;
+
+public class ToolFormatterRegistrarImpl extends AbstractToolBean
implements ToolFormatterRegistrar {
+ private static class ToolFormatterConverter<T> implements
ConditionalGenericConverter {
+ protected ToolFormatter<T> formatter;
+ protected Class<T> formattedClass;
+ protected ConvertiblePair parseConvType;
+ protected ConvertiblePair printConvType;
+ protected Set<ConvertiblePair> convTypes = new HashSet<>(2);
+
+ public ToolFormatterConverter(ToolFormatter<T> formatter) {
+ this.formatter = formatter;
+ this.formattedClass = this.formatter.getFormattedClass();
+ this.parseConvType = new ConvertiblePair(String.class,
this.formattedClass);
+ this.printConvType = new ConvertiblePair(this.formattedClass,
String.class);
+
+ if (this.formatter.canParse()) {
+ this.convTypes.add(this.parseConvType);
+ }
+
+ if (this.formatter.canPrint()) {
+ this.convTypes.add(this.printConvType);
+ }
+ }
+
+ @Nullable
+ @Override
+ public Object convert(@Nullable Object src, TypeDescriptor
srcType, TypeDescriptor targetType) {
+ Object target = null;
+
+ if (ToolConversionUtils.isAssignable(srcType, targetType,
this.parseConvType)) {
+ try {
+ target = this.formatter.parse(((String) src));
+ } catch (ParseException e) {
+ throw new
IllegalArgumentException(String.format("Unable to convert parseable source
string to target object (class=%s): %s",
+ ToolClassUtils.getName(this.formattedClass), src),
e);
+ }
+ } else if (ToolConversionUtils.isAssignable(srcType,
targetType, this.printConvType)) {
+ target =
this.formatter.print(this.formattedClass.cast(src));
+ }
+
+ return target;
+ }
+
+ @Override
+ public boolean matches(TypeDescriptor srcType, TypeDescriptor
targetType) {
+ return CollectionUtils.exists(this.convTypes, new
IsAssignableConvertiblePredicate(srcType, targetType));
+ }
+
+ @Override
+ public Set<ConvertiblePair> getConvertibleTypes() {
+ return this.convTypes;
+ }
+ }
+
+ private Set<ToolFormatter<?>> formatters;
+
+ public ToolFormatterRegistrarImpl(Set<ToolFormatter<?>> formatters) {
+ this.formatters = formatters;
+ }
+
+ @Override
+ public void registerFormatters(FormatterRegistry formatterReg) {
+ for (ToolFormatter<?> formatter : this.formatters) {
+ formatterReg.addConverter(new
ToolFormatterConverter<>(formatter));
+ }
+ }
+
+ @Override
+ public Set<ToolFormatter<?>> getFormatters() {
+ return this.formatters;
+ }
+}
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/io/impl/PathFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,19 @@
+package gov.hhs.onc.dcdt.io.impl;
+
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Locale;
+import org.springframework.stereotype.Component;
+
+@Component("formatterPath")
+public class PathFormatter extends AbstractToolFormatter<Path> {
+ public PathFormatter() {
+ super(Path.class);
+ }
+
+ @Override
+ protected Path parseInternal(String str, Locale locale) throws
Exception {
+ return Paths.get(str);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/json/impl/ConvertingJsonDeserializer.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,32 @@
+package gov.hhs.onc.dcdt.json.impl;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+import java.io.IOException;
+import javax.annotation.Nullable;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.convert.ConversionService;
+
+@SuppressWarnings({ "serial" })
+public class ConvertingJsonDeserializer<T, U> extends StdDeserializer<U> {
+ @Autowired
+ protected ConversionService convService;
+
+ protected Class<T> srcClass;
+ protected Class<U> targetClass;
+
+ protected ConvertingJsonDeserializer(Class<T> srcClass, Class<U>
targetClass) {
+ super(targetClass);
+
+ this.srcClass = srcClass;
+ this.targetClass = targetClass;
+ }
+
+ @Nullable
+ @Override
+ public U deserialize(JsonParser jsonParser, DeserializationContext
deserializationContext) throws IOException, JsonProcessingException {
+ return
this.convService.convert(jsonParser.readValueAs(this.srcClass),
this.targetClass);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/json/impl/ConvertingJsonSerializer.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,29 @@
+package gov.hhs.onc.dcdt.json.impl;
+
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.ser.std.StdSerializer;
+import java.io.IOException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.convert.ConversionService;
+
+public class ConvertingJsonSerializer<T, U> extends StdSerializer<T> {
+ @Autowired
+ protected ConversionService convService;
+
+ protected Class<T> srcClass;
+ protected Class<U> targetClass;
+
+ protected ConvertingJsonSerializer(Class<T> srcClass, Class<U>
targetClass) {
+ super(srcClass);
+
+ this.srcClass = srcClass;
+ this.targetClass = targetClass;
+ }
+
+ @Override
+ public void serialize(T src, JsonGenerator jsonGen, SerializerProvider
serializerProvider) throws IOException, JsonGenerationException {
+
serializerProvider.defaultSerializeValue(this.convService.convert(src,
this.targetClass), jsonGen);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/filter/impl/LdapFilterFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,24 @@
+package gov.hhs.onc.dcdt.ldap.filter.impl;
+
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import gov.hhs.onc.dcdt.ldap.utils.ToolLdapFilterUtils;
+import java.util.Locale;
+import org.apache.directory.api.ldap.model.filter.ExprNode;
+import org.springframework.stereotype.Component;
+
+@Component("formatterLdapFilter")
+public class LdapFilterFormatter extends AbstractToolFormatter<ExprNode> {
+ public LdapFilterFormatter() {
+ super(ExprNode.class);
+ }
+
+ @Override
+ protected String printInternal(ExprNode obj, Locale locale) throws
Exception {
+ return ToolLdapFilterUtils.writeFilter(obj);
+ }
+
+ @Override
+ protected ExprNode parseInternal(String str, Locale locale) throws
Exception {
+ return ToolLdapFilterUtils.readFilter(str);
+ }
+}
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/impl/DnFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,21 @@
+package gov.hhs.onc.dcdt.ldap.impl;
+
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import gov.hhs.onc.dcdt.ldap.utils.ToolDnUtils;
+import java.util.Locale;
+import javax.annotation.Nullable;
+import org.apache.directory.api.ldap.model.name.Dn;
+import org.springframework.stereotype.Component;
+
+@Component("formatterDn")
+public class DnFormatter extends AbstractToolFormatter<Dn> {
+ public DnFormatter() {
+ super(Dn.class);
+ }
+
+ @Nullable
+ @Override
+ protected Dn parseInternal(String str, Locale locale) throws Exception
{
+ return ToolDnUtils.fromStrings(str);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/impl/LdapAttributeFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,24 @@
+package gov.hhs.onc.dcdt.ldap.impl;
+
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import gov.hhs.onc.dcdt.ldap.utils.ToolLdapAttributeUtils;
+import java.util.Locale;
+import org.apache.directory.api.ldap.model.entry.Attribute;
+import org.springframework.stereotype.Component;
+
+@Component("formatterLdapAttr")
+public class LdapAttributeFormatter extends
AbstractToolFormatter<Attribute> {
+ public LdapAttributeFormatter() {
+ super(Attribute.class);
+ }
+
+ @Override
+ protected String printInternal(Attribute obj, Locale locale) throws
Exception {
+ return ToolLdapAttributeUtils.writeAttribute(obj);
+ }
+
+ @Override
+ protected Attribute parseInternal(String str, Locale locale) throws
Exception {
+ return ToolLdapAttributeUtils.readAttribute(str);
+ }
+}
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/impl/RdnFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,19 @@
+package gov.hhs.onc.dcdt.ldap.impl;
+
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import gov.hhs.onc.dcdt.ldap.utils.ToolRdnUtils;
+import java.util.Locale;
+import org.apache.directory.api.ldap.model.name.Rdn;
+import org.springframework.stereotype.Component;
+
+@Component("formatterRdn")
+public class RdnFormatter extends AbstractToolFormatter<Rdn> {
+ public RdnFormatter() {
+ super(Rdn.class);
+ }
+
+ @Override
+ protected Rdn parseInternal(String str, Locale locale) throws
Exception {
+ return ToolRdnUtils.fromString(str);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/ldif/impl/LdifFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,24 @@
+package gov.hhs.onc.dcdt.ldap.ldif.impl;
+
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import gov.hhs.onc.dcdt.ldap.utils.ToolLdifUtils;
+import java.util.Locale;
+import org.apache.directory.api.ldap.model.ldif.LdifEntry;
+import org.springframework.stereotype.Component;
+
+@Component("formatterLdif")
+public class LdifFormatter extends AbstractToolFormatter<LdifEntry> {
+ public LdifFormatter() {
+ super(LdifEntry.class);
+ }
+
+ @Override
+ protected String printInternal(LdifEntry obj, Locale locale) throws
Exception {
+ return ToolLdifUtils.writeEntry(obj);
+ }
+
+ @Override
+ protected LdifEntry parseInternal(String str, Locale locale) throws
Exception {
+ return ToolLdifUtils.readEntry(str);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/mail/impl/MailAddressFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,27 @@
+package gov.hhs.onc.dcdt.mail.impl;
+
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import gov.hhs.onc.dcdt.mail.MailAddress;
+import gov.hhs.onc.dcdt.mail.utils.ToolMailAddressUtils;
+import java.util.Locale;
+import javax.annotation.Nullable;
+import org.springframework.stereotype.Component;
+
+@Component("formatterMailAddr")
+public class MailAddressFormatter extends
AbstractToolFormatter<MailAddress> {
+ public MailAddressFormatter() {
+ super(MailAddress.class);
+ }
+
+ @Nullable
+ @Override
+ protected String printInternal(MailAddress obj, Locale locale) throws
Exception {
+ return obj.toAddress();
+ }
+
+ @Nullable
+ @Override
+ protected MailAddress parseInternal(String str, Locale locale) throws
Exception {
+ return new MailAddressImpl(ToolMailAddressUtils.splitParts(str));
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/impl/InetAddressFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,27 @@
+package gov.hhs.onc.dcdt.net.impl;
+
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import gov.hhs.onc.dcdt.net.utils.ToolInetAddressUtils;
+import java.net.InetAddress;
+import java.util.Locale;
+import javax.annotation.Nullable;
+import org.springframework.stereotype.Component;
+
+@Component("formatterInetAddr")
+public class InetAddressFormatter extends
AbstractToolFormatter<InetAddress> {
+ public InetAddressFormatter() {
+ super(InetAddress.class);
+ }
+
+ @Nullable
+ @Override
+ protected String printInternal(InetAddress obj, Locale locale) throws
Exception {
+ return obj.getHostAddress();
+ }
+
+ @Nullable
+ @Override
+ protected InetAddress parseInternal(String str, Locale locale) throws
Exception {
+ return ToolInetAddressUtils.getByAddress(str);
+ }
+}
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/impl/UriFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,18 @@
+package gov.hhs.onc.dcdt.net.impl;
+
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import java.net.URI;
+import java.util.Locale;
+import org.springframework.stereotype.Component;
+
+@Component("formatterUri")
+public class UriFormatter extends AbstractToolFormatter<URI> {
+ public UriFormatter() {
+ super(URI.class);
+ }
+
+ @Override
+ protected URI parseInternal(String str, Locale locale) throws
Exception {
+ return new URI(str);
+ }
+}
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/impl/UrlFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,18 @@
+package gov.hhs.onc.dcdt.net.impl;
+
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import java.net.URL;
+import java.util.Locale;
+import org.springframework.stereotype.Component;
+
+@Component("formatterUrl")
+public class UrlFormatter extends AbstractToolFormatter<URL> {
+ public UrlFormatter() {
+ super(URL.class);
+ }
+
+ @Override
+ protected URL parseInternal(String str, Locale locale) throws
Exception {
+ return new URL(str);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/mime/impl/MimeTypeFormatter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,19 @@
+package gov.hhs.onc.dcdt.net.mime.impl;
+
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import java.util.Locale;
+import org.springframework.stereotype.Component;
+import org.springframework.util.MimeType;
+import org.springframework.util.MimeTypeUtils;
+
+@Component("formatterMimeType")
+public class MimeTypeFormatter extends AbstractToolFormatter<MimeType> {
+ public MimeTypeFormatter() {
+ super(MimeType.class);
+ }
+
+ @Override
+ protected MimeType parseInternal(String str, Locale locale) throws
Exception {
+ return MimeTypeUtils.parseMimeType(str);
+ }
+}
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/utils/ToolEnumUtils.java Mon
Jun 23 06:12:33 2014 UTC
@@ -0,0 +1,18 @@
+package gov.hhs.onc.dcdt.utils;
+
+import
gov.hhs.onc.dcdt.beans.utils.ToolBeanPropertyUtils.BeanPropertyValuePredicate;
+import java.util.EnumSet;
+import javax.annotation.Nullable;
+import org.apache.commons.collections4.CollectionUtils;
+
+public abstract class ToolEnumUtils {
+ @Nullable
+ public static <T extends Enum<T>> T findByPropertyValue(Class<T>
enumClass, String propName, @Nullable Object propValue) {
+ return findByPropertyValue(EnumSet.allOf(enumClass), propName,
propValue);
+ }
+
+ @Nullable
+ public static <T extends Enum<T>> T findByPropertyValue(Iterable<T>
enumItems, String propName, @Nullable Object propValue) {
+ return CollectionUtils.find(enumItems, new
BeanPropertyValuePredicate<>(propName, propValue));
+ }
+}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/impl/NamedBeanConverter.java
Sat Feb 8 18:10:52 2014 UTC
+++ /dev/null
@@ -1,36 +0,0 @@
-package gov.hhs.onc.dcdt.beans.impl;
-
-import gov.hhs.onc.dcdt.beans.ToolNamedBean;
-import gov.hhs.onc.dcdt.beans.utils.ToolBeanUtils;
-import gov.hhs.onc.dcdt.convert.Converts;
-import gov.hhs.onc.dcdt.convert.Converts.List;
-import gov.hhs.onc.dcdt.convert.ConvertsJson;
-import gov.hhs.onc.dcdt.convert.impl.AbstractToolConverter;
-import javax.annotation.Nullable;
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.context.support.AbstractApplicationContext;
-import org.springframework.core.convert.TypeDescriptor;
-import org.springframework.stereotype.Component;
-
-@Component("namedBeanConv")
-@ConvertsJson(deserialize = { @Converts(from = String.class, to =
ToolNamedBean.class) })
-@List({ @Converts(from = String.class, to = ToolNamedBean.class) })
-public class NamedBeanConverter extends AbstractToolConverter implements
ApplicationContextAware {
- private final static TypeDescriptor TYPE_DESC_NAMED_BEAN =
TypeDescriptor.valueOf(ToolNamedBean.class);
-
- private AbstractApplicationContext appContext;
-
- @Nullable
- @Override
- protected Object convertInternal(Object source, TypeDescriptor
sourceType, TypeDescriptor targetType, ConvertiblePair convertPair) throws
Exception {
- return sourceType.isAssignableTo(TYPE_DESC_NAMED_BEAN) ?
((ToolNamedBean) source).getName() :
ToolBeanUtils.findNamed(this.appContext,
- ((String) source));
- }
-
- @Override
- public void setApplicationContext(ApplicationContext appContext)
throws BeansException {
- this.appContext = (AbstractApplicationContext) appContext;
- }
-}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/ConvertsJson.java Sat
Feb 8 12:24:38 2014 UTC
+++ /dev/null
@@ -1,21 +0,0 @@
-package gov.hhs.onc.dcdt.convert;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Documented
-@Inherited
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ ElementType.TYPE })
-public @interface ConvertsJson {
- public final static String ANNO_ATTR_NAME_DESERIALIZE = "deserialize";
- public final static String ANNO_ATTR_NAME_SERIALIZE = "serialize";
-
- Converts[] deserialize() default {};
-
- Converts[] serialize() default {};
-}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/ConvertsUserType.java
Sun Jan 26 07:27:08 2014 UTC
+++ /dev/null
@@ -1,17 +0,0 @@
-package gov.hhs.onc.dcdt.convert;
-
-import gov.hhs.onc.dcdt.data.types.ToolUserType;
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Documented
-@Inherited
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ ElementType.TYPE })
-public @interface ConvertsUserType {
- Class<? extends ToolUserType<?, ?, ?, ?>> value();
-}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/impl/X500NameConverter.java
Sat Feb 8 18:10:52 2014 UTC
+++ /dev/null
@@ -1,26 +0,0 @@
-package gov.hhs.onc.dcdt.crypto.impl;
-
-import gov.hhs.onc.dcdt.convert.Converts;
-import gov.hhs.onc.dcdt.convert.Converts.List;
-import gov.hhs.onc.dcdt.convert.ConvertsJson;
-import gov.hhs.onc.dcdt.convert.ConvertsUserType;
-import gov.hhs.onc.dcdt.convert.impl.AbstractToolConverter;
-import java.util.Objects;
-import javax.annotation.Nullable;
-import org.bouncycastle.asn1.x500.X500Name;
-import org.springframework.core.convert.TypeDescriptor;
-import org.springframework.stereotype.Component;
-
-@Component("x500NameConv")
-@ConvertsJson(deserialize = { @Converts(from = String.class, to =
X500Name.class) }, serialize = { @Converts(from = X500Name.class, to =
String.class) })
-@ConvertsUserType(X500NameUserType.class)
-@List({ @Converts(from = String.class, to = X500Name.class),
@Converts(from = X500Name.class, to = String.class) })
-public class X500NameConverter extends AbstractToolConverter {
- private final static TypeDescriptor TYPE_DESC_X500_NAME =
TypeDescriptor.valueOf(X500Name.class);
-
- @Nullable
- @Override
- protected Object convertInternal(Object source, TypeDescriptor
sourceType, TypeDescriptor targetType, ConvertiblePair convertPair) throws
Exception {
- return sourceType.isAssignableTo(TYPE_DESC_X500_NAME) ?
Objects.toString(source) : new X500Name((String) source);
- }
-}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsNameLabel.java Thu Jan
16 14:44:16 2014 UTC
+++ /dev/null
@@ -1,9 +0,0 @@
-package gov.hhs.onc.dcdt.dns;
-
-import
org.xbill.DNS.Name;
-
-public interface DnsNameLabel {
- public Name getDnsNameLabel() throws DnsNameException;
-
- public String getDnsNameLabelString();
-}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/filter/impl/LdapFilterConverter.java
Sun Mar 9 09:38:59 2014 UTC
+++ /dev/null
@@ -1,23 +0,0 @@
-package gov.hhs.onc.dcdt.ldap.filter.impl;
-
-import gov.hhs.onc.dcdt.convert.Converts;
-import gov.hhs.onc.dcdt.convert.Converts.List;
-import gov.hhs.onc.dcdt.convert.impl.AbstractToolConverter;
-import gov.hhs.onc.dcdt.ldap.utils.ToolLdapFilterUtils;
-import javax.annotation.Nullable;
-import org.apache.directory.api.ldap.model.filter.ExprNode;
-import org.springframework.core.convert.TypeDescriptor;
-import org.springframework.stereotype.Component;
-
-@Component("ldapFilterConv")
-@List({ @Converts(from = String.class, to = ExprNode.class),
@Converts(from = ExprNode.class, to = String.class) })
-public class LdapFilterConverter extends AbstractToolConverter {
- private final static TypeDescriptor TYPE_DESC_EXPR_NODE =
TypeDescriptor.valueOf(ExprNode.class);
-
- @Nullable
- @Override
- protected Object convertInternal(Object source, TypeDescriptor
sourceType, TypeDescriptor targetType, ConvertiblePair convertPair) throws
Exception {
- return (sourceType.isAssignableTo(TYPE_DESC_EXPR_NODE) ?
ToolLdapFilterUtils.writeFilter(((ExprNode) source)) : ToolLdapFilterUtils
- .readFilter(((String) source)));
- }
-}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/ldap/impl/LdapAttributeConverter.java
Sun Mar 9 01:31:59 2014 UTC
+++ /dev/null
@@ -1,25 +0,0 @@
-package gov.hhs.onc.dcdt.ldap.impl;
-
-import gov.hhs.onc.dcdt.convert.Converts;
-import gov.hhs.onc.dcdt.convert.Converts.List;
-import gov.hhs.onc.dcdt.convert.ConvertsJson;
-import gov.hhs.onc.dcdt.convert.impl.AbstractToolConverter;
-import gov.hhs.onc.dcdt.ldap.utils.ToolLdapAttributeUtils;
-import javax.annotation.Nullable;
-import org.apache.directory.api.ldap.model.entry.Attribute;
-import org.springframework.core.convert.TypeDescriptor;
-import org.springframework.stereotype.Component;
-
-@Component("ldapAttrConv")
-@ConvertsJson(deserialize = { @Converts(from = String.class, to =
Attribute.class) }, serialize = { @Converts(from = Attribute.class, to =
String.class) })
-@List({ @Converts(from = String.class, to = Attribute.class),
@Converts(from = Attribute.class, to = String.class) })
-public class LdapAttributeConverter extends AbstractToolConverter {
- private final static TypeDescriptor TYPE_DESC_LDAP_ATTR =
TypeDescriptor.valueOf(Attribute.class);
-
- @Nullable
- @Override
- protected Object convertInternal(Object source, TypeDescriptor
sourceType, TypeDescriptor targetType, ConvertiblePair convertPair) throws
Exception {
- return (sourceType.isAssignableTo(TYPE_DESC_LDAP_ATTR) ?
ToolLdapAttributeUtils.writeAttribute(((Attribute) source)) :
ToolLdapAttributeUtils
- .readAttribute(((String) source)));
- }
-}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/impl/UriConverter.java
Sat Feb 8 18:10:52 2014 UTC
+++ /dev/null
@@ -1,26 +0,0 @@
-package gov.hhs.onc.dcdt.net.impl;
-
-import gov.hhs.onc.dcdt.convert.Converts;
-import gov.hhs.onc.dcdt.convert.Converts.List;
-import gov.hhs.onc.dcdt.convert.ConvertsJson;
-import gov.hhs.onc.dcdt.convert.ConvertsUserType;
-import gov.hhs.onc.dcdt.convert.impl.AbstractToolConverter;
-import java.net.URI;
-import java.util.Objects;
-import javax.annotation.Nullable;
-import org.springframework.core.convert.TypeDescriptor;
-import org.springframework.stereotype.Component;
-
-@Component("uriConv")
-@ConvertsJson(deserialize = { @Converts(from = String.class, to =
URI.class) }, serialize = { @Converts(from = URI.class, to = String.class)
})
-@ConvertsUserType(UriUserType.class)
-@List({ @Converts(from = String.class, to = URI.class), @Converts(from =
URI.class, to = String.class) })
-public class UriConverter extends AbstractToolConverter {
- private final static TypeDescriptor TYPE_DESC_URI =
TypeDescriptor.valueOf(URI.class);
-
- @Nullable
- @Override
- protected Object convertInternal(Object source, TypeDescriptor
sourceType, TypeDescriptor targetType, ConvertiblePair convertPair) throws
Exception {
- return sourceType.isAssignableTo(TYPE_DESC_URI) ?
Objects.toString(source) : new URI((String) source);
- }
-}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/impl/UrlConverter.java
Sat Feb 8 18:10:52 2014 UTC
+++ /dev/null
@@ -1,26 +0,0 @@
-package gov.hhs.onc.dcdt.net.impl;
-
-import gov.hhs.onc.dcdt.convert.Converts;
-import gov.hhs.onc.dcdt.convert.Converts.List;
-import gov.hhs.onc.dcdt.convert.ConvertsJson;
-import gov.hhs.onc.dcdt.convert.ConvertsUserType;
-import gov.hhs.onc.dcdt.convert.impl.AbstractToolConverter;
-import java.net.URL;
-import java.util.Objects;
-import javax.annotation.Nullable;
-import org.springframework.core.convert.TypeDescriptor;
-import org.springframework.stereotype.Component;
-
-@Component("urlConv")
-@ConvertsJson(deserialize = { @Converts(from = String.class, to =
URL.class) }, serialize = { @Converts(from = URL.class, to = String.class)
})
-@ConvertsUserType(UrlUserType.class)
-@List({ @Converts(from = String.class, to = URL.class), @Converts(from =
URL.class, to = String.class) })
-public class UrlConverter extends AbstractToolConverter {
- private final static TypeDescriptor TYPE_DESC_URL =
TypeDescriptor.valueOf(URL.class);
-
- @Nullable
- @Override
- protected Object convertInternal(Object source, TypeDescriptor
sourceType, TypeDescriptor targetType, ConvertiblePair convertPair) throws
Exception {
- return sourceType.isAssignableTo(TYPE_DESC_URL) ?
Objects.toString(source) : new URL((String) source);
- }
-}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/net/mime/impl/MimeTypeConverter.java
Tue Mar 25 18:00:58 2014 UTC
+++ /dev/null
@@ -1,25 +0,0 @@
-package gov.hhs.onc.dcdt.net.mime.impl;
-
-import gov.hhs.onc.dcdt.convert.Converts;
-import gov.hhs.onc.dcdt.convert.Converts.List;
-import gov.hhs.onc.dcdt.convert.ConvertsJson;
-import gov.hhs.onc.dcdt.convert.impl.AbstractToolConverter;
-import java.util.Objects;
-import javax.annotation.Nullable;
-import org.springframework.core.convert.TypeDescriptor;
-import org.springframework.stereotype.Component;
-import org.springframework.util.MimeType;
-import org.springframework.util.MimeTypeUtils;
-
-@Component("mimeTypeConv")
-@ConvertsJson(deserialize = { @Converts(from = String.class, to =
MimeType.class) }, serialize = { @Converts(from = MimeType.class, to =
String.class) })
-@List({ @Converts(from = String.class, to = MimeType.class),
@Converts(from = MimeType.class, to = String.class) })
-public class MimeTypeConverter extends AbstractToolConverter {
- private final static TypeDescriptor TYPE_DESC_MIME_TYPE =
TypeDescriptor.valueOf(MimeType.class);
-
- @Nullable
- @Override
- protected Object convertInternal(Object source, TypeDescriptor
sourceType, TypeDescriptor targetType, ConvertiblePair convertPair) throws
Exception {
- return sourceType.isAssignableTo(TYPE_DESC_MIME_TYPE) ?
Objects.toString(source) : MimeTypeUtils.parseMimeType((String) source);
- }
-}
=======================================
--- /dcdt-core/src/assembly/tomcat.xml Tue Feb 25 21:16:43 2014 UTC
+++ /dcdt-core/src/assembly/tomcat.xml Mon Jun 23 06:12:33 2014 UTC
@@ -15,6 +15,7 @@
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<includes>
+
<include>gov/hhs/onc/dcdt/logback/NoOpAppender.class</include>
<include>gov/hhs/onc/dcdt/logback/pattern/ToolThrowableProxyConverter.class</include>
<include>gov/hhs/onc/dcdt/logback/pattern/color/ToolPriorityConverter.class</include>
</includes>
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
Thu Mar 20 10:07:30 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
Mon Jun 23 06:12:33 2014 UTC
@@ -23,6 +23,7 @@
import gov.hhs.onc.dcdt.dns.config.TargetedDnsRecordConfig;
import gov.hhs.onc.dcdt.dns.utils.ToolDnsNameUtils;
import gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils;
+import gov.hhs.onc.dcdt.dns.utils.ToolDnsUtils;
import gov.hhs.onc.dcdt.mail.MailAddress;
import gov.hhs.onc.dcdt.testcases.discovery.DiscoveryTestcase;
import
gov.hhs.onc.dcdt.testcases.discovery.DiscoveryTestcase.DiscoveryTestcaseCredentialsExtractor;
@@ -103,7 +104,8 @@
@Override
public <T extends Record> Collection<T> findAnswers(T questionRecord) {
- return ToolDnsRecordUtils.findAnswers(questionRecord,
this.mapRecordConfigs().get(ToolDnsRecordUtils.findByType(questionRecord.getType())));
+ return ToolDnsRecordUtils.findAnswers(questionRecord,
+
this.mapRecordConfigs().get(ToolDnsUtils.findByCode(DnsRecordType.class,
questionRecord.getType())));
}
@Override
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/Converts.java Fri
Dec 6 12:29:39 2013 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/Converts.java Mon Jun
23 06:12:33 2014 UTC
@@ -16,11 +16,11 @@
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE })
- public @interface List {
- Converts[] value();
- }
+ public @interface Convert {
+ Class<?> from();
- Class<?> from();
+ Class<?> to();
+ }
- Class<?> to();
+ Convert[] value();
}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/ToolConverter.java
Sat Feb 8 12:24:38 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/ToolConverter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -1,32 +1,16 @@
package gov.hhs.onc.dcdt.convert;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonSerializer;
import gov.hhs.onc.dcdt.beans.ToolBean;
-import gov.hhs.onc.dcdt.data.types.ToolUserType;
-import java.util.Set;
import javax.annotation.Nullable;
import org.springframework.core.convert.TypeDescriptor;
import
org.springframework.core.convert.converter.ConditionalGenericConverter;
public interface ToolConverter extends ConditionalGenericConverter,
ToolBean {
@Nullable
- public <T, U> U convert(@Nullable T source, Class<T> sourceClass,
Class<U> targetClass);
-
- @Nullable
- @Override
- public Object convert(@Nullable Object source, TypeDescriptor
sourceType, TypeDescriptor targetType);
-
- public boolean hasJsonDeserializers();
-
- public Set<JsonDeserializer<?>> getJsonDeserializers();
-
- public boolean hasJsonSerializers();
-
- public Set<JsonSerializer<?>> getJsonSerializers();
+ public <T, U> U convert(@Nullable T src, Class<T> srcClass, Class<U>
targetClass);
- public boolean hasUserTypeClass();
+ public boolean canConvert(@Nullable Object src, TypeDescriptor
srcType, TypeDescriptor targetType, @Nullable ConvertiblePair convType);
@Nullable
- public Class<? extends ToolUserType<?, ?, ?, ?>> getUserTypeClass();
+ public ConvertiblePair findConvertibleType(@Nullable Object src,
TypeDescriptor srcType, TypeDescriptor targetType);
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/impl/AbstractToolConverter.java
Sat Feb 8 12:24:38 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/convert/impl/AbstractToolConverter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -1,29 +1,19 @@
package gov.hhs.onc.dcdt.convert.impl;
-import com.fasterxml.jackson.core.JsonGenerationException;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
-import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import gov.hhs.onc.dcdt.beans.impl.AbstractToolBean;
+import gov.hhs.onc.dcdt.collections.impl.AbstractToolTransformer;
import gov.hhs.onc.dcdt.convert.Converts;
-import gov.hhs.onc.dcdt.convert.ConvertsJson;
-import gov.hhs.onc.dcdt.convert.ConvertsUserType;
+import gov.hhs.onc.dcdt.convert.Converts.Convert;
import gov.hhs.onc.dcdt.convert.ToolConverter;
-import gov.hhs.onc.dcdt.data.types.ToolUserType;
+import
gov.hhs.onc.dcdt.convert.utils.ToolConversionUtils.IsAssignableConvertiblePredicate;
import gov.hhs.onc.dcdt.utils.ToolAnnotationUtils;
import gov.hhs.onc.dcdt.utils.ToolClassUtils;
import gov.hhs.onc.dcdt.utils.ToolCollectionUtils;
import gov.hhs.onc.dcdt.utils.ToolIteratorUtils;
-import java.io.IOException;
-import java.util.LinkedHashSet;
+import java.util.HashSet;
import java.util.Set;
import javax.annotation.Nullable;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.IteratorUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -31,44 +21,12 @@
import org.springframework.core.convert.TypeDescriptor;
public abstract class AbstractToolConverter extends AbstractToolBean
implements ToolConverter {
- @SuppressWarnings({ "serial" })
- protected static class ConvertingJsonDeserializer<T, U> extends
StdDeserializer<U> {
- private ToolConverter conv;
- private Class<T> sourceClass;
- private Class<U> targetClass;
+ protected static class ConvertAnnotationTransformer extends
AbstractToolTransformer<Convert, ConvertiblePair> {
+ public final static ConvertAnnotationTransformer INSTANCE = new
ConvertAnnotationTransformer();
- public ConvertingJsonDeserializer(ToolConverter conv, Class<T>
sourceClass, Class<U> targetClass) {
- super(targetClass);
-
- this.conv = conv;
- this.sourceClass = sourceClass;
- this.targetClass = targetClass;
- }
-
- @Nullable
@Override
- public U deserialize(JsonParser jsonParser, DeserializationContext
deserializationContext) throws IOException, JsonProcessingException {
- return
this.conv.convert(jsonParser.readValueAs(this.sourceClass),
this.sourceClass, this.targetClass);
- }
- }
-
- @SuppressWarnings({ "serial" })
- protected static class ConvertingJsonSerializer<T, U> extends
StdSerializer<T> {
- private ToolConverter conv;
- private Class<T> sourceClass;
- private Class<U> targetClass;
-
- public ConvertingJsonSerializer(ToolConverter conv, Class<T>
sourceClass, Class<U> targetClass) {
- super(sourceClass);
-
- this.conv = conv;
- this.sourceClass = sourceClass;
- this.targetClass = targetClass;
- }
-
- @Override
- public void serialize(T source, JsonGenerator jsonGen,
SerializerProvider serializerProvider) throws IOException,
JsonGenerationException {
-
serializerProvider.defaultSerializeValue(this.conv.convert(source,
this.sourceClass, this.targetClass), jsonGen);
+ protected ConvertiblePair transformInternal(Convert convAnno)
throws Exception {
+ return new ConvertiblePair(convAnno.from(), convAnno.to());
}
}
@@ -77,135 +35,71 @@
protected final static TypeDescriptor TYPE_DESC_STR =
TypeDescriptor.valueOf(String.class);
protected final static TypeDescriptor TYPE_DESC_STR_ARR =
TypeDescriptor.array(TYPE_DESC_STR);
- protected Set<ConvertiblePair> convertPairs;
- protected Set<JsonDeserializer<?>> jsonDeserializers = new
LinkedHashSet<>();
- protected Set<JsonSerializer<?>> jsonSerializers = new
LinkedHashSet<>();
- protected Class<? extends ToolUserType<?, ?, ?, ?>> userTypeClass;
+ protected Set<ConvertiblePair> convTypes = new HashSet<>();
private final static Logger LOGGER =
LoggerFactory.getLogger(AbstractToolConverter.class);
@Nullable
@Override
- public <T, U> U convert(@Nullable T source, Class<T> sourceClass,
Class<U> targetClass) {
- return targetClass.cast(this.convert(source,
TypeDescriptor.valueOf(sourceClass), TypeDescriptor.valueOf(targetClass)));
+ public <T, U> U convert(@Nullable T src, Class<T> srcClass, Class<U>
targetClass) {
+ return targetClass.cast(this.convert(src,
TypeDescriptor.valueOf(srcClass), TypeDescriptor.valueOf(targetClass)));
}
@Nullable
@Override
- public Object convert(@Nullable Object source, TypeDescriptor
sourceType, TypeDescriptor targetType) {
- if (source == null) {
+ public Object convert(@Nullable Object src, TypeDescriptor srcType,
TypeDescriptor targetType) {
+ ConvertiblePair convType = this.findConvertibleType(src, srcType,
targetType);
+
+ if (!this.canConvert(src, srcType, targetType, convType)) {
return null;
}
-
- ConvertiblePair convertPair =
this.findConvertibleTypes(sourceType, targetType);
try {
- Object target = this.convertInternal(source, sourceType,
targetType, convertPair);
+ Object target = this.convertInternal(src, srcType, targetType,
convType);
- LOGGER.trace(String.format("Converted (class=%s) source object
(class=%s, sourceClass=%s) to target object (class=%s, targetClass=%s).",
- ToolClassUtils.getName(this),
ToolClassUtils.getName(source), ToolClassUtils.getName(sourceType),
ToolClassUtils.getName(target),
- ToolClassUtils.getName(targetType)));
+ LOGGER.trace(String.format("Converted (class=%s) source object
(class=%s, srcClass=%s) to target object (class=%s, targetClass=%s).",
+ ToolClassUtils.getName(this), ToolClassUtils.getName(src),
ToolClassUtils.getName(srcType.getType()), ToolClassUtils.getName(target),
+ ToolClassUtils.getName(targetType.getType())));
return target;
+ } catch (ConversionFailedException e) {
+ throw e;
} catch (Exception e) {
- throw new ConversionFailedException(sourceType, targetType,
String.format(
- "Unable to convert (class=%s) source object (class=%s,
sourceClass=%s) to target (targetClass=%s).", ToolClassUtils.getName(this),
- ToolClassUtils.getName(source),
ToolClassUtils.getName(sourceType), ToolClassUtils.getName(targetType)), e);
+ throw new ConversionFailedException(srcType, targetType, src,
e);
}
}
@Override
- public boolean matches(TypeDescriptor sourceType, TypeDescriptor
targetType) {
- return this.findConvertibleTypes(sourceType, targetType) != null;
- }
-
- @Override
- public void afterPropertiesSet() throws Exception {
- Class<?> convClass = this.getClass();
-
- this.convertPairs =
-
toConvertiblePairs(ToolCollectionUtils.addAll(ToolAnnotationUtils.findAnnotations(Converts.class,
convClass), IteratorUtils
- .asIterable(ToolIteratorUtils.chainedArrayIterator(ToolAnnotationUtils.getValues(Converts.List.class,
Converts[].class,
convClass)))));
-
- for (ConvertiblePair jsonDeserializeConvertPair :
toConvertiblePairs(IteratorUtils.asIterable(ToolIteratorUtils
- .chainedArrayIterator(ToolAnnotationUtils.getValues(ConvertsJson.class,
Converts[].class,
ConvertsJson.ANNO_ATTR_NAME_DESERIALIZE, convClass))))) {
- this.jsonDeserializers.add(new
ConvertingJsonDeserializer<>(this,
jsonDeserializeConvertPair.getSourceType(), jsonDeserializeConvertPair
- .getTargetType()));
- }
-
- for (ConvertiblePair jsonSerializeConvertPair :
toConvertiblePairs(IteratorUtils.asIterable(ToolIteratorUtils.chainedArrayIterator(ToolAnnotationUtils
- .getValues(ConvertsJson.class, Converts[].class,
ConvertsJson.ANNO_ATTR_NAME_SERIALIZE, convClass))))) {
- this.jsonSerializers.add(new ConvertingJsonSerializer<>(this,
jsonSerializeConvertPair.getSourceType(),
jsonSerializeConvertPair.getTargetType()));
- }
-
- ConvertsUserType convertsUserTypeAnno =
ToolAnnotationUtils.findAnnotation(ConvertsUserType.class, convClass);
- this.userTypeClass = (convertsUserTypeAnno != null) ?
convertsUserTypeAnno.value() : null;
- }
-
- protected static Set<ConvertiblePair>
toConvertiblePairs(Iterable<Converts> convertsAnnos) {
- Set<ConvertiblePair> convertPairs = new LinkedHashSet<>();
-
- for (Converts convertsAnno : convertsAnnos) {
- convertPairs.add(toConvertiblePair(convertsAnno));
- }
-
- return convertPairs;
- }
-
- @Nullable
- protected static ConvertiblePair toConvertiblePair(@Nullable Converts
convertsAnno) {
- return (convertsAnno != null) ? new
ConvertiblePair(convertsAnno.from(), convertsAnno.to()) : null;
+ public boolean canConvert(@Nullable Object src, TypeDescriptor
srcType, TypeDescriptor targetType, @Nullable ConvertiblePair convType) {
+ return ((src != null) && (convType != null));
}
-
- @Nullable
- protected abstract Object convertInternal(Object source,
TypeDescriptor sourceType, TypeDescriptor targetType, ConvertiblePair
convertPair)
- throws Exception;
@Nullable
- protected ConvertiblePair findConvertibleTypes(TypeDescriptor
sourceType, TypeDescriptor targetType) {
- for (ConvertiblePair convertPair : this.convertPairs) {
- if
(sourceType.isAssignableTo(TypeDescriptor.valueOf(convertPair.getSourceType()))
- &&
targetType.isAssignableTo(TypeDescriptor.valueOf(convertPair.getTargetType())))
{
- return convertPair;
- }
- }
-
- return null;
- }
-
- @Override
- public Set<ConvertiblePair> getConvertibleTypes() {
- return this.convertPairs;
- }
-
- @Override
- public boolean hasJsonDeserializers() {
- return !this.jsonDeserializers.isEmpty();
- }
-
@Override
- public Set<JsonDeserializer<?>> getJsonDeserializers() {
- return this.jsonDeserializers;
+ public ConvertiblePair findConvertibleType(@Nullable Object src,
TypeDescriptor srcType, TypeDescriptor targetType) {
+ return CollectionUtils.find(this.convTypes, new
IsAssignableConvertiblePredicate(srcType, targetType));
}
@Override
- public boolean hasJsonSerializers() {
- return !this.jsonSerializers.isEmpty();
+ public boolean matches(TypeDescriptor srcType, TypeDescriptor
targetType) {
+ return CollectionUtils.exists(this.convTypes, new
IsAssignableConvertiblePredicate(srcType, targetType));
}
@Override
- public Set<JsonSerializer<?>> getJsonSerializers() {
- return this.jsonSerializers;
- }
+ public void afterPropertiesSet() throws Exception {
+ Class<? extends ToolConverter> convClass = this.getClass();
- @Override
- public boolean hasUserTypeClass() {
- return this.userTypeClass != null;
+ ToolCollectionUtils.addAll(this.convTypes, CollectionUtils.collect(
+
ToolCollectionUtils.addAll(ToolAnnotationUtils.findAnnotations(Convert.class,
convClass),
+
IteratorUtils.asIterable(ToolIteratorUtils.chainedArrayIterator(ToolAnnotationUtils.getValues(Converts.class,
Convert[].class, convClass)))),
+ ConvertAnnotationTransformer.INSTANCE));
}
@Nullable
+ protected abstract Object convertInternal(Object src, TypeDescriptor
srcType, TypeDescriptor targetType, ConvertiblePair convType) throws
Exception;
+
@Override
- public Class<? extends ToolUserType<?, ?, ?, ?>> getUserTypeClass() {
- return this.userTypeClass;
+ public Set<ConvertiblePair> getConvertibleTypes() {
+ return this.convTypes;
}
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyAlgorithmIdentifier.java
Tue Mar 25 18:00:58 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyAlgorithmIdentifier.java
Mon Jun 23 06:12:33 2014 UTC
@@ -3,5 +3,7 @@
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
public interface CryptographyAlgorithmIdentifier extends
CryptographyObjectIdentifier {
+ public final static String PROP_NAME_ALG_ID = "algId";
+
public AlgorithmIdentifier getAlgorithmId();
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyIdentifier.java
Tue Mar 25 18:00:58 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyIdentifier.java
Mon Jun 23 06:12:33 2014 UTC
@@ -1,5 +1,7 @@
package gov.hhs.onc.dcdt.crypto;
public interface CryptographyIdentifier {
+ public final static String PROP_NAME_ID = "id";
+
public String getId();
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyObjectIdentifier.java
Wed Jan 8 19:43:02 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyObjectIdentifier.java
Mon Jun 23 06:12:33 2014 UTC
@@ -3,5 +3,7 @@
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
public interface CryptographyObjectIdentifier extends
CryptographyIdentifier {
+ public final static String PROP_NAME_OID = "oid";
+
public ASN1ObjectIdentifier getOid();
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyTaggedIdentifier.java
Tue Apr 1 19:19:58 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyTaggedIdentifier.java
Mon Jun 23 06:12:33 2014 UTC
@@ -1,5 +1,7 @@
package gov.hhs.onc.dcdt.crypto;
public interface CryptographyTaggedIdentifier extends
CryptographyIdentifier {
+ public final static String PROP_NAME_TAG = "tag";
+
public int getTag();
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyTypeIdentifier.java
Sat Jan 11 05:31:59 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/CryptographyTypeIdentifier.java
Mon Jun 23 06:12:33 2014 UTC
@@ -1,5 +1,7 @@
package gov.hhs.onc.dcdt.crypto;
public interface CryptographyTypeIdentifier extends CryptographyIdentifier
{
+ public final static String PROP_NAME_TYPE = "type";
+
public Class<?> getType();
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/impl/CertificateConverter.java
Tue Jun 3 18:06:45 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/impl/CertificateConverter.java
Mon Jun 23 06:12:33 2014 UTC
@@ -1,9 +1,7 @@
package gov.hhs.onc.dcdt.crypto.certs.impl;
import gov.hhs.onc.dcdt.convert.Converts;
-import gov.hhs.onc.dcdt.convert.Converts.List;
-import gov.hhs.onc.dcdt.convert.ConvertsJson;
-import gov.hhs.onc.dcdt.convert.ConvertsUserType;
+import gov.hhs.onc.dcdt.convert.Converts.Convert;
import gov.hhs.onc.dcdt.convert.impl.AbstractToolConverter;
import gov.hhs.onc.dcdt.crypto.DataEncoding;
import gov.hhs.onc.dcdt.crypto.certs.CertificateType;
@@ -14,25 +12,15 @@
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.stereotype.Component;
-@Component("certConv")
-@ConvertsJson(serialize = { @Converts(from = X509Certificate.class, to =
String.class) })
-@ConvertsUserType(CertificateUserType.class)
-@List({ @Converts(from = byte[].class, to = X509Certificate.class),
@Converts(from = X509Certificate.class, to = byte[].class),
- @Converts(from = X509Certificate.class, to = String.class) })
+@Component("convCert")
+@Converts({ @Convert(from = byte[].class, to = X509Certificate.class),
@Convert(from = X509Certificate.class, to = byte[].class) })
public class CertificateConverter extends AbstractToolConverter {
private final static TypeDescriptor TYPE_DESC_CERT =
TypeDescriptor.valueOf(X509Certificate.class);
@Nullable
@Override
- protected Object convertInternal(Object source, TypeDescriptor
sourceType, TypeDescriptor targetType, ConvertiblePair convertPair) throws
Exception {
- if (sourceType.isAssignableTo(TYPE_DESC_CERT)) {
- X509Certificate sourceCert = ((X509Certificate) source);
-
- return (targetType.isAssignableTo(TYPE_DESC_BYTE_ARR) ?
CertificateUtils.writeCertificate(sourceCert, DataEncoding.PEM) :
CertificateUtils
- .certificateToString(sourceCert));
- } else {
- return CertificateUtils.readCertificate((byte[]) source,
CryptographyUtils.findTypeId(CertificateType.class,
targetType.getObjectType()),
- DataEncoding.PEM);
- }
+ protected Object convertInternal(Object src, TypeDescriptor srcType,
TypeDescriptor targetType, ConvertiblePair convPair) throws Exception {
+ return (srcType.isAssignableTo(TYPE_DESC_CERT) ?
CertificateUtils.writeCertificate(((X509Certificate) src),
DataEncoding.PEM) : CertificateUtils
+ .readCertificate(((byte[]) src),
CryptographyUtils.findByType(CertificateType.class,
targetType.getObjectType()), DataEncoding.PEM));
}
}
=======================================
***Additional files exist in this changeset.***
==============================================================================
Revision: 905ed2dfe85f
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Mon Jun 23 13:21:03 2014 UTC
Log: - Further supports DCDT-169.
- Improved DNS service logging by implementing custom DNS message Spring
(field) formatter.
- Added all possible values for all dnsjava constant enumerations.
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=905ed2dfe85f
Added:
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageOpcode.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/impl/DnsMessageFormatter.java
Deleted:
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsOperationType.java
Modified:
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/discovery/steps/dns/impl/DnsCertRecordLookupStepImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsCertificateType.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsKeyAlgorithmType.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageFlag.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageRcode.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageSection.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsRecordType.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsResultType.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/CertRecordConfigImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupService.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/impl/DnsLookupServiceImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsUtils.java
/dcdt-core/src/main/resources/META-INF/spring/spring-core-convert.xml
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageOpcode.java Mon
Jun 23 13:21:03 2014 UTC
@@ -0,0 +1,27 @@
+package gov.hhs.onc.dcdt.dns;
+
+import javax.annotation.Nonnegative;
+import org.xbill.DNS.Opcode;
+
+public enum DnsMessageOpcode implements DnsMnemonicIdentifier {
+ QUERY(Opcode.QUERY), IQUERY(Opcode.IQUERY), STATUS(Opcode.STATUS),
NOTIFY(Opcode.NOTIFY), UPDATE(Opcode.UPDATE);
+
+ private final int code;
+ private final String id;
+
+ private DnsMessageOpcode(@Nonnegative int code) {
+ this.code = code;
+
this.id = Opcode.string(code);
+ }
+
+ @Nonnegative
+ @Override
+ public int getCode() {
+ return this.code;
+ }
+
+ @Override
+ public String getId() {
+ return
this.id;
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/impl/DnsMessageFormatter.java
Mon Jun 23 13:21:03 2014 UTC
@@ -0,0 +1,206 @@
+package gov.hhs.onc.dcdt.dns.impl;
+
+import gov.hhs.onc.dcdt.dns.DnsCertificateType;
+import gov.hhs.onc.dcdt.dns.DnsDclassType;
+import gov.hhs.onc.dcdt.dns.DnsKeyAlgorithmType;
+import gov.hhs.onc.dcdt.dns.DnsMessageFlag;
+import gov.hhs.onc.dcdt.dns.DnsMessageOpcode;
+import gov.hhs.onc.dcdt.dns.DnsMessageSection;
+import gov.hhs.onc.dcdt.dns.DnsRecordType;
+import gov.hhs.onc.dcdt.dns.utils.ToolDnsMessageUtils;
+import gov.hhs.onc.dcdt.dns.utils.ToolDnsUtils;
+import gov.hhs.onc.dcdt.format.impl.AbstractToolFormatter;
+import gov.hhs.onc.dcdt.utils.ToolStringUtils.ToolStrBuilder;
+import java.util.EnumSet;
+import java.util.Locale;
+import java.util.Set;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+import org.xbill.DNS.CERTRecord;
+import org.xbill.DNS.Header;
+import org.xbill.DNS.Message;
+import org.xbill.DNS.Record;
+import org.xbill.DNS.TTL;
+
+@Component("formatterDnsMsg")
+public class DnsMessageFormatter extends AbstractToolFormatter<Message> {
+ private final static int WIDTH_TAB = 8;
+
+ private final static String PREFIX_SEC = ";; ";
+ private final static String PREFIX_SEC_ITEM_VALUE_ARR = "[";
+
+ private final static String SUFFIX_SEC_NAME = ": ";
+ private final static String SUFFIX_SEC_ITEM_VALUE_ARR = "]";
+
+ private final static String DELIM_SEC = ", ";
+ private final static String DELIM_SEC_ITEM = "=";
+ private final static String DELIM_SEC_ITEM_VALUE = StringUtils.SPACE;
+ private final static String DELIM_RECORD = "\t";
+ private final static String DELIM_RECORD_DATA = StringUtils.SPACE;
+
+ private final static String SEC_NAME_HEADER = "HEADER";
+ private final static String SEC_NAME_TSIG = "TSIG";
+
+ private final static String SEC_ITEM_NAME_HEADER_OP = "op";
+ private final static String SEC_ITEM_NAME_HEADER_FLAGS = "flags";
+ private final static String SEC_ITEM_NAME_HEADER_SIZE = "size";
+ private final static String SEC_ITEM_NAME_HEADER_ID = "id";
+ private final static String SEC_ITEM_NAME_HEADER_STATUS = "status";
+
+ private final static String SEC_ITEM_NAME_TSIG_VERIFIED = "verified";
+
+ public DnsMessageFormatter() {
+ super(Message.class, false, true);
+ }
+
+ @Override
+ protected String printInternal(Message obj, Locale locale) throws
Exception {
+ ToolStrBuilder strBuilder = new ToolStrBuilder();
+
+ Header header = obj.getHeader();
+ strBuilder.append(PREFIX_SEC);
+ strBuilder.append(SEC_NAME_HEADER);
+ strBuilder.append(SUFFIX_SEC_NAME);
+
+ DnsMessageOpcode op = ToolDnsMessageUtils.getOpcode(obj);
+ strBuilder.append(SEC_ITEM_NAME_HEADER_OP);
+ strBuilder.append(DELIM_SEC_ITEM);
+ // noinspection ConstantConditions
+ strBuilder.append(op.getId());
+
+ strBuilder.append(DELIM_SEC);
+ strBuilder.append(SEC_ITEM_NAME_HEADER_FLAGS);
+ strBuilder.append(DELIM_SEC_ITEM);
+ strBuilder.append(PREFIX_SEC_ITEM_VALUE_ARR);
+
+ Set<DnsMessageFlag> flags = ToolDnsMessageUtils.getFlags(obj);
+
+ if (!flags.isEmpty()) {
+ for (DnsMessageFlag flag : flags) {
+ strBuilder.append(DELIM_SEC_ITEM_VALUE);
+ strBuilder.append(flag.getId());
+ }
+
+ strBuilder.append(DELIM_SEC_ITEM_VALUE);
+ }
+
+ strBuilder.append(SUFFIX_SEC_ITEM_VALUE_ARR);
+
+ strBuilder.append(DELIM_SEC);
+ strBuilder.append(SEC_ITEM_NAME_HEADER_SIZE);
+ strBuilder.append(DELIM_SEC_ITEM);
+ strBuilder.append(obj.numBytes());
+
+ strBuilder.append(DELIM_SEC);
+ strBuilder.append(SEC_ITEM_NAME_HEADER_ID);
+ strBuilder.append(DELIM_SEC_ITEM);
+ strBuilder.append(header.getID());
+
+ strBuilder.append(DELIM_SEC);
+ strBuilder.append(SEC_ITEM_NAME_HEADER_STATUS);
+ strBuilder.append(DELIM_SEC_ITEM);
+ // noinspection ConstantConditions
+
strBuilder.append(ToolDnsUtils.getId(ToolDnsMessageUtils.getRcode(obj),
header.getRcode()));
+
+ if (obj.isSigned()) {
+ printTsigSection(strBuilder, obj.isVerified());
+ }
+
+ int secCode;
+
+ for (DnsMessageSection sec :
EnumSet.allOf(DnsMessageSection.class)) {
+ if (header.getCount((secCode = sec.getCode())) == 0) {
+ continue;
+ }
+
+ strBuilder.appendNewLine();
+ strBuilder.append(PREFIX_SEC);
+ strBuilder.append(((op != DnsMessageOpcode.UPDATE) ?
sec.getIdDisplay() : sec.getIdUpdateDisplay()));
+
+ for (Record record : obj.getSectionArray(secCode)) {
+ printRecord(strBuilder, sec, record);
+ }
+ }
+
+ return strBuilder.build();
+ }
+
+ private static void printRecord(ToolStrBuilder strBuilder,
DnsMessageSection sec, Record record) {
+ int recordTypeCode = record.getType();
+ DnsRecordType recordType =
ToolDnsUtils.findByCode(DnsRecordType.class, recordTypeCode);
+
+ printRecordInfo(strBuilder, sec, recordTypeCode, recordType,
record);
+
+ if (sec != DnsMessageSection.QUESTION) {
+ strBuilder.append(DELIM_RECORD);
+
+ if (recordType == DnsRecordType.CERT) {
+ printCertRecordData(strBuilder, ((CERTRecord) record));
+ } else {
+ printRecordData(strBuilder, record);
+ }
+ }
+ }
+
+ private static void printCertRecordData(ToolStrBuilder strBuilder,
CERTRecord certRecord) {
+ int certTypeCode = certRecord.getCertType();
+ // noinspection ConstantConditions
+
strBuilder.append(ToolDnsUtils.getId(ToolDnsUtils.findByCode(DnsCertificateType.class,
certTypeCode), certTypeCode));
+
+ strBuilder.append(DELIM_RECORD_DATA);
+ strBuilder.append(certRecord.getKeyTag());
+
+ int keyAlgTypeCode = certRecord.getAlgorithm();
+ strBuilder.append(DELIM_RECORD_DATA);
+ // noinspection ConstantConditions
+
strBuilder.append(ToolDnsUtils.getId(ToolDnsUtils.findByCode(DnsKeyAlgorithmType.class,
keyAlgTypeCode), keyAlgTypeCode));
+
+
strBuilder.appendWithDelimiter(Base64.encodeBase64String(certRecord.getCert()),
DELIM_RECORD_DATA);
+ }
+
+ private static void printRecordData(ToolStrBuilder strBuilder, Record
record) {
+ strBuilder.append(record.rdataToString());
+ }
+
+ private static void printRecordInfo(ToolStrBuilder strBuilder,
DnsMessageSection sec, int recordTypeCode, DnsRecordType recordType, Record
record) {
+ strBuilder.appendNewLine();
+
+ String nameStr = record.getName().toString();
+ strBuilder.append(nameStr);
+
+ int nameStrLen = nameStr.length();
+
+ if (nameStrLen < WIDTH_TAB) {
+ strBuilder.append(DELIM_RECORD);
+ }
+
+ if (nameStrLen < (WIDTH_TAB * 2)) {
+ strBuilder.append(DELIM_RECORD);
+ }
+
+ strBuilder.append(DELIM_RECORD);
+
+ if (sec != DnsMessageSection.QUESTION) {
+ strBuilder.append(TTL.format(record.getTTL()));
+ }
+
+ int dclassTypeCode = record.getDClass();
+ strBuilder.append(DELIM_RECORD);
+ // noinspection ConstantConditions
+
strBuilder.append(ToolDnsUtils.getId(ToolDnsUtils.findByCode(DnsDclassType.class,
dclassTypeCode), dclassTypeCode));
+ strBuilder.append(DELIM_RECORD);
+ strBuilder.append(ToolDnsUtils.getId(recordType, recordTypeCode));
+ }
+
+ private static void printTsigSection(ToolStrBuilder strBuilder,
boolean verified) {
+ strBuilder.appendNewLine();
+ strBuilder.append(PREFIX_SEC);
+ strBuilder.append(SEC_NAME_TSIG);
+ strBuilder.append(SUFFIX_SEC_NAME);
+
+ strBuilder.append(SEC_ITEM_NAME_TSIG_VERIFIED);
+ strBuilder.append(DELIM_SEC_ITEM);
+ strBuilder.append(verified);
+ }
+}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsOperationType.java Mon
Jun 23 06:12:33 2014 UTC
+++ /dev/null
@@ -1,27 +0,0 @@
-package gov.hhs.onc.dcdt.dns;
-
-import javax.annotation.Nonnegative;
-import org.xbill.DNS.Opcode;
-
-public enum DnsOperationType implements DnsMnemonicIdentifier {
- QUERY(Opcode.QUERY), IQUERY(Opcode.IQUERY), STATUS(Opcode.STATUS),
NOTIFY(Opcode.NOTIFY), UPDATE(Opcode.UPDATE);
-
- private final int code;
- private final String id;
-
- private DnsOperationType(int code) {
- this.code = code;
-
this.id = Opcode.string(code);
- }
-
- @Nonnegative
- @Override
- public int getCode() {
- return this.code;
- }
-
- @Override
- public String getId() {
- return
this.id;
- }
-}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/discovery/steps/dns/impl/DnsCertRecordLookupStepImpl.java
Mon Jun 23 06:12:33 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/discovery/steps/dns/impl/DnsCertRecordLookupStepImpl.java
Mon Jun 23 13:21:03 2014 UTC
@@ -6,12 +6,9 @@
import gov.hhs.onc.dcdt.crypto.certs.CertificateType;
import gov.hhs.onc.dcdt.crypto.certs.impl.CertificateInfoImpl;
import gov.hhs.onc.dcdt.crypto.utils.CertificateUtils;
-import gov.hhs.onc.dcdt.crypto.utils.CryptographyUtils;
import gov.hhs.onc.dcdt.discovery.BindingType;
import gov.hhs.onc.dcdt.discovery.steps.CertificateDiscoveryStep;
import gov.hhs.onc.dcdt.discovery.steps.dns.DnsCertRecordLookupStep;
-import gov.hhs.onc.dcdt.dns.DnsCertificateType;
-import gov.hhs.onc.dcdt.dns.DnsKeyAlgorithmType;
import gov.hhs.onc.dcdt.dns.DnsRecordType;
import gov.hhs.onc.dcdt.dns.lookup.DnsLookupService;
import
gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils.CertRecordParameterPredicate;
@@ -44,14 +41,12 @@
new
CertificateInfoImpl(CertificateUtils.readCertificate(certRecord.getCert(),
CertificateType.X509, DataEncoding.DER))));
this.execMsgs.add(String.format(
- "DNS lookup (directAddr=%s) CERT record
(keyAlg=%s, certType=%s) certificate (subj={%s}, serialNum=%s, issuer={%s})
processed.",
- directAddr.toAddress(),
CryptographyUtils.findByTag(DnsKeyAlgorithmType.class,
certRecord.getAlgorithm()),
-
CryptographyUtils.findByTag(DnsCertificateType.class,
certRecord.getCertType()), certInfo.getSubjectName(),
- certInfo.getSerialNumber(),
certInfo.getIssuerName()));
+ "DNS lookup (directAddr=%s) CERT record
(certType=%d, keyAlg=%d) certificate (subj={%s}, serialNum=%s, issuer={%s})
processed.",
+ directAddr.toAddress(), certRecord.getCertType(),
certRecord.getAlgorithm(), certInfo.getSubjectName(),
certInfo.getSerialNumber(),
+ certInfo.getIssuerName()));
} catch (CryptographyException e) {
- this.execMsgs.add(String.format("DNS lookup
(directAddr=%s) CERT record (keyAlg=%s, certType=%s) certificate processing
failed: %s",
- directAddr.toAddress(),
CryptographyUtils.findByTag(DnsKeyAlgorithmType.class,
certRecord.getAlgorithm()),
-
CryptographyUtils.findByTag(DnsCertificateType.class,
certRecord.getCertType()), e.getMessage()));
+ this.execMsgs.add(String.format("DNS lookup
(directAddr=%s) CERT record (certType=%d, keyAlg=%d) certificate processing
failed: %s",
+ directAddr.toAddress(), certRecord.getCertType(),
certRecord.getAlgorithm(), e.getMessage()));
this.execSuccess = false;
break;
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsCertificateType.java
Fri Apr 18 03:30:00 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsCertificateType.java
Mon Jun 23 13:21:03 2014 UTC
@@ -1,26 +1,35 @@
package gov.hhs.onc.dcdt.dns;
-import gov.hhs.onc.dcdt.crypto.CryptographyTaggedIdentifier;
+import javax.annotation.Nonnegative;
import org.xbill.DNS.CERTRecord.CertificateType;
-public enum DnsCertificateType implements CryptographyTaggedIdentifier {
- PKIX("PKIX", CertificateType.PKIX), IPKIX("IPKIX",
CertificateType.IPKIX);
+/**
+ * @see org.xbill.DNS.CERTRecord.CertificateType
+ */
+public enum DnsCertificateType implements DnsMnemonicIdentifier {
+ PKIX(CertificateType.PKIX, "PKIX"),
SPKI(CertificateType.SPKI, "SPKI"), PGP(CertificateType.PGP, "PGP"),
IPKIX(CertificateType.IPKIX, "IPKIX"), ISPKI(
+ CertificateType.ISPKI, "ISPKI"),
IPGP(CertificateType.IPGP, "IPGP"),
ACPKIX(CertificateType.ACPKIX, "ACPKIX"), IACPKIX(CertificateType.IACPKIX,
+ "IACPKIX"), URI(CertificateType.URI), OID(CertificateType.OID);
+ private final int code;
private final String id;
- private final int tag;
+
+ private DnsCertificateType(@Nonnegative int code) {
+ this(code, CertificateType.string(code));
+ }
- private DnsCertificateType(String id, int tag) {
+ private DnsCertificateType(@Nonnegative int code, String id) {
+ this.code = code;
this.id = id;
- this.tag = tag;
}
@Override
- public String getId() {
- return
this.id;
+ public int getCode() {
+ return this.code;
}
@Override
- public int getTag() {
- return this.tag;
+ public String getId() {
+ return
this.id;
}
}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsKeyAlgorithmType.java
Fri Apr 18 03:30:00 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsKeyAlgorithmType.java
Mon Jun 23 13:21:03 2014 UTC
@@ -1,26 +1,31 @@
package gov.hhs.onc.dcdt.dns;
-import gov.hhs.onc.dcdt.crypto.CryptographyTaggedIdentifier;
+import javax.annotation.Nonnegative;
import org.xbill.DNS.DNSSEC.Algorithm;
-public enum DnsKeyAlgorithmType implements CryptographyTaggedIdentifier {
- RSASHA1("RSASHA1", Algorithm.RSASHA1), INDIRECT("INDIRECT",
Algorithm.INDIRECT);
+/**
+ * @see org.xbill.DNS.DNSSEC.Algorithm
+ */
+public enum DnsKeyAlgorithmType implements DnsMnemonicIdentifier {
+ RSAMD5(Algorithm.RSAMD5), DH(Algorithm.DH), DSA(Algorithm.DSA),
RSASHA1(Algorithm.RSASHA1), DSA_NSEC3_SHA1(Algorithm.DSA_NSEC3_SHA1),
RSA_NSEC3_SHA1(
+ Algorithm.RSA_NSEC3_SHA1), RSASHA256(Algorithm.RSASHA256),
RSASHA512(Algorithm.RSASHA512), ECDSAP256SHA256(Algorithm.ECDSAP256SHA256),
ECDSAP384SHA384(
+ Algorithm.ECDSAP384SHA384), INDIRECT(Algorithm.INDIRECT),
PRIVATEDNS(Algorithm.PRIVATEDNS), PRIVATEOID(Algorithm.PRIVATEOID);
+ private final int code;
private final String id;
- private final int tag;
- private DnsKeyAlgorithmType(String id, int tag) {
-
this.id = id;
- this.tag = tag;
+ private DnsKeyAlgorithmType(@Nonnegative int code) {
+ this.code = code;
+
this.id = Algorithm.string(this.code);
}
@Override
- public String getId() {
- return
this.id;
+ public int getCode() {
+ return this.code;
}
@Override
- public int getTag() {
- return this.tag;
+ public String getId() {
+ return
this.id;
}
}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageFlag.java Mon
Jun 23 06:12:33 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageFlag.java Mon
Jun 23 13:21:03 2014 UTC
@@ -9,19 +9,19 @@
* @see org.xbill.DNS.ExtendedFlags
*/
public enum DnsMessageFlag implements DnsMnemonicIdentifier {
- QR(Flags.QR), AA(Flags.AA), TC(Flags.TC), RD(Flags.RD), RA(Flags.RA),
AD(Flags.AD), CD(Flags.CD), DO(ExtendedFlags.DO, ExtendedFlags
- .string(ExtendedFlags.DO));
+ QR(Flags.QR), AA(Flags.AA), TC(Flags.TC), RD(Flags.RD), RA(Flags.RA),
AD(Flags.AD), CD(Flags.CD), DO(ExtendedFlags.DO, true);
private final int code;
+ private final boolean ext;
private final String id;
private DnsMessageFlag(int code) {
- this(code, Flags.string(code));
+ this(code, false);
}
- private DnsMessageFlag(int code, String id) {
+ private DnsMessageFlag(int code, boolean ext) {
this.code = code;
-
this.id = id;
+
this.id = (!(this.ext = ext) ? Flags.string(code) :
ExtendedFlags.string(code));
}
@Nonnegative
@@ -29,6 +29,10 @@
public int getCode() {
return this.code;
}
+
+ public boolean isExtended() {
+ return this.ext;
+ }
@Override
public String getId() {
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageRcode.java Mon
Jun 23 06:12:33 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageRcode.java Mon
Jun 23 13:21:03 2014 UTC
@@ -14,7 +14,7 @@
private final int code;
private final String id;
- private DnsMessageRcode(int code) {
+ private DnsMessageRcode(@Nonnegative int code) {
this.code = code;
this.id = Rcode.string(code);
}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageSection.java
Mon Jun 23 06:12:33 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsMessageSection.java
Mon Jun 23 13:21:03 2014 UTC
@@ -11,10 +11,14 @@
private final int code;
private final String id;
+ private final String idDisplay;
+ private final String idUpdateDisplay;
- private DnsMessageSection(int code) {
+ private DnsMessageSection(@Nonnegative int code) {
this.code = code;
this.id = Section.string(code);
+ this.idDisplay = Section.longString(code);
+ this.idUpdateDisplay = Section.updString(code);
}
@Nonnegative
@@ -27,4 +31,12 @@
public String getId() {
return
this.id;
}
+
+ public String getIdDisplay() {
+ return this.idDisplay;
+ }
+
+ public String getIdUpdateDisplay() {
+ return this.idUpdateDisplay;
+ }
}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsRecordType.java Mon
Jun 23 06:12:33 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsRecordType.java Mon
Jun 23 13:21:03 2014 UTC
@@ -1,34 +1,98 @@
package gov.hhs.onc.dcdt.dns;
import javax.annotation.Nonnegative;
+import javax.annotation.Nullable;
+import org.xbill.DNS.A6Record;
+import org.xbill.DNS.AAAARecord;
+import org.xbill.DNS.AFSDBRecord;
+import org.xbill.DNS.APLRecord;
import org.xbill.DNS.ARecord;
import org.xbill.DNS.CERTRecord;
import org.xbill.DNS.CNAMERecord;
+import org.xbill.DNS.DHCIDRecord;
+import org.xbill.DNS.DLVRecord;
+import org.xbill.DNS.DNAMERecord;
+import org.xbill.DNS.DNSKEYRecord;
+import org.xbill.DNS.DSRecord;
+import org.xbill.DNS.GPOSRecord;
+import org.xbill.DNS.HINFORecord;
+import org.xbill.DNS.IPSECKEYRecord;
+import org.xbill.DNS.ISDNRecord;
+import org.xbill.DNS.KEYRecord;
+import org.xbill.DNS.KXRecord;
+import org.xbill.DNS.LOCRecord;
+import org.xbill.DNS.MBRecord;
+import org.xbill.DNS.MDRecord;
+import org.xbill.DNS.MFRecord;
+import org.xbill.DNS.MGRecord;
+import org.xbill.DNS.MINFORecord;
+import org.xbill.DNS.MRRecord;
import org.xbill.DNS.MXRecord;
+import org.xbill.DNS.NAPTRRecord;
+import org.xbill.DNS.NSAPRecord;
+import org.xbill.DNS.NSAP_PTRRecord;
+import org.xbill.DNS.NSEC3PARAMRecord;
+import org.xbill.DNS.NSEC3Record;
+import org.xbill.DNS.NSECRecord;
import org.xbill.DNS.NSRecord;
+import org.xbill.DNS.NULLRecord;
+import org.xbill.DNS.NXTRecord;
+import org.xbill.DNS.OPTRecord;
+import org.xbill.DNS.PTRRecord;
+import org.xbill.DNS.PXRecord;
+import org.xbill.DNS.RPRecord;
+import org.xbill.DNS.RRSIGRecord;
+import org.xbill.DNS.RTRecord;
import org.xbill.DNS.Record;
+import org.xbill.DNS.SIGRecord;
import org.xbill.DNS.SOARecord;
+import org.xbill.DNS.SPFRecord;
import org.xbill.DNS.SRVRecord;
+import org.xbill.DNS.SSHFPRecord;
+import org.xbill.DNS.TKEYRecord;
+import org.xbill.DNS.TLSARecord;
+import org.xbill.DNS.TSIGRecord;
+import org.xbill.DNS.TXTRecord;
import org.xbill.DNS.Type;
+import org.xbill.DNS.WKSRecord;
+import org.xbill.DNS.X25Record;
public enum DnsRecordType implements DnsMnemonicIdentifier {
- A(Type.A, ARecord.class), CERT(Type.CERT, CERTRecord.class),
CNAME(Type.CNAME, CNAMERecord.class), MX(Type.MX, MXRecord.class),
- NS(Type.NS, NSRecord.class), SOA(Type.SOA, SOARecord.class),
SRV(Type.SRV, SRVRecord.class);
+ A(Type.A, ARecord.class, true), NS(Type.NS, NSRecord.class, true),
MD(Type.MD, MDRecord.class), MF(Type.MF, MFRecord.class), CNAME(Type.CNAME,
+ CNAMERecord.class, true), SOA(Type.SOA, SOARecord.class, true),
MB(Type.MB, MBRecord.class), MG(Type.MG, MGRecord.class), MR(Type.MR,
MRRecord.class),
+ NULL(Type.NULL, NULLRecord.class), WKS(Type.WKS, WKSRecord.class),
PTR(Type.PTR, PTRRecord.class), HINFO(Type.HINFO, HINFORecord.class),
MINFO(Type.MINFO,
+ MINFORecord.class), MX(Type.MX, MXRecord.class, true),
TXT(Type.TXT, TXTRecord.class), RP(Type.RP, RPRecord.class),
+ AFSDB(Type.AFSDB, AFSDBRecord.class), X25(Type.X25, X25Record.class),
ISDN(Type.ISDN, ISDNRecord.class), RT(Type.RT, RTRecord.class),
NSAP(Type.NSAP,
+ NSAPRecord.class), NSAP_PTR(Type.NSAP_PTR, NSAP_PTRRecord.class),
SIG(Type.SIG, SIGRecord.class), KEY(Type.KEY, KEYRecord.class), PX(Type.PX,
+ PXRecord.class), GPOS(Type.GPOS, GPOSRecord.class),
AAAA(Type.AAAA, AAAARecord.class), LOC(Type.LOC, LOCRecord.class),
NXT(Type.NXT, NXTRecord.class),
+ EID(Type.EID), NIMLOC(Type.NIMLOC), SRV(Type.SRV, SRVRecord.class,
true), ATMA(Type.ATMA), NAPTR(Type.NAPTR, NAPTRRecord.class),
+ KX(Type.KX, KXRecord.class), CERT(Type.CERT, CERTRecord.class, true),
A6(Type.A6, A6Record.class), DNAME(Type.DNAME, DNAMERecord.class),
OPT(Type.OPT,
+ OPTRecord.class), APL(Type.APL, APLRecord.class), DS(Type.DS,
DSRecord.class), SSHFP(Type.SSHFP, SSHFPRecord.class),
IPSECKEY(Type.IPSECKEY,
+ IPSECKEYRecord.class), RRSIG(Type.RRSIG, RRSIGRecord.class),
NSEC(Type.NSEC, NSECRecord.class), DNSKEY(Type.DNSKEY, DNSKEYRecord.class),
DHCID(
+ Type.DHCID, DHCIDRecord.class), NSEC3(Type.NSEC3,
NSEC3Record.class), NSEC3PARAM(Type.NSEC3PARAM, NSEC3PARAMRecord.class),
TLSA(Type.TLSA,
+ TLSARecord.class), SPF(Type.SPF, SPFRecord.class), TKEY(Type.TKEY,
TKEYRecord.class), TSIG(Type.TSIG, TSIGRecord.class), IXFR(Type.IXFR), AXFR(
+ Type.AXFR), MAILB(Type.MAILB), MAILA(Type.MAILA), ANY(Type.ANY),
DLV(Type.DLV, DLVRecord.class);
private final int code;
+ private final Class<? extends Record> recordClass;
+ private final boolean processed;
private final String id;
private final DnsDclassType dclassType;
- private final Class<? extends Record> recordClass;
- private DnsRecordType(int code, Class<? extends Record> recordClass) {
- this(code, DnsDclassType.IN, recordClass);
+ private DnsRecordType(@Nonnegative int code) {
+ this(code, null);
}
- private DnsRecordType(int code, DnsDclassType dclassType, Class<?
extends Record> recordClass) {
+ private DnsRecordType(@Nonnegative int code, @Nullable Class<? extends
Record> recordClass) {
+ this(code, recordClass, false);
+ }
+
+ private DnsRecordType(@Nonnegative int code, @Nullable Class<? extends
Record> recordClass, boolean processed) {
this.code = code;
-
this.id = Type.string(this.code);
- this.dclassType = dclassType;
this.recordClass = recordClass;
+ this.processed = processed;
+
this.id = Type.string(this.code);
+ this.dclassType = (Type.isRR(this.code) ? DnsDclassType.IN :
DnsDclassType.NONE);
}
@Nonnegative
@@ -46,6 +110,15 @@
return
this.id;
}
+ public boolean isProcessed() {
+ return processed;
+ }
+
+ public boolean hasRecordClass() {
+ return (this.recordClass != null);
+ }
+
+ @Nullable
public Class<? extends Record> getRecordClass() {
return this.recordClass;
}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsResultType.java Mon
Jun 23 06:12:33 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsResultType.java Mon
Jun 23 13:21:03 2014 UTC
@@ -9,7 +9,7 @@
private final int code;
- private DnsResultType(int code) {
+ private DnsResultType(@Nonnegative int code) {
this.code = code;
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/CertRecordConfigImpl.java
Mon Jun 23 06:12:33 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/CertRecordConfigImpl.java
Mon Jun 23 13:21:03 2014 UTC
@@ -20,7 +20,7 @@
@Override
public CERTRecord toRecord() throws DnsException {
- return new CERTRecord(
this.name,
this.recordType.getDclassType().getCode(), this.ttl,
this.certType.getTag(), this.keyTag, this.keyAlgType.getTag(),
+ return new CERTRecord(
this.name,
this.recordType.getDclassType().getCode(), this.ttl,
this.certType.getCode(), this.keyTag, this.keyAlgType.getCode(),
this.certData);
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupService.java
Wed Jun 11 18:16:57 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupService.java
Mon Jun 23 13:21:03 2014 UTC
@@ -27,7 +27,7 @@
public DnsLookupResult<CERTRecord> lookupCertRecords(Name name) throws
DnsException;
- public DnsLookupResult<CERTRecord> lookupCertRecords(@Nullable
DnsKeyAlgorithmType keyAlgType, @Nullable DnsCertificateType certType, Name
name)
+ public DnsLookupResult<CERTRecord> lookupCertRecords(@Nullable
DnsCertificateType certType, @Nullable Set<DnsKeyAlgorithmType>
keyAlgTypes, Name name)
throws DnsException;
public DnsLookupResult<CNAMERecord> lookupCnameRecords(Name name)
throws DnsException;
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/impl/DnsLookupServiceImpl.java
Mon Jun 23 06:12:33 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/impl/DnsLookupServiceImpl.java
Mon Jun 23 13:21:03 2014 UTC
@@ -45,9 +45,9 @@
}
@Override
- public DnsLookupResult<CERTRecord> lookupCertRecords(@Nullable
DnsKeyAlgorithmType keyAlgType, @Nullable DnsCertificateType certType, Name
name)
+ public DnsLookupResult<CERTRecord> lookupCertRecords(@Nullable
DnsCertificateType certType, @Nullable Set<DnsKeyAlgorithmType>
keyAlgTypes, Name name)
throws DnsException {
- return this.lookupRecords(DnsRecordType.CERT, CERTRecord.class,
name, new CertRecordParameterPredicate(keyAlgType, certType));
+ return this.lookupRecords(DnsRecordType.CERT, CERTRecord.class,
name, new CertRecordParameterPredicate(certType, keyAlgTypes));
}
@Override
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
Mon Jun 23 06:12:33 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
Mon Jun 23 13:21:03 2014 UTC
@@ -1,6 +1,7 @@
package gov.hhs.onc.dcdt.dns.utils;
import gov.hhs.onc.dcdt.dns.DnsMessageFlag;
+import gov.hhs.onc.dcdt.dns.DnsMessageOpcode;
import gov.hhs.onc.dcdt.dns.DnsMessageRcode;
import gov.hhs.onc.dcdt.dns.DnsMessageSection;
import gov.hhs.onc.dcdt.net.InetProtocol;
@@ -17,6 +18,7 @@
import org.apache.commons.lang3.ObjectUtils;
import org.xbill.DNS.Header;
import org.xbill.DNS.Message;
+import org.xbill.DNS.OPTRecord;
import org.xbill.DNS.Record;
import org.xbill.DNS.SOARecord;
@@ -91,6 +93,17 @@
return msg;
}
+
+ @Nullable
+ public static DnsMessageOpcode getOpcode(Message msg) {
+ return ToolDnsUtils.findByCode(DnsMessageOpcode.class,
msg.getHeader().getOpcode());
+ }
+
+ public static Message setOpcode(Message msg, DnsMessageOpcode opcode) {
+ msg.getHeader().setOpcode(opcode.getCode());
+
+ return msg;
+ }
@Nullable
public static DnsMessageRcode getRcode(Message msg) {
@@ -102,6 +115,10 @@
return msg;
}
+
+ public static boolean hasRecords(Message msg, DnsMessageSection
section) {
+ return
ToolNumberUtils.isPositive(msg.getHeader().getCount(section.getCode()));
+ }
public static Message copyRecords(Message msg1, Message msg2,
DnsMessageSection section) {
return addRecords(msg2, section,
msg1.getSectionArray(section.getCode()));
@@ -121,8 +138,18 @@
return msg;
}
- public static boolean hasRecords(Message msg, DnsMessageSection
section) {
- return
ToolNumberUtils.isPositive(msg.getHeader().getCount(section.getCode()));
+ public static Message removeRecords(Message msg, DnsMessageSection
section, @Nullable Record ... records) {
+ return removeRecords(msg, section, ToolArrayUtils.asList(records));
+ }
+
+ public static Message removeRecords(Message msg, DnsMessageSection
section, @Nullable Iterable<? extends Record> records) {
+ if (records != null) {
+ for (Record record : records) {
+ msg.removeRecord(record, section.getCode());
+ }
+ }
+
+ return msg;
}
public static Message copyFlags(Message msg1, Message msg2, @Nullable
DnsMessageFlag ... flags) {
@@ -132,15 +159,15 @@
public static Message copyFlags(Message msg1, Message msg2, @Nullable
Iterable<DnsMessageFlag> flags) {
Set<DnsMessageFlag> flagsSet = ((flags != null) ? new
HashSet<>(IteratorUtils.toList(flags.iterator())) :
EnumSet.allOf(DnsMessageFlag.class));
Header header1 = msg1.getHeader(), header2 = msg2.getHeader();
- int flagBit;
+ int flagCode;
boolean flagValue;
for (DnsMessageFlag flag : flagsSet) {
- if ((flagValue = header1.getFlag((flagBit =
flag.getCode()))) != header2.getFlag(flagBit)) {
+ if ((flagValue = header1.getFlag((flagCode =
flag.getCode()))) != header2.getFlag(flagCode)) {
if (flagValue) {
- header2.setFlag(flagBit);
+ header2.setFlag(flagCode);
} else {
- header2.unsetFlag(flagBit);
+ header2.unsetFlag(flagCode);
}
}
}
@@ -155,9 +182,11 @@
public static boolean hasFlags(Message msg, @Nullable
Iterable<DnsMessageFlag> flags) {
if (flags != null) {
Header header = msg.getHeader();
+ OPTRecord optRecord = msg.getOPT();
for (DnsMessageFlag flag : flags) {
- if (!header.getFlag(flag.getCode())) {
+ if ((!flag.isExtended() && !header.getFlag(flag.getCode()))
+ || (flag.isExtended() && ((optRecord == null) ||
((optRecord.getFlags() & flag.getCode()) == 0)))) {
return false;
}
}
@@ -165,6 +194,21 @@
return true;
}
+
+ public static Set<DnsMessageFlag> getFlags(Message msg) {
+ Header header = msg.getHeader();
+ OPTRecord optRecord = msg.getOPT();
+ Set<DnsMessageFlag> flags = EnumSet.noneOf(DnsMessageFlag.class);
+
+ for (DnsMessageFlag flag : EnumSet.allOf(DnsMessageFlag.class)) {
+ if ((!flag.isExtended() && header.getFlag(flag.getCode()))
+ || (flag.isExtended() && (optRecord != null) &&
((optRecord.getFlags() & flag.getCode()) != 0))) {
+ flags.add(flag);
+ }
+ }
+
+ return flags;
+ }
public static Message setFlags(Message msg, @Nullable
DnsMessageFlag ... flags) {
return setFlags(msg, ToolArrayUtils.asList(flags));
@@ -173,9 +217,19 @@
public static Message setFlags(Message msg, @Nullable
Iterable<DnsMessageFlag> flags) {
if (flags != null) {
Header header = msg.getHeader();
+ OPTRecord optRecord = msg.getOPT();
for (DnsMessageFlag flag : flags) {
- header.setFlag(flag.getCode());
+ if (!flag.isExtended()) {
+ header.setFlag(flag.getCode());
+ } else if (optRecord != null) {
+ removeRecords(msg, DnsMessageSection.ADDITIONAL,
optRecord);
+ addRecords(msg, DnsMessageSection.ADDITIONAL,
(optRecord =
+ new OPTRecord(optRecord.getPayloadSize(),
optRecord.getExtendedRcode(), optRecord.getVersion(),
+ (optRecord.getFlags() | flag.getCode()),
optRecord.getOptions())));
+ } else {
+ addRecords(msg, DnsMessageSection.ADDITIONAL,
(optRecord = new OPTRecord(0xff, 0, 0, flag.getCode())));
+ }
}
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
Mon Jun 23 06:12:33 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
Mon Jun 23 13:21:03 2014 UTC
@@ -17,6 +17,7 @@
import java.util.Collection;
import java.util.Date;
import java.util.Objects;
+import java.util.Set;
import javax.annotation.Nonnegative;
import javax.annotation.Nullable;
import org.apache.commons.collections4.CollectionUtils;
@@ -68,20 +69,24 @@
}
public static class CertRecordParameterPredicate extends
AbstractToolPredicate<CERTRecord> {
- public final static CertRecordParameterPredicate INSTANCE_PKIX =
new CertRecordParameterPredicate(DnsKeyAlgorithmType.RSASHA1,
DnsCertificateType.PKIX);
+ public final static CertRecordParameterPredicate INSTANCE_PKIX =
new CertRecordParameterPredicate(DnsCertificateType.PKIX);
- private DnsKeyAlgorithmType keyAlgType;
private DnsCertificateType certType;
+ private Set<DnsKeyAlgorithmType> keyAlgTypes;
- public CertRecordParameterPredicate(@Nullable DnsKeyAlgorithmType
keyAlgType, @Nullable DnsCertificateType certType) {
- this.keyAlgType = keyAlgType;
+ public CertRecordParameterPredicate(@Nullable DnsCertificateType
certType) {
+ this(certType, null);
+ }
+
+ public CertRecordParameterPredicate(@Nullable DnsCertificateType
certType, @Nullable Set<DnsKeyAlgorithmType> keyAlgTypes) {
this.certType = certType;
+ this.keyAlgTypes = keyAlgTypes;
}
@Override
protected boolean evaluateInternal(CERTRecord certRecord) throws
Exception {
- return (((this.keyAlgType == null) ||
(certRecord.getAlgorithm() == this.keyAlgType.getTag())) && ((this.certType
== null) || (certRecord
- .getCertType() == this.certType.getTag())));
+ return (((this.keyAlgTypes == null) ||
this.keyAlgTypes.contains(ToolDnsUtils.findByCode(DnsKeyAlgorithmType.class,
certRecord.getAlgorithm()))) && ((this.certType == null) || (certRecord
+ .getCertType() == this.certType.getCode())));
}
}
@@ -100,7 +105,7 @@
@Nonnegative
public static int getKeyTag(DnsKeyAlgorithmType keyAlgType, PublicKey
publicKey) throws DnsException {
try {
- return new DNSKEYRecord(Name.root, DnsDclassType.IN.getCode(),
0, 0, Protocol.DNSSEC, keyAlgType.getTag(), publicKey).getFootprint();
+ return new DNSKEYRecord(Name.root, DnsDclassType.IN.getCode(),
0, 0, Protocol.DNSSEC, keyAlgType.getCode(), publicKey).getFootprint();
} catch (DNSSECException e) {
throw new DnsException(String.format("Unable to get key tag
for public key (class=%s, algType=%s).", ToolClassUtils.getName(publicKey),
keyAlgType.name()), e);
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsUtils.java
Mon Jun 23 06:12:33 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsUtils.java
Mon Jun 23 13:21:03 2014 UTC
@@ -4,11 +4,20 @@
import gov.hhs.onc.dcdt.dns.DnsIdentifier;
import gov.hhs.onc.dcdt.dns.DnsNameLabelIdentifier;
import gov.hhs.onc.dcdt.utils.ToolEnumUtils;
+import java.util.Objects;
import javax.annotation.Nonnegative;
import javax.annotation.Nullable;
import
org.xbill.DNS.Name;
public abstract class ToolDnsUtils {
+ public static <T extends Enum<T> & DnsIdentifier> String getId(T
enumItem) {
+ return getId(enumItem, null);
+ }
+
+ public static <T extends Enum<T> & DnsIdentifier> String getId(T
enumItem, @Nullable Object defaultId) {
+ return ((enumItem != null) ? enumItem.getId() :
Objects.toString(defaultId, null));
+ }
+
@Nullable
public static <T extends Enum<T> & DnsNameLabelIdentifier> T
findByNameLabel(Class<T> enumClass, Name nameLbl) {
return ToolEnumUtils.findByPropertyValue(enumClass,
DnsNameLabelIdentifier.PROP_NAME_NAME_LBL, nameLbl);
=======================================
--- /dcdt-core/src/main/resources/META-INF/spring/spring-core-convert.xml
Mon Jun 23 06:12:33 2014 UTC
+++ /dcdt-core/src/main/resources/META-INF/spring/spring-core-convert.xml
Mon Jun 23 13:21:03 2014 UTC
@@ -38,6 +38,7 @@
<util:set id="formatters">
<beans:ref bean="formatterCert"/>
<beans:ref bean="formatterDn"/>
+ <beans:ref bean="formatterDnsMsg"/>
<beans:ref bean="formatterDnsName"/>
<beans:ref bean="formatterInetAddr"/>
<beans:ref bean="formatterLdapAttr"/>
=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java
Mon Jun 23 06:12:33 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java
Mon Jun 23 13:21:03 2014 UTC
@@ -2,6 +2,7 @@
import gov.hhs.onc.dcdt.config.instance.InstanceDnsConfig;
import gov.hhs.onc.dcdt.dns.DnsException;
+import gov.hhs.onc.dcdt.dns.DnsMessageOpcode;
import gov.hhs.onc.dcdt.dns.DnsMessageRcode;
import gov.hhs.onc.dcdt.dns.DnsRecordType;
import gov.hhs.onc.dcdt.dns.utils.ToolDnsMessageUtils;
@@ -15,8 +16,10 @@
import gov.hhs.onc.dcdt.utils.ToolClassUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
+import org.springframework.core.convert.ConversionService;
import org.springframework.stereotype.Component;
import org.xbill.DNS.Message;
import
org.xbill.DNS.Name;
@@ -28,6 +31,9 @@
public class DnsServerRequestProcessorImpl extends
AbstractSocketRequestProcessor<DnsServerRequest> implements
DnsServerRequestProcessor {
private final static Logger LOGGER =
LoggerFactory.getLogger(DnsServerRequestProcessorImpl.class);
+ @Autowired
+ private ConversionService convService;
+
private DnsServerConfig serverConfig;
public DnsServerRequestProcessorImpl(DnsServerConfig serverConfig,
DnsServerRequest req) {
@@ -38,6 +44,8 @@
@Override
protected byte[] processError(byte[] reqData, Exception exception) {
+ LOGGER.error(exception.getMessage(), exception.getCause());
+
return
ToolDnsMessageUtils.createErrorResponse(((DnsServerRequestProcessingException)
exception).getRequestMessage(), DnsMessageRcode.SERVFAIL)
.toWire();
}
@@ -52,7 +60,7 @@
respData = ToolDnsMessageUtils.toWire(protocol, (respMsg =
this.resolveQuery((reqMsg = ToolDnsMessageUtils.fromWire(protocol,
reqData)))));
LOGGER.trace(String.format("Resolved (class=%s) DNS server
request (protocol=%s, remoteSocketAddr={%s}):\n%s\n%s",
ToolClassUtils.getName(this),
-
protocol.name(), this.req.getRemoteAddress(), reqMsg,
respMsg));
+
protocol.name(), this.req.getRemoteAddress(),
this.convService.convert(reqMsg, String.class),
this.convService.convert(respMsg, String.class)));
return respData;
} catch (Exception e) {
@@ -66,7 +74,11 @@
Message respMsg = ToolDnsMessageUtils.createResponse(reqMsg);
Record questionRecord = reqMsg.getQuestion();
- if (questionRecord == null) {
+ if (ToolDnsMessageUtils.getOpcode(reqMsg) !=
DnsMessageOpcode.QUERY) {
+ ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.REFUSED);
+
+ return respMsg;
+ } else if (questionRecord == null) {
ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.FORMERR);
return respMsg;
@@ -75,7 +87,7 @@
DnsRecordType questionRecordType =
ToolDnsUtils.findByCode(DnsRecordType.class, questionRecord.getType());
Name questionName;
- if (questionRecordType == null) {
+ if ((questionRecordType == null) |
| !questionRecordType.isProcessed()) {
ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.NXRRSET);
return respMsg;
==============================================================================
Revision: 9d79953e632d
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Mon Jun 23 13:25:37 2014 UTC
Log: - Further supports DCDT-169.
- Removed extraneous/disabled Logback configuration elements.
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=9d79953e632d
Modified:
/dcdt-core/src/main/resources/META-INF/logback/logback-core-include.xml
=======================================
--- /dcdt-core/src/main/resources/META-INF/logback/logback-core-include.xml
Mon Jun 23 06:12:33 2014 UTC
+++ /dcdt-core/src/main/resources/META-INF/logback/logback-core-include.xml
Mon Jun 23 13:25:37 2014 UTC
@@ -27,16 +27,6 @@
<property name="dcdt.log.file.pattern"
value="${dcdt.log.file.pattern:-%d{yyyy-MM-dd HH:mm:ss z} [%C:%L %t] %p
- %m%n%toolEx}" scope="context"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
- <!--
- <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
- <evaluator>
- <expression>
- return message.contains("No properties file found
for");
- </expression>
- </evaluator>
- <onMatch>DENY</onMatch>
- </filter>
- -->
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${dcdt.log.console.pattern}</pattern>
</encoder>