blob: 339cbbc2b35eea7acbdfb61cff91ebaf5adb427f [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.
*/
package test
import grails.gorm.transactions.Transactional
import grails.plugin.springsecurity.SpringSecurityService
import grails.plugin.springsecurity.acl.AclClass
import grails.plugin.springsecurity.acl.AclEntry
import grails.plugin.springsecurity.acl.AclObjectIdentity
import grails.plugin.springsecurity.acl.AclSid
import grails.plugin.springsecurity.ui.RegistrationCode
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
import org.springframework.security.core.authority.SimpleGrantedAuthority
import org.springframework.security.core.context.SecurityContextHolder as SCH
@Transactional
class TestDataService {
def aclService
def aclUtilService
def objectIdentityRetrievalStrategy
SpringSecurityService springSecurityService
void reset() {
deleteData()
createData()
}
void createData() {
createUsersAndRoles()
createRequestmaps()
createRegistrationCodes()
}
void deleteData() {
AclEntry.list()*.delete()
AclObjectIdentity.list()*.delete()
AclClass.list()*.delete()
AclSid.list()*.delete()
Report.list()*.delete()
UserRole.list()*.delete()
User.list()*.delete()
Role.list()*.delete()
Requestmap.list()*.delete()
PersistentToken.list()*.delete()
RegistrationCode.list()*.delete()
User.withSession { it.flush() }
}
protected void createPersistentTokens() {
Date now = new Date()
(1..20).each {
save new PersistentToken(series: "series$it", username: "persistent_login_test_$it",
token: "token$it", lastUsed: now)
}
}
protected void createRegistrationCodes() {
registrationCodeData.each { String token, String username ->
save new RegistrationCode(username: username, token: token)
}
}
protected void createRequestmaps() {
save new Requestmap('/secure/**', 'ROLE_ADMIN')
save new Requestmap('/j_spring_security_switch_user', 'ROLE_RUN_AS,IS_AUTHENTICATED_FULLY')
save new Requestmap('/**', 'permitAll')
springSecurityService.clearCachedRequestmaps()
}
protected void createUsersAndRoles() {
def grantRole = { user, String roleName ->
UserRole.create user, Role.findByAuthority('ROLE_' + roleName.toUpperCase())
}
roleNames.each { save new Role("ROLE_${it.toUpperCase()}") }
(1..3).each {
def user = save new User("user$it", "password", "user$it@test.com")
grantRole user, 'user'
}
def admin = save new User('admin', 'password', 'admin@test.com')
['user', 'admin', 'run_as', 'switch_user'].each { grantRole admin, it }
def flags = [:]
def create = { String... names -> names.each { save new User([username: it, password: 'x'] + flags) } }
create 'foon_2','foolkiller', 'foostra', 'sonnyboy', 'abzstrak', 'orchidtemple', 'drake', 'ajc_322'
flags = [passwordExpired: true]
create 'hhheeeaaatt', 'mscanio', 'kittal'
flags = [accountLocked: true]
create 'achen', 'szhang1999', 'aaaaaasd'
flags = [accountExpired: true]
create 'maryrose', 'rome20c', 'ratuig'
flags = [enabled: false]
create 'billy9494'
}
protected void createAcls() {
if (!aclService) {
return
}
def BasePermission = Class.forName('org.springframework.security.acls.domain.BasePermission',
true, Thread.currentThread().contextClassLoader)
def ADMINISTRATION = BasePermission."ADMINISTRATION"
def READ = BasePermission."READ"
def WRITE = BasePermission."WRITE"
SCH.context.authentication = new UsernamePasswordAuthenticationToken(
'admin', 'password', [new SimpleGrantedAuthority('ROLE_IGNORED')])
try {
def reports = (1..100).collect {
def report = save new Report(name: "report$it", number: it)
aclService.createAcl objectIdentityRetrievalStrategy.getObjectIdentity(report)
report
}
// grant user 1 admin on 11,12 and read on 1-67
aclUtilService.addPermission reports[10], 'user1', ADMINISTRATION
aclUtilService.addPermission reports[11], 'user1', ADMINISTRATION
67.times {
aclUtilService.addPermission reports[it], 'user1', READ
}
// grant user 2 read on 1-5, write on 5
5.times {
aclUtilService.addPermission reports[it], 'user2', READ
}
aclUtilService.addPermission reports[4], 'user2', WRITE
// user 3 has no grants
// grant admin read and admin on all
for (report in reports) {
aclUtilService.addPermission report, 'admin', READ
aclUtilService.addPermission report, 'admin', ADMINISTRATION
}
// grant user 1 ownership on 1,2 to allow the user to grant
aclUtilService.changeOwner reports[0], 'user1'
aclUtilService.changeOwner reports[1], 'user1'
}
finally {
SCH.clearContext()
}
}
protected save(instance) {
instance.save(failOnError: true)
}
private static final registrationCodeData = [
'e81b1e53648a47e6aef31a937154c7cb': 'registration_test_1',
'4a7f88afec3746f7aab2f5d0d8df6d8e': 'registration_test_1',
'c7ac5f23be70495f93e4450a78a27cb4': 'registration_test_1',
'a50e061e0e2f424fb7fbc2ff3dae597d': 'registration_test_1',
'd6938ad63c414a69a0da30a8c0619a60': 'registration_test_2',
'4a589c642ea143abb2ecaea57fa0a0cc': 'registration_test_2',
'0a154624f36d42e4aa68991a9477bd04': 'registration_test_2',
'3842a6ae102a431c8e48177c16720713': 'registration_test_3',
'84cefa66465a460c82f46120d9098686': 'registration_test_3',
'fd1e40a7b31f4e8282a2a789135ed21d': 'registration_test_3',
'89f9bbc658b14808ae4c77c6e17e551a': 'registration_test_3',
'f6779a5e8f2045288b810a3c5e317855': 'registration_test_3',
'3a85f41311f0421ab0f72ff003dc2aeb': 'registration_test_4',
'1d5720125c9441688246bda276b2ada8': 'registration_test_4'
]
private static final roleNames = [
'user', 'admin', 'coffee', 'instead', 'melodrama', 'nevertheless', 'phalanger',
'plagiarisation', 'run_as', 'speechwriter', 'switch_user', 'virtual']
}