48 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require 'sinatra/base' | ||
|  | require "sinatra/json" | ||
|  | 
 | ||
|  | require "providers/provider_factory" | ||
|  | 
 | ||
|  | module Sinatra | ||
|  |   module Version2_0 | ||
|  |     module Request | ||
|  |       module Helpers | ||
|  | 
 | ||
|  |         # Check request headers | ||
|  |         def check_headers *headers | ||
|  |           ha = (headers.empty? ? [:accept, :content_type] : headers) | ||
|  |           ha.each do |h| | ||
|  |             case h | ||
|  |             when :accept, "accept" | ||
|  |               accept_json | ||
|  |             when :content_type, "content_type" | ||
|  |               request_json | ||
|  |             end | ||
|  |           end | ||
|  |         end | ||
|  | 
 | ||
|  |         # Check Accept header | ||
|  |         # | ||
|  |         # Can client works with JSON? | ||
|  |         def accept_json | ||
|  |           logger.debug(request.accept) | ||
|  |           unless request.accept? 'application/json' | ||
|  |             response.headers['Accept'] = 'application/json' | ||
|  |             halt_response("Accept header should contains 'application/json' type", 406) | ||
|  |           end | ||
|  |         rescue NoMethodError => e | ||
|  |           #error in sinatra 1.4.4 (https://github.com/sinatra/sinatra/issues/844, https://github.com/sinatra/sinatra/pull/805) | ||
|  |           response.headers['Accept'] = 'application/json' | ||
|  |           halt_response("Accept header should contains 'application/json' type", 406) | ||
|  |         end | ||
|  | 
 | ||
|  |         # Check Content-Type header | ||
|  |         def request_json | ||
|  |           halt_response("Content-Type should be 'application/json'", 415) if request.media_type.nil? or request.media_type != 'application/json' | ||
|  |         end | ||
|  | 
 | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | end |