cas.gradle 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. // CAS sample build file
  2. import org.apache.tools.ant.filters.ReplaceTokens
  3. apply plugin: 'war'
  4. apply plugin: 'jetty'
  5. apply plugin: 'groovy'
  6. def excludeModules = ['spring-security-acl', 'jsr250-api', 'spring-jdbc', 'spring-tx']
  7. def jettyVersion = '7.1.6.v20100715'
  8. def keystore = "$rootDir/samples/certificates/server.jks"
  9. def password = 'password'
  10. configurations {
  11. casServer
  12. excludeModules.each {name ->
  13. runtime.exclude module: name
  14. }
  15. runtime.exclude group: 'org.aspectj'
  16. integrationTestCompile.extendsFrom groovy
  17. }
  18. sourceSets.integrationTest {
  19. groovy.srcDir file('src/integration-test/groovy')
  20. }
  21. eclipseClasspath {
  22. plusConfigurations += configurations.integrationTestRuntime
  23. }
  24. dependencies {
  25. groovy 'org.codehaus.groovy:groovy:1.7.7'
  26. casServer "org.jasig.cas:cas-server-webapp:3.4.3.1@war"
  27. providedCompile 'javax.servlet:servlet-api:2.5@jar'
  28. compile project(':spring-security-core'),
  29. project(':spring-security-cas'),
  30. "org.jasig.cas.client:cas-client-core:3.1.12"
  31. runtime project(':spring-security-web'),
  32. project(':spring-security-config'),
  33. "org.slf4j:jcl-over-slf4j:$slf4jVersion",
  34. "ch.qos.logback:logback-classic:$logbackVersion"
  35. integrationTestCompile project(':spring-security-cas'),
  36. 'org.seleniumhq.selenium:selenium-htmlunit-driver:2.0a7',
  37. 'org.spockframework:spock-core:0.4-groovy-1.7',
  38. 'org.codehaus.geb:geb-spock:0.5.1',
  39. 'commons-httpclient:commons-httpclient:3.1',
  40. "org.eclipse.jetty:jetty-server:$jettyVersion",
  41. "org.eclipse.jetty:jetty-servlet:$jettyVersion"
  42. }
  43. [jettyRun, jettyRunWar]*.configure {
  44. contextPath = "/cas-sample"
  45. def httpConnector = new org.mortbay.jetty.nio.SelectChannelConnector();
  46. httpConnector.port = 8080
  47. httpConnector.confidentialPort = 8443
  48. def httpsConnector = new org.mortbay.jetty.security.SslSocketConnector();
  49. httpsConnector.port = 8443
  50. httpsConnector.keystore = httpsConnector.truststore = keystore
  51. httpsConnector.keyPassword = httpsConnector.trustPassword = password
  52. connectors = [httpConnector, httpsConnector]
  53. doFirst() {
  54. System.setProperty('cas.server.host', casServer.httpsHost)
  55. System.setProperty('cas.service.host', jettyRunWar.httpsHost)
  56. }
  57. }
  58. task casServerOverlay(type: Sync) {
  59. war = configurations.casServer.resolve().toArray()[0]
  60. warName = war.name.replace('.war','-custom')
  61. overlayDir = file('src/cas-server-overlay/webapp')
  62. explodedWar = file("$buildDir/tmp/${warName}")
  63. customWar = file("$buildDir/tmp/${warName}.war")
  64. tokens = [logLevel: 'INFO']
  65. inputs.files(war, overlayDir)
  66. inputs.property('tokens',{tokens})
  67. outputs.files(customWar,explodedWar,file("$buildDir/tmp/expandedArchives"))
  68. from zipTree(war)
  69. from (overlayDir) {
  70. filter(ReplaceTokens,tokens: tokens)
  71. }
  72. into explodedWar
  73. doLast {
  74. if(customWar.exists()) {
  75. customWar.delete()
  76. }
  77. ant.zip(destfile: customWar, baseDir: explodedWar)
  78. }
  79. }
  80. casServerOverlay.metaClass.setLogLevel { level ->
  81. tokens['logLevel'] = level
  82. }
  83. task casServer (type: org.gradle.api.plugins.jetty.JettyRunWar, dependsOn: 'casServerOverlay') {
  84. contextPath = "/cas"
  85. connectors = [new org.mortbay.jetty.security.SslSocketConnector()]
  86. connectors[0].port = 9443
  87. connectors[0].keystore = connectors[0].truststore = keystore
  88. connectors[0].keyPassword = connectors[0].trustPassword = password
  89. connectors[0].wantClientAuth = true
  90. connectors[0].needClientAuth = false
  91. webApp = casServerOverlay.customWar
  92. inputs.file casServerOverlay.customWar
  93. doFirst() {
  94. System.setProperty('javax.net.ssl.trustStore', keystore)
  95. System.setProperty('javax.net.ssl.trustStorePassword', password)
  96. }
  97. }
  98. task cas (dependsOn: [jettyRunWar, casServer]) {
  99. }
  100. integrationTest.dependsOn cas
  101. integrationTest.doFirst {
  102. systemProperties['cas.server.host'] = casServer.httpsHost
  103. systemProperties['cas.service.host'] = jettyRunWar.httpsHost
  104. systemProperties['jar.path'] = jar.archivePath
  105. systemProperties['javax.net.ssl.trustStore'] = keystore
  106. systemProperties['javax.net.ssl.trustStorePassword'] = password
  107. }
  108. gradle.taskGraph.whenReady {graph ->
  109. if (graph.hasTask(cas)) {
  110. jettyRunWar.dependsOn(casServer)
  111. casServer.daemon = true
  112. }
  113. if(graph.hasTask(integrationTest)) {
  114. casServerOverlay.logLevel = 'ERROR'
  115. jettyRunWar.additionalRuntimeJars += file("src/integration-test/resources")
  116. jettyRunWar.daemon = true
  117. jettyRunWar.httpConnector.port = availablePort()
  118. jettyRunWar.httpsConnector.port = jettyRunWar.httpConnector.confidentialPort = availablePort()
  119. casServer.httpsConnector.port = availablePort()
  120. }
  121. }
  122. [casServer,jettyRunWar]*.metaClass*.getHttpsConnector {->
  123. delegate.connectors.find { it instanceof org.mortbay.jetty.security.SslSocketConnector }
  124. }
  125. [casServer,jettyRunWar]*.metaClass*.getHttpsHost {->
  126. "localhost:"+delegate.httpsConnector.port
  127. }
  128. jettyRunWar.metaClass.getHttpConnector {->
  129. delegate.connectors.find { it instanceof org.mortbay.jetty.nio.SelectChannelConnector }
  130. }
  131. def availablePort() {
  132. ServerSocket server = new ServerSocket(0)
  133. int port = server.localPort
  134. server.close()
  135. port
  136. }