Skip to content

Commit d02e230

Browse files
Fix #1039: Make client certificate mapper support Spring Boot 3
* let it choose v2 of the jar when SB3 is detected * otherwise, continue as before with default v1
1 parent 9e24737 commit d02e230

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

config/client_certificate_mapper.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@
1616
# Container security provider configuration
1717
---
1818
version: 1.+
19-
repository_root: "{default.repository.root}/client-certificate-mapper"
19+
version_lines:
20+
- 2.+
21+
repository_root: "https://anthonydahanne.github.io/java-buildpack-client-certificate-mapper"

lib/java_buildpack/framework/client_certificate_mapper.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,28 @@
1717

1818
require 'java_buildpack/component/versioned_dependency_component'
1919
require 'java_buildpack/framework'
20+
require 'java_buildpack/util/spring_boot_utils'
2021

2122
module JavaBuildpack
2223
module Framework
2324

2425
# Encapsulates the functionality for contributing an mTLS client certificate mapper to the application.
2526
class ClientCertificateMapper < JavaBuildpack::Component::VersionedDependencyComponent
27+
include JavaBuildpack::Util
28+
29+
def initialize(context)
30+
@spring_boot_utils = JavaBuildpack::Util::SpringBootUtils.new
31+
@configuration = context[:configuration]
32+
super(context)
33+
end
2634

2735
# (see JavaBuildpack::Component::BaseComponent#compile)
2836
def compile
37+
if spring_boot_3?
38+
spring_boot_3_configuration = @configuration
39+
spring_boot_3_configuration['version'] = '2.+'
40+
@version, @uri = JavaBuildpack::Repository::ConfiguredItem.find_item(@component_name, spring_boot_3_configuration)
41+
end
2942
download_jar
3043
@droplet.additional_libraries << (@droplet.sandbox + jar_name)
3144
end
@@ -42,6 +55,14 @@ def supports?
4255
true
4356
end
4457

58+
private
59+
60+
def spring_boot_3?
61+
# print '@application.details: ' + @application.details.to_s
62+
@spring_boot_utils.is?(@application) && Gem::Version.new((@spring_boot_utils.version @application)).release >=
63+
Gem::Version.new('3.0.0')
64+
end
65+
4566
end
4667

4768
end

spec/java_buildpack/framework/client_certificate_mapper_spec.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,21 @@
3333

3434
expect(sandbox + "client_certificate_mapper-#{version}.jar").to exist
3535
expect(additional_libraries).to include(sandbox + "client_certificate_mapper-#{version}.jar")
36+
# version was not patched by the compile step
37+
expect(configuration).to eq({})
38+
end
39+
40+
41+
it 'configures client certificate mapper to download version 2.+ during compile of spring boot 3 app',
42+
app_fixture: 'framework_java_cf_boot_3',
43+
cache_fixture: 'stub-client-certificate-mapper.jar' do
44+
45+
component.compile
46+
47+
expect(sandbox + "client_certificate_mapper-#{version}.jar").to exist
48+
expect(additional_libraries).to include(sandbox + "client_certificate_mapper-#{version}.jar")
49+
# version of the dep. was forced to 2.+ by the compile step, because Spring Boot 3 was found
50+
expect(configuration).to eq({ 'version' => '2.+' })
3651
end
3752

3853
it 'adds the jar to the additional libraries during release',

0 commit comments

Comments
 (0)