Changeset 1990 for trunk


Ignore:
Timestamp:
Sep 1, 2011, 4:57:23 PM (8 years ago)
Author:
work@…
Message:
  • a bit more efficient
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/RestController.groovy

    r1989 r1990  
    439439                         * a module identifier or a 'module token' would be better as this is not
    440440                         * url dependant.
     441                         *
     442                         * check if:
     443                         *  1. we've for a module url
     444                         *      2. we've got an assay
     445                         *      3. the calling module is the same as the assay's module by checking if:
     446                         *              a. the module urls match, or
     447                         *              b. the (resolved) ip addresses and path part of the module's url match
    441448                         */
    442                         if (assay.module?.url) {
    443                                 assayModuleURL = new URL(assay.module.url)
    444                                 assayModuleInet = InetAddress.getByName(assayModuleURL.getHost())
    445 
    446                                 // check if
    447                                 //      1. we've got an assay
    448                                 //      2. ip address of module matches
    449                                 //      3. the path part of the module matches
    450                                 if (
    451                                         assay &&
    452                                         moduleInet.hostAddress == assayModuleInet.hostAddress &&
    453                                         (
    454                                                 moduleURL.path.replaceAll(/[^a-zA-Z0-9]/,"") ==
    455                                                 assayModuleURL.path.replaceAll(/[^a-zA-Z0-9]/,"")
    456                                         )
    457                                 ) {
    458                                         def map = [assayToken : assay.giveUUID()]
    459 
    460                                         assay.giveFields().each { field ->
    461                                                 def name = field.name
    462                                                 def value = assay.getFieldValue( name )
    463                                                 map[name] = value
    464                                         }
    465 
    466                                         map["parentStudyToken"] = assay.parent.giveUUID()
    467                                         returnList.push( map )
    468                                 }
     449                        if (
     450                                assay.module?.url &&
     451                                assay &&
     452                                (
     453                                        assay.module.url.equals(params.moduleURL) ||
     454                                        this.doesModuleMatch(assay, moduleURL, moduleInet)
     455                                )
     456                        ) {
     457                                def map = [assayToken: assay.giveUUID()]
     458
     459                                assay.giveFields().each { field ->
     460                                        def name = field.name
     461                                        def value = assay.getFieldValue(name)
     462                                        map[name] = value
     463                                }
     464
     465                                map["parentStudyToken"] = assay.parent.giveUUID()
     466                                returnList.push(map)
    469467                        }
    470468                }
    471469
    472470                render returnList as JSON
     471        }
     472
     473        def doesModuleMatch = { assay, moduleURL, moduleInet ->
     474                // only resolve hosts if the urls do not match identically
     475                def assayModuleURL = new URL(assay.module.url)
     476                def assayModuleInet = InetAddress.getByName(assayModuleURL.getHost())
     477
     478                return (
     479                        moduleInet.hostAddress == assayModuleInet.hostAddress &&
     480                        (moduleURL.path.replaceAll(/[^a-zA-Z0-9]/, "") == assayModuleURL.path.replaceAll(/[^a-zA-Z0-9]/, ""))
     481                )
    473482        }
    474483
Note: See TracChangeset for help on using the changeset viewer.