[Yanel-commits] rev 24260 - in public/yanel/trunk/src: contributions/resources/atom/src/java/org/wyona/yanel/impl/resources core/java/org/wyona/yanel/core/map webapp/src/java/org/wyona/yanel/servlet

michi at wyona.com michi at wyona.com
Tue May 8 11:46:43 CEST 2007


Author: michi
Date: 2007-05-08 11:46:41 +0200 (Tue, 08 May 2007)
New Revision: 24260

Modified:
   public/yanel/trunk/src/contributions/resources/atom/src/java/org/wyona/yanel/impl/resources/AtomFeedResource.java
   public/yanel/trunk/src/core/java/org/wyona/yanel/core/map/Realm.java
   public/yanel/trunk/src/core/java/org/wyona/yanel/core/map/RealmConfiguration.java
   public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
Log:
ssl proxy port introduced and proxy code refactored

Modified: public/yanel/trunk/src/contributions/resources/atom/src/java/org/wyona/yanel/impl/resources/AtomFeedResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/atom/src/java/org/wyona/yanel/impl/resources/AtomFeedResource.java	2007-05-08 09:43:34 UTC (rev 24259)
+++ public/yanel/trunk/src/contributions/resources/atom/src/java/org/wyona/yanel/impl/resources/AtomFeedResource.java	2007-05-08 09:46:41 UTC (rev 24260)
@@ -133,13 +133,11 @@
             if (proxyHostName != null) {
                 URL url = new URL(requestURL);
                 url = new URL(url.getProtocol(), proxyHostName, url.getPort(), url.getFile());
-                String proxyPort = realm.getProxyPort();
-                if (proxyPort != null) {
-                    if (proxyPort.length() > 0) {
-                        url = new URL(url.getProtocol(), url.getHost(), new Integer(proxyPort).intValue(), url.getFile());
-                    } else {
-                        url = new URL(url.getProtocol(), url.getHost(), url.getDefaultPort(), url.getFile());
-                    }
+                int proxyPort = realm.getProxyPort();
+                if (proxyPort >= 0) {
+                    url = new URL(url.getProtocol(), url.getHost(), proxyPort, url.getFile());
+                } else {
+                    url = new URL(url.getProtocol(), url.getHost(), url.getDefaultPort(), url.getFile());
                 }
                 String proxyPrefix = realm.getProxyPrefix();
                 if (proxyPrefix != null) {

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/map/Realm.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/map/Realm.java	2007-05-08 09:43:34 UTC (rev 24259)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/map/Realm.java	2007-05-08 09:46:41 UTC (rev 24260)
@@ -59,8 +59,10 @@
     private File rootDir;
     private String[] languages;
 
+    private boolean proxySet = false;
     private String proxyHostName;
-    private String proxyPort;
+    private int proxyPort = -1;
+    private int proxySSLPort = -1;
     private String proxyPrefix;
 
     /**
@@ -71,6 +73,8 @@
         this.id = id;
         this.mountPoint = mountPoint;
         this.configFile = configFile;
+
+        proxySet = false;
         
         if (configFile != null) {
             DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
@@ -91,6 +95,9 @@
         }
     }
 
+    /**
+     *
+     */
     protected void configure(Configuration config) throws Exception {
 
         Yanel yanel = Yanel.getInstance();
@@ -195,15 +202,24 @@
     /**
      *
      */
-    public void setProxy(String hostName, String port, String prefix) {
+    public void setProxy(String hostName, int port, int sslPort, String prefix) {
+        proxySet = true;
         proxyHostName = hostName;
         proxyPort = port;
+        proxySSLPort = sslPort;
         proxyPrefix = prefix;
     }
 
     /**
      *
      */
+    public boolean isProxySet() {
+        return proxySet;
+    }
+
+    /**
+     *
+     */
     public String getProxyHostName() {
         return proxyHostName;
     }
@@ -211,13 +227,20 @@
     /**
      *
      */
-    public String getProxyPort() {
+    public int getProxyPort() {
         return proxyPort;
     }
 
     /**
      *
      */
+    public int getProxySSLPort() {
+        return proxySSLPort;
+    }
+
+    /**
+     *
+     */
     public String getProxyPrefix() {
         return proxyPrefix;
     }
@@ -227,15 +250,26 @@
      */
     public String toString() {
         String descr = "Name: " + name + ", ID: " + id + ", Mount-Point: " + mountPoint;
-        if (proxyHostName != null) {
-            descr = descr + ", Reverse Proxy Host Name: " + proxyHostName;
+        if (isProxySet()) {
+            if (proxyHostName != null) {
+                descr = descr + ", Reverse Proxy Host Name: " + proxyHostName;
+            }
+            if (proxyPort >= 0) {
+                descr = descr + ", Reverse Proxy Port: " + proxyPort;
+            } else {
+                descr = descr + ", Reverse Proxy Port is set to default 80 (resp. -1)";
+            }
+            if (proxySSLPort >= 0) {
+                descr = descr + ", Reverse Proxy SSL Port: " + proxySSLPort;
+            } else {
+                descr = descr + ", Reverse Proxy SSL Port is set to default 443 (resp. -1)";
+            }
+            if (proxyPrefix != null) {
+               descr = descr + ", Reverse Proxy Prefix: " + proxyPrefix;
+            }
+        } else {
+            descr = descr + ", No reverse proxy set";
         }
-        if (proxyPort != null) {
-            descr = descr + ", Reverse Proxy Port: " + proxyPort;
-        }
-        if (proxyPrefix != null) {
-            descr = descr + ", Reverse Proxy Prefix: " + proxyPrefix;
-        }
         return descr;
     }
     

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/map/RealmConfiguration.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/map/RealmConfiguration.java	2007-05-08 09:43:34 UTC (rev 24259)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/map/RealmConfiguration.java	2007-05-08 09:46:41 UTC (rev 24260)
@@ -197,7 +197,6 @@
                 String realmId = realmElements[i].getAttribute("id", null);
                 String rootFlag = realmElements[i].getAttribute("root", "false");
                 Configuration name = realmElements[i].getChild("name", false);
-                Configuration proxy = realmElements[i].getChild("reverse-proxy", false);
                 Configuration configElement = realmElements[i].getChild("config", false);
                 if (configElement == null) {
                     throw new ConfigurationException("Missing <config src=\"...\"/> child element for realm " + realmId);
@@ -209,8 +208,11 @@
                 try {
                     Realm realm = new Realm(name.getValue(), realmId, mountPoint, realmConfigFile);
                     
+                    Configuration proxy = realmElements[i].getChild("reverse-proxy", false);
                     if (proxy != null) {
-                        realm.setProxy(proxy.getChild("host-name").getValue(), proxy.getChild("port").getValue(""), proxy.getChild("prefix").getValue());
+                        int proxyPort = new Integer(proxy.getChild("port").getValue("-1")).intValue();
+                        int proxySSLPort = new Integer(proxy.getChild("ssl-port").getValue("-1")).intValue();
+                        realm.setProxy(proxy.getChild("host-name").getValue(), proxyPort, proxySSLPort, proxy.getChild("prefix").getValue());
                     }
                     
                     log.info("Realm: " + realm);
@@ -326,8 +328,8 @@
         while(keyIterator.hasNext()) {
             String key = (String)keyIterator.next();
             Realm realm = (Realm)hm.get(key);
-            if ((realm.getProxyHostName() == null) && (!key.equals(rootRealm.getID()))) {
-                realm.setProxy(rootRealm.getProxyHostName(), rootRealm.getProxyPort(), rootRealm.getProxyPrefix());
+            if ((realm.getProxyHostName() == null) && (!key.equals(rootRealm.getID())) && rootRealm.isProxySet()) {
+                realm.setProxy(rootRealm.getProxyHostName(), rootRealm.getProxyPort(), rootRealm.getProxySSLPort(), rootRealm.getProxyPrefix());
                 log.debug("Inherit root realm properties to realm: " + key);
             }
             if (realm.getIdentityManager() == null) {

Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2007-05-08 09:43:34 UTC (rev 24259)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2007-05-08 09:46:41 UTC (rev 24260)
@@ -1044,8 +1044,19 @@
                 if(sslPort != null) {
                     log.info("Redirect to SSL ...");
                     try {
-                    URL url = new URL(getRequestURLQS(request, null, false).toString());
+                        URL url = new URL(getRequestURLQS(request, null, false).toString());
                         url = new URL("https", url.getHost(), new Integer(sslPort).intValue(), url.getFile());
+                        log.error("Redirect to SSL: " + url);
+                        if (realm.isProxySet()) {
+                            if (realm.getProxySSLPort() >= 0) {
+                                log.error("DEBUG: Use configured port: " + realm.getProxySSLPort());
+                                url = new URL(url.getProtocol(), url.getHost(), new Integer(realm.getProxySSLPort()).intValue(), url.getFile());
+                            } else {
+                                log.error("DEBUG: Use default port: " + url.getDefaultPort());
+                                // NOTE: getDefaultPort depends on the Protocol (e.g. https is 443)
+                                url = new URL(url.getProtocol(), url.getHost(), url.getDefaultPort(), url.getFile());
+                            }
+                        }
                         response.setHeader("Location", url.toString());
                         // TODO: Yulup has a bug re TEMPORARY_REDIRECT
                         //response.setStatus(javax.servlet.http.HttpServletResponse.SC_TEMPORARY_REDIRECT);
@@ -1111,43 +1122,43 @@
     }
 
     /**
-     *
+     * Patch request with proxy settings re realm configuration
      */
     private String getRequestURLQS(HttpServletRequest request, String addQS, boolean xml) {
-        //Realm realm = map.getRealm(new Path(request.getServletPath()));
         try {
             Realm realm = map.getRealm(request.getServletPath());
     
             // TODO: Handle this exception more gracefully!
             if (realm == null) log.error("No realm found for path " +request.getServletPath());
+
             String proxyHostName = realm.getProxyHostName();
-            String proxyPort = realm.getProxyPort();
+            int proxyPort = realm.getProxyPort();
             String proxyPrefix = realm.getProxyPrefix();
     
             URL url = null;
         
             url = new URL(request.getRequestURL().toString());
 
-            if (proxyHostName != null) {
-                url = new URL(url.getProtocol(), proxyHostName, url.getPort(), url.getFile());
-            }
+            //if(proxyHostName != null || proxyPort >= null || proxyPrefix != null) {
+            if(realm.isProxySet()) {
+                if (proxyHostName != null) {
+                    url = new URL(url.getProtocol(), proxyHostName, url.getPort(), url.getFile());
+                }
 
-            if (proxyPort != null) {
-                if (proxyPort.length() > 0) {
-                    url = new URL(url.getProtocol(), url.getHost(), new Integer(proxyPort).intValue(), url.getFile());
+                if (proxyPort >= 0) {
+                    url = new URL(url.getProtocol(), url.getHost(), proxyPort, url.getFile());
                 } else {
                     url = new URL(url.getProtocol(), url.getHost(), url.getDefaultPort(), url.getFile());
                 }
-            }
 
-            if (proxyPrefix != null) {
-                url = new URL(url.getProtocol(), url.getHost(), url.getPort(), url.getFile().substring(proxyPrefix.length()));
+                if (proxyPrefix != null) {
+                    url = new URL(url.getProtocol(), url.getHost(), url.getPort(), url.getFile().substring(proxyPrefix.length()));
+                }
+                log.error("DEBUG: Proxy enabled for this realm resp. request: " + realm + ", " + url);
+            } else {
+                log.error("DEBUG: No proxy set for this realm resp. request: " + realm + ", " + url);
             }
 
-            if(proxyHostName != null || proxyPort != null || proxyPrefix != null) {
-                log.debug("Proxy enabled request: " + url);
-            }
-
             String urlQS = url.toString();
             if (request.getQueryString() != null) {
                 urlQS = urlQS + "?" + request.getQueryString();




More information about the Yanel-commits mailing list