Changeset 33241 for main

Show
Ignore:
Timestamp:
27.06.2019 12:50:54 (2 months ago)
Author:
kjdon
Message:

moved the assoc file security code into its own function. now can add hmvf=0 to an assoc file link to force showing the t&c page. for testing purposes

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/core/URLFilter.java

    r33212 r33241  
    7777  protected static final String SYSTEM_SUBACTION_DEACTIVATE = "deactivate"; 
    7878 
    79   // if we are showing terms and conditions to user, this remembers who has accepted already 
     79  // if we are showing terms and conditions to user, this remembers who has 
     80  // accepted already 
    8081  protected Hashtable<String, UserTimer> verifiedUserMap = null; 
    8182  protected static final int verifiedUserTimeout = 24 * 60 * 60 * 1000;  
     
    103104    HttpServletRequest hRequest = ((HttpServletRequest) request); 
    104105    HttpSession hSession = hRequest.getSession(); 
    105     String session_id = hSession.getId(); 
    106106    ServletContext context = hSession.getServletContext(); 
    107107     
     
    116116      return; 
    117117    } 
    118     logger.error("in do Filter: "+url); 
    119  
     118  
    120119    // Run security checks on files requested from a collection's index/assoc folder 
    121120    if (url.contains(ASSOCIATED_FILE_PATH)) { 
     121      // we need to do security checking here in case the documents are private 
     122      // or if there is a terms and conditions page to be shown. 
     123      // Also, assoc files urls now contain the library name in them. 
     124      // e.g. greenstone3/library/sites/localsite/collect/collname/index/assoc/Hashxxx/doc.pdf 
     125      // so they are not a true link to a file. We remove the 
     126      // 'library' then forward the request to the new url. 
     127      securityCheckAssocFiles(url, hRequest, response); 
     128      return; 
     129    } 
     130 
     131    // if we are asking for an interface file, and it doesn't exist, then 
     132    // try loading up the interfaceConfig file to find out what the base 
     133    // interface was, then try looking in that interface for the file. 
     134    if (url.contains(INTERFACE_PATH)) 
     135      {              
     136    String fileURL = url.replaceFirst(context.getContextPath(), ""); 
     137    File requestedFile = new File(context.getRealPath(fileURL)); 
     138 
     139    if (!requestedFile.exists()) { 
     140      String baseURL = getFileInBaseInterface(fileURL, context); 
     141      if (baseURL != null) { 
     142        File baseInterfaceFile = new File(context.getRealPath(baseURL)); 
     143        if (baseInterfaceFile.exists()) { 
     144          request.getRequestDispatcher(baseURL).forward(request, response); 
     145          // ServletOutputStream out = response.getOutputStream(); 
     146          // out.write(FileUtils.readFileToByteArray(baseInterfaceFile)); 
     147          // out.flush(); 
     148          // out.close(); 
     149          return; 
     150        } 
     151      } 
     152    } 
     153      } 
     154    else 
     155      { 
     156    ArrayList<String> keywords = new ArrayList<String>(); 
     157    keywords.add(PAGE_PATH); 
     158    keywords.add(BROWSE_PATH); 
     159    keywords.add(SEARCH_PATH); 
     160    keywords.add(DOCUMENT_PATH); 
     161    //If we have a jsessionid on the end of our URL we want to ignore it 
     162    int index; 
     163    if ((index = url.indexOf(";jsessionid")) != -1) 
     164      { 
     165        url = url.substring(0, index); 
     166      } 
     167    String[] segments = url.split("/"); 
     168    for (int i = 0; i < segments.length; i++) 
     169      { 
     170        String[] additionalParameters = null; 
     171        String[] defaultParamValues = null; 
     172        //COLLECTION 
     173        if (segments[i].equals(COLLECTION_PATH) && (i + 1) < segments.length) { 
     174          int j=i+1; 
     175          while(j+1 < segments.length && !keywords.contains(segments[j+1])) { 
     176        j++; 
     177          } 
     178                       
     179          if (j>i+1) { 
     180        // we had a group part 
     181        String [] groups = Arrays.copyOfRange(segments, i+1, j); 
     182        String group = StringUtils.join(groups, "/"); 
     183        gRequest.setParameter(GSParams.GROUP, group); 
     184          } 
     185          gRequest.setParameter(GSParams.COLLECTION, segments[j]); 
     186        } 
     187        // GROUP 
     188        else if(segments[i].equals(GROUP_PATH) && (i + 1) < segments.length) 
     189          { 
     190        // assume for now, no other path parts for group links 
     191        int j= segments.length - 1; 
     192        String group; 
     193        if (j==i+1) { 
     194          group = segments[j]; 
     195        } else { 
     196          String [] groups = Arrays.copyOfRange(segments, i+1, j+1); 
     197          group = StringUtils.join(groups, "/"); 
     198        } 
     199        gRequest.setParameter(GSParams.GROUP, group); 
     200        gRequest.setParameter(GSParams.ACTION, "p"); 
     201        gRequest.setParameter(GSParams.SUBACTION, "home"); 
     202                         
     203          } 
     204        //DOCUMENT 
     205        else if (segments[i].equals(DOCUMENT_PATH) && (i + 1) < segments.length) 
     206          { 
     207        gRequest.setParameter(GSParams.DOCUMENT, segments[i + 1]); 
     208                         
     209        additionalParameters = new String[] { GSParams.ACTION }; 
     210        defaultParamValues = new String[] { "d" }; 
     211        if ((i+2) < segments.length && segments[i+2].equals("print")) { 
     212          gRequest.setParameter(GSParams.SUBACTION, "print"); 
     213          gRequest.setParameter("ed", "1"); 
     214                           
     215        } 
     216                     
     217          } 
     218        //PAGE 
     219        else if (segments[i].equals(PAGE_PATH) && (i + 1) < segments.length) 
     220          { 
     221        gRequest.setParameter(GSParams.SUBACTION, segments[i + 1]); 
     222 
     223        additionalParameters = new String[] { GSParams.ACTION }; 
     224        defaultParamValues = new String[] { "p" }; 
     225          } 
     226        //SYSTEM 
     227        else if (segments[i].equals(SYSTEM_PATH) && (i + 1) < segments.length) 
     228          { 
     229        String sa = segments[i + 1]; 
     230        if (sa.equals(SYSTEM_SUBACTION_CONFIGURE) || sa.equals(SYSTEM_SUBACTION_RECONFIGURE)) 
     231          { 
     232            sa = "c"; 
     233          } 
     234        else if (sa.equals(SYSTEM_SUBACTION_ACTIVATE)) 
     235          { 
     236            sa = "a"; 
     237          } 
     238        else if (sa.equals(SYSTEM_SUBACTION_DEACTIVATE)) 
     239          { 
     240            sa = "d"; 
     241          } 
     242 
     243        if (sa.equals("c") && (i + 2) < segments.length) 
     244          { 
     245            gRequest.setParameter(GSParams.SYSTEM_CLUSTER, segments[i + 2]); 
     246          } 
     247 
     248        if (sa.equals("a") && (i + 2) < segments.length) 
     249          { 
     250            gRequest.setParameter(GSParams.SYSTEM_MODULE_TYPE, "collection"); 
     251            gRequest.setParameter(GSParams.SYSTEM_MODULE_NAME, segments[i + 2]); 
     252          } 
     253 
     254        if (sa.equals("d") && (i + 2) < segments.length) 
     255          { 
     256            gRequest.setParameter(GSParams.SYSTEM_CLUSTER, segments[i + 2]); 
     257          } 
     258 
     259        gRequest.setParameter(GSParams.SUBACTION, sa); 
     260 
     261        additionalParameters = new String[] { GSParams.ACTION }; 
     262        defaultParamValues = new String[] { "s" }; 
     263          } 
     264        //ADMIN 
     265        else if (segments[i].equals("admin") && (i + 1) < segments.length) 
     266          { 
     267        String pageName = segments[i + 1]; 
     268 
     269        gRequest.setParameter("s1.authpage", pageName); 
     270 
     271        additionalParameters = new String[] { GSParams.ACTION, GSParams.REQUEST_TYPE, GSParams.SUBACTION, GSParams.SERVICE }; 
     272        defaultParamValues = new String[] { "g", "r", "authen", "Authentication" }; 
     273          } 
     274        //BROWSE 
     275        else if (segments[i].equals(BROWSE_PATH) && (i + 1) < segments.length) 
     276          { 
     277        String cl = ""; 
     278        for (int j = 1; (i + j) < segments.length; j++) 
     279          { 
     280            String currentSegment = segments[i + j].replace("CL", "").replace("cl", ""); 
     281            if (currentSegment.contains(".")) 
     282              { 
     283            String[] subsegments = currentSegment.split("\\."); 
     284            for (String subsegment : subsegments) 
     285              { 
     286                subsegment = subsegment.replace("CL", "").replace("cl", ""); 
     287 
     288                if (cl.length() > 0) 
     289                  { 
     290                cl += "."; 
     291                  } 
     292 
     293                if (subsegment.length() > 0) 
     294                  { 
     295                cl += subsegment; 
     296                  } 
     297              } 
     298            continue; 
     299              } 
     300            if (!currentSegment.matches("^(CL|cl)?\\d+$")) 
     301              { 
     302            continue; 
     303              } 
     304 
     305            if (cl.length() > 0) 
     306              { 
     307            cl += "."; 
     308              } 
     309 
     310            cl += currentSegment; 
     311          } 
     312 
     313        gRequest.setParameter("cl", "CL" + cl); 
     314 
     315        additionalParameters = new String[] { GSParams.ACTION, GSParams.REQUEST_TYPE, GSParams.SERVICE }; 
     316        defaultParamValues = new String[] { "b", "s", "ClassifierBrowse" }; 
     317          } 
     318        //QUERY 
     319        else if (segments[i].equals(SEARCH_PATH)) 
     320          { 
     321        String serviceName = ""; 
     322        if ((i + 1) < segments.length) 
     323          { 
     324            serviceName = segments[i + 1]; 
     325            gRequest.setParameter("s", serviceName); 
     326 
     327            additionalParameters = new String[] { GSParams.ACTION, GSParams.SUBACTION, GSParams.REQUEST_TYPE }; 
     328            defaultParamValues = new String[] { "q", "", "d" }; 
     329          } 
     330        if ((i + 2) < segments.length) 
     331          { 
     332            if (serviceName.equals("TextQuery") || serviceName.equals("RawQuery")) 
     333              { 
     334 
     335            gRequest.setParameter("s1.query", segments[i + 2]); 
     336              } 
     337            else if (serviceName.equals("FieldQuery")) 
     338              { 
     339            gRequest.setParameter("s1.fqv", segments[i + 2]); 
     340              } 
     341            else if (serviceName.equals("AdvancedFieldQuery")) 
     342              { 
     343            gRequest.setParameter("s1.fqv", segments[i + 2]); 
     344              } 
     345          } 
     346          } 
     347        if (additionalParameters != null) 
     348          { 
     349        for (int j = 0; j < additionalParameters.length; j++) 
     350          { 
     351            if (gRequest.getParameter(additionalParameters[j]) == null) 
     352              { 
     353            gRequest.setParameter(additionalParameters[j], defaultParamValues[j]); 
     354              } 
     355          } 
     356          } 
     357      } 
     358      } 
     359 
     360    chain.doFilter(gRequest, response); 
     361  } 
     362 
     363  private boolean isURLRestricted(String url) 
     364  { 
     365    for (String restrictedURL : _restrictedURLs) 
     366      { 
     367    if (url.matches(".*" + restrictedURL + ".*")) 
     368      { 
     369        return true; 
     370      } 
     371      } 
     372 
     373    return false; 
     374  } 
     375 
     376  private String getFileInBaseInterface(String fileURL, ServletContext context) { 
     377    int interfaceNameStart = fileURL.indexOf(INTERFACE_PATH) + INTERFACE_PATH.length(); 
     378    int interfaceNameEnd = fileURL.indexOf("/", interfaceNameStart); 
     379    String interfaceName = fileURL.substring(interfaceNameStart, interfaceNameEnd); 
     380    String interfacesDir = fileURL.substring(0, interfaceNameStart); 
     381    File interfaceConfigFile = new File(context.getRealPath(interfacesDir + interfaceName + "/interfaceConfig.xml")); 
     382     
     383    if (interfaceConfigFile.exists()) { 
    122384       
    123     // now we need to get library name from the path, which is like 
     385      Document interfaceConfigDoc = XMLConverter.getDOM(interfaceConfigFile); 
     386       
     387      String baseInterface = interfaceConfigDoc.getDocumentElement().getAttribute("baseInterface"); 
     388      if (baseInterface.length() > 0) 
     389    { 
     390      return fileURL.replace("/" + interfaceName + "/", "/" + baseInterface + "/"); 
     391    } 
     392    } 
     393      return null; 
     394  } 
     395       
     396 
     397  private void securityCheckAssocFiles(String url, HttpServletRequest request, ServletResponse response) throws IOException, ServletException { 
     398    HttpSession session = request.getSession(); 
     399    String session_id = session.getId(); 
     400    ServletContext context = session.getServletContext(); 
     401 
     402        // now we need to get library name from the path, which is like 
    124403    // /greenstone3/library/sites/localsite/collect/collname/index/assoc/... 
    125404    String library_name = url.replaceFirst(context.getContextPath(), ""); 
     
    255534    // if got here have no groups that we need to belong to 
    256535    // do we have human verify thing? 
    257     if (verifiable_file) { 
    258       // we are asking for the main document - lets check human verify 
     536    if (verifiable_file && !securityResponse.getAttribute(GSXML.VERIFY_ATT).equals("") ) { 
     537      // we are asking for the main document, and we have been asked to verify the user  
    259538      logger.error("KATH verifiable file is true"); 
    260       if (!securityResponse.getAttribute(GSXML.VERIFY_ATT).equals("")) { 
    261         // have we done the test previously? 
    262         boolean already_verified = false; 
     539       
     540      // have we done the test previously? 
     541      boolean already_verified = false; 
     542      String hmvf_response = request.getParameter(GSParams.VERIFIED); 
     543      if (hmvf_response != null && hmvf_response.equals("0")) { 
     544        // force the t&c 
     545      } else { 
    263546        if (verifiedUserMap == null) { 
    264547          // we haven't done this at all, set up the map 
     
    272555        } 
    273556        logger.error("KATH already verified = "+already_verified); 
    274  
     557           
    275558        if (!already_verified) { 
    276559          // have we just  done the test? 
    277           String hmvf_response = gRequest.getParameter(GSParams.VERIFIED); 
     560          //String hmvf_response = request.getParameter(GSParams.VERIFIED); 
    278561          // hmvf param will be set by form if the verify page was submitted 
    279562          if (hmvf_response != null && hmvf_response.equals("1")) { 
    280563        logger.error("user has submitted the form, check recaptcha response"); 
    281564        if (!securityResponse.getAttribute(GSXML.SITE_KEY_ATT).equals("")) { 
    282           String recaptcha_response = gRequest.getParameter(Authentication.RECAPTCHA_RESPONSE_PARAM); 
     565          String recaptcha_response = request.getParameter(Authentication.RECAPTCHA_RESPONSE_PARAM); 
    283566          String secret_key = securityResponse.getAttribute(GSXML.SECRET_KEY_ATT); 
    284567          int result = Authentication.verifyRecaptcha(secret_key, recaptcha_response); 
     
    286569          if (result == Authentication.NO_ERROR) { 
    287570            logger.error("RECAPTCHA SUCCESS, hopefully going to the document"); 
    288  
     571            already_verified = true; 
    289572             
    290573          } else { 
     
    294577            String new_url = context.getContextPath()+"/"+ library_name+"?a=p&sa=error&c="+collection+"&ec=recap_fail";              
    295578            ((HttpServletResponse)response).sendRedirect(new_url); 
    296                          
     579             
    297580            return; 
    298581          } 
    299  
    300           // store the fact that user has verified 
    301           UserTimer timer = new UserTimer(verifiedUserTimeout, session_id); 
    302           verifiedUserMap.put(session_id, timer); 
    303           timer.start(); 
     582             
     583             
    304584           
    305585        } 
    306                          
    307           } else { 
    308         // hmvf param is not set - we haven't shown them the form yet 
    309         // we need to display the verify page 
    310         logger.error("KATH display verify page"); 
    311         //String new_url = context.getContextPath()+"/"+ context.getAttribute("LibraryName")+"?a=p&sa=verify&c="+collection+"&url="+url; 
    312         String new_url = context.getContextPath()+"/"+ library_name+"?a=p&sa=verify&c="+collection+"&url="+url;              
    313         ((HttpServletResponse)response).sendRedirect(new_url); 
    314         return; 
    315           } 
     586        already_verified = true; 
     587        // store the fact that user has verified 
     588        UserTimer timer = new UserTimer(verifiedUserTimeout, session_id); 
     589        verifiedUserMap.put(session_id, timer); 
     590        timer.start(); 
     591         
     592          } // hmvf = 1 
    316593        } 
    317       } // end if we are asked to verify it 
    318     } // end if verifiable file 
     594      } 
     595      if (!already_verified) { 
     596        // hmvf param is not set - we haven't shown them the form yet 
     597        // or we have been asked to force the T&C 
     598        // we need to display the verify page 
     599        logger.error("KATH display verify page"); 
     600        //String new_url = context.getContextPath()+"/"+ context.getAttribute("LibraryName")+"?a=p&sa=verify&c="+collection+"&url="+url; 
     601        String new_url = context.getContextPath()+"/"+ library_name+"?a=p&sa=verify&c="+collection+"&url="+url;              
     602        ((HttpServletResponse)response).sendRedirect(new_url); 
     603        return; 
     604      } 
     605    } // end if verifiable file && need to verify 
    319606     
    320607             
     
    330617 
    331618    return; 
    332     } 
    333     else if (url.contains(INTERFACE_PATH)) 
    334       {              
    335     String fileURL = url.replaceFirst(context.getContextPath(), ""); 
    336     File requestedFile = new File(context.getRealPath(fileURL)); 
    337  
    338     if (!requestedFile.exists()) 
    339       { 
    340         int interfaceNameStart = fileURL.indexOf(INTERFACE_PATH) + INTERFACE_PATH.length(); 
    341         int interfaceNameEnd = fileURL.indexOf("/", interfaceNameStart); 
    342         String interfaceName = fileURL.substring(interfaceNameStart, interfaceNameEnd); 
    343         String interfacesDir = fileURL.substring(0, interfaceNameStart); 
    344         File interfaceConfigFile = new File(context.getRealPath(interfacesDir + interfaceName + "/interfaceConfig.xml")); 
    345  
    346         if (interfaceConfigFile.exists()) 
    347           { 
    348         Document interfaceConfigDoc = XMLConverter.getDOM(interfaceConfigFile); 
    349  
    350         String baseInterface = interfaceConfigDoc.getDocumentElement().getAttribute("baseInterface"); 
    351         if (baseInterface.length() > 0) 
    352           { 
    353             File baseInterfaceFile = new File(context.getRealPath(fileURL.replace("/" + interfaceName + "/", "/" + baseInterface + "/"))); 
    354             if (baseInterfaceFile.exists()) 
    355               { 
    356             ServletOutputStream out = response.getOutputStream(); 
    357             out.write(FileUtils.readFileToByteArray(baseInterfaceFile)); 
    358             out.flush(); 
    359             out.close(); 
    360             return; 
    361               } 
    362           } 
    363           } 
    364       } 
    365       } 
    366     else 
    367       { 
    368     ArrayList<String> keywords = new ArrayList<String>(); 
    369     keywords.add(PAGE_PATH); 
    370     keywords.add(BROWSE_PATH); 
    371     keywords.add(SEARCH_PATH); 
    372     keywords.add(DOCUMENT_PATH); 
    373     //If we have a jsessionid on the end of our URL we want to ignore it 
    374     int index; 
    375     if ((index = url.indexOf(";jsessionid")) != -1) 
    376       { 
    377         url = url.substring(0, index); 
    378       } 
    379     String[] segments = url.split("/"); 
    380     for (int i = 0; i < segments.length; i++) 
    381       { 
    382         String[] additionalParameters = null; 
    383         String[] defaultParamValues = null; 
    384         //COLLECTION 
    385         if (segments[i].equals(COLLECTION_PATH) && (i + 1) < segments.length) { 
    386           int j=i+1; 
    387           while(j+1 < segments.length && !keywords.contains(segments[j+1])) { 
    388         j++; 
    389           } 
    390                        
    391           if (j>i+1) { 
    392         // we had a group part 
    393         String [] groups = Arrays.copyOfRange(segments, i+1, j); 
    394         String group = StringUtils.join(groups, "/"); 
    395         gRequest.setParameter(GSParams.GROUP, group); 
    396           } 
    397           gRequest.setParameter(GSParams.COLLECTION, segments[j]); 
    398         } 
    399         // GROUP 
    400         else if(segments[i].equals(GROUP_PATH) && (i + 1) < segments.length) 
    401           { 
    402         // assume for now, no other path parts for group links 
    403         int j= segments.length - 1; 
    404         String group; 
    405         if (j==i+1) { 
    406           group = segments[j]; 
    407         } else { 
    408           String [] groups = Arrays.copyOfRange(segments, i+1, j+1); 
    409           group = StringUtils.join(groups, "/"); 
    410         } 
    411         gRequest.setParameter(GSParams.GROUP, group); 
    412         gRequest.setParameter(GSParams.ACTION, "p"); 
    413         gRequest.setParameter(GSParams.SUBACTION, "home"); 
    414                          
    415           } 
    416         //DOCUMENT 
    417         else if (segments[i].equals(DOCUMENT_PATH) && (i + 1) < segments.length) 
    418           { 
    419         gRequest.setParameter(GSParams.DOCUMENT, segments[i + 1]); 
    420                          
    421         additionalParameters = new String[] { GSParams.ACTION }; 
    422         defaultParamValues = new String[] { "d" }; 
    423         if ((i+2) < segments.length && segments[i+2].equals("print")) { 
    424           gRequest.setParameter(GSParams.SUBACTION, "print"); 
    425           gRequest.setParameter("ed", "1"); 
    426                            
    427         } 
    428                      
    429           } 
    430         //PAGE 
    431         else if (segments[i].equals(PAGE_PATH) && (i + 1) < segments.length) 
    432           { 
    433         gRequest.setParameter(GSParams.SUBACTION, segments[i + 1]); 
    434  
    435         additionalParameters = new String[] { GSParams.ACTION }; 
    436         defaultParamValues = new String[] { "p" }; 
    437           } 
    438         //SYSTEM 
    439         else if (segments[i].equals(SYSTEM_PATH) && (i + 1) < segments.length) 
    440           { 
    441         String sa = segments[i + 1]; 
    442         if (sa.equals(SYSTEM_SUBACTION_CONFIGURE) || sa.equals(SYSTEM_SUBACTION_RECONFIGURE)) 
    443           { 
    444             sa = "c"; 
    445           } 
    446         else if (sa.equals(SYSTEM_SUBACTION_ACTIVATE)) 
    447           { 
    448             sa = "a"; 
    449           } 
    450         else if (sa.equals(SYSTEM_SUBACTION_DEACTIVATE)) 
    451           { 
    452             sa = "d"; 
    453           } 
    454  
    455         if (sa.equals("c") && (i + 2) < segments.length) 
    456           { 
    457             gRequest.setParameter(GSParams.SYSTEM_CLUSTER, segments[i + 2]); 
    458           } 
    459  
    460         if (sa.equals("a") && (i + 2) < segments.length) 
    461           { 
    462             gRequest.setParameter(GSParams.SYSTEM_MODULE_TYPE, "collection"); 
    463             gRequest.setParameter(GSParams.SYSTEM_MODULE_NAME, segments[i + 2]); 
    464           } 
    465  
    466         if (sa.equals("d") && (i + 2) < segments.length) 
    467           { 
    468             gRequest.setParameter(GSParams.SYSTEM_CLUSTER, segments[i + 2]); 
    469           } 
    470  
    471         gRequest.setParameter(GSParams.SUBACTION, sa); 
    472  
    473         additionalParameters = new String[] { GSParams.ACTION }; 
    474         defaultParamValues = new String[] { "s" }; 
    475           } 
    476         //ADMIN 
    477         else if (segments[i].equals("admin") && (i + 1) < segments.length) 
    478           { 
    479         String pageName = segments[i + 1]; 
    480  
    481         gRequest.setParameter("s1.authpage", pageName); 
    482  
    483         additionalParameters = new String[] { GSParams.ACTION, GSParams.REQUEST_TYPE, GSParams.SUBACTION, GSParams.SERVICE }; 
    484         defaultParamValues = new String[] { "g", "r", "authen", "Authentication" }; 
    485           } 
    486         //BROWSE 
    487         else if (segments[i].equals(BROWSE_PATH) && (i + 1) < segments.length) 
    488           { 
    489         String cl = ""; 
    490         for (int j = 1; (i + j) < segments.length; j++) 
    491           { 
    492             String currentSegment = segments[i + j].replace("CL", "").replace("cl", ""); 
    493             if (currentSegment.contains(".")) 
    494               { 
    495             String[] subsegments = currentSegment.split("\\."); 
    496             for (String subsegment : subsegments) 
    497               { 
    498                 subsegment = subsegment.replace("CL", "").replace("cl", ""); 
    499  
    500                 if (cl.length() > 0) 
    501                   { 
    502                 cl += "."; 
    503                   } 
    504  
    505                 if (subsegment.length() > 0) 
    506                   { 
    507                 cl += subsegment; 
    508                   } 
    509               } 
    510             continue; 
    511               } 
    512             if (!currentSegment.matches("^(CL|cl)?\\d+$")) 
    513               { 
    514             continue; 
    515               } 
    516  
    517             if (cl.length() > 0) 
    518               { 
    519             cl += "."; 
    520               } 
    521  
    522             cl += currentSegment; 
    523           } 
    524  
    525         gRequest.setParameter("cl", "CL" + cl); 
    526  
    527         additionalParameters = new String[] { GSParams.ACTION, GSParams.REQUEST_TYPE, GSParams.SERVICE }; 
    528         defaultParamValues = new String[] { "b", "s", "ClassifierBrowse" }; 
    529           } 
    530         //QUERY 
    531         else if (segments[i].equals(SEARCH_PATH)) 
    532           { 
    533         String serviceName = ""; 
    534         if ((i + 1) < segments.length) 
    535           { 
    536             serviceName = segments[i + 1]; 
    537             gRequest.setParameter("s", serviceName); 
    538  
    539             additionalParameters = new String[] { GSParams.ACTION, GSParams.SUBACTION, GSParams.REQUEST_TYPE }; 
    540             defaultParamValues = new String[] { "q", "", "d" }; 
    541           } 
    542         if ((i + 2) < segments.length) 
    543           { 
    544             if (serviceName.equals("TextQuery") || serviceName.equals("RawQuery")) 
    545               { 
    546  
    547             gRequest.setParameter("s1.query", segments[i + 2]); 
    548               } 
    549             else if (serviceName.equals("FieldQuery")) 
    550               { 
    551             gRequest.setParameter("s1.fqv", segments[i + 2]); 
    552               } 
    553             else if (serviceName.equals("AdvancedFieldQuery")) 
    554               { 
    555             gRequest.setParameter("s1.fqv", segments[i + 2]); 
    556               } 
    557           } 
    558           } 
    559         if (additionalParameters != null) 
    560           { 
    561         for (int j = 0; j < additionalParameters.length; j++) 
    562           { 
    563             if (gRequest.getParameter(additionalParameters[j]) == null) 
    564               { 
    565             gRequest.setParameter(additionalParameters[j], defaultParamValues[j]); 
    566               } 
    567           } 
    568           } 
    569       } 
    570       } 
    571  
    572     chain.doFilter(gRequest, response); 
    573   } 
    574  
    575   private boolean isURLRestricted(String url) 
    576   { 
    577     for (String restrictedURL : _restrictedURLs) 
    578       { 
    579     if (url.matches(".*" + restrictedURL + ".*")) 
    580       { 
    581         return true; 
    582       } 
    583       } 
    584  
    585     return false; 
    586   } 
     619  } 
     620 
     621 
     622 
    587623 
    588624  private String queryMRforDOCID(MessageRouter gsRouter, String collection, String assocfiledir) {