Author: cbrisson
Date: Sat Dec 23 15:17:17 2017
New Revision: 1819156

URL: http://svn.apache.org/viewvc?rev=1819156&view=rev
Log:
Added BrowserTool.getIPAddress()

Modified:
    velocity/tools/trunk/src/changes/changes.xml
    
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BrowserTool.java

Modified: velocity/tools/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/src/changes/changes.xml?rev=1819156&r1=1819155&r2=1819156&view=diff
==============================================================================
--- velocity/tools/trunk/src/changes/changes.xml (original)
+++ velocity/tools/trunk/src/changes/changes.xml Sat Dec 23 15:17:17 2017
@@ -25,6 +25,9 @@
   </properties>
   <body>
     <release version="3.0-SNAPSHOT" date="In Subversion">
+      <action type="add" dev="cbrisson">
+        Added <code>$browser.IPAddress</code>
+      </action>
       <action type="fix" dev="cbrisson">
         Removed deprecated components velocity-tools-uberjar and 
velocity-tools-assembly
       </action>

Modified: 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BrowserTool.java
URL: 
http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BrowserTool.java?rev=1819156&r1=1819155&r2=1819156&view=diff
==============================================================================
--- 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BrowserTool.java
 (original)
+++ 
velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BrowserTool.java
 Sat Dec 23 15:17:17 2017
@@ -49,6 +49,7 @@ import javax.servlet.http.HttpServletReq
  * <li><b>Specific rendering engine tests:</b>gecko webKit KHTML trident blink 
edgeHTML presto</li>
  * <li><b>Specific OS tests:</b>windows OSX linux unix BSD android iOS 
symbian</li>
  * <li><b>Languages</b>: <i>preferredLanguageTag</i> (a string like 'en', 
'da', 'en-US', ...), <i>preferredLocale</i> (a java Locale)</li>
+ * <li><b>IP address</b>: <i>IPAddress</i>
  * </ul>
  *
  * <p>Language properties are filtered by the languagesFilter tool param, if 
present, which is here to specify which languages are acceptable on the server 
side.
@@ -100,6 +101,9 @@ public class BrowserTool extends Browser
 {
     private static final long serialVersionUID = 1734529350532353339L;
 
+    /* IP */
+    private String IPAddress = null;
+    
     /* User-Agent */
     private String userAgentString = null;
     private String lowercaseUserAgentString = null;
@@ -125,6 +129,19 @@ public class BrowserTool extends Browser
         {
             setUserAgentString(request.getHeader("User-Agent"));
             setAcceptLanguage(request.getHeader("Accept-Language"));
+
+            /* Get IP Address */
+            IPAddress = request.getHeader("X-FORWARDED-FOR");
+            if (IPAddress == null)
+            {
+                IPAddress = request.getRemoteAddr();
+            }
+            int coma;
+            if (IPAddress != null && (coma = IPAddress.indexOf(',')) != -1)
+            {
+                /* keep the leftmost address */
+                IPAddress = IPAddress.substring(0, coma);
+            }
         }
         else
         {
@@ -198,7 +215,7 @@ public class BrowserTool extends Browser
     }
 
 
-    /* Generic getter for unknown tests
+    /* Generic getter for custom tests
      */
     public boolean get(String key)
     {
@@ -215,6 +232,25 @@ public class BrowserTool extends Browser
         return acceptLanguage;
     }
 
+    /**
+     * <p>
+     *   Get the client browser IP address. In the session scope, which is the 
default,
+     *   it corresponds to the <i>first</i> seen IP adress.
+     * </p>
+     * <p>
+     *   The tool tries to get the real IP address whenever the request has 
been proxied.
+     * </p>
+     * <p>
+     *   Please note that the result may be null.
+     * </p>
+     * @return the IP address as a string
+     * @Since VelocityTools 3.0
+     */
+    public String getIPAddress()
+    {
+        return IPAddress;
+    }
+
     /* device type */
 
     /**


Reply via email to