Skip to content

Commit 69286d2

Browse files
committed
Merge branch '432-compile-jre-first' into 3.x
2 parents 91d0a6e + c8f48c3 commit 69286d2

10 files changed

Lines changed: 123 additions & 65 deletions

config/components.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,5 @@ frameworks:
5858
- "JavaBuildpack::Framework::SpringAutoReconfiguration"
5959
- "JavaBuildpack::Framework::SpringInsight"
6060
- "JavaBuildpack::Framework::YourKitProfiler"
61+
- "JavaBuildpack::Framework::SecurityProviders"
6162
- "JavaBuildpack::Framework::JavaOpts"

lib/java_buildpack/buildpack.rb

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,10 @@ def compile
6060

6161
container = component_detection('container', @containers, true).first
6262
no_container unless container
63-
jre = component_detection('JRE', @jres, true).first
64-
frameworks = component_detection('framework', @frameworks, false)
6563

66-
frameworks.each(&:compile)
67-
jre.compile
64+
component_detection('JRE', @jres, true).first.compile
65+
component_detection('framework', @frameworks, false).each(&:compile)
66+
6867
container.compile
6968
end
7069

@@ -75,15 +74,13 @@ def compile
7574
def release
7675
container = component_detection('container', @containers, true).first
7776
no_container unless container
78-
jre = component_detection('JRE', @jres, true).first
79-
frameworks = component_detection('framework', @frameworks, false)
80-
81-
frameworks.map(&:release)
8277

8378
commands = []
84-
commands << jre.release
85-
commands << container.release
79+
commands << component_detection('JRE', @jres, true).first.release
8680

81+
component_detection('framework', @frameworks, false).map(&:release)
82+
83+
commands << container.release
8784
command = commands.flatten.compact.join(' && ')
8885

8986
payload = {

lib/java_buildpack/framework/container_security_provider.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class ContainerSecurityProvider < JavaBuildpack::Component::VersionedDependencyC
2727
# (see JavaBuildpack::Component::BaseComponent#compile)
2828
def compile
2929
download_jar
30-
@droplet.security_providers << 'org.cloudfoundry.security.CloudFoundryContainerProvider'
30+
@droplet.security_providers.insert 1, 'org.cloudfoundry.security.CloudFoundryContainerProvider'
3131
end
3232

3333
# (see JavaBuildpack::Component::BaseComponent#release)

lib/java_buildpack/framework/dyadic_ekm_security_provider.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def compile
3131
setup_ext_dir
3232

3333
@droplet.copy_resources
34-
@droplet.security_providers << 'com.dyadicsec.provider.DYCryptoProvider'
34+
@droplet.security_providers.insert 2, 'com.dyadicsec.provider.DYCryptoProvider'
3535

3636
credentials = @application.services.find_service(FILTER)['credentials']
3737
write_key credentials['key']

lib/java_buildpack/framework/luna_security_provider.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def compile
3131
setup_ext_dir
3232

3333
@droplet.copy_resources
34-
@droplet.security_providers << 'com.safenetinc.luna.provider.LunaProvider'
34+
@droplet.security_providers.insert 2, 'com.safenetinc.luna.provider.LunaProvider'
3535

3636
credentials = @application.services.find_service(FILTER)['credentials']
3737
write_client credentials['client']

lib/java_buildpack/framework/protect_app_security_provider.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def compile
3232
download_zip false
3333

3434
@droplet.copy_resources
35-
@droplet.security_providers << 'com.ingrian.security.nae.IngrianProvider'
35+
@droplet.security_providers.insert 2, 'com.ingrian.security.nae.IngrianProvider'
3636

3737
credentials = @application.services.find_service(FILTER)['credentials']
3838

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Cloud Foundry Java Buildpack
2+
# Copyright 2013-2017 the original author or authors.
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
16+
require 'java_buildpack/component/base_component'
17+
require 'java_buildpack/framework'
18+
require 'java_buildpack/util/dash_case'
19+
20+
module JavaBuildpack
21+
module Framework
22+
23+
# Encapsulates the functionality for contributing custom Security Providers to an application.
24+
class SecurityProviders < JavaBuildpack::Component::BaseComponent
25+
26+
# (see JavaBuildpack::Component::BaseComponent#detect)
27+
def detect
28+
SecurityProviders.to_s.dash_case
29+
end
30+
31+
# (see JavaBuildpack::Component::BaseComponent#compile)
32+
def compile
33+
@droplet.security_providers.write_to java_security
34+
end
35+
36+
# (see JavaBuildpack::Component::BaseComponent#release)
37+
def release
38+
@droplet.java_opts
39+
.add_system_property('java.ext.dirs', @droplet.extension_directories.as_paths)
40+
.add_system_property('java.security.properties', java_security)
41+
end
42+
43+
private
44+
45+
def java_security
46+
@droplet.sandbox + 'java.security'
47+
end
48+
49+
end
50+
51+
end
52+
end

lib/java_buildpack/jre/open_jdk_like_security_providers.rb

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -31,25 +31,12 @@ def detect
3131

3232
# (see JavaBuildpack::Component::BaseComponent#compile)
3333
def compile
34-
unless existing_security.nil?
35-
existing = existing_security_providers existing_security
36-
37-
@droplet.security_providers.insert 0, existing.shift
38-
@droplet.security_providers.concat existing
39-
end
40-
41-
@droplet.security_providers.write_to new_security
34+
@droplet.security_providers.concat existing_security_providers(java_security) unless java_security.nil?
4235
end
4336

4437
# (see JavaBuildpack::Component::BaseComponent#release)
4538
def release
46-
unless existing_security.nil?
47-
@droplet.extension_directories << existing_security.parent.parent + 'ext'
48-
end
49-
50-
@droplet.java_opts
51-
.add_system_property('java.ext.dirs', @droplet.extension_directories.as_paths)
52-
.add_system_property('java.security.properties', new_security)
39+
@droplet.extension_directories << java_security.parent.parent + 'ext' unless java_security.nil?
5340
end
5441

5542
private
@@ -60,12 +47,6 @@ def release
6047

6148
private_constant :JRE_SECURITY, :SERVER_JRE_SECURITY
6249

63-
def existing_security
64-
return jre_security if jre_security.exist?
65-
return server_jre_security if server_jre_security.exist?
66-
nil
67-
end
68-
6950
def existing_security_providers(existing_security)
7051
JavaBuildpack::Util::Properties.new(existing_security)
7152
.keep_if { |key, _| key =~ /security.provider/ }
@@ -77,12 +58,14 @@ def index(entry)
7758
entry.first.match(/^security\.provider\.(\d+)/).captures.first.to_i
7859
end
7960

80-
def jre_security
81-
@droplet.java_home.root + JRE_SECURITY
61+
def java_security
62+
return jre_security if jre_security.exist?
63+
return server_jre_security if server_jre_security.exist?
64+
nil
8265
end
8366

84-
def new_security
85-
@droplet.sandbox + 'java.security'
67+
def jre_security
68+
@droplet.java_home.root + JRE_SECURITY
8669
end
8770

8871
def server_jre_security
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Cloud Foundry Java Buildpack
2+
# Copyright 2013-2017 the original author or authors.
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
16+
require 'spec_helper'
17+
require 'component_helper'
18+
require 'fileutils'
19+
require 'java_buildpack/framework/security_providers'
20+
21+
describe JavaBuildpack::Framework::SecurityProviders do
22+
include_context 'component_helper'
23+
24+
it 'adds extension directories to system properties' do
25+
component.release
26+
27+
expect(java_opts).to include('-Djava.ext.dirs=$PWD/.java-buildpack/security_providers/test-extension-directory-1:' \
28+
'$PWD/.java-buildpack/security_providers/test-extension-directory-2')
29+
end
30+
31+
it 'writes new security properties' do
32+
component.compile
33+
34+
expect(sandbox + 'java.security').to exist
35+
end
36+
37+
it 'adds security properties to system properties' do
38+
component.release
39+
40+
expect(java_opts).to include('-Djava.security.properties=$PWD/.java-buildpack/security_providers/' \
41+
'java.security')
42+
end
43+
44+
end

spec/java_buildpack/jre/open_jdk_like_security_providers_spec.rb

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,22 @@
2121
describe JavaBuildpack::Jre::OpenJDKLikeSecurityProviders do
2222
include_context 'component_helper'
2323

24-
it 'adds extension directories with no JRE default to system properties' do
24+
it 'does not add extension directories with no JRE default' do
2525
component.release
2626

27-
expect(java_opts).to include('-Djava.ext.dirs=$PWD/.java-buildpack/open_jdk_like_security_providers/' \
28-
'test-extension-directory-1:$PWD/.java-buildpack/open_jdk_like_security_providers/' \
29-
'test-extension-directory-2')
27+
expect(extension_directories).to contain_exactly(sandbox + 'test-extension-directory-1',
28+
sandbox + 'test-extension-directory-2')
3029
end
3130

3231
it 'adds security providers' do
33-
3432
FileUtils.mkdir_p(java_home.root + 'lib/security')
3533
FileUtils.cp 'spec/fixtures/java.security', java_home.root + 'lib/security'
3634

3735
component.compile
3836

39-
expect(security_providers).to eq %w[sun.security.provider.Sun
40-
test-security-provider-1
37+
expect(security_providers).to eq %w[test-security-provider-1
4138
test-security-provider-2
39+
sun.security.provider.Sun
4240
sun.security.rsa.SunRsaSign sun.security.ec.SunEC
4341
com.sun.net.ssl.internal.ssl.Provider
4442
com.sun.crypto.provider.SunJCE
@@ -49,37 +47,20 @@
4947
apple.security.AppleProvider]
5048
end
5149

52-
it 'writes new security properties' do
53-
component.compile
54-
55-
expect(sandbox + 'java.security').to exist
56-
end
57-
5850
it 'adds extension directories with JRE default to system properties' do
5951
FileUtils.mkdir_p(java_home.root + 'lib/security/java.security')
6052

6153
component.release
6254

63-
expect(java_opts).to include('-Djava.ext.dirs=$PWD/.java-buildpack/open_jdk_like_security_providers/' \
64-
'test-extension-directory-1:$PWD/.java-buildpack/open_jdk_like_security_providers/' \
65-
'test-extension-directory-2:$PWD/.test-java-home/lib/ext')
55+
expect(extension_directories).to include(java_home.root + 'lib/ext')
6656
end
6757

6858
it 'adds extension directories with Server JRE default to system properties' do
6959
FileUtils.mkdir_p(java_home.root + 'jre/lib/security/java.security')
7060

7161
component.release
7262

73-
expect(java_opts).to include('-Djava.ext.dirs=$PWD/.java-buildpack/open_jdk_like_security_providers/' \
74-
'test-extension-directory-1:$PWD/.java-buildpack/open_jdk_like_security_providers/' \
75-
'test-extension-directory-2:$PWD/.test-java-home/jre/lib/ext')
76-
end
77-
78-
it 'adds security properties to system properties' do
79-
component.release
80-
81-
expect(java_opts).to include('-Djava.security.properties=$PWD/.java-buildpack/open_jdk_like_security_providers/' \
82-
'java.security')
63+
expect(extension_directories).to include(java_home.root + 'jre/lib/ext')
8364
end
8465

8566
end

0 commit comments

Comments
 (0)