140 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "sinatra/base"
 | |
| require "sinatra/streaming"
 | |
| require "json"
 | |
| 
 | |
| require "fog"
 | |
| 
 | |
| require "exceptions/invalid_record"
 | |
| require "exceptions/record_not_found"
 | |
| require "exceptions/dependency_error"
 | |
| require "exceptions/conflict_exception"
 | |
| require "exceptions/parser_error"
 | |
| require "exceptions/validation_error"
 | |
| require 'core/devops-logger'
 | |
| 
 | |
| require_relative "../helpers/version_2"
 | |
| 
 | |
| module Devops
 | |
|   class Api2 < Sinatra::Base
 | |
| 
 | |
|       include Sinatra::JSON
 | |
|       helpers Sinatra::Streaming
 | |
|       helpers Devops::API2_0::Helpers
 | |
| 
 | |
|       register Sinatra::DevopsAuth
 | |
| 
 | |
|       configure :production do
 | |
|         config = DevopsConfig.config
 | |
|         log_file = File.join(config[:log_dir], "devops-api2.log")
 | |
|         logger = DevopsLogger.create(log_file, Logger::DEBUG)
 | |
|         use Rack::CommonLogger, logger
 | |
|         disable :dump_errors
 | |
|         disable :show_exceptions
 | |
|         set :logging, Logger::INFO
 | |
|         puts "Production mode"
 | |
|       end
 | |
| 
 | |
|       configure :development do
 | |
|         config = DevopsConfig.config
 | |
|         log_file = File.join(config[:log_dir], "devops-api2.log")
 | |
|         logger = DevopsLogger.create(log_file, Logger::DEBUG)
 | |
|         use Rack::CommonLogger, logger
 | |
|         disable :raise_errors
 | |
|         #set :show_exceptions, :after_handler
 | |
|         set :show_exceptions, false
 | |
|         #set :dump_errors, false
 | |
|         logger.info "Development mode"
 | |
|       end
 | |
| 
 | |
|       not_found do
 | |
|         "Not found"
 | |
|       end
 | |
| 
 | |
|       error Devops::ValidationError do
 | |
|         e = env["sinatra.error"]
 | |
|         #logger.warn e.message
 | |
|         halt_response(e.message, 400)
 | |
|       end
 | |
| 
 | |
|       error Devops::ParserError do
 | |
|         e = env["sinatra.error"]
 | |
|         #logger.warn e.message
 | |
|         halt_response(e.message, 400)
 | |
|       end
 | |
| 
 | |
|       error RecordNotFound do
 | |
|         e = env["sinatra.error"]
 | |
|         logger.warn e.message
 | |
|         halt_response(e.message, 404)
 | |
|       end
 | |
| 
 | |
|       error InvalidRecord do
 | |
|         e = env["sinatra.error"]
 | |
|         logger.warn e.message
 | |
|         logger.warn "Request body: #{request.body.read}"
 | |
|         halt_response(e.message, 400)
 | |
|       end
 | |
| 
 | |
|       error InvalidCommand do
 | |
|         e = env["sinatra.error"]
 | |
|         logger.warn e.message
 | |
|         halt_response(e.message, 400)
 | |
|       end
 | |
| 
 | |
|       error DependencyError do
 | |
|         e = env["sinatra.error"]
 | |
|         logger.warn e.message
 | |
|         halt_response(e.message, 400)
 | |
|       end
 | |
| 
 | |
|       error ConflictException do
 | |
|         e = env["sinatra.error"]
 | |
|         logger.warn e.message
 | |
|         halt_response(e.message, 409)
 | |
|       end
 | |
| 
 | |
|       error InvalidPrivileges do
 | |
|         e = env["sinatra.error"]
 | |
|         logger.warn e.message
 | |
|         halt_response(e.message, 401)
 | |
|       end
 | |
| 
 | |
|       error Excon::Errors::Error do
 | |
|         e = env["sinatra.error"]
 | |
|         logger.warn e.message
 | |
|         halt_response(e.message, 400)
 | |
|       end
 | |
| 
 | |
|       error ::Excon::Errors::Unauthorized do
 | |
|         e = env["sinatra.error"]
 | |
|         resp = e.response
 | |
|         ct = resp.headers["Content-Type"]
 | |
|         msg = unless ct.nil?
 | |
|           if ct.include?("application/json")
 | |
|             json = ::Chef::JSONCompat.from_json(resp.body)
 | |
|             m = "ERROR: Unauthorized (#{json['error']['code']}): #{json['error']['message']}"
 | |
|             logger.error(m)
 | |
|           else
 | |
|           end
 | |
|           m
 | |
|         else
 | |
|           "Unauthorized: #{e.inspect}"
 | |
|         end
 | |
|         halt_response(msg, 500)
 | |
|       end
 | |
| 
 | |
|       error Fog::Compute::AWS::Error do
 | |
|         e = env["sinatra.error"]
 | |
|         logger.error e.message
 | |
|         halt_response(e.message, 500)
 | |
|       end
 | |
| 
 | |
|       error do
 | |
|         e = env["sinatra.error"]
 | |
|         logger.error e.message
 | |
|         halt_response(e.message, 500)
 | |
|       end
 | |
| 
 | |
|     end
 | |
| end
 | 
