buildscript { repositories { mavenLocal() mavenCentral() jcenter() } dependencies { classpath 'org.akhikhl.gretty:gretty:2.0.0' } ext.keyStoreDir = "$buildDir/keystore" ext.httpsKeyStoreDir = "$buildDir/https-keystore" } apply plugin: 'kotlin' apply plugin: 'war' apply plugin: 'org.akhikhl.gretty' description 'Server side of SGX remote attestation process' /* * R3 Proprietary and Confidential * * Copyright (c) 2018 R3 Limited. All rights reserved. * * The intellectual and technical concepts contained herein are proprietary to R3 and its suppliers and are protected by trade secret law. * * Distribution of this file or any portion thereof via any medium without the express permission of R3 is strictly prohibited. */ import org.akhikhl.gretty.AppStartTask import org.akhikhl.gretty.AppStopTask configurations { integrationTestCompile.extendsFrom testCompile integrationTestRuntime.extendsFrom testRuntime } sourceSets { integrationTest { kotlin { compileClasspath += main.compileClasspath + test.compileClasspath runtimeClasspath += main.runtimeClasspath + test.runtimeClasspath //noinspection GroovyAssignabilityCheck srcDir file('src/integration-test/kotlin') } } } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" testCompile "junit:junit:$junit_version" compile "org.bouncycastle:bcpkix-jdk15on:$bouncycastle_version" compile "org.jboss.resteasy:resteasy-jaxrs:$resteasy_version" compile "org.jboss.resteasy:resteasy-jackson2-provider:$resteasy_version" compile "org.jboss.resteasy:resteasy-servlet-initializer:$resteasy_version" compile "com.fasterxml.jackson.core:jackson-core:$jackson_version" compile "com.fasterxml.jackson.core:jackson-databind:$jackson_version" compile "com.fasterxml.jackson.core:jackson-annotations:$jackson_version" compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jackson_version" compile "org.apache.httpcomponents:httpclient:$httpclient_version" compile "org.apache.logging.log4j:log4j-slf4j-impl:$log4j_version" compile "org.apache.logging.log4j:log4j-core:$log4j_version" runtime "org.apache.logging.log4j:log4j-web:$log4j_version" compile "org.slf4j:jcl-over-slf4j:$slf4j_version" } tasks.withType(Test) { // Enable "unlimited" encryption. systemProperties["java.security.properties"] = "$projectDir/src/integration-test/security.properties" } task intelKeyStores(type: Exec) { doFirst { mkdir keyStoreDir } inputs.dir "$projectDir/src/main/ssl/intel-ssl" outputs.dir keyStoreDir workingDir keyStoreDir commandLine "$projectDir/src/main/ssl/intel-ssl/generate-keystores.sh" } task serviceKeyStore(type: Exec) { doFirst { mkdir keyStoreDir } inputs.dir "$projectDir/src/main/ssl/service-key" outputs.dir keyStoreDir workingDir keyStoreDir commandLine "$projectDir/src/main/ssl/service-key/generate-keystore.sh" } processResources { dependsOn.addAll intelKeyStores, serviceKeyStore from keyStoreDir } task integrationTest(type: Test) { testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath systemProperties["javax.net.ssl.keyStore"] = "$httpsKeyStoreDir/keystore" systemProperties["javax.net.ssl.keyStorePassword"] = "attestation" systemProperties["test.isv.httpPort"] = testHttpPort } task httpsKeyStores(type: Exec) { doFirst { mkdir httpsKeyStoreDir } inputs.dir "$projectDir/src/integration-test/ssl" outputs.dir httpsKeyStoreDir workingDir httpsKeyStoreDir commandLine "$projectDir/src/integration-test/ssl/generate-ssl.sh" } project.afterEvaluate { appBeforeIntegrationTest.dependsOn httpsKeyStores } gretty { httpPort = testHttpPort contextPath = "/" servletContainer = 'tomcat8' logDir = "$buildDir/logs" logFileName = "gretty-test" integrationTestTask = 'integrationTest' jvmArgs = [ "-Dorg.jboss.logging.provider=slf4j", "-Djava.security.properties=$projectDir/src/integration-test/security.properties", "-Djavax.net.ssl.keyStore=$httpsKeyStoreDir/keystore", "-Djavax.net.ssl.keyStorePassword=attestation", "-Djavax.net.ssl.trustStore=$httpsKeyStoreDir/truststore", "-Djavax.net.ssl.trustStorePassword=attestation", "-Dattestation.home=$buildDir/logs", "-Dias.host=localhost:$iasTestHttpsPort", ] httpsPort = iasTestHttpsPort httpsEnabled = true sslNeedClientAuth = true sslKeyStorePath = "$httpsKeyStoreDir/keystore" sslKeyStorePassword = 'attestation' sslKeyManagerPassword = 'attestation' } task('startISV', type: AppStartTask, dependsOn: war) { prepareServerConfig { httpPort = isvHttpPort servletContainer = 'tomcat8' logDir = "$buildDir/logs" logFileName = "gretty-isv" jvmArgs = [ "-Dorg.jboss.logging.provider=slf4j", "-Djava.security.properties=$projectDir/src/main/security.properties", "-Djavax.net.ssl.keyStore=$keyStoreDir/isv.pfx", "-Djavax.net.ssl.keyStorePassword=attestation", "-Dias.host=test-as.sgx.trustedservices.intel.com", "-Dattestation.home=$buildDir/logs", ] httpsEnabled = false } prepareWebAppConfig { contextPath = "/" inplace = false } interactive = false } task("stopISV", type: AppStopTask)