blob: 03afa24ea6517a52635d4b7b42552b5e52b0bdc5 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import grails.util.GrailsNameUtils
import groovy.transform.Field
@Field String usageMessage = '''
grails s2ui-override <type> [controllerPackage]
type can be one of aclclass, aclentry, aclobjectidentity, aclsid, persistentlogin,
register, registrationcode, requestmap, role, securityinfo, user, auth, or layout (not case-sensitive)
controllerPackage is required for any type that has a controller (i.e. all but 'auth' and 'layout')
Example: grails s2ui-override user com.yourcompany.yourapp
'''
description 'Copies plugin controllers and GSPs to the application so they can be overridden', {
usage usageMessage
argument name: 'type', description: 'The group of files to copy'
argument name: 'controllerPackage', description: 'The package name for the controller', required: false
}
String type = args[0].toLowerCase()
String controllerPackage = args.size() > 1 ? args[1] : ''
File grailsApp = file('grails-app')
File controllersDir = new File(grailsApp, 'controllers')
File viewsDir = new File(grailsApp, 'views')
File layoutsDir = new File(viewsDir, 'layouts')
def controllers = [aclclass: 'AclClass',
aclentry: 'AclEntry',
aclobjectidentity: 'AclObjectIdentity',
aclsid: 'AclSid',
persistentlogin: 'PersistentLogin',
register: 'Register',
registrationcode: 'RegistrationCode',
requestmap: 'Requestmap',
role: 'Role',
securityinfo: 'SecurityInfo',
user: 'User']
if (!controllerPackage) {
if ('layout' == type) {
copy template('views/layouts/springSecurityUI.gsp'), file('grails-app/views/layouts/')
copy template('views/includes/_ajaxLogin.gsp'), new File(viewsDir, 'includes')
return
}
if ('auth' == type) {
copy template('views/login/auth.gsp'), new File(viewsDir, 'login')
return
}
}
String controller = controllers[type]
if (!controller) {
error "Unknown type '${args[0]}'\n\nUsage:\n$usageMessage"
return false
}
if (!controllerPackage) {
error "The controller package is required for type '${args[0]}'\n\nUsage:\n$usageMessage"
return false
}
addStatus "Copying ${args[0]} resources"
if ('grails.plugin.springsecurity.ui' == controllerPackage) {
error 'The controller package cannot be the same as the plugin controller'
return false
}
// generate the controller
String directoryName = controllerPackage.replaceAll('\\.', '/')
File destinationDirectory = new File(controllersDir, directoryName)
destinationDirectory.mkdirs()
render template(controller + 'Controller.groovy.template'),
new File(destinationDirectory, controller + 'Controller.groovy'),
[packageDeclaration: "package $controllerPackage"], false
// copy the GSPs
directoryName = GrailsNameUtils.getPropertyName(controller)
File gspDirectory = new File(viewsDir, directoryName)
for (resource in resources(directoryName + '/*.gsp')) {
copy resource, gspDirectory
}
switch ( directoryName ) {
case 'aclClass':
copy template('views/aclClass/create.gsp'), new File(viewsDir, 'aclClass')
copy template('views/aclClass/edit.gsp'), new File(viewsDir, 'aclClass')
copy template('views/aclClass/search.gsp'), new File(viewsDir, 'aclClass')
break
case 'aclEntry':
copy template('views/aclEntry/create.gsp'), new File(viewsDir, 'aclEntry')
copy template('views/aclEntry/edit.gsp'), new File(viewsDir, 'aclEntry')
copy template('views/aclEntry/search.gsp'), new File(viewsDir, 'aclEntry')
break
case 'aclObjectIdentity':
copy template('views/aclObjectIdentity/create.gsp'), new File(viewsDir, 'aclObjectIdentity')
copy template('views/aclObjectIdentity/edit.gsp'), new File(viewsDir, 'aclObjectIdentity')
copy template('views/aclObjectIdentity/search.gsp'), new File(viewsDir, 'aclObjectIdentity')
break
case 'aclSid':
copy template('views/aclSid/create.gsp'), new File(viewsDir, 'aclSid')
copy template('views/aclSid/edit.gsp'), new File(viewsDir, 'aclSid')
copy template('views/aclSid/search.gsp'), new File(viewsDir, 'aclSid')
break
case 'persistentLogin':
copy template('views/persistentLogin/search.gsp'), new File(viewsDir, 'persistentLogin')
copy template('views/persistentLogin/edit.gsp'), new File(viewsDir, 'persistentLogin')
break
case 'register':
copy template('views/register/forgotPassword.gsp'), new File(viewsDir, 'register')
copy template('views/register/register.gsp'), new File(viewsDir, 'register')
copy template('views/register/resetPassword.gsp'), new File(viewsDir, 'register')
copy template('views/register/_forgotPasswordMail.gsp'), new File(viewsDir, 'register')
copy template('views/register/_verifyRegistrationMail.gsp'), new File(viewsDir, 'register')
copy template('views/register/securityQuestions.gsp'), new File(viewsDir, 'register')
break
case 'registrationCode':
copy template('views/registrationCode/search.gsp'), new File(viewsDir, 'registrationCode')
copy template('views/registrationCode/edit.gsp'), new File(viewsDir, 'registrationCode')
break
case 'requestmap':
copy template('views/requestmap/create.gsp'), new File(viewsDir, 'requestmap')
copy template('views/requestmap/edit.gsp'), new File(viewsDir, 'requestmap')
copy template('views/requestmap/search.gsp'), new File(viewsDir, 'requestmap')
break
case 'role':
copy template('views/role/create.gsp'), new File(viewsDir, 'role')
copy template('views/role/edit.gsp'), new File(viewsDir, 'role')
copy template('views/role/search.gsp'), new File(viewsDir, 'role')
break
case 'securityInfo':
copy template('views/securityInfo/config.gsp'), new File(viewsDir, 'securityInfo')
copy template('views/securityInfo/currentAuth.gsp'), new File(viewsDir, 'securityInfo')
copy template('views/securityInfo/filterChains.gsp'), new File(viewsDir, 'securityInfo')
copy template('views/securityInfo/logoutHandlers.gsp'), new File(viewsDir, 'securityInfo')
copy template('views/securityInfo/mappings.gsp'), new File(viewsDir, 'securityInfo')
copy template('views/securityInfo/providers.gsp'), new File(viewsDir, 'securityInfo')
copy template('views/securityInfo/secureChannel.gsp'), new File(viewsDir, 'securityInfo')
copy template('views/securityInfo/usercache.gsp'), new File(viewsDir, 'securityInfo')
copy template('views/securityInfo/voters.gsp'), new File(viewsDir, 'securityInfo')
break
case 'user':
copy template('views/user/create.gsp'), new File(viewsDir, 'user')
copy template('views/user/edit.gsp'), new File(viewsDir, 'user')
copy template('views/user/search.gsp'), new File(viewsDir, 'user')
break
}
if ('register' == type) {
copy template('views/layouts/register.gsp'), file('grails-app/views/layouts/')
copy template('views/layouts/email.gsp'), file('grails-app/views/layouts/')
}
private void copy(pathOrResource, File destinationDirectory) {
if ( !destinationDirectory.exists() ) {
destinationDirectory.mkdirs()
}
copy resource(pathOrResource), destinationDirectory
}