From 8a6c0e8c4f9239d1e8dce4263f96ed6f1e3a5070 Mon Sep 17 00:00:00 2001 From: treydock Date: Thu, 16 Jun 2022 11:03:53 -0400 Subject: [PATCH] Fix realm and other resources to handle names with spaces (#249) * Fix realm and other resources to handle names with spaces Fixes #248 * Do not escape everything, just spaces --- lib/puppet/provider/keycloak_api.rb | 10 +++++++--- spec/acceptance/2_realm_spec.rb | 10 ++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/puppet/provider/keycloak_api.rb b/lib/puppet/provider/keycloak_api.rb index 93e8f216..e534c0d9 100644 --- a/lib/puppet/provider/keycloak_api.rb +++ b/lib/puppet/provider/keycloak_api.rb @@ -41,6 +41,10 @@ def camelize(*args) self.class.camelize(*args) end + def self.escape(str) + str.gsub(' ', '%20') + end + def convert_property_value(value) case value when :true @@ -58,7 +62,7 @@ def self.kcadm(action, resource, realm = nil, file = nil, fields = nil, print_id arguments = [action] # get-roles does not accept a resource as its parameter - arguments << resource if resource + arguments << self.escape(resource) if resource if ['create', 'update'].include?(action) && !print_id arguments << '-o' @@ -66,7 +70,7 @@ def self.kcadm(action, resource, realm = nil, file = nil, fields = nil, print_id if realm arguments << '-r' - arguments << realm + arguments << self.escape(realm) end if file arguments << '-f' @@ -96,7 +100,7 @@ def self.kcadm(action, resource, realm = nil, file = nil, fields = nil, print_id auth_arguments = [ '--no-config', '--server', server, - '--realm', self.realm, + '--realm', self.escape(self.realm), '--user', user, '--password', password ] diff --git a/spec/acceptance/2_realm_spec.rb b/spec/acceptance/2_realm_spec.rb index 53dcd9bf..3d648e60 100644 --- a/spec/acceptance/2_realm_spec.rb +++ b/spec/acceptance/2_realm_spec.rb @@ -35,6 +35,9 @@ class { 'keycloak': } offline_session_max_lifespan => 5184000, offline_session_max_lifespan_enabled => true, } + keycloak_realm { 'test realm': + ensure => 'present', + } EOS apply_manifest(pp, catch_failures: true) @@ -54,6 +57,13 @@ class { 'keycloak': } end end + it 'created a realm with space in name' do + on hosts, '/opt/keycloak/bin/kcadm-wrapper.sh get realms/test%20realm' do + data = JSON.parse(stdout) + expect(data['id']).to eq('test realm') + end + end + it 'has left default-client-scopes' do on hosts, '/opt/keycloak/bin/kcadm-wrapper.sh get realms/test/default-default-client-scopes' do data = JSON.parse(stdout)