From 142f955cce8647d62a964226bb4975e4b6a8505a Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Mon, 30 May 2016 09:59:23 +0000
Subject: [PATCH] OPENDJ-2950 Add support for cs-uri and cs-uri-stem fields in HTTP access log

---
 opendj-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/FileBasedHTTPAccessLogPublisherConfiguration.xml |   12 ++++++------
 opendj-server-legacy/src/main/java/org/opends/server/loggers/TextHTTPAccessLogPublisher.java                                          |   17 +++++++++++++----
 opendj-server-legacy/src/main/java/org/opends/server/protocols/http/HTTPClientConnection.java                                         |   12 ++++++------
 opendj-server-legacy/src/main/java/org/opends/server/loggers/HTTPRequestInfo.java                                                     |   10 ++++++----
 4 files changed, 31 insertions(+), 20 deletions(-)

diff --git a/opendj-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/FileBasedHTTPAccessLogPublisherConfiguration.xml b/opendj-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/FileBasedHTTPAccessLogPublisherConfiguration.xml
index 9e021f1..f7d7a02 100644
--- a/opendj-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/FileBasedHTTPAccessLogPublisherConfiguration.xml
+++ b/opendj-maven-plugin/src/main/resources/config/xml/org/forgerock/opendj/server/config/FileBasedHTTPAccessLogPublisherConfiguration.xml
@@ -12,7 +12,7 @@
   Header, with the fields enclosed by brackets [] replaced by your own identifying
   information: "Portions Copyright [year] [name of copyright owner]".
 
-  Copyright 2013-2015 ForgeRock AS.
+  Copyright 2013-2016 ForgeRock AS.
   ! -->
 <adm:managed-object name="file-based-http-access-log-publisher"
   plural-name="file-based-http-access-log-publishers"
@@ -133,7 +133,7 @@
   </adm:property>
   <adm:property name="time-interval" advanced="true">
     <adm:synopsis>
-      Specifies the interval at which to check whether the log files 
+      Specifies the interval at which to check whether the log files
       need to be rotated.
     </adm:synopsis>
     <adm:default-behavior>
@@ -267,7 +267,7 @@
     </adm:synopsis>
     <adm:default-behavior>
       <adm:defined>
-        <adm:value>cs-host c-ip cs-username x-datetime cs-method cs-uri-query 
+        <adm:value>cs-host c-ip cs-username x-datetime cs-method cs-uri-stem cs-uri-query
         cs-version sc-status cs(User-Agent) x-connection-id x-etime x-transaction-id</adm:value>
       </adm:defined>
     </adm:default-behavior>
@@ -284,10 +284,10 @@
             http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/676400bc-8969-4aa7-851a-9319490a9bbb.mspx?mfr=true
 
             OpenDJ supports the following standard fields: "c-ip", "c-port",
-            "cs-host", "cs-method", "cs-uri-query", "cs(User-Agent)",
+            "cs-host", "cs-method", "cs-uri", "cs-uri-stem", "cs-uri-query", "cs(User-Agent)",
             "cs-username", "cs-version", "s-computername", "s-ip", "s-port",
             "sc-status".
-            
+
             OpenDJ supports the following application specific field extensions:
             "x-connection-id"  displays the internal connection ID assigned to
             the HTTP client connection, "x-datetime"  displays the completion
@@ -322,7 +322,7 @@
         <adm:regex>.*</adm:regex>
         <adm:usage>STRING</adm:usage>
           <adm:synopsis>
-            Any valid format string that can be used with the 
+            Any valid format string that can be used with the
             java.text.SimpleDateFormat class.
           </adm:synopsis>
         </adm:pattern>
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/loggers/HTTPRequestInfo.java b/opendj-server-legacy/src/main/java/org/opends/server/loggers/HTTPRequestInfo.java
index a2dda5f..6372a70 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/loggers/HTTPRequestInfo.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/loggers/HTTPRequestInfo.java
@@ -11,10 +11,12 @@
  * Header, with the fields enclosed by brackets [] replaced by your own identifying
  * information: "Portions Copyright [year] [name of copyright owner]".
  *
- * Copyright 2013-2015 ForgeRock AS.
+ * Copyright 2013-2016 ForgeRock AS.
  */
 package org.opends.server.loggers;
 
+import java.net.URI;
+
 /**
  * Contains the information required for logging the HTTP request.
  */
@@ -78,11 +80,11 @@
   String getMethod();
 
   /**
-   * Returns the query issued by the client.
+   * Returns the URI issued by the client.
    *
-   * @return the query
+   * @return the URI
    */
-  String getQuery();
+  URI getUri();
 
   /**
    * Returns the user agent used by the client.
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/loggers/TextHTTPAccessLogPublisher.java b/opendj-server-legacy/src/main/java/org/opends/server/loggers/TextHTTPAccessLogPublisher.java
index b781c79..51a3ab8 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/loggers/TextHTTPAccessLogPublisher.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/loggers/TextHTTPAccessLogPublisher.java
@@ -30,6 +30,7 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.forgerock.http.MutableUri;
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.config.server.ConfigChangeResult;
 import org.forgerock.opendj.config.server.ConfigException;
@@ -58,6 +59,8 @@
   private static final String ELF_C_PORT = "c-port";
   private static final String ELF_CS_HOST = "cs-host";
   private static final String ELF_CS_METHOD = "cs-method";
+  private static final String ELF_CS_URI = "cs-uri";
+  private static final String ELF_CS_URI_STEM = "cs-uri-stem";
   private static final String ELF_CS_URI_QUERY = "cs-uri-query";
   private static final String ELF_CS_USER_AGENT = "cs(User-Agent)";
   private static final String ELF_CS_USERNAME = "cs-username";
@@ -74,9 +77,10 @@
 
   private static final Set<String> ALL_SUPPORTED_FIELDS = new HashSet<>(
       Arrays.asList(ELF_C_IP, ELF_C_PORT, ELF_CS_HOST, ELF_CS_METHOD,
-          ELF_CS_URI_QUERY, ELF_CS_USER_AGENT, ELF_CS_USERNAME, ELF_CS_VERSION,
-          ELF_S_COMPUTERNAME, ELF_S_IP, ELF_S_PORT, ELF_SC_STATUS,
-          X_CONNECTION_ID, X_DATETIME, X_ETIME, X_TRANSACTION_ID));
+          ELF_CS_URI, ELF_CS_URI_STEM, ELF_CS_URI_QUERY, ELF_CS_USER_AGENT,
+          ELF_CS_USERNAME, ELF_CS_VERSION, ELF_S_COMPUTERNAME, ELF_S_IP,
+          ELF_S_PORT, ELF_SC_STATUS, X_CONNECTION_ID, X_DATETIME, X_ETIME,
+          X_TRANSACTION_ID));
 
   /**
    * Returns an instance of the text HTTP access log publisher that will print
@@ -420,7 +424,12 @@
     fields.put(ELF_C_PORT, ri.getClientPort());
     fields.put(ELF_CS_HOST, ri.getClientHost());
     fields.put(ELF_CS_METHOD, ri.getMethod());
-    fields.put(ELF_CS_URI_QUERY, ri.getQuery());
+
+    final MutableUri uri = ri.getUri();
+    fields.put(ELF_CS_URI, uri.toString());
+    fields.put(ELF_CS_URI_STEM, uri.getRawPath());
+    fields.put(ELF_CS_URI_QUERY, uri.getRawQuery());
+
     fields.put(ELF_CS_USER_AGENT, ri.getUserAgent());
     fields.put(ELF_CS_USERNAME, ri.getAuthUser());
     fields.put(ELF_CS_VERSION, ri.getProtocol());
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/protocols/http/HTTPClientConnection.java b/opendj-server-legacy/src/main/java/org/opends/server/protocols/http/HTTPClientConnection.java
index e0df0b2..a5c5cef 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/protocols/http/HTTPClientConnection.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/protocols/http/HTTPClientConnection.java
@@ -23,6 +23,7 @@
 import static org.opends.server.loggers.AccessLogger.logDisconnect;
 
 import java.net.InetAddress;
+import java.net.URI;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -194,8 +195,8 @@
 
   /** The HTTP method/verb used for this request. */
   private final String method;
-  /** The query issued by the client. */
-  private final String query;
+  /** The URI issued by the client. */
+  private final MutableUri uri;
   /** The user agent used by the client. */
   private final String userAgent;
 
@@ -254,14 +255,13 @@
     this.clientPort = clientCtx.getRemotePort();
     this.isSecure = clientCtx.isSecure();
 
-    final MutableUri uri = request.getUri();
+    this.uri = request.getUri();
     this.serverAddress = uri.getHost();
     this.localAddress = toInetAddress(serverAddress);
     this.serverPort = uri.getPort();
     this.securityStrengthFactor = calcSSF(
             context.asContext(AttributesContext.class).getAttributes().get(SERVLET_SSF_CONSTANT));
     this.method = request.getMethod();
-    this.query = uri.getQuery();
     this.protocol = request.getVersion();
     this.userAgent = clientCtx.getUserAgent();
 
@@ -578,9 +578,9 @@
   }
 
   @Override
-  public String getQuery()
+  public URI getUri()
   {
-    return this.query;
+    return this.uri.asURI();
   }
 
   @Override

--
Gitblit v1.10.0