Ignore:
Timestamp:
Jun 24, 2011, 12:56:22 PM (11 years ago)
Author:
robert@…
Message:

Updated module notification so that it also sends authentication to modules.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/services/dbnp/modules/ModuleNotificationService.groovy

    r1588 r1939  
    1717import dbnp.studycapturing.*
    1818import org.dbnp.gdt.*
     19import org.springframework.web.context.request.RequestContextHolder
    1920
    2021class ModuleNotificationService implements Serializable {
     22        def remoteAuthenticationService
     23       
    2124    static transactional = false
    2225       
     
    4245                def modules = AssayModule.findByNotify(true);
    4346               
     47                // If no modules are set to notify, return
     48                if( !modules )
     49                        return
     50                       
     51                       
     52                // Try to see which user is logged in. If no user is logged in (or no http session exists yet)
     53                // we send no authentication parameters
     54                def user
     55                try {
     56                        user = RequestContextHolder.currentRequestAttributes().getSession().gscfUser
     57                       
     58                        if( !user )
     59                                throw new Exception( "No user is logged in" );
     60                               
     61                } catch( Exception e ) {
     62                        log.warn "Sending study change notification without authentication, because an exception occurred: " + e.getMessage();
     63                }
     64               
    4465                def urls = []
    4566                modules.each { module ->
    46                         urls << module.url + '/rest/notifyStudyChange?studyToken=' + study.giveUUID()
     67                        // create a random session token that will be used to allow to module to
     68                        // sync with gscf prior to presenting the measurement data
     69                        def sessionToken = UUID.randomUUID().toString()
     70                        def consumer = module.url
     71                       
     72                        // Create a URL to call
     73                        def authenticationParameters = "";
     74                        if( user ) {
     75                                // put the session token to work (for 15 minutes)
     76                                remoteAuthenticationService.logInRemotely( consumer, sessionToken, user, 15 * 60 )
     77
     78                                authenticationParameters = "consumer=" + consumer + "&sessionToken=" + sessionToken;
     79                        }
     80                               
     81                        urls << module.url + '/rest/notifyStudyChange?studyToken=' + study.giveUUID() + ( authenticationParameters ? "&" + authenticationParameters : "" )
    4782                }
    4883               
     84                // Notify the module in a separate thread, so the user doesn't have to wait for it
    4985                Thread.start {
    5086                        urls.each { url ->
Note: See TracChangeset for help on using the changeset viewer.