diff --git a/gradle.properties b/gradle.properties index d2a17e35b..a57df120d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,12 +17,9 @@ # under the License. # projectVersion=7.0.0-SNAPSHOT -grailsVersion=7.0.0-SNAPSHOT +grailsVersion=7.0.0-M5 javaVersion=17 -# TODO: This is a work around since the bom does not support exclusions and spring forces groovy version 4.0.26 -groovy.version=4.0.27 - unboundidLdapSdk=7.0.2 apacheDsVersion=1.5.4 asciidoctorGradlePluginVersion=4.0.4 diff --git a/gradle/test-config.gradle b/gradle/test-config.gradle index b31774371..abded51e7 100644 --- a/gradle/test-config.gradle +++ b/gradle/test-config.gradle @@ -50,6 +50,9 @@ tasks.named('integrationTest', Test) { } systemProperty 'geb.build.reportsDir', reporting.file("$project.projectDir/build/geb-reports") + systemProperty 'grails.geb.reporting.directory', reporting.file("$project.projectDir/build/geb-reports").canonicalFile.absolutePath + systemProperty 'grails.geb.timeouts.implicitlyWait', '30' + // systemProperty 'grails.geb.recording.mode', 'RECORD_ALL' systemProperties System.properties doFirst { logger.quiet( diff --git a/plugin-acl/examples/functional-test-app/build.gradle b/plugin-acl/examples/functional-test-app/build.gradle index 22585b7e9..a85b38382 100644 --- a/plugin-acl/examples/functional-test-app/build.gradle +++ b/plugin-acl/examples/functional-test-app/build.gradle @@ -19,40 +19,44 @@ plugins { id 'org.apache.grails.gradle.grails-web' + id 'org.apache.grails.gradle.grails-gsp' } group = 'misc.functional.test.app' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation project(':acl-plugin') implementation 'org.apache.grails:grails-core' + implementation 'org.apache.grails:grails-data-hibernate5' + implementation 'org.apache.grails:grails-databinding' + implementation 'org.apache.grails:grails-gsp' + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' implementation 'org.apache.grails:grails-web-boot' - implementation 'org.apache.grails:grails-gsp' - implementation 'org.apache.grails:grails-data-hibernate5' - + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' + runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' runtimeOnly 'org.fusesource.jansi:jansi' - runtimeOnly 'org.apache.grails:grails-databinding' - runtimeOnly 'org.apache.grails:grails-i18n' - runtimeOnly 'org.apache.grails:grails-services' - runtimeOnly 'org.apache.grails:grails-url-mappings' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' - integrationTestImplementation testFixtures('org.apache.grails:grails-geb') - integrationTestImplementation 'org.apache.grails:grails-testing-support-web' - integrationTestImplementation 'org.apache.grails.data:grails-datamapping-core', { - // @Rollback - } - integrationTestImplementation 'org.springframework.security:spring-security-acl', { - // BasePermission - } - integrationTestImplementation 'org.spockframework:spock-core' + testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' + testImplementation 'org.spockframework:spock-core' + + // Non-default dependencies + implementation project(':acl-plugin') } apply from: rootProject.layout.projectDirectory.file('gradle/java-config.gradle') diff --git a/plugin-acl/examples/integration-test-app/build.gradle b/plugin-acl/examples/integration-test-app/build.gradle index 4a80dfc40..c0dd464e2 100644 --- a/plugin-acl/examples/integration-test-app/build.gradle +++ b/plugin-acl/examples/integration-test-app/build.gradle @@ -16,35 +16,46 @@ * specific language governing permissions and limitations * under the License. */ - plugins { id 'org.apache.grails.gradle.grails-web' + id 'org.apache.grails.gradle.grails-gsp' } group = 'grails.plugin.springsecurity.acl' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation project(':acl-plugin') implementation 'org.apache.grails:grails-core' - implementation 'org.apache.grails:grails-web-boot' - implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-data-hibernate5' + implementation 'org.apache.grails:grails-databinding' implementation 'org.apache.grails:grails-gsp' - + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' + implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' + implementation 'org.apache.grails:grails-web-boot' + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' + runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' - runtimeOnly 'org.apache.grails:grails-databinding' - runtimeOnly 'org.apache.grails:grails-i18n' - runtimeOnly 'org.apache.grails:grails-services' - runtimeOnly 'org.apache.grails:grails-url-mappings' - runtimeOnly 'org.apache.grails:grails-data-hibernate5' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' + runtimeOnly 'org.fusesource.jansi:jansi' + integrationTestImplementation testFixtures('org.apache.grails:grails-geb') + testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' + testImplementation 'org.spockframework:spock-core' - integrationTestImplementation 'org.apache.grails:grails-testing-support-web' - integrationTestImplementation 'org.spockframework:spock-core' + // Non-default dependencies + implementation project(':acl-plugin') } apply { diff --git a/plugin-acl/plugin/build.gradle b/plugin-acl/plugin/build.gradle index 78dbf1473..3c1062fae 100644 --- a/plugin-acl/plugin/build.gradle +++ b/plugin-acl/plugin/build.gradle @@ -36,26 +36,27 @@ dependencies { implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation "org.springframework.boot:spring-boot-starter-logging" - implementation "org.springframework.boot:spring-boot-autoconfigure" - implementation "org.apache.grails:grails-core" - implementation "org.springframework.boot:spring-boot-starter-actuator" - implementation "org.springframework.boot:spring-boot-starter-tomcat" - implementation "org.apache.grails:grails-web-boot" - implementation "org.apache.grails:grails-logging" - implementation "org.apache.grails:grails-rest-transforms" - implementation "org.apache.grails:grails-databinding" - implementation "org.apache.grails:grails-i18n" - implementation "org.apache.grails:grails-services" - implementation "org.apache.grails:grails-url-mappings" - implementation "org.apache.grails:grails-interceptors" - implementation "org.apache.grails:grails-gsp" - console "org.apache.grails:grails-console" - profile "org.apache.grails.profiles:web-plugin" - runtimeOnly "org.apache.grails:grails-services" - runtimeOnly "org.apache.grails:grails-domain-class" - testImplementation "org.apache.grails:grails-testing-support-datamapping" - testImplementation "org.apache.grails:grails-testing-support-web" + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.apache.grails:grails-core' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.apache.grails:grails-web-boot' + implementation 'org.apache.grails:grails-logging' + implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-databinding' + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-gsp' + console 'org.apache.grails:grails-console' + profile 'org.apache.grails.profiles:web-plugin' + runtimeOnly 'org.apache.grails:grails-services' + runtimeOnly 'org.apache.grails:grails-domain-class' + testImplementation platform("org.apache.grails:grails-bom:$grailsVersion") + testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' implementation 'org.ehcache:ehcache' @@ -71,3 +72,7 @@ apply { from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') } + +grails { + springDependencyManagement = false +} diff --git a/plugin-cas/examples/spring-security-cas-test1/build.gradle b/plugin-cas/examples/spring-security-cas-test1/build.gradle index 535251c16..42a422420 100644 --- a/plugin-cas/examples/spring-security-cas-test1/build.gradle +++ b/plugin-cas/examples/spring-security-cas-test1/build.gradle @@ -19,35 +19,44 @@ plugins { id 'org.apache.grails.gradle.grails-web' - id 'cloud.wondrify.asset-pipeline' + id 'org.apache.grails.gradle.grails-gsp' } group = 'spring.security.cas' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation project(':cas-plugin') implementation 'org.apache.grails:grails-core' + implementation 'org.apache.grails:grails-data-hibernate5' + implementation 'org.apache.grails:grails-databinding' + implementation 'org.apache.grails:grails-gsp' + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' implementation 'org.apache.grails:grails-web-boot' - implementation 'org.apache.grails:grails-gsp' - - // 3rd party client-side assets bundled in webjars - implementation 'org.webjars:bootstrap:3.3.6' - implementation 'org.webjars:jquery:2.2.0' - + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' - runtimeOnly 'org.apache.grails:grails-databinding' - runtimeOnly 'org.apache.grails:grails-i18n' - runtimeOnly 'org.apache.grails:grails-url-mappings' - runtimeOnly 'org.apache.grails:grails-data-hibernate5' runtimeOnly 'org.fusesource.jansi:jansi' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' + integrationTestImplementation testFixtures('org.apache.grails:grails-geb') + testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' + testImplementation 'org.spockframework:spock-core' + + // Non-default dependencies + implementation project(':cas-plugin') } apply { diff --git a/plugin-cas/plugin/build.gradle b/plugin-cas/plugin/build.gradle index 45439ceb0..0ae3463b6 100644 --- a/plugin-cas/plugin/build.gradle +++ b/plugin-cas/plugin/build.gradle @@ -57,3 +57,7 @@ apply { from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') } + +grails { + springDependencyManagement = false +} diff --git a/plugin-core/examples/functional-test-app/build.gradle b/plugin-core/examples/functional-test-app/build.gradle index 93f1cc095..1f1d62791 100644 --- a/plugin-core/examples/functional-test-app/build.gradle +++ b/plugin-core/examples/functional-test-app/build.gradle @@ -16,38 +16,49 @@ * specific language governing permissions and limitations * under the License. */ - plugins { - id 'org.apache.grails.gradle.grails-web' id 'cloud.wondrify.asset-pipeline' + id 'org.apache.grails.gradle.grails-web' + id 'org.apache.grails.gradle.grails-gsp' } group = 'examples.test' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation project(':core-plugin') implementation 'org.apache.grails:grails-core' + implementation 'org.apache.grails:grails-data-hibernate5' + implementation 'org.apache.grails:grails-databinding' implementation 'org.apache.grails:grails-gsp' + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' implementation 'org.apache.grails:grails-rest-transforms' - + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' + implementation 'org.apache.grails:grails-web-boot' + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' - runtimeOnly 'org.apache.grails:grails-data-hibernate5' - runtimeOnly 'org.apache.grails:grails-i18n' - runtimeOnly 'org.apache.grails:grails-services' - runtimeOnly 'org.apache.grails:grails-url-mappings' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' - + runtimeOnly 'org.fusesource.jansi:jansi' integrationTestImplementation testFixtures('org.apache.grails:grails-geb') - integrationTestImplementation "io.micronaut:micronaut-http-client:$micronautVersion" - integrationTestImplementation 'org.apache.grails:grails-testing-support-web' - integrationTestImplementation 'org.spockframework:spock-core' + testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' + testImplementation 'org.spockframework:spock-core' + // Non-default dependencies + implementation project(':core-plugin') + + integrationTestImplementation "io.micronaut:micronaut-http-client:$micronautVersion" integrationTestRuntimeOnly "io.micronaut:micronaut-jackson-databind:$micronautVersion" } diff --git a/plugin-core/examples/integration-test-app/build.gradle b/plugin-core/examples/integration-test-app/build.gradle index 2186aae02..c6bcb6737 100644 --- a/plugin-core/examples/integration-test-app/build.gradle +++ b/plugin-core/examples/integration-test-app/build.gradle @@ -16,43 +16,46 @@ * specific language governing permissions and limitations * under the License. */ - plugins { id 'org.apache.grails.gradle.grails-web' + id 'org.apache.grails.gradle.grails-gsp' } group = 'misc.integration.test.app' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation project(':core-plugin') implementation 'org.apache.grails:grails-core' - implementation 'org.apache.grails.data:grails-datamapping-core' - implementation 'org.apache.grails:grails-domain-class' - + implementation 'org.apache.grails:grails-data-hibernate5' + implementation 'org.apache.grails:grails-databinding' + implementation 'org.apache.grails:grails-gsp' + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' + implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' + implementation 'org.apache.grails:grails-web-boot' + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' + runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' - runtimeOnly 'org.apache.grails:grails-data-hibernate5' - runtimeOnly 'org.apache.grails:grails-i18n' - runtimeOnly 'org.apache.grails:grails-services' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' + runtimeOnly 'org.fusesource.jansi:jansi' + integrationTestImplementation testFixtures('org.apache.grails:grails-geb') + testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' + testImplementation 'org.spockframework:spock-core' - integrationTestImplementation 'org.apache.grails.testing:grails-test-core', { - // GrailsMockHttpServletRequest, GrailsMockHttpServletResponse - } - integrationTestImplementation 'org.apache.grails:grails-testing-support-web', { - // @Integration - } - integrationTestImplementation 'org.sitemesh:sitemesh', { - // SiteMeshFilter - } - integrationTestImplementation 'org.springframework:spring-test', { - // MockFilterChain, MockHttpServletRequest, MockHttpServletResponse - } - integrationTestImplementation 'org.spockframework:spock-core' + // Non-default dependencies + implementation project(':core-plugin') } apply { diff --git a/plugin-core/examples/integration-test-app/src/integration-test/groovy/grails/plugin/springsecurity/GormUserDetailsServiceSpec.groovy b/plugin-core/examples/integration-test-app/src/integration-test/groovy/grails/plugin/springsecurity/GormUserDetailsServiceSpec.groovy index 7356584f3..3e031ab10 100644 --- a/plugin-core/examples/integration-test-app/src/integration-test/groovy/grails/plugin/springsecurity/GormUserDetailsServiceSpec.groovy +++ b/plugin-core/examples/integration-test-app/src/integration-test/groovy/grails/plugin/springsecurity/GormUserDetailsServiceSpec.groovy @@ -20,6 +20,7 @@ package grails.plugin.springsecurity import org.springframework.security.core.userdetails.UserDetailsService import org.springframework.security.core.userdetails.UsernameNotFoundException +import org.springframework.security.crypto.password.PasswordEncoder import test.TestRole import test.TestRoleGroup import test.TestRoleGroupRoles @@ -44,7 +45,7 @@ class GormUserDetailsServiceSpec extends AbstractIntegrationSpec { 'authority.groupAuthorityNameField', 'userLookup.authoritiesPropertyName'] private securityConfigGroupPropertyValues - def passwordEncoder + PasswordEncoder passwordEncoder UserDetailsService userDetailsService void setup() { @@ -127,7 +128,7 @@ class GormUserDetailsServiceSpec extends AbstractIntegrationSpec { then: details - passwordEncoder.matches password, "{noop}$details.password" + passwordEncoder.matches password, details.password loginName == details.username details.enabled details.accountNonExpired @@ -241,7 +242,7 @@ class GormUserDetailsServiceSpec extends AbstractIntegrationSpec { then: details - passwordEncoder.matches password, "{noop}$details.password" + passwordEncoder.matches password, details.password loginName == details.username details.enabled details.accountNonExpired diff --git a/plugin-core/examples/integration-test-app/src/integration-test/groovy/grails/plugin/springsecurity/SpringSecurityUtilsIntegrationSpec.groovy b/plugin-core/examples/integration-test-app/src/integration-test/groovy/grails/plugin/springsecurity/SpringSecurityUtilsIntegrationSpec.groovy index ef4197ed9..fae581908 100644 --- a/plugin-core/examples/integration-test-app/src/integration-test/groovy/grails/plugin/springsecurity/SpringSecurityUtilsIntegrationSpec.groovy +++ b/plugin-core/examples/integration-test-app/src/integration-test/groovy/grails/plugin/springsecurity/SpringSecurityUtilsIntegrationSpec.groovy @@ -18,7 +18,7 @@ */ package grails.plugin.springsecurity -import org.sitemesh.webapp.SiteMeshFilter +import org.springframework.util.ClassUtils import org.springframework.web.filter.FormContentFilter import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE @@ -90,7 +90,7 @@ class SpringSecurityUtilsIntegrationSpec extends AbstractIntegrationSpec { def map = SpringSecurityUtils.configuredOrderedFilters expect: - 11 == map.size() + map.size() == (ClassUtils.isPresent('org.sitemesh.webapp.SiteMeshFilter', getClass().classLoader) ? 11 : 10) map[Integer.MIN_VALUE + 10] instanceof SecurityRequestHolderFilter map[SecurityFilterPosition.SECURITY_CONTEXT_FILTER.order] instanceof SecurityContextPersistenceFilter map[SecurityFilterPosition.LOGOUT_FILTER.order] instanceof MutableLogoutFilter @@ -99,7 +99,11 @@ class SpringSecurityUtilsIntegrationSpec extends AbstractIntegrationSpec { map[SecurityFilterPosition.REMEMBER_ME_FILTER.order] instanceof GrailsRememberMeAuthenticationFilter map[SecurityFilterPosition.ANONYMOUS_FILTER.order] instanceof GrailsAnonymousAuthenticationFilter map[SecurityFilterPosition.EXCEPTION_TRANSLATION_FILTER.order-10] instanceof FormContentFilter - map[SecurityFilterPosition.EXCEPTION_TRANSLATION_FILTER.order-4] instanceof SiteMeshFilter + if(ClassUtils.isPresent('org.sitemesh.webapp.SiteMeshFilter', getClass().classLoader)) { + // sitemesh 3 uses a filter + def siteMeshFilter = map[SecurityFilterPosition.EXCEPTION_TRANSLATION_FILTER.order - 4] + siteMeshFilter.class.name == 'org.sitemesh.webapp.SiteMeshFilter' + } map[SecurityFilterPosition.EXCEPTION_TRANSLATION_FILTER.order] instanceof ExceptionTranslationFilter map[SecurityFilterPosition.FILTER_SECURITY_INTERCEPTOR.order] instanceof FilterSecurityInterceptor @@ -128,7 +132,7 @@ class SpringSecurityUtilsIntegrationSpec extends AbstractIntegrationSpec { SpringSecurityUtils.clientRegisterFilter 'dummyFilter', SecurityFilterPosition.LOGOUT_FILTER.order + 10 then: - 12 == map.size() + map.size() == (ClassUtils.isPresent('org.sitemesh.webapp.SiteMeshFilter', getClass().classLoader) ? 12 : 11) map[SecurityFilterPosition.LOGOUT_FILTER.order + 10] instanceof DummyFilter when: @@ -144,9 +148,14 @@ class SpringSecurityUtilsIntegrationSpec extends AbstractIntegrationSpec { filters[6] instanceof GrailsRememberMeAuthenticationFilter filters[7] instanceof GrailsAnonymousAuthenticationFilter filters[8] instanceof FormContentFilter - filters[9] instanceof SiteMeshFilter - filters[10] instanceof ExceptionTranslationFilter - filters[11] instanceof FilterSecurityInterceptor + int i = 9 + if(ClassUtils.isPresent('org.sitemesh.webapp.SiteMeshFilter', getClass().classLoader)) { + // sitemesh 3 uses a filter + def siteMeshFilter = filters[i++] + siteMeshFilter.class.name == 'org.sitemesh.webapp.SiteMeshFilter' + } + filters[i++] instanceof ExceptionTranslationFilter + filters[i] instanceof FilterSecurityInterceptor } void 'reauthenticate'() { diff --git a/plugin-core/examples/misc-functional-test-app/grails-spring-security-group/build.gradle b/plugin-core/examples/misc-functional-test-app/grails-spring-security-group/build.gradle index 5597db040..23b094598 100644 --- a/plugin-core/examples/misc-functional-test-app/grails-spring-security-group/build.gradle +++ b/plugin-core/examples/misc-functional-test-app/grails-spring-security-group/build.gradle @@ -19,45 +19,44 @@ plugins { id 'org.apache.grails.gradle.grails-web' + id 'org.apache.grails.gradle.grails-gsp' } group = 'grails.spring.security.group' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation project(':core-plugin') implementation 'org.apache.grails:grails-core' - implementation 'org.apache.grails.data:grails-datastore-core', { - // AbstractPersistenceEvent, PreInsertEvent, PreUpdateEvent - } - implementation 'org.apache.grails.data:grails-datamapping-core', { - // DetachedCriteria - } - implementation 'org.apache.grails.events:grails-events-transforms', { - // @Listener - } - implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-data-hibernate5' + implementation 'org.apache.grails:grails-databinding' implementation 'org.apache.grails:grails-gsp' - implementation 'org.springframework:spring-beans', { - // @Autowired - } - + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' + implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' + implementation 'org.apache.grails:grails-web-boot' + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' + runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' - runtimeOnly 'org.apache.grails:grails-i18n' - runtimeOnly 'org.apache.grails:grails-url-mappings' - runtimeOnly 'org.apache.grails:grails-data-hibernate5' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' - + runtimeOnly 'org.fusesource.jansi:jansi' integrationTestImplementation testFixtures('org.apache.grails:grails-geb') - integrationTestImplementation 'org.apache.grails:grails-testing-support-web' - integrationTestImplementation 'org.apache.grails.data:grails-datamapping-core', { - // @Rollback - } - integrationTestImplementation 'org.spockframework:spock-core' + testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' + testImplementation 'org.spockframework:spock-core' + + // Non-default dependencies + implementation project(':core-plugin') } apply { diff --git a/plugin-core/examples/misc-functional-test-app/grails-spring-security-hierarchical-roles/build.gradle b/plugin-core/examples/misc-functional-test-app/grails-spring-security-hierarchical-roles/build.gradle index bf283e22d..5561360bc 100644 --- a/plugin-core/examples/misc-functional-test-app/grails-spring-security-hierarchical-roles/build.gradle +++ b/plugin-core/examples/misc-functional-test-app/grails-spring-security-hierarchical-roles/build.gradle @@ -16,44 +16,46 @@ * specific language governing permissions and limitations * under the License. */ - plugins { id 'org.apache.grails.gradle.grails-web' + id 'org.apache.grails.gradle.grails-gsp' } group = 'grails.spring.security.hierarchical.roles' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation project(':core-plugin') implementation 'org.apache.grails:grails-core' - implementation 'org.apache.grails.data:grails-datastore-core', { - // AbstractPersistenceEvent, PreInsertEvent, PreUpdateEvent - } - implementation 'org.apache.grails.data:grails-datamapping-core', { - // DetachedCriteria, @Transactional - } - implementation 'org.apache.grails:grails-domain-class' - implementation 'org.apache.grails.events:grails-events-transforms', { - // @Listener - } + implementation 'org.apache.grails:grails-data-hibernate5' + implementation 'org.apache.grails:grails-databinding' + implementation 'org.apache.grails:grails-gsp' + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' implementation 'org.apache.grails:grails-rest-transforms' - implementation 'org.springframework:spring-beans', { - // @Autowired - } - + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' + implementation 'org.apache.grails:grails-web-boot' + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' + runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' - runtimeOnly 'org.apache.grails:grails-data-hibernate5' - runtimeOnly 'org.apache.grails:grails-url-mappings' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' - + runtimeOnly 'org.fusesource.jansi:jansi' integrationTestImplementation testFixtures('org.apache.grails:grails-geb') - integrationTestImplementation 'org.apache.grails:grails-testing-support-web' - integrationTestImplementation 'org.spockframework:spock-core' + testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' + testImplementation 'org.spockframework:spock-core' + + // Non-default dependencies + implementation project(':core-plugin') } apply { diff --git a/plugin-core/plugin/build.gradle b/plugin-core/plugin/build.gradle index aba065e2b..bf7759351 100644 --- a/plugin-core/plugin/build.gradle +++ b/plugin-core/plugin/build.gradle @@ -55,7 +55,7 @@ dependencies { api 'org.springframework:spring-web' implementation 'org.apache.commons:commons-text' - implementation "org.ehcache:ehcache" + implementation 'org.ehcache:ehcache' // required because of spring caching usage implementation 'org.apache.grails.bootstrap:grails-bootstrap' implementation 'org.apache.grails:grails-rest-transforms' implementation 'org.apache.grails:grails-converters' @@ -73,6 +73,7 @@ dependencies { runtimeOnly 'org.apache.grails:grails-services' // A service is defined in the plugin + testImplementation platform("org.apache.grails:grails-bom:$grailsVersion") testImplementation 'org.apache.grails:grails-testing-support-datamapping' testImplementation 'org.apache.grails:grails-testing-support-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' @@ -92,3 +93,7 @@ apply { from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') } + +grails { + springDependencyManagement = false +} diff --git a/plugin-ldap/examples/custom-user-details-context-mapper/build.gradle b/plugin-ldap/examples/custom-user-details-context-mapper/build.gradle index 3eeed6ab8..d8a92ab62 100644 --- a/plugin-ldap/examples/custom-user-details-context-mapper/build.gradle +++ b/plugin-ldap/examples/custom-user-details-context-mapper/build.gradle @@ -18,44 +18,53 @@ */ plugins { - id 'org.apache.grails.gradle.grails-web' id 'cloud.wondrify.asset-pipeline' + id 'org.apache.grails.gradle.grails-web' + id 'org.apache.grails.gradle.grails-gsp' } group = 'misc.functional.test.app' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation project(':ldap-plugin') implementation 'org.apache.grails:grails-core' + implementation 'org.apache.grails:grails-data-hibernate5' + implementation 'org.apache.grails:grails-databinding' + implementation 'org.apache.grails:grails-gsp' + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' implementation 'org.apache.grails:grails-web-boot' - implementation 'org.apache.grails:grails-gsp' - - // 3rd party client-side assets bundled in webjars - implementation 'org.webjars:bootstrap:4.1.3' - implementation 'org.webjars:jquery:3.3.1' - - // to not depend on an external ldap server - implementation "com.unboundid:unboundid-ldapsdk:$unboundidLdapSdk" - + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' runtimeOnly 'org.fusesource.jansi:jansi' - runtimeOnly 'org.apache.grails:grails-i18n' - runtimeOnly 'org.apache.grails:grails-databinding' - runtimeOnly 'org.apache.grails:grails-url-mappings' - runtimeOnly 'org.apache.grails:grails-data-hibernate5' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' - runtimeOnly 'org.springframework.boot:spring-boot-starter-validation' - integrationTestImplementation testFixtures('org.apache.grails:grails-geb') - integrationTestImplementation 'org.apache.grails:grails-testing-support-web' - integrationTestImplementation 'org.spockframework:spock-core' + testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' + testImplementation 'org.spockframework:spock-core' + + // Non-default dependencies + implementation project(':ldap-plugin') + + // to not depend on an external ldap server + implementation "com.unboundid:unboundid-ldapsdk:$unboundidLdapSdk" + + // TODO: Use javascript dependencies from the bom so they are the same across projects #1142 + implementation 'org.webjars:bootstrap:4.1.3' + implementation 'org.webjars:jquery:3.3.1' } assets.excludes = ['webjars/**'] diff --git a/plugin-ldap/examples/functional-test-app/build.gradle b/plugin-ldap/examples/functional-test-app/build.gradle index dfeca50c2..8aa24c26c 100644 --- a/plugin-ldap/examples/functional-test-app/build.gradle +++ b/plugin-ldap/examples/functional-test-app/build.gradle @@ -17,46 +17,53 @@ * under the License. */ -import asset.pipeline.gradle.AssetPipelineExtension - plugins { - id 'org.apache.grails.gradle.grails-web' id 'cloud.wondrify.asset-pipeline' + id 'org.apache.grails.gradle.grails-web' + id 'org.apache.grails.gradle.grails-gsp' } group = 'com.test' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation project(':ldap-plugin') - implementation "org.apache.directory.server:apacheds-core:$apacheDsVersion" - implementation "org.apache.directory.server:apacheds-protocol-ldap:$apacheDsVersion" implementation 'org.apache.grails:grails-core' + implementation 'org.apache.grails:grails-data-hibernate5' + implementation 'org.apache.grails:grails-databinding' + implementation 'org.apache.grails:grails-gsp' + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' implementation 'org.apache.grails:grails-web-boot' - implementation 'org.apache.grails:grails-gsp' - - // 3rd party client-side assets bundled in webjars - implementation 'org.webjars:bootstrap:4.1.3' - implementation 'org.webjars:jquery:3.3.1' - + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' runtimeOnly 'org.fusesource.jansi:jansi' - runtimeOnly 'org.apache.grails:grails-i18n' - runtimeOnly 'org.apache.grails:grails-databinding' - runtimeOnly 'org.apache.grails:grails-services' - runtimeOnly 'org.apache.grails:grails-url-mappings' - runtimeOnly 'org.apache.grails:grails-data-hibernate5' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' - runtimeOnly 'org.springframework.boot:spring-boot-starter-validation' - integrationTestImplementation testFixtures('org.apache.grails:grails-geb') - integrationTestImplementation 'org.spockframework:spock-core' + testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' + testImplementation 'org.spockframework:spock-core' + + // Non-default dependencies + implementation project(':ldap-plugin') + implementation "org.apache.directory.server:apacheds-core:$apacheDsVersion" + implementation "org.apache.directory.server:apacheds-protocol-ldap:$apacheDsVersion" + + // TODO: Use javascript dependencies from the bom so they are the same across projects #1142 + implementation 'org.webjars:bootstrap:4.1.3' + implementation 'org.webjars:jquery:3.3.1' } assets.excludes = ['webjars/**'] diff --git a/plugin-ldap/examples/retrieve-db-roles/build.gradle b/plugin-ldap/examples/retrieve-db-roles/build.gradle index e3985586d..60aac4620 100644 --- a/plugin-ldap/examples/retrieve-db-roles/build.gradle +++ b/plugin-ldap/examples/retrieve-db-roles/build.gradle @@ -18,50 +18,60 @@ */ plugins { - id 'org.apache.grails.gradle.grails-web' id 'cloud.wondrify.asset-pipeline' + id 'org.apache.grails.gradle.grails-web' + id 'org.apache.grails.gradle.grails-gsp' } group = 'misc.functional.test.app' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation project(':ldap-plugin') implementation 'org.apache.grails:grails-core' - implementation "org.apache.grails:grails-rest-transforms" - implementation 'org.apache.grails:grails-web-boot' + implementation 'org.apache.grails:grails-data-hibernate5' + implementation 'org.apache.grails:grails-databinding' implementation 'org.apache.grails:grails-gsp' - - // 3rd party client-side assets bundled in webjars - implementation 'org.webjars:bootstrap:4.1.3' - implementation 'org.webjars:jquery:3.3.1' - + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' + implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' + implementation 'org.apache.grails:grails-web-boot' + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' runtimeOnly 'org.fusesource.jansi:jansi' - runtimeOnly 'org.apache.grails:grails-i18n' - runtimeOnly 'org.apache.grails:grails-databinding' - runtimeOnly 'org.apache.grails:grails-services' - runtimeOnly 'org.apache.grails:grails-url-mappings' - runtimeOnly 'org.apache.grails:grails-data-hibernate5' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-actuator' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' - runtimeOnly 'org.springframework.boot:spring-boot-starter-validation' - integrationTestImplementation testFixtures('org.apache.grails:grails-geb') + testImplementation 'org.apache.grails:grails-testing-support-datamapping' testImplementation 'org.apache.grails:grails-testing-support-web' testImplementation 'org.spockframework:spock-core' -} -assets.excludes = ['webjars/**'] + // Non-default dependencies + implementation project(':ldap-plugin') + + // to not depend on an external ldap server + implementation "com.unboundid:unboundid-ldapsdk:$unboundidLdapSdk" + + // TODO: Use javascript dependencies from the bom so they are the same across projects #1142 + implementation 'org.webjars:bootstrap:4.1.3' + implementation 'org.webjars:jquery:3.3.1' +} apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/examples-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') -} \ No newline at end of file +} + +assets.excludes = ['webjars/**'] \ No newline at end of file diff --git a/plugin-ldap/examples/retrieve-db-roles/grails-app/conf/application.groovy b/plugin-ldap/examples/retrieve-db-roles/grails-app/conf/application.groovy index 4d95b4d8e..95feab552 100644 --- a/plugin-ldap/examples/retrieve-db-roles/grails-app/conf/application.groovy +++ b/plugin-ldap/examples/retrieve-db-roles/grails-app/conf/application.groovy @@ -47,13 +47,12 @@ grails { authorityJoinClassName = 'com.test.UserRole' } - // http://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/ ldap { - context { - managerDn = 'cn=read-only-admin,dc=example,dc=com' - managerPassword = 'password' - server = 'ldap://ldap.forumsys.com:389/' //'ldap://[ip]:[port]/' - } + context { + managerDn = 'cn=admin,dc=example,dc=com' + managerPassword = 'secret' + server = System.getProperty('grails.test.ldap.url') + } authorities { ignorePartialResultException = true retrieveGroupRoles = false diff --git a/plugin-ldap/examples/retrieve-db-roles/grails-app/init/com/test/Application.groovy b/plugin-ldap/examples/retrieve-db-roles/grails-app/init/com/test/Application.groovy index 56e851526..0deae45af 100644 --- a/plugin-ldap/examples/retrieve-db-roles/grails-app/init/com/test/Application.groovy +++ b/plugin-ldap/examples/retrieve-db-roles/grails-app/init/com/test/Application.groovy @@ -19,6 +19,11 @@ package com.test +import com.unboundid.ldap.listener.InMemoryDirectoryServer +import com.unboundid.ldap.listener.InMemoryDirectoryServerConfig +import com.unboundid.ldap.listener.InMemoryListenerConfig +import com.unboundid.ldap.sdk.Attribute +import com.unboundid.ldap.sdk.Entry import grails.boot.GrailsApp import grails.boot.config.GrailsAutoConfiguration @@ -26,7 +31,113 @@ import groovy.transform.CompileStatic @CompileStatic class Application extends GrailsAutoConfiguration { + static InMemoryDirectoryServer directoryServer + static private Entry scientistsUnit + static void main(String[] args) { + InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig('dc=example,dc=com') + config.addAdditionalBindCredentials('cn=admin,dc=example,dc=com', 'secret') + config.setListenerConfigs( + InMemoryListenerConfig.createLDAPConfig( + 'default', + null, + 0, + null, + false, + false + ) + ) + + directoryServer = new InMemoryDirectoryServer(config) + Entry base = new Entry( + 'dc=example,dc=com', + new Attribute('objectClass', 'top', 'domain'), + new Attribute('dc', 'example')) + directoryServer.add(base) + + Entry people = new Entry( + 'ou=people,dc=example,dc=com', + new Attribute('objectClass', 'top', 'organizationalUnit'), + new Attribute('ou', 'people')); + directoryServer.add(people) + + def mathematiciansUnit = new Entry('ou=mathematicians,dc=example,dc=com', + new Attribute('objectClass', 'top', 'organizationalUnit'), + new Attribute('ou', 'mathematicians')) + directoryServer.add(mathematiciansUnit) + + scientistsUnit = new Entry('ou=scientists,dc=example,dc=com', + new Attribute('objectClass', 'top', 'organizationalUnit'), + new Attribute('ou', 'scientists')) + directoryServer.add(scientistsUnit) + + Entry jane = new Entry( + 'uid=jane,ou=people,dc=example,dc=com', + new Attribute('objectClass', 'inetOrgPerson'), + new Attribute('uid', 'jane'), + new Attribute('cn', 'Jane Doe'), + new Attribute('sn', 'Doe'), + new Attribute('mail', 'jane@example.com'), + new Attribute('telephoneNumber', '+1 555 111 2222'), + new Attribute('userPassword', 'password') + ) + directoryServer.add(jane) + + for (String uid : ['riemann', 'gauss', 'euler', 'euclid']) { + directoryServer.add(new Entry( + "uid=${uid},ou=mathematicians,dc=example,dc=com" as String, + new Attribute('objectClass', 'inetOrgPerson'), + new Attribute('uid', uid), + new Attribute('cn', uid.substring(0, 1).toUpperCase() + uid.substring(1)), + new Attribute('sn', uid.substring(0, 1).toUpperCase() + uid.substring(1)), + new Attribute('userPassword', 'password') + )) + } + + Entry mathGroup = new Entry( + 'cn=mathematicians,ou=mathematicians,dc=example,dc=com', + new Attribute('objectClass', 'top', 'groupOfUniqueNames'), + new Attribute('cn', 'mathematicians'), + new Attribute('uniqueMember', + 'uid=riemann,ou=mathematicians,dc=example,dc=com', + 'uid=gauss,ou=mathematicians,dc=example,dc=com', + 'uid=euler,ou=mathematicians,dc=example,dc=com', + 'uid=euclid,ou=mathematicians,dc=example,dc=com')) + directoryServer.add(mathGroup) + + for (String uid : ['einstein', 'newton', 'galieleo', 'tesla']) { + directoryServer.add(new Entry( + "uid=${uid},ou=scientists,dc=example,dc=com" as String, + new Attribute('objectClass', 'inetOrgPerson'), + new Attribute('uid', uid), + new Attribute('cn', uid.substring(0, 1).toUpperCase() + uid.substring(1)), + new Attribute('sn', uid.substring(0, 1).toUpperCase() + uid.substring(1)), + new Attribute('userPassword', 'password') + )) + } + Entry scientistGroup = new Entry( + 'cn=scientists,ou=scientists,dc=example,dc=com', + new Attribute('objectClass', 'top', 'groupOfUniqueNames'), + new Attribute('cn', 'scientists'), + new Attribute('uniqueMember', + 'uid=einstein,ou=scientists,dc=example,dc=com', + 'uid=newton,ou=scientists,dc=example,dc=com', + 'uid=galieleo,ou=scientists,dc=example,dc=com', + 'uid=tesla,ou=scientists,dc=example,dc=com')) + directoryServer.add(scientistGroup) + + directoryServer.startListening() + + System.setProperty('grails.test.ldap.url', "ldap://localhost:${directoryServer.getListenPort()}" as String) + GrailsApp.run(Application, args) } + + @Override + void onShutdown(Map event) { + if (directoryServer) { + directoryServer.close() + directoryServer = null + } + } } \ No newline at end of file diff --git a/plugin-ldap/examples/retrieve-group-roles/build.gradle b/plugin-ldap/examples/retrieve-group-roles/build.gradle index 1c2c3ba05..7ff2a8dfa 100644 --- a/plugin-ldap/examples/retrieve-group-roles/build.gradle +++ b/plugin-ldap/examples/retrieve-group-roles/build.gradle @@ -18,51 +18,54 @@ */ plugins { - id 'org.apache.grails.gradle.grails-web' id 'cloud.wondrify.asset-pipeline' + id 'org.apache.grails.gradle.grails-web' + id 'org.apache.grails.gradle.grails-gsp' } group = 'misc.functional.test.app' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") implementation 'org.apache.grails:grails-core' + implementation 'org.apache.grails:grails-data-hibernate5' + implementation 'org.apache.grails:grails-databinding' + implementation 'org.apache.grails:grails-gsp' + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' implementation 'org.apache.grails:grails-web-boot' - implementation 'org.apache.grails:grails-gsp' - - // 3rd party client-side assets bundled in webjars - implementation 'org.webjars:bootstrap:4.1.3' - implementation 'org.webjars:jquery:3.3.1' - - // to not depend on an external ldap server - implementation "com.unboundid:unboundid-ldapsdk:$unboundidLdapSdk" - + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' runtimeOnly 'org.fusesource.jansi:jansi' - runtimeOnly 'org.apache.grails:grails-i18n' - runtimeOnly 'org.apache.grails:grails-databinding' - runtimeOnly 'org.apache.grails:grails-url-mappings' - runtimeOnly 'org.apache.grails:grails-services' - runtimeOnly 'org.apache.grails:grails-data-hibernate5' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' - integrationTestImplementation testFixtures('org.apache.grails:grails-geb') - integrationTestImplementation 'org.apache.grails.bootstrap:grails-bootstrap', { - // Environment - } - integrationTestImplementation 'org.apache.grails:grails-testing-support-web' - integrationTestImplementation 'org.spockframework:spock-core' + testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' + testImplementation 'org.spockframework:spock-core' + // Non-default dependencies implementation project(':ldap-plugin') -} -assets.excludes = ['webjars/**'] + // to not depend on an external ldap server + implementation "com.unboundid:unboundid-ldapsdk:$unboundidLdapSdk" + + // TODO: Use javascript dependencies from the bom so they are the same across projects #1142 + implementation 'org.webjars:bootstrap:4.1.3' + implementation 'org.webjars:jquery:3.3.1' +} apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') @@ -70,3 +73,5 @@ apply { from rootProject.layout.projectDirectory.file('gradle/examples-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') } + +assets.excludes = ['webjars/**'] diff --git a/plugin-ldap/plugin/build.gradle b/plugin-ldap/plugin/build.gradle index 58a73b3cf..633b5407e 100644 --- a/plugin-ldap/plugin/build.gradle +++ b/plugin-ldap/plugin/build.gradle @@ -52,6 +52,7 @@ dependencies { runtimeOnly 'org.apache.grails:grails-web-boot' + testImplementation platform("org.apache.grails:grails-bom:$grailsVersion") testImplementation 'org.apache.grails:grails-testing-support-web' } @@ -62,4 +63,8 @@ apply { from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') +} + +grails { + springDependencyManagement = false } \ No newline at end of file diff --git a/plugin-oauth2/plugin/build.gradle b/plugin-oauth2/plugin/build.gradle index 8b2612194..f69ccd452 100644 --- a/plugin-oauth2/plugin/build.gradle +++ b/plugin-oauth2/plugin/build.gradle @@ -100,10 +100,11 @@ dependencies { } compileOnly 'org.apache.groovy:groovy' // Provided as this is a Grails plugin - integrationTestImplementation 'org.apache.grails:grails-testing-support-web' - integrationTestImplementation 'org.spockframework:spock-core' + testImplementation platform("org.apache.grails:grails-bom:$grailsVersion") + testImplementation 'org.apache.grails:grails-testing-support-web' + testImplementation 'org.spockframework:spock-core' - integrationTestRuntimeOnly 'net.bytebuddy:byte-buddy' + testRuntimeOnly 'net.bytebuddy:byte-buddy' } apply { @@ -113,4 +114,8 @@ apply { from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') +} + +grails { + springDependencyManagement = false } \ No newline at end of file diff --git a/plugin-rest/spring-security-rest-gorm/build.gradle b/plugin-rest/spring-security-rest-gorm/build.gradle index 98afa9fc2..24532fa42 100644 --- a/plugin-rest/spring-security-rest-gorm/build.gradle +++ b/plugin-rest/spring-security-rest-gorm/build.gradle @@ -60,4 +60,8 @@ apply { from rootProject.layout.projectDirectory.file('gradle/groovydoc-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') +} + +grails { + springDependencyManagement = false } \ No newline at end of file diff --git a/plugin-rest/spring-security-rest-grailscache/build.gradle b/plugin-rest/spring-security-rest-grailscache/build.gradle index e7065bb2f..06ef7a4c6 100644 --- a/plugin-rest/spring-security-rest-grailscache/build.gradle +++ b/plugin-rest/spring-security-rest-grailscache/build.gradle @@ -62,6 +62,7 @@ dependencies { compileOnly 'org.apache.grails:grails-core' // Provided as this is a Grails plugin compileOnly 'org.apache.groovy:groovy' // Provided as this is a Grails plugin + testImplementation platform("org.apache.grails:grails-bom:$grailsVersion") testImplementation 'org.spockframework:spock-core' } @@ -72,4 +73,8 @@ apply { from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') +} + +grails { + springDependencyManagement = false } \ No newline at end of file diff --git a/plugin-rest/spring-security-rest-memcached/build.gradle b/plugin-rest/spring-security-rest-memcached/build.gradle index d8d9a7472..38ec14a33 100644 --- a/plugin-rest/spring-security-rest-memcached/build.gradle +++ b/plugin-rest/spring-security-rest-memcached/build.gradle @@ -65,4 +65,8 @@ apply { from rootProject.layout.projectDirectory.file('gradle/groovydoc-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') +} + +grails { + springDependencyManagement = false } \ No newline at end of file diff --git a/plugin-rest/spring-security-rest-redis/build.gradle b/plugin-rest/spring-security-rest-redis/build.gradle index 732488581..1516023b8 100644 --- a/plugin-rest/spring-security-rest-redis/build.gradle +++ b/plugin-rest/spring-security-rest-redis/build.gradle @@ -71,4 +71,8 @@ apply { from rootProject.layout.projectDirectory.file('gradle/groovydoc-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') +} + +grails { + springDependencyManagement = false } \ No newline at end of file diff --git a/plugin-rest/spring-security-rest/build.gradle b/plugin-rest/spring-security-rest/build.gradle index 0f9859bf3..3523c221d 100644 --- a/plugin-rest/spring-security-rest/build.gradle +++ b/plugin-rest/spring-security-rest/build.gradle @@ -118,6 +118,7 @@ dependencies { // api: FilterChain, HttpServletResponse, HttpServletRequest, ServletException, ServletRequest, ServletResponse } + testImplementation platform("org.apache.grails:grails-bom:$grailsVersion") testImplementation "org.pac4j:pac4j-oauth:$pac4jVersion", { // impl: CasOAuthWrapperClient } @@ -136,4 +137,8 @@ apply { from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') +} + +grails { + springDependencyManagement = false } \ No newline at end of file diff --git a/plugin-ui/examples/extended/build.gradle b/plugin-ui/examples/extended/build.gradle index affdf5a5e..84a2320dc 100644 --- a/plugin-ui/examples/extended/build.gradle +++ b/plugin-ui/examples/extended/build.gradle @@ -26,40 +26,44 @@ plugins { group = 'functional.test' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation project(':acl-plugin') - implementation project(':core-plugin') - implementation project(':ui-plugin') implementation 'org.apache.grails:grails-core' - implementation 'org.apache.grails:grails-interceptors' - implementation 'org.apache.grails:grails-databinding' - implementation 'org.apache.grails:grails-rest-transforms' // Needed for respond method in controllers implementation 'org.apache.grails:grails-data-hibernate5' - - implementation "dumbster:dumbster:$dumbsterVersion", { transitive = false } // Uses javax - implementation "org.grails.plugins:grails-mail:$mailVersion" - - compileOnly 'org.slf4j:slf4j-nop' // Remove warning about missing slf4j implementation during gsp compilation - + implementation 'org.apache.grails:grails-databinding' + implementation 'org.apache.grails:grails-gsp' + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' + implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' + implementation 'org.apache.grails:grails-web-boot' + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' - runtimeOnly 'org.apache.grails:grails-i18n' - runtimeOnly 'org.apache.grails:grails-services' - runtimeOnly 'org.apache.grails:grails-url-mappings' runtimeOnly 'org.fusesource.jansi:jansi' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' - + integrationTestImplementation testFixtures('org.apache.grails:grails-geb') testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' testImplementation 'org.spockframework:spock-core' - integrationTestImplementation testFixtures('org.apache.grails:grails-geb') -} + // Non-default dependencies + implementation project(':acl-plugin') + implementation project(':core-plugin') + implementation project(':ui-plugin') -assets.excludes = ['webjars/**'] + implementation "dumbster:dumbster:$dumbsterVersion", { transitive = false } // Uses javax + implementation "org.grails.plugins:grails-mail:$mailVersion" +} apply { from rootProject.layout.projectDirectory.file('gradle/java-config.gradle') @@ -67,4 +71,6 @@ apply { from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/examples-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') -} \ No newline at end of file +} + +assets.excludes = ['webjars/**'] \ No newline at end of file diff --git a/plugin-ui/examples/simple/build.gradle b/plugin-ui/examples/simple/build.gradle index 29fa44939..d907601c5 100644 --- a/plugin-ui/examples/simple/build.gradle +++ b/plugin-ui/examples/simple/build.gradle @@ -18,40 +18,50 @@ */ plugins { + id 'cloud.wondrify.asset-pipeline' id 'org.apache.grails.gradle.grails-web' id 'org.apache.grails.gradle.grails-gsp' - id 'cloud.wondrify.asset-pipeline' } group = 'functional.test' dependencies { - + profile 'org.apache.grails.profiles:web' implementation platform("org.apache.grails:grails-bom:$grailsVersion") - implementation project(':core-plugin') - implementation project(':ui-plugin') implementation 'org.apache.grails:grails-core' - implementation 'org.apache.grails:grails-interceptors' - implementation 'org.apache.grails:grails-databinding' implementation 'org.apache.grails:grails-data-hibernate5' - - implementation "dumbster:dumbster:$dumbsterVersion", { transitive = false } // Uses javax - implementation "org.grails.plugins:grails-mail:$mailVersion" - - compileOnly 'org.slf4j:slf4j-nop' // Remove warning about missing slf4j implementation during gsp compilation - + implementation 'org.apache.grails:grails-databinding' + implementation 'org.apache.grails:grails-gsp' + implementation 'org.apache.grails:grails-i18n' + implementation 'org.apache.grails:grails-interceptors' + implementation 'org.apache.grails:grails-logging' + implementation 'org.apache.grails:grails-rest-transforms' + implementation 'org.apache.grails:grails-scaffolding' + implementation 'org.apache.grails:grails-services' + implementation 'org.apache.grails:grails-url-mappings' + implementation 'org.apache.grails:grails-web-boot' + implementation 'org.springframework.boot:spring-boot-autoconfigure' + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-logging' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + implementation 'org.springframework.boot:spring-boot-starter-validation' + console 'org.apache.grails:grails-console' runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.zaxxer:HikariCP' - runtimeOnly 'org.apache.grails:grails-i18n' - runtimeOnly 'org.apache.grails:grails-services' - runtimeOnly 'org.apache.grails:grails-url-mappings' runtimeOnly 'org.fusesource.jansi:jansi' - runtimeOnly 'org.springframework.boot:spring-boot-autoconfigure' - runtimeOnly 'org.springframework.boot:spring-boot-starter-logging' - runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat' - integrationTestImplementation testFixtures('org.apache.grails:grails-geb') + testImplementation 'org.apache.grails:grails-testing-support-datamapping' + testImplementation 'org.apache.grails:grails-testing-support-web' + testImplementation 'org.spockframework:spock-core' + + // Non-default dependencies + implementation project(':core-plugin') + implementation project(':ui-plugin') + + implementation "dumbster:dumbster:$dumbsterVersion", { transitive = false } // Uses javax + implementation "org.grails.plugins:grails-mail:$mailVersion" } assets { diff --git a/plugin-ui/plugin/build.gradle b/plugin-ui/plugin/build.gradle index c84ad8021..a4cda469f 100644 --- a/plugin-ui/plugin/build.gradle +++ b/plugin-ui/plugin/build.gradle @@ -64,6 +64,7 @@ dependencies { runtimeOnly 'cloud.wondrify:asset-pipeline-grails' runtimeOnly 'org.apache.grails:grails-i18n' + testImplementation platform("org.apache.grails:grails-bom:$grailsVersion") testImplementation 'org.apache.grails:grails-testing-support-web' testImplementation 'org.spockframework:spock-core' } @@ -94,4 +95,8 @@ apply { from rootProject.layout.projectDirectory.file('gradle/test-config.gradle') from rootProject.layout.projectDirectory.file('gradle/publish-config.gradle') from rootProject.layout.projectDirectory.file('gradle/reproducible-config.gradle') +} + +grails { + springDependencyManagement = false } \ No newline at end of file