| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  | require "sinatra/base" | 
					
						
							|  |  |  | require "sinatra/streaming" | 
					
						
							| 
									
										
										
										
											2015-01-27 13:18:26 +03:00
										 |  |  | require "json" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-16 12:54:16 +03:00
										 |  |  | require "fog" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-25 16:01:22 +03:00
										 |  |  | require "auth/devops_auth" | 
					
						
							| 
									
										
										
										
											2015-07-16 17:18:55 +03:00
										 |  |  | require "exceptions/invalid_record" | 
					
						
							|  |  |  | require "exceptions/record_not_found" | 
					
						
							| 
									
										
										
										
											2015-07-16 12:54:16 +03:00
										 |  |  | require "exceptions/dependency_error" | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  | require "exceptions/conflict_exception" | 
					
						
							| 
									
										
										
										
											2015-08-03 15:09:04 +03:00
										 |  |  | require "exceptions/parser_error" | 
					
						
							|  |  |  | require "exceptions/validation_error" | 
					
						
							| 
									
										
										
										
											2015-07-16 17:18:55 +03:00
										 |  |  | require 'core/devops-logger' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require_relative "../helpers/version_2" | 
					
						
							| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-22 14:22:04 +03:00
										 |  |  | module Devops | 
					
						
							| 
									
										
										
										
											2015-06-25 11:13:46 +03:00
										 |  |  |   class Api2 < Sinatra::Base | 
					
						
							| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |       include Sinatra::JSON | 
					
						
							|  |  |  |       helpers Sinatra::Streaming | 
					
						
							| 
									
										
										
										
											2015-07-16 17:18:55 +03:00
										 |  |  |       helpers Devops::API2_0::Helpers | 
					
						
							| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 12:20:30 +03:00
										 |  |  |       register Sinatra::DevopsAuth | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  |       configure :production do | 
					
						
							| 
									
										
										
										
											2015-07-16 17:18:55 +03:00
										 |  |  |         config = DevopsConfig.config | 
					
						
							|  |  |  |         log_file = File.join(config[:log_dir], "devops-api2.log") | 
					
						
							|  |  |  |         logger = DevopsLogger.create(log_file, Logger::DEBUG) | 
					
						
							|  |  |  |         use Rack::CommonLogger, logger | 
					
						
							| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  |         disable :dump_errors | 
					
						
							|  |  |  |         disable :show_exceptions | 
					
						
							|  |  |  |         set :logging, Logger::INFO | 
					
						
							| 
									
										
										
										
											2015-06-25 11:13:46 +03:00
										 |  |  |         puts "Production mode" | 
					
						
							| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       configure :development do | 
					
						
							| 
									
										
										
										
											2015-07-16 17:18:55 +03:00
										 |  |  |         config = DevopsConfig.config | 
					
						
							|  |  |  |         log_file = File.join(config[:log_dir], "devops-api2.log") | 
					
						
							|  |  |  |         logger = DevopsLogger.create(log_file, Logger::DEBUG) | 
					
						
							|  |  |  |         use Rack::CommonLogger, logger | 
					
						
							| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  |         disable :raise_errors | 
					
						
							| 
									
										
										
										
											2015-08-03 15:09:04 +03:00
										 |  |  |         #set :show_exceptions, :after_handler | 
					
						
							|  |  |  |         set :show_exceptions, false | 
					
						
							|  |  |  |         #set :dump_errors, false | 
					
						
							| 
									
										
										
										
											2015-07-16 17:18:55 +03:00
										 |  |  |         logger.info "Development mode" | 
					
						
							| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       not_found do | 
					
						
							|  |  |  |         "Not found" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 15:09:04 +03:00
										 |  |  |       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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  |       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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-27 15:40:10 +03:00
										 |  |  |       error ConflictException do | 
					
						
							|  |  |  |         e = env["sinatra.error"] | 
					
						
							|  |  |  |         logger.warn e.message | 
					
						
							|  |  |  |         halt_response(e.message, 409) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  |       error InvalidPrivileges do | 
					
						
							|  |  |  |         e = env["sinatra.error"] | 
					
						
							|  |  |  |         logger.warn e.message | 
					
						
							|  |  |  |         halt_response(e.message, 401) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-11 15:10:05 +03:00
										 |  |  |       error Excon::Errors::Error do | 
					
						
							|  |  |  |         e = env["sinatra.error"] | 
					
						
							|  |  |  |         logger.warn e.message | 
					
						
							|  |  |  |         halt_response(e.message, 400) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-12 13:30:49 +03:00
										 |  |  | =begin | 
					
						
							|  |  |  |       error ::Excon::Errors::Unauthorized do | 
					
						
							| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  |         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 | 
					
						
							| 
									
										
										
										
											2015-02-12 13:30:49 +03:00
										 |  |  | =end | 
					
						
							| 
									
										
										
										
											2015-01-26 15:02:58 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |       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) | 
					
						
							| 
									
										
										
										
											2014-05-08 15:34:26 +04:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | end |