From 33413dc8f951bd78d7d12b598e4744ecc74e47bb Mon Sep 17 00:00:00 2001 From: Andrew Hodgkinson Date: Wed, 5 Mar 2025 14:20:05 +1300 Subject: [PATCH 1/2] Experimental equivalent of #142 --- .../scimitar/application_controller.rb | 3 +++ .../scimitar/application_controller_spec.rb | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/app/controllers/scimitar/application_controller.rb b/app/controllers/scimitar/application_controller.rb index e9e4c71..fb7ba0c 100644 --- a/app/controllers/scimitar/application_controller.rb +++ b/app/controllers/scimitar/application_controller.rb @@ -101,6 +101,9 @@ def require_scim request.format = :scim elsif request.format == :scim request.headers['CONTENT_TYPE'] = scim_mime_type + elsif request.user_agent.start_with?('Google') + request.format = :scim + request.headers["CONTENT_TYPE"] = scim_mime_type else handle_scim_error(ErrorResponse.new(status: 406, detail: "Only #{scim_mime_type} type is accepted.")) end diff --git a/spec/controllers/scimitar/application_controller_spec.rb b/spec/controllers/scimitar/application_controller_spec.rb index d1665cf..f56265d 100644 --- a/spec/controllers/scimitar/application_controller_spec.rb +++ b/spec/controllers/scimitar/application_controller_spec.rb @@ -291,6 +291,25 @@ def index; end expect(@exception.message).to eql('Only application/scim+json type is accepted.') end end + + context 'and with Google SCIM calls' do + it 'reaches the controller action if the expected agent is making the request' do + request.headers['Content-Type'] = 'application/json' + request.headers['User-Agent' ] = 'Google-Auto-Provisioning' + get :index + + expect(@exception).to be_a(RuntimeError) + expect(@exception.message).to eql('Bang') + end + + it 'is invoked early for unrecognised agents' do + request.headers['Content-Type'] = 'application/json' + get :index + + expect(@exception).to be_a(Scimitar::ErrorResponse) + expect(@exception.message).to eql('Only application/scim+json type is accepted.') + end + end # "context 'and with Google SCIM calls' do" end # "context 'exception reporter' do" end # "context 'error handling' do" end From 1ddbf6e340ed9d1eda0cc5cdb4d5444e53914dff Mon Sep 17 00:00:00 2001 From: Andrew Hodgkinson Date: Wed, 5 Mar 2025 14:28:27 +1300 Subject: [PATCH 2/2] Fix up & improve --- app/controllers/scimitar/application_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/scimitar/application_controller.rb b/app/controllers/scimitar/application_controller.rb index fb7ba0c..d679914 100644 --- a/app/controllers/scimitar/application_controller.rb +++ b/app/controllers/scimitar/application_controller.rb @@ -101,7 +101,7 @@ def require_scim request.format = :scim elsif request.format == :scim request.headers['CONTENT_TYPE'] = scim_mime_type - elsif request.user_agent.start_with?('Google') + elsif request.media_type.downcase == 'application/json' && request.user_agent.start_with?('Google') # https://github.com/pond/scimitar/issues/142 request.format = :scim request.headers["CONTENT_TYPE"] = scim_mime_type else