source: trunk/grails-app/conf/BaseFilters.groovy @ 2

Last change on this file since 2 was 2, checked in by robert@…, 9 years ago

Initial import of basic functionality

File size: 3.6 KB
Line 
1/**
2 * Base Filters
3 * @Author Jeroen Wesbeek
4 * @Since 20091026
5 * @see main.gsp
6 * @see http://grails.org/Filters
7 * @Description
8 *
9 * These filters contain generic logic for -every- page request.
10 *
11 * Revision information:
12 * $Rev: 776 $
13 * $Author: duh $
14 * $Date: 2010-08-05 12:15:26 +0200 (Thu, 05 Aug 2010) $
15 */
16import grails.converters.*
17import org.codehaus.groovy.grails.commons.ConfigurationHolder
18
19import nl.tno.metagenomics.auth.User;
20 
21class BaseFilters {
22        def gscfService
23       
24        // define filters
25        def filters = {
26               
27                userCheck(controller:'*', action:'*') {
28                        before = {
29                                if( actionName == "notifyStudyChange" && controllerName == "rest" ) {
30                                        return true;
31                                }
32                               
33                                if( !ConfigurationHolder.config.gscf.baseURL ) {
34                                        throw new Exception( "No GSCF instance specified. Please check configuration." )
35                                        return false
36                                }
37                               
38                                // enable to inject a session from the outside...
39                                if (params.sessionToken){
40                                        log.info("Setting SessionToken from params.sessionToken to ${params.sessionToken}")
41                                        session.sessionToken = params.sessionToken
42                                       
43                                        log.info("Redirecting to GSCF to login for session from params.sessionToken")
44                                        redirect( url: gscfService.urlAuthRemote(params, session.sessionToken) )
45                                        return false
46                                }
47                               
48                                // If a user is already logged in, let him continue
49                                if( session.user && session.user != null ) {
50                                        return true;
51                                }
52                               
53                                // on all pages of the Metagenomics module a user should be present in the session
54                                if (session.sessionToken) {
55                                        log.info("SessionToken found, ask GSCF for User information")
56
57                                        // try to identify the user with the sessionToken, since the user has logged in before                                                                 
58                                        try {
59                                                def user = [:]
60                                               
61                                                // First check if the user is authenticated. If he isn't, he should provide credentials at GSCF
62                                                def authentication = JSON.parse("${ConfigurationHolder.config.gscf.baseURL}/rest/isUser?consumer=${ConfigurationHolder.config.metagenomics.consumerID}&token=${session.sessionToken}".toURL().text)
63                                               
64                                                if( !authentication.authenticated ) {
65                                                        log.info "Not authenticated: " + authentication.authenticated
66                                                        redirect( url: gscfService.urlAuthRemote(params, session.sessionToken) )
67                                                        return false
68                                                }
69                                               
70                                                // Now find the user data
71                                                JSON.parse("${ConfigurationHolder.config.gscf.baseURL}/rest/getUser?consumer=${ConfigurationHolder.config.metagenomics.consumerID}&token=${session.sessionToken}".toURL().text).each { userProperty ->
72                                                        user["${userProperty.key}"] = "${userProperty.value}"
73                                                }
74                                               
75                                                // Locate user in database or create a new user
76                                                session.user = User.findByIdentifierAndUsername(user.id, user.username)
77                                                if (!session.user){ // when not found, create a new user
78                                                        session.user = new User(identifier: user.id, username: user.username).save(flush: true)
79                                                }                                                       
80                                               
81                                        } catch(Exception e) {
82                                                log.error("Unable to fetch user from GSCF", e)
83                                                throw new Exception( "GSCF instance at " + ConfigurationHolder.config.gscf.baseURL + " could not be reached. Please check configuration.", e )
84                                        }
85                                } else {
86                                        session.sessionToken = "${UUID.randomUUID()}"
87                                        log.info("SessionToken created, redirectiong to GSCF to let the user login! (SessionToken: ${session.sessionToken}")
88
89                                        redirect( url: gscfService.urlAuthRemote(params, session.sessionToken) )
90                                        return false
91                                }
92                        }
93                }
94               
95                defineStyle(controller: '*', action: '*') {
96                        // before every execution
97                        before = {
98                                // set the default style in the session
99                                if (!session.style) {
100                                        session.style = 'metagenomics'
101                                }
102
103                                // set session lifetime to 1 week
104                                session.setMaxInactiveInterval(604800)
105                        }
106                }
107        }
108
109}
110
Note: See TracBrowser for help on using the repository browser.