-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathWeceemSpringSecurityGrailsPlugin.groovy
101 lines (91 loc) · 4.05 KB
/
WeceemSpringSecurityGrailsPlugin.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
class WeceemSpringSecurityGrailsPlugin {
// the plugin version
def version = "1.4"
// the version or versions of Grails the plugin is designed for
def grailsVersion = "2.4.0 > *"
// the other plugins this plugin depends on
def dependsOn = [springSecurityCore:'2.0-RC4 > *']
def loadAfter = ['springSecurityCore'] // So that our user details service overrides
// resources that are excluded from plugin packaging
def pluginExcludes = [
"grails-app/views/error.gsp",
"grails-app/domain/**/*.groovy"
]
def author = "jCatalog AG"
def authorEmail = "[email protected]"
def title = "Bridges Weceem authentication to Spring Security"
def description = '''\\
Provides the glue needed to make Weceem plugin use Spring Security for authorisation and authentication.
Your application still needs to configure Spring-Security however. The domain class is expected to include "email" property.
'''
// URL to the plugin's documentation
def documentation = "http://grails.org/plugin/weceem-spring-security"
def license = "APACHE"
def organization = [name: "OpusCapita Software GmbH", url: "http://www.opuscapita.com/"]
def developers = [
[ name: "Marc Palmer", email: "[email protected]" ]
]
def issueManagement = [system: "GitHub", url: "https://github.com/OpusCapita/weceem-spring-security/issues"]
def scm = [ url: "https://github.com/jCatalog/weceem-plugin" ]
def doWithWebDescriptor = { xml ->
// TODO Implement additions to web.xml (optional), this event occurs before
}
def doWithSpring = {
userDetailsService(org.weceem.auth.WeceemUserDetailsService) {
grailsApplication = ref('grailsApplication')
}
}
def doWithDynamicMethods = { ctx ->
// TODO Implement registering dynamic methods to classes (optional)
}
def doWithApplicationContext = { applicationContext ->
def authenticateService = applicationContext.springSecurityService
applicationContext.wcmSecurityService.securityDelegate = [
getUserName : { ->
def princ = authenticateService.principal
if (log.debugEnabled) {
log.debug "Weceem security getUserName callback - user principal is: ${princ} (an instance of ${princ?.class})"
}
if (princ instanceof String) {
return null
} else {
return princ?.username
}
},
getUserEmail : { ->
def princ = authenticateService.principal
if (log.debugEnabled) {
log.debug "Weceem security getUserEmail callback - user principal is: ${princ} (an instance of ${princ?.class})"
}
return (princ instanceof String) ? null : princ?.email
},
getUserRoles : { ->
def princ = authenticateService.principal
if (log.debugEnabled) {
log.debug "Weceem security getUserRoles callback - user principal is: ${princ} (an instance of ${princ?.class})"
}
if (princ instanceof String) {
return ['ROLE_GUEST']
}
def auths = []
def authorities = princ?.authorities
if (authorities) {
auths.addAll(authorities?.authority)
}
return auths ?: ['ROLE_GUEST']
},
getUserPrincipal : { ->
authenticateService.principal
}
]
}
def onChange = { event ->
// TODO Implement code that is executed when any artefact that this plugin is
// watching is modified and reloaded. The event contains: event.source,
// event.application, event.manager, event.ctx, and event.plugin.
}
def onConfigChange = { event ->
// TODO Implement code that is executed when the project configuration changes.
// The event is the same as for 'onChange'.
}
}