74 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			74 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|  | require "json" | ||
|  | require "exceptions/parser_error" | ||
|  | require "exceptions/validation_error" | ||
|  | 
 | ||
|  | module Devops | ||
|  |   module API2_0 | ||
|  |     module ParserHelpers | ||
|  | 
 | ||
|  |       def create_object_from_json_body type=Hash, empty_body=false | ||
|  |         json = request.body.read.strip | ||
|  |         return nil if json.empty? and empty_body | ||
|  |         @body_json = begin | ||
|  |           ::JSON.parse(json) | ||
|  |         rescue ::JSON::ParserError => e | ||
|  |           DevopsLogger.logger.error e.message | ||
|  |           raise Devops::ParserError.new("Invalid JSON: #{e.message}") | ||
|  |         end | ||
|  |         raise Devops::ParserError.new("Invalid JSON, it should be an #{type == Array ? "array" : "object"}") unless @body_json.is_a?(type) | ||
|  |         @body_json | ||
|  |       end | ||
|  | 
 | ||
|  |       def check_provider provider | ||
|  |         list = ::Provider::ProviderFactory.providers | ||
|  |         raise Devops::ValidationError.new("Invalid provider '#{provider}', available providers: '#{list.join("', '")}'") unless list.include?(provider) | ||
|  |       end | ||
|  | 
 | ||
|  |       def check_string val, msg, _nil=false, empty=false | ||
|  |         check_param val, String, msg, _nil, empty | ||
|  |       end | ||
|  | 
 | ||
|  |       def check_array val, msg, vals_type=String, _nil=false, empty=false | ||
|  |         check_param val, Array, msg, _nil, empty | ||
|  |         val.each {|v| raise Devops::ValidationError.new(msg) unless v.is_a?(vals_type)} unless val.nil? | ||
|  |         val | ||
|  |       end | ||
|  | 
 | ||
|  |       def check_filename file_name, not_string_msg, json_resp=true | ||
|  |         check_string file_name, not_string_msg | ||
|  |         r = Regexp.new("^[\\w _\\-.]{1,255}$", Regexp::IGNORECASE) | ||
|  |         if r.match(file_name).nil? | ||
|  |           msg = "Invalid file name '#{file_name}'. Expected name with 'a'-'z', '0'-'9', ' ', '_', '-', '.' symbols with length greate then 0 and less then 256 " | ||
|  |           raise Devops::ValidationError.new(msg, json_resp) | ||
|  | =begin | ||
|  |           if json_resp | ||
|  |             halt_response(msg) | ||
|  |           else | ||
|  |             halt(400, msg) | ||
|  |           end | ||
|  | =end | ||
|  |         end | ||
|  |         file_name | ||
|  |       end | ||
|  | 
 | ||
|  |       def check_param val, type, msg, _nil=false, empty=false | ||
|  |         if val.nil? | ||
|  |           if _nil | ||
|  |             return val | ||
|  |           else | ||
|  |             raise Devops::ValidationError.new(msg) | ||
|  |           end | ||
|  |         end | ||
|  |         if val.is_a?(type) | ||
|  |           raise Devops::ValidationError.new(msg) if val.empty? and !empty | ||
|  |           val | ||
|  |         else | ||
|  |           raise Devops::ValidationError.new(msg) | ||
|  |         end | ||
|  |       end | ||
|  | 
 | ||
|  |     end | ||
|  |   end | ||
|  | end | ||
|  | 
 |