Changeset 1985 for trunk/grails-app


Ignore:
Timestamp:
Sep 1, 2011, 2:38:54 PM (8 years ago)
Author:
work@…
Message:
  • the restcontoller's getAssays method compares the module url with the assay module url. However, it is frequently the case that while correct, they do not match entirely. For example when using a named host, localhost or a named host in the hosts file. Now the hostname will be resolved to ip which will be matched instead
Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

    • Property svn:ignore
      •  

        old new  
        1212dtd
        1313*.mp4
         14dump
  • trunk/grails-app/controllers/RestController.groovy

    r1974 r1985  
    366366         */
    367367        def getAssays = {
     368                def moduleURL, moduleInet, assayModuleURL, assayModuleInet
     369
    368370                // Check which user has been logged in
    369371                def user = authenticationService.getRemotelyLoggedInUser( params.consumer, params.token )
     
    381383                        return
    382384                }
    383                
     385
    384386                def assays = []
    385387               
    386388                if( params.studyToken ) {
    387 
    388389                        def study = Study.findByStudyUUID(params.studyToken)
    389390
     
    424425
    425426                // Create data for all assays
     427                moduleURL = new URL(params.moduleURL)
     428                moduleInet = InetAddress.getByName(moduleURL.getHost())
    426429                assays.each{ assay ->
    427                         if (assay.module?.url && assay.module.url.equals(params.moduleURL)) {
    428                                 if(assay) {
     430                        /**
     431                         * assay.module.url does not necessarily have to match the moduleURL
     432                         * completely (e.g. when using a hosts file vs ip), especially when using
     433                         * localhost, 127.0.01 or a host name that aliasses localhost.
     434                         *
     435                         * Therefore we will resolve the host names and compare the resulting ip
     436                         * addresses and see if they match
     437                         *
     438                         * future improvement: do not use the module URL for matching at all. Perhaps
     439                         * a module identifier or a 'module token' would be better as this is not
     440                         * url dependant.
     441                         */
     442                        if (assay.module?.url) {
     443                                assayModuleURL = new URL(assay.module.url)
     444                                assayModuleInet = InetAddress.getByName(assayModuleURL.getHost())
     445
     446                                if (
     447                                        moduleInet.hostAddress == assayModuleInet.hostAddress &&        // match ip addresses
     448                                        moduleURL.path == assayModuleURL.path &&                                        // match host path
     449                                        assay                                                       // got assay?
     450                                ) {
    429451                                        def map = [assayToken : assay.giveUUID()]
     452
    430453                                        assay.giveFields().each { field ->
    431454                                                def name = field.name
     
    433456                                                map[name] = value
    434457                                        }
     458
    435459                                        map["parentStudyToken"] = assay.parent.giveUUID()
    436460                                        returnList.push( map )
Note: See TracChangeset for help on using the changeset viewer.