82 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.5 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_boolean val, msg
 | |
|         begin
 | |
|           check_param val, TrueClass, msg, false, true
 | |
|         rescue
 | |
|           check_param val, FalseClass, msg, false, true
 | |
|         end
 | |
|       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 !empty && val.empty?
 | |
|           val
 | |
|         else
 | |
|           raise Devops::ValidationError.new(msg)
 | |
|         end
 | |
|       end
 | |
| 
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 |